@pcamarajr/scout 0.14.0 → 0.15.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/README.md +2 -1
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +23 -1
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -1
- package/dist/device.d.ts +56 -0
- package/dist/device.js +181 -0
- package/dist/device.js.map +1 -0
- package/dist/engine.d.ts +6 -0
- package/dist/engine.js +47 -14
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +8 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/report.js +15 -1
- package/dist/report.js.map +1 -1
- package/dist/runner/ai-runner.js +26 -1
- package/dist/runner/ai-runner.js.map +1 -1
- package/dist/runner/browser.d.ts +79 -5
- package/dist/runner/browser.js +314 -42
- package/dist/runner/browser.js.map +1 -1
- package/dist/runner/script-runner.d.ts +5 -0
- package/dist/runner/script-runner.js +4 -2
- package/dist/runner/script-runner.js.map +1 -1
- package/dist/runner/selector-ladder.d.ts +90 -0
- package/dist/runner/selector-ladder.js +144 -0
- package/dist/runner/selector-ladder.js.map +1 -0
- package/dist/specs.js +9 -0
- package/dist/specs.js.map +1 -1
- package/dist/store.js +13 -8
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +103 -7
- package/package.json +1 -1
- package/templates/AGENTS.md +60 -2
- package/templates/SKILL.md +1 -1
- package/templates/scout.mdc +1 -1
|
@@ -6,6 +6,11 @@ export interface ReplayOutcome {
|
|
|
6
6
|
failedStep?: string;
|
|
7
7
|
failedIndex?: number;
|
|
8
8
|
error?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Notes for steps whose primary selector failed but a recorded fallback
|
|
11
|
+
* resolved — deterministic retry, no LLM. Empty when no fallback was needed.
|
|
12
|
+
*/
|
|
13
|
+
fallbacks?: string[];
|
|
9
14
|
}
|
|
10
15
|
export interface DemoReplayOutcome {
|
|
11
16
|
passed: boolean;
|
|
@@ -114,10 +114,11 @@ export function describeStep(step) {
|
|
|
114
114
|
* cheap path that runs on every CI push.
|
|
115
115
|
*/
|
|
116
116
|
export async function replaySteps(session, steps) {
|
|
117
|
+
const fallbacks = [];
|
|
117
118
|
for (let i = 0; i < steps.length; i++) {
|
|
118
119
|
const step = steps[i];
|
|
119
120
|
try {
|
|
120
|
-
await session.executeStep(step);
|
|
121
|
+
await session.executeStep(step, (note) => fallbacks.push(`step ${i + 1}: ${note}`));
|
|
121
122
|
}
|
|
122
123
|
catch (error) {
|
|
123
124
|
await session.screenshot(`replay-failed-step-${i + 1}`).catch(() => { });
|
|
@@ -126,10 +127,11 @@ export async function replaySteps(session, steps) {
|
|
|
126
127
|
failedIndex: i,
|
|
127
128
|
failedStep: describeStep(step),
|
|
128
129
|
error: error instanceof Error ? error.message : String(error),
|
|
130
|
+
...(fallbacks.length ? { fallbacks } : {}),
|
|
129
131
|
};
|
|
130
132
|
}
|
|
131
133
|
}
|
|
132
134
|
await session.screenshot("final-state").catch(() => { });
|
|
133
|
-
return { passed: true };
|
|
135
|
+
return { passed: true, ...(fallbacks.length ? { fallbacks } : {}) };
|
|
134
136
|
}
|
|
135
137
|
//# sourceMappingURL=script-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-runner.js","sourceRoot":"","sources":["../../src/runner/script-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"script-runner.js","sourceRoot":"","sources":["../../src/runner/script-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { FragileStep, Step, Target } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The selector preference ladder, applied at RECORD time to every interaction
|
|
4
|
+
* step. When a target element is resolved we walk these strategies against the
|
|
5
|
+
* live element, most-stable first, and record the highest rung that *uniquely*
|
|
6
|
+
* matches — instead of silently falling back to a positional CSS path that
|
|
7
|
+
* works during the AI run but breaks later in deterministic replay.
|
|
8
|
+
*
|
|
9
|
+
* testid → id → role+name → text → css (positional, last resort)
|
|
10
|
+
*
|
|
11
|
+
* The pure parts live here (candidate construction, the auto-generated-id
|
|
12
|
+
* heuristic) so ordering and rejection are unit-testable without a browser; the
|
|
13
|
+
* live uniqueness probing lives in `BrowserSession.resolveTarget`.
|
|
14
|
+
*/
|
|
15
|
+
export type LadderStrategy = "testid" | "id" | "role" | "text" | "css";
|
|
16
|
+
/** Raw signals extracted from a live element, feeding the ladder. */
|
|
17
|
+
export interface LadderInfo {
|
|
18
|
+
/** ARIA role (explicit or derived from the tag). */
|
|
19
|
+
role?: string;
|
|
20
|
+
/** Accessible name COMPUTED from the live DOM at record time (never guessed). */
|
|
21
|
+
name?: string;
|
|
22
|
+
/** Positional CSS path — always present, the guaranteed last resort. */
|
|
23
|
+
css: string;
|
|
24
|
+
/** The element's OWN testid attribute value. */
|
|
25
|
+
testId?: string;
|
|
26
|
+
/** Nearest ancestor's testid (within a few hops) — used for clicks only. */
|
|
27
|
+
ancestorTestId?: string;
|
|
28
|
+
/** The element's raw `id` attribute (validated by {@link isStableId}). */
|
|
29
|
+
id?: string;
|
|
30
|
+
/** Trimmed visible text, when short and stable enough for a text anchor. */
|
|
31
|
+
text?: string;
|
|
32
|
+
}
|
|
33
|
+
/** One ladder rung that produced a usable Target. */
|
|
34
|
+
export interface LadderCandidate {
|
|
35
|
+
strategy: LadderStrategy;
|
|
36
|
+
target: Target;
|
|
37
|
+
}
|
|
38
|
+
export declare function isStableId(id: string | undefined): id is string;
|
|
39
|
+
/**
|
|
40
|
+
* A CSS attribute selector for an id — `[id="…"]` with quotes/backslashes
|
|
41
|
+
* escaped. Preferred over `#id` because it needs no CSS.escape and tolerates
|
|
42
|
+
* ids with characters (`.`, `:`) that a `#` selector would misparse.
|
|
43
|
+
*/
|
|
44
|
+
export declare function idSelector(id: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Builds the ordered ladder of candidate Targets for a live element, most-stable
|
|
47
|
+
* first. Every rung that has the needed signal is included; the live uniqueness
|
|
48
|
+
* check downstream keeps only those that match exactly one element. A positional
|
|
49
|
+
* CSS candidate is ALWAYS appended last so there is always something to record.
|
|
50
|
+
*
|
|
51
|
+
* The element's OWN handles (own testid, id, role+name, text) rank above a
|
|
52
|
+
* borrowed ANCESTOR testid: when the element itself is uniquely identifiable we
|
|
53
|
+
* act on IT, not on a wrapping container. The ancestor testid sits just above
|
|
54
|
+
* the positional CSS path — a stable rescue for a role-less control whose only
|
|
55
|
+
* durable handle lives on a close wrapper (an icon button inside a
|
|
56
|
+
* `<div data-testid>`). `allowAncestorTestId` gates it: on for clicks, off for
|
|
57
|
+
* fill/select where acting on a container instead of the field would be wrong.
|
|
58
|
+
*/
|
|
59
|
+
export declare function buildLadderCandidates(info: LadderInfo, opts?: {
|
|
60
|
+
allowAncestorTestId?: boolean;
|
|
61
|
+
testIdAttr?: string;
|
|
62
|
+
}): LadderCandidate[];
|
|
63
|
+
/**
|
|
64
|
+
* Assembles the recorded Target from the ladder candidates that uniquely matched
|
|
65
|
+
* (in ladder order). The first is the primary; the rest become ordered
|
|
66
|
+
* `fallbacks`. When the primary is the positional CSS rung, the target is flagged
|
|
67
|
+
* `fragile`. When NOTHING uniquely matched (a rare mid-run DOM shift), the
|
|
68
|
+
* positional CSS candidate is recorded anyway, flagged fragile — best effort,
|
|
69
|
+
* matching the pre-ladder behavior of always recording a CSS path.
|
|
70
|
+
*/
|
|
71
|
+
export declare function assembleTarget(candidates: LadderCandidate[], unique: LadderCandidate[]): Target;
|
|
72
|
+
/** A short strategy label for a target, used in fallback-usage log notes. */
|
|
73
|
+
export declare function describeTargetStrategy(target: Target): string;
|
|
74
|
+
/**
|
|
75
|
+
* Runs an action against a target's primary selector and, on failure, against
|
|
76
|
+
* each recorded fallback in order until one succeeds — a deterministic retry
|
|
77
|
+
* with NO LLM (so `--no-heal` semantics hold). `onFallback` is notified with a
|
|
78
|
+
* human-readable note when a fallback resolved. If every candidate fails, the
|
|
79
|
+
* PRIMARY's error is thrown (the most relevant one to debug). Pure over a
|
|
80
|
+
* `locate` factory so it is unit-testable without a browser.
|
|
81
|
+
*/
|
|
82
|
+
export declare function runWithFallback<L>(target: Target, locate: (t: Target) => L, act: (loc: L) => Promise<unknown>, onFallback?: (note: string) => void): Promise<void>;
|
|
83
|
+
/** The record-time / report warning for one fragile step. */
|
|
84
|
+
export declare function fragileWarning(step: FragileStep): string;
|
|
85
|
+
/**
|
|
86
|
+
* Collects the interaction steps whose recorded selector is a fragile positional
|
|
87
|
+
* CSS path, for surfacing at record time and in the report. Pure over the
|
|
88
|
+
* recorded script; empty when every step has a stable handle.
|
|
89
|
+
*/
|
|
90
|
+
export declare function collectFragileSteps(steps: Step[]): FragileStep[];
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { describeStep } from "./script-runner.js";
|
|
2
|
+
/**
|
|
3
|
+
* Rejects ids that look framework-generated / non-deterministic, so we never
|
|
4
|
+
* anchor a recorded selector to an id that changes between renders. Heuristic
|
|
5
|
+
* (documented, deliberately simple):
|
|
6
|
+
* - any run of 3+ digits (hydration counters, `field-1234`), and
|
|
7
|
+
* - known auto-id prefixes: Radix (`radix-`), React `useId` (`:r…`, `:R…`),
|
|
8
|
+
* `react-`, Headless UI (`headlessui-`), MUI (`mui-`).
|
|
9
|
+
* Everything else (hand-authored ids like `login-form`, `email`) is accepted.
|
|
10
|
+
*/
|
|
11
|
+
const AUTO_ID_RE = /\d{3,}|^radix-|^react-|^headlessui-|^mui-|^:[rR]/;
|
|
12
|
+
export function isStableId(id) {
|
|
13
|
+
if (!id)
|
|
14
|
+
return false;
|
|
15
|
+
const trimmed = id.trim();
|
|
16
|
+
if (!trimmed)
|
|
17
|
+
return false;
|
|
18
|
+
return !AUTO_ID_RE.test(trimmed);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A CSS attribute selector for an id — `[id="…"]` with quotes/backslashes
|
|
22
|
+
* escaped. Preferred over `#id` because it needs no CSS.escape and tolerates
|
|
23
|
+
* ids with characters (`.`, `:`) that a `#` selector would misparse.
|
|
24
|
+
*/
|
|
25
|
+
export function idSelector(id) {
|
|
26
|
+
return `[id="${id.replace(/(["\\])/g, "\\$1")}"]`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Builds the ordered ladder of candidate Targets for a live element, most-stable
|
|
30
|
+
* first. Every rung that has the needed signal is included; the live uniqueness
|
|
31
|
+
* check downstream keeps only those that match exactly one element. A positional
|
|
32
|
+
* CSS candidate is ALWAYS appended last so there is always something to record.
|
|
33
|
+
*
|
|
34
|
+
* The element's OWN handles (own testid, id, role+name, text) rank above a
|
|
35
|
+
* borrowed ANCESTOR testid: when the element itself is uniquely identifiable we
|
|
36
|
+
* act on IT, not on a wrapping container. The ancestor testid sits just above
|
|
37
|
+
* the positional CSS path — a stable rescue for a role-less control whose only
|
|
38
|
+
* durable handle lives on a close wrapper (an icon button inside a
|
|
39
|
+
* `<div data-testid>`). `allowAncestorTestId` gates it: on for clicks, off for
|
|
40
|
+
* fill/select where acting on a container instead of the field would be wrong.
|
|
41
|
+
*/
|
|
42
|
+
export function buildLadderCandidates(info, opts = {}) {
|
|
43
|
+
const attr = opts.testIdAttr ?? "data-testid";
|
|
44
|
+
const out = [];
|
|
45
|
+
if (info.testId) {
|
|
46
|
+
out.push({ strategy: "testid", target: { testId: info.testId, description: `[${attr}="${info.testId}"]` } });
|
|
47
|
+
}
|
|
48
|
+
if (isStableId(info.id)) {
|
|
49
|
+
out.push({ strategy: "id", target: { css: idSelector(info.id), description: `#${info.id}` } });
|
|
50
|
+
}
|
|
51
|
+
if (info.role && info.name) {
|
|
52
|
+
out.push({
|
|
53
|
+
strategy: "role",
|
|
54
|
+
target: { role: info.role, name: info.name, description: `${info.role} "${info.name}"` },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if (info.text) {
|
|
58
|
+
out.push({ strategy: "text", target: { text: info.text, description: `text "${info.text}"` } });
|
|
59
|
+
}
|
|
60
|
+
if (opts.allowAncestorTestId && info.ancestorTestId && info.ancestorTestId !== info.testId) {
|
|
61
|
+
out.push({
|
|
62
|
+
strategy: "testid",
|
|
63
|
+
target: { testId: info.ancestorTestId, description: `[${attr}="${info.ancestorTestId}"]` },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
out.push({ strategy: "css", target: { css: info.css, description: info.css } });
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Assembles the recorded Target from the ladder candidates that uniquely matched
|
|
71
|
+
* (in ladder order). The first is the primary; the rest become ordered
|
|
72
|
+
* `fallbacks`. When the primary is the positional CSS rung, the target is flagged
|
|
73
|
+
* `fragile`. When NOTHING uniquely matched (a rare mid-run DOM shift), the
|
|
74
|
+
* positional CSS candidate is recorded anyway, flagged fragile — best effort,
|
|
75
|
+
* matching the pre-ladder behavior of always recording a CSS path.
|
|
76
|
+
*/
|
|
77
|
+
export function assembleTarget(candidates, unique) {
|
|
78
|
+
const chosen = unique.length ? unique : [candidates[candidates.length - 1]];
|
|
79
|
+
const [primary, ...rest] = chosen;
|
|
80
|
+
const target = { ...primary.target };
|
|
81
|
+
if (primary.strategy === "css")
|
|
82
|
+
target.fragile = true;
|
|
83
|
+
const fallbacks = rest.map((c) => c.target);
|
|
84
|
+
if (fallbacks.length)
|
|
85
|
+
target.fallbacks = fallbacks;
|
|
86
|
+
return target;
|
|
87
|
+
}
|
|
88
|
+
/** A short strategy label for a target, used in fallback-usage log notes. */
|
|
89
|
+
export function describeTargetStrategy(target) {
|
|
90
|
+
if (target.testId)
|
|
91
|
+
return `testid "${target.testId}"`;
|
|
92
|
+
if (target.role && target.name)
|
|
93
|
+
return `role ${target.role} "${target.name}"`;
|
|
94
|
+
if (target.text)
|
|
95
|
+
return `text "${target.text}"`;
|
|
96
|
+
if (target.css)
|
|
97
|
+
return `css ${target.css}`;
|
|
98
|
+
return target.description;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Runs an action against a target's primary selector and, on failure, against
|
|
102
|
+
* each recorded fallback in order until one succeeds — a deterministic retry
|
|
103
|
+
* with NO LLM (so `--no-heal` semantics hold). `onFallback` is notified with a
|
|
104
|
+
* human-readable note when a fallback resolved. If every candidate fails, the
|
|
105
|
+
* PRIMARY's error is thrown (the most relevant one to debug). Pure over a
|
|
106
|
+
* `locate` factory so it is unit-testable without a browser.
|
|
107
|
+
*/
|
|
108
|
+
export async function runWithFallback(target, locate, act, onFallback) {
|
|
109
|
+
try {
|
|
110
|
+
await act(locate(target));
|
|
111
|
+
}
|
|
112
|
+
catch (primaryError) {
|
|
113
|
+
for (const fallback of target.fallbacks ?? []) {
|
|
114
|
+
try {
|
|
115
|
+
await act(locate(fallback));
|
|
116
|
+
onFallback?.(`${describeTargetStrategy(target)} → fallback ${describeTargetStrategy(fallback)}`);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// try the next fallback
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
throw primaryError;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** The record-time / report warning for one fragile step. */
|
|
127
|
+
export function fragileWarning(step) {
|
|
128
|
+
return `step ${step.step} (${step.description}) recorded with a positional selector — add a data-testid or a unique role/name to make replay robust.`;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Collects the interaction steps whose recorded selector is a fragile positional
|
|
132
|
+
* CSS path, for surfacing at record time and in the report. Pure over the
|
|
133
|
+
* recorded script; empty when every step has a stable handle.
|
|
134
|
+
*/
|
|
135
|
+
export function collectFragileSteps(steps) {
|
|
136
|
+
const out = [];
|
|
137
|
+
steps.forEach((step, i) => {
|
|
138
|
+
if ("target" in step && step.target.fragile) {
|
|
139
|
+
out.push({ step: i + 1, description: describeStep(step) });
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return out;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=selector-ladder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-ladder.js","sourceRoot":"","sources":["../../src/runner/selector-ladder.ts"],"names":[],"mappings":"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"}
|
package/dist/specs.js
CHANGED
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import matter from "gray-matter";
|
|
4
4
|
import { SCOUT_DIR } from "./config.js";
|
|
5
5
|
import { mergeCookiesByName, parseCookieList, parseInlineCookies } from "./cookies.js";
|
|
6
|
+
import { mergeDevice, parseDeviceBlock, parseInlineDevice } from "./device.js";
|
|
6
7
|
import { isEmptyStorage, mergeStorage, parseInlineStorage, parseStorageBlock } from "./storage.js";
|
|
7
8
|
/**
|
|
8
9
|
* Scenario specs live as markdown files under `.scout/specs/**\/*.scout.md`.
|
|
@@ -28,6 +29,7 @@ const OVERRIDE_KEYS = new Set([
|
|
|
28
29
|
"geolocation",
|
|
29
30
|
"cookies",
|
|
30
31
|
"storage",
|
|
32
|
+
"device",
|
|
31
33
|
]);
|
|
32
34
|
/** Filesystem/report-safe viewport names (mirrors viewports.ts, kept inline so
|
|
33
35
|
* spec parsing has no Playwright dependency). */
|
|
@@ -244,6 +246,7 @@ export function parseSpec(specFile, root, cwd) {
|
|
|
244
246
|
const relFile = path.relative(cwd, specFile);
|
|
245
247
|
const fileCookies = parseCookieList(data.cookies, relFile);
|
|
246
248
|
const fileStorage = parseStorageBlock(data.storage, relFile);
|
|
249
|
+
const fileDevice = parseDeviceBlock(data.device, `${relFile} frontmatter`);
|
|
247
250
|
const sections = splitSections(content);
|
|
248
251
|
const scenarios = [];
|
|
249
252
|
const seen = new Set();
|
|
@@ -288,6 +291,11 @@ export function parseSpec(specFile, root, cwd) {
|
|
|
288
291
|
const sectionStorage = "storage" in overrides ? parseInlineStorage(overrides.storage, ctx) : {};
|
|
289
292
|
const mergedStorage = mergeStorage(fileStorage ?? {}, sectionStorage);
|
|
290
293
|
const storage = isEmptyStorage(mergedStorage) ? undefined : mergedStorage;
|
|
294
|
+
// Per-section override (inline device name) wins over the file frontmatter,
|
|
295
|
+
// per field; the profile's device merges under both at launch. The inline
|
|
296
|
+
// form names a device only — individual overrides belong in frontmatter.
|
|
297
|
+
const sectionDevice = "device" in overrides ? parseInlineDevice(overrides.device, ctx) : undefined;
|
|
298
|
+
const device = mergeDevice(fileDevice, sectionDevice);
|
|
291
299
|
scenarios.push({
|
|
292
300
|
slug: `${fileSlug}/${scenarioSlug}`,
|
|
293
301
|
name: section.name,
|
|
@@ -300,6 +308,7 @@ export function parseSpec(specFile, root, cwd) {
|
|
|
300
308
|
permissions,
|
|
301
309
|
cookies,
|
|
302
310
|
storage,
|
|
311
|
+
device,
|
|
303
312
|
file: relFile,
|
|
304
313
|
});
|
|
305
314
|
}
|
package/dist/specs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -95,14 +95,16 @@ feature: Example
|
|
|
95
95
|
# How to write a scout spec
|
|
96
96
|
|
|
97
97
|
One file per feature/component. File-level frontmatter sets defaults
|
|
98
|
-
(\`feature\`, \`profile\`, \`tags\`, \`viewports\`, \`cookies\`, \`storage\`).
|
|
99
|
-
heading is one scenario; optional \`profile\`/\`notes\`/\`tags
|
|
100
|
-
\`cookies\`/\`storage\` override lines may follow a heading
|
|
101
|
-
scenario's \`viewports\` list (built-ins: mobile/desktop/
|
|
102
|
-
file-level one and fans the scenario out into one run per
|
|
103
|
-
\`cookies:\`/\`storage:\`
|
|
104
|
-
recorded steps); a \`value\` may use a
|
|
105
|
-
|
|
98
|
+
(\`feature\`, \`profile\`, \`tags\`, \`viewports\`, \`cookies\`, \`storage\`, \`device\`).
|
|
99
|
+
Each \`##\` heading is one scenario; optional \`profile\`/\`notes\`/\`tags\`/
|
|
100
|
+
\`viewports\`/\`cookies\`/\`storage\`/\`device\` override lines may follow a heading
|
|
101
|
+
before the prose. A scenario's \`viewports\` list (built-ins: mobile/desktop/
|
|
102
|
+
tablet) REPLACES the file-level one and fans the scenario out into one run per
|
|
103
|
+
viewport. \`cookies:\`/\`storage:\`/\`device:\` set browser preconditions before the
|
|
104
|
+
app loads (never recorded steps); a cookie/storage \`value\` may use a
|
|
105
|
+
\`$ENV:VAR\` placeholder resolved at launch. \`device:\` emulates a Playwright
|
|
106
|
+
device / user-agent (for UI gated on device detection). Write the flow +
|
|
107
|
+
expected behavior in plain language — no selectors, no code.
|
|
106
108
|
|
|
107
109
|
Copy the block below into a new \`*.scout.md\` file (outside the fence) to start:
|
|
108
110
|
|
|
@@ -120,6 +122,8 @@ storage: # object with local / session / remove
|
|
|
120
122
|
hn_app_open_count: "2"
|
|
121
123
|
remove:
|
|
122
124
|
- hn_pwa_prompt_dismissed
|
|
125
|
+
device: # named Playwright device + optional overrides
|
|
126
|
+
device: iPhone 14
|
|
123
127
|
---
|
|
124
128
|
|
|
125
129
|
## Free user hits paywall on ep 3
|
|
@@ -130,6 +134,7 @@ profile: qa
|
|
|
130
134
|
viewports: [mobile, desktop]
|
|
131
135
|
cookies: hn_checkout_variant=C # inline override: name=value[, n2=v2]
|
|
132
136
|
storage: local.hn_app_open_count=3, remove=flag # inline: local./session. keys, remove=key
|
|
137
|
+
device: Pixel 7 # inline override: a device name
|
|
133
138
|
|
|
134
139
|
Logged-in subscriber opens ep 3; plays with no paywall.
|
|
135
140
|
\`\`\`
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGnE;;;;;;GAMG;AACH,MAAM,OAAO,KAAK;IACP,IAAI,CAAS;IACb,GAAG,CAAS;IAErB,YAAY,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,IAAI;QACF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,aAAa;QACX,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,yCAAyC;IAEzC,wFAAwF;IACxF,UAAU,CAAC,IAAY,EAAE,QAAgB;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,IAAI,QAAQ,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,QAAgB;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,QAAgB,EAAE,KAAa;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,iBAAiB;IAEjB,SAAS,CAAC,IAAY,EAAE,QAAgB;QACtC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;QACtF,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,aAAa,CAAC,MAAiB;QAC7B,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACvC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC;QACxC,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,mCAAmC;QAChF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;YACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,MAAM,MAAM,GAAc,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,2BAA2B;QACnF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,17 +1,46 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* How a recorded step finds its element on replay. A Target is derived at record
|
|
3
|
+
* time by the selector preference ladder (see `runner/selector-ladder.ts`): the
|
|
4
|
+
* most stable strategy that *uniquely* matched the live element becomes the
|
|
5
|
+
* primary location fields, the other unique strategies are kept as ordered
|
|
6
|
+
* {@link Target.fallbacks}, and {@link Target.fragile} flags the case where only
|
|
7
|
+
* a positional CSS path was available. Exactly one primary strategy is set:
|
|
8
|
+
* `testId`, `role`+`name`, `text`, or `css`.
|
|
9
|
+
*/
|
|
2
10
|
export interface Target {
|
|
3
|
-
/** ARIA role + accessible name —
|
|
11
|
+
/** ARIA role + accessible name — resilient to DOM refactors */
|
|
4
12
|
role?: string;
|
|
5
13
|
name?: string;
|
|
6
|
-
/** CSS path
|
|
14
|
+
/** CSS path — a stable `id` selector or, as a last resort, a positional path */
|
|
7
15
|
css?: string;
|
|
8
16
|
/**
|
|
9
|
-
* data-testid
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* `getByTestId`.
|
|
17
|
+
* data-testid (or the configured testid attribute) — the sturdiest handle:
|
|
18
|
+
* stable across DOM refactors and the strategy for elements OUTSIDE the
|
|
19
|
+
* accessibility tree (a gesture layer, an overlay `<div>` with no role/name).
|
|
20
|
+
* Resolved via Playwright's `getByTestId`. Top rung of the ladder.
|
|
13
21
|
*/
|
|
14
22
|
testId?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Visible-text anchor — resolved via Playwright's `getByText` (exact). Used
|
|
25
|
+
* when an element has no testid/id/role+name but a stable, unique visible
|
|
26
|
+
* label. Below role+name on the ladder, above a positional CSS path.
|
|
27
|
+
*/
|
|
28
|
+
text?: string;
|
|
29
|
+
/**
|
|
30
|
+
* True when the primary strategy is a POSITIONAL CSS path (the ladder bottomed
|
|
31
|
+
* out) — the recorded step is fragile: it replays today but breaks as soon as
|
|
32
|
+
* the DOM shifts. Surfaced as a warning at record time and in the run report so
|
|
33
|
+
* a stable handle (a data-testid, a unique role/name) can be added.
|
|
34
|
+
*/
|
|
35
|
+
fragile?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Other ladder strategies that ALSO uniquely matched the element at record
|
|
38
|
+
* time, ordered most-stable first. On replay, if the primary strategy no
|
|
39
|
+
* longer resolves, these are tried in order — deterministically, with no LLM
|
|
40
|
+
* ("--no-heal" semantics preserved). Absent on steps recorded before this
|
|
41
|
+
* feature (backward compatible) and when no alternative uniquely matched.
|
|
42
|
+
*/
|
|
43
|
+
fallbacks?: Target[];
|
|
15
44
|
/** Human-readable label for reports */
|
|
16
45
|
description: string;
|
|
17
46
|
}
|
|
@@ -84,6 +113,45 @@ export interface Viewport {
|
|
|
84
113
|
hasTouch?: boolean;
|
|
85
114
|
userAgent?: string;
|
|
86
115
|
}
|
|
116
|
+
/** Explicit viewport dimensions for device emulation. */
|
|
117
|
+
export interface ViewportSize {
|
|
118
|
+
width: number;
|
|
119
|
+
height: number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Per-scenario device / user-agent emulation, resolved from a scenario's spec
|
|
123
|
+
* (profile default + file frontmatter + per-`##` override, merged per field;
|
|
124
|
+
* scenario wins over profile). It is a context-creation parameter — re-resolved
|
|
125
|
+
* fresh from the spec each run and applied at `browser.newContext()` — NEVER a
|
|
126
|
+
* recordable Step, so replay re-reads the frontmatter and stays deterministic
|
|
127
|
+
* (like storageState/cookies/permissions).
|
|
128
|
+
*
|
|
129
|
+
* Its reason for being is UI gated on user-agent / device detection — an
|
|
130
|
+
* "Add to Home Screen" sheet that only renders under an iOS-Safari UA, a layout
|
|
131
|
+
* branch that keys off `navigator.maxTouchPoints`. Without it the runner always
|
|
132
|
+
* launches desktop Chromium with its default UA, so those flows can never pass.
|
|
133
|
+
*
|
|
134
|
+
* `device` names a Playwright device descriptor (a key of the `devices`
|
|
135
|
+
* registry, e.g. "iPhone 14"), validated against the registry at parse time.
|
|
136
|
+
* The individual fields (`userAgent`, `viewport`, `deviceScaleFactor`,
|
|
137
|
+
* `isMobile`, `hasTouch`) compose on top of (or without) `device` — an
|
|
138
|
+
* explicit field always wins over the named device's value. None of these are
|
|
139
|
+
* secrets, so no `$ENV:VAR` resolution is applied (unlike cookies/storage).
|
|
140
|
+
*/
|
|
141
|
+
export interface ScenarioDevice {
|
|
142
|
+
/** Playwright device registry key (e.g. "iPhone 14"); the base for overrides. */
|
|
143
|
+
device?: string;
|
|
144
|
+
/** User-agent string; wins over the named device's UA. */
|
|
145
|
+
userAgent?: string;
|
|
146
|
+
/** Viewport dimensions; win over the named device's viewport. */
|
|
147
|
+
viewport?: ViewportSize;
|
|
148
|
+
/** Device scale factor; wins over the named device's value. */
|
|
149
|
+
deviceScaleFactor?: number;
|
|
150
|
+
/** Whether to emulate a mobile device (meta viewport, touch events). */
|
|
151
|
+
isMobile?: boolean;
|
|
152
|
+
/** Whether the device supports touch. */
|
|
153
|
+
hasTouch?: boolean;
|
|
154
|
+
}
|
|
87
155
|
/**
|
|
88
156
|
* One cookie applied to the browser context before the scenario runs. Resolved
|
|
89
157
|
* fresh from the spec each run (profile default + per-scenario frontmatter /
|
|
@@ -259,6 +327,14 @@ export interface Scenario {
|
|
|
259
327
|
* only at launch.
|
|
260
328
|
*/
|
|
261
329
|
storage?: ScenarioStorage;
|
|
330
|
+
/**
|
|
331
|
+
* Device / user-agent emulation for the scenario (profile default + file
|
|
332
|
+
* frontmatter + per-section override, merged per field). A context-creation
|
|
333
|
+
* parameter re-resolved each run and applied at `newContext()` — never baked
|
|
334
|
+
* into the recorded script. Composes over the resolved viewport: the device's
|
|
335
|
+
* fields win over the viewport's for UA/metrics/size.
|
|
336
|
+
*/
|
|
337
|
+
device?: ScenarioDevice;
|
|
262
338
|
/** Source spec file, relative to the project root */
|
|
263
339
|
file: string;
|
|
264
340
|
}
|
|
@@ -287,4 +363,24 @@ export interface RunResult {
|
|
|
287
363
|
* but it is NOT a UI judgment — rerun instead of debugging the app.
|
|
288
364
|
*/
|
|
289
365
|
runnerFailure?: string;
|
|
366
|
+
/**
|
|
367
|
+
* Interaction steps whose recorded selector is a positional CSS path (the
|
|
368
|
+
* ladder bottomed out). Populated from the persisted/verified script so the
|
|
369
|
+
* fragility is visible at record time (CLI output + report), not discovered on
|
|
370
|
+
* a broken replay days later. Empty/absent when every step has a stable handle.
|
|
371
|
+
*/
|
|
372
|
+
fragileSteps?: FragileStep[];
|
|
373
|
+
/**
|
|
374
|
+
* Notes emitted during deterministic replay when a step's primary selector no
|
|
375
|
+
* longer resolved and a recorded fallback did — no LLM involved. Absent when
|
|
376
|
+
* no fallback was needed (the common case).
|
|
377
|
+
*/
|
|
378
|
+
usedFallbacks?: string[];
|
|
379
|
+
}
|
|
380
|
+
/** One recorded step that replays on a fragile positional selector. */
|
|
381
|
+
export interface FragileStep {
|
|
382
|
+
/** 1-based position of the step in the recorded script. */
|
|
383
|
+
step: number;
|
|
384
|
+
/** Human-readable description of the step (from `describeStep`). */
|
|
385
|
+
description: string;
|
|
290
386
|
}
|
package/package.json
CHANGED