@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.
- package/dist/adapter-definition.d.ts +3 -9
- package/dist/adapter-definition.d.ts.map +1 -1
- package/dist/adapter-definition.js +8 -72
- package/dist/adapter-manifest.d.ts +3 -7
- package/dist/adapter-manifest.d.ts.map +1 -1
- package/dist/adapter-manifest.js +13 -13
- package/dist/adapter-protocol.d.ts +22 -5
- package/dist/adapter-protocol.d.ts.map +1 -1
- package/dist/adapter-protocol.js +62 -16
- package/dist/built-in-manifests.d.ts +8 -0
- package/dist/built-in-manifests.d.ts.map +1 -0
- package/dist/built-in-manifests.js +85 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/runtime-control.d.ts +3 -1
- package/dist/runtime-control.d.ts.map +1 -1
- package/dist/runtime-control.js +72 -20
- package/package.json +2 -2
|
@@ -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
|
-
|
|
6
|
+
install?: string[];
|
|
7
7
|
auth?: WorkbenchAdapterAuthManifest;
|
|
8
8
|
engineResolve?: WorkbenchAdapterOperationDefinition<TContext>;
|
|
9
9
|
engineRun?: WorkbenchAdapterOperationDefinition<TContext>;
|
|
10
|
-
|
|
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
|
|
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":"
|
|
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,
|
|
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
|
|
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, "
|
|
27
|
-
addOperation(operations, definition.id, "
|
|
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
|
-
|
|
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 === "
|
|
83
|
-
return definition.
|
|
46
|
+
if (operation === "skill.run") {
|
|
47
|
+
return definition.skillRun;
|
|
84
48
|
}
|
|
85
|
-
if (operation === "
|
|
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.
|
|
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
|
-
|
|
6
|
+
install: string[];
|
|
7
7
|
auth?: WorkbenchAdapterAuthManifest;
|
|
8
8
|
slots?: Record<string, WorkbenchAdapterSlotManifest>;
|
|
9
9
|
}
|
|
10
|
-
export type WorkbenchPrimitiveAdapterOperation = "engine.resolve" | "engine.run" | "
|
|
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":"AAEA,eAAO,MAAM,mCAAmC,
|
|
1
|
+
{"version":3,"file":"adapter-manifest.d.ts","sourceRoot":"","sources":["../src/adapter-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter-manifest.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import YAML from "yaml";
|
|
2
|
-
export const WORKBENCH_ADAPTER_MANIFEST_PROTOCOL = "workbench.adapter.
|
|
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
|
-
|
|
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
|
-
|
|
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", "
|
|
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
|
|
45
|
+
const install = record.install === undefined
|
|
46
46
|
? []
|
|
47
|
-
: readStringArray(record.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 === "
|
|
439
|
-
value === "
|
|
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,
|
|
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,
|
|
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
|
-
|
|
20
|
+
eval?: {
|
|
20
21
|
name?: string;
|
|
21
22
|
description?: string;
|
|
22
23
|
};
|
|
23
|
-
|
|
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
|
-
|
|
56
|
+
skill?: string;
|
|
57
|
+
skills?: string;
|
|
56
58
|
enginePrivate?: string;
|
|
57
59
|
};
|
|
58
60
|
}
|
|
59
|
-
export
|
|
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":"AAGA,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"adapter-protocol.d.ts","sourceRoot":"","sources":["../src/adapter-protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter-protocol.js
CHANGED
|
@@ -25,7 +25,8 @@ export function normalizeWorkbenchAdapterOperationRequest(value) {
|
|
|
25
25
|
"workspace",
|
|
26
26
|
"output",
|
|
27
27
|
"result",
|
|
28
|
-
"
|
|
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.
|
|
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 === "
|
|
112
|
-
return
|
|
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.
|
|
123
|
-
...(record.
|
|
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
|
|
130
|
-
const record = requiredJsonRecord(value, "adapter request context.
|
|
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
|
|
137
|
-
const record = requiredJsonRecord(value, "adapter request context.
|
|
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:
|
|
142
|
-
...(record.run !== undefined ? { run: normalizeContextInvocation(record.run, "adapter request context.
|
|
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
|
|
146
|
-
const record = requiredJsonRecord(value, "adapter request context.
|
|
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.
|
|
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
|
|
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,
|
|
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,
|
|
4
|
-
export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineEngineResolver,
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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,
|
|
4
|
-
export { adapterResult, adapterSlot, adapterSlotInvocation, defineAdapter, defineEngineResolver,
|
|
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
|
-
|
|
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;
|
|
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"}
|
package/dist/runtime-control.js
CHANGED
|
@@ -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
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
23
|
+
"@workbench-ai/workbench-contract": "0.0.69"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "^24.3.1",
|