@workbench-ai/workbench-core 0.0.68 → 0.0.70

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.
@@ -0,0 +1,27 @@
1
+ import type { Json } from "@workbench-ai/workbench-contract";
2
+ export interface WorkbenchCodedErrorOptions {
3
+ retryable?: boolean;
4
+ remediation?: string;
5
+ subject?: Record<string, Json>;
6
+ exitCode?: number;
7
+ }
8
+ export declare class WorkbenchUserError extends Error {
9
+ constructor(message: string);
10
+ }
11
+ export declare class WorkbenchCodedError extends WorkbenchUserError {
12
+ readonly code: string;
13
+ readonly retryable: boolean;
14
+ readonly remediation?: string;
15
+ readonly subject?: Record<string, Json>;
16
+ readonly exitCode: number;
17
+ constructor(code: string, message: string, options?: WorkbenchCodedErrorOptions);
18
+ }
19
+ export declare function codedErrorFromUnknown(error: unknown, fallbackCode?: string): {
20
+ code: string;
21
+ message: string;
22
+ retryable: boolean;
23
+ remediation?: string;
24
+ subject?: Record<string, Json>;
25
+ exitCode: number;
26
+ };
27
+ //# sourceMappingURL=coded-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coded-errors.d.ts","sourceRoot":"","sources":["../src/coded-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAE7D,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,0BAA+B;CAapF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,SAAa,GAAG;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAyBA"}
@@ -0,0 +1,52 @@
1
+ export class WorkbenchUserError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "WorkbenchUserError";
5
+ }
6
+ }
7
+ export class WorkbenchCodedError extends WorkbenchUserError {
8
+ code;
9
+ retryable;
10
+ remediation;
11
+ subject;
12
+ exitCode;
13
+ constructor(code, message, options = {}) {
14
+ super(message);
15
+ this.name = "WorkbenchCodedError";
16
+ this.code = code;
17
+ this.retryable = options.retryable ?? false;
18
+ if (options.remediation) {
19
+ this.remediation = options.remediation;
20
+ }
21
+ if (options.subject) {
22
+ this.subject = options.subject;
23
+ }
24
+ this.exitCode = options.exitCode ?? 1;
25
+ }
26
+ }
27
+ export function codedErrorFromUnknown(error, fallbackCode = "internal") {
28
+ if (error instanceof WorkbenchCodedError) {
29
+ return {
30
+ code: error.code,
31
+ message: error.message,
32
+ retryable: error.retryable,
33
+ ...(error.remediation ? { remediation: error.remediation } : {}),
34
+ ...(error.subject ? { subject: error.subject } : {}),
35
+ exitCode: error.exitCode,
36
+ };
37
+ }
38
+ if (error instanceof WorkbenchUserError) {
39
+ return {
40
+ code: "usage",
41
+ message: error.message,
42
+ retryable: false,
43
+ exitCode: 2,
44
+ };
45
+ }
46
+ return {
47
+ code: fallbackCode,
48
+ message: error instanceof Error ? error.message : String(error),
49
+ retryable: false,
50
+ exitCode: 1,
51
+ };
52
+ }
@@ -5,6 +5,7 @@ export interface WorkbenchExecutionProgressTarget {
5
5
  ownerUserId?: string;
6
6
  flushWindowMs?: number;
7
7
  transport?: "http" | "stdout" | "both";
8
+ appendBatch?: (batch: WorkbenchExecutionEventBatch) => Promise<void>;
8
9
  }
9
10
  export interface WorkbenchExecutionEventPublisherContext {
10
11
  projectId: string;
@@ -45,9 +46,12 @@ export interface WorkbenchProgressStdoutEnvelope {
45
46
  batch: WorkbenchExecutionEventBatch;
46
47
  };
47
48
  }
49
+ export interface PublishWorkbenchProgressStdoutEnvelopeOptions {
50
+ forwardStdout?: boolean;
51
+ }
48
52
  export declare function createWorkbenchProgressStdoutParser(onEnvelope: (envelope: WorkbenchProgressStdoutEnvelope) => void): {
49
53
  write(chunk: Buffer | string): void;
50
54
  flush(): void;
51
55
  };
52
- export declare function publishWorkbenchProgressStdoutEnvelope(envelope: WorkbenchProgressStdoutEnvelope, expectedTarget?: WorkbenchExecutionProgressTarget): Promise<void>;
56
+ export declare function publishWorkbenchProgressStdoutEnvelope(envelope: WorkbenchProgressStdoutEnvelope, expectedTarget?: WorkbenchExecutionProgressTarget, options?: PublishWorkbenchProgressStdoutEnvelopeOptions): Promise<void>;
53
57
  //# sourceMappingURL=execution-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution-events.d.ts","sourceRoot":"","sources":["../src/execution-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,gCAAgC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,uCAAuC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gCAAgC,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,6BAA6B,CAAC;IACtC,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE,SAAS,4BAA4B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CAsClC;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,gCAAgC,GAAG,SAAS,EACvD,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAef;AAyCD,MAAM,WAAW,+BAA+B;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE;QACJ,MAAM,EAAE,kCAAkC,CAAC;QAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,4BAA4B,CAAC;KACrC,CAAC;CACH;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,CAAC,QAAQ,EAAE,+BAA+B,KAAK,IAAI,GAC9D;IACD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,IAAI,IAAI,CAAC;CACf,CA0DA;AAED,wBAAsB,sCAAsC,CAC1D,QAAQ,EAAE,+BAA+B,EACzC,cAAc,CAAC,EAAE,gCAAgC,GAChD,OAAO,CAAC,IAAI,CAAC,CAiBf"}
1
+ {"version":3,"file":"execution-events.d.ts","sourceRoot":"","sources":["../src/execution-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,gCAAgC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,uCAAuC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gCAAgC,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,6BAA6B,CAAC;IACtC,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE,SAAS,4BAA4B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CAsClC;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,gCAAgC,GAAG,SAAS,EACvD,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAef;AA0CD,MAAM,WAAW,+BAA+B;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE;QACJ,MAAM,EAAE,kCAAkC,CAAC;QAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,4BAA4B,CAAC;KACrC,CAAC;CACH;AAED,MAAM,WAAW,6CAA6C;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,CAAC,QAAQ,EAAE,+BAA+B,KAAK,IAAI,GAC9D;IACD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,IAAI,IAAI,CAAC;CACf,CA0DA;AAED,wBAAsB,sCAAsC,CAC1D,QAAQ,EAAE,+BAA+B,EACzC,cAAc,CAAC,EAAE,gCAAgC,EACjD,OAAO,GAAE,6CAAkD,GAC1D,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -75,6 +75,7 @@ function validProgressTarget(target) {
75
75
  ? { flushWindowMs: target.flushWindowMs }
76
76
  : {}),
77
77
  ...(target.transport === "stdout" || target.transport === "both" ? { transport: target.transport } : { transport: "http" }),
78
+ ...(target.appendBatch ? { appendBatch: target.appendBatch } : {}),
78
79
  };
79
80
  }
80
81
  async function publishProgressBatch(target, batch) {
@@ -147,7 +148,7 @@ export function createWorkbenchProgressStdoutParser(onEnvelope) {
147
148
  },
148
149
  };
149
150
  }
150
- export async function publishWorkbenchProgressStdoutEnvelope(envelope, expectedTarget) {
151
+ export async function publishWorkbenchProgressStdoutEnvelope(envelope, expectedTarget, options = {}) {
151
152
  const target = validProgressTarget(expectedTarget);
152
153
  if (!target) {
153
154
  await postProgressBody(envelope);
@@ -156,14 +157,23 @@ export async function publishWorkbenchProgressStdoutEnvelope(envelope, expectedT
156
157
  if (!progressEnvelopeMatchesTarget(envelope, target)) {
157
158
  return;
158
159
  }
159
- await postProgressBody({
160
+ if (target.appendBatch) {
161
+ await target.appendBatch(envelope.body.batch);
162
+ return;
163
+ }
164
+ const deliveredEnvelope = {
160
165
  url: target.url,
161
166
  body: {
162
167
  ...envelope.body,
163
168
  ...(target.ownerUserId ? { ownerUserId: target.ownerUserId } : {}),
164
169
  leaseToken: target.token,
165
170
  },
166
- });
171
+ };
172
+ if (target.transport === "stdout" && options.forwardStdout === true) {
173
+ process.stdout.write(`${WORKBENCH_PROGRESS_STDOUT_PREFIX}${JSON.stringify(deliveredEnvelope)}\n`);
174
+ return;
175
+ }
176
+ await postProgressBody(deliveredEnvelope);
167
177
  }
168
178
  function progressEnvelopeMatchesTarget(envelope, target) {
169
179
  return envelope.url === target.url &&
@@ -11,15 +11,16 @@ export interface WorkbenchExecutionDagResult {
11
11
  startedJobCount: number;
12
12
  cancelledJobCount: number;
13
13
  }
14
+ type WorkbenchExecutionDagJobHook = (job: RemoteWorkbenchJob) => void | Promise<void>;
14
15
  export interface WorkbenchExecutionDagRunInput {
15
16
  jobs: readonly RemoteWorkbenchJob[];
16
17
  capacity: WorkbenchExecutionDagCapacity;
17
18
  sandboxBackend: WorkbenchSandboxBackendName;
18
19
  executeJob: (job: RemoteWorkbenchJob) => Promise<RemoteWorkbenchJob>;
19
20
  now?: () => string;
20
- onJobQueued?: (job: RemoteWorkbenchJob) => void;
21
- onJobStarted?: (job: RemoteWorkbenchJob) => void;
22
- onJobFinished?: (job: RemoteWorkbenchJob) => void;
21
+ onJobQueued?: WorkbenchExecutionDagJobHook;
22
+ onJobStarted?: WorkbenchExecutionDagJobHook;
23
+ onJobFinished?: WorkbenchExecutionDagJobHook;
23
24
  }
24
25
  export declare function runWorkbenchExecutionDag(args: WorkbenchExecutionDagRunInput): Promise<WorkbenchExecutionDagResult>;
25
26
  export declare function workbenchJobDependencies(job: RemoteWorkbenchJob): string[];
@@ -28,4 +29,5 @@ export declare function workbenchJobHostCost(job: RemoteWorkbenchJob, backend: W
28
29
  export declare function addCapacity(left: WorkbenchExecutionDagCapacity, right: WorkbenchExecutionDagCapacity): WorkbenchExecutionDagCapacity;
29
30
  export declare function subtractCapacity(left: WorkbenchExecutionDagCapacity, right: WorkbenchExecutionDagCapacity): WorkbenchExecutionDagCapacity;
30
31
  export declare function capacityFits(available: WorkbenchExecutionDagCapacity, cost: WorkbenchExecutionDagCapacity): boolean;
32
+ export {};
31
33
  //# sourceMappingURL=execution-scheduler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution-scheduler.d.ts","sourceRoot":"","sources":["../src/execution-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,6BAA6B;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpC,QAAQ,EAAE,6BAA6B,CAAC;IACxC,cAAc,EAAE,2BAA2B,CAAC;IAC5C,UAAU,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACnD;AASD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAuLtC;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAM1E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GACtB,gCAAgC,CAYlC;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,2BAA2B,GACnC,sBAAsB,CAExB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,6BAA6B,EACnC,KAAK,EAAE,6BAA6B,GACnC,6BAA6B,CAM/B;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,6BAA6B,EACnC,KAAK,EAAE,6BAA6B,GACnC,6BAA6B,CAM/B;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,6BAA6B,EACxC,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAIT"}
1
+ {"version":3,"file":"execution-scheduler.d.ts","sourceRoot":"","sources":["../src/execution-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,6BAA6B;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,KAAK,4BAA4B,GAAG,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtF,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpC,QAAQ,EAAE,6BAA6B,CAAC;IACxC,cAAc,EAAE,2BAA2B,CAAC;IAC5C,UAAU,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,aAAa,CAAC,EAAE,4BAA4B,CAAC;CAC9C;AASD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAuMtC;AAYD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAM1E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GACtB,gCAAgC,CAYlC;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,2BAA2B,GACnC,sBAAsB,CAExB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,6BAA6B,EACnC,KAAK,EAAE,6BAA6B,GACnC,6BAA6B,CAM/B;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,6BAA6B,EACnC,KAAK,EAAE,6BAA6B,GACnC,6BAA6B,CAM/B;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,6BAA6B,EACxC,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAIT"}
@@ -37,14 +37,17 @@ export async function runWorkbenchExecutionDag(args) {
37
37
  throw new Error(`Job ${job.id} has unsupported initial DAG status ${job.status}.`);
38
38
  }
39
39
  pending.set(job.id, job);
40
- args.onJobQueued?.(job);
40
+ await runJobHook(args.onJobQueued, job);
41
41
  }
42
42
  while (pending.size > 0 || running.size > 0) {
43
- const progressed = startReadyJobs();
43
+ const progressed = await startReadyJobs();
44
44
  if (running.size === 0) {
45
45
  if (pending.size === 0) {
46
46
  break;
47
47
  }
48
+ if (await cancelTerminalBlockedPendingJobs()) {
49
+ continue;
50
+ }
48
51
  const ready = readyPendingJobs();
49
52
  if (ready.length > 0) {
50
53
  const blocked = ready[0];
@@ -69,7 +72,7 @@ export async function runWorkbenchExecutionDag(args) {
69
72
  startedJobCount,
70
73
  cancelledJobCount,
71
74
  };
72
- function startReadyJobs() {
75
+ async function startReadyJobs() {
73
76
  let progressed = false;
74
77
  for (const job of [...pending.values()]) {
75
78
  const dependencyStatus = dependencyTerminalStatus(job);
@@ -77,7 +80,7 @@ export async function runWorkbenchExecutionDag(args) {
77
80
  continue;
78
81
  }
79
82
  if (dependencyStatus !== "ready") {
80
- cancelPendingJob(job, dependencyStatus);
83
+ await cancelPendingJob(job, dependencyStatus);
81
84
  progressed = true;
82
85
  continue;
83
86
  }
@@ -97,7 +100,7 @@ export async function runWorkbenchExecutionDag(args) {
97
100
  };
98
101
  startedJobCount += 1;
99
102
  maxConcurrency = Math.max(maxConcurrency, running.size + 1);
100
- args.onJobStarted?.(runningJob);
103
+ await runJobHook(args.onJobStarted, runningJob);
101
104
  const promise = finishJob(runningJob, cost);
102
105
  running.set(job.id, { cost, promise });
103
106
  progressed = true;
@@ -107,6 +110,18 @@ export async function runWorkbenchExecutionDag(args) {
107
110
  function readyPendingJobs() {
108
111
  return [...pending.values()].filter((job) => dependencyTerminalStatus(job) === "ready");
109
112
  }
113
+ async function cancelTerminalBlockedPendingJobs() {
114
+ let cancelled = false;
115
+ for (const job of [...pending.values()]) {
116
+ const dependencyStatus = dependencyTerminalStatus(job);
117
+ if (dependencyStatus !== "failed" && dependencyStatus !== "cancelled") {
118
+ continue;
119
+ }
120
+ await cancelPendingJob(job, dependencyStatus);
121
+ cancelled = true;
122
+ }
123
+ return cancelled;
124
+ }
110
125
  function dependencyTerminalStatus(job) {
111
126
  const jobDependencies = dependencies.get(job.id) ?? [];
112
127
  let blocked = false;
@@ -128,7 +143,7 @@ export async function runWorkbenchExecutionDag(args) {
128
143
  }
129
144
  return blocked ? "blocked" : "ready";
130
145
  }
131
- function cancelPendingJob(job, dependencyStatus) {
146
+ async function cancelPendingJob(job, dependencyStatus) {
132
147
  pending.delete(job.id);
133
148
  const finishedAt = now();
134
149
  const cancelled = {
@@ -141,7 +156,7 @@ export async function runWorkbenchExecutionDag(args) {
141
156
  cancelledJobCount += 1;
142
157
  terminal.set(job.id, cancelled);
143
158
  results.set(job.id, cancelled);
144
- args.onJobFinished?.(cancelled);
159
+ await runJobHook(args.onJobFinished, cancelled);
145
160
  }
146
161
  async function finishJob(runningJob, cost) {
147
162
  let completed;
@@ -164,8 +179,14 @@ export async function runWorkbenchExecutionDag(args) {
164
179
  }
165
180
  terminal.set(runningJob.id, completed);
166
181
  results.set(runningJob.id, completed);
167
- args.onJobFinished?.(completed);
182
+ await runJobHook(args.onJobFinished, completed);
183
+ }
184
+ }
185
+ async function runJobHook(hook, job) {
186
+ if (!hook) {
187
+ return;
168
188
  }
189
+ await hook(job);
169
190
  }
170
191
  export function workbenchJobDependencies(job) {
171
192
  const input = jsonRecord(job.input);
@@ -1,7 +1,5 @@
1
- import { type EngineResolveBinding, type SurfaceSnapshotFile, type WorkbenchAdapterInvocation, type WorkbenchExecutionNetworkPolicy, type WorkbenchExecutionResources, type WorkbenchSpecValidation } from "@workbench-ai/workbench-contract";
1
+ import type { SurfaceSnapshotFile, WorkbenchAdapterInvocation, WorkbenchExecutionNetworkPolicy, WorkbenchExecutionResources } from "@workbench-ai/workbench-contract";
2
2
  import type { WorkbenchEngineCase, WorkbenchEngineCaseSpec } from "@workbench-ai/workbench-protocol";
3
- export declare const EVAL_SPEC_FILE = "eval.yaml";
4
- export declare const SKILL_SPEC_FILE = "skill.yaml";
5
3
  export interface WorkbenchRuntimeSpec {
6
4
  dockerfile: string;
7
5
  workdir?: string;
@@ -19,13 +17,6 @@ export interface WorkbenchPathRef {
19
17
  export interface WorkbenchSkillPrepareSpec {
20
18
  command: string;
21
19
  }
22
- export interface AuthoredEvalSpec {
23
- version: 4;
24
- name: string;
25
- description: string;
26
- adapters: string[];
27
- engine: WorkbenchAdapterInvocation;
28
- }
29
20
  export interface WorkbenchSkillAgentSpec extends WorkbenchAdapterInvocation {
30
21
  name: string;
31
22
  }
@@ -37,30 +28,6 @@ export interface WorkbenchSelectionSpec {
37
28
  metric: string;
38
29
  cases?: WorkbenchCaseSelector;
39
30
  }
40
- export interface WorkbenchSkillImproveSpec extends WorkbenchAdapterInvocation {
41
- edits: string[];
42
- optimizeOn?: WorkbenchCaseSelector;
43
- selectBy?: WorkbenchSelectionSpec;
44
- }
45
- export interface WorkbenchSkillManifestSpec {
46
- version: 4;
47
- name: string;
48
- description?: string;
49
- files: WorkbenchPathRef;
50
- prepare?: WorkbenchSkillPrepareSpec;
51
- adapters: string[];
52
- defaultAgent?: string;
53
- agents: Record<string, WorkbenchSkillAgentSpec>;
54
- improve?: WorkbenchSkillImproveSpec;
55
- }
56
- export interface ResolvedSkillSpec extends WorkbenchSkillManifestSpec {
57
- selectedAgentId: string;
58
- }
59
- export interface WorkbenchResolvedSource {
60
- version: 4;
61
- eval: AuthoredEvalSpec;
62
- skill: ResolvedSkillSpec;
63
- }
64
31
  export interface GenericRunSpec {
65
32
  version: 4;
66
33
  name: string;
@@ -75,9 +42,6 @@ export interface GenericRunSpec {
75
42
  description?: string;
76
43
  files: WorkbenchPathRef;
77
44
  prepare?: WorkbenchSkillPrepareSpec;
78
- defaultAgent: string;
79
- selectedAgentId: string;
80
- selectedAgentName: string;
81
45
  agents: Record<string, WorkbenchSkillAgentSpec>;
82
46
  improve?: {
83
47
  edits: string[];
@@ -101,33 +65,15 @@ export interface ResolvedEngineCaseExecutionConfig {
101
65
  run: WorkbenchAdapterInvocation;
102
66
  }
103
67
  export declare const DEFAULT_EXECUTION_RESOURCES: WorkbenchExecutionResources;
104
- export declare function validateWorkbenchResolvedSourceYaml(source: string): WorkbenchSpecValidation;
105
- export declare function resolveWorkbenchResolvedSourceYaml(source: string): GenericRunSpec;
106
- export declare function engineResolveBindingForSourceYaml(source: string): EngineResolveBinding;
107
- export declare function engineResolveBindingForSpec(spec: GenericRunSpec): EngineResolveBinding;
108
- export declare function resolveWorkbenchSourceFiles(args: {
109
- evalSource: string;
110
- skillSource: string;
111
- selectedAgentId?: string | null;
112
- }): GenericRunSpec;
113
- export declare function parseWorkbenchSourceFiles(args: {
114
- evalSource: string;
115
- skillSource?: string;
116
- selectedAgentId?: string | null;
117
- }): WorkbenchResolvedSource;
118
- export declare function serializeWorkbenchResolvedSourceYaml(source: WorkbenchResolvedSource): string;
119
- export declare function isWorkbenchSkillManifestPath(filePath: string): boolean;
120
68
  export declare function resolveEngineCaseExecutionConfig(args: {
121
69
  spec: GenericRunSpec;
122
70
  engineCase: GenericEngineCaseSpec;
123
71
  }): ResolvedEngineCaseExecutionConfig;
124
- export declare function engineResolveInvocationForSpec(spec: GenericRunSpec): WorkbenchAdapterInvocation;
125
72
  export declare function engineCaseFilesForRuntimeInput(args: {
126
73
  spec: GenericRunSpec;
127
74
  engineCase: WorkbenchEngineCase;
128
75
  }): SurfaceSnapshotFile[];
129
76
  export declare function engineCasePublicFiles(engineCase: WorkbenchEngineCase): SurfaceSnapshotFile[];
130
- export declare function engineCasePrivateFiles(engineCase: WorkbenchEngineCase): SurfaceSnapshotFile[];
131
77
  export declare function runtimeResources(runtime: WorkbenchRuntimeSpec): WorkbenchExecutionResources;
132
78
  export declare function runtimeNetwork(runtime: WorkbenchRuntimeSpec): WorkbenchExecutionNetworkPolicy;
133
79
  export declare function runtimeSandboxRef(runtime: WorkbenchRuntimeSpec): string;
@@ -1 +1 @@
1
- {"version":3,"file":"generic-spec.d.ts","sourceRoot":"","sources":["../src/generic-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generic-spec.d.ts","sourceRoot":"","sources":["../src/generic-spec.ts"],"names":[],"mappings":"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"}