@fasttest-ai/qa-agent 0.2.0 → 0.3.0
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/actions.d.ts +3 -0
- package/dist/actions.js +38 -4
- package/dist/actions.js.map +1 -1
- package/dist/browser.d.ts +30 -0
- package/dist/browser.js +120 -6
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts +3 -3
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/cloud.d.ts +58 -13
- package/dist/cloud.js +100 -22
- package/dist/cloud.js.map +1 -1
- package/dist/config.d.ts +5 -4
- package/dist/config.js +20 -7
- package/dist/config.js.map +1 -1
- package/dist/healer.js +22 -14
- package/dist/healer.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +407 -66
- package/dist/index.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +245 -19
- package/dist/runner.js.map +1 -1
- package/dist/variables.d.ts +30 -0
- package/dist/variables.js +104 -0
- package/dist/variables.js.map +1 -0
- package/package.json +5 -3
package/dist/actions.d.ts
CHANGED
|
@@ -21,6 +21,9 @@ export declare function goForward(page: Page): Promise<ActionResult>;
|
|
|
21
21
|
export declare function pressKey(page: Page, key: string): Promise<ActionResult>;
|
|
22
22
|
export declare function uploadFile(page: Page, selector: string, filePaths: string[]): Promise<ActionResult>;
|
|
23
23
|
export declare function evaluate(page: Page, expression: string): Promise<ActionResult>;
|
|
24
|
+
export declare function drag(page: Page, sourceSelector: string, targetSelector: string): Promise<ActionResult>;
|
|
25
|
+
export declare function resize(page: Page, width: number, height: number): Promise<ActionResult>;
|
|
26
|
+
export declare function fillForm(page: Page, fields: Record<string, string>): Promise<ActionResult>;
|
|
24
27
|
export type AssertionType = "element_visible" | "element_hidden" | "text_contains" | "text_equals" | "url_contains" | "url_equals" | "element_count" | "attribute_value";
|
|
25
28
|
export interface AssertionParams {
|
|
26
29
|
type: AssertionType;
|
package/dist/actions.js
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export async function navigate(page, url) {
|
|
6
6
|
try {
|
|
7
|
-
await page.goto(url, { waitUntil: "
|
|
7
|
+
await page.goto(url, { waitUntil: "domcontentloaded", timeout: 30_000 });
|
|
8
|
+
// Brief settle time for JS frameworks to hydrate
|
|
9
|
+
await page.waitForLoadState("networkidle", { timeout: 5_000 }).catch(() => { });
|
|
8
10
|
return {
|
|
9
11
|
success: true,
|
|
10
12
|
data: {
|
|
@@ -82,7 +84,7 @@ export async function getSnapshot(page) {
|
|
|
82
84
|
}
|
|
83
85
|
export async function goBack(page) {
|
|
84
86
|
try {
|
|
85
|
-
const response = await page.goBack({ waitUntil: "
|
|
87
|
+
const response = await page.goBack({ waitUntil: "domcontentloaded", timeout: 30_000 });
|
|
86
88
|
if (response === null) {
|
|
87
89
|
return { success: false, error: "No previous page in history" };
|
|
88
90
|
}
|
|
@@ -94,7 +96,7 @@ export async function goBack(page) {
|
|
|
94
96
|
}
|
|
95
97
|
export async function goForward(page) {
|
|
96
98
|
try {
|
|
97
|
-
const response = await page.goForward({ waitUntil: "
|
|
99
|
+
const response = await page.goForward({ waitUntil: "domcontentloaded", timeout: 30_000 });
|
|
98
100
|
if (response === null) {
|
|
99
101
|
return { success: false, error: "No next page in history" };
|
|
100
102
|
}
|
|
@@ -131,6 +133,37 @@ export async function evaluate(page, expression) {
|
|
|
131
133
|
return { success: false, error: String(err) };
|
|
132
134
|
}
|
|
133
135
|
}
|
|
136
|
+
export async function drag(page, sourceSelector, targetSelector) {
|
|
137
|
+
try {
|
|
138
|
+
await page.dragAndDrop(sourceSelector, targetSelector, { timeout: 10_000 });
|
|
139
|
+
// Wait for network settle after drag (may trigger state changes)
|
|
140
|
+
await page.waitForLoadState("networkidle", { timeout: 5_000 }).catch(() => { });
|
|
141
|
+
return { success: true };
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
return { success: false, error: String(err) };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export async function resize(page, width, height) {
|
|
148
|
+
try {
|
|
149
|
+
await page.setViewportSize({ width, height });
|
|
150
|
+
return { success: true, data: { width, height } };
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
return { success: false, error: String(err) };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export async function fillForm(page, fields) {
|
|
157
|
+
try {
|
|
158
|
+
for (const [selector, value] of Object.entries(fields)) {
|
|
159
|
+
await page.fill(selector, value, { timeout: 10_000 });
|
|
160
|
+
}
|
|
161
|
+
return { success: true, data: { filled: Object.keys(fields).length } };
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
return { success: false, error: String(err) };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
134
167
|
export async function assertPage(page, params) {
|
|
135
168
|
try {
|
|
136
169
|
switch (params.type) {
|
|
@@ -161,7 +194,8 @@ export async function assertPage(page, params) {
|
|
|
161
194
|
}
|
|
162
195
|
case "url_contains": {
|
|
163
196
|
const currentUrl = page.url();
|
|
164
|
-
|
|
197
|
+
const expected = params.url ?? params.text ?? "";
|
|
198
|
+
return { pass: currentUrl.includes(expected), actual: currentUrl };
|
|
165
199
|
}
|
|
166
200
|
case "url_equals": {
|
|
167
201
|
const currentUrl = page.url();
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAU,EAAE,GAAW;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/browser.d.ts
CHANGED
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { type Page, type Dialog } from "playwright";
|
|
6
6
|
export type BrowserType = "chromium" | "firefox" | "webkit";
|
|
7
|
+
export interface HarEntry {
|
|
8
|
+
url: string;
|
|
9
|
+
method: string;
|
|
10
|
+
status: number;
|
|
11
|
+
duration: number;
|
|
12
|
+
mimeType: string;
|
|
13
|
+
responseSize: number;
|
|
14
|
+
}
|
|
7
15
|
export interface BrowserManagerOptions {
|
|
8
16
|
browserType?: BrowserType;
|
|
9
17
|
headless?: boolean;
|
|
@@ -24,6 +32,7 @@ export declare class BrowserManager {
|
|
|
24
32
|
private headless;
|
|
25
33
|
private orgSlug;
|
|
26
34
|
pendingDialog: PendingDialog | null;
|
|
35
|
+
private networkEntries;
|
|
27
36
|
constructor(options?: BrowserManagerOptions);
|
|
28
37
|
ensureBrowser(): Promise<Page>;
|
|
29
38
|
getPage(): Promise<Page>;
|
|
@@ -35,5 +44,26 @@ export declare class BrowserManager {
|
|
|
35
44
|
type: string;
|
|
36
45
|
message: string;
|
|
37
46
|
}>;
|
|
47
|
+
private attachNetworkListener;
|
|
48
|
+
getNetworkSummary(): HarEntry[];
|
|
49
|
+
clearNetworkEntries(): void;
|
|
50
|
+
/** List all open pages (tabs) in the current context. */
|
|
51
|
+
listPages(): {
|
|
52
|
+
index: number;
|
|
53
|
+
url: string;
|
|
54
|
+
title: string;
|
|
55
|
+
}[];
|
|
56
|
+
/** List all open pages with titles (async). */
|
|
57
|
+
listPagesAsync(): Promise<{
|
|
58
|
+
index: number;
|
|
59
|
+
url: string;
|
|
60
|
+
title: string;
|
|
61
|
+
}[]>;
|
|
62
|
+
/** Create a new tab and optionally navigate to a URL. */
|
|
63
|
+
createPage(url?: string): Promise<Page>;
|
|
64
|
+
/** Switch to a tab by index. */
|
|
65
|
+
switchToPage(index: number): Promise<Page>;
|
|
66
|
+
/** Close a tab by index. Falls back to another tab if available. */
|
|
67
|
+
closePage(index: number): Promise<void>;
|
|
38
68
|
close(): Promise<void>;
|
|
39
69
|
}
|
package/dist/browser.js
CHANGED
|
@@ -6,7 +6,11 @@ import { chromium, firefox, webkit } from "playwright";
|
|
|
6
6
|
import * as fs from "node:fs";
|
|
7
7
|
import * as path from "node:path";
|
|
8
8
|
import * as os from "node:os";
|
|
9
|
-
const SESSION_DIR = path.join(os.homedir(), ".
|
|
9
|
+
const SESSION_DIR = path.join(os.homedir(), ".fasttest", "sessions");
|
|
10
|
+
/** Sanitize session name to prevent path traversal. */
|
|
11
|
+
function sanitizeSessionName(name) {
|
|
12
|
+
return name.replace(/[\/\\]/g, "_").replace(/\.\./g, "_").replace(/^_+|_+$/g, "") || "session";
|
|
13
|
+
}
|
|
10
14
|
export class BrowserManager {
|
|
11
15
|
browser = null;
|
|
12
16
|
context = null;
|
|
@@ -15,16 +19,27 @@ export class BrowserManager {
|
|
|
15
19
|
headless;
|
|
16
20
|
orgSlug;
|
|
17
21
|
pendingDialog = null;
|
|
22
|
+
networkEntries = [];
|
|
18
23
|
constructor(options = {}) {
|
|
19
24
|
this.browserType = options.browserType ?? "chromium";
|
|
20
25
|
this.headless = options.headless ?? true;
|
|
21
26
|
this.orgSlug = options.orgSlug ?? "default";
|
|
22
27
|
}
|
|
23
28
|
async ensureBrowser() {
|
|
29
|
+
// Quick health check: verify existing page is actually alive
|
|
24
30
|
if (this.page && !this.page.isClosed()) {
|
|
25
|
-
|
|
31
|
+
try {
|
|
32
|
+
await this.page.evaluate("1");
|
|
33
|
+
return this.page;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Page is dead, fall through to recovery
|
|
37
|
+
}
|
|
26
38
|
}
|
|
27
39
|
if (!this.browser || !this.browser.isConnected()) {
|
|
40
|
+
// Browser died or never launched — reset all state
|
|
41
|
+
this.context = null;
|
|
42
|
+
this.page = null;
|
|
28
43
|
const launcher = this.browserType === "firefox"
|
|
29
44
|
? firefox
|
|
30
45
|
: this.browserType === "webkit"
|
|
@@ -43,6 +58,7 @@ export class BrowserManager {
|
|
|
43
58
|
}
|
|
44
59
|
this.page = await this.context.newPage();
|
|
45
60
|
this.attachDialogListener(this.page);
|
|
61
|
+
this.attachNetworkListener(this.page);
|
|
46
62
|
return this.page;
|
|
47
63
|
}
|
|
48
64
|
async getPage() {
|
|
@@ -65,21 +81,24 @@ export class BrowserManager {
|
|
|
65
81
|
});
|
|
66
82
|
this.page = await this.context.newPage();
|
|
67
83
|
this.attachDialogListener(this.page);
|
|
84
|
+
this.attachNetworkListener(this.page);
|
|
68
85
|
return this.page;
|
|
69
86
|
}
|
|
70
87
|
async saveSession(name) {
|
|
71
88
|
if (!this.context) {
|
|
72
89
|
throw new Error("No browser context — nothing to save");
|
|
73
90
|
}
|
|
91
|
+
const safeName = sanitizeSessionName(name);
|
|
74
92
|
const dir = path.join(SESSION_DIR, this.orgSlug);
|
|
75
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
76
|
-
const filePath = path.join(dir, `${
|
|
93
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
94
|
+
const filePath = path.join(dir, `${safeName}.json`);
|
|
77
95
|
const state = await this.context.storageState();
|
|
78
|
-
fs.writeFileSync(filePath, JSON.stringify(state, null, 2));
|
|
96
|
+
fs.writeFileSync(filePath, JSON.stringify(state, null, 2), { mode: 0o600 });
|
|
79
97
|
return filePath;
|
|
80
98
|
}
|
|
81
99
|
async restoreSession(name) {
|
|
82
|
-
const
|
|
100
|
+
const safeName = sanitizeSessionName(name);
|
|
101
|
+
const filePath = path.join(SESSION_DIR, this.orgSlug, `${safeName}.json`);
|
|
83
102
|
if (!fs.existsSync(filePath)) {
|
|
84
103
|
throw new Error(`Session "${name}" not found at ${filePath}`);
|
|
85
104
|
}
|
|
@@ -100,6 +119,7 @@ export class BrowserManager {
|
|
|
100
119
|
});
|
|
101
120
|
this.page = await this.context.newPage();
|
|
102
121
|
this.attachDialogListener(this.page);
|
|
122
|
+
this.attachNetworkListener(this.page);
|
|
103
123
|
return this.page;
|
|
104
124
|
}
|
|
105
125
|
attachDialogListener(page) {
|
|
@@ -138,6 +158,100 @@ export class BrowserManager {
|
|
|
138
158
|
}
|
|
139
159
|
return { type: pending.type, message: pending.message };
|
|
140
160
|
}
|
|
161
|
+
attachNetworkListener(page) {
|
|
162
|
+
page.on("response", (response) => {
|
|
163
|
+
const req = response.request();
|
|
164
|
+
const url = req.url();
|
|
165
|
+
if (!url.startsWith("http"))
|
|
166
|
+
return;
|
|
167
|
+
this.networkEntries.push({
|
|
168
|
+
url,
|
|
169
|
+
method: req.method(),
|
|
170
|
+
status: response.status(),
|
|
171
|
+
duration: 0,
|
|
172
|
+
mimeType: response.headers()["content-type"] ?? "",
|
|
173
|
+
responseSize: parseInt(response.headers()["content-length"] ?? "0", 10),
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
getNetworkSummary() {
|
|
178
|
+
return [...this.networkEntries];
|
|
179
|
+
}
|
|
180
|
+
clearNetworkEntries() {
|
|
181
|
+
this.networkEntries = [];
|
|
182
|
+
}
|
|
183
|
+
/** List all open pages (tabs) in the current context. */
|
|
184
|
+
listPages() {
|
|
185
|
+
if (!this.context)
|
|
186
|
+
return [];
|
|
187
|
+
return this.context.pages().map((p, i) => ({
|
|
188
|
+
index: i,
|
|
189
|
+
url: p.url(),
|
|
190
|
+
title: "", // title requires async, populated below
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
/** List all open pages with titles (async). */
|
|
194
|
+
async listPagesAsync() {
|
|
195
|
+
if (!this.context)
|
|
196
|
+
return [];
|
|
197
|
+
const pages = this.context.pages();
|
|
198
|
+
const result = [];
|
|
199
|
+
for (let i = 0; i < pages.length; i++) {
|
|
200
|
+
result.push({
|
|
201
|
+
index: i,
|
|
202
|
+
url: pages[i].url(),
|
|
203
|
+
title: await pages[i].title().catch(() => ""),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
/** Create a new tab and optionally navigate to a URL. */
|
|
209
|
+
async createPage(url) {
|
|
210
|
+
if (!this.context) {
|
|
211
|
+
await this.ensureBrowser();
|
|
212
|
+
}
|
|
213
|
+
const newPage = await this.context.newPage();
|
|
214
|
+
this.attachDialogListener(newPage);
|
|
215
|
+
this.attachNetworkListener(newPage);
|
|
216
|
+
if (url) {
|
|
217
|
+
await newPage.goto(url, { waitUntil: "domcontentloaded", timeout: 30_000 });
|
|
218
|
+
}
|
|
219
|
+
this.page = newPage;
|
|
220
|
+
return newPage;
|
|
221
|
+
}
|
|
222
|
+
/** Switch to a tab by index. */
|
|
223
|
+
async switchToPage(index) {
|
|
224
|
+
if (!this.context) {
|
|
225
|
+
throw new Error("No browser context — no tabs to switch to");
|
|
226
|
+
}
|
|
227
|
+
const pages = this.context.pages();
|
|
228
|
+
if (index < 0 || index >= pages.length) {
|
|
229
|
+
throw new Error(`Tab index ${index} out of range (0-${pages.length - 1})`);
|
|
230
|
+
}
|
|
231
|
+
this.page = pages[index];
|
|
232
|
+
await this.page.bringToFront();
|
|
233
|
+
return this.page;
|
|
234
|
+
}
|
|
235
|
+
/** Close a tab by index. Falls back to another tab if available. */
|
|
236
|
+
async closePage(index) {
|
|
237
|
+
if (!this.context) {
|
|
238
|
+
throw new Error("No browser context — no tabs to close");
|
|
239
|
+
}
|
|
240
|
+
const pages = this.context.pages();
|
|
241
|
+
if (index < 0 || index >= pages.length) {
|
|
242
|
+
throw new Error(`Tab index ${index} out of range (0-${pages.length - 1})`);
|
|
243
|
+
}
|
|
244
|
+
const target = pages[index];
|
|
245
|
+
await target.close();
|
|
246
|
+
// Switch to another tab if the closed tab was the active one
|
|
247
|
+
const remaining = this.context.pages();
|
|
248
|
+
if (remaining.length > 0) {
|
|
249
|
+
this.page = remaining[Math.min(index, remaining.length - 1)];
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
this.page = null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
141
255
|
async close() {
|
|
142
256
|
if (this.pendingDialog) {
|
|
143
257
|
clearTimeout(this.pendingDialog.dismissTimer);
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAA6D,MAAM,YAAY,CAAC;AAClH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* FastTest Agent CI Runner — headless test execution for CI/CD pipelines.
|
|
4
4
|
* No MCP dependency. Calls executeRun() directly.
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
*
|
|
7
|
+
* fasttest-ci --api-key <key> --suite-id <id> [options]
|
|
8
8
|
*
|
|
9
9
|
* Options:
|
|
10
10
|
* --api-key Organization API key (required)
|
|
11
11
|
* --suite-id Test suite ID to run (required)
|
|
12
|
-
* --base-url Cloud API base URL (default: https://api.
|
|
12
|
+
* --base-url Cloud API base URL (default: https://api.fasttest.ai)
|
|
13
13
|
* --app-url Override the application URL for test navigation
|
|
14
14
|
* --pr-url GitHub PR URL for posting results as a comment
|
|
15
15
|
* --browser Browser engine: chromium | firefox | webkit (default: chromium)
|
package/dist/cli.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* FastTest Agent CI Runner — headless test execution for CI/CD pipelines.
|
|
4
4
|
* No MCP dependency. Calls executeRun() directly.
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
*
|
|
7
|
+
* fasttest-ci --api-key <key> --suite-id <id> [options]
|
|
8
8
|
*
|
|
9
9
|
* Options:
|
|
10
10
|
* --api-key Organization API key (required)
|
|
11
11
|
* --suite-id Test suite ID to run (required)
|
|
12
|
-
* --base-url Cloud API base URL (default: https://api.
|
|
12
|
+
* --base-url Cloud API base URL (default: https://api.fasttest.ai)
|
|
13
13
|
* --app-url Override the application URL for test navigation
|
|
14
14
|
* --pr-url GitHub PR URL for posting results as a comment
|
|
15
15
|
* --browser Browser engine: chromium | firefox | webkit (default: chromium)
|
|
@@ -23,7 +23,7 @@ function parseCliArgs() {
|
|
|
23
23
|
const args = process.argv.slice(2);
|
|
24
24
|
let apiKey = "";
|
|
25
25
|
let suiteId = "";
|
|
26
|
-
let baseUrl = "https://api.
|
|
26
|
+
let baseUrl = "https://api.fasttest.ai";
|
|
27
27
|
let appUrl;
|
|
28
28
|
let prUrl;
|
|
29
29
|
let browserType = "chromium";
|
|
@@ -58,7 +58,7 @@ function parseCliArgs() {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
if (!apiKey || !suiteId) {
|
|
61
|
-
console.error("Usage:
|
|
61
|
+
console.error("Usage: fasttest-ci --api-key <key> --suite-id <id> [--base-url <url>] " +
|
|
62
62
|
"[--app-url <url>] [--pr-url <url>] [--browser chromium|firefox|webkit] " +
|
|
63
63
|
"[--test-case-ids id1,id2] [--json]");
|
|
64
64
|
process.exit(1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AAiB1D,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud.d.ts
CHANGED
|
@@ -5,13 +5,17 @@ export interface CloudClientOptions {
|
|
|
5
5
|
apiKey: string;
|
|
6
6
|
baseUrl?: string;
|
|
7
7
|
}
|
|
8
|
-
export interface
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
export interface DeviceCodeResponse {
|
|
9
|
+
code: string;
|
|
10
|
+
poll_token: string;
|
|
11
|
+
expires_in: number;
|
|
12
|
+
verification_url: string;
|
|
13
|
+
}
|
|
14
|
+
export interface DeviceCodeStatusResponse {
|
|
15
|
+
status: "pending" | "completed" | "expired";
|
|
16
|
+
api_key?: string;
|
|
17
|
+
org_name?: string;
|
|
18
|
+
org_slug?: string;
|
|
15
19
|
}
|
|
16
20
|
export interface RunResponse {
|
|
17
21
|
execution_id: string;
|
|
@@ -26,6 +30,7 @@ export interface TestCasePayload {
|
|
|
26
30
|
assertions: TestAssertion[];
|
|
27
31
|
test_data: Record<string, unknown>[];
|
|
28
32
|
timeout_seconds: number;
|
|
33
|
+
retry_count: number;
|
|
29
34
|
}
|
|
30
35
|
export interface TestStep {
|
|
31
36
|
action: string;
|
|
@@ -39,6 +44,9 @@ export interface TestStep {
|
|
|
39
44
|
key?: string;
|
|
40
45
|
file_paths?: string[];
|
|
41
46
|
expression?: string;
|
|
47
|
+
target?: string;
|
|
48
|
+
width?: number;
|
|
49
|
+
height?: number;
|
|
42
50
|
type?: string;
|
|
43
51
|
text?: string;
|
|
44
52
|
count?: number;
|
|
@@ -60,13 +68,15 @@ export declare class CloudClient {
|
|
|
60
68
|
private baseUrl;
|
|
61
69
|
constructor(options: CloudClientOptions);
|
|
62
70
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
71
|
+
* Request a device code for browser-based authentication.
|
|
72
|
+
* Unauthenticated — no API key needed.
|
|
65
73
|
*/
|
|
66
|
-
static
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
static requestDeviceCode(baseUrl: string): Promise<DeviceCodeResponse>;
|
|
75
|
+
/**
|
|
76
|
+
* Poll for device code status. Returns when completed or expired.
|
|
77
|
+
* Unauthenticated — uses the poll_token for identity.
|
|
78
|
+
*/
|
|
79
|
+
static pollDeviceCode(baseUrl: string, pollToken: string): Promise<DeviceCodeStatusResponse>;
|
|
70
80
|
private request;
|
|
71
81
|
get<T>(path: string): Promise<T>;
|
|
72
82
|
post<T>(path: string, body?: unknown): Promise<T>;
|
|
@@ -147,6 +157,7 @@ export declare class CloudClient {
|
|
|
147
157
|
assertions: Array<Record<string, unknown>>;
|
|
148
158
|
}>;
|
|
149
159
|
}>;
|
|
160
|
+
/** @deprecated Cloud exploration endpoints removed. Exploration runs via local skill. */
|
|
150
161
|
startExploration(body: {
|
|
151
162
|
url: string;
|
|
152
163
|
max_pages?: number;
|
|
@@ -169,6 +180,15 @@ export declare class CloudClient {
|
|
|
169
180
|
screenshots?: string[];
|
|
170
181
|
console_logs?: string[];
|
|
171
182
|
step_results?: Record<string, unknown>[];
|
|
183
|
+
retry_attempt?: number;
|
|
184
|
+
network_summary?: Array<{
|
|
185
|
+
url: string;
|
|
186
|
+
method: string;
|
|
187
|
+
status: number;
|
|
188
|
+
duration: number;
|
|
189
|
+
mimeType: string;
|
|
190
|
+
responseSize: number;
|
|
191
|
+
}>;
|
|
172
192
|
}): Promise<{
|
|
173
193
|
status: string;
|
|
174
194
|
}>;
|
|
@@ -178,6 +198,12 @@ export declare class CloudClient {
|
|
|
178
198
|
cancelExecution(executionId: string): Promise<Record<string, unknown>>;
|
|
179
199
|
/** Get execution status. */
|
|
180
200
|
getExecutionStatus(executionId: string): Promise<Record<string, unknown>>;
|
|
201
|
+
/** Notify that a test case is about to start executing. Non-fatal. */
|
|
202
|
+
notifyTestStarted(executionId: string, testCaseId: string, testCaseName: string): Promise<void>;
|
|
203
|
+
/** Notify that selector healing is being attempted. Non-fatal. */
|
|
204
|
+
notifyHealingStarted(executionId: string, testCaseId: string, originalSelector: string): Promise<void>;
|
|
205
|
+
/** Lightweight check for control signals (pause/cancel) from the dashboard. */
|
|
206
|
+
checkControlStatus(executionId: string): Promise<string>;
|
|
181
207
|
/** Set the org's GitHub token. */
|
|
182
208
|
setGithubToken(token: string): Promise<Record<string, unknown>>;
|
|
183
209
|
/** Post test results as a PR comment. */
|
|
@@ -201,5 +227,24 @@ export declare class CloudClient {
|
|
|
201
227
|
strategy?: string;
|
|
202
228
|
confidence?: number;
|
|
203
229
|
}>;
|
|
230
|
+
flaky_retries?: Array<{
|
|
231
|
+
name?: string;
|
|
232
|
+
retry_attempts?: number;
|
|
233
|
+
}>;
|
|
234
|
+
}): Promise<Record<string, unknown>>;
|
|
235
|
+
/** Save a chaos report with adversarial findings. */
|
|
236
|
+
saveChaosReport(projectId: string | undefined, body: {
|
|
237
|
+
url: string;
|
|
238
|
+
findings: Array<{
|
|
239
|
+
severity: string;
|
|
240
|
+
category: string;
|
|
241
|
+
description: string;
|
|
242
|
+
reproduction_steps: string[];
|
|
243
|
+
console_errors?: string[];
|
|
244
|
+
}>;
|
|
204
245
|
}): Promise<Record<string, unknown>>;
|
|
246
|
+
/** List chaos reports for the org. */
|
|
247
|
+
listChaosReports(projectId?: string): Promise<Record<string, unknown>>;
|
|
248
|
+
/** Get a single chaos report. */
|
|
249
|
+
getChaosReport(reportId: string): Promise<Record<string, unknown>>;
|
|
205
250
|
}
|