@empiricalrun/playwright-utils 0.58.4 → 0.58.6
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/CHANGELOG.md +24 -0
- package/dist/api-worker-client.d.ts +17 -0
- package/dist/api-worker-client.d.ts.map +1 -1
- package/dist/api-worker-client.js +34 -2
- package/dist/generated/api-worker-openapi.d.ts +96 -177
- package/dist/generated/api-worker-openapi.d.ts.map +1 -1
- package/dist/overlay-tests/cache.spec.js +28 -4
- package/dist/reporter/harness.d.ts +4 -0
- package/dist/reporter/harness.d.ts.map +1 -1
- package/dist/reporter/harness.js +20 -8
- package/dist/reporter/ibr-utils.d.ts +3 -0
- package/dist/reporter/ibr-utils.d.ts.map +1 -1
- package/dist/reporter/ibr-utils.js +25 -18
- package/dist/reporter/incremental-blob-reporter.d.ts +1 -0
- package/dist/reporter/incremental-blob-reporter.d.ts.map +1 -1
- package/dist/reporter/incremental-blob-reporter.js +5 -4
- package/dist/reporter/lifecycle-events.d.ts +15 -5
- package/dist/reporter/lifecycle-events.d.ts.map +1 -1
- package/dist/reporter/lifecycle-events.js +91 -64
- package/dist/reporter/parity-utils.d.ts +21 -0
- package/dist/reporter/parity-utils.d.ts.map +1 -1
- package/dist/reporter/parity-utils.js +73 -1
- package/dist/reporter/test-case-sync.d.ts +2 -25
- package/dist/reporter/test-case-sync.d.ts.map +1 -1
- package/dist/reporter/uploader.d.ts.map +1 -1
- package/dist/reporter/uploader.js +22 -1
- package/dist/test/expect/visual.d.ts.map +1 -1
- package/dist/test/expect/visual.js +4 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.js +5 -0
- package/dist/test/scripts/pw-locator-patch/vision/query.d.ts.map +1 -1
- package/dist/test/scripts/pw-locator-patch/vision/query.js +4 -1
- package/package.json +5 -5
- package/upstream-oracle/README.md +36 -7
- package/upstream-oracle/ibr-adapter.js +60 -5
- package/upstream-oracle/run.mjs +84 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @empiricalrun/playwright-utils
|
|
2
2
|
|
|
3
|
+
## 0.58.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- bcf5ed7: chore: drop fallbacks for LLM proxy
|
|
8
|
+
- 68091d9: feat: route LLM calls via api-worker proxy for usage attribution
|
|
9
|
+
- Updated dependencies [bcf5ed7]
|
|
10
|
+
- Updated dependencies [68091d9]
|
|
11
|
+
- Updated dependencies [ed03fc8]
|
|
12
|
+
- @empiricalrun/llm@0.27.1
|
|
13
|
+
- @empiricalrun/cua@0.4.2
|
|
14
|
+
- @empiricalrun/reporter@0.30.0
|
|
15
|
+
|
|
16
|
+
## 0.58.5
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 157ea19: fix: incremental blob reporter serializes config and projects like the built-in blob reporter
|
|
21
|
+
- 8e8cea6: fix: incremental blob reporter passes error objects through unmodified, preserving value, cause and AggregateError sub-errors
|
|
22
|
+
- ff99f5e: fix: incremental blob reporter emits step attachments at onStepEnd and relativizes step locations
|
|
23
|
+
- 15e769c: feat: log pending upload counts around run end
|
|
24
|
+
- Updated dependencies [15e769c]
|
|
25
|
+
- @empiricalrun/r2-uploader@0.10.2
|
|
26
|
+
|
|
3
27
|
## 0.58.4
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -9,6 +9,23 @@ export type TwoCaptchaProxyResponse = components["schemas"]["TwoCaptchaProxyResp
|
|
|
9
9
|
export type ProjectKvGetResponse = components["schemas"]["ProjectKvGetResponse"];
|
|
10
10
|
export type ProjectKvSetRequest = NonNullable<paths["/api/projects/kv"]["post"]["requestBody"]>["content"]["application/json"];
|
|
11
11
|
export type ProjectKvSetResponse = components["schemas"]["ProjectKvSetResponse"];
|
|
12
|
+
/**
|
|
13
|
+
* OpenAI client config for the LLM calls playwright-utils makes from inside a
|
|
14
|
+
* test run — the overlay-dismissal browser agent and the toLookRight visual
|
|
15
|
+
* assertion. Both go through api-worker's proxy, which holds the provider key
|
|
16
|
+
* and forwards via the Cloudflare AI Gateway; the run worker puts
|
|
17
|
+
* EMPIRICALRUN_API_KEY and DASHBOARD_DOMAIN in the Playwright child process.
|
|
18
|
+
*
|
|
19
|
+
* There is deliberately no fallback to a direct OPENAI_API_KEY. A fallback
|
|
20
|
+
* makes the transport depend on ambient env, which hides a broken proxy behind
|
|
21
|
+
* a working direct call and lets a test that clears one credential still reach
|
|
22
|
+
* the model. Returns undefined only for a pi sandbox, whose OPENAI_BASE_URL
|
|
23
|
+
* already points at the sidecar's own keyless proxy route.
|
|
24
|
+
*/
|
|
25
|
+
export declare function llmProxyOpenAIConfig(): {
|
|
26
|
+
baseURL: string;
|
|
27
|
+
apiKey: string;
|
|
28
|
+
} | undefined;
|
|
12
29
|
export declare class HTTPError extends Error {
|
|
13
30
|
status: number;
|
|
14
31
|
constructor(message: string, status: number);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-worker-client.d.ts","sourceRoot":"","sources":["../src/api-worker-client.ts"],"names":[],"mappings":"AACA,OAAqB,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAExE,KAAK,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAEzC,KAAK,iBAAiB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAC9B,UAAU,CAAC,SAAS,CAAC,CAAC,6BAA6B,CAAC,CAAC;AACvD,MAAM,MAAM,qBAAqB,GAC/B,UAAU,CAAC,SAAS,CAAC,CAAC,8BAA8B,CAAC,CAAC;AACxD,MAAM,MAAM,sBAAsB,GAChC,UAAU,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAClD,MAAM,MAAM,uBAAuB,GACjC,UAAU,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACnD,MAAM,MAAM,oBAAoB,GAC9B,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAChD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAC3C,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CACjD,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACjC,MAAM,MAAM,oBAAoB,GAC9B,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"api-worker-client.d.ts","sourceRoot":"","sources":["../src/api-worker-client.ts"],"names":[],"mappings":"AACA,OAAqB,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAExE,KAAK,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAEzC,KAAK,iBAAiB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAC9B,UAAU,CAAC,SAAS,CAAC,CAAC,6BAA6B,CAAC,CAAC;AACvD,MAAM,MAAM,qBAAqB,GAC/B,UAAU,CAAC,SAAS,CAAC,CAAC,8BAA8B,CAAC,CAAC;AACxD,MAAM,MAAM,sBAAsB,GAChC,UAAU,CAAC,SAAS,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAClD,MAAM,MAAM,uBAAuB,GACjC,UAAU,CAAC,SAAS,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACnD,MAAM,MAAM,oBAAoB,GAC9B,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAChD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAC3C,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CACjD,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACjC,MAAM,MAAM,oBAAoB,GAC9B,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAQhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAChC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC,SAAS,CAgBZ;AAED,qBAAa,SAAU,SAAQ,KAAK;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAG1C;CACF;AAED,qBAAa,qBAAsB,SAAQ,SAAS;CAAG;AACvD,qBAAa,kBAAmB,SAAQ,SAAS;CAAG;AA+CpD,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAErC,YAAY,EACV,aAAa,EACb,OAAO,GACR,GAAE;QACD,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,EAgBL;IAED,UAAU,IAAI,MAAM,CAEnB;IAEK,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAK7D;IAEK,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAK3E;IAEK,iBAAiB,CACrB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAKhC;IAED,MAAM,CAAC,CAAC,EACN,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,QAAQ,CAAC;KACpB,EACD,KAAK,EAAE,MAAM,GACZ,CAAC,CAUH;CACF"}
|
|
@@ -4,8 +4,41 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.ApiWorkerClient = exports.RetryableHTTPError = exports.NonRetryableHTTPError = exports.HTTPError = void 0;
|
|
7
|
+
exports.llmProxyOpenAIConfig = llmProxyOpenAIConfig;
|
|
7
8
|
const async_retry_1 = __importDefault(require("async-retry"));
|
|
8
9
|
const openapi_fetch_1 = __importDefault(require("openapi-fetch"));
|
|
10
|
+
const DEFAULT_API_WORKER_URL = "https://api.empirical.run";
|
|
11
|
+
function apiWorkerBaseUrl() {
|
|
12
|
+
return process.env.DASHBOARD_DOMAIN || DEFAULT_API_WORKER_URL;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* OpenAI client config for the LLM calls playwright-utils makes from inside a
|
|
16
|
+
* test run — the overlay-dismissal browser agent and the toLookRight visual
|
|
17
|
+
* assertion. Both go through api-worker's proxy, which holds the provider key
|
|
18
|
+
* and forwards via the Cloudflare AI Gateway; the run worker puts
|
|
19
|
+
* EMPIRICALRUN_API_KEY and DASHBOARD_DOMAIN in the Playwright child process.
|
|
20
|
+
*
|
|
21
|
+
* There is deliberately no fallback to a direct OPENAI_API_KEY. A fallback
|
|
22
|
+
* makes the transport depend on ambient env, which hides a broken proxy behind
|
|
23
|
+
* a working direct call and lets a test that clears one credential still reach
|
|
24
|
+
* the model. Returns undefined only for a pi sandbox, whose OPENAI_BASE_URL
|
|
25
|
+
* already points at the sidecar's own keyless proxy route.
|
|
26
|
+
*/
|
|
27
|
+
function llmProxyOpenAIConfig() {
|
|
28
|
+
if (process.env.OPENAI_BASE_URL) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const apiKey = process.env.EMPIRICALRUN_API_KEY;
|
|
32
|
+
if (!apiKey) {
|
|
33
|
+
throw new Error("EMPIRICALRUN_API_KEY is required to reach Empirical's LLM proxy. Set it, " +
|
|
34
|
+
"or point OPENAI_BASE_URL at a proxy of your own — playwright-utils no " +
|
|
35
|
+
"longer calls OpenAI directly with OPENAI_API_KEY.");
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
baseURL: `${apiWorkerBaseUrl()}/api/llm/openai/v1`,
|
|
39
|
+
apiKey,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
9
42
|
class HTTPError extends Error {
|
|
10
43
|
status;
|
|
11
44
|
constructor(message, status) {
|
|
@@ -63,8 +96,7 @@ class ApiWorkerClient {
|
|
|
63
96
|
baseUrl;
|
|
64
97
|
client;
|
|
65
98
|
constructor({ projectApiKey, baseUrl, } = {}) {
|
|
66
|
-
this.baseUrl =
|
|
67
|
-
baseUrl || process.env.DASHBOARD_DOMAIN || "https://api.empirical.run";
|
|
99
|
+
this.baseUrl = baseUrl || apiWorkerBaseUrl();
|
|
68
100
|
const apiKey = projectApiKey || process.env.EMPIRICALRUN_API_KEY;
|
|
69
101
|
if (!apiKey) {
|
|
70
102
|
throw new Error("EMPIRICALRUN_API_KEY environment variable is required");
|
|
@@ -2433,26 +2433,6 @@ export interface paths {
|
|
|
2433
2433
|
patch?: never;
|
|
2434
2434
|
trace?: never;
|
|
2435
2435
|
};
|
|
2436
|
-
"/api/chat-sessions/{id}/sandbox/terminal-session": {
|
|
2437
|
-
parameters: {
|
|
2438
|
-
query?: never;
|
|
2439
|
-
header?: never;
|
|
2440
|
-
path?: never;
|
|
2441
|
-
cookie?: never;
|
|
2442
|
-
};
|
|
2443
|
-
get?: never;
|
|
2444
|
-
put?: never;
|
|
2445
|
-
/**
|
|
2446
|
-
* ⚙️ Create a sandbox terminal session
|
|
2447
|
-
* @description Creates a PTY session on the sandbox and returns the WebSocket URL and token to connect to it. Super-admin only.
|
|
2448
|
-
*/
|
|
2449
|
-
post: operations["createChatSessionSandboxTerminalSession"];
|
|
2450
|
-
delete?: never;
|
|
2451
|
-
options?: never;
|
|
2452
|
-
head?: never;
|
|
2453
|
-
patch?: never;
|
|
2454
|
-
trace?: never;
|
|
2455
|
-
};
|
|
2456
2436
|
"/api/chat-sessions/{id}/session-state": {
|
|
2457
2437
|
parameters: {
|
|
2458
2438
|
query?: never;
|
|
@@ -2593,6 +2573,26 @@ export interface paths {
|
|
|
2593
2573
|
patch?: never;
|
|
2594
2574
|
trace?: never;
|
|
2595
2575
|
};
|
|
2576
|
+
"/api/chat-sessions/sandbox/protected-branches": {
|
|
2577
|
+
parameters: {
|
|
2578
|
+
query?: never;
|
|
2579
|
+
header?: never;
|
|
2580
|
+
path?: never;
|
|
2581
|
+
cookie?: never;
|
|
2582
|
+
};
|
|
2583
|
+
/**
|
|
2584
|
+
* ⚙️ List branches the sandbox may not push to
|
|
2585
|
+
* @description Returns the project's default branch and the chat session's base branch. The sandbox git proxy blocks pushes to these. The session is derived from the sandbox-delegation principal.
|
|
2586
|
+
*/
|
|
2587
|
+
get: operations["getChatSessionSandboxProtectedBranches"];
|
|
2588
|
+
put?: never;
|
|
2589
|
+
post?: never;
|
|
2590
|
+
delete?: never;
|
|
2591
|
+
options?: never;
|
|
2592
|
+
head?: never;
|
|
2593
|
+
patch?: never;
|
|
2594
|
+
trace?: never;
|
|
2595
|
+
};
|
|
2596
2596
|
"/api/chat-sessions/users": {
|
|
2597
2597
|
parameters: {
|
|
2598
2598
|
query?: never;
|
|
@@ -4729,26 +4729,6 @@ export interface paths {
|
|
|
4729
4729
|
patch?: never;
|
|
4730
4730
|
trace?: never;
|
|
4731
4731
|
};
|
|
4732
|
-
"/api/projects/check-prompt": {
|
|
4733
|
-
parameters: {
|
|
4734
|
-
query?: never;
|
|
4735
|
-
header?: never;
|
|
4736
|
-
path?: never;
|
|
4737
|
-
cookie?: never;
|
|
4738
|
-
};
|
|
4739
|
-
get?: never;
|
|
4740
|
-
put?: never;
|
|
4741
|
-
/**
|
|
4742
|
-
* ⚙️ Validate a prompt against criteria
|
|
4743
|
-
* @description Uses an LLM to validate whether a prompt satisfies the given criteria.
|
|
4744
|
-
*/
|
|
4745
|
-
post: operations["checkPrompt"];
|
|
4746
|
-
delete?: never;
|
|
4747
|
-
options?: never;
|
|
4748
|
-
head?: never;
|
|
4749
|
-
patch?: never;
|
|
4750
|
-
trace?: never;
|
|
4751
|
-
};
|
|
4752
4732
|
"/api/projects/check-slug": {
|
|
4753
4733
|
parameters: {
|
|
4754
4734
|
query?: never;
|
|
@@ -6479,27 +6459,6 @@ export interface components {
|
|
|
6479
6459
|
test_cases_sync_error_at: string | null;
|
|
6480
6460
|
};
|
|
6481
6461
|
};
|
|
6482
|
-
CheckPromptResponse: {
|
|
6483
|
-
/** @description Response payload. */
|
|
6484
|
-
data: {
|
|
6485
|
-
validation: components["schemas"]["PromptValidationResult"];
|
|
6486
|
-
};
|
|
6487
|
-
};
|
|
6488
|
-
PromptValidationResult: {
|
|
6489
|
-
/**
|
|
6490
|
-
* @description Validation outcome.
|
|
6491
|
-
* @enum {string}
|
|
6492
|
-
*/
|
|
6493
|
-
status: "pass" | "needs_more";
|
|
6494
|
-
/** @description Human-readable feedback. */
|
|
6495
|
-
assistant_message: string;
|
|
6496
|
-
/** @description Requirements still missing. */
|
|
6497
|
-
missing_items: string[];
|
|
6498
|
-
/** @description Requirements already covered. */
|
|
6499
|
-
covered_items: string[];
|
|
6500
|
-
/** @description Model confidence (0-1). */
|
|
6501
|
-
confidence: number;
|
|
6502
|
-
};
|
|
6503
6462
|
ProjectKvGetResponse: {
|
|
6504
6463
|
/** @description Response payload. */
|
|
6505
6464
|
data: {
|
|
@@ -8961,6 +8920,10 @@ export interface components {
|
|
|
8961
8920
|
/** @description Human-readable error message. */
|
|
8962
8921
|
error: string;
|
|
8963
8922
|
};
|
|
8923
|
+
SandboxProtectedBranches: {
|
|
8924
|
+
/** @description Branch names the sandbox must not push to. */
|
|
8925
|
+
branches: string[];
|
|
8926
|
+
};
|
|
8964
8927
|
SandboxActionSuccess: {
|
|
8965
8928
|
/** @description Always true when the action succeeded. */
|
|
8966
8929
|
success: boolean;
|
|
@@ -9027,14 +8990,6 @@ export interface components {
|
|
|
9027
8990
|
/** @description Human-readable error message. */
|
|
9028
8991
|
error: string;
|
|
9029
8992
|
};
|
|
9030
|
-
SandboxTerminalSession: {
|
|
9031
|
-
/** @description WebSocket URL for the PTY session. */
|
|
9032
|
-
ws_url: string;
|
|
9033
|
-
/** @description Auth token for the terminal WebSocket. */
|
|
9034
|
-
token: string;
|
|
9035
|
-
/** @description Error message, or null on success. */
|
|
9036
|
-
error: string | null;
|
|
9037
|
-
};
|
|
9038
8993
|
SubscribeChatSessionResponse: {
|
|
9039
8994
|
data: {
|
|
9040
8995
|
already_waiting: boolean;
|
|
@@ -10184,8 +10139,6 @@ export interface components {
|
|
|
10184
10139
|
id: number;
|
|
10185
10140
|
/** @description ISO 8601 creation timestamp. */
|
|
10186
10141
|
created_at: string;
|
|
10187
|
-
/** @description Test case slug. */
|
|
10188
|
-
slug: string | null;
|
|
10189
10142
|
/** @description Playwright test ID. */
|
|
10190
10143
|
pw_test_id: string | null;
|
|
10191
10144
|
/** @description Test run ID. */
|
|
@@ -10703,6 +10656,23 @@ export interface components {
|
|
|
10703
10656
|
/** @description Playwright test id, if known. */
|
|
10704
10657
|
pw_test_id?: string | null;
|
|
10705
10658
|
}[];
|
|
10659
|
+
/** @description Scheduled dependency groups (serial blocks). */
|
|
10660
|
+
dependency_groups?: {
|
|
10661
|
+
/** @description Stable group id. */
|
|
10662
|
+
id: string;
|
|
10663
|
+
/**
|
|
10664
|
+
* @description Only Playwright serial groups today.
|
|
10665
|
+
* @enum {string}
|
|
10666
|
+
*/
|
|
10667
|
+
kind: "playwright_serial";
|
|
10668
|
+
/** @description Members in execution order. */
|
|
10669
|
+
members: {
|
|
10670
|
+
/** @description Playwright test id of the member. */
|
|
10671
|
+
test_case_id: string;
|
|
10672
|
+
/** @description 0-based execution order within the group. */
|
|
10673
|
+
dependency_order: number;
|
|
10674
|
+
}[];
|
|
10675
|
+
}[];
|
|
10706
10676
|
/** @description Legacy base64-gzip manifest blob. Ignored when `tests` is present. */
|
|
10707
10677
|
run_manifest?: string;
|
|
10708
10678
|
/** @description Zero-based shard index, when the run is sharded. */
|
|
@@ -10772,6 +10742,8 @@ export interface components {
|
|
|
10772
10742
|
last_commit_before_run_started_at: string | null;
|
|
10773
10743
|
/** @description Snoozes matching this case at read time. */
|
|
10774
10744
|
snooze_info: components["schemas"]["TestRunCaseSnoozeInfo"][];
|
|
10745
|
+
/** @description Attempts that never ran because an earlier member of this case's Playwright serial group failed on the same attempt. Null when the case is not in a snapshotted group or when nothing was blocked. */
|
|
10746
|
+
skipped_attempts: components["schemas"]["TestRunCaseSkippedAttempt"][] | null;
|
|
10775
10747
|
};
|
|
10776
10748
|
TestRunCaseRetryDetail: {
|
|
10777
10749
|
/** @description Zero-based retry attempt index. */
|
|
@@ -10845,6 +10817,19 @@ export interface components {
|
|
|
10845
10817
|
/** @description Environment the snooze is scoped to, if any. */
|
|
10846
10818
|
scoped_to_environment_id: number | null;
|
|
10847
10819
|
};
|
|
10820
|
+
TestRunCaseSkippedAttempt: {
|
|
10821
|
+
/** @description Attempt index this explains. */
|
|
10822
|
+
retry_index: number;
|
|
10823
|
+
/** @description The serial-group member that blocked this attempt. */
|
|
10824
|
+
blocked_by: {
|
|
10825
|
+
/** @description Playwright test id of the blocking test. */
|
|
10826
|
+
pw_test_id: string | null;
|
|
10827
|
+
/** @description Title of the blocking test. */
|
|
10828
|
+
name: string;
|
|
10829
|
+
/** @description The blocking test's outcome on this attempt. */
|
|
10830
|
+
status: string;
|
|
10831
|
+
};
|
|
10832
|
+
};
|
|
10848
10833
|
GetTestRunCaseResponse: {
|
|
10849
10834
|
/** @description Response payload. */
|
|
10850
10835
|
data: {
|
|
@@ -10886,6 +10871,8 @@ export interface components {
|
|
|
10886
10871
|
last_commit_before_run_started_at: string | null;
|
|
10887
10872
|
/** @description Snoozes matching this case at read time. */
|
|
10888
10873
|
snooze_info: components["schemas"]["TestRunCaseSnoozeInfo"][];
|
|
10874
|
+
/** @description Attempts that never ran because an earlier member of this case's Playwright serial group failed on the same attempt. Null when the case is not in a snapshotted group or when nothing was blocked. */
|
|
10875
|
+
skipped_attempts: components["schemas"]["TestRunCaseSkippedAttempt"][] | null;
|
|
10889
10876
|
};
|
|
10890
10877
|
};
|
|
10891
10878
|
UiGetTestRunResponse: {
|
|
@@ -19253,65 +19240,6 @@ export interface operations {
|
|
|
19253
19240
|
};
|
|
19254
19241
|
};
|
|
19255
19242
|
};
|
|
19256
|
-
createChatSessionSandboxTerminalSession: {
|
|
19257
|
-
parameters: {
|
|
19258
|
-
query?: never;
|
|
19259
|
-
header?: never;
|
|
19260
|
-
path: {
|
|
19261
|
-
/** @description Chat session ID. */
|
|
19262
|
-
id: number;
|
|
19263
|
-
};
|
|
19264
|
-
cookie?: never;
|
|
19265
|
-
};
|
|
19266
|
-
requestBody?: never;
|
|
19267
|
-
responses: {
|
|
19268
|
-
/** @description Terminal session connection details. */
|
|
19269
|
-
200: {
|
|
19270
|
-
headers: {
|
|
19271
|
-
[name: string]: unknown;
|
|
19272
|
-
};
|
|
19273
|
-
content: {
|
|
19274
|
-
"application/json": components["schemas"]["SandboxTerminalSession"];
|
|
19275
|
-
};
|
|
19276
|
-
};
|
|
19277
|
-
/** @description Invalid request. */
|
|
19278
|
-
400: {
|
|
19279
|
-
headers: {
|
|
19280
|
-
[name: string]: unknown;
|
|
19281
|
-
};
|
|
19282
|
-
content: {
|
|
19283
|
-
"application/json": components["schemas"]["ErrorResponse"];
|
|
19284
|
-
};
|
|
19285
|
-
};
|
|
19286
|
-
/** @description Forbidden. */
|
|
19287
|
-
403: {
|
|
19288
|
-
headers: {
|
|
19289
|
-
[name: string]: unknown;
|
|
19290
|
-
};
|
|
19291
|
-
content: {
|
|
19292
|
-
"application/json": components["schemas"]["SandboxTerminalSession"];
|
|
19293
|
-
};
|
|
19294
|
-
};
|
|
19295
|
-
/** @description Sandbox not found. */
|
|
19296
|
-
404: {
|
|
19297
|
-
headers: {
|
|
19298
|
-
[name: string]: unknown;
|
|
19299
|
-
};
|
|
19300
|
-
content: {
|
|
19301
|
-
"application/json": components["schemas"]["SandboxTerminalSession"];
|
|
19302
|
-
};
|
|
19303
|
-
};
|
|
19304
|
-
/** @description Failed to create terminal session. */
|
|
19305
|
-
500: {
|
|
19306
|
-
headers: {
|
|
19307
|
-
[name: string]: unknown;
|
|
19308
|
-
};
|
|
19309
|
-
content: {
|
|
19310
|
-
"application/json": components["schemas"]["SandboxTerminalSession"];
|
|
19311
|
-
};
|
|
19312
|
-
};
|
|
19313
|
-
};
|
|
19314
|
-
};
|
|
19315
19243
|
getChatSessionState: {
|
|
19316
19244
|
parameters: {
|
|
19317
19245
|
query?: {
|
|
@@ -19617,6 +19545,44 @@ export interface operations {
|
|
|
19617
19545
|
};
|
|
19618
19546
|
};
|
|
19619
19547
|
};
|
|
19548
|
+
getChatSessionSandboxProtectedBranches: {
|
|
19549
|
+
parameters: {
|
|
19550
|
+
query?: never;
|
|
19551
|
+
header?: never;
|
|
19552
|
+
path?: never;
|
|
19553
|
+
cookie?: never;
|
|
19554
|
+
};
|
|
19555
|
+
requestBody?: never;
|
|
19556
|
+
responses: {
|
|
19557
|
+
/** @description Protected branches. */
|
|
19558
|
+
200: {
|
|
19559
|
+
headers: {
|
|
19560
|
+
[name: string]: unknown;
|
|
19561
|
+
};
|
|
19562
|
+
content: {
|
|
19563
|
+
"application/json": components["schemas"]["SandboxProtectedBranches"];
|
|
19564
|
+
};
|
|
19565
|
+
};
|
|
19566
|
+
/** @description The caller is not a sandbox principal. */
|
|
19567
|
+
400: {
|
|
19568
|
+
headers: {
|
|
19569
|
+
[name: string]: unknown;
|
|
19570
|
+
};
|
|
19571
|
+
content: {
|
|
19572
|
+
"application/json": components["schemas"]["SandboxErrorMessage"];
|
|
19573
|
+
};
|
|
19574
|
+
};
|
|
19575
|
+
/** @description Chat session not found. */
|
|
19576
|
+
404: {
|
|
19577
|
+
headers: {
|
|
19578
|
+
[name: string]: unknown;
|
|
19579
|
+
};
|
|
19580
|
+
content: {
|
|
19581
|
+
"application/json": components["schemas"]["SandboxErrorMessage"];
|
|
19582
|
+
};
|
|
19583
|
+
};
|
|
19584
|
+
};
|
|
19585
|
+
};
|
|
19620
19586
|
listChatSessionUsers: {
|
|
19621
19587
|
parameters: {
|
|
19622
19588
|
query?: {
|
|
@@ -25087,53 +25053,6 @@ export interface operations {
|
|
|
25087
25053
|
};
|
|
25088
25054
|
};
|
|
25089
25055
|
};
|
|
25090
|
-
checkPrompt: {
|
|
25091
|
-
parameters: {
|
|
25092
|
-
query?: never;
|
|
25093
|
-
header?: never;
|
|
25094
|
-
path?: never;
|
|
25095
|
-
cookie?: never;
|
|
25096
|
-
};
|
|
25097
|
-
requestBody?: {
|
|
25098
|
-
content: {
|
|
25099
|
-
"application/json": {
|
|
25100
|
-
/** @description Criterion the prompt must satisfy. */
|
|
25101
|
-
criteria: string;
|
|
25102
|
-
/** @description Latest user prompt to validate. */
|
|
25103
|
-
prompt: string;
|
|
25104
|
-
/**
|
|
25105
|
-
* @description Prior conversation messages for context.
|
|
25106
|
-
* @default []
|
|
25107
|
-
*/
|
|
25108
|
-
messages?: {
|
|
25109
|
-
/** @enum {string} */
|
|
25110
|
-
role: "user" | "assistant";
|
|
25111
|
-
content: string;
|
|
25112
|
-
}[];
|
|
25113
|
-
};
|
|
25114
|
-
};
|
|
25115
|
-
};
|
|
25116
|
-
responses: {
|
|
25117
|
-
/** @description Validation result. */
|
|
25118
|
-
200: {
|
|
25119
|
-
headers: {
|
|
25120
|
-
[name: string]: unknown;
|
|
25121
|
-
};
|
|
25122
|
-
content: {
|
|
25123
|
-
"application/json": components["schemas"]["CheckPromptResponse"];
|
|
25124
|
-
};
|
|
25125
|
-
};
|
|
25126
|
-
/** @description Invalid request. */
|
|
25127
|
-
400: {
|
|
25128
|
-
headers: {
|
|
25129
|
-
[name: string]: unknown;
|
|
25130
|
-
};
|
|
25131
|
-
content: {
|
|
25132
|
-
"application/json": components["schemas"]["ErrorResponse"];
|
|
25133
|
-
};
|
|
25134
|
-
};
|
|
25135
|
-
};
|
|
25136
|
-
};
|
|
25137
25056
|
checkProjectSlug: {
|
|
25138
25057
|
parameters: {
|
|
25139
25058
|
query: {
|