@workbench-ai/workbench-protocol 0.0.44 → 0.0.45

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.
@@ -5,9 +5,9 @@ export interface WorkbenchAdapterDefinition<TContext = unknown> {
5
5
  id: string;
6
6
  setup?: string[];
7
7
  auth?: WorkbenchAdapterAuthManifest;
8
- tasks?: WorkbenchAdapterOperationDefinition<TContext>;
9
- run?: WorkbenchAdapterOperationDefinition<TContext>;
10
- score?: WorkbenchAdapterOperationDefinition<TContext>;
8
+ engineResolve?: WorkbenchAdapterOperationDefinition<TContext>;
9
+ engineRun?: WorkbenchAdapterOperationDefinition<TContext>;
10
+ subject?: WorkbenchAdapterOperationDefinition<TContext>;
11
11
  improve?: WorkbenchAdapterOperationDefinition<TContext>;
12
12
  slots?: Record<string, WorkbenchAdapterSlotManifest>;
13
13
  }
@@ -33,13 +33,14 @@ export interface RunDefinedWorkbenchAdapterOptions<TContext = unknown> {
33
33
  runtime?: TContext;
34
34
  }
35
35
  export declare function defineAdapter<TContext = unknown>(definition: WorkbenchAdapterDefinition<TContext>): WorkbenchAdapterDefinition<TContext>;
36
- export declare function defineTaskSource<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
37
- export declare function defineRunner<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
38
- export declare function defineScorer<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
36
+ export declare function defineEngineResolver<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
37
+ export declare function defineSubject<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
38
+ export declare function defineEngineRunner<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
39
39
  export declare function defineOptimizer<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
40
40
  export declare function adapterSlot(path: string, operation: WorkbenchAdapterOperation): WorkbenchAdapterSlotManifest;
41
41
  export declare function workbenchAdapterManifestFromDefinition(definition: WorkbenchAdapterDefinition): WorkbenchAdapterManifest;
42
42
  export declare function runDefinedAdapter<TContext = unknown>(definition: WorkbenchAdapterDefinition<TContext>, options?: RunDefinedWorkbenchAdapterOptions<TContext>): Promise<WorkbenchAdapterOperationResult | null>;
43
+ export declare function runSubjectFromEngine<TContext = unknown>(context: WorkbenchAdapterHandlerContext<TContext>): Promise<WorkbenchAdapterOperationResult>;
43
44
  export declare function operationDefinitionForRequest<TContext = unknown>(definition: WorkbenchAdapterDefinition<TContext>, operation: WorkbenchAdapterOperation): WorkbenchAdapterOperationDefinition<TContext> | undefined;
44
45
  export declare function adapterResult<TValue extends WorkbenchAdapterOperationResultValue>(operation: WorkbenchAdapterOperation, value: TValue, metadata?: Omit<WorkbenchAdapterOperationResult<TValue>, "protocol" | "operation" | "value">): WorkbenchAdapterOperationResult<TValue>;
45
46
  export declare function adapterSlotInvocation(request: WorkbenchAdapterOperationRequest, slots: Record<string, WorkbenchAdapterSlotManifest> | undefined, name: string): WorkbenchAdapterInvocationLike | null;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-definition.d.ts","sourceRoot":"","sources":["../src/adapter-definition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter-definition.d.ts","sourceRoot":"","sources":["../src/adapter-definition.ts"],"names":[],"mappings":"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"}
@@ -1,36 +1,40 @@
1
1
  import { promises as fs } from "node:fs";
2
- import { adapterCommandName, } from "./adapter-manifest.js";
3
- import { WORKBENCH_ADAPTER_RESULT_PROTOCOL, ensureWorkbenchAdapterOutputDir, readWorkbenchAdapterOperationRequest, workbenchAdapterOperationResultPath, writeWorkbenchAdapterOperationResult, } from "./adapter-protocol.js";
2
+ import { execFile } from "node:child_process";
3
+ import path from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { WORKBENCH_ADAPTER_MANIFEST_PROTOCOL, adapterCommandName, normalizeWorkbenchAdapterOperation, } from "./adapter-manifest.js";
6
+ import { WORKBENCH_ADAPTER_RESULT_PROTOCOL, ensureWorkbenchAdapterOutputDir, assertWorkbenchAdapterOperationResultOk, readWorkbenchAdapterOperationRequest, readWorkbenchAdapterOperationResult, workbenchAdapterOperationResultPath, writeWorkbenchAdapterOperationResult, } from "./adapter-protocol.js";
7
+ const execFileAsync = promisify(execFile);
4
8
  export function defineAdapter(definition) {
5
9
  return definition;
6
10
  }
7
- export function defineTaskSource(definition = {}) {
11
+ export function defineEngineResolver(definition = {}) {
8
12
  return definition;
9
13
  }
10
- export function defineRunner(definition = {}) {
14
+ export function defineSubject(definition = {}) {
11
15
  return definition;
12
16
  }
13
- export function defineScorer(definition = {}) {
17
+ export function defineEngineRunner(definition = {}) {
14
18
  return definition;
15
19
  }
16
20
  export function defineOptimizer(definition = {}) {
17
21
  return definition;
18
22
  }
19
23
  export function adapterSlot(path, operation) {
20
- return { path, operation };
24
+ return { path, operation: normalizeWorkbenchAdapterOperation(operation, "adapter slot operation") };
21
25
  }
22
26
  export function workbenchAdapterManifestFromDefinition(definition) {
23
27
  const operations = {};
24
- addOperation(operations, definition.id, "tasks.resolve", definition.tasks);
25
- addOperation(operations, definition.id, "subject.run", definition.run);
26
- addOperation(operations, definition.id, "trial.score", definition.score);
27
- addOperation(operations, definition.id, "subject.improve", definition.improve);
28
+ addOperation(operations, definition.id, "engine.resolve", definition.engineResolve);
29
+ addOperation(operations, definition.id, "engine.run", definition.engineRun);
30
+ addOperation(operations, definition.id, "subject.run", definition.subject);
31
+ addOperation(operations, definition.id, "optimizer.improve", definition.improve);
28
32
  if (Object.keys(operations).length === 0) {
29
33
  throw new Error(`Adapter ${definition.id} must define at least one operation.`);
30
34
  }
31
35
  return {
32
36
  id: definition.id,
33
- protocol: "workbench.adapter.v2",
37
+ protocol: WORKBENCH_ADAPTER_MANIFEST_PROTOCOL,
34
38
  operations,
35
39
  setup: definition.setup ? [...definition.setup] : [],
36
40
  ...(definition.auth ? { auth: cloneJson(definition.auth) } : {}),
@@ -72,17 +76,82 @@ export async function runDefinedAdapter(definition, options = {}) {
72
76
  await writeWorkbenchAdapterOperationResult(request.paths.output, result);
73
77
  return result;
74
78
  }
79
+ export async function runSubjectFromEngine(context) {
80
+ if (context.operation !== "engine.run") {
81
+ throw new Error("runSubjectFromEngine can only be used while handling engine.run.");
82
+ }
83
+ const subject = context.request.context?.subject?.run;
84
+ if (!subject?.command) {
85
+ throw new Error("engine.run request context.subject.run.command is required to invoke the subject.");
86
+ }
87
+ const nestedRoot = path.join(context.paths.output, ".workbench", "internal", "subject-run", safeInternalPathSegment(context.request.id));
88
+ const nestedOutput = path.join(nestedRoot, "output");
89
+ const requestPath = path.join(nestedRoot, "request.json");
90
+ const resultPath = workbenchAdapterOperationResultPath(nestedOutput);
91
+ const subjectPaths = { ...context.paths };
92
+ delete subjectPaths.enginePrivate;
93
+ await fs.mkdir(nestedOutput, { recursive: true });
94
+ await fs.writeFile(requestPath, `${JSON.stringify({
95
+ ...context.request,
96
+ id: `${context.request.id}:subject`,
97
+ operation: "subject.run",
98
+ invocation: {
99
+ use: subject.use,
100
+ with: subject.with ?? {},
101
+ ...(subject.auth !== undefined ? { auth: subject.auth } : {}),
102
+ },
103
+ ...(context.request.auth !== undefined
104
+ ? { auth: adapterScopedAuth(context.request.auth, subject.use) }
105
+ : {}),
106
+ paths: {
107
+ ...subjectPaths,
108
+ output: nestedOutput,
109
+ result: resultPath,
110
+ },
111
+ }, null, 2)}\n`);
112
+ await execFileAsync("sh", ["-c", subject.command], {
113
+ cwd: context.paths.cwd ?? context.paths.workspace,
114
+ env: {
115
+ ...process.env,
116
+ WORKBENCH_ADAPTER_REQUEST: requestPath,
117
+ WORKBENCH_OUTPUT: nestedOutput,
118
+ WORKBENCH_RESULT: resultPath,
119
+ },
120
+ maxBuffer: 10 * 1024 * 1024,
121
+ });
122
+ const result = await readWorkbenchAdapterOperationResult(nestedOutput, "subject.run");
123
+ assertWorkbenchAdapterOperationResultOk(result, `Subject adapter ${subject.use} subject.run`);
124
+ return result;
125
+ }
126
+ function safeInternalPathSegment(value) {
127
+ const safe = value.replace(/[^a-z0-9._-]+/giu, "_").replace(/^_+|_+$/gu, "");
128
+ return safe || "subject";
129
+ }
130
+ function adapterScopedAuth(auth, adapterId) {
131
+ if (!auth || typeof auth !== "object" || Array.isArray(auth)) {
132
+ return auth;
133
+ }
134
+ const record = cloneJson(auth);
135
+ const adapters = record.adapters;
136
+ if (adapters && typeof adapters === "object" && !Array.isArray(adapters)) {
137
+ const scoped = adapters[adapterId];
138
+ if (scoped !== undefined) {
139
+ record.self = scoped;
140
+ }
141
+ }
142
+ return record;
143
+ }
75
144
  export function operationDefinitionForRequest(definition, operation) {
76
- if (operation === "tasks.resolve") {
77
- return definition.tasks;
145
+ if (operation === "engine.resolve") {
146
+ return definition.engineResolve;
78
147
  }
79
- if (operation === "subject.run") {
80
- return definition.run;
148
+ if (operation === "engine.run") {
149
+ return definition.engineRun;
81
150
  }
82
- if (operation === "trial.score") {
83
- return definition.score;
151
+ if (operation === "subject.run") {
152
+ return definition.subject;
84
153
  }
85
- if (operation === "subject.improve") {
154
+ if (operation === "optimizer.improve") {
86
155
  return definition.improve;
87
156
  }
88
157
  return undefined;
@@ -90,7 +159,7 @@ export function operationDefinitionForRequest(definition, operation) {
90
159
  export function adapterResult(operation, value, metadata = {}) {
91
160
  return {
92
161
  protocol: WORKBENCH_ADAPTER_RESULT_PROTOCOL,
93
- operation,
162
+ operation: normalizeWorkbenchAdapterOperation(operation, "adapter result operation"),
94
163
  ok: true,
95
164
  ...metadata,
96
165
  value,
@@ -1,12 +1,14 @@
1
+ export declare const WORKBENCH_ADAPTER_MANIFEST_PROTOCOL = "workbench.adapter.v3";
1
2
  export interface WorkbenchAdapterManifest {
2
3
  id: string;
3
- protocol: "workbench.adapter.v2";
4
+ protocol: typeof WORKBENCH_ADAPTER_MANIFEST_PROTOCOL;
4
5
  operations: Partial<Record<WorkbenchAdapterOperation, WorkbenchAdapterOperationManifest>>;
5
6
  setup: string[];
6
7
  auth?: WorkbenchAdapterAuthManifest;
7
8
  slots?: Record<string, WorkbenchAdapterSlotManifest>;
8
9
  }
9
- export type WorkbenchAdapterOperation = "tasks.resolve" | "subject.run" | "trial.score" | "subject.improve";
10
+ export type WorkbenchPrimitiveAdapterOperation = "engine.resolve" | "engine.run" | "subject.run" | "optimizer.improve";
11
+ export type WorkbenchAdapterOperation = WorkbenchPrimitiveAdapterOperation;
10
12
  export interface WorkbenchAdapterOperationManifest {
11
13
  command: string;
12
14
  }
@@ -58,10 +60,7 @@ export declare function collectWorkbenchAdapterOperationRequirements(roots: read
58
60
  export declare function collectWorkbenchAdapterOperationIssues(roots: readonly WorkbenchAdapterOperationRequirement[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): string[];
59
61
  export declare function assertWorkbenchAdapterOperationSupport(roots: readonly WorkbenchAdapterOperationRequirement[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): void;
60
62
  export declare function collectWorkbenchAdapterAuthRequirements(roots: readonly WorkbenchAdapterInvocationLike[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): WorkbenchAdapterAuthRequirement[];
61
- export declare function withDefaultWorkbenchAdapterAuthProfiles<T extends {
62
- improve?: WorkbenchAdapterInvocationLike;
63
- run: WorkbenchAdapterInvocationLike;
64
- score?: WorkbenchAdapterInvocationLike;
65
- }>(spec: T, manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): T;
63
+ export declare function withDefaultWorkbenchAdapterAuthProfiles<T extends Record<string, unknown>>(spec: T, manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): T;
66
64
  export declare function withDefaultWorkbenchAdapterAuth<T extends WorkbenchAdapterInvocationLike>(invocation: T, manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): T;
65
+ export declare function normalizeWorkbenchAdapterOperation(value: unknown, label: string): WorkbenchAdapterOperation;
67
66
  //# sourceMappingURL=adapter-manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-manifest.d.ts","sourceRoot":"","sources":["../src/adapter-manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter-manifest.d.ts","sourceRoot":"","sources":["../src/adapter-manifest.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,16 @@
1
1
  import YAML from "yaml";
2
+ export const WORKBENCH_ADAPTER_MANIFEST_PROTOCOL = "workbench.adapter.v3";
2
3
  export function adapterCommandName(adapterId) {
3
4
  return `workbench-adapter-${adapterId}`;
4
5
  }
5
6
  export function workbenchAdapterManifestSupportsOperation(manifest, operation) {
6
- return manifest.operations[operation] !== undefined;
7
+ return manifest.operations[normalizeWorkbenchAdapterOperation(operation, "adapter operation")] !== undefined;
7
8
  }
8
9
  export function workbenchAdapterOperationCommand(manifest, operation) {
9
- const operationManifest = manifest.operations[operation];
10
+ const normalizedOperation = normalizeWorkbenchAdapterOperation(operation, "adapter operation");
11
+ const operationManifest = manifest.operations[normalizedOperation];
10
12
  if (!operationManifest) {
11
- throw new Error(`Adapter ${manifest.id} does not implement ${operation}.`);
13
+ throw new Error(`Adapter ${manifest.id} does not implement ${normalizedOperation}.`);
12
14
  }
13
15
  return operationManifest.command;
14
16
  }
@@ -29,8 +31,8 @@ export function parseWorkbenchAdapterManifest(source, label = "workbench.adapter
29
31
  const record = parsed;
30
32
  rejectUnknownManifestKeys(record, label, ["id", "protocol", "operations", "setup", "auth", "slots"]);
31
33
  const id = readAdapterId(record.id, `${label}.id`);
32
- if (record.protocol !== "workbench.adapter.v2") {
33
- throw new Error(`${label}.protocol must be workbench.adapter.v2.`);
34
+ if (record.protocol !== WORKBENCH_ADAPTER_MANIFEST_PROTOCOL) {
35
+ throw new Error(`${label}.protocol must be ${WORKBENCH_ADAPTER_MANIFEST_PROTOCOL}.`);
34
36
  }
35
37
  const setup = record.setup === undefined
36
38
  ? []
@@ -42,7 +44,7 @@ export function parseWorkbenchAdapterManifest(source, label = "workbench.adapter
42
44
  const auth = readAuth(record.auth, `${label}.auth`);
43
45
  return {
44
46
  id,
45
- protocol: "workbench.adapter.v2",
47
+ protocol: WORKBENCH_ADAPTER_MANIFEST_PROTOCOL,
46
48
  operations,
47
49
  setup,
48
50
  ...(auth ? { auth } : {}),
@@ -61,6 +63,9 @@ function readAdapterOperations(value, label, adapterId) {
61
63
  }
62
64
  const config = rawConfig;
63
65
  rejectUnknownManifestKeys(config, `${label}.${operation}`, ["command"]);
66
+ if (operations[normalizedOperation]) {
67
+ throw new Error(`${label} declares ${normalizedOperation} more than once.`);
68
+ }
64
69
  operations[normalizedOperation] = {
65
70
  command: config.command === undefined
66
71
  ? adapterCommandName(adapterId)
@@ -116,7 +121,10 @@ export function collectWorkbenchAdapterOperationRequirements(roots, manifests) {
116
121
  const collected = [];
117
122
  const queue = roots.flatMap((root) => {
118
123
  const invocation = normalizeInvocationLike(root.invocation);
119
- return invocation ? [{ invocation, operation: root.operation }] : [];
124
+ return invocation ? [{
125
+ invocation,
126
+ operation: normalizeWorkbenchAdapterOperation(root.operation, "adapter operation requirement"),
127
+ }] : [];
120
128
  });
121
129
  while (queue.length > 0) {
122
130
  const requirement = queue.shift();
@@ -186,15 +194,17 @@ export function collectWorkbenchAdapterAuthRequirements(roots, manifests) {
186
194
  export function withDefaultWorkbenchAdapterAuthProfiles(spec, manifests) {
187
195
  const manifestById = manifestMap(manifests);
188
196
  const clone = cloneJson(spec);
189
- if (clone.improve) {
190
- clone.improve = withDefaultWorkbenchAdapterAuth(clone.improve, manifestById);
191
- }
192
- clone.run = withDefaultWorkbenchAdapterAuth(clone.run, manifestById);
193
- if (clone.score) {
194
- clone.score = withDefaultWorkbenchAdapterAuth(clone.score, manifestById);
195
- }
197
+ applyInvocationDefault(clone, "engine", manifestById);
198
+ applyInvocationDefault(clone, "run", manifestById);
199
+ applyInvocationDefault(clone, "improve", manifestById);
196
200
  return clone;
197
201
  }
202
+ function applyInvocationDefault(record, key, manifestById) {
203
+ const invocation = normalizeInvocationLike(record[key]);
204
+ if (invocation) {
205
+ record[key] = withDefaultWorkbenchAdapterAuth(invocation, manifestById);
206
+ }
207
+ }
198
208
  export function withDefaultWorkbenchAdapterAuth(invocation, manifests) {
199
209
  return applyDefaultWorkbenchAdapterAuth(cloneJson(invocation), manifestMap(manifests));
200
210
  }
@@ -402,13 +412,16 @@ function readStringArray(value, label) {
402
412
  return value.map((entry) => entry.trim());
403
413
  }
404
414
  function readAdapterOperation(value, label) {
405
- if (value === "tasks.resolve" ||
415
+ return normalizeWorkbenchAdapterOperation(value, label);
416
+ }
417
+ export function normalizeWorkbenchAdapterOperation(value, label) {
418
+ if (value === "engine.resolve" ||
419
+ value === "engine.run" ||
406
420
  value === "subject.run" ||
407
- value === "trial.score" ||
408
- value === "subject.improve") {
421
+ value === "optimizer.improve") {
409
422
  return value;
410
423
  }
411
- throw new Error(`${label} must be tasks.resolve, subject.run, trial.score, or subject.improve.`);
424
+ throw new Error(`${label} must be engine.resolve, engine.run, subject.run, or optimizer.improve.`);
412
425
  }
413
426
  function readJsonPointer(value, label) {
414
427
  const pointer = readNonEmptyString(value, label);
@@ -1,7 +1,7 @@
1
- import type { Json, UsageSummary, WorkbenchScorecard, WorkbenchSubjectPatch } from "@workbench-ai/workbench-contract";
2
- import { type WorkbenchTaskSourceResult } from "./task-source-result.ts";
1
+ import type { Json, UsageSummary, WorkbenchResult, WorkbenchSubjectPatch } from "@workbench-ai/workbench-contract";
2
+ import { type WorkbenchEngineResolveResult } from "./engine-resolve-result.ts";
3
3
  import type { WorkbenchAdapterOperation } from "./adapter-manifest.ts";
4
- export declare const WORKBENCH_ADAPTER_PROTOCOL = "workbench.adapter.v2";
4
+ export declare const WORKBENCH_ADAPTER_PROTOCOL = "workbench.adapter.v3";
5
5
  export declare const WORKBENCH_ADAPTER_RESULT_PROTOCOL = "workbench.adapter-result.v1";
6
6
  export declare const WORKBENCH_ADAPTER_RESULT_FILE = "workbench-result.json";
7
7
  export interface WorkbenchAdapterOperationRequest {
@@ -23,34 +23,39 @@ export interface WorkbenchAdapterOperationRequest {
23
23
  subject?: {
24
24
  id?: string;
25
25
  path?: string;
26
+ run?: {
27
+ use: string;
28
+ with?: Json;
29
+ auth?: Json;
30
+ command?: string;
31
+ };
26
32
  };
27
33
  optimizer?: {
28
34
  edits?: string[];
29
35
  };
30
- trial?: {
31
- trialIndex?: number;
36
+ attempt?: {
37
+ attemptIndex?: number;
32
38
  sampleIndex?: number;
33
39
  caseId?: string;
34
40
  };
35
- task?: {
36
- text?: string;
41
+ case?: {
42
+ id?: string;
43
+ prompt?: string;
37
44
  };
38
45
  };
39
46
  paths: {
40
47
  workspace: string;
41
48
  output: string;
42
49
  result: string;
43
- input?: string;
44
- task?: string;
50
+ case?: string;
45
51
  traces?: string;
46
52
  cwd?: string;
47
53
  subject?: string;
48
- tests?: string;
54
+ enginePrivate?: string;
49
55
  logs?: string;
50
- artifacts?: string;
51
56
  };
52
57
  }
53
- export type WorkbenchAdapterOperationResultValue = WorkbenchTaskSourceResult | WorkbenchScorecard | WorkbenchSubjectPatch | Json | null;
58
+ export type WorkbenchAdapterOperationResultValue = WorkbenchEngineResolveResult | WorkbenchResult | WorkbenchSubjectPatch | Json | null;
54
59
  export interface WorkbenchAdapterOperationResult<TValue extends WorkbenchAdapterOperationResultValue = WorkbenchAdapterOperationResultValue> {
55
60
  protocol: typeof WORKBENCH_ADAPTER_RESULT_PROTOCOL;
56
61
  operation: WorkbenchAdapterOperation;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-protocol.d.ts","sourceRoot":"","sources":["../src/adapter-protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter-protocol.d.ts","sourceRoot":"","sources":["../src/adapter-protocol.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { promises as fs } from "node:fs";
2
2
  import path from "node:path";
3
- import { normalizeWorkbenchTaskSourceResult, } from "./task-source-result.js";
4
- export const WORKBENCH_ADAPTER_PROTOCOL = "workbench.adapter.v2";
3
+ import { normalizeWorkbenchEngineResolveResult, } from "./engine-resolve-result.js";
4
+ import { normalizeWorkbenchAdapterOperation, } from "./adapter-manifest.js";
5
+ export const WORKBENCH_ADAPTER_PROTOCOL = "workbench.adapter.v3";
5
6
  export const WORKBENCH_ADAPTER_RESULT_PROTOCOL = "workbench.adapter-result.v1";
6
7
  export const WORKBENCH_ADAPTER_RESULT_FILE = "workbench-result.json";
7
8
  export async function readWorkbenchAdapterOperationRequest(configuredPath) {
@@ -19,6 +20,17 @@ export function normalizeWorkbenchAdapterOperationRequest(value) {
19
20
  }
20
21
  const invocation = requiredJsonRecord(record.invocation, "adapter request invocation");
21
22
  const paths = requiredJsonRecord(record.paths, "adapter request paths");
23
+ rejectUnknownJsonKeys(paths, "adapter request paths", [
24
+ "workspace",
25
+ "cwd",
26
+ "output",
27
+ "result",
28
+ "subject",
29
+ "case",
30
+ "traces",
31
+ "enginePrivate",
32
+ "logs",
33
+ ]);
22
34
  const operation = requiredOperation(record.operation, "adapter request operation");
23
35
  const use = requiredString(invocation.use, "adapter request invocation.use");
24
36
  return {
@@ -37,14 +49,12 @@ export function normalizeWorkbenchAdapterOperationRequest(value) {
37
49
  workspace: requiredString(paths.workspace, "adapter request paths.workspace"),
38
50
  output: requiredString(paths.output, "adapter request paths.output"),
39
51
  result: requiredString(paths.result, "adapter request paths.result"),
40
- ...(typeof paths.input === "string" ? { input: paths.input } : {}),
41
- ...(typeof paths.task === "string" ? { task: paths.task } : {}),
52
+ ...(typeof paths.case === "string" ? { case: paths.case } : {}),
42
53
  ...(typeof paths.traces === "string" ? { traces: paths.traces } : {}),
43
54
  ...(typeof paths.cwd === "string" ? { cwd: paths.cwd } : {}),
44
55
  ...(typeof paths.subject === "string" ? { subject: paths.subject } : {}),
45
- ...(typeof paths.tests === "string" ? { tests: paths.tests } : {}),
56
+ ...(typeof paths.enginePrivate === "string" ? { enginePrivate: paths.enginePrivate } : {}),
46
57
  ...(typeof paths.logs === "string" ? { logs: paths.logs } : {}),
47
- ...(typeof paths.artifacts === "string" ? { artifacts: paths.artifacts } : {}),
48
58
  },
49
59
  };
50
60
  }
@@ -70,8 +80,11 @@ export function normalizeWorkbenchAdapterOperationResult(value, operation) {
70
80
  throw new Error(`${WORKBENCH_ADAPTER_RESULT_FILE}.protocol must be ${WORKBENCH_ADAPTER_RESULT_PROTOCOL}.`);
71
81
  }
72
82
  const resultOperation = requiredOperation(record.operation, `${WORKBENCH_ADAPTER_RESULT_FILE}.operation`);
73
- if (operation && resultOperation !== operation) {
74
- throw new Error(`${WORKBENCH_ADAPTER_RESULT_FILE}.operation must be ${operation}.`);
83
+ const expectedOperation = operation
84
+ ? normalizeWorkbenchAdapterOperation(operation, "expected adapter result operation")
85
+ : undefined;
86
+ if (expectedOperation && resultOperation !== expectedOperation) {
87
+ throw new Error(`${WORKBENCH_ADAPTER_RESULT_FILE}.operation must be ${expectedOperation}.`);
75
88
  }
76
89
  return {
77
90
  protocol: WORKBENCH_ADAPTER_RESULT_PROTOCOL,
@@ -92,13 +105,13 @@ export function assertWorkbenchAdapterOperationResultOk(result, label = "Adapter
92
105
  throw new Error(`${label} returned ok false${result.summary ? `: ${result.summary}` : "."}`);
93
106
  }
94
107
  function normalizeOperationResultValue(operation, value) {
95
- if (operation === "tasks.resolve") {
96
- return normalizeWorkbenchTaskSourceResult(value);
108
+ if (operation === "engine.resolve") {
109
+ return normalizeWorkbenchEngineResolveResult(value);
97
110
  }
98
- if (operation === "trial.score") {
99
- return normalizeScorecard(value, `${WORKBENCH_ADAPTER_RESULT_FILE}.value`);
111
+ if (operation === "engine.run") {
112
+ return normalizeResult(value, `${WORKBENCH_ADAPTER_RESULT_FILE}.value`);
100
113
  }
101
- if (operation === "subject.improve") {
114
+ if (operation === "optimizer.improve") {
102
115
  return normalizeSubjectPatch(value, `${WORKBENCH_ADAPTER_RESULT_FILE}.value`);
103
116
  }
104
117
  if (value === undefined || value === null) {
@@ -112,8 +125,8 @@ function normalizeAdapterRequestContext(value) {
112
125
  ...(record.benchmark !== undefined ? { benchmark: normalizeBenchmarkContext(record.benchmark) } : {}),
113
126
  ...(record.subject !== undefined ? { subject: normalizeSubjectContext(record.subject) } : {}),
114
127
  ...(record.optimizer !== undefined ? { optimizer: normalizeOptimizerContext(record.optimizer) } : {}),
115
- ...(record.trial !== undefined ? { trial: normalizeTrialContext(record.trial) } : {}),
116
- ...(record.task !== undefined ? { task: normalizeTaskContext(record.task) } : {}),
128
+ ...(record.attempt !== undefined ? { attempt: normalizeAttemptContext(record.attempt) } : {}),
129
+ ...(record.case !== undefined ? { case: normalizeCaseContext(record.case) } : {}),
117
130
  };
118
131
  }
119
132
  function normalizeBenchmarkContext(value) {
@@ -128,6 +141,17 @@ function normalizeSubjectContext(value) {
128
141
  return {
129
142
  ...(typeof record.id === "string" ? { id: record.id } : {}),
130
143
  ...(typeof record.path === "string" ? { path: record.path } : {}),
144
+ ...(record.run !== undefined ? { run: normalizeContextInvocation(record.run, "adapter request context.subject.run") } : {}),
145
+ };
146
+ }
147
+ function normalizeContextInvocation(value, label) {
148
+ const record = requiredJsonRecord(value, label);
149
+ const use = requiredString(record.use, `${label}.use`);
150
+ return {
151
+ use,
152
+ with: record.with !== undefined ? record.with : {},
153
+ ...(record.auth !== undefined ? { auth: record.auth } : {}),
154
+ ...(typeof record.command === "string" && record.command.trim() ? { command: record.command } : {}),
131
155
  };
132
156
  }
133
157
  function normalizeOptimizerContext(value) {
@@ -138,21 +162,22 @@ function normalizeOptimizerContext(value) {
138
162
  : [],
139
163
  };
140
164
  }
141
- function normalizeTrialContext(value) {
142
- const record = requiredJsonRecord(value, "adapter request context.trial");
165
+ function normalizeAttemptContext(value) {
166
+ const record = requiredJsonRecord(value, "adapter request context.attempt");
143
167
  return {
144
- ...(typeof record.trialIndex === "number" ? { trialIndex: record.trialIndex } : {}),
168
+ ...(typeof record.attemptIndex === "number" ? { attemptIndex: record.attemptIndex } : {}),
145
169
  ...(typeof record.sampleIndex === "number" ? { sampleIndex: record.sampleIndex } : {}),
146
170
  ...(typeof record.caseId === "string" ? { caseId: record.caseId } : {}),
147
171
  };
148
172
  }
149
- function normalizeTaskContext(value) {
150
- const record = requiredJsonRecord(value, "adapter request context.task");
173
+ function normalizeCaseContext(value) {
174
+ const record = requiredJsonRecord(value, "adapter request context.case");
151
175
  return {
152
- ...(typeof record.text === "string" ? { text: record.text } : {}),
176
+ ...(typeof record.id === "string" ? { id: record.id } : {}),
177
+ ...(typeof record.prompt === "string" ? { prompt: record.prompt } : {}),
153
178
  };
154
179
  }
155
- function normalizeScorecard(value, label) {
180
+ function normalizeResult(value, label) {
156
181
  const record = requiredJsonRecord(value, label);
157
182
  if (typeof record.score !== "number" || !Number.isFinite(record.score)) {
158
183
  throw new Error(`${label}.score must be a finite number.`);
@@ -198,14 +223,15 @@ function requiredJsonRecord(value, label) {
198
223
  }
199
224
  return value;
200
225
  }
201
- function requiredOperation(value, label) {
202
- if (value === "tasks.resolve" ||
203
- value === "subject.run" ||
204
- value === "trial.score" ||
205
- value === "subject.improve") {
206
- return value;
226
+ function rejectUnknownJsonKeys(record, label, allowed) {
227
+ const allowedSet = new Set(allowed);
228
+ const unknown = Object.keys(record).filter((key) => !allowedSet.has(key));
229
+ if (unknown.length > 0) {
230
+ throw new Error(`${label} includes unsupported fields: ${unknown.join(", ")}.`);
207
231
  }
208
- throw new Error(`${label} must be tasks.resolve, subject.run, trial.score, or subject.improve.`);
232
+ }
233
+ function requiredOperation(value, label) {
234
+ return normalizeWorkbenchAdapterOperation(value, label);
209
235
  }
210
236
  function requiredString(value, label) {
211
237
  if (typeof value !== "string" || value.length === 0) {
@@ -0,0 +1,31 @@
1
+ import type { SurfaceSnapshotFile, WorkbenchExecutionNetworkPolicy, WorkbenchExecutionResources } from "@workbench-ai/workbench-contract";
2
+ export interface WorkbenchEngineCaseEnvironmentSpec {
3
+ dockerfile?: string;
4
+ workdir?: string;
5
+ resources?: Partial<WorkbenchExecutionResources>;
6
+ network?: WorkbenchExecutionNetworkPolicy;
7
+ }
8
+ export interface WorkbenchEngineCaseSpec {
9
+ version: 3;
10
+ prompt: string;
11
+ environment?: WorkbenchEngineCaseEnvironmentSpec;
12
+ }
13
+ export interface WorkbenchEngineCaseFiles {
14
+ subjectVisible?: SurfaceSnapshotFile[];
15
+ enginePrivate?: SurfaceSnapshotFile[];
16
+ source?: SurfaceSnapshotFile[];
17
+ }
18
+ export interface WorkbenchEngineCase {
19
+ id: string;
20
+ case: WorkbenchEngineCaseSpec;
21
+ files: WorkbenchEngineCaseFiles;
22
+ }
23
+ export interface WorkbenchEngineResolveResult {
24
+ cases: WorkbenchEngineCase[];
25
+ environment?: WorkbenchEngineCaseEnvironmentSpec;
26
+ }
27
+ export declare function normalizeWorkbenchEngineResolveResult(value: unknown, label?: string): WorkbenchEngineResolveResult;
28
+ export declare function normalizeWorkbenchEngineCase(value: unknown, label: string): WorkbenchEngineCase;
29
+ export declare function normalizeWorkbenchEngineCaseFiles(value: unknown, label: string): WorkbenchEngineCaseFiles;
30
+ export declare function normalizeWorkbenchEngineCaseSpec(value: unknown, label: string): WorkbenchEngineCaseSpec;
31
+ //# sourceMappingURL=engine-resolve-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-resolve-result.d.ts","sourceRoot":"","sources":["../src/engine-resolve-result.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,2BAA2B,EAC5B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,kCAAkC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC3C;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,kCAAkC,CAAC;CAClD;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,wBAAwB,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,kCAAkC,CAAC;CAClD;AAED,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,OAAO,EACd,KAAK,SAA0B,GAC9B,4BAA4B,CAkB9B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAWrB;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,wBAAwB,CAc1B;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,uBAAuB,CAezB"}
@@ -1,63 +1,69 @@
1
1
  import path from "node:path";
2
- export function normalizeWorkbenchTaskSourceResult(value, label = "tasks.resolve result") {
2
+ export function normalizeWorkbenchEngineResolveResult(value, label = "engine.resolve result") {
3
3
  const record = requiredRecord(value, label);
4
- if (!Array.isArray(record.tasks)) {
5
- throw new Error(`${label}.tasks must be an array.`);
4
+ if (!Array.isArray(record.cases)) {
5
+ throw new Error(`${label}.cases must be an array.`);
6
6
  }
7
- const tasks = record.tasks.map((entry, index) => normalizeWorkbenchTaskBundle(entry, `${label}.tasks[${index}]`));
8
- const duplicate = firstDuplicate(tasks.map((task) => task.id));
7
+ const cases = record.cases.map((entry, index) => normalizeWorkbenchEngineCase(entry, `${label}.cases[${index}]`));
8
+ const duplicate = firstDuplicate(cases.map((engineCase) => engineCase.id));
9
9
  if (duplicate) {
10
- throw new Error(`${label} contains duplicate task id: ${duplicate}`);
10
+ throw new Error(`${label} contains duplicate case id: ${duplicate}`);
11
11
  }
12
12
  return {
13
- tasks,
13
+ cases,
14
14
  ...(record.environment !== undefined
15
- ? { environment: normalizeTaskEnvironment(record.environment, `${label}.environment`) }
15
+ ? { environment: normalizeCaseEnvironment(record.environment, `${label}.environment`) }
16
16
  : {}),
17
17
  };
18
18
  }
19
- export function normalizeWorkbenchTaskBundle(value, label) {
19
+ export function normalizeWorkbenchEngineCase(value, label) {
20
20
  const record = requiredRecord(value, label);
21
+ rejectUnknownKeys(record, label, ["id", "case", "files"]);
21
22
  if (typeof record.id !== "string" || record.id.trim().length === 0) {
22
23
  throw new Error(`${label}.id must be a non-empty string.`);
23
24
  }
24
25
  return {
25
26
  id: normalizeRelativePath(record.id, `${label}.id`),
26
- task: normalizeWorkbenchTaskSpec(record.task, `${label}.task`),
27
- publicFiles: normalizeTaskSourceFiles(record.publicFiles, `${label}.publicFiles`),
28
- testFiles: normalizeTaskSourceFiles(record.testFiles, `${label}.testFiles`),
29
- ...(record.solutionFiles !== undefined
30
- ? { solutionFiles: normalizeTaskSourceFiles(record.solutionFiles, `${label}.solutionFiles`) }
27
+ case: normalizeWorkbenchEngineCaseSpec(record.case, `${label}.case`),
28
+ files: normalizeWorkbenchEngineCaseFiles(record.files, `${label}.files`),
29
+ };
30
+ }
31
+ export function normalizeWorkbenchEngineCaseFiles(value, label) {
32
+ const record = requiredRecord(value, label);
33
+ rejectUnknownKeys(record, label, ["subjectVisible", "enginePrivate", "source"]);
34
+ return {
35
+ ...(record.subjectVisible !== undefined
36
+ ? { subjectVisible: normalizeEngineResolveFiles(record.subjectVisible, `${label}.subjectVisible`) }
31
37
  : {}),
32
- ...(record.sourceFiles !== undefined
33
- ? { sourceFiles: normalizeTaskSourceFiles(record.sourceFiles, `${label}.sourceFiles`) }
38
+ ...(record.enginePrivate !== undefined
39
+ ? { enginePrivate: normalizeEngineResolveFiles(record.enginePrivate, `${label}.enginePrivate`) }
40
+ : {}),
41
+ ...(record.source !== undefined
42
+ ? { source: normalizeEngineResolveFiles(record.source, `${label}.source`) }
34
43
  : {}),
35
44
  };
36
45
  }
37
- export function normalizeWorkbenchTaskSpec(value, label) {
46
+ export function normalizeWorkbenchEngineCaseSpec(value, label) {
38
47
  const record = requiredRecord(value, label);
39
- if (record.version !== 2) {
40
- throw new Error(`${label}.version must be 2.`);
48
+ if (record.version !== 3) {
49
+ throw new Error(`${label}.version must be 3.`);
41
50
  }
42
- if (typeof record.task !== "string" || record.task.trim().length === 0) {
43
- throw new Error(`${label}.task must be a non-empty string.`);
51
+ if (typeof record.prompt !== "string" || record.prompt.trim().length === 0) {
52
+ throw new Error(`${label}.prompt must be a non-empty string.`);
44
53
  }
45
54
  return {
46
- version: 2,
47
- task: record.task,
55
+ version: 3,
56
+ prompt: record.prompt,
48
57
  ...(record.environment !== undefined
49
- ? { environment: normalizeTaskEnvironment(record.environment, `${label}.environment`) }
50
- : {}),
51
- ...(record.score !== undefined
52
- ? { score: normalizeAdapterInvocation(record.score, `${label}.score`) }
58
+ ? { environment: normalizeCaseEnvironment(record.environment, `${label}.environment`) }
53
59
  : {}),
54
60
  };
55
61
  }
56
- function normalizeTaskEnvironment(value, label) {
62
+ function normalizeCaseEnvironment(value, label) {
57
63
  const record = requiredRecord(value, label);
58
64
  const resources = record.resources === undefined
59
65
  ? undefined
60
- : normalizeTaskResources(record.resources, `${label}.resources`);
66
+ : normalizeCaseResources(record.resources, `${label}.resources`);
61
67
  const network = record.network === undefined
62
68
  ? undefined
63
69
  : normalizeNetworkPolicy(record.network, `${label}.network`);
@@ -72,7 +78,7 @@ function normalizeTaskEnvironment(value, label) {
72
78
  ...(network ? { network } : {}),
73
79
  };
74
80
  }
75
- function normalizeTaskResources(value, label) {
81
+ function normalizeCaseResources(value, label) {
76
82
  const record = requiredRecord(value, label);
77
83
  return {
78
84
  ...(typeof record.cpu === "number" ? { cpu: record.cpu } : {}),
@@ -95,18 +101,7 @@ function normalizeNetworkPolicy(value, label) {
95
101
  : {}),
96
102
  };
97
103
  }
98
- function normalizeAdapterInvocation(value, label) {
99
- const record = requiredRecord(value, label);
100
- if (typeof record.use !== "string" || record.use.trim().length === 0) {
101
- throw new Error(`${label}.use must be a non-empty string.`);
102
- }
103
- return {
104
- use: record.use,
105
- with: record.with === undefined ? {} : record.with,
106
- ...(record.auth !== undefined ? { auth: record.auth } : {}),
107
- };
108
- }
109
- function normalizeTaskSourceFiles(value, label) {
104
+ function normalizeEngineResolveFiles(value, label) {
110
105
  if (value === undefined) {
111
106
  return [];
112
107
  }
@@ -138,7 +133,7 @@ function normalizeRelativePath(filePath, label) {
138
133
  throw new Error(`${label} must be a non-empty relative path.`);
139
134
  }
140
135
  if (normalized === ".." || normalized.startsWith("../") || path.posix.isAbsolute(normalized)) {
141
- throw new Error(`${label} must not escape the task-source result.`);
136
+ throw new Error(`${label} must not escape the engine-resolve result.`);
142
137
  }
143
138
  return normalized;
144
139
  }
@@ -148,6 +143,13 @@ function requiredRecord(value, label) {
148
143
  }
149
144
  return value;
150
145
  }
146
+ function rejectUnknownKeys(record, label, allowed) {
147
+ const allowedSet = new Set(allowed);
148
+ const unknown = Object.keys(record).filter((key) => !allowedSet.has(key));
149
+ if (unknown.length > 0) {
150
+ throw new Error(`${label} includes unsupported fields: ${unknown.join(", ")}.`);
151
+ }
152
+ }
151
153
  function firstDuplicate(values) {
152
154
  const seen = new Set();
153
155
  for (const value of values) {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { adapterCommandName, assertWorkbenchAdapterOperationSupport, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, collectWorkbenchAdapterOperationIssues, collectWorkbenchAdapterOperationRequirements, parseWorkbenchAdapterManifest, workbenchAdapterManifestSupportsOperation, workbenchAdapterOperationCommand, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuth, withDefaultWorkbenchAdapterAuthProfiles, type WorkbenchAdapterOperation, type WorkbenchAdapterOperationManifest, type WorkbenchAdapterSlotManifest, type WorkbenchAdapterAuthEnvManifest, type WorkbenchAdapterAuthFileManifest, type WorkbenchAdapterAuthManifest, type WorkbenchAdapterAuthMethodManifest, type WorkbenchAdapterAuthRequirement, type WorkbenchAdapterInvocationLike, type WorkbenchAdapterManifest, type WorkbenchAdapterOperationRequirement, } from "./adapter-manifest.ts";
1
+ export { WORKBENCH_ADAPTER_MANIFEST_PROTOCOL, adapterCommandName, assertWorkbenchAdapterOperationSupport, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, collectWorkbenchAdapterOperationIssues, collectWorkbenchAdapterOperationRequirements, parseWorkbenchAdapterManifest, normalizeWorkbenchAdapterOperation, workbenchAdapterManifestSupportsOperation, workbenchAdapterOperationCommand, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuth, withDefaultWorkbenchAdapterAuthProfiles, type WorkbenchPrimitiveAdapterOperation, type WorkbenchAdapterOperation, type WorkbenchAdapterOperationManifest, type WorkbenchAdapterSlotManifest, type WorkbenchAdapterAuthEnvManifest, type WorkbenchAdapterAuthFileManifest, type WorkbenchAdapterAuthManifest, type WorkbenchAdapterAuthMethodManifest, type WorkbenchAdapterAuthRequirement, type WorkbenchAdapterInvocationLike, type WorkbenchAdapterManifest, type WorkbenchAdapterOperationRequirement, } from "./adapter-manifest.ts";
2
2
  export { WORKBENCH_ADAPTER_PROTOCOL, WORKBENCH_ADAPTER_RESULT_FILE, WORKBENCH_ADAPTER_RESULT_PROTOCOL, assertWorkbenchAdapterOperationResultOk, ensureWorkbenchAdapterOutputDir, normalizeWorkbenchAdapterOperationRequest, normalizeWorkbenchAdapterOperationResult, readWorkbenchAdapterOperationRequest, readWorkbenchAdapterOperationResult, workbenchAdapterOperationResultPath, writeWorkbenchAdapterOperationResult, type WorkbenchAdapterOperationRequest, type WorkbenchAdapterOperationResult, type WorkbenchAdapterOperationResultValue, } from "./adapter-protocol.ts";
3
- export { normalizeWorkbenchTaskBundle, normalizeWorkbenchTaskSourceResult, normalizeWorkbenchTaskSpec, type WorkbenchTaskBundle, type WorkbenchTaskEnvironmentSpec, type WorkbenchTaskSourceResult, type WorkbenchTaskSpec, } from "./task-source-result.ts";
4
- export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineOptimizer, defineRunner, defineScorer, defineTaskSource, operationDefinitionForRequest, runDefinedAdapter, workbenchAdapterManifestFromDefinition, type WorkbenchAdapterDefinition, type WorkbenchAdapterHandlerContext, type WorkbenchAdapterHandlerReturn, type WorkbenchAdapterOperationDefinition, type WorkbenchAdapterOperationHandler, type RunDefinedWorkbenchAdapterOptions, } from "./adapter-definition.ts";
3
+ export { normalizeWorkbenchEngineCase, normalizeWorkbenchEngineCaseFiles, normalizeWorkbenchEngineCaseSpec, normalizeWorkbenchEngineResolveResult, type WorkbenchEngineCase, type WorkbenchEngineCaseFiles, type WorkbenchEngineCaseEnvironmentSpec, type WorkbenchEngineCaseSpec, type WorkbenchEngineResolveResult, } from "./engine-resolve-result.ts";
4
+ export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineEngineResolver, defineSubject, defineEngineRunner, defineOptimizer, operationDefinitionForRequest, runSubjectFromEngine, runDefinedAdapter, workbenchAdapterManifestFromDefinition, type WorkbenchAdapterDefinition, type WorkbenchAdapterHandlerContext, type WorkbenchAdapterHandlerReturn, type WorkbenchAdapterOperationDefinition, type WorkbenchAdapterOperationHandler, type RunDefinedWorkbenchAdapterOptions, } from "./adapter-definition.ts";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sCAAsC,EACtC,6BAA6B,EAC7B,uCAAuC,EACvC,kCAAkC,EAClC,sCAAsC,EACtC,4CAA4C,EAC5C,6BAA6B,EAC7B,yCAAyC,EACzC,gCAAgC,EAChC,oCAAoC,EACpC,+BAA+B,EAC/B,uCAAuC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,EACrC,KAAK,4BAA4B,EACjC,KAAK,kCAAkC,EACvC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,oCAAoC,GAC1C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,iCAAiC,EACjC,uCAAuC,EACvC,+BAA+B,EAC/B,yCAAyC,EACzC,wCAAwC,EACxC,oCAAoC,EACpC,mCAAmC,EACnC,mCAAmC,EACnC,oCAAoC,EACpC,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,GAC1C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,4BAA4B,EAC5B,kCAAkC,EAClC,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,6BAA6B,EAC7B,iBAAiB,EACjB,sCAAsC,EACtC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,mCAAmC,EACxC,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,GACvC,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,sCAAsC,EACtC,6BAA6B,EAC7B,uCAAuC,EACvC,kCAAkC,EAClC,sCAAsC,EACtC,4CAA4C,EAC5C,6BAA6B,EAC7B,kCAAkC,EAClC,yCAAyC,EACzC,gCAAgC,EAChC,oCAAoC,EACpC,+BAA+B,EAC/B,uCAAuC,EACvC,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,EACrC,KAAK,4BAA4B,EACjC,KAAK,kCAAkC,EACvC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,oCAAoC,GAC1C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,iCAAiC,EACjC,uCAAuC,EACvC,+BAA+B,EAC/B,yCAAyC,EACzC,wCAAwC,EACxC,oCAAoC,EACpC,mCAAmC,EACnC,mCAAmC,EACnC,oCAAoC,EACpC,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,oCAAoC,GAC1C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,gCAAgC,EAChC,qCAAqC,EACrC,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,GAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,6BAA6B,EAC7B,oBAAoB,EACpB,iBAAiB,EACjB,sCAAsC,EACtC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,mCAAmC,EACxC,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,GACvC,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { adapterCommandName, assertWorkbenchAdapterOperationSupport, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, collectWorkbenchAdapterOperationIssues, collectWorkbenchAdapterOperationRequirements, parseWorkbenchAdapterManifest, workbenchAdapterManifestSupportsOperation, workbenchAdapterOperationCommand, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuth, withDefaultWorkbenchAdapterAuthProfiles, } from "./adapter-manifest.js";
1
+ export { WORKBENCH_ADAPTER_MANIFEST_PROTOCOL, adapterCommandName, assertWorkbenchAdapterOperationSupport, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, collectWorkbenchAdapterOperationIssues, collectWorkbenchAdapterOperationRequirements, parseWorkbenchAdapterManifest, normalizeWorkbenchAdapterOperation, workbenchAdapterManifestSupportsOperation, workbenchAdapterOperationCommand, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuth, withDefaultWorkbenchAdapterAuthProfiles, } from "./adapter-manifest.js";
2
2
  export { WORKBENCH_ADAPTER_PROTOCOL, WORKBENCH_ADAPTER_RESULT_FILE, WORKBENCH_ADAPTER_RESULT_PROTOCOL, assertWorkbenchAdapterOperationResultOk, ensureWorkbenchAdapterOutputDir, normalizeWorkbenchAdapterOperationRequest, normalizeWorkbenchAdapterOperationResult, readWorkbenchAdapterOperationRequest, readWorkbenchAdapterOperationResult, workbenchAdapterOperationResultPath, writeWorkbenchAdapterOperationResult, } from "./adapter-protocol.js";
3
- export { normalizeWorkbenchTaskBundle, normalizeWorkbenchTaskSourceResult, normalizeWorkbenchTaskSpec, } from "./task-source-result.js";
4
- export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineOptimizer, defineRunner, defineScorer, defineTaskSource, operationDefinitionForRequest, runDefinedAdapter, workbenchAdapterManifestFromDefinition, } from "./adapter-definition.js";
3
+ export { normalizeWorkbenchEngineCase, normalizeWorkbenchEngineCaseFiles, normalizeWorkbenchEngineCaseSpec, normalizeWorkbenchEngineResolveResult, } from "./engine-resolve-result.js";
4
+ export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineEngineResolver, defineSubject, defineEngineRunner, defineOptimizer, operationDefinitionForRequest, runSubjectFromEngine, runDefinedAdapter, workbenchAdapterManifestFromDefinition, } from "./adapter-definition.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workbench-ai/workbench-protocol",
3
- "version": "0.0.44",
3
+ "version": "0.0.45",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "dependencies": {
22
22
  "yaml": "^2.8.2",
23
- "@workbench-ai/workbench-contract": "0.0.44"
23
+ "@workbench-ai/workbench-contract": "0.0.45"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^24.3.1",
@@ -1,29 +0,0 @@
1
- import type { SurfaceSnapshotFile, WorkbenchAdapterInvocation, WorkbenchExecutionNetworkPolicy, WorkbenchExecutionResources } from "@workbench-ai/workbench-contract";
2
- export interface WorkbenchTaskEnvironmentSpec {
3
- dockerfile?: string;
4
- workdir?: string;
5
- resources?: Partial<WorkbenchExecutionResources>;
6
- network?: WorkbenchExecutionNetworkPolicy;
7
- }
8
- export interface WorkbenchTaskSpec {
9
- version: 2;
10
- task: string;
11
- environment?: WorkbenchTaskEnvironmentSpec;
12
- score?: WorkbenchAdapterInvocation;
13
- }
14
- export interface WorkbenchTaskBundle {
15
- id: string;
16
- task: WorkbenchTaskSpec;
17
- publicFiles: SurfaceSnapshotFile[];
18
- testFiles: SurfaceSnapshotFile[];
19
- solutionFiles?: SurfaceSnapshotFile[];
20
- sourceFiles?: SurfaceSnapshotFile[];
21
- }
22
- export interface WorkbenchTaskSourceResult {
23
- tasks: WorkbenchTaskBundle[];
24
- environment?: WorkbenchTaskEnvironmentSpec;
25
- }
26
- export declare function normalizeWorkbenchTaskSourceResult(value: unknown, label?: string): WorkbenchTaskSourceResult;
27
- export declare function normalizeWorkbenchTaskBundle(value: unknown, label: string): WorkbenchTaskBundle;
28
- export declare function normalizeWorkbenchTaskSpec(value: unknown, label: string): WorkbenchTaskSpec;
29
- //# sourceMappingURL=task-source-result.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-source-result.d.ts","sourceRoot":"","sources":["../src/task-source-result.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,mBAAmB,EACnB,0BAA0B,EAC1B,+BAA+B,EAC/B,2BAA2B,EAC5B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,KAAK,CAAC,EAAE,0BAA0B,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,4BAA4B,CAAC;CAC5C;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,OAAO,EACd,KAAK,SAAyB,GAC7B,yBAAyB,CAkB3B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAiBrB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,iBAAiB,CAkBnB"}