prowl-tools 0.1.9 → 0.1.10
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/README.md +61 -8
- package/dist/{chunk-2RNOK64Y.js → chunk-SRWAF2RI.js} +156 -19
- package/dist/chunk-SRWAF2RI.js.map +1 -0
- package/dist/{chunk-JFJQNJSJ.js → chunk-TTZ2IL3P.js} +27 -1
- package/dist/chunk-TTZ2IL3P.js.map +1 -0
- package/dist/index.cjs +207 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -7
- package/dist/index.js.map +1 -1
- package/dist/lib.cjs +180 -17
- package/dist/lib.cjs.map +1 -1
- package/dist/lib.d.cts +48 -1
- package/dist/lib.d.ts +48 -1
- package/dist/lib.js +2 -2
- package/dist/{loader-JTHA4BYG.js → loader-CAE4FPBK.js} +2 -2
- package/package.json +4 -2
- package/dist/chunk-2RNOK64Y.js.map +0 -1
- package/dist/chunk-JFJQNJSJ.js.map +0 -1
- /package/dist/{loader-JTHA4BYG.js.map → loader-CAE4FPBK.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
saveStorageState,
|
|
29
29
|
tccGuidance,
|
|
30
30
|
updateBacklogFromSuite
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-SRWAF2RI.js";
|
|
32
32
|
import {
|
|
33
33
|
CONFIG_DIR,
|
|
34
34
|
findConfigPath,
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
loadHuntTags,
|
|
39
39
|
normalizeHuntName,
|
|
40
40
|
resolveViewport
|
|
41
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-TTZ2IL3P.js";
|
|
42
42
|
|
|
43
43
|
// src/cli/program.ts
|
|
44
44
|
import { Command as Command15 } from "commander";
|
|
@@ -46,7 +46,7 @@ import { Command as Command15 } from "commander";
|
|
|
46
46
|
// package.json
|
|
47
47
|
var package_default = {
|
|
48
48
|
name: "prowl-tools",
|
|
49
|
-
version: "0.1.
|
|
49
|
+
version: "0.1.10",
|
|
50
50
|
description: "E2E testing for native macOS apps and web apps from declarative YAML hunts.",
|
|
51
51
|
type: "module",
|
|
52
52
|
license: "Apache-2.0",
|
|
@@ -105,7 +105,8 @@ var package_default = {
|
|
|
105
105
|
build: "tsup",
|
|
106
106
|
lint: "eslint .",
|
|
107
107
|
test: "vitest run",
|
|
108
|
-
"test:watch": "vitest"
|
|
108
|
+
"test:watch": "vitest",
|
|
109
|
+
"audit:licenses": "node scripts/audit-licenses.mjs"
|
|
109
110
|
},
|
|
110
111
|
dependencies: {
|
|
111
112
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
@@ -129,6 +130,7 @@ var package_default = {
|
|
|
129
130
|
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
130
131
|
"@typescript-eslint/parser": "^7.18.0",
|
|
131
132
|
eslint: "^8.57.1",
|
|
133
|
+
"license-checker-rseidelsohn": "^4.4.2",
|
|
132
134
|
tsup: "^8.3.5",
|
|
133
135
|
typescript: "^5.7.3",
|
|
134
136
|
vitest: "^2.1.8"
|
|
@@ -182,6 +184,10 @@ function describeStep(step) {
|
|
|
182
184
|
if ("waitForSelector" in step) return `waitForSelector "${step.waitForSelector.selector}"`;
|
|
183
185
|
if ("waitForUrl" in step) return `waitForUrl "${step.waitForUrl.value}"`;
|
|
184
186
|
if ("waitForNetworkIdle" in step) return "waitForNetworkIdle";
|
|
187
|
+
if ("waitForResponse" in step) {
|
|
188
|
+
const statusSuffix = step.waitForResponse.status !== void 0 ? ` (status ${step.waitForResponse.status})` : "";
|
|
189
|
+
return `waitForResponse "${step.waitForResponse.url}"${statusSuffix}`;
|
|
190
|
+
}
|
|
185
191
|
if ("hover" in step) return `hover "${step.hover.selector}"`;
|
|
186
192
|
if ("scroll" in step) return `scroll ${step.scroll.direction} ${step.scroll.amount ?? 500}px`;
|
|
187
193
|
if ("scrollTo" in step) return `scrollTo "${step.scrollTo.selector}"`;
|
|
@@ -245,6 +251,10 @@ function printHuntSummary(result, runDir) {
|
|
|
245
251
|
const duration = chalk.gray(`(${result.durationMs}ms)`);
|
|
246
252
|
console.log(`
|
|
247
253
|
${status} ${chalk.bold(result.hunt)} ${duration} ${stepCount}`);
|
|
254
|
+
if (result.retrySummary) {
|
|
255
|
+
const color = result.status === "pass" ? chalk.yellow : chalk.red;
|
|
256
|
+
console.log(` ${color(result.retrySummary)}`);
|
|
257
|
+
}
|
|
248
258
|
console.log(` ${chalk.gray("Artifacts:")} ${runDir}
|
|
249
259
|
`);
|
|
250
260
|
}
|
|
@@ -1360,7 +1370,7 @@ function buildGenerateCommand() {
|
|
|
1360
1370
|
} else if (options.output) {
|
|
1361
1371
|
let configDir;
|
|
1362
1372
|
try {
|
|
1363
|
-
const { loadConfig: loadConfig2 } = await import("./loader-
|
|
1373
|
+
const { loadConfig: loadConfig2 } = await import("./loader-CAE4FPBK.js");
|
|
1364
1374
|
const result = loadConfig2(options.config);
|
|
1365
1375
|
configDir = result.configDir;
|
|
1366
1376
|
} catch {
|
|
@@ -1426,6 +1436,7 @@ function buildHistoryCommand() {
|
|
|
1426
1436
|
}
|
|
1427
1437
|
console.log();
|
|
1428
1438
|
console.log(` ${chalk12.bold(huntName)} \u2014 last ${recent.length} of ${entries.length} runs`);
|
|
1439
|
+
console.log(` ${chalk12.gray(formatRetryFrequency(recent))}`);
|
|
1429
1440
|
console.log();
|
|
1430
1441
|
console.log(formatTable(recent));
|
|
1431
1442
|
console.log();
|
|
@@ -1441,12 +1452,23 @@ function buildHistoryCommand() {
|
|
|
1441
1452
|
});
|
|
1442
1453
|
return command;
|
|
1443
1454
|
}
|
|
1455
|
+
function formatRetryFrequency(entries) {
|
|
1456
|
+
const retried = entries.filter((entry) => (entry.retries ?? 0) > 0).length;
|
|
1457
|
+
if (retried === 0) {
|
|
1458
|
+
return "No retries in these runs";
|
|
1459
|
+
}
|
|
1460
|
+
return `Retried in ${retried} of ${entries.length} runs`;
|
|
1461
|
+
}
|
|
1462
|
+
function formatRetries(retries) {
|
|
1463
|
+
return retries && retries > 0 ? String(retries) : "-";
|
|
1464
|
+
}
|
|
1444
1465
|
function formatTable(entries) {
|
|
1445
|
-
const headers = ["Status", "Started", "Duration"];
|
|
1466
|
+
const headers = ["Status", "Started", "Duration", "Retries"];
|
|
1446
1467
|
const rows = entries.map((entry) => [
|
|
1447
1468
|
formatStatus(entry.status),
|
|
1448
1469
|
entry.startedAt,
|
|
1449
|
-
formatDuration(entry.durationMs)
|
|
1470
|
+
formatDuration(entry.durationMs),
|
|
1471
|
+
formatRetries(entry.retries)
|
|
1450
1472
|
]);
|
|
1451
1473
|
const widths = headers.map(
|
|
1452
1474
|
(header, index) => Math.max(
|