devharness 0.9.5 → 0.9.7

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.
Files changed (104) hide show
  1. package/build/command-recorder-relocation.test.d.ts +2 -0
  2. package/build/command-recorder-relocation.test.d.ts.map +1 -0
  3. package/build/command-recorder-relocation.test.js +76 -0
  4. package/build/command-recorder-relocation.test.js.map +1 -0
  5. package/build/command-recorder.d.ts +23 -0
  6. package/build/command-recorder.d.ts.map +1 -1
  7. package/build/command-recorder.js +70 -9
  8. package/build/command-recorder.js.map +1 -1
  9. package/build/config.d.ts.map +1 -1
  10. package/build/config.js +5 -2
  11. package/build/config.js.map +1 -1
  12. package/build/github/issue-actions.js +5 -5
  13. package/build/github/issue-actions.js.map +1 -1
  14. package/build/helpers/paths-relocation.test.d.ts +2 -0
  15. package/build/helpers/paths-relocation.test.d.ts.map +1 -0
  16. package/build/helpers/paths-relocation.test.js +200 -0
  17. package/build/helpers/paths-relocation.test.js.map +1 -0
  18. package/build/helpers/paths.d.ts +35 -0
  19. package/build/helpers/paths.d.ts.map +1 -1
  20. package/build/helpers/paths.js +35 -0
  21. package/build/helpers/paths.js.map +1 -1
  22. package/build/index.js +3 -0
  23. package/build/index.js.map +1 -1
  24. package/build/issue-tracker-relocation.test.d.ts +2 -0
  25. package/build/issue-tracker-relocation.test.d.ts.map +1 -0
  26. package/build/issue-tracker-relocation.test.js +193 -0
  27. package/build/issue-tracker-relocation.test.js.map +1 -0
  28. package/build/issue-tracker.d.ts.map +1 -1
  29. package/build/issue-tracker.js +20 -4
  30. package/build/issue-tracker.js.map +1 -1
  31. package/build/mcp-supervisor.js +4 -3
  32. package/build/mcp-supervisor.js.map +1 -1
  33. package/build/self-restart.d.ts +5 -1
  34. package/build/self-restart.d.ts.map +1 -1
  35. package/build/self-restart.js +35 -5
  36. package/build/self-restart.js.map +1 -1
  37. package/build/self-restart.test.js +61 -17
  38. package/build/self-restart.test.js.map +1 -1
  39. package/build/server-manager-relocation.test.d.ts +2 -0
  40. package/build/server-manager-relocation.test.d.ts.map +1 -0
  41. package/build/server-manager-relocation.test.js +115 -0
  42. package/build/server-manager-relocation.test.js.map +1 -0
  43. package/build/server-manager-root-rebind.test.d.ts +2 -0
  44. package/build/server-manager-root-rebind.test.d.ts.map +1 -0
  45. package/build/server-manager-root-rebind.test.js +158 -0
  46. package/build/server-manager-root-rebind.test.js.map +1 -0
  47. package/build/server-manager.d.ts +19 -0
  48. package/build/server-manager.d.ts.map +1 -1
  49. package/build/server-manager.js +98 -4
  50. package/build/server-manager.js.map +1 -1
  51. package/build/supervisor/pidfile.d.ts +33 -6
  52. package/build/supervisor/pidfile.d.ts.map +1 -1
  53. package/build/supervisor/pidfile.js +76 -14
  54. package/build/supervisor/pidfile.js.map +1 -1
  55. package/build/supervisor/pidfile.test.js +37 -1
  56. package/build/supervisor/pidfile.test.js.map +1 -1
  57. package/build/tool-response.d.ts +8 -0
  58. package/build/tool-response.d.ts.map +1 -1
  59. package/build/tool-response.js.map +1 -1
  60. package/build/tools/assert-tools.d.ts +6 -6
  61. package/build/tools/breakpoint-tools.d.ts +3 -3
  62. package/build/tools/click-validation-console-noise.test.d.ts +2 -0
  63. package/build/tools/click-validation-console-noise.test.d.ts.map +1 -0
  64. package/build/tools/click-validation-console-noise.test.js +103 -0
  65. package/build/tools/click-validation-console-noise.test.js.map +1 -0
  66. package/build/tools/config-tools.d.ts.map +1 -1
  67. package/build/tools/config-tools.js +5 -0
  68. package/build/tools/config-tools.js.map +1 -1
  69. package/build/tools/console-tools.d.ts +6 -6
  70. package/build/tools/console-tools.d.ts.map +1 -1
  71. package/build/tools/console-tools.js +1 -0
  72. package/build/tools/console-tools.js.map +1 -1
  73. package/build/tools/execution-tools.d.ts +3 -3
  74. package/build/tools/input-tools.d.ts +3 -3
  75. package/build/tools/inspection-tools.d.ts +15 -15
  76. package/build/tools/interpolation-reverse.d.ts +26 -0
  77. package/build/tools/interpolation-reverse.d.ts.map +1 -0
  78. package/build/tools/interpolation-reverse.js +130 -0
  79. package/build/tools/interpolation-reverse.js.map +1 -0
  80. package/build/tools/interpolation-reverse.test.d.ts +2 -0
  81. package/build/tools/interpolation-reverse.test.d.ts.map +1 -0
  82. package/build/tools/interpolation-reverse.test.js +76 -0
  83. package/build/tools/interpolation-reverse.test.js.map +1 -0
  84. package/build/tools/network-tools.d.ts +9 -9
  85. package/build/tools/replay-create-templatize.test.d.ts +2 -0
  86. package/build/tools/replay-create-templatize.test.d.ts.map +1 -0
  87. package/build/tools/replay-create-templatize.test.js +103 -0
  88. package/build/tools/replay-create-templatize.test.js.map +1 -0
  89. package/build/tools/replay-executor.d.ts +4 -0
  90. package/build/tools/replay-executor.d.ts.map +1 -1
  91. package/build/tools/replay-executor.js +39 -10
  92. package/build/tools/replay-executor.js.map +1 -1
  93. package/build/tools/replay-tools.d.ts +18 -18
  94. package/build/tools/replay-tools.d.ts.map +1 -1
  95. package/build/tools/replay-tools.js +6 -5
  96. package/build/tools/replay-tools.js.map +1 -1
  97. package/build/tools/request-tools.d.ts +1 -1
  98. package/build/tools/storage-tools.d.ts +6 -6
  99. package/build/utils/modal-detection-core.test.js +21 -17
  100. package/build/utils/modal-detection-core.test.js.map +1 -1
  101. package/docs/messages.md +199 -1
  102. package/package.json +1 -1
  103. package/plugin/skills/devharness/SKILL.md +1 -1
  104. package/plugin/skills/devharness/references/sequences.md +6 -1
@@ -0,0 +1,130 @@
1
+ /**
2
+ * The inverse of interpolation.ts: given values a `saveAs` step already
3
+ * captured earlier in the same history, find literal values in a later
4
+ * step's params that came from those captures and rewrite them back to
5
+ * `{{var:name.path}}` tokens - what a person hand-templatizing a recorded
6
+ * sequence does today (see references/sequences.md).
7
+ *
8
+ * Two match shapes, both driven by exact string/number equality (never
9
+ * fuzzy): a param leaf whose ENTIRE value equals a captured value anywhere
10
+ * in its tree, and a captured value appearing as a SUBSTRING inside a larger
11
+ * string leaf (e.g. an id embedded in a CSS selector). The substring case is
12
+ * pattern-matching inside arbitrary text, so it additionally guards against
13
+ * common short values (small numbers, HTTP-status-shaped numbers, booleans)
14
+ * that would otherwise false-positive against unrelated params.
15
+ */
16
+ const MAX_DEPTH = 6;
17
+ /** Whole-value match: any string/number, however short - it's an exact
18
+ * equality on the ENTIRE leaf, not a substring, so the false-positive risk
19
+ * a length floor exists to prevent doesn't apply here. */
20
+ const MIN_WHOLE_STRING_LEN = 1;
21
+ /** Substring match: a captured value gets pattern-matched against arbitrary
22
+ * text, so short/common values need a floor - "2" appearing inside a
23
+ * string is not evidence it came from a capture. */
24
+ const MIN_EMBED_LEN = 4;
25
+ /** Numbers common enough by coincidence (HTTP statuses, small counters,
26
+ * booleans-as-0/1) that matching them proves nothing about provenance. */
27
+ const COMMON_NUMBER_BLOCKLIST = new Set([
28
+ 0, 1, 2, 3, 4, 5, 10, 100,
29
+ 200, 201, 202, 204, 301, 302, 304, 400, 401, 403, 404, 405, 409, 422, 429, 500, 502, 503, 504,
30
+ ]);
31
+ function isSubstitutableNumber(n) {
32
+ return Number.isFinite(n) && !COMMON_NUMBER_BLOCKLIST.has(n);
33
+ }
34
+ /** DFS for a path to a leaf inside `tree` that strictly equals `target`. */
35
+ function findPath(tree, target, path = [], depth = 0) {
36
+ if (tree === target)
37
+ return path;
38
+ if (depth >= MAX_DEPTH || tree === null || typeof tree !== 'object')
39
+ return null;
40
+ for (const key of Object.keys(tree)) {
41
+ const found = findPath(tree[key], target, [...path, key], depth + 1);
42
+ if (found)
43
+ return found;
44
+ }
45
+ return null;
46
+ }
47
+ function pathToVarToken(name, path) {
48
+ let out = name;
49
+ for (const seg of path) {
50
+ out += /^[^.[\]]+$/.test(seg) ? `.${seg}` : `['${seg}']`;
51
+ }
52
+ return `{{var:${out}}}`;
53
+ }
54
+ /** Try a whole-leaf match (the entire param value equals a captured value). */
55
+ function matchWhole(value, captures) {
56
+ if (typeof value === 'string' && value.length < MIN_WHOLE_STRING_LEN)
57
+ return null;
58
+ if (typeof value === 'number' && !isSubstitutableNumber(value))
59
+ return null;
60
+ for (const capture of captures) {
61
+ const path = findPath(capture.value, value);
62
+ if (path)
63
+ return pathToVarToken(capture.name, path);
64
+ }
65
+ return null;
66
+ }
67
+ function collectLeaves(tree, path = [], depth = 0, out = []) {
68
+ if (depth >= MAX_DEPTH || tree === null || tree === undefined)
69
+ return out;
70
+ if (typeof tree === 'string') {
71
+ if (tree.length >= MIN_EMBED_LEN)
72
+ out.push({ path, str: tree });
73
+ }
74
+ else if (typeof tree === 'number') {
75
+ if (isSubstitutableNumber(tree) && String(tree).length >= MIN_EMBED_LEN)
76
+ out.push({ path, str: String(tree) });
77
+ }
78
+ else if (typeof tree === 'object') {
79
+ for (const key of Object.keys(tree)) {
80
+ collectLeaves(tree[key], [...path, key], depth + 1, out);
81
+ }
82
+ }
83
+ return out;
84
+ }
85
+ /** Replace every occurrence of a capture's leaf values inside `str`, longest
86
+ * match first so a longer id doesn't get partially clobbered by a shorter
87
+ * one nested inside it. */
88
+ function substituteEmbedded(str, capture) {
89
+ const leaves = collectLeaves(capture.value).sort((a, b) => b.str.length - a.str.length);
90
+ let result = str;
91
+ for (const leaf of leaves) {
92
+ if (result.includes(leaf.str)) {
93
+ result = result.split(leaf.str).join(pathToVarToken(capture.name, leaf.path));
94
+ }
95
+ }
96
+ return result;
97
+ }
98
+ function walk(value, captures) {
99
+ if (Array.isArray(value))
100
+ return value.map(item => walk(item, captures));
101
+ if (value !== null && typeof value === 'object') {
102
+ const out = {};
103
+ for (const key of Object.keys(value))
104
+ out[key] = walk(value[key], captures);
105
+ return out;
106
+ }
107
+ if (typeof value === 'string' || typeof value === 'number') {
108
+ const whole = matchWhole(value, captures);
109
+ if (whole)
110
+ return whole;
111
+ if (typeof value === 'string') {
112
+ let result = value;
113
+ for (const capture of captures)
114
+ result = substituteEmbedded(result, capture);
115
+ return result;
116
+ }
117
+ }
118
+ return value;
119
+ }
120
+ /**
121
+ * Rewrite literal values in `params` that match an earlier `saveAs` capture
122
+ * back into `{{var:name.path}}` references. `captures` must only contain
123
+ * steps that precede this one in the sequence being built.
124
+ */
125
+ export function substituteCapturedValues(params, captures) {
126
+ if (captures.length === 0)
127
+ return params;
128
+ return walk(params, captures);
129
+ }
130
+ //# sourceMappingURL=interpolation-reverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolation-reverse.js","sourceRoot":"","sources":["../../src/tools/interpolation-reverse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interpolation-reverse.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolation-reverse.test.d.ts","sourceRoot":"","sources":["../../src/tools/interpolation-reverse.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { substituteCapturedValues } from './interpolation-reverse.js';
3
+ import { interpolateParams } from './interpolation.js';
4
+ describe('substituteCapturedValues', () => {
5
+ it('rewrites a whole-value literal that matches a captured value', () => {
6
+ const captures = [
7
+ { name: 'mint', value: { ok: true, status: 200, body: { url: 'https://app.test/mint/abc123def' } } },
8
+ ];
9
+ const params = { action: 'goto', url: 'https://app.test/mint/abc123def' };
10
+ expect(substituteCapturedValues(params, captures)).toEqual({
11
+ action: 'goto',
12
+ url: '{{var:mint.body.url}}',
13
+ });
14
+ });
15
+ it('rewrites a literal embedded inside a larger string (e.g. a CSS selector)', () => {
16
+ const captures = [{ name: 'personId', value: 48213 }];
17
+ const params = { selector: '[data-row-key="48213"]' };
18
+ expect(substituteCapturedValues(params, captures)).toEqual({
19
+ selector: '[data-row-key="{{var:personId}}"]',
20
+ });
21
+ });
22
+ it('emits a bare {{var:name}} token when the capture itself is the leaf (no nesting)', () => {
23
+ const captures = [{ name: 'personId', value: 48213 }];
24
+ const params = { id: 48213 };
25
+ expect(substituteCapturedValues(params, captures)).toEqual({ id: '{{var:personId}}' });
26
+ });
27
+ it('does not substitute a small/common number even if it exactly matches a capture', () => {
28
+ const captures = [{ name: 'mint', value: { status: 200 } }];
29
+ const params = { retryStatus: 200 };
30
+ expect(substituteCapturedValues(params, captures)).toEqual({ retryStatus: 200 });
31
+ });
32
+ it('does not substitute booleans', () => {
33
+ const captures = [{ name: 'mint', value: { ok: true } }];
34
+ const params = { enabled: true };
35
+ expect(substituteCapturedValues(params, captures)).toEqual({ enabled: true });
36
+ });
37
+ it('does not substitute a short embedded value below the length floor', () => {
38
+ const captures = [{ name: 'code', value: 'ab' }];
39
+ const params = { path: '/x/ab/y' };
40
+ expect(substituteCapturedValues(params, captures)).toEqual({ path: '/x/ab/y' });
41
+ });
42
+ it('leaves unrelated literals untouched', () => {
43
+ const captures = [{ name: 'mint', value: { body: { url: 'https://app.test/mint/abc123def' } } }];
44
+ const params = { action: 'goto', url: 'https://app.test/other-page' };
45
+ expect(substituteCapturedValues(params, captures)).toEqual(params);
46
+ });
47
+ it('walks arrays and nested objects', () => {
48
+ const captures = [{ name: 'personId', value: 48213 }];
49
+ const params = { rows: [{ id: 48213 }, { id: 999999 }] };
50
+ expect(substituteCapturedValues(params, captures)).toEqual({
51
+ rows: [{ id: '{{var:personId}}' }, { id: 999999 }],
52
+ });
53
+ });
54
+ it('prefers the earliest capture on a value collision', () => {
55
+ const captures = [
56
+ { name: 'first', value: 'shared-value-123' },
57
+ { name: 'second', value: 'shared-value-123' },
58
+ ];
59
+ const params = { x: 'shared-value-123' };
60
+ expect(substituteCapturedValues(params, captures)).toEqual({ x: '{{var:first}}' });
61
+ });
62
+ it('is a no-op with no captures', () => {
63
+ const params = { url: 'https://app.test/mint/abc123def' };
64
+ expect(substituteCapturedValues(params, [])).toBe(params);
65
+ });
66
+ it('produces tokens that interpolateParams resolves back to the original value', () => {
67
+ const captures = [
68
+ { name: 'mint', value: { ok: true, status: 200, body: { url: 'https://app.test/mint/abc123def' } } },
69
+ ];
70
+ const params = { url: 'https://app.test/mint/abc123def' };
71
+ const substituted = substituteCapturedValues(params, captures);
72
+ const store = { mint: captures[0].value };
73
+ expect(interpolateParams(substituted, store, 0).url).toBe('https://app.test/mint/abc123def');
74
+ });
75
+ });
76
+ //# sourceMappingURL=interpolation-reverse.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolation-reverse.test.js","sourceRoot":"","sources":["../../src/tools/interpolation-reverse.test.ts"],"names":[],"mappings":"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"}
@@ -25,26 +25,26 @@ export declare function createNetworkTools(puppeteerManager: PuppeteerManager, n
25
25
  id?: string | undefined;
26
26
  resourceType?: string | undefined;
27
27
  connectionReason?: string | undefined;
28
- pattern?: string | undefined;
29
28
  limit?: number | undefined;
29
+ method?: string | undefined;
30
+ statusCode?: string | undefined;
31
+ pattern?: string | undefined;
30
32
  offset?: number | undefined;
31
33
  flags?: string | undefined;
32
34
  includeBody?: boolean | undefined;
33
- method?: string | undefined;
34
- statusCode?: string | undefined;
35
35
  preset?: "offline" | "slow-3g" | "fast-3g" | "fast-4g" | "online" | undefined;
36
36
  }, {
37
37
  action: "search" | "list" | "get" | "enable" | "disable" | "setConditions" | "sockets";
38
38
  id?: string | undefined;
39
39
  resourceType?: string | undefined;
40
40
  connectionReason?: string | undefined;
41
- pattern?: string | undefined;
42
41
  limit?: number | undefined;
42
+ method?: string | undefined;
43
+ statusCode?: string | undefined;
44
+ pattern?: string | undefined;
43
45
  offset?: number | undefined;
44
46
  flags?: string | undefined;
45
47
  includeBody?: boolean | undefined;
46
- method?: string | undefined;
47
- statusCode?: string | undefined;
48
48
  preset?: "offline" | "slow-3g" | "fast-3g" | "fast-4g" | "online" | undefined;
49
49
  }>;
50
50
  inputSchema: import("zod-to-json-schema").JsonSchema7Type & {
@@ -58,13 +58,13 @@ export declare function createNetworkTools(puppeteerManager: PuppeteerManager, n
58
58
  id?: string | undefined;
59
59
  resourceType?: string | undefined;
60
60
  connectionReason?: string | undefined;
61
- pattern?: string | undefined;
62
61
  limit?: number | undefined;
62
+ method?: string | undefined;
63
+ statusCode?: string | undefined;
64
+ pattern?: string | undefined;
63
65
  offset?: number | undefined;
64
66
  flags?: string | undefined;
65
67
  includeBody?: boolean | undefined;
66
- method?: string | undefined;
67
- statusCode?: string | undefined;
68
68
  preset?: "offline" | "slow-3g" | "fast-3g" | "fast-4g" | "online" | undefined;
69
69
  }, abortSignal?: AbortSignal) => Promise<any>;
70
70
  };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=replay-create-templatize.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-create-templatize.test.d.ts","sourceRoot":"","sources":["../../src/tools/replay-create-templatize.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * feature-029: `create`/`insert` must rewrite a step's literal value back to
3
+ * `{{var:name.path}}` when it matches an earlier included step's `saveAs`
4
+ * capture, so a sequence built from a live/hands-on session is portable
5
+ * (see references/sequences.md) instead of pinned to that session's data.
6
+ */
7
+ import { describe, it, expect, vi } from 'vitest';
8
+ import { CommandRecorder } from '../command-recorder.js';
9
+ import { createReplayTools } from './replay-tools.js';
10
+ const KNOWN_TOOLS = ['navigate', 'inspect', 'input', 'request', 'launchChrome'];
11
+ const text = (res) => res.content[0].text;
12
+ const requestResult = (body) => ({
13
+ content: [{ type: 'text', text: 'ok' }],
14
+ _meta: { request: { ok: true, status: 200, body } },
15
+ });
16
+ const evalResult = (value) => ({
17
+ content: [{ type: 'text', text: 'evaluated' }],
18
+ _meta: { tool: 'inspect', action: 'evaluateExpression', timestamp: 1, inspect: { expression: 'x', value, valueType: typeof value } },
19
+ });
20
+ async function makeRecorderWithReplay() {
21
+ const recorder = new CommandRecorder();
22
+ const { replay } = createReplayTools(recorder, vi.fn(), undefined, undefined, () => KNOWN_TOOLS);
23
+ return { recorder, replay };
24
+ }
25
+ describe('replay create - templatizes literals against earlier saveAs captures', () => {
26
+ it('rewrites a whole-value literal (a minted URL) to {{var:name.path}}', async () => {
27
+ const { recorder, replay } = await makeRecorderWithReplay();
28
+ await recorder.recordCommand('request', { url: 'https://app.test/api/links', method: 'POST', saveAs: 'mint' }, { result: requestResult({ url: 'https://app.test/l/abc123def' }) });
29
+ await recorder.recordCommand('navigate', { action: 'goto', url: 'https://app.test/l/abc123def' });
30
+ const res = await replay.handler({ action: 'create', name: 'mint-and-visit', indices: [0, 1] });
31
+ expect(res.isError).toBeUndefined();
32
+ const created = recorder.listSequences()[0];
33
+ expect(created.commands[1].params.url).toBe('{{var:mint.body.url}}');
34
+ // the capturing step itself is untouched
35
+ expect(created.commands[0].params.saveAs).toBe('mint');
36
+ });
37
+ it('rewrites a literal embedded inside a larger string (a CSS selector)', async () => {
38
+ const { recorder, replay } = await makeRecorderWithReplay();
39
+ await recorder.recordCommand('inspect', { action: 'evaluateExpression', expression: 'rows[0].id', saveAs: 'personId' }, { result: evalResult(48213) });
40
+ await recorder.recordCommand('input', { action: 'click', selector: '[data-row-key="48213"]' });
41
+ const res = await replay.handler({ action: 'create', name: 'click-row', indices: [0, 1] });
42
+ expect(res.isError).toBeUndefined();
43
+ const created = recorder.listSequences()[0];
44
+ expect(created.commands[1].params.selector).toBe('[data-row-key="{{var:personId}}"]');
45
+ });
46
+ it('does not rewrite a literal that only happens to match a common/short number', async () => {
47
+ const { recorder, replay } = await makeRecorderWithReplay();
48
+ await recorder.recordCommand('request', { url: 'https://app.test/api/status', saveAs: 'check' }, { result: requestResult({ code: 200 }) });
49
+ await recorder.recordCommand('request', { url: 'https://app.test/api/other', expectedStatus: 200 });
50
+ const res = await replay.handler({ action: 'create', name: 'status-check', indices: [0, 1] });
51
+ expect(res.isError).toBeUndefined();
52
+ const created = recorder.listSequences()[0];
53
+ expect(created.commands[1].params.expectedStatus).toBe(200);
54
+ });
55
+ it('does not templatize against a saveAs that has no recorded result', async () => {
56
+ const { recorder, replay } = await makeRecorderWithReplay();
57
+ // saveAs present, but no result was ever attached (e.g. handler never ran)
58
+ await recorder.recordCommand('request', { url: 'https://app.test/api/links', saveAs: 'mint' });
59
+ await recorder.recordCommand('navigate', { action: 'goto', url: 'https://app.test/l/abc123def' });
60
+ const res = await replay.handler({ action: 'create', name: 'mint-and-visit', indices: [0, 1] });
61
+ expect(res.isError).toBeUndefined();
62
+ const created = recorder.listSequences()[0];
63
+ expect(created.commands[1].params.url).toBe('https://app.test/l/abc123def');
64
+ });
65
+ it('only substitutes against captures from included, earlier steps (not later or excluded ones)', async () => {
66
+ const { recorder, replay } = await makeRecorderWithReplay();
67
+ await recorder.recordCommand('navigate', { action: 'goto', url: 'https://app.test/l/abc123def' });
68
+ await recorder.recordCommand('request', { url: 'https://app.test/api/links', saveAs: 'mint' }, { result: requestResult({ url: 'https://app.test/l/abc123def' }) });
69
+ // step 0 (the literal) comes before step 1 (the capture) - nothing to substitute against yet
70
+ const res = await replay.handler({ action: 'create', name: 'visit-then-mint', indices: [0, 1] });
71
+ expect(res.isError).toBeUndefined();
72
+ const created = recorder.listSequences()[0];
73
+ expect(created.commands[0].params.url).toBe('https://app.test/l/abc123def');
74
+ });
75
+ });
76
+ describe('replay insert - shares create\'s templatization (buildCommandsFromHistory)', () => {
77
+ // handleInsert builds its inserted steps via recorder.buildCommandsFromHistory
78
+ // (replay-tools.ts), the exact method createSequence uses above - exercised
79
+ // directly here since driving a real pause/insert cycle needs a live
80
+ // background run. Wiring is a 3-line delegation, verified by inspection.
81
+ it('rewrites a literal against an earlier saveAs capture within the given indices', async () => {
82
+ const recorder = new CommandRecorder();
83
+ await recorder.recordCommand('request', { url: 'https://app.test/api/links', saveAs: 'mint' }, { result: requestResult({ url: 'https://app.test/l/abc123def' }) });
84
+ await recorder.recordCommand('navigate', { action: 'goto', url: 'https://app.test/l/abc123def' });
85
+ const commands = recorder.buildCommandsFromHistory([0, 1]);
86
+ expect(commands).not.toBeNull();
87
+ expect(commands[1].params.url).toBe('{{var:mint.body.url}}');
88
+ // delay/comment are preserved too (insert's old inline map dropped them)
89
+ });
90
+ it('preserves delay and comment, which the old inline map in handleInsert dropped', async () => {
91
+ const recorder = new CommandRecorder();
92
+ await recorder.recordCommand('navigate', { action: 'goto', url: 'https://app.test/' }, { delay: 500, comment: 'wait for load' });
93
+ const commands = recorder.buildCommandsFromHistory([0]);
94
+ expect(commands[0].delay).toBe(500);
95
+ expect(commands[0].comment).toBe('wait for load');
96
+ });
97
+ it('returns null for a nonexistent index', async () => {
98
+ const recorder = new CommandRecorder();
99
+ await recorder.recordCommand('navigate', { action: 'goto', url: 'https://app.test/' });
100
+ expect(recorder.buildCommandsFromHistory([0, 99])).toBeNull();
101
+ });
102
+ });
103
+ //# sourceMappingURL=replay-create-templatize.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-create-templatize.test.js","sourceRoot":"","sources":["../../src/tools/replay-create-templatize.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAEhF,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAc,CAAC;AAEzD,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC9C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,KAAK,EAAE,EAAE;CACrI,CAAC,CAAC;AAEH,KAAK,UAAU,sBAAsB;IACnC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;IACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,QAAQ,CAAC,sEAAsE,EAAE,GAAG,EAAE;IACpF,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAE5D,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,EAAE,GAAG,EAAE,4BAA4B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EACrE,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,EAAE,8BAA8B,EAAE,CAAC,EAAE,CACnE,CAAC;QACF,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAElG,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAS,CAAC,CAAC;QACvG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrE,yCAAyC;QACzC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAE5D,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,EAAE,MAAM,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,EAC9E,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAC9B,CAAC;QACF,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAE/F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAS,CAAC,CAAC;QAClG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAE5D,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,EAAE,GAAG,EAAE,6BAA6B,EAAE,MAAM,EAAE,OAAO,EAAE,EACvD,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CACzC,CAAC;QACF,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QAEpG,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAS,CAAC,CAAC;QACrG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAE5D,2EAA2E;QAC3E,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/F,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAElG,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAS,CAAC,CAAC;QACvG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAE5D,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAClG,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,EAAE,GAAG,EAAE,4BAA4B,EAAE,MAAM,EAAE,MAAM,EAAE,EACrD,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,EAAE,8BAA8B,EAAE,CAAC,EAAE,CACnE,CAAC;QAEF,6FAA6F;QAC7F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAS,CAAC,CAAC;QACxG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4EAA4E,EAAE,GAAG,EAAE;IAC1F,+EAA+E;IAC/E,4EAA4E;IAC5E,qEAAqE;IACrE,yEAAyE;IACzE,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QAEvC,MAAM,QAAQ,CAAC,aAAa,CAC1B,SAAS,EACT,EAAE,GAAG,EAAE,4BAA4B,EAAE,MAAM,EAAE,MAAM,EAAE,EACrD,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,GAAG,EAAE,8BAA8B,EAAE,CAAC,EAAE,CACnE,CAAC;QACF,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAElG,MAAM,QAAQ,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC9D,yEAAyE;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAEjI,MAAM,QAAQ,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAEvF,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -489,6 +489,10 @@ export interface PreClickState {
489
489
  consoleTotalCount: number;
490
490
  networkRequestCount: number;
491
491
  url: string;
492
+ /** ids of the most-recent console errors seen before the click (bounded by
493
+ * CLICK_VALIDATION_ERROR_SAMPLE), to identify which post-click errors are
494
+ * actually new rather than just diffing a count. */
495
+ errorIdsBeforeClick: Set<string>;
492
496
  }
493
497
  export interface ClickValidationResult {
494
498
  valid: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"replay-executor.d.ts","sourceRoot":"","sources":["../../src/tools/replay-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay-executor.d.ts","sourceRoot":"","sources":["../../src/tools/replay-executor.ts"],"names":[],"mappings":"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"}
@@ -1420,6 +1420,22 @@ export async function validateTypedText(ctx, selector, expectedText, append = fa
1420
1420
  debugLog(logPrefix, `Warning: Could not validate typed text: ${error}`);
1421
1421
  }
1422
1422
  }
1423
+ /** How many of the most recent console errors to sample around a click - enough
1424
+ * to identify every genuinely new one in the common case, without pulling the
1425
+ * whole console history for a check that runs after every click. */
1426
+ const CLICK_VALIDATION_ERROR_SAMPLE = 10;
1427
+ /** Browser-initiated noise a click didn't cause and can't prevent - a missing
1428
+ * favicon 404s on nearly every page load, unrelated to what was clicked. */
1429
+ function isNoiseConsoleUrl(url) {
1430
+ if (!url)
1431
+ return false;
1432
+ try {
1433
+ return /\/favicon\.ico$/i.test(new URL(url).pathname);
1434
+ }
1435
+ catch {
1436
+ return false;
1437
+ }
1438
+ }
1423
1439
  /**
1424
1440
  * Capture pre-click state for delta comparison
1425
1441
  */
@@ -1430,14 +1446,17 @@ export async function capturePreClickState(ctx) {
1430
1446
  let consoleTotalCount = 0;
1431
1447
  let networkRequestCount = 0;
1432
1448
  let url = '';
1449
+ let errorIdsBeforeClick = new Set();
1433
1450
  try {
1434
- // Get console counts via _meta
1451
+ // Get console counts via _meta, plus the most recent errors' ids so a
1452
+ // post-click diff can tell which ones are actually new.
1435
1453
  const consoleResult = await executeToolCall('console', {
1436
- action: 'list', limit: 1, connectionReason
1454
+ action: 'recent', type: 'error', count: CLICK_VALIDATION_ERROR_SAMPLE, connectionReason
1437
1455
  });
1438
1456
  consoleErrorCount = consoleResult?._meta?.console?.errorCount || 0;
1439
1457
  consoleWarnCount = consoleResult?._meta?.console?.warnCount || 0;
1440
1458
  consoleTotalCount = consoleResult?._meta?.console?.totalCount || 0;
1459
+ errorIdsBeforeClick = new Set((consoleResult?._meta?.console?.entries || []).map((e) => e.id));
1441
1460
  }
1442
1461
  catch {
1443
1462
  debugLog(logPrefix, 'Warning: Could not get pre-click console state');
@@ -1462,7 +1481,7 @@ export async function capturePreClickState(ctx) {
1462
1481
  catch {
1463
1482
  debugLog(logPrefix, 'Warning: Could not get pre-click URL');
1464
1483
  }
1465
- return { consoleErrorCount, consoleWarnCount, consoleTotalCount, networkRequestCount, url };
1484
+ return { consoleErrorCount, consoleWarnCount, consoleTotalCount, networkRequestCount, url, errorIdsBeforeClick };
1466
1485
  }
1467
1486
  /**
1468
1487
  * Validate click action results
@@ -1500,20 +1519,29 @@ export async function validateClickAction(ctx, preState, clickResult, config) {
1500
1519
  // 3. Check for new console messages
1501
1520
  try {
1502
1521
  const consoleResult = await executeToolCall('console', {
1503
- action: 'list', limit: 1, connectionReason
1522
+ action: 'recent', type: 'error', count: CLICK_VALIDATION_ERROR_SAMPLE, connectionReason
1504
1523
  });
1505
1524
  const newErrorCount = consoleResult?._meta?.console?.errorCount || 0;
1506
1525
  const newWarnCount = consoleResult?._meta?.console?.warnCount || 0;
1507
1526
  const newTotalCount = consoleResult?._meta?.console?.totalCount || 0;
1508
- // Report new errors (respecting failOnConsoleErrors config)
1527
+ // Report new errors (respecting failOnConsoleErrors config), excluding ones
1528
+ // identifiable as browser noise unrelated to the click (e.g. a favicon 404).
1509
1529
  if (config.failOnConsoleErrors && newErrorCount > preState.consoleErrorCount) {
1510
1530
  const diff = newErrorCount - preState.consoleErrorCount;
1511
- const msg = `${diff} new console error(s) after click`;
1512
- if (config.consoleErrorsFailMode === 'error') {
1513
- errors.push(msg);
1531
+ const newEntries = consoleResult?._meta?.console?.entries || [];
1532
+ const genuinelyNew = newEntries.filter(e => !preState.errorIdsBeforeClick.has(e.id));
1533
+ const actionable = genuinelyNew.filter(e => !isNoiseConsoleUrl(e.url));
1534
+ if (genuinelyNew.length === 0 || actionable.length > 0) {
1535
+ const msg = `${diff} new console error(s) after click`;
1536
+ if (config.consoleErrorsFailMode === 'error') {
1537
+ errors.push(msg);
1538
+ }
1539
+ else {
1540
+ warnings.push(msg);
1541
+ }
1514
1542
  }
1515
1543
  else {
1516
- warnings.push(msg);
1544
+ info.push(`${diff} new console error(s) after click, all identified as unrelated browser noise (e.g. favicon) - ignored`);
1517
1545
  }
1518
1546
  }
1519
1547
  // Report new warnings as info
@@ -2122,7 +2150,8 @@ export async function executeSteps(options) {
2122
2150
  if (record) {
2123
2151
  commandRecorder.recordCommand(cmd.tool, params, {
2124
2152
  delay: cmd.delay,
2125
- comment: cmd.comment
2153
+ comment: cmd.comment,
2154
+ result: execResult.result
2126
2155
  });
2127
2156
  }
2128
2157
  results.push({ step: i + 1, tool: cmd.tool, success: true });