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.
- package/build/command-recorder-relocation.test.d.ts +2 -0
- package/build/command-recorder-relocation.test.d.ts.map +1 -0
- package/build/command-recorder-relocation.test.js +76 -0
- package/build/command-recorder-relocation.test.js.map +1 -0
- package/build/command-recorder.d.ts +23 -0
- package/build/command-recorder.d.ts.map +1 -1
- package/build/command-recorder.js +70 -9
- package/build/command-recorder.js.map +1 -1
- package/build/config.d.ts.map +1 -1
- package/build/config.js +5 -2
- package/build/config.js.map +1 -1
- package/build/github/issue-actions.js +5 -5
- package/build/github/issue-actions.js.map +1 -1
- package/build/helpers/paths-relocation.test.d.ts +2 -0
- package/build/helpers/paths-relocation.test.d.ts.map +1 -0
- package/build/helpers/paths-relocation.test.js +200 -0
- package/build/helpers/paths-relocation.test.js.map +1 -0
- package/build/helpers/paths.d.ts +35 -0
- package/build/helpers/paths.d.ts.map +1 -1
- package/build/helpers/paths.js +35 -0
- package/build/helpers/paths.js.map +1 -1
- package/build/index.js +3 -0
- package/build/index.js.map +1 -1
- package/build/issue-tracker-relocation.test.d.ts +2 -0
- package/build/issue-tracker-relocation.test.d.ts.map +1 -0
- package/build/issue-tracker-relocation.test.js +193 -0
- package/build/issue-tracker-relocation.test.js.map +1 -0
- package/build/issue-tracker.d.ts.map +1 -1
- package/build/issue-tracker.js +20 -4
- package/build/issue-tracker.js.map +1 -1
- package/build/mcp-supervisor.js +4 -3
- package/build/mcp-supervisor.js.map +1 -1
- package/build/self-restart.d.ts +5 -1
- package/build/self-restart.d.ts.map +1 -1
- package/build/self-restart.js +35 -5
- package/build/self-restart.js.map +1 -1
- package/build/self-restart.test.js +61 -17
- package/build/self-restart.test.js.map +1 -1
- package/build/server-manager-relocation.test.d.ts +2 -0
- package/build/server-manager-relocation.test.d.ts.map +1 -0
- package/build/server-manager-relocation.test.js +115 -0
- package/build/server-manager-relocation.test.js.map +1 -0
- package/build/server-manager-root-rebind.test.d.ts +2 -0
- package/build/server-manager-root-rebind.test.d.ts.map +1 -0
- package/build/server-manager-root-rebind.test.js +158 -0
- package/build/server-manager-root-rebind.test.js.map +1 -0
- package/build/server-manager.d.ts +19 -0
- package/build/server-manager.d.ts.map +1 -1
- package/build/server-manager.js +98 -4
- package/build/server-manager.js.map +1 -1
- package/build/supervisor/pidfile.d.ts +33 -6
- package/build/supervisor/pidfile.d.ts.map +1 -1
- package/build/supervisor/pidfile.js +76 -14
- package/build/supervisor/pidfile.js.map +1 -1
- package/build/supervisor/pidfile.test.js +37 -1
- package/build/supervisor/pidfile.test.js.map +1 -1
- package/build/tool-response.d.ts +8 -0
- package/build/tool-response.d.ts.map +1 -1
- package/build/tool-response.js.map +1 -1
- package/build/tools/assert-tools.d.ts +6 -6
- package/build/tools/breakpoint-tools.d.ts +3 -3
- package/build/tools/click-validation-console-noise.test.d.ts +2 -0
- package/build/tools/click-validation-console-noise.test.d.ts.map +1 -0
- package/build/tools/click-validation-console-noise.test.js +103 -0
- package/build/tools/click-validation-console-noise.test.js.map +1 -0
- package/build/tools/config-tools.d.ts.map +1 -1
- package/build/tools/config-tools.js +5 -0
- package/build/tools/config-tools.js.map +1 -1
- package/build/tools/console-tools.d.ts +6 -6
- package/build/tools/console-tools.d.ts.map +1 -1
- package/build/tools/console-tools.js +1 -0
- package/build/tools/console-tools.js.map +1 -1
- package/build/tools/execution-tools.d.ts +3 -3
- package/build/tools/input-tools.d.ts +3 -3
- package/build/tools/inspection-tools.d.ts +15 -15
- package/build/tools/interpolation-reverse.d.ts +26 -0
- package/build/tools/interpolation-reverse.d.ts.map +1 -0
- package/build/tools/interpolation-reverse.js +130 -0
- package/build/tools/interpolation-reverse.js.map +1 -0
- package/build/tools/interpolation-reverse.test.d.ts +2 -0
- package/build/tools/interpolation-reverse.test.d.ts.map +1 -0
- package/build/tools/interpolation-reverse.test.js +76 -0
- package/build/tools/interpolation-reverse.test.js.map +1 -0
- package/build/tools/network-tools.d.ts +9 -9
- package/build/tools/replay-create-templatize.test.d.ts +2 -0
- package/build/tools/replay-create-templatize.test.d.ts.map +1 -0
- package/build/tools/replay-create-templatize.test.js +103 -0
- package/build/tools/replay-create-templatize.test.js.map +1 -0
- package/build/tools/replay-executor.d.ts +4 -0
- package/build/tools/replay-executor.d.ts.map +1 -1
- package/build/tools/replay-executor.js +39 -10
- package/build/tools/replay-executor.js.map +1 -1
- package/build/tools/replay-tools.d.ts +18 -18
- package/build/tools/replay-tools.d.ts.map +1 -1
- package/build/tools/replay-tools.js +6 -5
- package/build/tools/replay-tools.js.map +1 -1
- package/build/tools/request-tools.d.ts +1 -1
- package/build/tools/storage-tools.d.ts +6 -6
- package/build/utils/modal-detection-core.test.js +21 -17
- package/build/utils/modal-detection-core.test.js.map +1 -1
- package/docs/messages.md +199 -1
- package/package.json +1 -1
- package/plugin/skills/devharness/SKILL.md +1 -1
- 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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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: '
|
|
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: '
|
|
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
|
|
1512
|
-
|
|
1513
|
-
|
|
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
|
-
|
|
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 });
|