fast-replay 0.1.1 → 0.2.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 CHANGED
@@ -43,11 +43,24 @@ Exit `0` on pass, `1` on fail. On failure you get the failing step, what it does
43
43
  | Flag | |
44
44
  |---|---|
45
45
  | `--expect-fixed` | pass when the bug no longer happens |
46
+ | `--env <url>` | replay a repro recorded elsewhere against this deployment |
46
47
  | `--headed` | visible browser; some apps refuse headless |
47
48
  | `--storage-state <file>` / `--profile <dir>` | get past a login |
48
49
  | `--setup <cmd>` | reset state before replaying |
49
50
  | `--timeout-scale <n>` | multiply recorded waits, for a slower machine |
50
51
 
52
+ ### Record on staging, verify on localhost
53
+
54
+ ```bash
55
+ repro record checkout-crash --url https://staging.example.com
56
+ # fix the code, then:
57
+ repro run checkout-crash --env http://localhost:3000 --expect-fixed
58
+ ```
59
+
60
+ `--env` moves `goto` steps, the app's own network patterns and the captured session onto the target origin. Sibling hosts (`api.example.com`) move with the app; third-party origins are left alone.
61
+
62
+ `-u` is the narrow version — it redirects navigation only, which leaves absolute network patterns unsatisfiable.
63
+
51
64
  ## From a coding agent
52
65
 
53
66
  ```json
@@ -119,7 +132,7 @@ The CLI and MCP server are both thin wrappers over these.
119
132
  ## Develop
120
133
 
121
134
  ```bash
122
- npm test # 110 tests, unit + real-browser integration
135
+ npm test # 117 tests, unit + real-browser integration
123
136
  npm run stress # records once, replays 20x, fails on a single flake
124
137
  npm run demo # examples/demo-app
125
138
  ```
package/dist/browser.d.ts CHANGED
@@ -26,6 +26,8 @@ export interface OpenBrowserOptions {
26
26
  height: number;
27
27
  };
28
28
  storageStatePath?: string | null;
29
+ /** Pre-rewritten session, used when a repro is retargeted to another origin. */
30
+ storageState?: Record<string, unknown> | null;
29
31
  profileDir?: string | null;
30
32
  /**
31
33
  * Reuse an already-running browser instead of launching one.
package/dist/browser.js CHANGED
@@ -20,9 +20,12 @@ export async function openBrowser(options) {
20
20
  }
21
21
  const borrowed = Boolean(options.browser);
22
22
  const browser = options.browser ?? (await chromium.launch({ headless }));
23
+ // Playwright accepts either a path or the state itself; a retargeted repro
24
+ // supplies the latter because its origins were rewritten in memory.
25
+ const storageState = options.storageState ?? options.storageStatePath ?? undefined;
23
26
  const context = await browser.newContext({
24
27
  viewport,
25
- ...(options.storageStatePath ? { storageState: options.storageStatePath } : {}),
28
+ ...(storageState ? { storageState: storageState } : {}),
26
29
  });
27
30
  const page = await context.newPage();
28
31
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgD,MAAM,YAAY,CAAC;AA+CpF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,uBAAuB,CAAC,OAAO,CAAC,UAAU,EAAE;YACzE,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;QACH,yEAAyE;QACzE,wCAAwC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO;YACP,IAAI;YACJ,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAY,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvC,QAAQ;QACR,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,OAAO;QACL,OAAO;QACP,IAAI;QACJ,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtC,kEAAkE;YAClE,IAAI,CAAC,QAAQ;gBAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACL,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEjE,KAAK,CAAC,OAAO,CAAC,QAAiB;QAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;YAC/B,IAAI,OAAO,CAAC,WAAW,EAAE;gBAAE,OAAO,OAAO,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAuB;IAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -62,7 +62,8 @@ program
62
62
  .argument('<name>', 'name of the repro to replay')
63
63
  .option('--headed', 'watch the replay in a visible browser', false)
64
64
  .option('--expect-fixed', 'pass when the bug no longer happens — use while fixing', false)
65
- .option('-u, --url <baseUrl>', 'override the recorded base URL')
65
+ .option('-u, --url <baseUrl>', 'override where to navigate, nothing else')
66
+ .option('--env <url>', 'replay against another deployment: moves goto steps, the app\'s network patterns and the captured session onto this origin')
66
67
  .option('--profile <dir>', 'replay against a persistent Chromium profile (reuses a login)')
67
68
  .option('--setup <command>', 'shell command to reset state before replaying')
68
69
  .option('--timeout-scale <n>', 'multiply every recorded wait; raise on slow machines', '1')
@@ -77,6 +78,7 @@ program
77
78
  name,
78
79
  headed: opts.headed,
79
80
  baseUrl: opts.url,
81
+ envUrl: opts.env ?? null,
80
82
  expectFixed: opts.expectFixed,
81
83
  profileDir: opts.profile ?? null,
82
84
  setupCommand: opts.setup ?? null,
@@ -84,6 +86,11 @@ program
84
86
  // Fallbacks stay cheap probes: half the primary budget.
85
87
  resolveTimeouts: { first, subsequent: Math.max(200, Math.round(first / 2)) },
86
88
  });
89
+ // Stated before the verdict: a run against the wrong origin looks exactly
90
+ // like a run against the right one until you know which it was.
91
+ const via = opts.env ? ' (retargeted with --env)' : opts.url ? ' (overridden by -u)' : '';
92
+ console.log(dim(` against ${result.baseUrl}${via}`));
93
+ console.log('');
87
94
  result.passed ? reportPass(result) : reportFail(result);
88
95
  process.exitCode = result.passed ? 0 : 1;
89
96
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,14 @@ import { isSameOrigin, normalizeUrlPattern } from './normalize.js';
4
4
  import { buildWaitAfter, DEFAULT_WAIT_RULES } from './waits.js';
5
5
  /** A click and a dblclick on the same element this close together are one gesture. */
6
6
  const DBLCLICK_MERGE_MS = 600;
7
+ /**
8
+ * Keyboard activation and the click a framework synthesises from it are one
9
+ * gesture. React Native Web turns Enter/Space on a button into a click, so both
10
+ * were recorded; on replay the second one fires after the first already opened
11
+ * a modal, and gets intercepted by the overlay.
12
+ */
13
+ const KEY_ACTIVATION_MS = 150;
14
+ const ACTIVATION_KEYS = ['Enter', 'Space', ' '];
7
15
  /**
8
16
  * A navigation this soon after an action is that action's consequence.
9
17
  *
@@ -39,6 +47,21 @@ function mergeDoubleClicks(actions) {
39
47
  }
40
48
  return out;
41
49
  }
50
+ /** Drop the click a framework synthesises from a keyboard activation. */
51
+ function dropSynthesizedActivation(actions) {
52
+ return actions.filter((action, i) => {
53
+ if (action.action !== 'click')
54
+ return true;
55
+ const prev = actions[i - 1];
56
+ if (!prev || prev.action !== 'press')
57
+ return true;
58
+ if (!ACTIVATION_KEYS.includes(prev.value ?? ''))
59
+ return true;
60
+ if (action.t - prev.t > KEY_ACTIVATION_MS)
61
+ return true;
62
+ return prev.target?.candidates[0] !== action.target?.candidates[0];
63
+ });
64
+ }
42
65
  /**
43
66
  * Navigations become steps only when nothing the user did explains them —
44
67
  * a typed URL or a back button. A navigation caused by clicking a link is the
@@ -95,7 +118,7 @@ function collapseScrolls(actions) {
95
118
  }
96
119
  export function compile(trace, options) {
97
120
  const rules = options.waitRules ?? DEFAULT_WAIT_RULES;
98
- const merged = collapseGotos(collapseScrolls(interleaveNavigations(mergeDoubleClicks(trace.actions), trace)));
121
+ const merged = collapseGotos(collapseScrolls(interleaveNavigations(mergeDoubleClicks(dropSynthesizedActivation(trace.actions)), trace)));
99
122
  const traceEnd = trace.endedAt || Date.now();
100
123
  const steps = merged.map((action, index) => {
101
124
  const next = merged[index + 1];
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"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"}
@@ -47,7 +47,13 @@ export function buildWaitAfter(window, rules = DEFAULT_WAIT_RULES) {
47
47
  const domGone = uniq(goneAll.filter((s) => !flicker.has(s)), rules.maxSelectors);
48
48
  const hasSignal = network.length > 0 || domAppeared.length > 0 || domGone.length > 0;
49
49
  if (!hasSignal) {
50
- return { timeoutMs: rules.emptyTimeoutMs, networkIdle: true };
50
+ // Only assert idle if the app was in fact idle. An app holding a websocket
51
+ // or a long poll open — chat, live data, anything realtime — never goes
52
+ // idle, so recording it as a required signal made step one fail forever.
53
+ const wentIdle = !window.network.some((n) => n.startedAt <= windowEnd && (n.settledAt === null || n.settledAt > windowEnd));
54
+ return wentIdle
55
+ ? { timeoutMs: rules.emptyTimeoutMs, networkIdle: true }
56
+ : { timeoutMs: rules.emptyTimeoutMs };
51
57
  }
52
58
  // Budget from what actually happened: a 1.5s endpoint earns a generous
53
59
  // ceiling, an instant one fails fast instead of hanging on a fixed default.
@@ -1 +1 @@
1
- {"version":3,"file":"waits.js","sourceRoot":"","sources":["../../src/compiler/waits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"waits.js","sourceRoot":"","sources":["../../src/compiler/waits.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAgBrD,MAAM,CAAC,MAAM,kBAAkB,GAAc;IAC3C,eAAe,EAAE,GAAG;IACpB,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,KAAK;IACrB,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;CAChB,CAAC;AAUF,SAAS,IAAI,CAAC,MAAgB,EAAE,GAAW;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAsB,EACtB,QAAmB,kBAAkB;IAErC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEhD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3B,CAAC,CAAC,SAAS,IAAI,QAAQ;QACvB,CAAC,CAAC,SAAS,IAAI,QAAQ,GAAG,KAAK,CAAC,eAAe;QAC/C,CAAC,CAAC,SAAS,KAAK,IAAI;QACpB,CAAC,CAAC,SAAS,IAAI,SAAS,CAC3B,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;IAE7E,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEjD,uEAAuE;IACvE,0EAA0E;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,IAAI,CACtB,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1C,KAAK,CAAC,YAAY,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAClB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACtC,KAAK,CAAC,YAAY,CACnB,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACrF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,2EAA2E;QAC3E,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,CACrF,CAAC;QACF,OAAO,QAAQ;YACb,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE;YACxD,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;IAC1C,CAAC;IAED,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,WAAW,GAAG;QAClB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC;QAC7D,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;KACxC,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,KAAK,CAAC,YAAY,EAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CACrF,CAAC;IAEF,MAAM,IAAI,GAAc,EAAE,SAAS,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3C,IAAI,WAAW,CAAC,MAAM;QAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -108,7 +108,11 @@ export function createReplayServer(root = process.cwd()) {
108
108
  .boolean()
109
109
  .optional()
110
110
  .describe('True while verifying a fix: pass when the bug does NOT occur. False (default) asserts the bug still reproduces.'),
111
- base_url: z.string().optional().describe('Override the recorded base URL.'),
111
+ base_url: z.string().optional().describe('Override where to navigate, nothing else.'),
112
+ env_url: z
113
+ .string()
114
+ .optional()
115
+ .describe("Replay against another deployment of the same app: moves goto steps, the app's own network patterns and the captured session onto this origin. Use this to verify a fix locally on a repro recorded against staging or production."),
112
116
  headed: z
113
117
  .boolean()
114
118
  .optional()
@@ -126,7 +130,7 @@ export function createReplayServer(root = process.cwd()) {
126
130
  .optional()
127
131
  .describe('Multiply every recorded wait. Raise it when replaying somewhere slower than the machine that recorded.'),
128
132
  },
129
- }, async ({ name, expect_fixed = false, base_url, headed, profile_dir, setup_command, timeout_scale }) => {
133
+ }, async ({ name, expect_fixed = false, base_url, env_url, headed, profile_dir, setup_command, timeout_scale }) => {
130
134
  const result = await run({
131
135
  name,
132
136
  root,
@@ -139,6 +143,7 @@ export function createReplayServer(root = process.cwd()) {
139
143
  ...(setup_command ? { setupCommand: setup_command } : {}),
140
144
  ...(timeout_scale ? { timeoutScale: timeout_scale } : {}),
141
145
  ...(base_url ? { baseUrl: base_url } : {}),
146
+ ...(env_url ? { envUrl: env_url } : {}),
142
147
  });
143
148
  const artifacts = result.failure?.artifacts ?? null;
144
149
  const consoleTail = await tail(artifacts?.consoleLog ?? null, 50);
@@ -173,6 +178,7 @@ export function createReplayServer(root = process.cwd()) {
173
178
  : null,
174
179
  failureKind: result.failure?.kind ?? null,
175
180
  invariantViolations: result.invariantViolations,
181
+ baseUrl: result.baseUrl,
176
182
  screenshot: result.finalScreenshot,
177
183
  },
178
184
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -184,8 +184,12 @@ function isPositionalOnly(selector) {
184
184
  function labelledAncestorSelector(el) {
185
185
  if (testIdSelector(el) ?? idSelector(el))
186
186
  return null;
187
+ // Matches the CSS path's reach: a control six levels deep still has its
188
+ // identity on the wrapper, and settling for a positional path when a test id
189
+ // was available a few levels up is the difference between a durable repro
190
+ // and a brittle one.
187
191
  let cur = el.parentElement;
188
- for (let depth = 0; cur && depth < 3; depth++) {
192
+ for (let depth = 0; cur && depth < MAX_CSS_PATH_DEPTH; depth++) {
189
193
  const anchor = testIdSelector(cur);
190
194
  if (anchor) {
191
195
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../../src/recorder/agent/selectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../../src/recorder/agent/selectors.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  /** The in-page capture agent, bundled as a standalone IIFE. */
2
- export declare const AGENT_BUNDLE = "\"use strict\";\n(() => {\n // src/recorder/agent/config.ts\n var INSTALL_GLOBAL = \"__replayInstall\";\n var AGENT_READY_FLAG = \"__replayAgentReady\";\n var FLUSH_GLOBAL = \"__replayFlush\";\n\n // src/recorder/agent/text.ts\n function clean(s, max = 80) {\n if (!s) return \"\";\n const t = s.replace(/\\s+/g, \" \").trim();\n return t.length > max ? `${t.slice(0, max - 1)}\\u2026` : t;\n }\n function escAttr(v) {\n return v.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n }\n function escId(v) {\n return typeof window.CSS?.escape === \"function\" ? window.CSS.escape(v) : v.replace(/([^\\w-])/g, \"\\\\$1\");\n }\n function isStableToken(t) {\n if (!t || t.length > 40) return false;\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(t)) return false;\n if (/^(css|sc|emotion|styled|jsx|glamor|makeStyles)-/i.test(t)) return false;\n if (/[0-9a-f]{6,}/i.test(t)) return false;\n if ((t.match(/\\d/g) || []).length >= 3) return false;\n if (/[A-Z]/.test(t) && /\\d/.test(t)) return false;\n if (/^[a-z]{1,2}-[a-z0-9]{5,}$/i.test(t) && /\\d/.test(t)) return false;\n if (t.split(/[-_]/).some(looksGenerated)) return false;\n if (/-(aria|diff|live|announcer|portal)$/i.test(t)) return false;\n return true;\n }\n function looksGenerated(segment) {\n if (segment.length < 6) return false;\n if (!/^[a-z0-9]+$/i.test(segment)) return false;\n const vowels = (segment.match(/[aeiouy]/gi) || []).length;\n return /\\d/.test(segment) ? vowels <= 1 : vowels === 0;\n }\n function isStableClass(c) {\n return isStableToken(c) && !/^_/.test(c);\n }\n function renderedText(el, max = 80) {\n const inner = el.innerText;\n return clean(typeof inner === \"string\" ? inner : el.textContent, max);\n }\n\n // src/recorder/agent/roles.ts\n var TAG_ROLES = {\n button: \"button\",\n select: \"combobox\",\n textarea: \"textbox\",\n nav: \"navigation\",\n main: \"main\",\n header: \"banner\",\n footer: \"contentinfo\",\n aside: \"complementary\",\n form: \"form\",\n table: \"table\",\n tr: \"row\",\n td: \"cell\",\n th: \"columnheader\",\n ul: \"list\",\n ol: \"list\",\n li: \"listitem\",\n dialog: \"dialog\",\n option: \"option\",\n h1: \"heading\",\n h2: \"heading\",\n h3: \"heading\",\n h4: \"heading\",\n h5: \"heading\",\n h6: \"heading\"\n };\n var INPUT_ROLES = {\n button: \"button\",\n submit: \"button\",\n reset: \"button\",\n image: \"button\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n range: \"slider\",\n number: \"spinbutton\",\n search: \"searchbox\",\n email: \"textbox\",\n tel: \"textbox\",\n text: \"textbox\",\n url: \"textbox\"\n };\n var NAME_FROM_CONTENT = [\n \"button\",\n \"link\",\n \"heading\",\n \"cell\",\n \"columnheader\",\n \"rowheader\",\n \"listitem\",\n \"option\",\n \"tab\",\n \"menuitem\",\n \"menuitemcheckbox\",\n \"menuitemradio\",\n \"treeitem\",\n \"switch\",\n \"checkbox\",\n \"radio\"\n ];\n var NON_EDITABLE_INPUTS = [\"checkbox\", \"radio\", \"button\", \"submit\", \"reset\", \"file\", \"image\"];\n function getRole(el) {\n const explicit = el.getAttribute(\"role\");\n if (explicit) return explicit.trim().split(/\\s+/)[0] || null;\n const tag = el.tagName.toLowerCase();\n if (tag === \"a\") return el.hasAttribute(\"href\") ? \"link\" : null;\n if (tag === \"img\") return el.getAttribute(\"alt\") === \"\" ? null : \"img\";\n if (tag === \"input\") {\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return INPUT_ROLES[type] ?? null;\n }\n return TAG_ROLES[tag] ?? null;\n }\n function isEditable(el) {\n if (!el || el.nodeType !== 1) return false;\n const tag = el.tagName.toLowerCase();\n if (tag === \"textarea\") return true;\n if (el.isContentEditable) return true;\n if (tag !== \"input\") return false;\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return !NON_EDITABLE_INPUTS.includes(type);\n }\n function accessibleName(el) {\n const aria = el.getAttribute(\"aria-label\");\n if (aria && aria.trim()) return clean(aria);\n const labelledby = el.getAttribute(\"aria-labelledby\");\n if (labelledby) {\n const parts = labelledby.split(/\\s+/).map((id) => document.getElementById(id)).filter((n) => !!n).map((n) => clean(n.textContent));\n const joined = clean(parts.filter(Boolean).join(\" \"));\n if (joined) return joined;\n }\n const tag = el.tagName.toLowerCase();\n if ([\"input\", \"select\", \"textarea\"].includes(tag)) {\n const id = el.getAttribute(\"id\");\n if (id) {\n const forLabel = document.querySelector(`label[for=\"${escAttr(id)}\"]`);\n if (forLabel) {\n const t = clean(forLabel.textContent);\n if (t) return t;\n }\n }\n const wrapping = el.closest(\"label\");\n if (wrapping) {\n const t = clean(wrapping.textContent);\n if (t) return t;\n }\n }\n for (const attr of [\"alt\", \"title\", \"placeholder\"]) {\n const v = el.getAttribute(attr);\n if (v && v.trim()) return clean(v);\n }\n const role = getRole(el);\n if (role && NAME_FROM_CONTENT.includes(role)) {\n const t = clean(el.textContent);\n if (t) return t;\n }\n return \"\";\n }\n function ownText(el) {\n return clean(el.textContent, 60);\n }\n\n // src/recorder/agent/selectors.ts\n var TEST_ID_ATTRS = [\n \"data-testid\",\n \"data-test\",\n \"data-test-id\",\n \"data-cy\",\n \"data-sentry-label\",\n \"data-testid-label\"\n ];\n var MAX_CANDIDATES = 5;\n var MAX_CSS_PATH_DEPTH = 6;\n function testIdSelector(el) {\n for (const attr of TEST_ID_ATTRS) {\n const v = el.getAttribute(attr);\n if (v) return `[${attr}=\"${escAttr(v)}\"]`;\n }\n return null;\n }\n function idSelector(el) {\n const id = el.getAttribute(\"id\");\n return id && isStableToken(id) ? `#${escId(id)}` : null;\n }\n function roleNameSelector(el) {\n const role = getRole(el);\n if (!role) return null;\n const name = accessibleName(el);\n if (!name) return null;\n return `role=${role}[name=\"${escAttr(name)}\"]`;\n }\n function appearedSelector(el) {\n return testIdSelector(el) ?? idSelector(el) ?? roleNameSelector(el);\n }\n function goneSelector(el) {\n return testIdSelector(el) ?? idSelector(el);\n }\n function allElements() {\n return Array.from(document.querySelectorAll(\"*\"));\n }\n function withNth(base, el, matches) {\n if (matches.length <= 1) return base;\n const idx = matches.indexOf(el);\n return idx < 0 ? base : `${base} >> nth=${idx}`;\n }\n function buildCssPath(el) {\n const segs = [];\n let cur = el;\n let depth = 0;\n while (cur && cur.nodeType === 1 && cur !== document.documentElement && depth < MAX_CSS_PATH_DEPTH) {\n const node = cur;\n if (depth > 0) {\n const anchor = testIdSelector(node) ?? idSelector(node);\n if (anchor) {\n segs.unshift(anchor);\n break;\n }\n }\n let seg = node.tagName.toLowerCase();\n const classes = Array.from(node.classList).filter(isStableClass).slice(0, 2);\n if (classes.length) seg += `.${classes.map(escId).join(\".\")}`;\n const parent = node.parentElement;\n if (parent) {\n const sameTag = Array.from(parent.children).filter((c) => c.tagName === node.tagName);\n if (sameTag.length > 1) seg += `:nth-of-type(${sameTag.indexOf(node) + 1})`;\n }\n segs.unshift(seg);\n const partial = segs.join(\" > \");\n try {\n if (document.querySelectorAll(partial).length === 1) return partial;\n } catch {\n return null;\n }\n cur = parent;\n depth++;\n }\n if (!segs.length) return null;\n const sel = segs.join(\" > \");\n try {\n return document.querySelectorAll(sel).length ? sel : null;\n } catch {\n return null;\n }\n }\n function buildCandidates(el) {\n const out = [];\n const push = (s) => {\n if (s && out.indexOf(s) === -1) out.push(s);\n };\n push(testIdSelector(el));\n push(idSelector(el));\n const nameAttr = el.getAttribute(\"name\");\n if (nameAttr && isStableToken(nameAttr)) {\n push(`${el.tagName.toLowerCase()}[name=\"${escAttr(nameAttr)}\"]`);\n }\n const roleName = roleNameSelector(el);\n if (roleName) {\n const role = getRole(el);\n const name = accessibleName(el);\n const matches = allElements().filter((c) => getRole(c) === role && accessibleName(c) === name);\n push(withNth(roleName, el, matches));\n }\n push(labelledAncestorSelector(el));\n const cssPath = buildCssPath(el);\n const text = ownText(el);\n const textSelector = text && isSmallestWithText(el, text) ? withNth(`text=\"${escAttr(text)}\"`, el, allElements().filter((c) => isSmallestWithText(c, text))) : null;\n if (isPositionalOnly(cssPath)) {\n push(textSelector);\n push(cssPath);\n } else {\n push(cssPath);\n push(textSelector);\n }\n return out.slice(0, MAX_CANDIDATES);\n }\n function isPositionalOnly(selector) {\n if (!selector) return false;\n if (!selector.includes(\":nth-of-type(\")) return false;\n return !selector.includes(\"[\") && !selector.includes(\".\");\n }\n function labelledAncestorSelector(el) {\n if (testIdSelector(el) ?? idSelector(el)) return null;\n let cur = el.parentElement;\n for (let depth = 0; cur && depth < 3; depth++) {\n const anchor = testIdSelector(cur);\n if (anchor) {\n try {\n return document.querySelectorAll(anchor).length === 1 ? anchor : null;\n } catch {\n return null;\n }\n }\n cur = cur.parentElement;\n }\n return null;\n }\n function isSmallestWithText(el, text) {\n if (ownText(el) !== text) return false;\n return !Array.from(el.children).some((child) => ownText(child) === text);\n }\n function contextLabel(el) {\n const row = el.closest('tr, [role=\"row\"], li, [role=\"listitem\"], [data-testid*=\"row\"]');\n if (row && row !== el) {\n const own = renderedText(el, 60);\n const full = renderedText(row, 120);\n const t = clean(own ? full.split(own).join(\" \") : full, 60);\n if (t) return ` in the row containing \"${t}\"`;\n }\n const section = el.closest('form, section, dialog, [role=\"dialog\"], nav, main, aside');\n if (section && section !== el) {\n const label = section.getAttribute(\"aria-label\") || clean(section.querySelector(\"h1, h2, h3, h4, legend\")?.textContent) || \"\";\n if (label) return ` in the ${section.tagName.toLowerCase()} labelled \"${clean(label, 40)}\"`;\n }\n return \"\";\n }\n function semanticOf(el) {\n const role = getRole(el) || el.tagName.toLowerCase();\n const name = accessibleName(el) || ownText(el);\n const head = name ? `${name} ${role}` : role;\n return head + contextLabel(el);\n }\n function describe(el) {\n const candidates = buildCandidates(el);\n if (!candidates.length) return null;\n return { candidates, semantic: semanticOf(el) };\n }\n\n // src/recorder/agent/capture.ts\n var ECHO_WINDOW_MS = 30;\n var GESTURE_WINDOW_MS = 1e3;\n var MEANINGFUL_KEYS = [\n \"Enter\",\n \"Escape\",\n \"Tab\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Backspace\",\n \"Delete\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \" \"\n ];\n function targetOf(e) {\n const t = e.target;\n return t && t.nodeType === 1 ? t : null;\n }\n function playwrightKey(e) {\n const mods = [];\n if (e.ctrlKey) mods.push(\"Control\");\n if (e.altKey) mods.push(\"Alt\");\n if (e.metaKey) mods.push(\"Meta\");\n if (e.shiftKey && e.key.length > 1) mods.push(\"Shift\");\n const key = e.key === \" \" ? \"Space\" : e.key;\n return [...mods, key].join(\"+\");\n }\n function isStopHotkey(e) {\n return (e.ctrlKey || e.metaKey) && e.shiftKey && e.key.toLowerCase() === \"x\";\n }\n function installCapture(ctx) {\n const { config, transport, reveals } = ctx;\n const focusValue = /* @__PURE__ */ new WeakMap();\n const committed = /* @__PURE__ */ new WeakMap();\n let lastRecorded = null;\n let lastPointerDown = null;\n function resolveGestureTarget(clicked) {\n const pd = lastPointerDown;\n if (!pd || pd.el === clicked) return clicked;\n if (Date.now() - pd.t > GESTURE_WINDOW_MS) return clicked;\n const retargeted = clicked === document.documentElement || clicked === document.body;\n if (retargeted && pd.el.isConnected && describe(pd.el)) return pd.el;\n if (!describe(clicked) && pd.el.isConnected && describe(pd.el)) return pd.el;\n return clicked;\n }\n function isEchoOfRecordedClick(el) {\n const prev = lastRecorded;\n if (!prev) return false;\n if (Date.now() - prev.t > ECHO_WINDOW_MS) return false;\n if (prev.el === el) return true;\n if (prev.el.contains(el) || el.contains(prev.el)) return true;\n const label = el.closest(\"label\");\n return Boolean(label && label === prev.el.closest(\"label\"));\n }\n function emitAction(action, el, value) {\n ctx.beforeAction?.();\n const target = el ? describe(el) : null;\n if (el && !target) return false;\n const t = Date.now();\n reveals.noteAction(t);\n const ev = { kind: \"action\", action, value, target, t, author: \"human\" };\n transport.emit(ev);\n return true;\n }\n function flushRevealingHover(actionTarget) {\n const hovered = reveals.takeLoadBearingHover(actionTarget);\n if (hovered) emitAction(\"hover\", hovered, null);\n }\n function valueOf(el) {\n if (el.isContentEditable) return clean(el.innerText, 500);\n return el.value ?? \"\";\n }\n function commitFill(el) {\n if (!isEditable(el)) return;\n const value = valueOf(el);\n if (committed.get(el) === value) return;\n if (focusValue.get(el) === value && committed.get(el) === void 0) return;\n committed.set(el, value);\n flushRevealingHover(el);\n emitAction(\"fill\", el, value);\n }\n function flushPendingFill() {\n const active = document.activeElement;\n if (active && isEditable(active)) commitFill(active);\n }\n const on = (type, handler) => {\n document.addEventListener(type, handler, true);\n };\n on(\"focusin\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) focusValue.set(el, valueOf(el));\n });\n on(\"mouseover\", (e) => {\n const el = targetOf(e);\n if (el) reveals.noteHover(el);\n });\n on(\"pointerdown\", (e) => {\n const el = targetOf(e);\n if (el) lastPointerDown = { el, t: Date.now() };\n });\n on(\"click\", (e) => {\n const clicked = targetOf(e);\n if (!clicked) return;\n const el = resolveGestureTarget(clicked);\n if (isEchoOfRecordedClick(el)) return;\n flushPendingFill();\n flushRevealingHover(el);\n if (emitAction(\"click\", el, null)) lastRecorded = { el, t: Date.now() };\n });\n on(\"dblclick\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n flushPendingFill();\n emitAction(\"dblclick\", el, null);\n });\n on(\"change\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n if (el.tagName.toLowerCase() === \"select\") {\n const sel = el;\n const opt = sel.selectedOptions[0];\n flushPendingFill();\n flushRevealingHover(el);\n emitAction(\"select\", el, opt ? opt.value || clean(opt.textContent) : sel.value);\n return;\n }\n if (isEditable(el)) commitFill(el);\n });\n on(\"blur\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) commitFill(el);\n });\n on(\"keydown\", (e) => {\n if (isStopHotkey(e)) {\n e.preventDefault();\n e.stopPropagation();\n transport.binding(config.stopBinding)?.({ reason: \"hotkey\" });\n return;\n }\n const el = targetOf(e);\n if (isEditable(el)) {\n if (e.key !== \"Enter\" && e.key !== \"Escape\") return;\n commitFill(el);\n } else if (!MEANINGFUL_KEYS.includes(e.key) && !(e.ctrlKey || e.metaKey || e.altKey)) {\n return;\n } else {\n flushPendingFill();\n }\n emitAction(\"press\", el, playwrightKey(e));\n });\n installScrollCapture(ctx, emitAction);\n }\n var RESIZE_PROBE = [\n \".erd_scroll_detection_container\",\n \".resize-sensor\",\n \".resize-triggers\",\n \"[data-resize-sensor]\"\n ];\n function isResizeProbe(el) {\n if (!el) return false;\n return RESIZE_PROBE.some((sel) => {\n try {\n return el.matches(sel) || el.closest(sel) !== null;\n } catch {\n return false;\n }\n });\n }\n function installScrollCapture(ctx, emitAction) {\n const { config } = ctx;\n const lastPosition = /* @__PURE__ */ new WeakMap();\n const timers = /* @__PURE__ */ new WeakMap();\n document.addEventListener(\n \"scroll\",\n (e) => {\n const raw = e.target;\n if (raw && raw.nodeType === 1 && isResizeProbe(raw)) return;\n const isDocument = !raw || raw === document || raw === document.documentElement || raw === document.body;\n const key = isDocument ? document : raw;\n const el = isDocument ? null : raw;\n const x = el ? el.scrollLeft : window.scrollX;\n const y = el ? el.scrollTop : window.scrollY;\n const existing = timers.get(key);\n if (existing) clearTimeout(existing);\n timers.set(\n key,\n setTimeout(() => {\n const last = lastPosition.get(key) ?? { x: 0, y: 0 };\n const moved = Math.abs(x - last.x) >= config.scrollMinDeltaPx || Math.abs(y - last.y) >= config.scrollMinDeltaPx;\n if (!moved) return;\n lastPosition.set(key, { x, y });\n emitAction(\"scroll\", el, JSON.stringify({ x, y }));\n }, config.scrollDebounceMs)\n );\n },\n true\n );\n }\n\n // src/noise.ts\n var TRANSIENT_NAME = /\\b(loading|spinner|progress|skeleton|please wait|submitting|saving)\\b/i;\n function isTransientIndicator(role, name) {\n if (role === \"progressbar\") return true;\n return TRANSIENT_NAME.test(name);\n }\n\n // src/recorder/agent/visibility.ts\n function isVisible(el) {\n if (!el.isConnected) return false;\n const he = el;\n if (he.hidden || el.getAttribute(\"aria-hidden\") === \"true\") return false;\n const rect = he.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return false;\n const cs = window.getComputedStyle(he);\n return cs.visibility !== \"hidden\" && cs.display !== \"none\" && cs.opacity !== \"0\";\n }\n\n // src/recorder/agent/dom-reaction.ts\n var INTERESTING = \"[data-testid], [data-test], [data-test-id], [data-cy], [id], [role], button, a[href]\";\n var OBSERVED_ATTRS = [\"class\", \"style\", \"hidden\", \"aria-hidden\"];\n var APPEAR_CONFIRM_MS = 600;\n function toCssSelector(selector) {\n if (selector.startsWith(\"role=\") || selector.startsWith(\"text=\")) {\n throw new Error(\"not a CSS selector\");\n }\n return selector;\n }\n function harvest(nodes, into, pick, revealed, max) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node || node.nodeType !== 1) continue;\n const el = node;\n revealed.push(el);\n const own = pick(el);\n if (own && into.size < max) into.add(own);\n const descendants = el.querySelectorAll(INTERESTING);\n for (let j = 0; j < descendants.length && into.size < max; j++) {\n const d = descendants[j];\n if (!d) continue;\n const sel = pick(d);\n if (sel) into.add(sel);\n }\n }\n }\n function observeDomReactions(ctx) {\n const { config, transport, reveals } = ctx;\n const visibility = /* @__PURE__ */ new WeakMap();\n let pending = [];\n const stillVisible = (sel) => {\n try {\n const el = document.querySelector(toCssSelector(sel));\n return el ? isVisible(el) : false;\n } catch {\n return true;\n }\n };\n const confirm = (entry) => {\n const survived = entry.selectors.filter(stillVisible);\n if (survived.length) {\n transport.emit({ kind: \"dom\", appeared: survived, gone: [], t: entry.at });\n }\n };\n const flushAppearances = () => {\n const due = pending;\n pending = [];\n for (const entry of due) {\n clearTimeout(entry.timer);\n confirm(entry);\n }\n };\n const visibleAppearedSelector = (el) => {\n if (!isVisible(el)) return null;\n if (isTransientIndicator(getRole(el), accessibleName(el))) return null;\n return appearedSelector(el);\n };\n const start = () => {\n const observer = new MutationObserver((records) => {\n const appeared = /* @__PURE__ */ new Set();\n const gone = /* @__PURE__ */ new Set();\n const revealed = [];\n for (const rec of records) {\n if (rec.type === \"childList\") {\n harvest(rec.addedNodes, appeared, visibleAppearedSelector, revealed, config.maxSelectorsPerMutation);\n harvest(rec.removedNodes, gone, goneSelector, [], config.maxSelectorsPerMutation);\n continue;\n }\n const el = rec.target;\n const sel = appearedSelector(el);\n if (!sel) continue;\n const now = isVisible(el);\n const was = visibility.get(el);\n visibility.set(el, now);\n if (was === void 0 || was === now) continue;\n if (now) {\n appeared.add(sel);\n revealed.push(el);\n } else {\n const g = goneSelector(el);\n if (g) gone.add(g);\n }\n }\n const at = Date.now();\n reveals.noteRevealed(revealed, at);\n if (gone.size) {\n transport.emit({ kind: \"dom\", appeared: [], gone: Array.from(gone), t: at });\n }\n if (appeared.size) {\n const entry = {\n selectors: Array.from(appeared),\n at,\n timer: setTimeout(() => {\n pending = pending.filter((e) => e !== entry);\n confirm(entry);\n }, APPEAR_CONFIRM_MS)\n };\n pending.push(entry);\n }\n });\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: OBSERVED_ATTRS\n });\n };\n if (document.documentElement) start();\n else document.addEventListener(\"DOMContentLoaded\", start, { once: true });\n return { flushAppearances };\n }\n\n // src/recorder/agent/reveal-tracker.ts\n var ACTION_COOLDOWN_MS = 600;\n function createRevealTracker(config) {\n let pending = null;\n let lastHovered = null;\n let lastActionAt = 0;\n return {\n noteHover(el) {\n lastHovered = el;\n },\n noteAction(at) {\n lastActionAt = at;\n },\n noteRevealed(nodes, at) {\n if (!nodes.length || !lastHovered) return;\n if (at - lastActionAt <= ACTION_COOLDOWN_MS) return;\n pending = { el: lastHovered, nodes, at };\n },\n takeLoadBearingHover(actionTarget) {\n const reveal = pending;\n pending = null;\n if (!reveal || !actionTarget) return null;\n if (Date.now() - reveal.at > config.hoverRevealWindowMs) return null;\n if (!reveal.el.isConnected) return null;\n const inside = reveal.nodes.some((n) => n === actionTarget || n.contains(actionTarget));\n return inside ? reveal.el : null;\n }\n };\n }\n\n // src/recorder/agent/transport.ts\n var DRAIN_INTERVAL_MS = 25;\n function createTransport(config) {\n const globals = window;\n const pending = [];\n let drainTimer = null;\n function binding(name) {\n const fn = globals[name];\n return typeof fn === \"function\" ? fn : null;\n }\n function drain() {\n const fn = binding(config.emitBinding);\n if (!fn) return;\n while (pending.length) {\n const ev = pending.shift();\n try {\n fn(ev);\n } catch {\n }\n }\n if (drainTimer) {\n clearInterval(drainTimer);\n drainTimer = null;\n }\n }\n function emit(ev) {\n pending.push(ev);\n if (binding(config.emitBinding)) drain();\n else if (!drainTimer) drainTimer = setInterval(drain, DRAIN_INTERVAL_MS);\n }\n return { emit, binding };\n }\n\n // src/recorder/agent/page-agent.ts\n var INSTALLED_FLAG = \"__replayAgentInstalled\";\n function pageAgent(config) {\n const globals = window;\n if (globals[INSTALLED_FLAG]) return;\n if (window.top !== window) return;\n globals[INSTALLED_FLAG] = true;\n const transport = createTransport(config);\n const reveals = createRevealTracker(config);\n const dom = observeDomReactions({ config, transport, reveals });\n installCapture({ config, transport, reveals, beforeAction: () => dom.flushAppearances() });\n globals[FLUSH_GLOBAL] = () => dom.flushAppearances();\n globals[AGENT_READY_FLAG] = true;\n }\n\n // src/recorder/agent/main.ts\n window[INSTALL_GLOBAL] = (config) => {\n pageAgent(config);\n };\n})();\n";
2
+ export declare const AGENT_BUNDLE = "\"use strict\";\n(() => {\n // src/recorder/agent/config.ts\n var INSTALL_GLOBAL = \"__replayInstall\";\n var AGENT_READY_FLAG = \"__replayAgentReady\";\n var FLUSH_GLOBAL = \"__replayFlush\";\n\n // src/recorder/agent/text.ts\n function clean(s, max = 80) {\n if (!s) return \"\";\n const t = s.replace(/\\s+/g, \" \").trim();\n return t.length > max ? `${t.slice(0, max - 1)}\\u2026` : t;\n }\n function escAttr(v) {\n return v.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n }\n function escId(v) {\n return typeof window.CSS?.escape === \"function\" ? window.CSS.escape(v) : v.replace(/([^\\w-])/g, \"\\\\$1\");\n }\n function isStableToken(t) {\n if (!t || t.length > 40) return false;\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(t)) return false;\n if (/^(css|sc|emotion|styled|jsx|glamor|makeStyles)-/i.test(t)) return false;\n if (/[0-9a-f]{6,}/i.test(t)) return false;\n if ((t.match(/\\d/g) || []).length >= 3) return false;\n if (/[A-Z]/.test(t) && /\\d/.test(t)) return false;\n if (/^[a-z]{1,2}-[a-z0-9]{5,}$/i.test(t) && /\\d/.test(t)) return false;\n if (t.split(/[-_]/).some(looksGenerated)) return false;\n if (/-(aria|diff|live|announcer|portal)$/i.test(t)) return false;\n return true;\n }\n function looksGenerated(segment) {\n if (segment.length < 6) return false;\n if (!/^[a-z0-9]+$/i.test(segment)) return false;\n const vowels = (segment.match(/[aeiouy]/gi) || []).length;\n return /\\d/.test(segment) ? vowels <= 1 : vowels === 0;\n }\n function isStableClass(c) {\n return isStableToken(c) && !/^_/.test(c);\n }\n function renderedText(el, max = 80) {\n const inner = el.innerText;\n return clean(typeof inner === \"string\" ? inner : el.textContent, max);\n }\n\n // src/recorder/agent/roles.ts\n var TAG_ROLES = {\n button: \"button\",\n select: \"combobox\",\n textarea: \"textbox\",\n nav: \"navigation\",\n main: \"main\",\n header: \"banner\",\n footer: \"contentinfo\",\n aside: \"complementary\",\n form: \"form\",\n table: \"table\",\n tr: \"row\",\n td: \"cell\",\n th: \"columnheader\",\n ul: \"list\",\n ol: \"list\",\n li: \"listitem\",\n dialog: \"dialog\",\n option: \"option\",\n h1: \"heading\",\n h2: \"heading\",\n h3: \"heading\",\n h4: \"heading\",\n h5: \"heading\",\n h6: \"heading\"\n };\n var INPUT_ROLES = {\n button: \"button\",\n submit: \"button\",\n reset: \"button\",\n image: \"button\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n range: \"slider\",\n number: \"spinbutton\",\n search: \"searchbox\",\n email: \"textbox\",\n tel: \"textbox\",\n text: \"textbox\",\n url: \"textbox\"\n };\n var NAME_FROM_CONTENT = [\n \"button\",\n \"link\",\n \"heading\",\n \"cell\",\n \"columnheader\",\n \"rowheader\",\n \"listitem\",\n \"option\",\n \"tab\",\n \"menuitem\",\n \"menuitemcheckbox\",\n \"menuitemradio\",\n \"treeitem\",\n \"switch\",\n \"checkbox\",\n \"radio\"\n ];\n var NON_EDITABLE_INPUTS = [\"checkbox\", \"radio\", \"button\", \"submit\", \"reset\", \"file\", \"image\"];\n function getRole(el) {\n const explicit = el.getAttribute(\"role\");\n if (explicit) return explicit.trim().split(/\\s+/)[0] || null;\n const tag = el.tagName.toLowerCase();\n if (tag === \"a\") return el.hasAttribute(\"href\") ? \"link\" : null;\n if (tag === \"img\") return el.getAttribute(\"alt\") === \"\" ? null : \"img\";\n if (tag === \"input\") {\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return INPUT_ROLES[type] ?? null;\n }\n return TAG_ROLES[tag] ?? null;\n }\n function isEditable(el) {\n if (!el || el.nodeType !== 1) return false;\n const tag = el.tagName.toLowerCase();\n if (tag === \"textarea\") return true;\n if (el.isContentEditable) return true;\n if (tag !== \"input\") return false;\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return !NON_EDITABLE_INPUTS.includes(type);\n }\n function accessibleName(el) {\n const aria = el.getAttribute(\"aria-label\");\n if (aria && aria.trim()) return clean(aria);\n const labelledby = el.getAttribute(\"aria-labelledby\");\n if (labelledby) {\n const parts = labelledby.split(/\\s+/).map((id) => document.getElementById(id)).filter((n) => !!n).map((n) => clean(n.textContent));\n const joined = clean(parts.filter(Boolean).join(\" \"));\n if (joined) return joined;\n }\n const tag = el.tagName.toLowerCase();\n if ([\"input\", \"select\", \"textarea\"].includes(tag)) {\n const id = el.getAttribute(\"id\");\n if (id) {\n const forLabel = document.querySelector(`label[for=\"${escAttr(id)}\"]`);\n if (forLabel) {\n const t = clean(forLabel.textContent);\n if (t) return t;\n }\n }\n const wrapping = el.closest(\"label\");\n if (wrapping) {\n const t = clean(wrapping.textContent);\n if (t) return t;\n }\n }\n for (const attr of [\"alt\", \"title\", \"placeholder\"]) {\n const v = el.getAttribute(attr);\n if (v && v.trim()) return clean(v);\n }\n const role = getRole(el);\n if (role && NAME_FROM_CONTENT.includes(role)) {\n const t = clean(el.textContent);\n if (t) return t;\n }\n return \"\";\n }\n function ownText(el) {\n return clean(el.textContent, 60);\n }\n\n // src/recorder/agent/selectors.ts\n var TEST_ID_ATTRS = [\n \"data-testid\",\n \"data-test\",\n \"data-test-id\",\n \"data-cy\",\n \"data-sentry-label\",\n \"data-testid-label\"\n ];\n var MAX_CANDIDATES = 5;\n var MAX_CSS_PATH_DEPTH = 6;\n function testIdSelector(el) {\n for (const attr of TEST_ID_ATTRS) {\n const v = el.getAttribute(attr);\n if (v) return `[${attr}=\"${escAttr(v)}\"]`;\n }\n return null;\n }\n function idSelector(el) {\n const id = el.getAttribute(\"id\");\n return id && isStableToken(id) ? `#${escId(id)}` : null;\n }\n function roleNameSelector(el) {\n const role = getRole(el);\n if (!role) return null;\n const name = accessibleName(el);\n if (!name) return null;\n return `role=${role}[name=\"${escAttr(name)}\"]`;\n }\n function appearedSelector(el) {\n return testIdSelector(el) ?? idSelector(el) ?? roleNameSelector(el);\n }\n function goneSelector(el) {\n return testIdSelector(el) ?? idSelector(el);\n }\n function allElements() {\n return Array.from(document.querySelectorAll(\"*\"));\n }\n function withNth(base, el, matches) {\n if (matches.length <= 1) return base;\n const idx = matches.indexOf(el);\n return idx < 0 ? base : `${base} >> nth=${idx}`;\n }\n function buildCssPath(el) {\n const segs = [];\n let cur = el;\n let depth = 0;\n while (cur && cur.nodeType === 1 && cur !== document.documentElement && depth < MAX_CSS_PATH_DEPTH) {\n const node = cur;\n if (depth > 0) {\n const anchor = testIdSelector(node) ?? idSelector(node);\n if (anchor) {\n segs.unshift(anchor);\n break;\n }\n }\n let seg = node.tagName.toLowerCase();\n const classes = Array.from(node.classList).filter(isStableClass).slice(0, 2);\n if (classes.length) seg += `.${classes.map(escId).join(\".\")}`;\n const parent = node.parentElement;\n if (parent) {\n const sameTag = Array.from(parent.children).filter((c) => c.tagName === node.tagName);\n if (sameTag.length > 1) seg += `:nth-of-type(${sameTag.indexOf(node) + 1})`;\n }\n segs.unshift(seg);\n const partial = segs.join(\" > \");\n try {\n if (document.querySelectorAll(partial).length === 1) return partial;\n } catch {\n return null;\n }\n cur = parent;\n depth++;\n }\n if (!segs.length) return null;\n const sel = segs.join(\" > \");\n try {\n return document.querySelectorAll(sel).length ? sel : null;\n } catch {\n return null;\n }\n }\n function buildCandidates(el) {\n const out = [];\n const push = (s) => {\n if (s && out.indexOf(s) === -1) out.push(s);\n };\n push(testIdSelector(el));\n push(idSelector(el));\n const nameAttr = el.getAttribute(\"name\");\n if (nameAttr && isStableToken(nameAttr)) {\n push(`${el.tagName.toLowerCase()}[name=\"${escAttr(nameAttr)}\"]`);\n }\n const roleName = roleNameSelector(el);\n if (roleName) {\n const role = getRole(el);\n const name = accessibleName(el);\n const matches = allElements().filter((c) => getRole(c) === role && accessibleName(c) === name);\n push(withNth(roleName, el, matches));\n }\n push(labelledAncestorSelector(el));\n const cssPath = buildCssPath(el);\n const text = ownText(el);\n const textSelector = text && isSmallestWithText(el, text) ? withNth(`text=\"${escAttr(text)}\"`, el, allElements().filter((c) => isSmallestWithText(c, text))) : null;\n if (isPositionalOnly(cssPath)) {\n push(textSelector);\n push(cssPath);\n } else {\n push(cssPath);\n push(textSelector);\n }\n return out.slice(0, MAX_CANDIDATES);\n }\n function isPositionalOnly(selector) {\n if (!selector) return false;\n if (!selector.includes(\":nth-of-type(\")) return false;\n return !selector.includes(\"[\") && !selector.includes(\".\");\n }\n function labelledAncestorSelector(el) {\n if (testIdSelector(el) ?? idSelector(el)) return null;\n let cur = el.parentElement;\n for (let depth = 0; cur && depth < MAX_CSS_PATH_DEPTH; depth++) {\n const anchor = testIdSelector(cur);\n if (anchor) {\n try {\n return document.querySelectorAll(anchor).length === 1 ? anchor : null;\n } catch {\n return null;\n }\n }\n cur = cur.parentElement;\n }\n return null;\n }\n function isSmallestWithText(el, text) {\n if (ownText(el) !== text) return false;\n return !Array.from(el.children).some((child) => ownText(child) === text);\n }\n function contextLabel(el) {\n const row = el.closest('tr, [role=\"row\"], li, [role=\"listitem\"], [data-testid*=\"row\"]');\n if (row && row !== el) {\n const own = renderedText(el, 60);\n const full = renderedText(row, 120);\n const t = clean(own ? full.split(own).join(\" \") : full, 60);\n if (t) return ` in the row containing \"${t}\"`;\n }\n const section = el.closest('form, section, dialog, [role=\"dialog\"], nav, main, aside');\n if (section && section !== el) {\n const label = section.getAttribute(\"aria-label\") || clean(section.querySelector(\"h1, h2, h3, h4, legend\")?.textContent) || \"\";\n if (label) return ` in the ${section.tagName.toLowerCase()} labelled \"${clean(label, 40)}\"`;\n }\n return \"\";\n }\n function semanticOf(el) {\n const role = getRole(el) || el.tagName.toLowerCase();\n const name = accessibleName(el) || ownText(el);\n const head = name ? `${name} ${role}` : role;\n return head + contextLabel(el);\n }\n function describe(el) {\n const candidates = buildCandidates(el);\n if (!candidates.length) return null;\n return { candidates, semantic: semanticOf(el) };\n }\n\n // src/recorder/agent/capture.ts\n var ECHO_WINDOW_MS = 30;\n var GESTURE_WINDOW_MS = 1e3;\n var MEANINGFUL_KEYS = [\n \"Enter\",\n \"Escape\",\n \"Tab\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Backspace\",\n \"Delete\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \" \"\n ];\n function targetOf(e) {\n const t = e.target;\n return t && t.nodeType === 1 ? t : null;\n }\n function playwrightKey(e) {\n const mods = [];\n if (e.ctrlKey) mods.push(\"Control\");\n if (e.altKey) mods.push(\"Alt\");\n if (e.metaKey) mods.push(\"Meta\");\n if (e.shiftKey && e.key.length > 1) mods.push(\"Shift\");\n const key = e.key === \" \" ? \"Space\" : e.key;\n return [...mods, key].join(\"+\");\n }\n function isStopHotkey(e) {\n return (e.ctrlKey || e.metaKey) && e.shiftKey && e.key.toLowerCase() === \"x\";\n }\n function installCapture(ctx) {\n const { config, transport, reveals } = ctx;\n const focusValue = /* @__PURE__ */ new WeakMap();\n const committed = /* @__PURE__ */ new WeakMap();\n let lastRecorded = null;\n let lastPointerDown = null;\n function resolveGestureTarget(clicked) {\n const pd = lastPointerDown;\n if (!pd || pd.el === clicked) return clicked;\n if (Date.now() - pd.t > GESTURE_WINDOW_MS) return clicked;\n const retargeted = clicked === document.documentElement || clicked === document.body;\n if (retargeted && pd.el.isConnected && describe(pd.el)) return pd.el;\n if (!describe(clicked) && pd.el.isConnected && describe(pd.el)) return pd.el;\n return clicked;\n }\n function isEchoOfRecordedClick(el) {\n const prev = lastRecorded;\n if (!prev) return false;\n if (Date.now() - prev.t > ECHO_WINDOW_MS) return false;\n if (prev.el === el) return true;\n if (prev.el.contains(el) || el.contains(prev.el)) return true;\n const label = el.closest(\"label\");\n return Boolean(label && label === prev.el.closest(\"label\"));\n }\n function emitAction(action, el, value) {\n ctx.beforeAction?.();\n const target = el ? describe(el) : null;\n if (el && !target) return false;\n const t = Date.now();\n reveals.noteAction(t);\n const ev = { kind: \"action\", action, value, target, t, author: \"human\" };\n transport.emit(ev);\n return true;\n }\n function flushRevealingHover(actionTarget) {\n const hovered = reveals.takeLoadBearingHover(actionTarget);\n if (hovered) emitAction(\"hover\", hovered, null);\n }\n function valueOf(el) {\n if (el.isContentEditable) return clean(el.innerText, 500);\n return el.value ?? \"\";\n }\n function commitFill(el) {\n if (!isEditable(el)) return;\n const value = valueOf(el);\n if (committed.get(el) === value) return;\n if (focusValue.get(el) === value && committed.get(el) === void 0) return;\n committed.set(el, value);\n flushRevealingHover(el);\n emitAction(\"fill\", el, value);\n }\n function flushPendingFill() {\n const active = document.activeElement;\n if (active && isEditable(active)) commitFill(active);\n }\n const on = (type, handler) => {\n document.addEventListener(type, handler, true);\n };\n on(\"focusin\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) focusValue.set(el, valueOf(el));\n });\n on(\"mouseover\", (e) => {\n const el = targetOf(e);\n if (el) reveals.noteHover(el);\n });\n on(\"pointerdown\", (e) => {\n const el = targetOf(e);\n if (el) lastPointerDown = { el, t: Date.now() };\n });\n on(\"click\", (e) => {\n const clicked = targetOf(e);\n if (!clicked) return;\n const el = resolveGestureTarget(clicked);\n if (isEchoOfRecordedClick(el)) return;\n flushPendingFill();\n flushRevealingHover(el);\n if (emitAction(\"click\", el, null)) lastRecorded = { el, t: Date.now() };\n });\n on(\"dblclick\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n flushPendingFill();\n emitAction(\"dblclick\", el, null);\n });\n on(\"change\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n if (el.tagName.toLowerCase() === \"select\") {\n const sel = el;\n const opt = sel.selectedOptions[0];\n flushPendingFill();\n flushRevealingHover(el);\n emitAction(\"select\", el, opt ? opt.value || clean(opt.textContent) : sel.value);\n return;\n }\n if (isEditable(el)) commitFill(el);\n });\n on(\"blur\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) commitFill(el);\n });\n on(\"keydown\", (e) => {\n if (isStopHotkey(e)) {\n e.preventDefault();\n e.stopPropagation();\n transport.binding(config.stopBinding)?.({ reason: \"hotkey\" });\n return;\n }\n const el = targetOf(e);\n if (isEditable(el)) {\n if (e.key !== \"Enter\" && e.key !== \"Escape\") return;\n commitFill(el);\n } else if (!MEANINGFUL_KEYS.includes(e.key) && !(e.ctrlKey || e.metaKey || e.altKey)) {\n return;\n } else {\n flushPendingFill();\n }\n emitAction(\"press\", el, playwrightKey(e));\n });\n installScrollCapture(ctx, emitAction);\n }\n var RESIZE_PROBE = [\n \".erd_scroll_detection_container\",\n \".resize-sensor\",\n \".resize-triggers\",\n \"[data-resize-sensor]\"\n ];\n function isResizeProbe(el) {\n if (!el) return false;\n return RESIZE_PROBE.some((sel) => {\n try {\n return el.matches(sel) || el.closest(sel) !== null;\n } catch {\n return false;\n }\n });\n }\n function installScrollCapture(ctx, emitAction) {\n const { config } = ctx;\n const lastPosition = /* @__PURE__ */ new WeakMap();\n const timers = /* @__PURE__ */ new WeakMap();\n document.addEventListener(\n \"scroll\",\n (e) => {\n const raw = e.target;\n if (raw && raw.nodeType === 1 && isResizeProbe(raw)) return;\n const isDocument = !raw || raw === document || raw === document.documentElement || raw === document.body;\n const key = isDocument ? document : raw;\n const el = isDocument ? null : raw;\n const x = el ? el.scrollLeft : window.scrollX;\n const y = el ? el.scrollTop : window.scrollY;\n const existing = timers.get(key);\n if (existing) clearTimeout(existing);\n timers.set(\n key,\n setTimeout(() => {\n const last = lastPosition.get(key) ?? { x: 0, y: 0 };\n const moved = Math.abs(x - last.x) >= config.scrollMinDeltaPx || Math.abs(y - last.y) >= config.scrollMinDeltaPx;\n if (!moved) return;\n lastPosition.set(key, { x, y });\n emitAction(\"scroll\", el, JSON.stringify({ x, y }));\n }, config.scrollDebounceMs)\n );\n },\n true\n );\n }\n\n // src/noise.ts\n var TRANSIENT_NAME = /\\b(loading|spinner|progress|skeleton|please wait|submitting|saving)\\b/i;\n function isTransientIndicator(role, name) {\n if (role === \"progressbar\") return true;\n return TRANSIENT_NAME.test(name);\n }\n\n // src/recorder/agent/visibility.ts\n function isVisible(el) {\n if (!el.isConnected) return false;\n const he = el;\n if (he.hidden || el.getAttribute(\"aria-hidden\") === \"true\") return false;\n const rect = he.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return false;\n const cs = window.getComputedStyle(he);\n return cs.visibility !== \"hidden\" && cs.display !== \"none\" && cs.opacity !== \"0\";\n }\n\n // src/recorder/agent/dom-reaction.ts\n var INTERESTING = \"[data-testid], [data-test], [data-test-id], [data-cy], [id], [role], button, a[href]\";\n var OBSERVED_ATTRS = [\"class\", \"style\", \"hidden\", \"aria-hidden\"];\n var APPEAR_CONFIRM_MS = 600;\n function toCssSelector(selector) {\n if (selector.startsWith(\"role=\") || selector.startsWith(\"text=\")) {\n throw new Error(\"not a CSS selector\");\n }\n return selector;\n }\n function harvest(nodes, into, pick, revealed, max) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node || node.nodeType !== 1) continue;\n const el = node;\n revealed.push(el);\n const own = pick(el);\n if (own && into.size < max) into.add(own);\n const descendants = el.querySelectorAll(INTERESTING);\n for (let j = 0; j < descendants.length && into.size < max; j++) {\n const d = descendants[j];\n if (!d) continue;\n const sel = pick(d);\n if (sel) into.add(sel);\n }\n }\n }\n function observeDomReactions(ctx) {\n const { config, transport, reveals } = ctx;\n const visibility = /* @__PURE__ */ new WeakMap();\n let pending = [];\n const stillVisible = (sel) => {\n try {\n const el = document.querySelector(toCssSelector(sel));\n return el ? isVisible(el) : false;\n } catch {\n return true;\n }\n };\n const confirm = (entry) => {\n const survived = entry.selectors.filter(stillVisible);\n if (survived.length) {\n transport.emit({ kind: \"dom\", appeared: survived, gone: [], t: entry.at });\n }\n };\n const flushAppearances = () => {\n const due = pending;\n pending = [];\n for (const entry of due) {\n clearTimeout(entry.timer);\n confirm(entry);\n }\n };\n const visibleAppearedSelector = (el) => {\n if (!isVisible(el)) return null;\n if (isTransientIndicator(getRole(el), accessibleName(el))) return null;\n return appearedSelector(el);\n };\n const start = () => {\n const observer = new MutationObserver((records) => {\n const appeared = /* @__PURE__ */ new Set();\n const gone = /* @__PURE__ */ new Set();\n const revealed = [];\n for (const rec of records) {\n if (rec.type === \"childList\") {\n harvest(rec.addedNodes, appeared, visibleAppearedSelector, revealed, config.maxSelectorsPerMutation);\n harvest(rec.removedNodes, gone, goneSelector, [], config.maxSelectorsPerMutation);\n continue;\n }\n const el = rec.target;\n const sel = appearedSelector(el);\n if (!sel) continue;\n const now = isVisible(el);\n const was = visibility.get(el);\n visibility.set(el, now);\n if (was === void 0 || was === now) continue;\n if (now) {\n appeared.add(sel);\n revealed.push(el);\n } else {\n const g = goneSelector(el);\n if (g) gone.add(g);\n }\n }\n const at = Date.now();\n reveals.noteRevealed(revealed, at);\n if (gone.size) {\n transport.emit({ kind: \"dom\", appeared: [], gone: Array.from(gone), t: at });\n }\n if (appeared.size) {\n const entry = {\n selectors: Array.from(appeared),\n at,\n timer: setTimeout(() => {\n pending = pending.filter((e) => e !== entry);\n confirm(entry);\n }, APPEAR_CONFIRM_MS)\n };\n pending.push(entry);\n }\n });\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: OBSERVED_ATTRS\n });\n };\n if (document.documentElement) start();\n else document.addEventListener(\"DOMContentLoaded\", start, { once: true });\n return { flushAppearances };\n }\n\n // src/recorder/agent/reveal-tracker.ts\n var ACTION_COOLDOWN_MS = 600;\n function createRevealTracker(config) {\n let pending = null;\n let lastHovered = null;\n let lastActionAt = 0;\n return {\n noteHover(el) {\n lastHovered = el;\n },\n noteAction(at) {\n lastActionAt = at;\n },\n noteRevealed(nodes, at) {\n if (!nodes.length || !lastHovered) return;\n if (at - lastActionAt <= ACTION_COOLDOWN_MS) return;\n pending = { el: lastHovered, nodes, at };\n },\n takeLoadBearingHover(actionTarget) {\n const reveal = pending;\n pending = null;\n if (!reveal || !actionTarget) return null;\n if (Date.now() - reveal.at > config.hoverRevealWindowMs) return null;\n if (!reveal.el.isConnected) return null;\n const inside = reveal.nodes.some((n) => n === actionTarget || n.contains(actionTarget));\n return inside ? reveal.el : null;\n }\n };\n }\n\n // src/recorder/agent/transport.ts\n var DRAIN_INTERVAL_MS = 25;\n function createTransport(config) {\n const globals = window;\n const pending = [];\n let drainTimer = null;\n function binding(name) {\n const fn = globals[name];\n return typeof fn === \"function\" ? fn : null;\n }\n function drain() {\n const fn = binding(config.emitBinding);\n if (!fn) return;\n while (pending.length) {\n const ev = pending.shift();\n try {\n fn(ev);\n } catch {\n }\n }\n if (drainTimer) {\n clearInterval(drainTimer);\n drainTimer = null;\n }\n }\n function emit(ev) {\n pending.push(ev);\n if (binding(config.emitBinding)) drain();\n else if (!drainTimer) drainTimer = setInterval(drain, DRAIN_INTERVAL_MS);\n }\n return { emit, binding };\n }\n\n // src/recorder/agent/page-agent.ts\n var INSTALLED_FLAG = \"__replayAgentInstalled\";\n function pageAgent(config) {\n const globals = window;\n if (globals[INSTALLED_FLAG]) return;\n if (window.top !== window) return;\n globals[INSTALLED_FLAG] = true;\n const transport = createTransport(config);\n const reveals = createRevealTracker(config);\n const dom = observeDomReactions({ config, transport, reveals });\n installCapture({ config, transport, reveals, beforeAction: () => dom.flushAppearances() });\n globals[FLUSH_GLOBAL] = () => dom.flushAppearances();\n globals[AGENT_READY_FLAG] = true;\n }\n\n // src/recorder/agent/main.ts\n window[INSTALL_GLOBAL] = (config) => {\n pageAgent(config);\n };\n})();\n";
@@ -2,5 +2,5 @@
2
2
  // Source: src/recorder/agent/main.ts. Regenerate with `npm run build:agent`.
3
3
  /* eslint-disable */
4
4
  /** The in-page capture agent, bundled as a standalone IIFE. */
5
- export const AGENT_BUNDLE = "\"use strict\";\n(() => {\n // src/recorder/agent/config.ts\n var INSTALL_GLOBAL = \"__replayInstall\";\n var AGENT_READY_FLAG = \"__replayAgentReady\";\n var FLUSH_GLOBAL = \"__replayFlush\";\n\n // src/recorder/agent/text.ts\n function clean(s, max = 80) {\n if (!s) return \"\";\n const t = s.replace(/\\s+/g, \" \").trim();\n return t.length > max ? `${t.slice(0, max - 1)}\\u2026` : t;\n }\n function escAttr(v) {\n return v.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n }\n function escId(v) {\n return typeof window.CSS?.escape === \"function\" ? window.CSS.escape(v) : v.replace(/([^\\w-])/g, \"\\\\$1\");\n }\n function isStableToken(t) {\n if (!t || t.length > 40) return false;\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(t)) return false;\n if (/^(css|sc|emotion|styled|jsx|glamor|makeStyles)-/i.test(t)) return false;\n if (/[0-9a-f]{6,}/i.test(t)) return false;\n if ((t.match(/\\d/g) || []).length >= 3) return false;\n if (/[A-Z]/.test(t) && /\\d/.test(t)) return false;\n if (/^[a-z]{1,2}-[a-z0-9]{5,}$/i.test(t) && /\\d/.test(t)) return false;\n if (t.split(/[-_]/).some(looksGenerated)) return false;\n if (/-(aria|diff|live|announcer|portal)$/i.test(t)) return false;\n return true;\n }\n function looksGenerated(segment) {\n if (segment.length < 6) return false;\n if (!/^[a-z0-9]+$/i.test(segment)) return false;\n const vowels = (segment.match(/[aeiouy]/gi) || []).length;\n return /\\d/.test(segment) ? vowels <= 1 : vowels === 0;\n }\n function isStableClass(c) {\n return isStableToken(c) && !/^_/.test(c);\n }\n function renderedText(el, max = 80) {\n const inner = el.innerText;\n return clean(typeof inner === \"string\" ? inner : el.textContent, max);\n }\n\n // src/recorder/agent/roles.ts\n var TAG_ROLES = {\n button: \"button\",\n select: \"combobox\",\n textarea: \"textbox\",\n nav: \"navigation\",\n main: \"main\",\n header: \"banner\",\n footer: \"contentinfo\",\n aside: \"complementary\",\n form: \"form\",\n table: \"table\",\n tr: \"row\",\n td: \"cell\",\n th: \"columnheader\",\n ul: \"list\",\n ol: \"list\",\n li: \"listitem\",\n dialog: \"dialog\",\n option: \"option\",\n h1: \"heading\",\n h2: \"heading\",\n h3: \"heading\",\n h4: \"heading\",\n h5: \"heading\",\n h6: \"heading\"\n };\n var INPUT_ROLES = {\n button: \"button\",\n submit: \"button\",\n reset: \"button\",\n image: \"button\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n range: \"slider\",\n number: \"spinbutton\",\n search: \"searchbox\",\n email: \"textbox\",\n tel: \"textbox\",\n text: \"textbox\",\n url: \"textbox\"\n };\n var NAME_FROM_CONTENT = [\n \"button\",\n \"link\",\n \"heading\",\n \"cell\",\n \"columnheader\",\n \"rowheader\",\n \"listitem\",\n \"option\",\n \"tab\",\n \"menuitem\",\n \"menuitemcheckbox\",\n \"menuitemradio\",\n \"treeitem\",\n \"switch\",\n \"checkbox\",\n \"radio\"\n ];\n var NON_EDITABLE_INPUTS = [\"checkbox\", \"radio\", \"button\", \"submit\", \"reset\", \"file\", \"image\"];\n function getRole(el) {\n const explicit = el.getAttribute(\"role\");\n if (explicit) return explicit.trim().split(/\\s+/)[0] || null;\n const tag = el.tagName.toLowerCase();\n if (tag === \"a\") return el.hasAttribute(\"href\") ? \"link\" : null;\n if (tag === \"img\") return el.getAttribute(\"alt\") === \"\" ? null : \"img\";\n if (tag === \"input\") {\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return INPUT_ROLES[type] ?? null;\n }\n return TAG_ROLES[tag] ?? null;\n }\n function isEditable(el) {\n if (!el || el.nodeType !== 1) return false;\n const tag = el.tagName.toLowerCase();\n if (tag === \"textarea\") return true;\n if (el.isContentEditable) return true;\n if (tag !== \"input\") return false;\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return !NON_EDITABLE_INPUTS.includes(type);\n }\n function accessibleName(el) {\n const aria = el.getAttribute(\"aria-label\");\n if (aria && aria.trim()) return clean(aria);\n const labelledby = el.getAttribute(\"aria-labelledby\");\n if (labelledby) {\n const parts = labelledby.split(/\\s+/).map((id) => document.getElementById(id)).filter((n) => !!n).map((n) => clean(n.textContent));\n const joined = clean(parts.filter(Boolean).join(\" \"));\n if (joined) return joined;\n }\n const tag = el.tagName.toLowerCase();\n if ([\"input\", \"select\", \"textarea\"].includes(tag)) {\n const id = el.getAttribute(\"id\");\n if (id) {\n const forLabel = document.querySelector(`label[for=\"${escAttr(id)}\"]`);\n if (forLabel) {\n const t = clean(forLabel.textContent);\n if (t) return t;\n }\n }\n const wrapping = el.closest(\"label\");\n if (wrapping) {\n const t = clean(wrapping.textContent);\n if (t) return t;\n }\n }\n for (const attr of [\"alt\", \"title\", \"placeholder\"]) {\n const v = el.getAttribute(attr);\n if (v && v.trim()) return clean(v);\n }\n const role = getRole(el);\n if (role && NAME_FROM_CONTENT.includes(role)) {\n const t = clean(el.textContent);\n if (t) return t;\n }\n return \"\";\n }\n function ownText(el) {\n return clean(el.textContent, 60);\n }\n\n // src/recorder/agent/selectors.ts\n var TEST_ID_ATTRS = [\n \"data-testid\",\n \"data-test\",\n \"data-test-id\",\n \"data-cy\",\n \"data-sentry-label\",\n \"data-testid-label\"\n ];\n var MAX_CANDIDATES = 5;\n var MAX_CSS_PATH_DEPTH = 6;\n function testIdSelector(el) {\n for (const attr of TEST_ID_ATTRS) {\n const v = el.getAttribute(attr);\n if (v) return `[${attr}=\"${escAttr(v)}\"]`;\n }\n return null;\n }\n function idSelector(el) {\n const id = el.getAttribute(\"id\");\n return id && isStableToken(id) ? `#${escId(id)}` : null;\n }\n function roleNameSelector(el) {\n const role = getRole(el);\n if (!role) return null;\n const name = accessibleName(el);\n if (!name) return null;\n return `role=${role}[name=\"${escAttr(name)}\"]`;\n }\n function appearedSelector(el) {\n return testIdSelector(el) ?? idSelector(el) ?? roleNameSelector(el);\n }\n function goneSelector(el) {\n return testIdSelector(el) ?? idSelector(el);\n }\n function allElements() {\n return Array.from(document.querySelectorAll(\"*\"));\n }\n function withNth(base, el, matches) {\n if (matches.length <= 1) return base;\n const idx = matches.indexOf(el);\n return idx < 0 ? base : `${base} >> nth=${idx}`;\n }\n function buildCssPath(el) {\n const segs = [];\n let cur = el;\n let depth = 0;\n while (cur && cur.nodeType === 1 && cur !== document.documentElement && depth < MAX_CSS_PATH_DEPTH) {\n const node = cur;\n if (depth > 0) {\n const anchor = testIdSelector(node) ?? idSelector(node);\n if (anchor) {\n segs.unshift(anchor);\n break;\n }\n }\n let seg = node.tagName.toLowerCase();\n const classes = Array.from(node.classList).filter(isStableClass).slice(0, 2);\n if (classes.length) seg += `.${classes.map(escId).join(\".\")}`;\n const parent = node.parentElement;\n if (parent) {\n const sameTag = Array.from(parent.children).filter((c) => c.tagName === node.tagName);\n if (sameTag.length > 1) seg += `:nth-of-type(${sameTag.indexOf(node) + 1})`;\n }\n segs.unshift(seg);\n const partial = segs.join(\" > \");\n try {\n if (document.querySelectorAll(partial).length === 1) return partial;\n } catch {\n return null;\n }\n cur = parent;\n depth++;\n }\n if (!segs.length) return null;\n const sel = segs.join(\" > \");\n try {\n return document.querySelectorAll(sel).length ? sel : null;\n } catch {\n return null;\n }\n }\n function buildCandidates(el) {\n const out = [];\n const push = (s) => {\n if (s && out.indexOf(s) === -1) out.push(s);\n };\n push(testIdSelector(el));\n push(idSelector(el));\n const nameAttr = el.getAttribute(\"name\");\n if (nameAttr && isStableToken(nameAttr)) {\n push(`${el.tagName.toLowerCase()}[name=\"${escAttr(nameAttr)}\"]`);\n }\n const roleName = roleNameSelector(el);\n if (roleName) {\n const role = getRole(el);\n const name = accessibleName(el);\n const matches = allElements().filter((c) => getRole(c) === role && accessibleName(c) === name);\n push(withNth(roleName, el, matches));\n }\n push(labelledAncestorSelector(el));\n const cssPath = buildCssPath(el);\n const text = ownText(el);\n const textSelector = text && isSmallestWithText(el, text) ? withNth(`text=\"${escAttr(text)}\"`, el, allElements().filter((c) => isSmallestWithText(c, text))) : null;\n if (isPositionalOnly(cssPath)) {\n push(textSelector);\n push(cssPath);\n } else {\n push(cssPath);\n push(textSelector);\n }\n return out.slice(0, MAX_CANDIDATES);\n }\n function isPositionalOnly(selector) {\n if (!selector) return false;\n if (!selector.includes(\":nth-of-type(\")) return false;\n return !selector.includes(\"[\") && !selector.includes(\".\");\n }\n function labelledAncestorSelector(el) {\n if (testIdSelector(el) ?? idSelector(el)) return null;\n let cur = el.parentElement;\n for (let depth = 0; cur && depth < 3; depth++) {\n const anchor = testIdSelector(cur);\n if (anchor) {\n try {\n return document.querySelectorAll(anchor).length === 1 ? anchor : null;\n } catch {\n return null;\n }\n }\n cur = cur.parentElement;\n }\n return null;\n }\n function isSmallestWithText(el, text) {\n if (ownText(el) !== text) return false;\n return !Array.from(el.children).some((child) => ownText(child) === text);\n }\n function contextLabel(el) {\n const row = el.closest('tr, [role=\"row\"], li, [role=\"listitem\"], [data-testid*=\"row\"]');\n if (row && row !== el) {\n const own = renderedText(el, 60);\n const full = renderedText(row, 120);\n const t = clean(own ? full.split(own).join(\" \") : full, 60);\n if (t) return ` in the row containing \"${t}\"`;\n }\n const section = el.closest('form, section, dialog, [role=\"dialog\"], nav, main, aside');\n if (section && section !== el) {\n const label = section.getAttribute(\"aria-label\") || clean(section.querySelector(\"h1, h2, h3, h4, legend\")?.textContent) || \"\";\n if (label) return ` in the ${section.tagName.toLowerCase()} labelled \"${clean(label, 40)}\"`;\n }\n return \"\";\n }\n function semanticOf(el) {\n const role = getRole(el) || el.tagName.toLowerCase();\n const name = accessibleName(el) || ownText(el);\n const head = name ? `${name} ${role}` : role;\n return head + contextLabel(el);\n }\n function describe(el) {\n const candidates = buildCandidates(el);\n if (!candidates.length) return null;\n return { candidates, semantic: semanticOf(el) };\n }\n\n // src/recorder/agent/capture.ts\n var ECHO_WINDOW_MS = 30;\n var GESTURE_WINDOW_MS = 1e3;\n var MEANINGFUL_KEYS = [\n \"Enter\",\n \"Escape\",\n \"Tab\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Backspace\",\n \"Delete\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \" \"\n ];\n function targetOf(e) {\n const t = e.target;\n return t && t.nodeType === 1 ? t : null;\n }\n function playwrightKey(e) {\n const mods = [];\n if (e.ctrlKey) mods.push(\"Control\");\n if (e.altKey) mods.push(\"Alt\");\n if (e.metaKey) mods.push(\"Meta\");\n if (e.shiftKey && e.key.length > 1) mods.push(\"Shift\");\n const key = e.key === \" \" ? \"Space\" : e.key;\n return [...mods, key].join(\"+\");\n }\n function isStopHotkey(e) {\n return (e.ctrlKey || e.metaKey) && e.shiftKey && e.key.toLowerCase() === \"x\";\n }\n function installCapture(ctx) {\n const { config, transport, reveals } = ctx;\n const focusValue = /* @__PURE__ */ new WeakMap();\n const committed = /* @__PURE__ */ new WeakMap();\n let lastRecorded = null;\n let lastPointerDown = null;\n function resolveGestureTarget(clicked) {\n const pd = lastPointerDown;\n if (!pd || pd.el === clicked) return clicked;\n if (Date.now() - pd.t > GESTURE_WINDOW_MS) return clicked;\n const retargeted = clicked === document.documentElement || clicked === document.body;\n if (retargeted && pd.el.isConnected && describe(pd.el)) return pd.el;\n if (!describe(clicked) && pd.el.isConnected && describe(pd.el)) return pd.el;\n return clicked;\n }\n function isEchoOfRecordedClick(el) {\n const prev = lastRecorded;\n if (!prev) return false;\n if (Date.now() - prev.t > ECHO_WINDOW_MS) return false;\n if (prev.el === el) return true;\n if (prev.el.contains(el) || el.contains(prev.el)) return true;\n const label = el.closest(\"label\");\n return Boolean(label && label === prev.el.closest(\"label\"));\n }\n function emitAction(action, el, value) {\n ctx.beforeAction?.();\n const target = el ? describe(el) : null;\n if (el && !target) return false;\n const t = Date.now();\n reveals.noteAction(t);\n const ev = { kind: \"action\", action, value, target, t, author: \"human\" };\n transport.emit(ev);\n return true;\n }\n function flushRevealingHover(actionTarget) {\n const hovered = reveals.takeLoadBearingHover(actionTarget);\n if (hovered) emitAction(\"hover\", hovered, null);\n }\n function valueOf(el) {\n if (el.isContentEditable) return clean(el.innerText, 500);\n return el.value ?? \"\";\n }\n function commitFill(el) {\n if (!isEditable(el)) return;\n const value = valueOf(el);\n if (committed.get(el) === value) return;\n if (focusValue.get(el) === value && committed.get(el) === void 0) return;\n committed.set(el, value);\n flushRevealingHover(el);\n emitAction(\"fill\", el, value);\n }\n function flushPendingFill() {\n const active = document.activeElement;\n if (active && isEditable(active)) commitFill(active);\n }\n const on = (type, handler) => {\n document.addEventListener(type, handler, true);\n };\n on(\"focusin\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) focusValue.set(el, valueOf(el));\n });\n on(\"mouseover\", (e) => {\n const el = targetOf(e);\n if (el) reveals.noteHover(el);\n });\n on(\"pointerdown\", (e) => {\n const el = targetOf(e);\n if (el) lastPointerDown = { el, t: Date.now() };\n });\n on(\"click\", (e) => {\n const clicked = targetOf(e);\n if (!clicked) return;\n const el = resolveGestureTarget(clicked);\n if (isEchoOfRecordedClick(el)) return;\n flushPendingFill();\n flushRevealingHover(el);\n if (emitAction(\"click\", el, null)) lastRecorded = { el, t: Date.now() };\n });\n on(\"dblclick\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n flushPendingFill();\n emitAction(\"dblclick\", el, null);\n });\n on(\"change\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n if (el.tagName.toLowerCase() === \"select\") {\n const sel = el;\n const opt = sel.selectedOptions[0];\n flushPendingFill();\n flushRevealingHover(el);\n emitAction(\"select\", el, opt ? opt.value || clean(opt.textContent) : sel.value);\n return;\n }\n if (isEditable(el)) commitFill(el);\n });\n on(\"blur\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) commitFill(el);\n });\n on(\"keydown\", (e) => {\n if (isStopHotkey(e)) {\n e.preventDefault();\n e.stopPropagation();\n transport.binding(config.stopBinding)?.({ reason: \"hotkey\" });\n return;\n }\n const el = targetOf(e);\n if (isEditable(el)) {\n if (e.key !== \"Enter\" && e.key !== \"Escape\") return;\n commitFill(el);\n } else if (!MEANINGFUL_KEYS.includes(e.key) && !(e.ctrlKey || e.metaKey || e.altKey)) {\n return;\n } else {\n flushPendingFill();\n }\n emitAction(\"press\", el, playwrightKey(e));\n });\n installScrollCapture(ctx, emitAction);\n }\n var RESIZE_PROBE = [\n \".erd_scroll_detection_container\",\n \".resize-sensor\",\n \".resize-triggers\",\n \"[data-resize-sensor]\"\n ];\n function isResizeProbe(el) {\n if (!el) return false;\n return RESIZE_PROBE.some((sel) => {\n try {\n return el.matches(sel) || el.closest(sel) !== null;\n } catch {\n return false;\n }\n });\n }\n function installScrollCapture(ctx, emitAction) {\n const { config } = ctx;\n const lastPosition = /* @__PURE__ */ new WeakMap();\n const timers = /* @__PURE__ */ new WeakMap();\n document.addEventListener(\n \"scroll\",\n (e) => {\n const raw = e.target;\n if (raw && raw.nodeType === 1 && isResizeProbe(raw)) return;\n const isDocument = !raw || raw === document || raw === document.documentElement || raw === document.body;\n const key = isDocument ? document : raw;\n const el = isDocument ? null : raw;\n const x = el ? el.scrollLeft : window.scrollX;\n const y = el ? el.scrollTop : window.scrollY;\n const existing = timers.get(key);\n if (existing) clearTimeout(existing);\n timers.set(\n key,\n setTimeout(() => {\n const last = lastPosition.get(key) ?? { x: 0, y: 0 };\n const moved = Math.abs(x - last.x) >= config.scrollMinDeltaPx || Math.abs(y - last.y) >= config.scrollMinDeltaPx;\n if (!moved) return;\n lastPosition.set(key, { x, y });\n emitAction(\"scroll\", el, JSON.stringify({ x, y }));\n }, config.scrollDebounceMs)\n );\n },\n true\n );\n }\n\n // src/noise.ts\n var TRANSIENT_NAME = /\\b(loading|spinner|progress|skeleton|please wait|submitting|saving)\\b/i;\n function isTransientIndicator(role, name) {\n if (role === \"progressbar\") return true;\n return TRANSIENT_NAME.test(name);\n }\n\n // src/recorder/agent/visibility.ts\n function isVisible(el) {\n if (!el.isConnected) return false;\n const he = el;\n if (he.hidden || el.getAttribute(\"aria-hidden\") === \"true\") return false;\n const rect = he.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return false;\n const cs = window.getComputedStyle(he);\n return cs.visibility !== \"hidden\" && cs.display !== \"none\" && cs.opacity !== \"0\";\n }\n\n // src/recorder/agent/dom-reaction.ts\n var INTERESTING = \"[data-testid], [data-test], [data-test-id], [data-cy], [id], [role], button, a[href]\";\n var OBSERVED_ATTRS = [\"class\", \"style\", \"hidden\", \"aria-hidden\"];\n var APPEAR_CONFIRM_MS = 600;\n function toCssSelector(selector) {\n if (selector.startsWith(\"role=\") || selector.startsWith(\"text=\")) {\n throw new Error(\"not a CSS selector\");\n }\n return selector;\n }\n function harvest(nodes, into, pick, revealed, max) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node || node.nodeType !== 1) continue;\n const el = node;\n revealed.push(el);\n const own = pick(el);\n if (own && into.size < max) into.add(own);\n const descendants = el.querySelectorAll(INTERESTING);\n for (let j = 0; j < descendants.length && into.size < max; j++) {\n const d = descendants[j];\n if (!d) continue;\n const sel = pick(d);\n if (sel) into.add(sel);\n }\n }\n }\n function observeDomReactions(ctx) {\n const { config, transport, reveals } = ctx;\n const visibility = /* @__PURE__ */ new WeakMap();\n let pending = [];\n const stillVisible = (sel) => {\n try {\n const el = document.querySelector(toCssSelector(sel));\n return el ? isVisible(el) : false;\n } catch {\n return true;\n }\n };\n const confirm = (entry) => {\n const survived = entry.selectors.filter(stillVisible);\n if (survived.length) {\n transport.emit({ kind: \"dom\", appeared: survived, gone: [], t: entry.at });\n }\n };\n const flushAppearances = () => {\n const due = pending;\n pending = [];\n for (const entry of due) {\n clearTimeout(entry.timer);\n confirm(entry);\n }\n };\n const visibleAppearedSelector = (el) => {\n if (!isVisible(el)) return null;\n if (isTransientIndicator(getRole(el), accessibleName(el))) return null;\n return appearedSelector(el);\n };\n const start = () => {\n const observer = new MutationObserver((records) => {\n const appeared = /* @__PURE__ */ new Set();\n const gone = /* @__PURE__ */ new Set();\n const revealed = [];\n for (const rec of records) {\n if (rec.type === \"childList\") {\n harvest(rec.addedNodes, appeared, visibleAppearedSelector, revealed, config.maxSelectorsPerMutation);\n harvest(rec.removedNodes, gone, goneSelector, [], config.maxSelectorsPerMutation);\n continue;\n }\n const el = rec.target;\n const sel = appearedSelector(el);\n if (!sel) continue;\n const now = isVisible(el);\n const was = visibility.get(el);\n visibility.set(el, now);\n if (was === void 0 || was === now) continue;\n if (now) {\n appeared.add(sel);\n revealed.push(el);\n } else {\n const g = goneSelector(el);\n if (g) gone.add(g);\n }\n }\n const at = Date.now();\n reveals.noteRevealed(revealed, at);\n if (gone.size) {\n transport.emit({ kind: \"dom\", appeared: [], gone: Array.from(gone), t: at });\n }\n if (appeared.size) {\n const entry = {\n selectors: Array.from(appeared),\n at,\n timer: setTimeout(() => {\n pending = pending.filter((e) => e !== entry);\n confirm(entry);\n }, APPEAR_CONFIRM_MS)\n };\n pending.push(entry);\n }\n });\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: OBSERVED_ATTRS\n });\n };\n if (document.documentElement) start();\n else document.addEventListener(\"DOMContentLoaded\", start, { once: true });\n return { flushAppearances };\n }\n\n // src/recorder/agent/reveal-tracker.ts\n var ACTION_COOLDOWN_MS = 600;\n function createRevealTracker(config) {\n let pending = null;\n let lastHovered = null;\n let lastActionAt = 0;\n return {\n noteHover(el) {\n lastHovered = el;\n },\n noteAction(at) {\n lastActionAt = at;\n },\n noteRevealed(nodes, at) {\n if (!nodes.length || !lastHovered) return;\n if (at - lastActionAt <= ACTION_COOLDOWN_MS) return;\n pending = { el: lastHovered, nodes, at };\n },\n takeLoadBearingHover(actionTarget) {\n const reveal = pending;\n pending = null;\n if (!reveal || !actionTarget) return null;\n if (Date.now() - reveal.at > config.hoverRevealWindowMs) return null;\n if (!reveal.el.isConnected) return null;\n const inside = reveal.nodes.some((n) => n === actionTarget || n.contains(actionTarget));\n return inside ? reveal.el : null;\n }\n };\n }\n\n // src/recorder/agent/transport.ts\n var DRAIN_INTERVAL_MS = 25;\n function createTransport(config) {\n const globals = window;\n const pending = [];\n let drainTimer = null;\n function binding(name) {\n const fn = globals[name];\n return typeof fn === \"function\" ? fn : null;\n }\n function drain() {\n const fn = binding(config.emitBinding);\n if (!fn) return;\n while (pending.length) {\n const ev = pending.shift();\n try {\n fn(ev);\n } catch {\n }\n }\n if (drainTimer) {\n clearInterval(drainTimer);\n drainTimer = null;\n }\n }\n function emit(ev) {\n pending.push(ev);\n if (binding(config.emitBinding)) drain();\n else if (!drainTimer) drainTimer = setInterval(drain, DRAIN_INTERVAL_MS);\n }\n return { emit, binding };\n }\n\n // src/recorder/agent/page-agent.ts\n var INSTALLED_FLAG = \"__replayAgentInstalled\";\n function pageAgent(config) {\n const globals = window;\n if (globals[INSTALLED_FLAG]) return;\n if (window.top !== window) return;\n globals[INSTALLED_FLAG] = true;\n const transport = createTransport(config);\n const reveals = createRevealTracker(config);\n const dom = observeDomReactions({ config, transport, reveals });\n installCapture({ config, transport, reveals, beforeAction: () => dom.flushAppearances() });\n globals[FLUSH_GLOBAL] = () => dom.flushAppearances();\n globals[AGENT_READY_FLAG] = true;\n }\n\n // src/recorder/agent/main.ts\n window[INSTALL_GLOBAL] = (config) => {\n pageAgent(config);\n };\n})();\n";
5
+ export const AGENT_BUNDLE = "\"use strict\";\n(() => {\n // src/recorder/agent/config.ts\n var INSTALL_GLOBAL = \"__replayInstall\";\n var AGENT_READY_FLAG = \"__replayAgentReady\";\n var FLUSH_GLOBAL = \"__replayFlush\";\n\n // src/recorder/agent/text.ts\n function clean(s, max = 80) {\n if (!s) return \"\";\n const t = s.replace(/\\s+/g, \" \").trim();\n return t.length > max ? `${t.slice(0, max - 1)}\\u2026` : t;\n }\n function escAttr(v) {\n return v.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n }\n function escId(v) {\n return typeof window.CSS?.escape === \"function\" ? window.CSS.escape(v) : v.replace(/([^\\w-])/g, \"\\\\$1\");\n }\n function isStableToken(t) {\n if (!t || t.length > 40) return false;\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(t)) return false;\n if (/^(css|sc|emotion|styled|jsx|glamor|makeStyles)-/i.test(t)) return false;\n if (/[0-9a-f]{6,}/i.test(t)) return false;\n if ((t.match(/\\d/g) || []).length >= 3) return false;\n if (/[A-Z]/.test(t) && /\\d/.test(t)) return false;\n if (/^[a-z]{1,2}-[a-z0-9]{5,}$/i.test(t) && /\\d/.test(t)) return false;\n if (t.split(/[-_]/).some(looksGenerated)) return false;\n if (/-(aria|diff|live|announcer|portal)$/i.test(t)) return false;\n return true;\n }\n function looksGenerated(segment) {\n if (segment.length < 6) return false;\n if (!/^[a-z0-9]+$/i.test(segment)) return false;\n const vowels = (segment.match(/[aeiouy]/gi) || []).length;\n return /\\d/.test(segment) ? vowels <= 1 : vowels === 0;\n }\n function isStableClass(c) {\n return isStableToken(c) && !/^_/.test(c);\n }\n function renderedText(el, max = 80) {\n const inner = el.innerText;\n return clean(typeof inner === \"string\" ? inner : el.textContent, max);\n }\n\n // src/recorder/agent/roles.ts\n var TAG_ROLES = {\n button: \"button\",\n select: \"combobox\",\n textarea: \"textbox\",\n nav: \"navigation\",\n main: \"main\",\n header: \"banner\",\n footer: \"contentinfo\",\n aside: \"complementary\",\n form: \"form\",\n table: \"table\",\n tr: \"row\",\n td: \"cell\",\n th: \"columnheader\",\n ul: \"list\",\n ol: \"list\",\n li: \"listitem\",\n dialog: \"dialog\",\n option: \"option\",\n h1: \"heading\",\n h2: \"heading\",\n h3: \"heading\",\n h4: \"heading\",\n h5: \"heading\",\n h6: \"heading\"\n };\n var INPUT_ROLES = {\n button: \"button\",\n submit: \"button\",\n reset: \"button\",\n image: \"button\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n range: \"slider\",\n number: \"spinbutton\",\n search: \"searchbox\",\n email: \"textbox\",\n tel: \"textbox\",\n text: \"textbox\",\n url: \"textbox\"\n };\n var NAME_FROM_CONTENT = [\n \"button\",\n \"link\",\n \"heading\",\n \"cell\",\n \"columnheader\",\n \"rowheader\",\n \"listitem\",\n \"option\",\n \"tab\",\n \"menuitem\",\n \"menuitemcheckbox\",\n \"menuitemradio\",\n \"treeitem\",\n \"switch\",\n \"checkbox\",\n \"radio\"\n ];\n var NON_EDITABLE_INPUTS = [\"checkbox\", \"radio\", \"button\", \"submit\", \"reset\", \"file\", \"image\"];\n function getRole(el) {\n const explicit = el.getAttribute(\"role\");\n if (explicit) return explicit.trim().split(/\\s+/)[0] || null;\n const tag = el.tagName.toLowerCase();\n if (tag === \"a\") return el.hasAttribute(\"href\") ? \"link\" : null;\n if (tag === \"img\") return el.getAttribute(\"alt\") === \"\" ? null : \"img\";\n if (tag === \"input\") {\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return INPUT_ROLES[type] ?? null;\n }\n return TAG_ROLES[tag] ?? null;\n }\n function isEditable(el) {\n if (!el || el.nodeType !== 1) return false;\n const tag = el.tagName.toLowerCase();\n if (tag === \"textarea\") return true;\n if (el.isContentEditable) return true;\n if (tag !== \"input\") return false;\n const type = (el.getAttribute(\"type\") || \"text\").toLowerCase();\n return !NON_EDITABLE_INPUTS.includes(type);\n }\n function accessibleName(el) {\n const aria = el.getAttribute(\"aria-label\");\n if (aria && aria.trim()) return clean(aria);\n const labelledby = el.getAttribute(\"aria-labelledby\");\n if (labelledby) {\n const parts = labelledby.split(/\\s+/).map((id) => document.getElementById(id)).filter((n) => !!n).map((n) => clean(n.textContent));\n const joined = clean(parts.filter(Boolean).join(\" \"));\n if (joined) return joined;\n }\n const tag = el.tagName.toLowerCase();\n if ([\"input\", \"select\", \"textarea\"].includes(tag)) {\n const id = el.getAttribute(\"id\");\n if (id) {\n const forLabel = document.querySelector(`label[for=\"${escAttr(id)}\"]`);\n if (forLabel) {\n const t = clean(forLabel.textContent);\n if (t) return t;\n }\n }\n const wrapping = el.closest(\"label\");\n if (wrapping) {\n const t = clean(wrapping.textContent);\n if (t) return t;\n }\n }\n for (const attr of [\"alt\", \"title\", \"placeholder\"]) {\n const v = el.getAttribute(attr);\n if (v && v.trim()) return clean(v);\n }\n const role = getRole(el);\n if (role && NAME_FROM_CONTENT.includes(role)) {\n const t = clean(el.textContent);\n if (t) return t;\n }\n return \"\";\n }\n function ownText(el) {\n return clean(el.textContent, 60);\n }\n\n // src/recorder/agent/selectors.ts\n var TEST_ID_ATTRS = [\n \"data-testid\",\n \"data-test\",\n \"data-test-id\",\n \"data-cy\",\n \"data-sentry-label\",\n \"data-testid-label\"\n ];\n var MAX_CANDIDATES = 5;\n var MAX_CSS_PATH_DEPTH = 6;\n function testIdSelector(el) {\n for (const attr of TEST_ID_ATTRS) {\n const v = el.getAttribute(attr);\n if (v) return `[${attr}=\"${escAttr(v)}\"]`;\n }\n return null;\n }\n function idSelector(el) {\n const id = el.getAttribute(\"id\");\n return id && isStableToken(id) ? `#${escId(id)}` : null;\n }\n function roleNameSelector(el) {\n const role = getRole(el);\n if (!role) return null;\n const name = accessibleName(el);\n if (!name) return null;\n return `role=${role}[name=\"${escAttr(name)}\"]`;\n }\n function appearedSelector(el) {\n return testIdSelector(el) ?? idSelector(el) ?? roleNameSelector(el);\n }\n function goneSelector(el) {\n return testIdSelector(el) ?? idSelector(el);\n }\n function allElements() {\n return Array.from(document.querySelectorAll(\"*\"));\n }\n function withNth(base, el, matches) {\n if (matches.length <= 1) return base;\n const idx = matches.indexOf(el);\n return idx < 0 ? base : `${base} >> nth=${idx}`;\n }\n function buildCssPath(el) {\n const segs = [];\n let cur = el;\n let depth = 0;\n while (cur && cur.nodeType === 1 && cur !== document.documentElement && depth < MAX_CSS_PATH_DEPTH) {\n const node = cur;\n if (depth > 0) {\n const anchor = testIdSelector(node) ?? idSelector(node);\n if (anchor) {\n segs.unshift(anchor);\n break;\n }\n }\n let seg = node.tagName.toLowerCase();\n const classes = Array.from(node.classList).filter(isStableClass).slice(0, 2);\n if (classes.length) seg += `.${classes.map(escId).join(\".\")}`;\n const parent = node.parentElement;\n if (parent) {\n const sameTag = Array.from(parent.children).filter((c) => c.tagName === node.tagName);\n if (sameTag.length > 1) seg += `:nth-of-type(${sameTag.indexOf(node) + 1})`;\n }\n segs.unshift(seg);\n const partial = segs.join(\" > \");\n try {\n if (document.querySelectorAll(partial).length === 1) return partial;\n } catch {\n return null;\n }\n cur = parent;\n depth++;\n }\n if (!segs.length) return null;\n const sel = segs.join(\" > \");\n try {\n return document.querySelectorAll(sel).length ? sel : null;\n } catch {\n return null;\n }\n }\n function buildCandidates(el) {\n const out = [];\n const push = (s) => {\n if (s && out.indexOf(s) === -1) out.push(s);\n };\n push(testIdSelector(el));\n push(idSelector(el));\n const nameAttr = el.getAttribute(\"name\");\n if (nameAttr && isStableToken(nameAttr)) {\n push(`${el.tagName.toLowerCase()}[name=\"${escAttr(nameAttr)}\"]`);\n }\n const roleName = roleNameSelector(el);\n if (roleName) {\n const role = getRole(el);\n const name = accessibleName(el);\n const matches = allElements().filter((c) => getRole(c) === role && accessibleName(c) === name);\n push(withNth(roleName, el, matches));\n }\n push(labelledAncestorSelector(el));\n const cssPath = buildCssPath(el);\n const text = ownText(el);\n const textSelector = text && isSmallestWithText(el, text) ? withNth(`text=\"${escAttr(text)}\"`, el, allElements().filter((c) => isSmallestWithText(c, text))) : null;\n if (isPositionalOnly(cssPath)) {\n push(textSelector);\n push(cssPath);\n } else {\n push(cssPath);\n push(textSelector);\n }\n return out.slice(0, MAX_CANDIDATES);\n }\n function isPositionalOnly(selector) {\n if (!selector) return false;\n if (!selector.includes(\":nth-of-type(\")) return false;\n return !selector.includes(\"[\") && !selector.includes(\".\");\n }\n function labelledAncestorSelector(el) {\n if (testIdSelector(el) ?? idSelector(el)) return null;\n let cur = el.parentElement;\n for (let depth = 0; cur && depth < MAX_CSS_PATH_DEPTH; depth++) {\n const anchor = testIdSelector(cur);\n if (anchor) {\n try {\n return document.querySelectorAll(anchor).length === 1 ? anchor : null;\n } catch {\n return null;\n }\n }\n cur = cur.parentElement;\n }\n return null;\n }\n function isSmallestWithText(el, text) {\n if (ownText(el) !== text) return false;\n return !Array.from(el.children).some((child) => ownText(child) === text);\n }\n function contextLabel(el) {\n const row = el.closest('tr, [role=\"row\"], li, [role=\"listitem\"], [data-testid*=\"row\"]');\n if (row && row !== el) {\n const own = renderedText(el, 60);\n const full = renderedText(row, 120);\n const t = clean(own ? full.split(own).join(\" \") : full, 60);\n if (t) return ` in the row containing \"${t}\"`;\n }\n const section = el.closest('form, section, dialog, [role=\"dialog\"], nav, main, aside');\n if (section && section !== el) {\n const label = section.getAttribute(\"aria-label\") || clean(section.querySelector(\"h1, h2, h3, h4, legend\")?.textContent) || \"\";\n if (label) return ` in the ${section.tagName.toLowerCase()} labelled \"${clean(label, 40)}\"`;\n }\n return \"\";\n }\n function semanticOf(el) {\n const role = getRole(el) || el.tagName.toLowerCase();\n const name = accessibleName(el) || ownText(el);\n const head = name ? `${name} ${role}` : role;\n return head + contextLabel(el);\n }\n function describe(el) {\n const candidates = buildCandidates(el);\n if (!candidates.length) return null;\n return { candidates, semantic: semanticOf(el) };\n }\n\n // src/recorder/agent/capture.ts\n var ECHO_WINDOW_MS = 30;\n var GESTURE_WINDOW_MS = 1e3;\n var MEANINGFUL_KEYS = [\n \"Enter\",\n \"Escape\",\n \"Tab\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Backspace\",\n \"Delete\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \" \"\n ];\n function targetOf(e) {\n const t = e.target;\n return t && t.nodeType === 1 ? t : null;\n }\n function playwrightKey(e) {\n const mods = [];\n if (e.ctrlKey) mods.push(\"Control\");\n if (e.altKey) mods.push(\"Alt\");\n if (e.metaKey) mods.push(\"Meta\");\n if (e.shiftKey && e.key.length > 1) mods.push(\"Shift\");\n const key = e.key === \" \" ? \"Space\" : e.key;\n return [...mods, key].join(\"+\");\n }\n function isStopHotkey(e) {\n return (e.ctrlKey || e.metaKey) && e.shiftKey && e.key.toLowerCase() === \"x\";\n }\n function installCapture(ctx) {\n const { config, transport, reveals } = ctx;\n const focusValue = /* @__PURE__ */ new WeakMap();\n const committed = /* @__PURE__ */ new WeakMap();\n let lastRecorded = null;\n let lastPointerDown = null;\n function resolveGestureTarget(clicked) {\n const pd = lastPointerDown;\n if (!pd || pd.el === clicked) return clicked;\n if (Date.now() - pd.t > GESTURE_WINDOW_MS) return clicked;\n const retargeted = clicked === document.documentElement || clicked === document.body;\n if (retargeted && pd.el.isConnected && describe(pd.el)) return pd.el;\n if (!describe(clicked) && pd.el.isConnected && describe(pd.el)) return pd.el;\n return clicked;\n }\n function isEchoOfRecordedClick(el) {\n const prev = lastRecorded;\n if (!prev) return false;\n if (Date.now() - prev.t > ECHO_WINDOW_MS) return false;\n if (prev.el === el) return true;\n if (prev.el.contains(el) || el.contains(prev.el)) return true;\n const label = el.closest(\"label\");\n return Boolean(label && label === prev.el.closest(\"label\"));\n }\n function emitAction(action, el, value) {\n ctx.beforeAction?.();\n const target = el ? describe(el) : null;\n if (el && !target) return false;\n const t = Date.now();\n reveals.noteAction(t);\n const ev = { kind: \"action\", action, value, target, t, author: \"human\" };\n transport.emit(ev);\n return true;\n }\n function flushRevealingHover(actionTarget) {\n const hovered = reveals.takeLoadBearingHover(actionTarget);\n if (hovered) emitAction(\"hover\", hovered, null);\n }\n function valueOf(el) {\n if (el.isContentEditable) return clean(el.innerText, 500);\n return el.value ?? \"\";\n }\n function commitFill(el) {\n if (!isEditable(el)) return;\n const value = valueOf(el);\n if (committed.get(el) === value) return;\n if (focusValue.get(el) === value && committed.get(el) === void 0) return;\n committed.set(el, value);\n flushRevealingHover(el);\n emitAction(\"fill\", el, value);\n }\n function flushPendingFill() {\n const active = document.activeElement;\n if (active && isEditable(active)) commitFill(active);\n }\n const on = (type, handler) => {\n document.addEventListener(type, handler, true);\n };\n on(\"focusin\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) focusValue.set(el, valueOf(el));\n });\n on(\"mouseover\", (e) => {\n const el = targetOf(e);\n if (el) reveals.noteHover(el);\n });\n on(\"pointerdown\", (e) => {\n const el = targetOf(e);\n if (el) lastPointerDown = { el, t: Date.now() };\n });\n on(\"click\", (e) => {\n const clicked = targetOf(e);\n if (!clicked) return;\n const el = resolveGestureTarget(clicked);\n if (isEchoOfRecordedClick(el)) return;\n flushPendingFill();\n flushRevealingHover(el);\n if (emitAction(\"click\", el, null)) lastRecorded = { el, t: Date.now() };\n });\n on(\"dblclick\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n flushPendingFill();\n emitAction(\"dblclick\", el, null);\n });\n on(\"change\", (e) => {\n const el = targetOf(e);\n if (!el) return;\n if (el.tagName.toLowerCase() === \"select\") {\n const sel = el;\n const opt = sel.selectedOptions[0];\n flushPendingFill();\n flushRevealingHover(el);\n emitAction(\"select\", el, opt ? opt.value || clean(opt.textContent) : sel.value);\n return;\n }\n if (isEditable(el)) commitFill(el);\n });\n on(\"blur\", (e) => {\n const el = targetOf(e);\n if (el && isEditable(el)) commitFill(el);\n });\n on(\"keydown\", (e) => {\n if (isStopHotkey(e)) {\n e.preventDefault();\n e.stopPropagation();\n transport.binding(config.stopBinding)?.({ reason: \"hotkey\" });\n return;\n }\n const el = targetOf(e);\n if (isEditable(el)) {\n if (e.key !== \"Enter\" && e.key !== \"Escape\") return;\n commitFill(el);\n } else if (!MEANINGFUL_KEYS.includes(e.key) && !(e.ctrlKey || e.metaKey || e.altKey)) {\n return;\n } else {\n flushPendingFill();\n }\n emitAction(\"press\", el, playwrightKey(e));\n });\n installScrollCapture(ctx, emitAction);\n }\n var RESIZE_PROBE = [\n \".erd_scroll_detection_container\",\n \".resize-sensor\",\n \".resize-triggers\",\n \"[data-resize-sensor]\"\n ];\n function isResizeProbe(el) {\n if (!el) return false;\n return RESIZE_PROBE.some((sel) => {\n try {\n return el.matches(sel) || el.closest(sel) !== null;\n } catch {\n return false;\n }\n });\n }\n function installScrollCapture(ctx, emitAction) {\n const { config } = ctx;\n const lastPosition = /* @__PURE__ */ new WeakMap();\n const timers = /* @__PURE__ */ new WeakMap();\n document.addEventListener(\n \"scroll\",\n (e) => {\n const raw = e.target;\n if (raw && raw.nodeType === 1 && isResizeProbe(raw)) return;\n const isDocument = !raw || raw === document || raw === document.documentElement || raw === document.body;\n const key = isDocument ? document : raw;\n const el = isDocument ? null : raw;\n const x = el ? el.scrollLeft : window.scrollX;\n const y = el ? el.scrollTop : window.scrollY;\n const existing = timers.get(key);\n if (existing) clearTimeout(existing);\n timers.set(\n key,\n setTimeout(() => {\n const last = lastPosition.get(key) ?? { x: 0, y: 0 };\n const moved = Math.abs(x - last.x) >= config.scrollMinDeltaPx || Math.abs(y - last.y) >= config.scrollMinDeltaPx;\n if (!moved) return;\n lastPosition.set(key, { x, y });\n emitAction(\"scroll\", el, JSON.stringify({ x, y }));\n }, config.scrollDebounceMs)\n );\n },\n true\n );\n }\n\n // src/noise.ts\n var TRANSIENT_NAME = /\\b(loading|spinner|progress|skeleton|please wait|submitting|saving)\\b/i;\n function isTransientIndicator(role, name) {\n if (role === \"progressbar\") return true;\n return TRANSIENT_NAME.test(name);\n }\n\n // src/recorder/agent/visibility.ts\n function isVisible(el) {\n if (!el.isConnected) return false;\n const he = el;\n if (he.hidden || el.getAttribute(\"aria-hidden\") === \"true\") return false;\n const rect = he.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return false;\n const cs = window.getComputedStyle(he);\n return cs.visibility !== \"hidden\" && cs.display !== \"none\" && cs.opacity !== \"0\";\n }\n\n // src/recorder/agent/dom-reaction.ts\n var INTERESTING = \"[data-testid], [data-test], [data-test-id], [data-cy], [id], [role], button, a[href]\";\n var OBSERVED_ATTRS = [\"class\", \"style\", \"hidden\", \"aria-hidden\"];\n var APPEAR_CONFIRM_MS = 600;\n function toCssSelector(selector) {\n if (selector.startsWith(\"role=\") || selector.startsWith(\"text=\")) {\n throw new Error(\"not a CSS selector\");\n }\n return selector;\n }\n function harvest(nodes, into, pick, revealed, max) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node || node.nodeType !== 1) continue;\n const el = node;\n revealed.push(el);\n const own = pick(el);\n if (own && into.size < max) into.add(own);\n const descendants = el.querySelectorAll(INTERESTING);\n for (let j = 0; j < descendants.length && into.size < max; j++) {\n const d = descendants[j];\n if (!d) continue;\n const sel = pick(d);\n if (sel) into.add(sel);\n }\n }\n }\n function observeDomReactions(ctx) {\n const { config, transport, reveals } = ctx;\n const visibility = /* @__PURE__ */ new WeakMap();\n let pending = [];\n const stillVisible = (sel) => {\n try {\n const el = document.querySelector(toCssSelector(sel));\n return el ? isVisible(el) : false;\n } catch {\n return true;\n }\n };\n const confirm = (entry) => {\n const survived = entry.selectors.filter(stillVisible);\n if (survived.length) {\n transport.emit({ kind: \"dom\", appeared: survived, gone: [], t: entry.at });\n }\n };\n const flushAppearances = () => {\n const due = pending;\n pending = [];\n for (const entry of due) {\n clearTimeout(entry.timer);\n confirm(entry);\n }\n };\n const visibleAppearedSelector = (el) => {\n if (!isVisible(el)) return null;\n if (isTransientIndicator(getRole(el), accessibleName(el))) return null;\n return appearedSelector(el);\n };\n const start = () => {\n const observer = new MutationObserver((records) => {\n const appeared = /* @__PURE__ */ new Set();\n const gone = /* @__PURE__ */ new Set();\n const revealed = [];\n for (const rec of records) {\n if (rec.type === \"childList\") {\n harvest(rec.addedNodes, appeared, visibleAppearedSelector, revealed, config.maxSelectorsPerMutation);\n harvest(rec.removedNodes, gone, goneSelector, [], config.maxSelectorsPerMutation);\n continue;\n }\n const el = rec.target;\n const sel = appearedSelector(el);\n if (!sel) continue;\n const now = isVisible(el);\n const was = visibility.get(el);\n visibility.set(el, now);\n if (was === void 0 || was === now) continue;\n if (now) {\n appeared.add(sel);\n revealed.push(el);\n } else {\n const g = goneSelector(el);\n if (g) gone.add(g);\n }\n }\n const at = Date.now();\n reveals.noteRevealed(revealed, at);\n if (gone.size) {\n transport.emit({ kind: \"dom\", appeared: [], gone: Array.from(gone), t: at });\n }\n if (appeared.size) {\n const entry = {\n selectors: Array.from(appeared),\n at,\n timer: setTimeout(() => {\n pending = pending.filter((e) => e !== entry);\n confirm(entry);\n }, APPEAR_CONFIRM_MS)\n };\n pending.push(entry);\n }\n });\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: OBSERVED_ATTRS\n });\n };\n if (document.documentElement) start();\n else document.addEventListener(\"DOMContentLoaded\", start, { once: true });\n return { flushAppearances };\n }\n\n // src/recorder/agent/reveal-tracker.ts\n var ACTION_COOLDOWN_MS = 600;\n function createRevealTracker(config) {\n let pending = null;\n let lastHovered = null;\n let lastActionAt = 0;\n return {\n noteHover(el) {\n lastHovered = el;\n },\n noteAction(at) {\n lastActionAt = at;\n },\n noteRevealed(nodes, at) {\n if (!nodes.length || !lastHovered) return;\n if (at - lastActionAt <= ACTION_COOLDOWN_MS) return;\n pending = { el: lastHovered, nodes, at };\n },\n takeLoadBearingHover(actionTarget) {\n const reveal = pending;\n pending = null;\n if (!reveal || !actionTarget) return null;\n if (Date.now() - reveal.at > config.hoverRevealWindowMs) return null;\n if (!reveal.el.isConnected) return null;\n const inside = reveal.nodes.some((n) => n === actionTarget || n.contains(actionTarget));\n return inside ? reveal.el : null;\n }\n };\n }\n\n // src/recorder/agent/transport.ts\n var DRAIN_INTERVAL_MS = 25;\n function createTransport(config) {\n const globals = window;\n const pending = [];\n let drainTimer = null;\n function binding(name) {\n const fn = globals[name];\n return typeof fn === \"function\" ? fn : null;\n }\n function drain() {\n const fn = binding(config.emitBinding);\n if (!fn) return;\n while (pending.length) {\n const ev = pending.shift();\n try {\n fn(ev);\n } catch {\n }\n }\n if (drainTimer) {\n clearInterval(drainTimer);\n drainTimer = null;\n }\n }\n function emit(ev) {\n pending.push(ev);\n if (binding(config.emitBinding)) drain();\n else if (!drainTimer) drainTimer = setInterval(drain, DRAIN_INTERVAL_MS);\n }\n return { emit, binding };\n }\n\n // src/recorder/agent/page-agent.ts\n var INSTALLED_FLAG = \"__replayAgentInstalled\";\n function pageAgent(config) {\n const globals = window;\n if (globals[INSTALLED_FLAG]) return;\n if (window.top !== window) return;\n globals[INSTALLED_FLAG] = true;\n const transport = createTransport(config);\n const reveals = createRevealTracker(config);\n const dom = observeDomReactions({ config, transport, reveals });\n installCapture({ config, transport, reveals, beforeAction: () => dom.flushAppearances() });\n globals[FLUSH_GLOBAL] = () => dom.flushAppearances();\n globals[AGENT_READY_FLAG] = true;\n }\n\n // src/recorder/agent/main.ts\n window[INSTALL_GLOBAL] = (config) => {\n pageAgent(config);\n };\n})();\n";
6
6
  //# sourceMappingURL=agent-bundle.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-bundle.generated.js","sourceRoot":"","sources":["../../src/recorder/agent-bundle.generated.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,6EAA6E;AAC7E,oBAAoB;AAEpB,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,yryBAAyryB,CAAC"}
1
+ {"version":3,"file":"agent-bundle.generated.js","sourceRoot":"","sources":["../../src/recorder/agent-bundle.generated.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,6EAA6E;AAC7E,oBAAoB;AAEpB,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,0syBAA0syB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { Repro } from '../ir/schema.js';
2
+ /**
3
+ * Point a repro recorded against one deployment at another.
4
+ *
5
+ * This is the promise the tool is named for: record where the bug lives —
6
+ * staging, production — and replay where the fix lives, on localhost. Doing it
7
+ * by hand meant rewriting every `goto` value, every absolute network pattern,
8
+ * and the `origin` key of the storage-state file, which is a lot of JSON
9
+ * surgery for what is conceptually one substitution.
10
+ *
11
+ * Three things carry an origin and all three must move together:
12
+ *
13
+ * - `goto` step values — already rebased at replay time
14
+ * - absolute network patterns — `https://staging.example.com/api/*` can
15
+ * never match a same-origin dev proxy
16
+ * - storage state — cookies and localStorage are origin-keyed,
17
+ * so a session restored under the old origin
18
+ * is a session the new one cannot see
19
+ */
20
+ /**
21
+ * Is this origin part of the same application?
22
+ *
23
+ * An app and its API usually sit on sibling hosts (`app.example.com` and
24
+ * `api.example.com`), and both must move. A CDN or an analytics endpoint must
25
+ * not: rewriting those would point third-party traffic at your dev server.
26
+ *
27
+ * Registrable domain is approximated by the last two labels. That is wrong for
28
+ * multi-part suffixes like `co.uk`, where it will treat two unrelated sites as
29
+ * siblings — the cost is an over-eager rewrite of a pattern, not a broken run.
30
+ */
31
+ export declare function isSameApplication(origin: string, appOrigin: string): boolean;
32
+ /** A copy of the repro with every app-owned origin removed from its patterns. */
33
+ export declare function retargetRepro(repro: Repro, envUrl: string): Repro;
34
+ interface StorageStateCookie {
35
+ domain: string;
36
+ [key: string]: unknown;
37
+ }
38
+ interface StorageStateOrigin {
39
+ origin: string;
40
+ [key: string]: unknown;
41
+ }
42
+ export interface StorageState {
43
+ cookies?: StorageStateCookie[];
44
+ origins?: StorageStateOrigin[];
45
+ }
46
+ /**
47
+ * Move a captured session onto the target origin.
48
+ *
49
+ * Cookies and localStorage are keyed by origin, so a state file restored as-is
50
+ * authenticates the environment it was recorded against and leaves the target
51
+ * signed out — which looks like a bug in the app rather than in the setup.
52
+ */
53
+ export declare function retargetStorageState(state: StorageState, from: string, to: string): StorageState;
54
+ export {};
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Point a repro recorded against one deployment at another.
3
+ *
4
+ * This is the promise the tool is named for: record where the bug lives —
5
+ * staging, production — and replay where the fix lives, on localhost. Doing it
6
+ * by hand meant rewriting every `goto` value, every absolute network pattern,
7
+ * and the `origin` key of the storage-state file, which is a lot of JSON
8
+ * surgery for what is conceptually one substitution.
9
+ *
10
+ * Three things carry an origin and all three must move together:
11
+ *
12
+ * - `goto` step values — already rebased at replay time
13
+ * - absolute network patterns — `https://staging.example.com/api/*` can
14
+ * never match a same-origin dev proxy
15
+ * - storage state — cookies and localStorage are origin-keyed,
16
+ * so a session restored under the old origin
17
+ * is a session the new one cannot see
18
+ */
19
+ /**
20
+ * Is this origin part of the same application?
21
+ *
22
+ * An app and its API usually sit on sibling hosts (`app.example.com` and
23
+ * `api.example.com`), and both must move. A CDN or an analytics endpoint must
24
+ * not: rewriting those would point third-party traffic at your dev server.
25
+ *
26
+ * Registrable domain is approximated by the last two labels. That is wrong for
27
+ * multi-part suffixes like `co.uk`, where it will treat two unrelated sites as
28
+ * siblings — the cost is an over-eager rewrite of a pattern, not a broken run.
29
+ */
30
+ export function isSameApplication(origin, appOrigin) {
31
+ try {
32
+ const a = new URL(origin);
33
+ const b = new URL(appOrigin);
34
+ if (a.hostname === b.hostname)
35
+ return true;
36
+ // Any localhost port is the same local app.
37
+ const local = (h) => h === 'localhost' || h === '127.0.0.1' || h === '::1';
38
+ if (local(a.hostname) && local(b.hostname))
39
+ return true;
40
+ const registrable = (h) => h.split('.').slice(-2).join('.');
41
+ return registrable(a.hostname) === registrable(b.hostname);
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ /**
48
+ * Rewrite absolute network patterns belonging to the app so they match at the
49
+ * target.
50
+ *
51
+ * They become path-only, which `matchesUrlPattern` compares against any
52
+ * same-origin request. That covers the usual local setup, where the API is
53
+ * proxied onto the app's own origin. A target that keeps the API on a separate
54
+ * host is not handled — say so rather than pretend.
55
+ */
56
+ function retargetPattern(pattern, appOrigin) {
57
+ if (!pattern.startsWith('http'))
58
+ return pattern;
59
+ try {
60
+ const u = new URL(pattern);
61
+ if (!isSameApplication(u.origin, appOrigin))
62
+ return pattern;
63
+ return `${u.pathname}${u.search}` || '/';
64
+ }
65
+ catch {
66
+ return pattern;
67
+ }
68
+ }
69
+ /** A copy of the repro with every app-owned origin removed from its patterns. */
70
+ export function retargetRepro(repro, envUrl) {
71
+ const appOrigin = repro.baseUrl;
72
+ const next = JSON.parse(JSON.stringify(repro));
73
+ for (const step of next.steps) {
74
+ if (step.waitAfter.network) {
75
+ for (const n of step.waitAfter.network) {
76
+ n.urlPattern = retargetPattern(n.urlPattern, appOrigin);
77
+ }
78
+ }
79
+ }
80
+ for (const n of next.assertion.finalState.network ?? []) {
81
+ n.urlPattern = retargetPattern(n.urlPattern, appOrigin);
82
+ }
83
+ for (const f of next.assertion.observedAtRecord?.failedRequests ?? []) {
84
+ f.urlPattern = retargetPattern(f.urlPattern, appOrigin);
85
+ }
86
+ next.baseUrl = envUrl;
87
+ return next;
88
+ }
89
+ /**
90
+ * Move a captured session onto the target origin.
91
+ *
92
+ * Cookies and localStorage are keyed by origin, so a state file restored as-is
93
+ * authenticates the environment it was recorded against and leaves the target
94
+ * signed out — which looks like a bug in the app rather than in the setup.
95
+ */
96
+ export function retargetStorageState(state, from, to) {
97
+ let target;
98
+ try {
99
+ target = new URL(to);
100
+ }
101
+ catch {
102
+ return state;
103
+ }
104
+ const cookies = (state.cookies ?? []).map((c) => {
105
+ if (!isSameApplication(`https://${c.domain.replace(/^\./, '')}`, from))
106
+ return c;
107
+ return { ...c, domain: target.hostname };
108
+ });
109
+ const origins = (state.origins ?? []).map((o) => {
110
+ if (!isSameApplication(o.origin, from))
111
+ return o;
112
+ return { ...o, origin: target.origin };
113
+ });
114
+ return { ...state, cookies, origins };
115
+ }
116
+ //# sourceMappingURL=retarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retarget.js","sourceRoot":"","sources":["../../src/replayer/retarget.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,8 @@ export interface RunFailure {
33
33
  export interface RunResult {
34
34
  name: string;
35
35
  passed: boolean;
36
+ /** The origin this run actually drove, after any override. */
37
+ baseUrl: string;
36
38
  durationMs: number;
37
39
  /** Total steps in the IR — `timings` only covers the ones that ran. */
38
40
  totalSteps: number;
@@ -100,5 +102,14 @@ export interface RunOptions {
100
102
  * hand-edit and share, and one that can execute commands is a liability.
101
103
  */
102
104
  setupCommand?: string | null;
105
+ /**
106
+ * Replay this repro against a different deployment of the same app.
107
+ *
108
+ * Stronger than `baseUrl`, which only redirects navigation. This also moves
109
+ * the app's own network patterns and the captured session onto the new
110
+ * origin, so a repro recorded on staging runs against localhost without any
111
+ * hand-editing — the record-here, replay-there path the tool exists for.
112
+ */
113
+ envUrl?: string | null;
103
114
  }
104
- export declare function runRepro(repro: Repro, options?: RunOptions): Promise<RunResult>;
115
+ export declare function runRepro(input: Repro, options?: RunOptions): Promise<RunResult>;
@@ -1,5 +1,5 @@
1
1
  import { exec } from 'node:child_process';
2
- import { existsSync } from 'node:fs';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
3
  import { mkdir } from 'node:fs/promises';
4
4
  import path from 'node:path';
5
5
  import { promisify } from 'node:util';
@@ -9,12 +9,15 @@ import { collectReactions } from '../recorder/reaction.js';
9
9
  import { writeFailureArtifacts } from './artifacts.js';
10
10
  import { checkBugRecurred, checkInvariants, hasBugSignature, hasFixCriterion, } from './invariants.js';
11
11
  import { DEFAULT_RESOLVE_TIMEOUTS, resolveTarget, TargetResolutionError, } from './resolve.js';
12
+ import { retargetRepro, retargetStorageState } from './retarget.js';
12
13
  import { createExpander } from './values.js';
13
14
  import { waitForReaction } from './waits.js';
14
15
  const execAsync = promisify(exec);
15
- export async function runRepro(repro, options = {}) {
16
+ export async function runRepro(input, options = {}) {
16
17
  const root = options.root ?? process.cwd();
17
- const baseUrl = options.baseUrl ?? repro.baseUrl;
18
+ const recordedBaseUrl = input.baseUrl;
19
+ const repro = options.envUrl ? retargetRepro(input, options.envUrl) : input;
20
+ const baseUrl = options.envUrl ?? options.baseUrl ?? repro.baseUrl;
18
21
  const paths = reproPaths(repro.name, root);
19
22
  const expectFixed = options.expectFixed ?? false;
20
23
  // One expander per run: a named placeholder resolves identically across every
@@ -25,10 +28,16 @@ export async function runRepro(repro, options = {}) {
25
28
  if (options.setupCommand) {
26
29
  await execAsync(options.setupCommand);
27
30
  }
31
+ const sessionPath = options.profileDir ? null : storageStatePath(repro, root);
28
32
  const opened = await openBrowser({
29
33
  headless: !options.headed,
30
34
  viewport: repro.viewport,
31
- storageStatePath: options.profileDir ? null : storageStatePath(repro, root),
35
+ storageStatePath: options.envUrl ? null : sessionPath,
36
+ // A session is origin-keyed, so restoring it unchanged would authenticate
37
+ // the environment it was recorded against and leave the target signed out.
38
+ storageState: options.envUrl && sessionPath
39
+ ? retargetStorageState(JSON.parse(readFileSync(sessionPath, 'utf8')), recordedBaseUrl, options.envUrl)
40
+ : null,
32
41
  profileDir: options.profileDir ?? null,
33
42
  // A persistent profile owns its own process, so it cannot share one.
34
43
  browser: options.profileDir ? null : (options.browser ?? null),
@@ -47,7 +56,7 @@ export async function runRepro(repro, options = {}) {
47
56
  continue;
48
57
  const previousStepStart = stepStart;
49
58
  stepStart = Date.now();
50
- const semantic = step.target?.semantic ?? describeTargetless(step);
59
+ const semantic = step.target?.semantic ?? describeTargetless(step, baseUrl);
51
60
  let candidateIndex = -1;
52
61
  try {
53
62
  candidateIndex = await performStep(page, step, baseUrl, options, expand);
@@ -63,6 +72,7 @@ export async function runRepro(repro, options = {}) {
63
72
  since: previousStepStart,
64
73
  expectFixed,
65
74
  notes,
75
+ baseUrl,
66
76
  }, {
67
77
  stepId: step.id,
68
78
  stepIndex: i,
@@ -101,6 +111,7 @@ export async function runRepro(repro, options = {}) {
101
111
  since: stepStart,
102
112
  expectFixed,
103
113
  notes,
114
+ baseUrl,
104
115
  }, {
105
116
  stepId: step.id,
106
117
  stepIndex: i,
@@ -144,7 +155,7 @@ export async function runRepro(repro, options = {}) {
144
155
  });
145
156
  if (outcome.ok) {
146
157
  const last = repro.steps[repro.steps.length - 1];
147
- return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes }, {
158
+ return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes, baseUrl }, {
148
159
  stepId: last?.id ?? 'assertion',
149
160
  stepIndex: repro.steps.length - 1,
150
161
  semantic: 'bug no longer reproduces',
@@ -157,7 +168,7 @@ export async function runRepro(repro, options = {}) {
157
168
  const finalOutcome = await waitForFinalState({ page, baseUrl, network: reactions.network, since: stepStart }, repro, expectFixed, expand);
158
169
  if (finalOutcome && !finalOutcome.ok) {
159
170
  const last = repro.steps[repro.steps.length - 1];
160
- return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes }, {
171
+ return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes, baseUrl }, {
161
172
  stepId: last?.id ?? 'assertion',
162
173
  stepIndex: repro.steps.length - 1,
163
174
  semantic: 'final state assertion',
@@ -181,7 +192,7 @@ export async function runRepro(repro, options = {}) {
181
192
  // so it now says so instead.
182
193
  if (!hasFixCriterion(repro) && !hasBugSignature(repro)) {
183
194
  const last = repro.steps[repro.steps.length - 1];
184
- return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes }, {
195
+ return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes, baseUrl }, {
185
196
  stepId: last?.id ?? 'assertion',
186
197
  stepIndex: repro.steps.length - 1,
187
198
  semantic: 'fix criterion',
@@ -205,7 +216,7 @@ export async function runRepro(repro, options = {}) {
205
216
  });
206
217
  if (!outcome.ok) {
207
218
  const last = repro.steps[repro.steps.length - 1];
208
- return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes }, {
219
+ return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes, baseUrl }, {
209
220
  stepId: last?.id ?? 'assertion',
210
221
  stepIndex: repro.steps.length - 1,
211
222
  semantic: 'fix criterion',
@@ -231,7 +242,7 @@ export async function runRepro(repro, options = {}) {
231
242
  }
232
243
  if (recurred.length) {
233
244
  const last = repro.steps[repro.steps.length - 1];
234
- return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes }, {
245
+ return await fail({ paths, page, repro, reactions, timings, startedAt, since: stepStart, expectFixed, notes, baseUrl }, {
235
246
  stepId: last?.id ?? 'assertion',
236
247
  stepIndex: repro.steps.length - 1,
237
248
  semantic: 'bug recurrence check',
@@ -253,6 +264,7 @@ export async function runRepro(repro, options = {}) {
253
264
  since: stepStart,
254
265
  expectFixed,
255
266
  notes,
267
+ baseUrl,
256
268
  }, {
257
269
  stepId: last?.id ?? 'assertion',
258
270
  stepIndex: repro.steps.length - 1,
@@ -283,6 +295,7 @@ export async function runRepro(repro, options = {}) {
283
295
  return {
284
296
  name: repro.name,
285
297
  passed: true,
298
+ baseUrl,
286
299
  durationMs: Date.now() - startedAt,
287
300
  totalSteps: repro.steps.length,
288
301
  expectFixed,
@@ -313,6 +326,7 @@ async function fail(ctx, failure, violations = []) {
313
326
  return {
314
327
  name: ctx.repro.name,
315
328
  passed: false,
329
+ baseUrl: ctx.baseUrl,
316
330
  durationMs: Date.now() - ctx.startedAt,
317
331
  totalSteps: ctx.repro.steps.length,
318
332
  expectFixed: ctx.expectFixed,
@@ -366,9 +380,13 @@ async function captureEndState(page, paths) {
366
380
  return null;
367
381
  }
368
382
  }
369
- function describeTargetless(step) {
383
+ function describeTargetless(step, baseUrl) {
384
+ // The URL actually navigated to, not the one recorded. Showing the recorded
385
+ // origin while silently replaying against an override told one user their
386
+ // run had gone to staging when it had gone to their local build — and the
387
+ // green they got looked like a verified fix of code that never ran.
370
388
  if (step.action === 'goto')
371
- return `navigate to ${step.value ?? '(unknown)'}`;
389
+ return `navigate to ${rebase(step.value, baseUrl)}`;
372
390
  if (step.action === 'scroll')
373
391
  return `scroll the page to ${step.value ?? '(unknown)'}`;
374
392
  if (step.action === 'press')
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/replayer/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/replayer/run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fast-replay",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Record a browser bug once, verify the fix in seconds. A deterministic eye for coding agents.",
5
5
  "type": "module",
6
6
  "license": "MIT",