tamash-playwright 0.3.0 → 0.5.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/.env.example +5 -0
- package/README.md +53 -2
- package/dist/bindings/index.d.ts.map +1 -1
- package/dist/bindings/index.js +3 -0
- package/dist/bindings/index.js.map +1 -1
- package/dist/bindings/locator.binding.d.ts +4 -3
- package/dist/bindings/locator.binding.d.ts.map +1 -1
- package/dist/bindings/locator.binding.js +197 -7
- package/dist/bindings/locator.binding.js.map +1 -1
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +126 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/scanDescribe.d.ts +11 -0
- package/dist/cli/scanDescribe.d.ts.map +1 -0
- package/dist/cli/scanDescribe.js +84 -0
- package/dist/cli/scanDescribe.js.map +1 -0
- package/dist/healer/action-recovery.d.ts +14 -0
- package/dist/healer/action-recovery.d.ts.map +1 -0
- package/dist/healer/action-recovery.js +102 -0
- package/dist/healer/action-recovery.js.map +1 -0
- package/dist/healer/index.d.ts +10 -2
- package/dist/healer/index.d.ts.map +1 -1
- package/dist/healer/index.js +297 -72
- package/dist/healer/index.js.map +1 -1
- package/dist/healer/providers/anthropic.d.ts.map +1 -1
- package/dist/healer/providers/anthropic.js +70 -0
- package/dist/healer/providers/anthropic.js.map +1 -1
- package/dist/healer/providers/gemini.d.ts.map +1 -1
- package/dist/healer/providers/gemini.js +99 -0
- package/dist/healer/providers/gemini.js.map +1 -1
- package/dist/healer/providers/ollama.d.ts.map +1 -1
- package/dist/healer/providers/ollama.js +113 -0
- package/dist/healer/providers/ollama.js.map +1 -1
- package/dist/healer/providers/openai.d.ts.map +1 -1
- package/dist/healer/providers/openai.js +99 -0
- package/dist/healer/providers/openai.js.map +1 -1
- package/dist/healer/providers/prompt.d.ts +7 -1
- package/dist/healer/providers/prompt.d.ts.map +1 -1
- package/dist/healer/providers/prompt.js +95 -1
- package/dist/healer/providers/prompt.js.map +1 -1
- package/dist/healer/providers/types.d.ts +36 -0
- package/dist/healer/providers/types.d.ts.map +1 -1
- package/dist/healer/providers/vision-models.d.ts +3 -0
- package/dist/healer/providers/vision-models.d.ts.map +1 -0
- package/dist/healer/providers/vision-models.js +40 -0
- package/dist/healer/providers/vision-models.js.map +1 -0
- package/dist/healer/replay-action.d.ts +3 -0
- package/dist/healer/replay-action.d.ts.map +1 -0
- package/dist/healer/replay-action.js +83 -0
- package/dist/healer/replay-action.js.map +1 -0
- package/dist/healer/vision.d.ts +25 -0
- package/dist/healer/vision.d.ts.map +1 -0
- package/dist/healer/vision.js +75 -0
- package/dist/healer/vision.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
package/dist/healer/index.js
CHANGED
|
@@ -3,12 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isHealingEnabled = isHealingEnabled;
|
|
7
|
+
exports.isActionRecoveryEnabled = isActionRecoveryEnabled;
|
|
6
8
|
exports.healActionFailure = healActionFailure;
|
|
7
9
|
exports.getHealingReports = getHealingReports;
|
|
8
10
|
const path_1 = __importDefault(require("path"));
|
|
9
11
|
const test_1 = require("@playwright/test");
|
|
10
12
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
11
13
|
const providers_1 = require("./providers");
|
|
14
|
+
const vision_1 = require("./vision");
|
|
15
|
+
const replay_action_1 = require("./replay-action");
|
|
16
|
+
const action_recovery_1 = require("./action-recovery");
|
|
12
17
|
dotenv_1.default.config({ path: path_1.default.resolve(process.cwd(), '.env') });
|
|
13
18
|
const reports = [];
|
|
14
19
|
function normalizeError(error) {
|
|
@@ -106,85 +111,149 @@ function describeSuggestion(suggestion) {
|
|
|
106
111
|
return undefined;
|
|
107
112
|
}
|
|
108
113
|
}
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
case 'press':
|
|
128
|
-
return locator.press(String(firstArg ?? ''));
|
|
129
|
-
case 'check':
|
|
130
|
-
return locator.check();
|
|
131
|
-
case 'uncheck':
|
|
132
|
-
return locator.uncheck();
|
|
133
|
-
case 'selectOption':
|
|
134
|
-
return locator.selectOption(firstArg);
|
|
135
|
-
case 'setInputFiles':
|
|
136
|
-
return locator.setInputFiles(firstArg);
|
|
137
|
-
case 'focus':
|
|
138
|
-
return locator.focus();
|
|
139
|
-
case 'blur':
|
|
140
|
-
return locator.blur();
|
|
141
|
-
default:
|
|
142
|
-
throw new Error(`Action "${action}" cannot be safely replayed by the self-healer.`);
|
|
114
|
+
// Shared by both replay-failure sites (the text-based heal below and vision's own replay inside
|
|
115
|
+
// tryVisionRecovery) — only ever called when isActionRecoveryEnabled() is already true. Action
|
|
116
|
+
// recovery doesn't change *where* the element is, only how the already-resolved action on it is
|
|
117
|
+
// retried, so the caller passes in whichever selector description it already resolved (a text
|
|
118
|
+
// suggestion or a "visual match at (x,y)" description) to carry into the final report.
|
|
119
|
+
async function attemptActionRecoveryFallback(provider, locator, action, callArgs, replayError, timeoutMs, suggestedSelectorForReport, baseUsage) {
|
|
120
|
+
const actionRecovery = await (0, action_recovery_1.tryActionRecovery)(provider, locator, action, callArgs, normalizeError(replayError), timeoutMs);
|
|
121
|
+
const combinedUsage = baseUsage && actionRecovery.usage ? sumTokenUsage(baseUsage, actionRecovery.usage) : (actionRecovery.usage ?? baseUsage);
|
|
122
|
+
if (actionRecovery.healing) {
|
|
123
|
+
return {
|
|
124
|
+
healing: {
|
|
125
|
+
provider: actionRecovery.healing.provider,
|
|
126
|
+
warning: actionRecovery.healing.warning,
|
|
127
|
+
suggestedSelector: suggestedSelectorForReport,
|
|
128
|
+
result: actionRecovery.healing.result,
|
|
129
|
+
},
|
|
130
|
+
usage: combinedUsage,
|
|
131
|
+
};
|
|
143
132
|
}
|
|
133
|
+
return { healing: null, usage: combinedUsage, stage: actionRecovery.stage };
|
|
144
134
|
}
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
135
|
+
// Strictly a second try, called only after the ARIA/text-based attempt in healActionFailure has
|
|
136
|
+
// already run and failed to produce a working heal (including when there was no snapshot to
|
|
137
|
+
// search at all). Resolves the AI's screenshot-based point to a real DOM element by tagging it
|
|
138
|
+
// with a temporary attribute (see healer/vision.ts), then hands off to the exact same
|
|
139
|
+
// buildLocatorFromSuggestion/replayAction pipeline the text-based path uses — a tagged element is
|
|
140
|
+
// just another `{strategy:'css', css:'[data-tamash-heal-id="..."]'}` suggestion, so no separate
|
|
141
|
+
// replay logic is needed here.
|
|
142
|
+
async function tryVisionRecovery(provider, pageContext, action, description, callArgs, timeoutMs) {
|
|
143
|
+
const effectiveTimeoutMs = timeoutMs ?? 2000;
|
|
144
|
+
const capture = await (0, vision_1.captureElementForVision)(pageContext, effectiveTimeoutMs);
|
|
145
|
+
if (!capture) {
|
|
151
146
|
return { healing: null };
|
|
152
147
|
}
|
|
153
|
-
const result = await provider.
|
|
148
|
+
const result = await provider.suggestSelectorFromImage({ action, description, imageBase64: capture.imageBase64, timeoutMs });
|
|
154
149
|
if (!result) {
|
|
155
|
-
return { healing: null };
|
|
150
|
+
return { healing: null, stage: 'vision_provider_error' };
|
|
156
151
|
}
|
|
157
|
-
const {
|
|
158
|
-
if (!
|
|
159
|
-
return { healing: null, usage };
|
|
152
|
+
const { point, usage } = result;
|
|
153
|
+
if (!point.found) {
|
|
154
|
+
return { healing: null, usage, stage: 'vision_declined' };
|
|
160
155
|
}
|
|
161
|
-
const
|
|
162
|
-
if (!
|
|
163
|
-
return { healing: null, usage };
|
|
156
|
+
const id = await (0, vision_1.resolveElementAtVisionPoint)(pageContext, point, capture.box, capture.scroll, effectiveTimeoutMs);
|
|
157
|
+
if (!id) {
|
|
158
|
+
return { healing: null, usage, stage: 'vision_unresolvable' };
|
|
164
159
|
}
|
|
160
|
+
const locator = pageContext.locator((0, vision_1.visionTagSelector)(id));
|
|
165
161
|
try {
|
|
166
|
-
const replayResult = await replayAction(locator, action, callArgs);
|
|
162
|
+
const replayResult = await (0, replay_action_1.replayAction)(locator, action, callArgs);
|
|
167
163
|
return {
|
|
168
164
|
healing: {
|
|
169
165
|
provider: provider.name,
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
suggestedSelector: describeSuggestion(suggestion),
|
|
166
|
+
warning: `Recovered using ${provider.name} via visual match.`,
|
|
167
|
+
suggestedSelector: `visual match at (${point.x},${point.y})`,
|
|
173
168
|
result: replayResult,
|
|
174
169
|
},
|
|
175
170
|
usage,
|
|
176
171
|
};
|
|
177
172
|
}
|
|
178
|
-
catch {
|
|
179
|
-
|
|
173
|
+
catch (replayError) {
|
|
174
|
+
if (!isActionRecoveryEnabled()) {
|
|
175
|
+
return { healing: null, usage, stage: 'vision_replay_failed' };
|
|
176
|
+
}
|
|
177
|
+
const fallback = await attemptActionRecoveryFallback(provider, locator, action, callArgs, replayError, timeoutMs, `visual match at (${point.x},${point.y})`, usage);
|
|
178
|
+
return { ...fallback, usedActionRecovery: true };
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
await (0, vision_1.cleanupVisionTag)(pageContext, id);
|
|
180
182
|
}
|
|
181
183
|
}
|
|
184
|
+
// Every place a heal attempt can stop short of recovery — kept distinct (rather than collapsing
|
|
185
|
+
// everything into a single "failed") specifically so the report can show *how far* it got, not
|
|
186
|
+
// just that it didn't work. That's the difference between "the AI was never even asked" and "the
|
|
187
|
+
// AI took its best shot and was still wrong" — the second is real signal about where the healer
|
|
188
|
+
// itself needs to improve (prompt, snapshot quality, strategy coverage); the first is just config.
|
|
189
|
+
// Deliberately omits Python's "reentrant" stage: the replacement locator here is always built from
|
|
190
|
+
// the raw (un-proxied) page context captured in the Proxy's own closure, so a healed locator's own
|
|
191
|
+
// replay can never re-enter healActionFailure — this architecture can't hit that case at all.
|
|
192
|
+
const FAILURE_STAGE_MESSAGES = {
|
|
193
|
+
disabled: 'Healing is turned off (HEALER_ENABLED=false).',
|
|
194
|
+
'not-a-selector-issue': 'The element was found, but the action itself could not complete — this is not a selector problem, so self-healing was not attempted.',
|
|
195
|
+
no_snapshot: "Could not capture the page's accessibility snapshot to search.",
|
|
196
|
+
no_provider: 'No AI provider is configured (missing API key/model).',
|
|
197
|
+
provider_error: 'The AI call itself failed or returned nothing usable (network error, unparseable response, etc.) — see the console log for detail.',
|
|
198
|
+
ai_declined: 'The AI found nothing in the snapshot plausibly matching the description (explicit {"strategy":"none"}).',
|
|
199
|
+
unbuildable_suggestion: "The AI's suggested strategy couldn't be turned into a locator.",
|
|
200
|
+
replay_failed: 'The AI suggested a replacement locator, but acting on it failed too.',
|
|
201
|
+
// Vision stages: only ever reached after the stages above have already failed to recover —
|
|
202
|
+
// vision is strictly a second try (see tryVisionRecovery below), gated on the configured
|
|
203
|
+
// provider's model actually supporting image input (see providers/vision-models.ts).
|
|
204
|
+
vision_provider_error: 'The vision-capable AI call itself failed or returned nothing usable — see the console log for detail.',
|
|
205
|
+
vision_declined: 'The AI found nothing in the screenshot plausibly matching the description (explicit {"found":false}).',
|
|
206
|
+
vision_unresolvable: "The AI pointed at a location in the screenshot, but no real element could be resolved there (empty background or the page root itself).",
|
|
207
|
+
vision_replay_failed: 'The AI located a visual match in the screenshot, but acting on it failed too.',
|
|
208
|
+
// Action-recovery stages: only ever reached after a locator has already been successfully
|
|
209
|
+
// healed (text or vision) but replaying the original action on it still failed — opt-in via
|
|
210
|
+
// HEALER_ACTION_RECOVERY_ENABLED (see isActionRecoveryEnabled below), off by default.
|
|
211
|
+
action_recovery_declined: 'The element was found, but none of the known recovery tactics (scroll, force, wait, dispatch) would plausibly help.',
|
|
212
|
+
action_recovery_failed: 'A recovery tactic was attempted (or the AI call to pick one failed), but the action still could not be completed.',
|
|
213
|
+
};
|
|
214
|
+
function sumOptional(a, b) {
|
|
215
|
+
if (a === undefined && b === undefined) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
return (a ?? 0) + (b ?? 0);
|
|
219
|
+
}
|
|
220
|
+
// Combines usage from the text-based attempt and the vision fallback when both ran — both
|
|
221
|
+
// represent real spend on recovering this one failure, so a failed heal that tried both still
|
|
222
|
+
// needs the full cost reported, not just whichever attempt happened to run last.
|
|
223
|
+
function sumTokenUsage(a, b) {
|
|
224
|
+
return {
|
|
225
|
+
inputTokens: sumOptional(a.inputTokens, b.inputTokens),
|
|
226
|
+
outputTokens: sumOptional(a.outputTokens, b.outputTokens),
|
|
227
|
+
totalTokens: sumOptional(a.totalTokens, b.totalTokens),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// Distinguishes "the locator couldn't find a matching element" (a genuine selector problem, worth
|
|
231
|
+
// trying an AI-suggested replacement) from "the locator found one real element but the action on
|
|
232
|
+
// it couldn't complete" (hidden/disabled/covered/detached — not a selector problem at all).
|
|
233
|
+
// Swapping in a different selector for the latter wouldn't fix anything and risks clicking a
|
|
234
|
+
// completely different element while falsely reporting "healed".
|
|
235
|
+
//
|
|
236
|
+
// Verified against real Chromium output: a timeout with zero matches and a strict-mode
|
|
237
|
+
// multi-match violation both omit a concrete-element line entirely (e.g. "resolved to 2
|
|
238
|
+
// elements:" — no tag), while an actionability failure's call log always includes the resolved
|
|
239
|
+
// element itself, e.g. "locator resolved to <button id=\"x\">...". That line only appears once a
|
|
240
|
+
// single concrete element was actually found, so it's a reliable signal either way.
|
|
241
|
+
function isActionabilityFailure(reason) {
|
|
242
|
+
return /locator resolved to <\w/.test(reason);
|
|
243
|
+
}
|
|
182
244
|
// HEALER_ENABLED is the master on/off switch: unset or any value other than "false"/"0" leaves
|
|
183
245
|
// healing on, so existing setups keep working without needing to add the var at all.
|
|
184
246
|
function isHealingEnabled() {
|
|
185
247
|
const value = process.env.HEALER_ENABLED?.trim().toLowerCase();
|
|
186
248
|
return value !== 'false' && value !== '0';
|
|
187
249
|
}
|
|
250
|
+
// Opposite default polarity from isHealingEnabled() above, deliberately: this is a second,
|
|
251
|
+
// more speculative layer of intervention beyond selector healing (the AI is now choosing how to
|
|
252
|
+
// retry an action, not just where to find an element), so it requires explicit opt-in rather than
|
|
253
|
+
// defaulting on.
|
|
254
|
+
function isActionRecoveryEnabled() {
|
|
255
|
+
return process.env.HEALER_ACTION_RECOVERY_ENABLED?.trim().toLowerCase() === 'true';
|
|
256
|
+
}
|
|
188
257
|
function formatTokenUsage(usage) {
|
|
189
258
|
const parts = [];
|
|
190
259
|
if (usage.inputTokens !== undefined)
|
|
@@ -194,6 +263,42 @@ function formatTokenUsage(usage) {
|
|
|
194
263
|
const breakdown = parts.length ? ` (${parts.join(' + ')})` : '';
|
|
195
264
|
return usage.totalTokens !== undefined ? `${usage.totalTokens} tokens${breakdown}` : `tokens${breakdown}`;
|
|
196
265
|
}
|
|
266
|
+
// The single line every heal attempt prints to the console, regardless of outcome — the point is
|
|
267
|
+
// that a user watching test output can see *how* healing worked (or didn't) without having to dig
|
|
268
|
+
// into the HTML report's attached JSON: which provider was consulted, whether it fell back to
|
|
269
|
+
// vision, what it ended up suggesting (even if that suggestion then failed), what stage it stopped
|
|
270
|
+
// at, and how many tokens that cost. `report.warning` alone (the old sole console line) only ever
|
|
271
|
+
// carried some of this, and carried none of it consistently across every failure stage.
|
|
272
|
+
function formatConsoleLine(report) {
|
|
273
|
+
const outcome = report.healed ? 'HEALED' : 'NOT healed';
|
|
274
|
+
const meta = [
|
|
275
|
+
`provider=${report.provider}`,
|
|
276
|
+
`vision=${report.usedVision ? 'yes' : 'no'}`,
|
|
277
|
+
`actionRecovery=${report.usedActionRecovery ? 'yes' : 'no'}`,
|
|
278
|
+
];
|
|
279
|
+
if (report.suggestedSelector) {
|
|
280
|
+
meta.push(`suggested="${report.suggestedSelector}"`);
|
|
281
|
+
}
|
|
282
|
+
if (report.failureStage) {
|
|
283
|
+
meta.push(`stage=${report.failureStage}`);
|
|
284
|
+
}
|
|
285
|
+
if (report.tokenUsage) {
|
|
286
|
+
// formatTokenUsage() already reads as "432 tokens (292 input + 140 output)" on its own — used
|
|
287
|
+
// as-is elsewhere (e.g. the llm-tokens-used annotation), but doesn't need a "tokens=" prefix
|
|
288
|
+
// repeating the word here.
|
|
289
|
+
meta.push(formatTokenUsage(report.tokenUsage));
|
|
290
|
+
}
|
|
291
|
+
const description = report.description ? ` "${report.description}"` : '';
|
|
292
|
+
// Playwright error messages routinely carry an embedded multi-line call log — the full text is
|
|
293
|
+
// already preserved in `report.reason` and the attached JSON, so the console line (meant to stay
|
|
294
|
+
// scannable at a glance) only shows its first line.
|
|
295
|
+
const reasonFirstLine = report.reason.split('\n')[0];
|
|
296
|
+
// Leads with the source location, when known, the same way a compiler/lint error would — it's
|
|
297
|
+
// the single most actionable piece of information (which file to go fix), so it goes first
|
|
298
|
+
// rather than buried in the metadata bracket.
|
|
299
|
+
const location = report.sourceLocation ? `${report.sourceLocation} — ` : '';
|
|
300
|
+
return `[self-healer] ${location}${report.kind}.${report.action}${description} -> ${outcome} [${meta.join(', ')}] — ${reasonFirstLine}`;
|
|
301
|
+
}
|
|
197
302
|
function attachReportToRunningTest(report) {
|
|
198
303
|
try {
|
|
199
304
|
const testInfo = test_1.test.info();
|
|
@@ -217,36 +322,156 @@ async function healActionFailure(context) {
|
|
|
217
322
|
const reason = normalizeError(context.error);
|
|
218
323
|
const callArgs = context.callArgs ?? [];
|
|
219
324
|
const healingEnabled = isHealingEnabled();
|
|
220
|
-
|
|
221
|
-
|
|
325
|
+
const actionabilityFailure = isActionabilityFailure(reason);
|
|
326
|
+
const attemptHealing = healingEnabled && !actionabilityFailure;
|
|
327
|
+
// Set as soon as we know *why* it didn't fully recover; cleared back to undefined only once
|
|
328
|
+
// healing actually succeeds.
|
|
329
|
+
let failureStage;
|
|
330
|
+
if (!healingEnabled) {
|
|
331
|
+
failureStage = 'disabled';
|
|
332
|
+
}
|
|
333
|
+
else if (actionabilityFailure) {
|
|
334
|
+
failureStage = 'not-a-selector-issue';
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
failureStage = 'no_snapshot'; // default; overwritten as we get further
|
|
338
|
+
}
|
|
339
|
+
// Skip the ARIA snapshot capture and provider lookup entirely when disabled, or when the
|
|
340
|
+
// element was already found and the failure is an actionability problem rather than a selector
|
|
341
|
+
// problem — no point paying for a snapshot (or an LLM call) just to throw the result away.
|
|
222
342
|
const actionTimeoutMs = resolveActionTimeoutMs();
|
|
223
|
-
const pageContext =
|
|
224
|
-
const ariaSnapshot =
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
343
|
+
const pageContext = attemptHealing ? (context.frameScope ?? (await resolvePageContext(context.target))) : undefined;
|
|
344
|
+
const ariaSnapshot = attemptHealing ? await captureAriaSnapshot(pageContext, actionTimeoutMs ?? 2000) : undefined;
|
|
345
|
+
let healing = null;
|
|
346
|
+
let usage;
|
|
347
|
+
let suggestedSelector;
|
|
348
|
+
let providerName;
|
|
349
|
+
let usedVision = false;
|
|
350
|
+
let usedActionRecovery = false;
|
|
351
|
+
// pageContext alone (not `&& ariaSnapshot`) is enough to enter this block now: the vision
|
|
352
|
+
// fallback below needs a provider and a pageContext to screenshot, but has no use for an ARIA
|
|
353
|
+
// snapshot at all — it's specifically useful for the `no_snapshot` case too.
|
|
354
|
+
if (attemptHealing && pageContext) {
|
|
355
|
+
const provider = (0, providers_1.getHealProvider)();
|
|
356
|
+
if (!provider) {
|
|
357
|
+
failureStage = 'no_provider';
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
providerName = provider.name;
|
|
361
|
+
if (ariaSnapshot) {
|
|
362
|
+
// Token usage is captured whenever the provider call itself succeeded, independent of
|
|
363
|
+
// whether the suggested selector actually worked — the tokens were spent either way, so a
|
|
364
|
+
// failed heal still needs to be reported for cost tracking.
|
|
365
|
+
failureStage = 'provider_error';
|
|
366
|
+
const result = await provider.suggestSelector({ action: context.action, description: context.description, ariaSnapshot, timeoutMs: actionTimeoutMs });
|
|
367
|
+
if (result) {
|
|
368
|
+
usage = result.usage;
|
|
369
|
+
const { suggestion } = result;
|
|
370
|
+
if (!suggestion || suggestion.strategy === 'none') {
|
|
371
|
+
failureStage = 'ai_declined';
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
const locator = buildLocatorFromSuggestion(pageContext, suggestion);
|
|
375
|
+
if (!locator) {
|
|
376
|
+
failureStage = 'unbuildable_suggestion';
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
// Set *before* the replay attempt (not just on success) — an AI suggestion that
|
|
380
|
+
// turned out to also fail is exactly the case worth seeing in the report, not
|
|
381
|
+
// silently discarding in favor of the original error alone.
|
|
382
|
+
suggestedSelector = describeSuggestion(suggestion);
|
|
383
|
+
failureStage = 'replay_failed';
|
|
384
|
+
try {
|
|
385
|
+
const replayResult = await (0, replay_action_1.replayAction)(locator, context.action, callArgs);
|
|
386
|
+
healing = {
|
|
387
|
+
provider: provider.name,
|
|
388
|
+
warning: `Recovered using ${provider.name} (${suggestedSelector ?? 'suggested selector'}).`,
|
|
389
|
+
suggestedSelector,
|
|
390
|
+
result: replayResult,
|
|
391
|
+
};
|
|
392
|
+
failureStage = undefined;
|
|
393
|
+
}
|
|
394
|
+
catch (replayError) {
|
|
395
|
+
if (isActionRecoveryEnabled()) {
|
|
396
|
+
const fallback = await attemptActionRecoveryFallback(provider, locator, context.action, callArgs, replayError, actionTimeoutMs, suggestedSelector, usage);
|
|
397
|
+
usage = fallback.usage;
|
|
398
|
+
usedActionRecovery = true;
|
|
399
|
+
healing = fallback.healing;
|
|
400
|
+
failureStage = fallback.healing ? undefined : fallback.stage;
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
healing = null;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Strictly a second try, after the ARIA/text-based attempt above has already run and
|
|
411
|
+
// failed to produce a working heal — never a first resort, since the text path is cheaper
|
|
412
|
+
// and already handles the common case.
|
|
413
|
+
if (!healing && provider.supportsVision) {
|
|
414
|
+
const visionOutcome = await tryVisionRecovery(provider, pageContext, context.action, context.description, callArgs, actionTimeoutMs);
|
|
415
|
+
if (visionOutcome.usage) {
|
|
416
|
+
usage = usage ? sumTokenUsage(usage, visionOutcome.usage) : visionOutcome.usage;
|
|
417
|
+
}
|
|
418
|
+
if (visionOutcome.usedActionRecovery) {
|
|
419
|
+
usedActionRecovery = true;
|
|
420
|
+
}
|
|
421
|
+
if (visionOutcome.healing) {
|
|
422
|
+
healing = visionOutcome.healing;
|
|
423
|
+
usedVision = true;
|
|
424
|
+
failureStage = undefined;
|
|
425
|
+
}
|
|
426
|
+
else if (visionOutcome.stage) {
|
|
427
|
+
usedVision = true;
|
|
428
|
+
failureStage = visionOutcome.stage;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
let warning;
|
|
434
|
+
if (healing) {
|
|
435
|
+
warning = healing.warning;
|
|
436
|
+
}
|
|
437
|
+
else if (failureStage === 'replay_failed') {
|
|
438
|
+
warning = `Action "${context.action}" failed: ${reason}. AI suggested "${suggestedSelector}", but that failed too.`;
|
|
439
|
+
}
|
|
440
|
+
else if (failureStage === 'vision_replay_failed') {
|
|
441
|
+
warning = `Action "${context.action}" failed: ${reason}. AI located a visual match, but acting on it failed too.`;
|
|
442
|
+
}
|
|
443
|
+
else if (failureStage) {
|
|
444
|
+
warning = `Action "${context.action}" failed: ${reason}. (${FAILURE_STAGE_MESSAGES[failureStage]})`;
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
warning = `Action "${context.action}" failed: ${reason}.`;
|
|
448
|
+
}
|
|
233
449
|
const report = {
|
|
234
450
|
action: context.action,
|
|
235
451
|
kind: context.kind,
|
|
236
452
|
description: context.description,
|
|
237
|
-
provider: healing?.provider ?? (healingEnabled ? 'none' : 'disabled'),
|
|
238
|
-
tokenUsage:
|
|
239
|
-
healed: Boolean(healing
|
|
453
|
+
provider: healing?.provider ?? providerName ?? (actionabilityFailure ? 'skipped' : (healingEnabled ? 'none' : 'disabled')),
|
|
454
|
+
tokenUsage: usage,
|
|
455
|
+
healed: Boolean(healing),
|
|
240
456
|
warning,
|
|
241
457
|
reason,
|
|
242
|
-
suggestedSelector: healing?.suggestedSelector,
|
|
458
|
+
suggestedSelector: healing?.suggestedSelector ?? suggestedSelector,
|
|
459
|
+
failureStage,
|
|
460
|
+
usedVision,
|
|
461
|
+
usedActionRecovery,
|
|
462
|
+
sourceLocation: context.sourceLocation,
|
|
243
463
|
};
|
|
244
464
|
reports.push(report);
|
|
245
|
-
|
|
465
|
+
if (report.healed) {
|
|
466
|
+
console.log(formatConsoleLine(report));
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
console.warn(formatConsoleLine(report));
|
|
470
|
+
}
|
|
246
471
|
attachReportToRunningTest(report);
|
|
247
472
|
return {
|
|
248
473
|
report,
|
|
249
|
-
recovered: Boolean(healing
|
|
474
|
+
recovered: Boolean(healing),
|
|
250
475
|
result: healing?.result,
|
|
251
476
|
};
|
|
252
477
|
}
|
package/dist/healer/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/healer/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/healer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/healer/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/healer/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,YAAY,EAAsH,MAAM,SAAS,CAAC;AAQpL,wBAAgB,uBAAuB,IAAI,YAAY,GAAG,IAAI,CA8H7D"}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.createAnthropicProvider = createAnthropicProvider;
|
|
7
7
|
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
8
8
|
const prompt_1 = require("./prompt");
|
|
9
|
+
const vision_models_1 = require("./vision-models");
|
|
9
10
|
// Fallback only — normally overridden by SuggestSelectorInput.timeoutMs, which mirrors the
|
|
10
11
|
// Playwright project's configured actionTimeout so the healer never outlasts the action budget.
|
|
11
12
|
const REQUEST_TIMEOUT_MS = 15000;
|
|
@@ -16,8 +17,10 @@ function createAnthropicProvider() {
|
|
|
16
17
|
return null;
|
|
17
18
|
}
|
|
18
19
|
const client = new sdk_1.default({ apiKey });
|
|
20
|
+
const supportsVision = (0, vision_models_1.isVisionCapableModel)('anthropic', model);
|
|
19
21
|
return {
|
|
20
22
|
name: `anthropic:${model}`,
|
|
23
|
+
supportsVision,
|
|
21
24
|
async suggestSelector(input) {
|
|
22
25
|
try {
|
|
23
26
|
const response = await client.messages.create({
|
|
@@ -47,6 +50,73 @@ function createAnthropicProvider() {
|
|
|
47
50
|
return null;
|
|
48
51
|
}
|
|
49
52
|
},
|
|
53
|
+
async suggestSelectorFromImage(input) {
|
|
54
|
+
try {
|
|
55
|
+
const response = await client.messages.create({
|
|
56
|
+
model,
|
|
57
|
+
max_tokens: 1024,
|
|
58
|
+
system: prompt_1.VISION_SYSTEM_PROMPT,
|
|
59
|
+
messages: [
|
|
60
|
+
{
|
|
61
|
+
role: 'user',
|
|
62
|
+
// Image before text, per Anthropic's own guidance for single-image prompts.
|
|
63
|
+
content: [
|
|
64
|
+
{ type: 'image', source: { type: 'base64', media_type: 'image/png', data: input.imageBase64 } },
|
|
65
|
+
{ type: 'text', text: (0, prompt_1.buildVisionUserPrompt)(input) },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
}, { timeout: input.timeoutMs ?? REQUEST_TIMEOUT_MS });
|
|
70
|
+
const textBlock = response.content.find((block) => block.type === 'text');
|
|
71
|
+
if (!textBlock || textBlock.type !== 'text') {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const point = (0, prompt_1.parseVisionSuggestion)(textBlock.text);
|
|
75
|
+
if (!point) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const inputTokens = response.usage.input_tokens;
|
|
79
|
+
const outputTokens = response.usage.output_tokens;
|
|
80
|
+
return {
|
|
81
|
+
point,
|
|
82
|
+
usage: { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens },
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
87
|
+
console.warn(`[self-healer] Anthropic vision provider error: ${reason}`);
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
async suggestActionTactic(input) {
|
|
92
|
+
try {
|
|
93
|
+
const response = await client.messages.create({
|
|
94
|
+
model,
|
|
95
|
+
max_tokens: 1024,
|
|
96
|
+
system: prompt_1.ACTION_RECOVERY_SYSTEM_PROMPT,
|
|
97
|
+
messages: [{ role: 'user', content: (0, prompt_1.buildActionRecoveryUserPrompt)(input) }],
|
|
98
|
+
}, { timeout: input.timeoutMs ?? REQUEST_TIMEOUT_MS });
|
|
99
|
+
const textBlock = response.content.find((block) => block.type === 'text');
|
|
100
|
+
if (!textBlock || textBlock.type !== 'text') {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
const tactic = (0, prompt_1.parseActionTacticSuggestion)(textBlock.text);
|
|
104
|
+
if (!tactic) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const inputTokens = response.usage.input_tokens;
|
|
108
|
+
const outputTokens = response.usage.output_tokens;
|
|
109
|
+
return {
|
|
110
|
+
tactic,
|
|
111
|
+
usage: { inputTokens, outputTokens, totalTokens: inputTokens + outputTokens },
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
116
|
+
console.warn(`[self-healer] Anthropic action-recovery provider error: ${reason}`);
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
},
|
|
50
120
|
};
|
|
51
121
|
}
|
|
52
122
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/healer/providers/anthropic.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA0C;AAE1C,
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/healer/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/healer/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/healer/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,YAAY,EAAsH,MAAM,SAAS,CAAC;AAQpL,wBAAgB,oBAAoB,IAAI,YAAY,GAAG,IAAI,CAgL1D"}
|