@workbench-ai/workbench-protocol 0.0.67 → 0.0.69

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.
@@ -3,11 +3,11 @@ import type { WorkbenchAdapterAuthManifest, WorkbenchAdapterInvocationLike, Work
3
3
  import { type WorkbenchAdapterOperationRequest, type WorkbenchAdapterOperationResult, type WorkbenchAdapterOperationResultValue } from "./adapter-protocol.ts";
4
4
  export interface WorkbenchAdapterDefinition<TContext = unknown> {
5
5
  id: string;
6
- setup?: string[];
6
+ install?: string[];
7
7
  auth?: WorkbenchAdapterAuthManifest;
8
8
  engineResolve?: WorkbenchAdapterOperationDefinition<TContext>;
9
9
  engineRun?: WorkbenchAdapterOperationDefinition<TContext>;
10
- candidate?: WorkbenchAdapterOperationDefinition<TContext>;
10
+ skillRun?: WorkbenchAdapterOperationDefinition<TContext>;
11
11
  improve?: WorkbenchAdapterOperationDefinition<TContext>;
12
12
  slots?: Record<string, WorkbenchAdapterSlotManifest>;
13
13
  }
@@ -28,19 +28,13 @@ export interface WorkbenchAdapterHandlerContext<TContext = unknown> {
28
28
  }
29
29
  export type WorkbenchAdapterOperationHandler<TContext = unknown> = (context: WorkbenchAdapterHandlerContext<TContext>) => WorkbenchAdapterHandlerReturn | Promise<WorkbenchAdapterHandlerReturn>;
30
30
  export type WorkbenchAdapterHandlerReturn = WorkbenchAdapterOperationResult | WorkbenchAdapterOperationResultValue | undefined | void;
31
- export interface RunDefinedWorkbenchAdapterOptions<TContext = unknown> {
32
- requestPath?: string;
33
- outputRoot?: string;
34
- runtime?: TContext;
35
- }
36
31
  export declare function defineAdapter<TContext = unknown>(definition: WorkbenchAdapterDefinition<TContext>): WorkbenchAdapterDefinition<TContext>;
37
32
  export declare function defineEngineResolver<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
38
- export declare function defineCandidate<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
33
+ export declare function defineSkillRunner<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
39
34
  export declare function defineEngineRunner<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
40
35
  export declare function defineImprover<TContext = unknown>(definition?: WorkbenchAdapterOperationDefinition<TContext>): WorkbenchAdapterOperationDefinition<TContext>;
41
36
  export declare function adapterSlot(path: string, operation: WorkbenchAdapterOperation): WorkbenchAdapterSlotManifest;
42
37
  export declare function workbenchAdapterManifestFromDefinition(definition: WorkbenchAdapterDefinition): WorkbenchAdapterManifest;
43
- export declare function runDefinedAdapter<TContext = unknown>(definition: WorkbenchAdapterDefinition<TContext>, options?: RunDefinedWorkbenchAdapterOptions<TContext>): Promise<WorkbenchAdapterOperationResult | null>;
44
38
  export declare function operationDefinitionForRequest<TContext = unknown>(definition: WorkbenchAdapterDefinition<TContext>, operation: WorkbenchAdapterOperation): WorkbenchAdapterOperationDefinition<TContext> | undefined;
45
39
  export declare function adapterResult<TValue extends WorkbenchAdapterOperationResultValue>(operation: WorkbenchAdapterOperation, value: TValue, metadata?: Omit<WorkbenchAdapterOperationResult<TValue>, "protocol" | "operation" | "value">): WorkbenchAdapterOperationResult<TValue>;
46
40
  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,13 +1,12 @@
1
- import { promises as fs } from "node:fs";
2
1
  import { WORKBENCH_ADAPTER_MANIFEST_PROTOCOL, adapterCommandName, normalizeWorkbenchAdapterOperation, } from "./adapter-manifest.js";
3
- import { WORKBENCH_ADAPTER_RESULT_PROTOCOL, ensureWorkbenchAdapterOutputDir, readWorkbenchAdapterOperationRequest, workbenchAdapterOperationResultPath, writeWorkbenchAdapterOperationResult, } from "./adapter-protocol.js";
2
+ import { WORKBENCH_ADAPTER_RESULT_PROTOCOL, } from "./adapter-protocol.js";
4
3
  export function defineAdapter(definition) {
5
4
  return definition;
6
5
  }
7
6
  export function defineEngineResolver(definition = {}) {
8
7
  return definition;
9
8
  }
10
- export function defineCandidate(definition = {}) {
9
+ export function defineSkillRunner(definition = {}) {
11
10
  return definition;
12
11
  }
13
12
  export function defineEngineRunner(definition = {}) {
@@ -23,8 +22,8 @@ export function workbenchAdapterManifestFromDefinition(definition) {
23
22
  const operations = {};
24
23
  addOperation(operations, definition.id, "engine.resolve", definition.engineResolve);
25
24
  addOperation(operations, definition.id, "engine.run", definition.engineRun);
26
- addOperation(operations, definition.id, "candidate.run", definition.candidate);
27
- addOperation(operations, definition.id, "candidate.improve", definition.improve);
25
+ addOperation(operations, definition.id, "skill.run", definition.skillRun);
26
+ addOperation(operations, definition.id, "skill.improve", definition.improve);
28
27
  if (Object.keys(operations).length === 0) {
29
28
  throw new Error(`Adapter ${definition.id} must define at least one operation.`);
30
29
  }
@@ -32,46 +31,11 @@ export function workbenchAdapterManifestFromDefinition(definition) {
32
31
  id: definition.id,
33
32
  protocol: WORKBENCH_ADAPTER_MANIFEST_PROTOCOL,
34
33
  operations,
35
- setup: definition.setup ? [...definition.setup] : [],
34
+ install: definition.install ? [...definition.install] : [],
36
35
  ...(definition.auth ? { auth: cloneJson(definition.auth) } : {}),
37
36
  ...(definition.slots ? { slots: cloneJson(definition.slots) } : {}),
38
37
  };
39
38
  }
40
- export async function runDefinedAdapter(definition, options = {}) {
41
- let request = await readWorkbenchAdapterOperationRequest(options.requestPath);
42
- if (request.invocation.use !== definition.id) {
43
- throw new Error(`Adapter ${definition.id} cannot execute request for ${request.invocation.use}.`);
44
- }
45
- if (options.outputRoot && options.outputRoot !== request.paths.output) {
46
- request = {
47
- ...request,
48
- paths: {
49
- ...request.paths,
50
- output: options.outputRoot,
51
- result: workbenchAdapterOperationResultPath(options.outputRoot),
52
- },
53
- };
54
- }
55
- await ensureWorkbenchAdapterOutputDir(request);
56
- const operationDefinition = operationDefinitionForRequest(definition, request.operation);
57
- if (!operationDefinition) {
58
- throw new Error(`Adapter ${definition.id} does not implement ${request.operation}.`);
59
- }
60
- if (!operationDefinition.handle) {
61
- throw new Error(`Adapter ${definition.id} ${request.operation} does not define a handler.`);
62
- }
63
- const handlerResult = await operationDefinition.handle(adapterHandlerContext({
64
- definition,
65
- request,
66
- runtime: options.runtime,
67
- }));
68
- if (await fileExists(request.paths.result)) {
69
- return null;
70
- }
71
- const result = normalizeHandlerResult(request.operation, handlerResult);
72
- await writeWorkbenchAdapterOperationResult(request.paths.output, result);
73
- return result;
74
- }
75
39
  export function operationDefinitionForRequest(definition, operation) {
76
40
  if (operation === "engine.resolve") {
77
41
  return definition.engineResolve;
@@ -79,10 +43,10 @@ export function operationDefinitionForRequest(definition, operation) {
79
43
  if (operation === "engine.run") {
80
44
  return definition.engineRun;
81
45
  }
82
- if (operation === "candidate.run") {
83
- return definition.candidate;
46
+ if (operation === "skill.run") {
47
+ return definition.skillRun;
84
48
  }
85
- if (operation === "candidate.improve") {
49
+ if (operation === "skill.improve") {
86
50
  return definition.improve;
87
51
  }
88
52
  return undefined;
@@ -116,31 +80,6 @@ function addOperation(operations, adapterId, operation, definition) {
116
80
  function cloneJson(value) {
117
81
  return JSON.parse(JSON.stringify(value));
118
82
  }
119
- function adapterHandlerContext(args) {
120
- return {
121
- request: args.request,
122
- operation: args.request.operation,
123
- invocation: args.request.invocation,
124
- with: adapterWithRecord(args.request),
125
- paths: args.request.paths,
126
- runtime: args.runtime,
127
- slot: (name) => adapterSlotInvocation(args.request, args.definition.slots, name),
128
- result: (value, metadata = {}) => adapterResult(args.request.operation, value, metadata),
129
- };
130
- }
131
- function normalizeHandlerResult(operation, result) {
132
- if (isOperationResult(result)) {
133
- return result;
134
- }
135
- return adapterResult(operation, result === undefined ? null : result);
136
- }
137
- function isOperationResult(value) {
138
- return !!value &&
139
- typeof value === "object" &&
140
- !Array.isArray(value) &&
141
- value.protocol === WORKBENCH_ADAPTER_RESULT_PROTOCOL &&
142
- typeof value.operation === "string";
143
- }
144
83
  function adapterWithRecord(request) {
145
84
  const value = request.invocation.with;
146
85
  return value && typeof value === "object" && !Array.isArray(value)
@@ -168,6 +107,3 @@ function isInvocationLike(value) {
168
107
  typeof value.use === "string" &&
169
108
  (value.use.length > 0);
170
109
  }
171
- async function fileExists(filePath) {
172
- return fs.stat(filePath).then((stat) => stat.isFile(), () => false);
173
- }
@@ -1,13 +1,13 @@
1
- export declare const WORKBENCH_ADAPTER_MANIFEST_PROTOCOL = "workbench.adapter.v3";
1
+ export declare const WORKBENCH_ADAPTER_MANIFEST_PROTOCOL = "workbench.adapter-manifest.v1";
2
2
  export interface WorkbenchAdapterManifest {
3
3
  id: string;
4
4
  protocol: typeof WORKBENCH_ADAPTER_MANIFEST_PROTOCOL;
5
5
  operations: Partial<Record<WorkbenchAdapterOperation, WorkbenchAdapterOperationManifest>>;
6
- setup: string[];
6
+ install: string[];
7
7
  auth?: WorkbenchAdapterAuthManifest;
8
8
  slots?: Record<string, WorkbenchAdapterSlotManifest>;
9
9
  }
10
- export type WorkbenchPrimitiveAdapterOperation = "engine.resolve" | "engine.run" | "candidate.run" | "candidate.improve";
10
+ export type WorkbenchPrimitiveAdapterOperation = "engine.resolve" | "engine.run" | "skill.run" | "skill.improve";
11
11
  export type WorkbenchAdapterOperation = WorkbenchPrimitiveAdapterOperation;
12
12
  export type WorkbenchAdapterOperationExecutor = "sandbox" | "host";
13
13
  export interface WorkbenchAdapterOperationManifest {
@@ -52,18 +52,14 @@ export interface WorkbenchAdapterOperationRequirement {
52
52
  operation: WorkbenchAdapterOperation;
53
53
  }
54
54
  export declare function adapterCommandName(adapterId: string): string;
55
- export declare function workbenchAdapterManifestSupportsOperation(manifest: WorkbenchAdapterManifest, operation: WorkbenchAdapterOperation): boolean;
56
55
  export declare function workbenchAdapterOperationCommand(manifest: WorkbenchAdapterManifest, operation: WorkbenchAdapterOperation): string;
57
56
  export declare function workbenchAdapterOperationExecutor(manifest: WorkbenchAdapterManifest, operation: WorkbenchAdapterOperation): WorkbenchAdapterOperationExecutor;
58
57
  export declare function cloneWorkbenchAdapterManifest(manifest: WorkbenchAdapterManifest): WorkbenchAdapterManifest;
59
58
  export declare function parseWorkbenchAdapterManifest(source: string, label?: string): WorkbenchAdapterManifest;
60
59
  export declare function workbenchAdapterManifestRequiresAuth(manifest: WorkbenchAdapterManifest): boolean;
61
60
  export declare function collectWorkbenchAdapterInvocations(roots: readonly WorkbenchAdapterInvocationLike[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): WorkbenchAdapterInvocationLike[];
62
- export declare function collectWorkbenchAdapterOperationRequirements(roots: readonly WorkbenchAdapterOperationRequirement[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): WorkbenchAdapterOperationRequirement[];
63
- export declare function collectWorkbenchAdapterOperationIssues(roots: readonly WorkbenchAdapterOperationRequirement[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): string[];
64
61
  export declare function assertWorkbenchAdapterOperationSupport(roots: readonly WorkbenchAdapterOperationRequirement[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): void;
65
62
  export declare function collectWorkbenchAdapterAuthRequirements(roots: readonly WorkbenchAdapterInvocationLike[], manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): WorkbenchAdapterAuthRequirement[];
66
63
  export declare function withDefaultWorkbenchAdapterAuthProfiles<T extends Record<string, unknown>>(spec: T, manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): T;
67
- export declare function withDefaultWorkbenchAdapterAuth<T extends WorkbenchAdapterInvocationLike>(invocation: T, manifests: readonly WorkbenchAdapterManifest[] | Map<string, WorkbenchAdapterManifest>): T;
68
64
  export declare function normalizeWorkbenchAdapterOperation(value: unknown, label: string): WorkbenchAdapterOperation;
69
65
  //# 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,9 +1,9 @@
1
1
  import YAML from "yaml";
2
- export const WORKBENCH_ADAPTER_MANIFEST_PROTOCOL = "workbench.adapter.v3";
2
+ export const WORKBENCH_ADAPTER_MANIFEST_PROTOCOL = "workbench.adapter-manifest.v1";
3
3
  export function adapterCommandName(adapterId) {
4
4
  return `workbench-adapter-${adapterId}`;
5
5
  }
6
- export function workbenchAdapterManifestSupportsOperation(manifest, operation) {
6
+ function workbenchAdapterManifestSupportsOperation(manifest, operation) {
7
7
  return manifest.operations[normalizeWorkbenchAdapterOperation(operation, "adapter operation")] !== undefined;
8
8
  }
9
9
  export function workbenchAdapterOperationCommand(manifest, operation) {
@@ -26,7 +26,7 @@ export function cloneWorkbenchAdapterManifest(manifest) {
26
26
  return {
27
27
  ...manifest,
28
28
  operations: cloneJson(manifest.operations),
29
- setup: [...manifest.setup],
29
+ install: [...manifest.install],
30
30
  ...(manifest.auth ? { auth: cloneJson(manifest.auth) } : {}),
31
31
  ...(manifest.slots ? { slots: cloneJson(manifest.slots) } : {}),
32
32
  };
@@ -37,14 +37,14 @@ export function parseWorkbenchAdapterManifest(source, label = "workbench.adapter
37
37
  throw new Error(`${label} must be a YAML object.`);
38
38
  }
39
39
  const record = parsed;
40
- rejectUnknownManifestKeys(record, label, ["id", "protocol", "operations", "setup", "auth", "slots"]);
40
+ rejectUnknownManifestKeys(record, label, ["id", "protocol", "operations", "install", "auth", "slots"]);
41
41
  const id = readAdapterId(record.id, `${label}.id`);
42
42
  if (record.protocol !== WORKBENCH_ADAPTER_MANIFEST_PROTOCOL) {
43
43
  throw new Error(`${label}.protocol must be ${WORKBENCH_ADAPTER_MANIFEST_PROTOCOL}.`);
44
44
  }
45
- const setup = record.setup === undefined
45
+ const install = record.install === undefined
46
46
  ? []
47
- : readStringArray(record.setup, `${label}.setup`);
47
+ : readStringArray(record.install, `${label}.install`);
48
48
  const operations = readAdapterOperations(record.operations, `${label}.operations`, id);
49
49
  const slots = record.slots === undefined
50
50
  ? undefined
@@ -54,7 +54,7 @@ export function parseWorkbenchAdapterManifest(source, label = "workbench.adapter
54
54
  id,
55
55
  protocol: WORKBENCH_ADAPTER_MANIFEST_PROTOCOL,
56
56
  operations,
57
- setup,
57
+ install,
58
58
  ...(auth ? { auth } : {}),
59
59
  ...(slots ? { slots } : {}),
60
60
  };
@@ -134,7 +134,7 @@ export function collectWorkbenchAdapterInvocations(roots, manifests) {
134
134
  }
135
135
  return collected;
136
136
  }
137
- export function collectWorkbenchAdapterOperationRequirements(roots, manifests) {
137
+ function collectWorkbenchAdapterOperationRequirements(roots, manifests) {
138
138
  const manifestById = manifestMap(manifests);
139
139
  const collected = [];
140
140
  const queue = roots.flatMap((root) => {
@@ -172,7 +172,7 @@ export function collectWorkbenchAdapterOperationRequirements(roots, manifests) {
172
172
  }
173
173
  return collected;
174
174
  }
175
- export function collectWorkbenchAdapterOperationIssues(roots, manifests) {
175
+ function collectWorkbenchAdapterOperationIssues(roots, manifests) {
176
176
  const manifestById = manifestMap(manifests);
177
177
  const issues = new Map();
178
178
  for (const requirement of collectWorkbenchAdapterOperationRequirements(roots, manifestById)) {
@@ -223,7 +223,7 @@ function applyInvocationDefault(record, key, manifestById) {
223
223
  record[key] = withDefaultWorkbenchAdapterAuth(invocation, manifestById);
224
224
  }
225
225
  }
226
- export function withDefaultWorkbenchAdapterAuth(invocation, manifests) {
226
+ function withDefaultWorkbenchAdapterAuth(invocation, manifests) {
227
227
  return applyDefaultWorkbenchAdapterAuth(cloneJson(invocation), manifestMap(manifests));
228
228
  }
229
229
  function applyDefaultWorkbenchAdapterAuth(invocation, manifestById) {
@@ -435,11 +435,11 @@ function readAdapterOperation(value, label) {
435
435
  export function normalizeWorkbenchAdapterOperation(value, label) {
436
436
  if (value === "engine.resolve" ||
437
437
  value === "engine.run" ||
438
- value === "candidate.run" ||
439
- value === "candidate.improve") {
438
+ value === "skill.run" ||
439
+ value === "skill.improve") {
440
440
  return value;
441
441
  }
442
- throw new Error(`${label} must be engine.resolve, engine.run, candidate.run, or candidate.improve.`);
442
+ throw new Error(`${label} must be engine.resolve, engine.run, skill.run, or skill.improve.`);
443
443
  }
444
444
  function readJsonPointer(value, label) {
445
445
  const pointer = readNonEmptyString(value, label);
@@ -1,4 +1,4 @@
1
- import type { Json, UsageSummary, WorkbenchResult, WorkbenchCandidatePatch } from "@workbench-ai/workbench-contract";
1
+ import type { Json, UsageSummary, WorkbenchResult, WorkbenchSkillPatch } from "@workbench-ai/workbench-contract";
2
2
  import { type WorkbenchEngineResolveResult } from "./engine-resolve-result.ts";
3
3
  import type { WorkbenchAdapterOperation } from "./adapter-manifest.ts";
4
4
  export declare const WORKBENCH_ADAPTER_PROTOCOL = "workbench.adapter.v3";
@@ -8,6 +8,7 @@ export interface WorkbenchAdapterOperationRequest {
8
8
  protocol: typeof WORKBENCH_ADAPTER_PROTOCOL;
9
9
  id: string;
10
10
  jobId?: string;
11
+ progress?: WorkbenchAdapterProgress;
11
12
  operation: WorkbenchAdapterOperation;
12
13
  invocation: {
13
14
  use: string;
@@ -16,11 +17,11 @@ export interface WorkbenchAdapterOperationRequest {
16
17
  };
17
18
  auth?: Json;
18
19
  context?: {
19
- benchmark?: {
20
+ eval?: {
20
21
  name?: string;
21
22
  description?: string;
22
23
  };
23
- candidate?: {
24
+ skill?: {
24
25
  id?: string;
25
26
  path?: string;
26
27
  prepare?: {
@@ -52,11 +53,27 @@ export interface WorkbenchAdapterOperationRequest {
52
53
  result: string;
53
54
  case?: string;
54
55
  traces?: string;
55
- candidate?: string;
56
+ skill?: string;
57
+ skills?: string;
56
58
  enginePrivate?: string;
57
59
  };
58
60
  }
59
- export type WorkbenchAdapterOperationResultValue = WorkbenchEngineResolveResult | WorkbenchResult | WorkbenchCandidatePatch | Json | null;
61
+ export interface WorkbenchAdapterProgress {
62
+ projectId: string;
63
+ runId: string;
64
+ jobId: string;
65
+ executionId: string;
66
+ attempt: number;
67
+ target: WorkbenchAdapterProgressTarget;
68
+ }
69
+ export interface WorkbenchAdapterProgressTarget {
70
+ url: string;
71
+ token: string;
72
+ ownerUserId?: string;
73
+ flushWindowMs?: number;
74
+ transport?: "http" | "stdout" | "both";
75
+ }
76
+ export type WorkbenchAdapterOperationResultValue = WorkbenchEngineResolveResult | WorkbenchResult | WorkbenchSkillPatch | Json | null;
60
77
  export interface WorkbenchAdapterOperationResult<TValue extends WorkbenchAdapterOperationResultValue = WorkbenchAdapterOperationResultValue> {
61
78
  protocol: typeof WORKBENCH_ADAPTER_RESULT_PROTOCOL;
62
79
  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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"}
@@ -25,7 +25,8 @@ export function normalizeWorkbenchAdapterOperationRequest(value) {
25
25
  "workspace",
26
26
  "output",
27
27
  "result",
28
- "candidate",
28
+ "skill",
29
+ "skills",
29
30
  "case",
30
31
  "traces",
31
32
  "enginePrivate",
@@ -36,6 +37,7 @@ export function normalizeWorkbenchAdapterOperationRequest(value) {
36
37
  protocol: WORKBENCH_ADAPTER_PROTOCOL,
37
38
  id: requiredString(record.id, "adapter request id"),
38
39
  ...(typeof record.jobId === "string" ? { jobId: record.jobId } : {}),
40
+ ...(record.progress !== undefined ? { progress: normalizeAdapterProgress(record.progress) } : {}),
39
41
  operation,
40
42
  invocation: {
41
43
  use,
@@ -50,11 +52,43 @@ export function normalizeWorkbenchAdapterOperationRequest(value) {
50
52
  result: requiredString(paths.result, "adapter request paths.result"),
51
53
  ...(typeof paths.case === "string" ? { case: paths.case } : {}),
52
54
  ...(typeof paths.traces === "string" ? { traces: paths.traces } : {}),
53
- ...(typeof paths.candidate === "string" ? { candidate: paths.candidate } : {}),
55
+ ...(typeof paths.skill === "string" ? { skill: paths.skill } : {}),
56
+ ...(typeof paths.skills === "string" ? { skills: paths.skills } : {}),
54
57
  ...(typeof paths.enginePrivate === "string" ? { enginePrivate: paths.enginePrivate } : {}),
55
58
  },
56
59
  };
57
60
  }
61
+ function normalizeAdapterProgress(value) {
62
+ const record = requiredJsonRecord(value, "adapter request progress");
63
+ return {
64
+ projectId: requiredString(record.projectId, "adapter request progress.projectId"),
65
+ runId: requiredString(record.runId, "adapter request progress.runId"),
66
+ jobId: requiredString(record.jobId, "adapter request progress.jobId"),
67
+ executionId: requiredString(record.executionId, "adapter request progress.executionId"),
68
+ attempt: requiredPositiveInteger(record.attempt, "adapter request progress.attempt"),
69
+ target: normalizeAdapterProgressTarget(record.target),
70
+ };
71
+ }
72
+ function normalizeAdapterProgressTarget(value) {
73
+ const record = requiredJsonRecord(value, "adapter request progress.target");
74
+ const target = {
75
+ url: requiredString(record.url, "adapter request progress.target.url"),
76
+ token: requiredString(record.token, "adapter request progress.target.token"),
77
+ };
78
+ if (record.ownerUserId !== undefined) {
79
+ target.ownerUserId = requiredString(record.ownerUserId, "adapter request progress.target.ownerUserId");
80
+ }
81
+ if (record.flushWindowMs !== undefined) {
82
+ target.flushWindowMs = requiredNonNegativeNumber(record.flushWindowMs, "adapter request progress.target.flushWindowMs");
83
+ }
84
+ if (record.transport !== undefined) {
85
+ if (record.transport !== "http" && record.transport !== "stdout" && record.transport !== "both") {
86
+ throw new Error("adapter request progress.target.transport must be http, stdout, or both.");
87
+ }
88
+ target.transport = record.transport;
89
+ }
90
+ return target;
91
+ }
58
92
  export async function ensureWorkbenchAdapterOutputDir(request) {
59
93
  await fs.mkdir(request.paths.output, { recursive: true });
60
94
  }
@@ -108,8 +142,8 @@ function normalizeOperationResultValue(operation, value) {
108
142
  if (operation === "engine.run") {
109
143
  return normalizeResult(value, `${WORKBENCH_ADAPTER_RESULT_FILE}.value`);
110
144
  }
111
- if (operation === "candidate.improve") {
112
- return normalizeCandidatePatch(value, `${WORKBENCH_ADAPTER_RESULT_FILE}.value`);
145
+ if (operation === "skill.improve") {
146
+ return normalizeSkillPatch(value, `${WORKBENCH_ADAPTER_RESULT_FILE}.value`);
113
147
  }
114
148
  if (value === undefined || value === null) {
115
149
  return null;
@@ -119,33 +153,33 @@ function normalizeOperationResultValue(operation, value) {
119
153
  function normalizeAdapterRequestContext(value) {
120
154
  const record = requiredJsonRecord(value, "adapter request context");
121
155
  return {
122
- ...(record.benchmark !== undefined ? { benchmark: normalizeBenchmarkContext(record.benchmark) } : {}),
123
- ...(record.candidate !== undefined ? { candidate: normalizeCandidateContext(record.candidate) } : {}),
156
+ ...(record.eval !== undefined ? { eval: normalizeEvalContext(record.eval) } : {}),
157
+ ...(record.skill !== undefined ? { skill: normalizeSkillContext(record.skill) } : {}),
124
158
  ...(record.improve !== undefined ? { improve: normalizeImproveContext(record.improve) } : {}),
125
159
  ...(record.attempt !== undefined ? { attempt: normalizeAttemptContext(record.attempt) } : {}),
126
160
  ...(record.case !== undefined ? { case: normalizeCaseContext(record.case) } : {}),
127
161
  };
128
162
  }
129
- function normalizeBenchmarkContext(value) {
130
- const record = requiredJsonRecord(value, "adapter request context.benchmark");
163
+ function normalizeEvalContext(value) {
164
+ const record = requiredJsonRecord(value, "adapter request context.eval");
131
165
  return {
132
166
  ...(typeof record.name === "string" ? { name: record.name } : {}),
133
167
  ...(typeof record.description === "string" ? { description: record.description } : {}),
134
168
  };
135
169
  }
136
- function normalizeCandidateContext(value) {
137
- const record = requiredJsonRecord(value, "adapter request context.candidate");
170
+ function normalizeSkillContext(value) {
171
+ const record = requiredJsonRecord(value, "adapter request context.skill");
138
172
  return {
139
173
  ...(typeof record.id === "string" ? { id: record.id } : {}),
140
174
  ...(typeof record.path === "string" ? { path: record.path } : {}),
141
- ...(record.prepare !== undefined ? { prepare: normalizeCandidatePrepareContext(record.prepare) } : {}),
142
- ...(record.run !== undefined ? { run: normalizeContextInvocation(record.run, "adapter request context.candidate.run") } : {}),
175
+ ...(record.prepare !== undefined ? { prepare: normalizeSkillPrepareContext(record.prepare) } : {}),
176
+ ...(record.run !== undefined ? { run: normalizeContextInvocation(record.run, "adapter request context.skill.run") } : {}),
143
177
  };
144
178
  }
145
- function normalizeCandidatePrepareContext(value) {
146
- const record = requiredJsonRecord(value, "adapter request context.candidate.prepare");
179
+ function normalizeSkillPrepareContext(value) {
180
+ const record = requiredJsonRecord(value, "adapter request context.skill.prepare");
147
181
  return {
148
- command: requiredString(record.command, "adapter request context.candidate.prepare.command"),
182
+ command: requiredString(record.command, "adapter request context.skill.prepare.command"),
149
183
  };
150
184
  }
151
185
  function normalizeContextInvocation(value, label) {
@@ -195,7 +229,7 @@ function normalizeResult(value, label) {
195
229
  ...(record.feedback !== undefined ? { feedback: record.feedback } : {}),
196
230
  };
197
231
  }
198
- function normalizeCandidatePatch(value, label) {
232
+ function normalizeSkillPatch(value, label) {
199
233
  const record = requiredJsonRecord(value, label);
200
234
  if (!Array.isArray(record.fileChanges) || !record.fileChanges.every((entry) => typeof entry === "string")) {
201
235
  throw new Error(`${label}.fileChanges must be a string array.`);
@@ -240,3 +274,15 @@ function requiredString(value, label) {
240
274
  }
241
275
  return value;
242
276
  }
277
+ function requiredPositiveInteger(value, label) {
278
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
279
+ throw new Error(`${label} must be a positive integer.`);
280
+ }
281
+ return value;
282
+ }
283
+ function requiredNonNegativeNumber(value, label) {
284
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
285
+ throw new Error(`${label} must be a non-negative number.`);
286
+ }
287
+ return value;
288
+ }
@@ -0,0 +1,8 @@
1
+ import type { WorkbenchAdapterManifest } from "./adapter-manifest.ts";
2
+ export type WorkbenchPublicBuiltInAdapterId = "workbench" | "codex" | "claude" | "command";
3
+ export type WorkbenchEngineHelperAdapterId = "rubric" | "tests";
4
+ export type WorkbenchBuiltInAdapterId = WorkbenchPublicBuiltInAdapterId | WorkbenchEngineHelperAdapterId;
5
+ export declare function builtinWorkbenchAdapterManifest(id: string): WorkbenchAdapterManifest | null;
6
+ export declare function builtinWorkbenchAdapterManifests(): WorkbenchAdapterManifest[];
7
+ export declare function isWorkbenchBuiltInAdapterId(id: string): id is WorkbenchBuiltInAdapterId;
8
+ //# sourceMappingURL=built-in-manifests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-manifests.d.ts","sourceRoot":"","sources":["../src/built-in-manifests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAc/B,MAAM,MAAM,+BAA+B,GACvC,WAAW,GACX,OAAO,GACP,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,8BAA8B,GACtC,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,yBAAyB,GACjC,+BAA+B,GAC/B,8BAA8B,CAAC;AA2EnC,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAI3F;AAED,wBAAgB,gCAAgC,IAAI,wBAAwB,EAAE,CAI7E;AAED,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,yBAAyB,CAEvF"}
@@ -0,0 +1,85 @@
1
+ import { cloneWorkbenchAdapterManifest, } from "./adapter-manifest.js";
2
+ import { adapterSlot, defineAdapter, defineSkillRunner, defineEngineResolver, defineEngineRunner, defineImprover, workbenchAdapterManifestFromDefinition, } from "./adapter-definition.js";
3
+ const BUILT_IN_ADAPTER_MANIFESTS = Object.fromEntries(Object.entries({
4
+ workbench: defineAdapter({
5
+ id: "workbench",
6
+ engineResolve: defineEngineResolver(),
7
+ }),
8
+ codex: defineAdapter({
9
+ id: "codex",
10
+ skillRun: defineSkillRunner(),
11
+ improve: defineImprover(),
12
+ install: [
13
+ "npm install --global @openai/codex@0.125.0",
14
+ ],
15
+ auth: {
16
+ methods: {
17
+ oauth: { files: [{ path: ".codex/auth.json" }] },
18
+ "api-key": { env: [{ name: "OPENAI_API_KEY" }] },
19
+ },
20
+ },
21
+ }),
22
+ claude: defineAdapter({
23
+ id: "claude",
24
+ skillRun: defineSkillRunner(),
25
+ improve: defineImprover(),
26
+ install: [
27
+ "npm install --global @anthropic-ai/claude-code@2.1.119",
28
+ ],
29
+ auth: {
30
+ methods: {
31
+ oauth: {
32
+ files: [
33
+ { path: ".claude.json" },
34
+ { path: ".claude/oauth-token", required: false },
35
+ { path: ".claude/.credentials.json", required: false },
36
+ ],
37
+ },
38
+ "api-key": { env: [{ name: "ANTHROPIC_API_KEY" }] },
39
+ bedrock: {
40
+ env: [
41
+ { name: "CLAUDE_CODE_USE_BEDROCK" },
42
+ { name: "AWS_ACCESS_KEY_ID", required: false },
43
+ { name: "AWS_SECRET_ACCESS_KEY", required: false },
44
+ { name: "AWS_SESSION_TOKEN", required: false },
45
+ { name: "AWS_REGION" },
46
+ { name: "AWS_DEFAULT_REGION", required: false },
47
+ { name: "AWS_BEARER_TOKEN_BEDROCK", required: false },
48
+ { name: "ANTHROPIC_MODEL", required: false },
49
+ { name: "ANTHROPIC_SMALL_FAST_MODEL", required: false },
50
+ ],
51
+ },
52
+ },
53
+ },
54
+ }),
55
+ command: defineAdapter({
56
+ id: "command",
57
+ skillRun: defineSkillRunner(),
58
+ engineRun: defineEngineRunner(),
59
+ improve: defineImprover(),
60
+ }),
61
+ rubric: defineAdapter({
62
+ id: "rubric",
63
+ engineRun: defineEngineRunner(),
64
+ slots: {
65
+ judge: adapterSlot("/judge", "skill.run"),
66
+ },
67
+ }),
68
+ tests: defineAdapter({
69
+ id: "tests",
70
+ engineRun: defineEngineRunner(),
71
+ }),
72
+ }).map(([id, definition]) => [id, workbenchAdapterManifestFromDefinition(definition)]));
73
+ export function builtinWorkbenchAdapterManifest(id) {
74
+ return isWorkbenchBuiltInAdapterId(id)
75
+ ? cloneWorkbenchAdapterManifest(BUILT_IN_ADAPTER_MANIFESTS[id])
76
+ : null;
77
+ }
78
+ export function builtinWorkbenchAdapterManifests() {
79
+ return Object.keys(BUILT_IN_ADAPTER_MANIFESTS)
80
+ .sort()
81
+ .map((id) => cloneWorkbenchAdapterManifest(BUILT_IN_ADAPTER_MANIFESTS[id]));
82
+ }
83
+ export function isWorkbenchBuiltInAdapterId(id) {
84
+ return Object.prototype.hasOwnProperty.call(BUILT_IN_ADAPTER_MANIFESTS, id);
85
+ }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- export { WORKBENCH_ADAPTER_MANIFEST_PROTOCOL, adapterCommandName, assertWorkbenchAdapterOperationSupport, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, collectWorkbenchAdapterOperationIssues, collectWorkbenchAdapterOperationRequirements, parseWorkbenchAdapterManifest, normalizeWorkbenchAdapterOperation, workbenchAdapterManifestSupportsOperation, workbenchAdapterOperationCommand, workbenchAdapterOperationExecutor, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuth, withDefaultWorkbenchAdapterAuthProfiles, type WorkbenchPrimitiveAdapterOperation, type WorkbenchAdapterOperation, type WorkbenchAdapterOperationExecutor, 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, parseWorkbenchAdapterManifest, normalizeWorkbenchAdapterOperation, workbenchAdapterOperationCommand, workbenchAdapterOperationExecutor, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuthProfiles, type WorkbenchPrimitiveAdapterOperation, type WorkbenchAdapterOperation, type WorkbenchAdapterOperationExecutor, 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
+ export { builtinWorkbenchAdapterManifest, builtinWorkbenchAdapterManifests, isWorkbenchBuiltInAdapterId, type WorkbenchBuiltInAdapterId, type WorkbenchEngineHelperAdapterId, type WorkbenchPublicBuiltInAdapterId, } from "./built-in-manifests.ts";
2
3
  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 { 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, defineCandidate, defineEngineRunner, defineImprover, operationDefinitionForRequest, runDefinedAdapter, workbenchAdapterManifestFromDefinition, type WorkbenchAdapterDefinition, type WorkbenchAdapterHandlerContext, type WorkbenchAdapterHandlerReturn, type WorkbenchAdapterOperationDefinition, type WorkbenchAdapterOperationHandler, type RunDefinedWorkbenchAdapterOptions, } from "./adapter-definition.ts";
5
- export { WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV, WORKBENCH_RUNTIME_CONTROL_URL_ENV, runWorkbenchRuntimeOperationSequence, type RunWorkbenchRuntimeControlOptions, type WorkbenchRuntimeControlInvocation, type WorkbenchRuntimeControlOperation, type WorkbenchRuntimeControlOperationInputs, type WorkbenchRuntimeControlOperationSequenceRequest, type WorkbenchRuntimeControlOperationSequenceResult, } from "./runtime-control.ts";
4
+ export { normalizeWorkbenchEngineCase, normalizeWorkbenchEngineCaseFiles, normalizeWorkbenchEngineCaseSpec, type WorkbenchEngineCase, type WorkbenchEngineCaseFiles, type WorkbenchEngineCaseEnvironmentSpec, type WorkbenchEngineCaseSpec, type WorkbenchEngineResolveResult, } from "./engine-resolve-result.ts";
5
+ export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineEngineResolver, defineSkillRunner, defineEngineRunner, defineImprover, operationDefinitionForRequest, workbenchAdapterManifestFromDefinition, type WorkbenchAdapterDefinition, type WorkbenchAdapterHandlerContext, type WorkbenchAdapterHandlerReturn, type WorkbenchAdapterOperationDefinition, type WorkbenchAdapterOperationHandler, } from "./adapter-definition.ts";
6
+ export { WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV, WORKBENCH_RUNTIME_CONTROL_TIMEOUT_MS_ENV, WORKBENCH_RUNTIME_CONTROL_URL_ENV, runWorkbenchRuntimeOperationSequence, type RunWorkbenchRuntimeControlOptions, type WorkbenchRuntimeControlInvocation, type WorkbenchRuntimeControlOperation, type WorkbenchRuntimeControlOperationInputs, type WorkbenchRuntimeControlOperationSequenceRequest, type WorkbenchRuntimeControlOperationSequenceResult, } from "./runtime-control.ts";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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,iCAAiC,EACjC,oCAAoC,EACpC,+BAA+B,EAC/B,uCAAuC,EACvC,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,iCAAiC,EACtC,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,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,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;AACjC,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,oCAAoC,EACpC,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACrC,KAAK,sCAAsC,EAC3C,KAAK,+CAA+C,EACpD,KAAK,8CAA8C,GACpD,MAAM,sBAAsB,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,6BAA6B,EAC7B,kCAAkC,EAClC,gCAAgC,EAChC,iCAAiC,EACjC,oCAAoC,EACpC,uCAAuC,EACvC,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,iCAAiC,EACtC,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,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,GACrC,MAAM,yBAAyB,CAAC;AACjC,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,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,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,6BAA6B,EAC7B,sCAAsC,EACtC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,mCAAmC,EACxC,KAAK,gCAAgC,GACtC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,mCAAmC,EACnC,wCAAwC,EACxC,iCAAiC,EACjC,oCAAoC,EACpC,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACrC,KAAK,sCAAsC,EAC3C,KAAK,+CAA+C,EACpD,KAAK,8CAA8C,GACpD,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
- export { WORKBENCH_ADAPTER_MANIFEST_PROTOCOL, adapterCommandName, assertWorkbenchAdapterOperationSupport, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, collectWorkbenchAdapterOperationIssues, collectWorkbenchAdapterOperationRequirements, parseWorkbenchAdapterManifest, normalizeWorkbenchAdapterOperation, workbenchAdapterManifestSupportsOperation, workbenchAdapterOperationCommand, workbenchAdapterOperationExecutor, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuth, withDefaultWorkbenchAdapterAuthProfiles, } from "./adapter-manifest.js";
1
+ export { WORKBENCH_ADAPTER_MANIFEST_PROTOCOL, adapterCommandName, assertWorkbenchAdapterOperationSupport, cloneWorkbenchAdapterManifest, collectWorkbenchAdapterAuthRequirements, collectWorkbenchAdapterInvocations, parseWorkbenchAdapterManifest, normalizeWorkbenchAdapterOperation, workbenchAdapterOperationCommand, workbenchAdapterOperationExecutor, workbenchAdapterManifestRequiresAuth, withDefaultWorkbenchAdapterAuthProfiles, } from "./adapter-manifest.js";
2
+ export { builtinWorkbenchAdapterManifest, builtinWorkbenchAdapterManifests, isWorkbenchBuiltInAdapterId, } from "./built-in-manifests.js";
2
3
  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 { normalizeWorkbenchEngineCase, normalizeWorkbenchEngineCaseFiles, normalizeWorkbenchEngineCaseSpec, normalizeWorkbenchEngineResolveResult, } from "./engine-resolve-result.js";
4
- export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineEngineResolver, defineCandidate, defineEngineRunner, defineImprover, operationDefinitionForRequest, runDefinedAdapter, workbenchAdapterManifestFromDefinition, } from "./adapter-definition.js";
5
- export { WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV, WORKBENCH_RUNTIME_CONTROL_URL_ENV, runWorkbenchRuntimeOperationSequence, } from "./runtime-control.js";
4
+ export { normalizeWorkbenchEngineCase, normalizeWorkbenchEngineCaseFiles, normalizeWorkbenchEngineCaseSpec, } from "./engine-resolve-result.js";
5
+ export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineEngineResolver, defineSkillRunner, defineEngineRunner, defineImprover, operationDefinitionForRequest, workbenchAdapterManifestFromDefinition, } from "./adapter-definition.js";
6
+ export { WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV, WORKBENCH_RUNTIME_CONTROL_TIMEOUT_MS_ENV, WORKBENCH_RUNTIME_CONTROL_URL_ENV, runWorkbenchRuntimeOperationSequence, } from "./runtime-control.js";
@@ -3,6 +3,7 @@ import type { WorkbenchAdapterOperation } from "./adapter-manifest.ts";
3
3
  import type { WorkbenchAdapterOperationResult } from "./adapter-protocol.ts";
4
4
  export declare const WORKBENCH_RUNTIME_CONTROL_URL_ENV = "WORKBENCH_RUNTIME_CONTROL_URL";
5
5
  export declare const WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV = "WORKBENCH_RUNTIME_CONTROL_TOKEN";
6
+ export declare const WORKBENCH_RUNTIME_CONTROL_TIMEOUT_MS_ENV = "WORKBENCH_RUNTIME_CONTROL_TIMEOUT_MS";
6
7
  export interface WorkbenchRuntimeControlInvocation {
7
8
  use: string;
8
9
  with?: Json;
@@ -15,7 +16,7 @@ export interface WorkbenchRuntimeControlOperation {
15
16
  label?: string;
16
17
  }
17
18
  export interface WorkbenchRuntimeControlOperationInputs {
18
- candidate?: readonly SurfaceSnapshotFile[];
19
+ skill?: readonly SurfaceSnapshotFile[];
19
20
  case?: readonly SurfaceSnapshotFile[];
20
21
  enginePrivate?: readonly SurfaceSnapshotFile[];
21
22
  traces?: readonly SurfaceSnapshotFile[];
@@ -43,6 +44,7 @@ export interface WorkbenchRuntimeControlOperationSequenceResult {
43
44
  export interface RunWorkbenchRuntimeControlOptions {
44
45
  url?: string;
45
46
  token?: string;
47
+ timeoutMs?: number;
46
48
  fetch?: typeof fetch;
47
49
  }
48
50
  export declare function runWorkbenchRuntimeOperationSequence(request: WorkbenchRuntimeControlOperationSequenceRequest, options?: RunWorkbenchRuntimeControlOptions): Promise<WorkbenchRuntimeControlOperationSequenceResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-control.d.ts","sourceRoot":"","sources":["../src/runtime-control.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,IAAI,EACJ,mBAAmB,EACnB,YAAY,EACZ,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EACV,yBAAyB,EAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,iCAAiC,kCAAkC,CAAC;AACjF,eAAO,MAAM,mCAAmC,oCAAoC,CAAC;AAErF,MAAM,WAAW,iCAAiC;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,yBAAyB,CAAC;IACrC,UAAU,EAAE,iCAAiC,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sCAAsC;IACrD,SAAS,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC3C,IAAI,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,aAAa,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC3C,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,+CAA+C;IAC9D,MAAM,CAAC,EAAE,sCAAsC,CAAC;IAChD,UAAU,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,8CAA8C;IAC7D,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,+BAA+B,EAAE,CAAC;IACpD,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,+CAA+C,EACxD,OAAO,GAAE,iCAAsC,GAC9C,OAAO,CAAC,8CAA8C,CAAC,CAgBzD"}
1
+ {"version":3,"file":"runtime-control.d.ts","sourceRoot":"","sources":["../src/runtime-control.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,IAAI,EACJ,mBAAmB,EACnB,YAAY,EACZ,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EACV,yBAAyB,EAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,iCAAiC,kCAAkC,CAAC;AACjF,eAAO,MAAM,mCAAmC,oCAAoC,CAAC;AACrF,eAAO,MAAM,wCAAwC,yCAAyC,CAAC;AAG/F,MAAM,WAAW,iCAAiC;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,yBAAyB,CAAC;IACrC,UAAU,EAAE,iCAAiC,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sCAAsC;IACrD,KAAK,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,aAAa,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC3C,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,+CAA+C;IAC9D,MAAM,CAAC,EAAE,sCAAsC,CAAC;IAChD,UAAU,EAAE,SAAS,gCAAgC,EAAE,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,8CAA8C;IAC7D,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,+BAA+B,EAAE,CAAC;IACpD,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,+CAA+C,EACxD,OAAO,GAAE,iCAAsC,GAC9C,OAAO,CAAC,8CAA8C,CAAC,CAiBzD"}
@@ -2,6 +2,8 @@ import http from "node:http";
2
2
  import https from "node:https";
3
3
  export const WORKBENCH_RUNTIME_CONTROL_URL_ENV = "WORKBENCH_RUNTIME_CONTROL_URL";
4
4
  export const WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV = "WORKBENCH_RUNTIME_CONTROL_TOKEN";
5
+ export const WORKBENCH_RUNTIME_CONTROL_TIMEOUT_MS_ENV = "WORKBENCH_RUNTIME_CONTROL_TIMEOUT_MS";
6
+ const DEFAULT_RUNTIME_CONTROL_TIMEOUT_MS = 30 * 60_000;
5
7
  export async function runWorkbenchRuntimeOperationSequence(request, options = {}) {
6
8
  const url = (options.url ?? process.env[WORKBENCH_RUNTIME_CONTROL_URL_ENV] ?? "").trim();
7
9
  const token = (options.token ?? process.env[WORKBENCH_RUNTIME_CONTROL_TOKEN_ENV] ?? "").trim();
@@ -10,33 +12,64 @@ export async function runWorkbenchRuntimeOperationSequence(request, options = {}
10
12
  }
11
13
  const fetchImpl = options.fetch ?? fetch;
12
14
  const endpoint = new URL("/v1/operation-sequence", url);
15
+ const timeoutMs = runtimeControlRequestTimeoutMs(options.timeoutMs);
13
16
  const response = options.fetch
14
- ? await postRuntimeControlJsonWithFetch(fetchImpl, endpoint, token, request)
15
- : await postRuntimeControlJson(endpoint, token, request);
17
+ ? await postRuntimeControlJsonWithFetch(fetchImpl, endpoint, token, request, timeoutMs)
18
+ : await postRuntimeControlJson(endpoint, token, request, timeoutMs);
16
19
  if (response.status < 200 || response.status >= 300) {
17
20
  const message = readResponseError(response.payload) ?? `Workbench runtime-control request failed with status ${response.status}.`;
18
21
  throw new Error(message);
19
22
  }
20
23
  return normalizeRuntimeControlOperationSequenceResult(response.payload);
21
24
  }
22
- async function postRuntimeControlJsonWithFetch(fetchImpl, url, token, request) {
23
- const response = await fetchImpl(url, {
24
- method: "POST",
25
- headers: {
26
- "authorization": `Bearer ${token}`,
27
- "content-type": "application/json",
28
- },
29
- body: JSON.stringify(request),
30
- });
31
- return {
32
- status: response.status,
33
- payload: await response.json().catch(() => null),
34
- };
25
+ async function postRuntimeControlJsonWithFetch(fetchImpl, url, token, request, timeoutMs) {
26
+ const controller = new AbortController();
27
+ let timedOut = false;
28
+ const timer = setTimeout(() => {
29
+ timedOut = true;
30
+ controller.abort();
31
+ }, timeoutMs);
32
+ try {
33
+ const response = await fetchImpl(url, {
34
+ method: "POST",
35
+ headers: {
36
+ "authorization": `Bearer ${token}`,
37
+ "content-type": "application/json",
38
+ },
39
+ body: JSON.stringify(request),
40
+ signal: controller.signal,
41
+ });
42
+ return {
43
+ status: response.status,
44
+ payload: await response.json().catch(() => null),
45
+ };
46
+ }
47
+ catch (error) {
48
+ if (timedOut) {
49
+ throw runtimeControlTimeoutError(timeoutMs);
50
+ }
51
+ throw error;
52
+ }
53
+ finally {
54
+ clearTimeout(timer);
55
+ }
35
56
  }
36
- async function postRuntimeControlJson(url, token, request) {
57
+ async function postRuntimeControlJson(url, token, request, timeoutMs) {
37
58
  const body = JSON.stringify(request);
38
59
  const client = url.protocol === "https:" ? https : http;
39
60
  return await new Promise((resolve, reject) => {
61
+ let settled = false;
62
+ let timer;
63
+ const settle = (callback) => {
64
+ if (settled) {
65
+ return;
66
+ }
67
+ settled = true;
68
+ if (timer) {
69
+ clearTimeout(timer);
70
+ }
71
+ callback();
72
+ };
40
73
  const outgoing = client.request(url, {
41
74
  method: "POST",
42
75
  headers: {
@@ -58,17 +91,36 @@ async function postRuntimeControlJson(url, token, request) {
58
91
  catch {
59
92
  payload = null;
60
93
  }
61
- resolve({
94
+ settle(() => resolve({
62
95
  status: incoming.statusCode ?? 0,
63
96
  payload,
64
- });
97
+ }));
65
98
  });
99
+ incoming.on("error", (error) => settle(() => reject(error)));
66
100
  });
67
- outgoing.on("error", reject);
68
- outgoing.setTimeout(0);
101
+ outgoing.on("error", (error) => settle(() => reject(error)));
102
+ timer = setTimeout(() => {
103
+ outgoing.destroy(runtimeControlTimeoutError(timeoutMs));
104
+ }, timeoutMs);
69
105
  outgoing.end(body);
70
106
  });
71
107
  }
108
+ function runtimeControlRequestTimeoutMs(configured) {
109
+ if (typeof configured === "number" && Number.isFinite(configured) && configured > 0) {
110
+ return Math.floor(configured);
111
+ }
112
+ const raw = process.env[WORKBENCH_RUNTIME_CONTROL_TIMEOUT_MS_ENV];
113
+ if (raw) {
114
+ const parsed = Number(raw);
115
+ if (Number.isFinite(parsed) && parsed > 0) {
116
+ return Math.floor(parsed);
117
+ }
118
+ }
119
+ return DEFAULT_RUNTIME_CONTROL_TIMEOUT_MS;
120
+ }
121
+ function runtimeControlTimeoutError(timeoutMs) {
122
+ return new Error(`Workbench runtime-control request timed out after ${timeoutMs}ms.`);
123
+ }
72
124
  function normalizeRuntimeControlOperationSequenceResult(value) {
73
125
  if (!value || typeof value !== "object" || Array.isArray(value)) {
74
126
  throw new Error("Workbench runtime-control response must be an object.");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workbench-ai/workbench-protocol",
3
- "version": "0.0.67",
3
+ "version": "0.0.69",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/workbench-ai/workbench.git",
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "dependencies": {
22
22
  "yaml": "^2.8.2",
23
- "@workbench-ai/workbench-contract": "0.0.67"
23
+ "@workbench-ai/workbench-contract": "0.0.69"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^24.3.1",