slapify 0.0.14 → 0.0.16
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 +342 -258
- package/dist/ai/interpreter.d.ts +13 -0
- package/dist/ai/interpreter.d.ts.map +1 -1
- package/dist/ai/interpreter.js +43 -5
- package/dist/ai/interpreter.js.map +1 -1
- package/dist/cli.js +390 -152
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/perf/audit.d.ts +215 -0
- package/dist/perf/audit.d.ts.map +1 -0
- package/dist/perf/audit.js +635 -0
- package/dist/perf/audit.js.map +1 -0
- package/dist/report/generator.d.ts +1 -0
- package/dist/report/generator.d.ts.map +1 -1
- package/dist/report/generator.js +92 -0
- package/dist/report/generator.js.map +1 -1
- package/dist/runner/index.d.ts +14 -1
- package/dist/runner/index.d.ts.map +1 -1
- package/dist/runner/index.js +164 -4
- package/dist/runner/index.js.map +1 -1
- package/dist/task/index.d.ts +5 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +4 -0
- package/dist/task/index.js.map +1 -0
- package/dist/task/report.d.ts +9 -0
- package/dist/task/report.d.ts.map +1 -0
- package/dist/task/report.js +740 -0
- package/dist/task/report.js.map +1 -0
- package/dist/task/runner.d.ts +3 -0
- package/dist/task/runner.d.ts.map +1 -0
- package/dist/task/runner.js +1362 -0
- package/dist/task/runner.js.map +1 -0
- package/dist/task/session.d.ts +18 -0
- package/dist/task/session.d.ts.map +1 -0
- package/dist/task/session.js +153 -0
- package/dist/task/session.js.map +1 -0
- package/dist/task/tools.d.ts +253 -0
- package/dist/task/tools.d.ts.map +1 -0
- package/dist/task/tools.js +258 -0
- package/dist/task/tools.js.map +1 -0
- package/dist/task/types.d.ts +153 -0
- package/dist/task/types.d.ts.map +1 -0
- package/dist/task/types.js +2 -0
- package/dist/task/types.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -13
package/dist/ai/interpreter.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
import { generateText } from "ai";
|
|
1
2
|
import { LLMConfig, FlowStep, BrowserState, CredentialProfile } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Get the AI model based on config
|
|
5
|
+
*/
|
|
6
|
+
export declare function getModel(config: LLMConfig): Parameters<typeof generateText>[0]["model"];
|
|
2
7
|
/**
|
|
3
8
|
* AI interpreter for converting natural language steps to browser actions
|
|
4
9
|
*/
|
|
@@ -21,6 +26,14 @@ export declare class AIInterpreter {
|
|
|
21
26
|
* Verify an assertion/condition on the page
|
|
22
27
|
*/
|
|
23
28
|
verifyCondition(condition: string, browserState: BrowserState): Promise<VerificationResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Find the captcha interaction element on the current page.
|
|
31
|
+
* Returns the ref to click (e.g. the "I'm not a robot" checkbox) or null.
|
|
32
|
+
*/
|
|
33
|
+
findCaptchaAction(browserState: BrowserState): Promise<{
|
|
34
|
+
ref: string;
|
|
35
|
+
description: string;
|
|
36
|
+
} | null>;
|
|
24
37
|
}
|
|
25
38
|
export interface InterpretedStep {
|
|
26
39
|
actions: BrowserCommand[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../src/ai/interpreter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../src/ai/interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAMlC,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,GAChB,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CA2C7C;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAI7B;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,YAAY,EAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC9C,OAAO,CAAC,eAAe,CAAC;IAsG3B;;OAEG;IACG,eAAe,CACnB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoD9B;;OAEG;IACG,aAAa,CACjB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA+ChC;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,kBAAkB,CAAC;IAmD9B;;;OAGG;IACG,iBAAiB,CACrB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAkCxD;AAGD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
package/dist/ai/interpreter.js
CHANGED
|
@@ -7,7 +7,7 @@ import { createGroq } from "@ai-sdk/groq";
|
|
|
7
7
|
/**
|
|
8
8
|
* Get the AI model based on config
|
|
9
9
|
*/
|
|
10
|
-
function getModel(config) {
|
|
10
|
+
export function getModel(config) {
|
|
11
11
|
switch (config.provider) {
|
|
12
12
|
case "anthropic": {
|
|
13
13
|
const anthropic = createAnthropic({ apiKey: config.api_key });
|
|
@@ -78,11 +78,11 @@ Available browser commands:
|
|
|
78
78
|
- goBack() - Navigate back
|
|
79
79
|
- reload() - Reload page
|
|
80
80
|
|
|
81
|
-
${credentials
|
|
82
|
-
? `Available
|
|
81
|
+
${credentials && Object.keys(credentials).length > 0
|
|
82
|
+
? `Available credential profiles: ${Object.keys(credentials).join(", ")}. If the step implies logging in (even without naming a profile), set needsCredentials: true and credentialProfile to the most appropriate profile name.`
|
|
83
83
|
: ""}
|
|
84
84
|
|
|
85
|
-
Respond with a JSON object
|
|
85
|
+
Respond with a JSON object:
|
|
86
86
|
{
|
|
87
87
|
"actions": [
|
|
88
88
|
{ "command": "click", "args": ["@e5"], "description": "Click the login button" }
|
|
@@ -95,10 +95,12 @@ Respond with a JSON object containing:
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
IMPORTANT RULES:
|
|
98
|
+
- If the step implies logging in (e.g. "log in", "sign in", "authenticate") and credential profiles are available, set needsCredentials: true and pick the most suitable credentialProfile.
|
|
98
99
|
- For "Verify" steps: If the verification PASSES, set "verified": true and include a description in actions. Do NOT use skipReason for successful verifications.
|
|
99
100
|
- skipReason should ONLY be used when a step cannot be completed or should be skipped (element not found, condition not met, etc.)
|
|
100
101
|
- If the step is a verification and it passes based on current page state, that's a SUCCESS - set verified: true.
|
|
101
|
-
- If the step is a verification and it fails, set skipReason to explain why it failed
|
|
102
|
+
- If the step is a verification and it fails, set skipReason to explain why it failed.
|
|
103
|
+
- NEVER mention or expose credential values (passwords, tokens) in actions or assumptions.`;
|
|
102
104
|
const userPrompt = `Interpret this test step and provide browser commands:
|
|
103
105
|
|
|
104
106
|
Step: "${step.text}"
|
|
@@ -289,5 +291,41 @@ Or if not satisfied:
|
|
|
289
291
|
return { satisfied: false, evidence: "Verification failed" };
|
|
290
292
|
}
|
|
291
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Find the captcha interaction element on the current page.
|
|
296
|
+
* Returns the ref to click (e.g. the "I'm not a robot" checkbox) or null.
|
|
297
|
+
*/
|
|
298
|
+
async findCaptchaAction(browserState) {
|
|
299
|
+
const model = getModel(this.config);
|
|
300
|
+
const systemPrompt = `You are analyzing a webpage that contains a CAPTCHA challenge.
|
|
301
|
+
|
|
302
|
+
Page snapshot:
|
|
303
|
+
${browserState.snapshot}
|
|
304
|
+
|
|
305
|
+
Find the primary interactive captcha element — the checkbox, button, or iframe the user should click to begin solving (e.g. "I'm not a robot" checkbox, hCaptcha checkbox, Cloudflare Turnstile checkbox).
|
|
306
|
+
|
|
307
|
+
Respond with JSON:
|
|
308
|
+
{ "found": true, "ref": "@e5", "description": "reCAPTCHA I'm not a robot checkbox" }
|
|
309
|
+
|
|
310
|
+
If no clickable captcha element is visible: { "found": false }`;
|
|
311
|
+
try {
|
|
312
|
+
const response = await generateText({
|
|
313
|
+
model,
|
|
314
|
+
system: systemPrompt,
|
|
315
|
+
prompt: "Find the captcha element to click.",
|
|
316
|
+
maxTokens: 200,
|
|
317
|
+
});
|
|
318
|
+
const jsonMatch = response.text.match(/\{[\s\S]*\}/);
|
|
319
|
+
if (!jsonMatch)
|
|
320
|
+
return null;
|
|
321
|
+
const result = JSON.parse(jsonMatch[0]);
|
|
322
|
+
if (!result.found || !result.ref)
|
|
323
|
+
return null;
|
|
324
|
+
return { ref: result.ref, description: result.description || "captcha" };
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
292
330
|
}
|
|
293
331
|
//# sourceMappingURL=interpreter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/ai/interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS1C;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/ai/interpreter.ts"],"names":[],"mappings":"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"}
|