@tayo-dev/rtl 1.3.0 → 1.4.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 +66 -33
- package/assets/claude/commands/@tayo-dev/rtl/generate.md +2 -2
- package/assets/claude/commands/@tayo-dev/rtl/help.md +1 -1
- package/assets/codex/@tayo-dev/rtl-conventions/SKILL.md +2 -2
- package/assets/codex/@tayo-dev/rtl-generate/SKILL.md +6 -5
- package/assets/codex/@tayo-dev/rtl-help/SKILL.md +1 -1
- package/assets/gemini/commands/@tayo-dev/rtl/generate.toml +2 -2
- package/assets/gemini/commands/@tayo-dev/rtl/help.toml +1 -1
- package/assets/opencode/commands/@tayo-dev/rtl-generate.md +2 -2
- package/assets/opencode/commands/@tayo-dev/rtl-help.md +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +485 -67
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/install.js +6 -6
- package/dist/core/baseline-normalizer.d.ts.map +1 -1
- package/dist/core/baseline-normalizer.js +42 -0
- package/dist/core/baseline-normalizer.js.map +1 -1
- package/dist/core/generator.d.ts +5 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +235 -17
- package/dist/core/generator.js.map +1 -1
- package/dist/core/input-loader.d.ts.map +1 -1
- package/dist/core/input-loader.js +1 -0
- package/dist/core/input-loader.js.map +1 -1
- package/dist/core/js-parser.d.ts +2 -1
- package/dist/core/js-parser.d.ts.map +1 -1
- package/dist/core/js-parser.js +69 -0
- package/dist/core/js-parser.js.map +1 -1
- package/dist/core/orchestrator.d.ts +1 -1
- package/dist/core/orchestrator.js +4 -4
- package/dist/core/parser.js +2 -2
- package/dist/core/recording-intelligence.d.ts +1 -1
- package/dist/core/recording-intelligence.d.ts.map +1 -1
- package/dist/core/recording-intelligence.js +298 -4
- package/dist/core/recording-intelligence.js.map +1 -1
- package/dist/core/resolver.d.ts +28 -2
- package/dist/core/resolver.d.ts.map +1 -1
- package/dist/core/resolver.js +462 -23
- package/dist/core/resolver.js.map +1 -1
- package/dist/core/scanner.d.ts +11 -3
- package/dist/core/scanner.d.ts.map +1 -1
- package/dist/core/scanner.js +47 -9
- package/dist/core/scanner.js.map +1 -1
- package/dist/core/scorer.d.ts +6 -2
- package/dist/core/scorer.d.ts.map +1 -1
- package/dist/core/scorer.js +163 -9
- package/dist/core/scorer.js.map +1 -1
- package/dist/core/suite-planner.d.ts +4 -1
- package/dist/core/suite-planner.d.ts.map +1 -1
- package/dist/core/suite-planner.js +261 -11
- package/dist/core/suite-planner.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -4
- package/dist/install/planner.js +1 -1
- package/dist/install/types.d.ts +1 -1
- package/dist/learner/index.d.ts +2 -2
- package/dist/learner/index.js +3 -3
- package/dist/learner/storage.d.ts +1 -1
- package/dist/learner/storage.js +2 -2
- package/dist/templates/test-template.d.ts +26 -2
- package/dist/templates/test-template.d.ts.map +1 -1
- package/dist/templates/test-template.js +46 -6
- package/dist/templates/test-template.js.map +1 -1
- package/dist/types/recording.d.ts +162 -0
- package/dist/types/recording.d.ts.map +1 -1
- package/dist/types/recording.js.map +1 -1
- package/dist/types/score.d.ts +37 -0
- package/dist/types/score.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording-intelligence.js","sourceRoot":"","sources":["../../src/core/recording-intelligence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recording-intelligence.js","sourceRoot":"","sources":["../../src/core/recording-intelligence.ts"],"names":[],"mappings":"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"}
|
package/dist/core/resolver.d.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
import { Page } from 'playwright';
|
|
2
|
-
import type { DialogState, ElementInfo, QueryResult, VisualState } from '../types/recording.js';
|
|
1
|
+
import { type Page } from 'playwright';
|
|
2
|
+
import type { DialogState, ElementInfo, NormalizedStep, QueryDescriptor, QueryResult, SemanticMarkerAssertionResolution, SelectorDescriptor, SelectorResolutionResult, VisualState } from '../types/recording.js';
|
|
3
|
+
export interface FoundSelectorInspectionResult {
|
|
4
|
+
status: 'found';
|
|
5
|
+
element: ElementInfo;
|
|
6
|
+
}
|
|
7
|
+
export interface MissingSelectorInspectionResult {
|
|
8
|
+
status: 'selector-not-found';
|
|
9
|
+
}
|
|
10
|
+
export interface FailedSelectorInspectionResult {
|
|
11
|
+
status: 'inspection-failed';
|
|
12
|
+
error: string;
|
|
13
|
+
}
|
|
14
|
+
export type SelectorInspectionResult = FoundSelectorInspectionResult | MissingSelectorInspectionResult | FailedSelectorInspectionResult;
|
|
15
|
+
export interface ResolveSelectorOptions {
|
|
16
|
+
url?: string;
|
|
17
|
+
preservedQuery?: QueryDescriptor;
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
inspect?: (url: string, cssSelector: string, timeoutMs?: number) => Promise<SelectorInspectionResult>;
|
|
20
|
+
}
|
|
21
|
+
export declare function resolveSemanticMarkerAssertion(step: NormalizedStep): SemanticMarkerAssertionResolution;
|
|
3
22
|
export declare function extractDialogState(page: Page): Promise<DialogState | null>;
|
|
4
23
|
export interface CaptureVisualStateOptions {
|
|
5
24
|
reason: string;
|
|
@@ -19,7 +38,14 @@ export declare function captureVisualState(url: string, options: CaptureVisualSt
|
|
|
19
38
|
* @param selector - Original CSS selector
|
|
20
39
|
* @returns QueryResult with query string, quality rating, and method name
|
|
21
40
|
*/
|
|
41
|
+
export declare function deriveAccessibleQuery(info: ElementInfo): QueryResult | null;
|
|
42
|
+
/**
|
|
43
|
+
* Legacy helper retained for scoring/reporting until generation consumes
|
|
44
|
+
* SelectorResolutionResult directly in Phase 14-02.
|
|
45
|
+
*/
|
|
22
46
|
export declare function buildQuery(info: ElementInfo, selector: string): QueryResult;
|
|
47
|
+
export declare function inspectSelector(url: string, cssSelector: string, timeoutMs?: number): Promise<SelectorInspectionResult>;
|
|
48
|
+
export declare function resolveSelector(selector: SelectorDescriptor, options?: ResolveSelectorOptions): Promise<SelectorResolutionResult>;
|
|
23
49
|
/**
|
|
24
50
|
* Selects the most appropriate RTL matcher based on element type and action.
|
|
25
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AAE9D,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EAIX,iCAAiC,EAIjC,kBAAkB,EAClB,wBAAwB,EAExB,WAAW,EACZ,MAAM,uBAAuB,CAAA;AA0C9B,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,wBAAwB,GAChC,6BAA6B,GAC7B,+BAA+B,GAC/B,8BAA8B,CAAA;AAElC,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,eAAe,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,CACR,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,wBAAwB,CAAC,CAAA;CACvC;AAucD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,cAAc,GACnB,iCAAiC,CA6EnC;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA8BhF;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA6C7B;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAyC3E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAa3E;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,SAAS,SAAO,GACf,OAAO,CAAC,wBAAwB,CAAC,CA+BnC;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,wBAAwB,CAAC,CAgFnC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuBvE;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,SAAS,SAAO,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAe7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,SAAO,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAsC1C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMvD"}
|
package/dist/core/resolver.js
CHANGED
|
@@ -18,6 +18,8 @@ const ROLE_MAP = {
|
|
|
18
18
|
h6: 'heading',
|
|
19
19
|
img: 'img',
|
|
20
20
|
};
|
|
21
|
+
const GENERIC_FIELD_CONTEXT_PATTERN = /\b(details?|information|summary|review|section|panel|wrapper|container|layout|row|table|list|grid)\b/i;
|
|
22
|
+
const FIELD_LABEL_HINT_PATTERN = /\b(name|email|phone|pin|quantity|amount|reference|description|notes?|comment|code|search|address|date|time|password|customer|type|number)\b/i;
|
|
21
23
|
/**
|
|
22
24
|
* Escapes single quotes in strings for use in generated query code.
|
|
23
25
|
*/
|
|
@@ -49,9 +51,365 @@ async function readElementInfo(page, selector) {
|
|
|
49
51
|
});
|
|
50
52
|
return elementInfo;
|
|
51
53
|
}
|
|
54
|
+
function getAccessibleName(info) {
|
|
55
|
+
const accessibleName = info.ariaLabel ?? info.innerText;
|
|
56
|
+
const normalizedName = accessibleName?.trim();
|
|
57
|
+
return normalizedName ? normalizedName : null;
|
|
58
|
+
}
|
|
59
|
+
function toQueryDescriptor(selector, query) {
|
|
60
|
+
return {
|
|
61
|
+
stepId: selector.stepId,
|
|
62
|
+
method: query.method,
|
|
63
|
+
queryRoot: 'screen',
|
|
64
|
+
line: selector.line,
|
|
65
|
+
target: selector.selector,
|
|
66
|
+
quality: query.quality,
|
|
67
|
+
raw: query.query,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function toUnresolvedSelectorResult(selector, outcome, reason, options = {}) {
|
|
71
|
+
return {
|
|
72
|
+
status: 'unresolved',
|
|
73
|
+
outcome,
|
|
74
|
+
stepId: selector.stepId,
|
|
75
|
+
selector,
|
|
76
|
+
url: options.url,
|
|
77
|
+
reason,
|
|
78
|
+
inspectionError: options.inspectionError,
|
|
79
|
+
warnings: [reason],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
52
82
|
function sanitizeCaptureSegment(value) {
|
|
53
83
|
return value.replace(/[^a-zA-Z0-9-_]+/g, '-').replace(/^-+|-+$/g, '') || 'capture';
|
|
54
84
|
}
|
|
85
|
+
function getSemanticMarkerCandidate(step) {
|
|
86
|
+
const metadataCandidate = step.metadata?.semanticMarkerCandidate;
|
|
87
|
+
if (metadataCandidate &&
|
|
88
|
+
typeof metadataCandidate === 'object' &&
|
|
89
|
+
'stepId' in metadataCandidate &&
|
|
90
|
+
typeof metadataCandidate.stepId === 'string') {
|
|
91
|
+
return metadataCandidate;
|
|
92
|
+
}
|
|
93
|
+
return step.semanticMarkerCandidate;
|
|
94
|
+
}
|
|
95
|
+
function getSemanticMarkerLink(step) {
|
|
96
|
+
const metadataLink = step.metadata?.semanticMarkerLink;
|
|
97
|
+
if (metadataLink &&
|
|
98
|
+
typeof metadataLink === 'object' &&
|
|
99
|
+
'markerStepId' in metadataLink &&
|
|
100
|
+
typeof metadataLink.markerStepId === 'string') {
|
|
101
|
+
return metadataLink;
|
|
102
|
+
}
|
|
103
|
+
return step.semanticMarkerLink;
|
|
104
|
+
}
|
|
105
|
+
function getUnresolvedSemanticMarker(step) {
|
|
106
|
+
const metadataMarker = step.metadata?.unresolvedSemanticMarker;
|
|
107
|
+
if (metadataMarker &&
|
|
108
|
+
typeof metadataMarker === 'object' &&
|
|
109
|
+
'stepId' in metadataMarker &&
|
|
110
|
+
typeof metadataMarker.stepId === 'string') {
|
|
111
|
+
return metadataMarker;
|
|
112
|
+
}
|
|
113
|
+
return step.unresolvedSemanticMarker;
|
|
114
|
+
}
|
|
115
|
+
function normalizeProofText(value) {
|
|
116
|
+
const normalized = value?.replace(/\s+/g, ' ').trim();
|
|
117
|
+
return normalized ? normalized : undefined;
|
|
118
|
+
}
|
|
119
|
+
function isIconOnlyText(value) {
|
|
120
|
+
const normalized = normalizeProofText(value);
|
|
121
|
+
if (!normalized) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return normalized.length <= 2 && !/[a-z0-9]/i.test(normalized);
|
|
125
|
+
}
|
|
126
|
+
function toAsyncQueryMethod(method) {
|
|
127
|
+
switch (method) {
|
|
128
|
+
case 'getByRole':
|
|
129
|
+
return 'findByRole';
|
|
130
|
+
case 'getByText':
|
|
131
|
+
return 'findByText';
|
|
132
|
+
case 'getByDisplayValue':
|
|
133
|
+
return 'findByDisplayValue';
|
|
134
|
+
case 'getByLabelText':
|
|
135
|
+
return 'findByLabelText';
|
|
136
|
+
case 'getByPlaceholderText':
|
|
137
|
+
return 'findByPlaceholderText';
|
|
138
|
+
default:
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function getQueryScope(query) {
|
|
143
|
+
if (query.raw) {
|
|
144
|
+
const match = query.raw.match(/^(.*)\.(?:get|find|query)(?:All)?By[A-Za-z]+\(.+\)$/);
|
|
145
|
+
if (match?.[1]) {
|
|
146
|
+
return match[1];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (query.queryRoot === 'screen') {
|
|
150
|
+
return 'screen';
|
|
151
|
+
}
|
|
152
|
+
if (query.queryRoot === 'within') {
|
|
153
|
+
return 'screen';
|
|
154
|
+
}
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
function buildScopedQueryExpression(query, method, options) {
|
|
158
|
+
const scope = getQueryScope(query);
|
|
159
|
+
if (!scope) {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
if (method === 'findByRole' && options.role && options.name) {
|
|
163
|
+
return `${scope}.${method}('${escapeSingleQuote(options.role)}', { name: '${escapeSingleQuote(options.name)}' })`;
|
|
164
|
+
}
|
|
165
|
+
if (!options.target) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
return `${scope}.${method}('${escapeSingleQuote(options.target)}')`;
|
|
169
|
+
}
|
|
170
|
+
function buildAsyncQueryDescriptor(query, options) {
|
|
171
|
+
const raw = buildScopedQueryExpression(query, options.method, options);
|
|
172
|
+
if (!raw) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
...query,
|
|
177
|
+
method: options.method,
|
|
178
|
+
role: options.role ?? query.role,
|
|
179
|
+
target: options.target ?? query.target,
|
|
180
|
+
name: options.name ?? query.name,
|
|
181
|
+
raw,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function buildAssertion(step, candidate, query, proofKind) {
|
|
185
|
+
const semanticMarkerLink = getSemanticMarkerLink(step);
|
|
186
|
+
const anchor = semanticMarkerLink ?? candidate.anchor;
|
|
187
|
+
if (!anchor?.anchorStepId || !anchor.relation || !query.raw) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
markerStepId: step.id ?? candidate.stepId,
|
|
192
|
+
anchorStepId: anchor.anchorStepId,
|
|
193
|
+
relation: anchor.relation,
|
|
194
|
+
proofKind,
|
|
195
|
+
proofSubject: candidate.proofSubject,
|
|
196
|
+
target: candidate.target ?? step.target,
|
|
197
|
+
proofText: candidate.proofText,
|
|
198
|
+
line: candidate.line ?? step.line,
|
|
199
|
+
query,
|
|
200
|
+
queryExpression: query.raw,
|
|
201
|
+
expectation: 'visibility',
|
|
202
|
+
matcher: 'toBeVisible',
|
|
203
|
+
sourceContext: candidate.sourceContext,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function toUnresolvedAssertion(step, reason, candidate, unresolvedMarker) {
|
|
207
|
+
const source = candidate ?? unresolvedMarker;
|
|
208
|
+
const anchor = source?.anchor;
|
|
209
|
+
return {
|
|
210
|
+
status: 'unresolved',
|
|
211
|
+
markerStepId: step.id ?? source?.stepId ?? 'unknown-step',
|
|
212
|
+
anchorStepId: anchor?.anchorStepId,
|
|
213
|
+
relation: anchor?.relation,
|
|
214
|
+
reason,
|
|
215
|
+
proofSubject: source?.proofSubject ?? 'unknown',
|
|
216
|
+
target: source?.target ?? step.target,
|
|
217
|
+
proofText: source?.proofText,
|
|
218
|
+
line: source?.line ?? step.line,
|
|
219
|
+
sourceContext: source?.sourceContext ?? {
|
|
220
|
+
line: step.line,
|
|
221
|
+
originalType: step.originalType,
|
|
222
|
+
},
|
|
223
|
+
query: source?.query,
|
|
224
|
+
selector: source?.selector,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function resolveRoleNameAssertion(step, candidate, query) {
|
|
228
|
+
const accessibleName = normalizeProofText(query.name ?? query.target ?? candidate.proofText);
|
|
229
|
+
if (!query.role || !accessibleName || isIconOnlyText(accessibleName)) {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
const asyncQuery = buildAsyncQueryDescriptor(query, {
|
|
233
|
+
method: 'findByRole',
|
|
234
|
+
role: query.role,
|
|
235
|
+
target: accessibleName,
|
|
236
|
+
name: accessibleName,
|
|
237
|
+
});
|
|
238
|
+
if (!asyncQuery) {
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
const assertion = buildAssertion(step, candidate, asyncQuery, 'role-name');
|
|
242
|
+
return assertion
|
|
243
|
+
? {
|
|
244
|
+
status: 'resolved',
|
|
245
|
+
markerStepId: assertion.markerStepId,
|
|
246
|
+
anchorStepId: assertion.anchorStepId,
|
|
247
|
+
assertion,
|
|
248
|
+
}
|
|
249
|
+
: undefined;
|
|
250
|
+
}
|
|
251
|
+
function resolveVisibleTextAssertion(step, candidate, query) {
|
|
252
|
+
const proofText = normalizeProofText(candidate.proofText ?? query.target ?? candidate.target);
|
|
253
|
+
if (!proofText || isIconOnlyText(proofText)) {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
const asyncQuery = buildAsyncQueryDescriptor(query, {
|
|
257
|
+
method: 'findByText',
|
|
258
|
+
target: proofText,
|
|
259
|
+
});
|
|
260
|
+
if (!asyncQuery) {
|
|
261
|
+
return undefined;
|
|
262
|
+
}
|
|
263
|
+
const assertion = buildAssertion(step, candidate, asyncQuery, 'visible-text');
|
|
264
|
+
return assertion
|
|
265
|
+
? {
|
|
266
|
+
status: 'resolved',
|
|
267
|
+
markerStepId: assertion.markerStepId,
|
|
268
|
+
anchorStepId: assertion.anchorStepId,
|
|
269
|
+
assertion,
|
|
270
|
+
}
|
|
271
|
+
: undefined;
|
|
272
|
+
}
|
|
273
|
+
function resolveVisibleValueAssertion(step, candidate, query) {
|
|
274
|
+
const proofText = normalizeProofText(candidate.proofText ?? query.target ?? candidate.target);
|
|
275
|
+
if (!proofText || isIconOnlyText(proofText)) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
278
|
+
const nextMethod = query.method === 'getByDisplayValue' ? 'findByDisplayValue' : 'findByText';
|
|
279
|
+
const asyncQuery = buildAsyncQueryDescriptor(query, {
|
|
280
|
+
method: nextMethod,
|
|
281
|
+
target: proofText,
|
|
282
|
+
});
|
|
283
|
+
if (!asyncQuery) {
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
const assertion = buildAssertion(step, candidate, asyncQuery, 'visible-value');
|
|
287
|
+
return assertion
|
|
288
|
+
? {
|
|
289
|
+
status: 'resolved',
|
|
290
|
+
markerStepId: assertion.markerStepId,
|
|
291
|
+
anchorStepId: assertion.anchorStepId,
|
|
292
|
+
assertion,
|
|
293
|
+
}
|
|
294
|
+
: undefined;
|
|
295
|
+
}
|
|
296
|
+
function resolveFieldContextAssertion(step, candidate, query) {
|
|
297
|
+
const proofText = normalizeProofText(candidate.proofText ?? query.target ?? candidate.target);
|
|
298
|
+
if (!proofText) {
|
|
299
|
+
return toUnresolvedAssertion(step, 'missing-query', candidate);
|
|
300
|
+
}
|
|
301
|
+
if (isIconOnlyText(proofText)) {
|
|
302
|
+
return toUnresolvedAssertion(step, 'icon-only-target', candidate);
|
|
303
|
+
}
|
|
304
|
+
if (GENERIC_FIELD_CONTEXT_PATTERN.test(proofText)) {
|
|
305
|
+
return toUnresolvedAssertion(step, 'generic-container', candidate);
|
|
306
|
+
}
|
|
307
|
+
if (/[/,]/.test(proofText)) {
|
|
308
|
+
return toUnresolvedAssertion(step, 'ambiguous-field-context', candidate);
|
|
309
|
+
}
|
|
310
|
+
if (query.method === 'getByLabelText') {
|
|
311
|
+
const asyncQuery = buildAsyncQueryDescriptor(query, {
|
|
312
|
+
method: 'findByLabelText',
|
|
313
|
+
target: proofText,
|
|
314
|
+
});
|
|
315
|
+
const assertion = asyncQuery && buildAssertion(step, candidate, asyncQuery, 'label-text');
|
|
316
|
+
return assertion
|
|
317
|
+
? {
|
|
318
|
+
status: 'resolved',
|
|
319
|
+
markerStepId: assertion.markerStepId,
|
|
320
|
+
anchorStepId: assertion.anchorStepId,
|
|
321
|
+
assertion,
|
|
322
|
+
}
|
|
323
|
+
: toUnresolvedAssertion(step, 'unsupported-field-context', candidate);
|
|
324
|
+
}
|
|
325
|
+
if (query.method === 'getByPlaceholderText') {
|
|
326
|
+
const asyncQuery = buildAsyncQueryDescriptor(query, {
|
|
327
|
+
method: 'findByPlaceholderText',
|
|
328
|
+
target: proofText,
|
|
329
|
+
});
|
|
330
|
+
const assertion = asyncQuery && buildAssertion(step, candidate, asyncQuery, 'placeholder-text');
|
|
331
|
+
return assertion
|
|
332
|
+
? {
|
|
333
|
+
status: 'resolved',
|
|
334
|
+
markerStepId: assertion.markerStepId,
|
|
335
|
+
anchorStepId: assertion.anchorStepId,
|
|
336
|
+
assertion,
|
|
337
|
+
}
|
|
338
|
+
: toUnresolvedAssertion(step, 'unsupported-field-context', candidate);
|
|
339
|
+
}
|
|
340
|
+
if (query.method === 'getByText' && FIELD_LABEL_HINT_PATTERN.test(proofText)) {
|
|
341
|
+
const asyncQuery = buildAsyncQueryDescriptor(query, {
|
|
342
|
+
method: 'findByLabelText',
|
|
343
|
+
target: proofText,
|
|
344
|
+
});
|
|
345
|
+
const assertion = asyncQuery && buildAssertion(step, candidate, asyncQuery, 'label-text');
|
|
346
|
+
return assertion
|
|
347
|
+
? {
|
|
348
|
+
status: 'resolved',
|
|
349
|
+
markerStepId: assertion.markerStepId,
|
|
350
|
+
anchorStepId: assertion.anchorStepId,
|
|
351
|
+
assertion,
|
|
352
|
+
}
|
|
353
|
+
: toUnresolvedAssertion(step, 'unsupported-field-context', candidate);
|
|
354
|
+
}
|
|
355
|
+
if (query.method === 'getByText') {
|
|
356
|
+
return toUnresolvedAssertion(step, 'ambiguous-field-context', candidate);
|
|
357
|
+
}
|
|
358
|
+
return toUnresolvedAssertion(step, 'unsupported-field-context', candidate);
|
|
359
|
+
}
|
|
360
|
+
export function resolveSemanticMarkerAssertion(step) {
|
|
361
|
+
const candidate = getSemanticMarkerCandidate(step);
|
|
362
|
+
const unresolvedMarker = getUnresolvedSemanticMarker(step);
|
|
363
|
+
if (!candidate) {
|
|
364
|
+
return toUnresolvedAssertion(step, 'missing-marker-candidate', undefined, unresolvedMarker);
|
|
365
|
+
}
|
|
366
|
+
const anchorStepId = getSemanticMarkerLink(step)?.anchorStepId ??
|
|
367
|
+
unresolvedMarker?.anchor?.anchorStepId ??
|
|
368
|
+
candidate.anchor?.anchorStepId;
|
|
369
|
+
if (!anchorStepId) {
|
|
370
|
+
return toUnresolvedAssertion(step, 'missing-anchor', candidate, unresolvedMarker);
|
|
371
|
+
}
|
|
372
|
+
if (unresolvedMarker?.reason === 'ambiguous-field-context') {
|
|
373
|
+
return toUnresolvedAssertion(step, 'ambiguous-field-context', candidate, unresolvedMarker);
|
|
374
|
+
}
|
|
375
|
+
if (candidate.proofSubject === 'selector-target') {
|
|
376
|
+
return toUnresolvedAssertion(step, 'css-only-evidence', candidate, unresolvedMarker);
|
|
377
|
+
}
|
|
378
|
+
if (candidate.proofSubject === 'unknown') {
|
|
379
|
+
return toUnresolvedAssertion(step, 'unsupported-proof-subject', candidate, unresolvedMarker);
|
|
380
|
+
}
|
|
381
|
+
if (!candidate.query) {
|
|
382
|
+
return toUnresolvedAssertion(step, 'missing-query', candidate, unresolvedMarker);
|
|
383
|
+
}
|
|
384
|
+
if (candidate.query.queryRoot === 'document' ||
|
|
385
|
+
candidate.query.method === 'getByTestId' ||
|
|
386
|
+
/data-testid|querySelector|nth-(?:of-type|child)|css-[\w-]+/i.test(candidate.query.raw ?? '')) {
|
|
387
|
+
return toUnresolvedAssertion(step, 'hidden-evidence', candidate, unresolvedMarker);
|
|
388
|
+
}
|
|
389
|
+
if (isIconOnlyText(candidate.proofText ?? candidate.query.target ?? candidate.target)) {
|
|
390
|
+
return toUnresolvedAssertion(step, 'icon-only-target', candidate, unresolvedMarker);
|
|
391
|
+
}
|
|
392
|
+
const roleNameResolution = resolveRoleNameAssertion(step, candidate, candidate.query);
|
|
393
|
+
if (roleNameResolution) {
|
|
394
|
+
return roleNameResolution;
|
|
395
|
+
}
|
|
396
|
+
if (candidate.proofSubject === 'concrete-value') {
|
|
397
|
+
return (resolveVisibleValueAssertion(step, candidate, candidate.query) ??
|
|
398
|
+
toUnresolvedAssertion(step, 'missing-query', candidate, unresolvedMarker));
|
|
399
|
+
}
|
|
400
|
+
if (candidate.proofSubject === 'visible-message' ||
|
|
401
|
+
candidate.proofSubject === 'heading') {
|
|
402
|
+
return (resolveVisibleTextAssertion(step, candidate, candidate.query) ??
|
|
403
|
+
toUnresolvedAssertion(step, 'missing-query', candidate, unresolvedMarker));
|
|
404
|
+
}
|
|
405
|
+
if (candidate.proofSubject === 'field-label') {
|
|
406
|
+
return resolveFieldContextAssertion(step, candidate, candidate.query);
|
|
407
|
+
}
|
|
408
|
+
const asyncMethod = toAsyncQueryMethod(candidate.query.method);
|
|
409
|
+
return asyncMethod
|
|
410
|
+
? toUnresolvedAssertion(step, 'unsupported-proof-subject', candidate, unresolvedMarker)
|
|
411
|
+
: toUnresolvedAssertion(step, 'missing-query', candidate, unresolvedMarker);
|
|
412
|
+
}
|
|
55
413
|
export async function extractDialogState(page) {
|
|
56
414
|
try {
|
|
57
415
|
const state = await page.evaluate(() => {
|
|
@@ -111,7 +469,7 @@ export async function captureVisualState(url, options) {
|
|
|
111
469
|
};
|
|
112
470
|
}
|
|
113
471
|
catch (error) {
|
|
114
|
-
console.warn(pc.yellow('[
|
|
472
|
+
console.warn(pc.yellow('[tayo]') +
|
|
115
473
|
pc.dim(' VIS-01:') +
|
|
116
474
|
` Failed to capture visual state for ${url}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
117
475
|
return null;
|
|
@@ -130,9 +488,9 @@ export async function captureVisualState(url, options) {
|
|
|
130
488
|
* @param selector - Original CSS selector
|
|
131
489
|
* @returns QueryResult with query string, quality rating, and method name
|
|
132
490
|
*/
|
|
133
|
-
export function
|
|
491
|
+
export function deriveAccessibleQuery(info) {
|
|
134
492
|
const impliedRole = info.role ?? ROLE_MAP[info.tagName];
|
|
135
|
-
const accessibleName = info
|
|
493
|
+
const accessibleName = getAccessibleName(info);
|
|
136
494
|
// Priority 1: getByRole when both role and accessible name exist
|
|
137
495
|
if (impliedRole && accessibleName) {
|
|
138
496
|
return {
|
|
@@ -165,6 +523,17 @@ export function buildQuery(info, selector) {
|
|
|
165
523
|
query: `screen.getByPlaceholderText('${escapeSingleQuote(info.placeholder)}')`,
|
|
166
524
|
};
|
|
167
525
|
}
|
|
526
|
+
return null;
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Legacy helper retained for scoring/reporting until generation consumes
|
|
530
|
+
* SelectorResolutionResult directly in Phase 14-02.
|
|
531
|
+
*/
|
|
532
|
+
export function buildQuery(info, selector) {
|
|
533
|
+
const accessibleQuery = deriveAccessibleQuery(info);
|
|
534
|
+
if (accessibleQuery) {
|
|
535
|
+
return accessibleQuery;
|
|
536
|
+
}
|
|
168
537
|
// Priority 5: Fallback to getByTestId (fragile)
|
|
169
538
|
const sanitized = sanitizeSelectorForTestId(selector);
|
|
170
539
|
return {
|
|
@@ -173,6 +542,87 @@ export function buildQuery(info, selector) {
|
|
|
173
542
|
query: `screen.getByTestId('${sanitized}')`,
|
|
174
543
|
};
|
|
175
544
|
}
|
|
545
|
+
export async function inspectSelector(url, cssSelector, timeoutMs = 5000) {
|
|
546
|
+
let browser = null;
|
|
547
|
+
try {
|
|
548
|
+
browser = await chromium.launch({ headless: true });
|
|
549
|
+
const page = await browser.newPage();
|
|
550
|
+
await page.goto(url, {
|
|
551
|
+
timeout: timeoutMs,
|
|
552
|
+
waitUntil: 'domcontentloaded',
|
|
553
|
+
});
|
|
554
|
+
const count = await page.locator(cssSelector).count();
|
|
555
|
+
if (count === 0) {
|
|
556
|
+
return { status: 'selector-not-found' };
|
|
557
|
+
}
|
|
558
|
+
return {
|
|
559
|
+
status: 'found',
|
|
560
|
+
element: await readElementInfo(page, cssSelector),
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
catch (error) {
|
|
564
|
+
return {
|
|
565
|
+
status: 'inspection-failed',
|
|
566
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
finally {
|
|
570
|
+
if (browser) {
|
|
571
|
+
await browser.close();
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
export async function resolveSelector(selector, options = {}) {
|
|
576
|
+
const { url, preservedQuery, timeoutMs = 5000, inspect = inspectSelector } = options;
|
|
577
|
+
if (preservedQuery) {
|
|
578
|
+
return {
|
|
579
|
+
status: 'resolved',
|
|
580
|
+
outcome: 'preserved-query',
|
|
581
|
+
source: 'baseline',
|
|
582
|
+
stepId: selector.stepId,
|
|
583
|
+
selector,
|
|
584
|
+
url,
|
|
585
|
+
query: preservedQuery,
|
|
586
|
+
warnings: [],
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
if (!url) {
|
|
590
|
+
return toUnresolvedSelectorResult(selector, 'no-url', `No recorded URL is available to inspect selector ${selector.selector}.`);
|
|
591
|
+
}
|
|
592
|
+
try {
|
|
593
|
+
const inspection = await inspect(url, selector.selector, timeoutMs);
|
|
594
|
+
if (inspection.status === 'inspection-failed') {
|
|
595
|
+
return toUnresolvedSelectorResult(selector, 'inspection-failed', `Playwright inspection failed for selector ${selector.selector}.`, {
|
|
596
|
+
url,
|
|
597
|
+
inspectionError: inspection.error,
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
if (inspection.status === 'selector-not-found') {
|
|
601
|
+
return toUnresolvedSelectorResult(selector, 'selector-not-found', `Selector ${selector.selector} was not found at ${url}.`, { url });
|
|
602
|
+
}
|
|
603
|
+
const accessibleQuery = deriveAccessibleQuery(inspection.element);
|
|
604
|
+
if (!accessibleQuery) {
|
|
605
|
+
return toUnresolvedSelectorResult(selector, 'selector-inaccessible', `Selector ${selector.selector} did not expose trustworthy accessible query evidence.`, { url });
|
|
606
|
+
}
|
|
607
|
+
return {
|
|
608
|
+
status: 'resolved',
|
|
609
|
+
outcome: 'accessible-query',
|
|
610
|
+
source: 'live-dom',
|
|
611
|
+
stepId: selector.stepId,
|
|
612
|
+
selector,
|
|
613
|
+
url,
|
|
614
|
+
query: toQueryDescriptor(selector, accessibleQuery),
|
|
615
|
+
inspectedElement: inspection.element,
|
|
616
|
+
warnings: [],
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
catch (error) {
|
|
620
|
+
return toUnresolvedSelectorResult(selector, 'inspection-failed', `Playwright inspection failed for selector ${selector.selector}.`, {
|
|
621
|
+
url,
|
|
622
|
+
inspectionError: error instanceof Error ? error.message : 'Unknown error',
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
}
|
|
176
626
|
/**
|
|
177
627
|
* Selects the most appropriate RTL matcher based on element type and action.
|
|
178
628
|
*
|
|
@@ -210,27 +660,16 @@ export function selectMatcher(info, action) {
|
|
|
210
660
|
* @returns ElementInfo or null if element not found/error occurs
|
|
211
661
|
*/
|
|
212
662
|
export async function inspectElement(url, cssSelector, timeoutMs = 5000) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
const page = await browser.newPage();
|
|
217
|
-
await page.goto(url, {
|
|
218
|
-
timeout: timeoutMs,
|
|
219
|
-
waitUntil: 'domcontentloaded',
|
|
220
|
-
});
|
|
221
|
-
return await readElementInfo(page, cssSelector);
|
|
663
|
+
const inspection = await inspectSelector(url, cssSelector, timeoutMs);
|
|
664
|
+
if (inspection.status === 'found') {
|
|
665
|
+
return inspection.element;
|
|
222
666
|
}
|
|
223
|
-
|
|
224
|
-
console.warn(pc.yellow('[
|
|
667
|
+
if (inspection.status === 'inspection-failed') {
|
|
668
|
+
console.warn(pc.yellow('[tayo]') +
|
|
225
669
|
pc.dim(' QRY-02:') +
|
|
226
|
-
` Failed to inspect element ${cssSelector} on ${url}: ${
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
finally {
|
|
230
|
-
if (browser) {
|
|
231
|
-
await browser.close();
|
|
232
|
-
}
|
|
670
|
+
` Failed to inspect element ${cssSelector} on ${url}: ${inspection.error}`);
|
|
233
671
|
}
|
|
672
|
+
return null;
|
|
234
673
|
}
|
|
235
674
|
/**
|
|
236
675
|
* Inspects multiple elements on a page using a single Playwright browser instance.
|
|
@@ -263,7 +702,7 @@ export async function inspectElements(url, selectors, timeoutMs = 5000) {
|
|
|
263
702
|
}
|
|
264
703
|
catch (error) {
|
|
265
704
|
// On browser/page error, set all selectors to null
|
|
266
|
-
console.warn(pc.yellow('[
|
|
705
|
+
console.warn(pc.yellow('[tayo]') +
|
|
267
706
|
pc.dim(' QRY-02:') +
|
|
268
707
|
` Failed to inspect elements on ${url}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
269
708
|
for (const selector of selectors) {
|
|
@@ -284,7 +723,7 @@ export async function inspectElements(url, selectors, timeoutMs = 5000) {
|
|
|
284
723
|
* @param selector - The CSS selector that required fallback to testId
|
|
285
724
|
*/
|
|
286
725
|
export function emitQry03Warning(selector) {
|
|
287
|
-
console.warn(pc.yellow('[
|
|
726
|
+
console.warn(pc.yellow('[tayo]') +
|
|
288
727
|
pc.dim(' QRY-03:') +
|
|
289
728
|
` No accessible query for ${pc.bold(selector)} — consider adding aria-label or data-testid to this element`);
|
|
290
729
|
}
|