@bini-bar-labs/atomic-web-agent-core 1.0.0 → 1.0.1
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 +58 -1
- package/dist/AWAgent/AWAgent.d.ts +2 -0
- package/dist/AWAgent/AWAgent.d.ts.map +1 -1
- package/dist/AWAgent/AWAgent.js +71 -1
- package/dist/AWAgent/AWAgent.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/get-DOM-snapshot.tool.d.ts +8 -1
- package/dist/tools/get-DOM-snapshot.tool.d.ts.map +1 -1
- package/dist/tools/get-DOM-snapshot.tool.js +29 -3
- package/dist/tools/get-DOM-snapshot.tool.js.map +1 -1
- package/dist/tools/utils/accessibility-snapshot.util.d.ts +4 -1
- package/dist/tools/utils/accessibility-snapshot.util.d.ts.map +1 -1
- package/dist/tools/utils/accessibility-snapshot.util.js +41 -4
- package/dist/tools/utils/accessibility-snapshot.util.js.map +1 -1
- package/dist/tools/validate-condition.tool.d.ts +12 -0
- package/dist/tools/validate-condition.tool.d.ts.map +1 -0
- package/dist/tools/validate-condition.tool.js +23 -0
- package/dist/tools/validate-condition.tool.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -50,6 +50,37 @@ await agent.run("Navigate to https://example.com and take a screenshot");
|
|
|
50
50
|
await agent.close();
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
+
## Page Validation
|
|
54
|
+
|
|
55
|
+
The `test()` method enables you to validate conditions on the current webpage using natural language. It returns `true` if the condition is met, `false` otherwise.
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// Example: Check if user is logged in
|
|
59
|
+
const isLoggedIn = await agent.test("The user is logged in");
|
|
60
|
+
console.log(isLoggedIn); // true or false
|
|
61
|
+
|
|
62
|
+
// Example: Verify form validation
|
|
63
|
+
const hasError = await agent.test("An error message is displayed");
|
|
64
|
+
|
|
65
|
+
// Example: Check element state
|
|
66
|
+
const isButtonDisabled = await agent.test("The submit button is disabled");
|
|
67
|
+
|
|
68
|
+
// Example: Verify content presence
|
|
69
|
+
const hasWelcomeMessage = await agent.test("A welcome message appears on the page");
|
|
70
|
+
|
|
71
|
+
// Example: Complex state validation
|
|
72
|
+
const isCheckoutReady = await agent.test(
|
|
73
|
+
"The shopping cart has items and the checkout button is clickable"
|
|
74
|
+
);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Best Practices for test() Conditions
|
|
78
|
+
|
|
79
|
+
- **Be specific and measurable**: "The login button is visible" is better than "The page looks good"
|
|
80
|
+
- **Focus on observable state**: Describe what should be visible or present on the page
|
|
81
|
+
- **Avoid subjective interpretations**: Use concrete, verifiable conditions
|
|
82
|
+
- **Keep it atomic**: Test one condition at a time for clearer results
|
|
83
|
+
|
|
53
84
|
## API Reference
|
|
54
85
|
|
|
55
86
|
### AWAgent
|
|
@@ -75,6 +106,7 @@ new AWAgent(
|
|
|
75
106
|
|
|
76
107
|
- `init(launchOptions?: LaunchOptions, contextOptions?: BrowserContextOptions): Promise<void>` - Initialize the browser and agent
|
|
77
108
|
- `run(message: string): Promise<void>` - Execute a task with the agent
|
|
109
|
+
- `test(condition: string): Promise<boolean>` - Validate a condition on the current page and return true/false
|
|
78
110
|
- `close(): Promise<void>` - Close the browser and clean up resources
|
|
79
111
|
|
|
80
112
|
### Exports
|
|
@@ -85,6 +117,7 @@ export { type PlaywrightPage } from "@bini-bar-labs/atomic-web-agent-core";
|
|
|
85
117
|
export { createTool } from "@bini-bar-labs/atomic-web-agent-core";
|
|
86
118
|
export { type AgentTool } from "@bini-bar-labs/atomic-web-agent-core";
|
|
87
119
|
export { ElementLocatorRegistry } from "@bini-bar-labs/atomic-web-agent-core";
|
|
120
|
+
export { validateConditionTool } from "@bini-bar-labs/atomic-web-agent-core";
|
|
88
121
|
export {
|
|
89
122
|
type ElementSnapshot,
|
|
90
123
|
type PageSnapshot,
|
|
@@ -100,9 +133,33 @@ The agent comes with several pre-configured tools:
|
|
|
100
133
|
- **Click**: Click elements by ID or position
|
|
101
134
|
- **Input**: Type text into input fields
|
|
102
135
|
- **Screenshot**: Capture page screenshots
|
|
103
|
-
- **DOM Snapshot**: Get accessibility-based page structure
|
|
136
|
+
- **DOM Snapshot**: Get accessibility-based page structure (with optional extra tags)
|
|
104
137
|
- **Wait**: Wait for specified durations
|
|
105
138
|
- **Console Print**: Output messages to console
|
|
139
|
+
- **Validation**: Return validation results (used by `test()` method)
|
|
140
|
+
|
|
141
|
+
### DOM Snapshot with Custom Elements
|
|
142
|
+
|
|
143
|
+
The DOM Snapshot tool is intelligent and can include additional HTML elements beyond the default interactive elements. The AI can request specific tags to be included in the snapshot.
|
|
144
|
+
|
|
145
|
+
**How it works:**
|
|
146
|
+
- By default, the snapshot includes only interactive elements (buttons, inputs, links, etc.)
|
|
147
|
+
- The AI can specify additional HTML tags to include using the `extraTags` parameter
|
|
148
|
+
- This is useful for validation tasks that need to examine text content or specific elements
|
|
149
|
+
|
|
150
|
+
**Example use case:**
|
|
151
|
+
When you ask the agent to validate text content on a page, the AI will automatically:
|
|
152
|
+
1. Call `GetDOMSnapshot` with `extraTags: ["p", "span", "h1", "h2"]`
|
|
153
|
+
2. Receive a snapshot that includes both interactive elements AND the specified text elements
|
|
154
|
+
3. Validate the condition based on the complete snapshot
|
|
155
|
+
|
|
156
|
+
**Common tags the AI might request:**
|
|
157
|
+
- Text content: `p`, `span`, `div`
|
|
158
|
+
- Headings: `h1`, `h2`, `h3`, `h4`, `h5`, `h6`
|
|
159
|
+
- Lists: `li`, `ul`, `ol`
|
|
160
|
+
- Labels: `label`
|
|
161
|
+
|
|
162
|
+
This feature enables more accurate validation and interaction with webpage content without overwhelming the context with unnecessary elements.
|
|
106
163
|
|
|
107
164
|
## Custom Tools
|
|
108
165
|
|
|
@@ -29,7 +29,9 @@ export declare class AWAgent {
|
|
|
29
29
|
getCurrentPage(): Page;
|
|
30
30
|
getAllPages(): Page[];
|
|
31
31
|
do(task: string): Promise<void>;
|
|
32
|
+
test(condition: string): Promise<boolean>;
|
|
32
33
|
close(): Promise<void>;
|
|
34
|
+
private extractValidationResult;
|
|
33
35
|
private createTools;
|
|
34
36
|
}
|
|
35
37
|
//# sourceMappingURL=AWAgent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AWAgent.d.ts","sourceRoot":"","sources":["../../src/AWAgent/AWAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAKL,IAAI,
|
|
1
|
+
{"version":3,"file":"AWAgent.d.ts","sourceRoot":"","sources":["../../src/AWAgent/AWAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAKL,IAAI,EAIL,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,KAAK,qBAAqB,EAE1B,KAAK,aAAa,EAClB,KAAK,IAAI,EACV,MAAM,YAAY,CAAC;AASpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,aAAa,CAKnB;IACF,OAAO,CAAC,WAAW,CAAgC;gBAGjD,KAAK,EAAE,aAAa,GAAG,UAAU,EACjC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACvC,aAAa,CAAC,EAAE;YACd,kBAAkB,CAAC,EAAE,CACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,sBAAsB,KAC7B,SAAS,CAAC;SAChB,CAAC;KACH;IASG,IAAI,CACR,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,aAAa,CAAC;QAC9B,cAAc,CAAC,EAAE,qBAAqB,CAAC;KACxC;IAWG,OAAO;IASb,cAAc;IAOd,WAAW;IAQL,EAAE,CAAC,IAAI,EAAE,MAAM;IAuBf,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiDzC,KAAK;IAeX,OAAO,CAAC,uBAAuB;IA+C/B,OAAO,CAAC,WAAW;CAiBpB"}
|
package/dist/AWAgent/AWAgent.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChatAnthropic } from "@langchain/anthropic";
|
|
2
2
|
import { ChatOpenAI } from "@langchain/openai";
|
|
3
|
-
import { createAgent, HumanMessage, SystemMessage, Tool, } from "langchain";
|
|
3
|
+
import { createAgent, HumanMessage, SystemMessage, Tool, ToolMessage, AIMessage, } from "langchain";
|
|
4
4
|
import { chromium, } from "playwright";
|
|
5
5
|
import { clickByElementIdTool } from "../tools/click-by-element-id.tool.js";
|
|
6
6
|
import { clickByPositionTool } from "../tools/click-by-position.tool.js";
|
|
@@ -9,6 +9,7 @@ import { getPageScreenShotTool } from "../tools/get-page-screenshot.tool.js";
|
|
|
9
9
|
import { inputByElementIdTool } from "../tools/input-by-element-id.tool.js";
|
|
10
10
|
import { navigateTool } from "../tools/navigate.tool.js";
|
|
11
11
|
import { printToConsoleTool } from "../tools/print-to-console.tool.js";
|
|
12
|
+
import { validateConditionTool } from "../tools/validate-condition.tool.js";
|
|
12
13
|
import { ElementLocatorRegistry } from "../tools/utils/element-registry.util.js";
|
|
13
14
|
import { waitTool } from "../tools/wait.tool.js";
|
|
14
15
|
import { loggingMiddleware } from "./middlewares/logging-calls.middleware.js";
|
|
@@ -80,6 +81,43 @@ export class AWAgent {
|
|
|
80
81
|
});
|
|
81
82
|
return console.log(response.messages.at(-1).content);
|
|
82
83
|
}
|
|
84
|
+
async test(condition) {
|
|
85
|
+
if (!this.currentPageContext) {
|
|
86
|
+
throw new Error("Agent is not initialized");
|
|
87
|
+
}
|
|
88
|
+
// Create a temporary agent with validation tools
|
|
89
|
+
const validationTools = [
|
|
90
|
+
...this.createTools(this.currentPageContext),
|
|
91
|
+
validateConditionTool(),
|
|
92
|
+
];
|
|
93
|
+
const validationSystemPrompt = new SystemMessage(`You are a webpage validation agent. Your task is to determine if a given condition is true or false on the current webpage.
|
|
94
|
+
|
|
95
|
+
Instructions:
|
|
96
|
+
1. First, use GetDOMSnapshot to examine the page structure
|
|
97
|
+
2. If needed, use GetPageScreenShot for visual confirmation
|
|
98
|
+
3. Analyze whether the condition is met based on the available evidence
|
|
99
|
+
4. Call ReturnValidationResult with your boolean conclusion and reasoning
|
|
100
|
+
5. IMPORTANT: After calling ReturnValidationResult, your task is complete. Do NOT take any further actions.
|
|
101
|
+
|
|
102
|
+
Be precise and factual. Only return true if you have clear evidence the condition is met.
|
|
103
|
+
If you cannot determine the result with confidence, return false with an explanation.
|
|
104
|
+
|
|
105
|
+
Your final action MUST be to call ReturnValidationResult. Do not continue after that.`);
|
|
106
|
+
const validationAgent = createAgent({
|
|
107
|
+
model: this.model,
|
|
108
|
+
tools: validationTools,
|
|
109
|
+
systemPrompt: validationSystemPrompt,
|
|
110
|
+
middleware: [loggingMiddleware, trimMessagesHistoryMiddleware],
|
|
111
|
+
});
|
|
112
|
+
const response = await validationAgent.invoke({
|
|
113
|
+
messages: [new HumanMessage(`Validate: ${condition}`)],
|
|
114
|
+
}, {
|
|
115
|
+
recursionLimit: 10, // Limit iterations to prevent infinite loops
|
|
116
|
+
});
|
|
117
|
+
// Parse the validation result from the agent's messages
|
|
118
|
+
const result = this.extractValidationResult(response.messages);
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
83
121
|
async close() {
|
|
84
122
|
if (this.context) {
|
|
85
123
|
for (const page of this.context.pages()) {
|
|
@@ -94,6 +132,38 @@ export class AWAgent {
|
|
|
94
132
|
this.browser = null;
|
|
95
133
|
}
|
|
96
134
|
}
|
|
135
|
+
extractValidationResult(messages) {
|
|
136
|
+
// Find the ReturnValidationResult tool call in messages
|
|
137
|
+
// Iterate from the end to find the most recent tool call
|
|
138
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
139
|
+
const message = messages[i];
|
|
140
|
+
// Check if this is a tool message with the validation result
|
|
141
|
+
if (message instanceof ToolMessage &&
|
|
142
|
+
message.name === "ReturnValidationResult") {
|
|
143
|
+
try {
|
|
144
|
+
const content = JSON.parse(typeof message.content === "string"
|
|
145
|
+
? message.content
|
|
146
|
+
: JSON.stringify(message.content));
|
|
147
|
+
return content.result;
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
throw new Error(`Failed to parse validation result: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Also check tool calls in AI messages
|
|
154
|
+
if (message instanceof AIMessage &&
|
|
155
|
+
message.tool_calls &&
|
|
156
|
+
Array.isArray(message.tool_calls)) {
|
|
157
|
+
for (const toolCall of message.tool_calls) {
|
|
158
|
+
if (toolCall.name === "ReturnValidationResult" && toolCall.args) {
|
|
159
|
+
return toolCall.args
|
|
160
|
+
.result;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
throw new Error("Validation result not found in agent response. The agent did not call ReturnValidationResult.");
|
|
166
|
+
}
|
|
97
167
|
createTools(page) {
|
|
98
168
|
return [
|
|
99
169
|
// Element ID-based tools (recommended for use with accessibility snapshots)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AWAgent.js","sourceRoot":"","sources":["../../src/AWAgent/AWAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,YAAY,EAEZ,aAAa,EACb,IAAI,
|
|
1
|
+
{"version":3,"file":"AWAgent.js","sourceRoot":"","sources":["../../src/AWAgent/AWAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { tool as createTool } from "langchain";
|
|
|
4
4
|
export { type AgentTool } from "./AWAgent/AWAgent.types.js";
|
|
5
5
|
export { ElementLocatorRegistry } from "./tools/utils/element-registry.util.js";
|
|
6
6
|
export { type ElementSnapshot, type PageSnapshot, generateAccessibilitySnapshot, } from "./tools/utils/accessibility-snapshot.util.js";
|
|
7
|
+
export { validateConditionTool } from "./tools/validate-condition.tool.js";
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,KAAK,IAAI,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,6BAA6B,GAC9B,MAAM,8CAA8C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,KAAK,IAAI,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,6BAA6B,GAC9B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,4 +4,5 @@ export { tool as createTool } from "langchain";
|
|
|
4
4
|
export {} from "./AWAgent/AWAgent.types.js";
|
|
5
5
|
export { ElementLocatorRegistry } from "./tools/utils/element-registry.util.js";
|
|
6
6
|
export { generateAccessibilitySnapshot, } from "./tools/utils/accessibility-snapshot.util.js";
|
|
7
|
+
export { validateConditionTool } from "./tools/validate-condition.tool.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAA+B,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAGL,6BAA6B,GAC9B,MAAM,8CAA8C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAA+B,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAGL,6BAA6B,GAC9B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { type Page } from "playwright";
|
|
2
|
+
import { z } from "zod";
|
|
2
3
|
import { type ElementLocatorRegistry } from "./utils/element-registry.util.js";
|
|
3
|
-
export declare function getDOMSnapshotTool(page: Page, elementRegistry: ElementLocatorRegistry): import("langchain").
|
|
4
|
+
export declare function getDOMSnapshotTool(page: Page, elementRegistry: ElementLocatorRegistry): import("langchain").DynamicStructuredTool<z.ZodObject<{
|
|
5
|
+
extraTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
6
|
+
}, z.core.$strip>, {
|
|
7
|
+
extraTags?: string[];
|
|
8
|
+
}, {
|
|
9
|
+
extraTags?: string[] | undefined;
|
|
10
|
+
}, string>;
|
|
4
11
|
//# sourceMappingURL=get-DOM-snapshot.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-DOM-snapshot.tool.d.ts","sourceRoot":"","sources":["../../src/tools/get-DOM-snapshot.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"get-DOM-snapshot.tool.d.ts","sourceRoot":"","sources":["../../src/tools/get-DOM-snapshot.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,sBAAsB;;;gBAGI,MAAM,EAAE;;;WAwDpD"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { tool } from "langchain";
|
|
2
2
|
import {} from "playwright";
|
|
3
|
+
import { z } from "zod";
|
|
3
4
|
import { generateAccessibilitySnapshot } from "./utils/accessibility-snapshot.util.js";
|
|
4
5
|
import {} from "./utils/element-registry.util.js";
|
|
5
6
|
export function getDOMSnapshotTool(page, elementRegistry) {
|
|
6
|
-
return tool(async () => {
|
|
7
|
+
return tool(async ({ extraTags = [] }) => {
|
|
7
8
|
console.log("Taking accessibility-based DOM snapshot...");
|
|
9
|
+
if (extraTags.length > 0) {
|
|
10
|
+
console.log(` - Including extra tags: ${extraTags.join(", ")}`);
|
|
11
|
+
}
|
|
8
12
|
// Generate accessibility snapshot with visual metadata
|
|
9
|
-
const snapshot = await generateAccessibilitySnapshot(page, elementRegistry.getMap());
|
|
13
|
+
const snapshot = await generateAccessibilitySnapshot(page, elementRegistry.getMap(), extraTags);
|
|
10
14
|
// Convert to JSON string for the model
|
|
11
15
|
const snapshotJson = JSON.stringify(snapshot, null, 2);
|
|
12
16
|
const snapshotSize = new Blob([snapshotJson]).size;
|
|
@@ -20,7 +24,29 @@ export function getDOMSnapshotTool(page, elementRegistry) {
|
|
|
20
24
|
description: `Get an accessibility-based snapshot of the current webpage.
|
|
21
25
|
Returns a structured JSON representation with interactive elements, their roles, names, and visual properties.
|
|
22
26
|
Each element has a unique 'id' that can be used with action tools (ClickByElementId, InputByElementId).
|
|
23
|
-
|
|
27
|
+
|
|
28
|
+
By default, the snapshot includes only visible, interactive elements like buttons, links, text inputs, etc.
|
|
29
|
+
|
|
30
|
+
You can optionally include additional HTML elements by specifying their tag names in the 'extraTags' parameter.
|
|
31
|
+
This is useful for validation tasks that need to examine text content or specific elements.
|
|
32
|
+
|
|
33
|
+
Examples:
|
|
34
|
+
- To include paragraph text: extraTags: ["p"]
|
|
35
|
+
- To include headings: extraTags: ["h1", "h2", "h3"]
|
|
36
|
+
- To include spans and divs: extraTags: ["span", "div"]
|
|
37
|
+
- To include multiple types: extraTags: ["p", "span", "h1", "h2", "label"]
|
|
38
|
+
|
|
39
|
+
Common tags you might want to include:
|
|
40
|
+
- Text content: "p", "span", "div"
|
|
41
|
+
- Headings: "h1", "h2", "h3", "h4", "h5", "h6"
|
|
42
|
+
- Lists: "li", "ul", "ol"
|
|
43
|
+
- Labels: "label"`,
|
|
44
|
+
schema: z.object({
|
|
45
|
+
extraTags: z
|
|
46
|
+
.array(z.string())
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("Optional array of additional HTML tag names to include in the snapshot (e.g., ['p', 'span', 'h1'])"),
|
|
49
|
+
}),
|
|
24
50
|
});
|
|
25
51
|
}
|
|
26
52
|
//# sourceMappingURL=get-DOM-snapshot.tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-DOM-snapshot.tool.js","sourceRoot":"","sources":["../../src/tools/get-DOM-snapshot.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAa,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAA+B,MAAM,kCAAkC,CAAC;AAE/E,MAAM,UAAU,kBAAkB,CAChC,IAAU,EACV,eAAuC;IAEvC,OAAO,IAAI,CACT,KAAK,
|
|
1
|
+
{"version":3,"file":"get-DOM-snapshot.tool.js","sourceRoot":"","sources":["../../src/tools/get-DOM-snapshot.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAa,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAA+B,MAAM,kCAAkC,CAAC;AAE/E,MAAM,UAAU,kBAAkB,CAChC,IAAU,EACV,eAAuC;IAEvC,OAAO,IAAI,CACT,KAAK,EAAE,EAAE,SAAS,GAAG,EAAE,EAA4B,EAAE,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,uDAAuD;QACvD,MAAM,QAAQ,GAAG,MAAM,6BAA6B,CAClD,IAAI,EACJ,eAAe,CAAC,MAAM,EAAE,EACxB,SAAS,CACV,CAAC;QAEF,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,sBAAsB,YAAY,QAAQ,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAExC,OAAO,YAAY,CAAC;IACtB,CAAC,EACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;kBAmBD;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,SAAS,EAAE,CAAC;iBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CACP,oGAAoG,CACrG;SACJ,CAAC;KACH,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -29,6 +29,9 @@ export interface PageSnapshot {
|
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Generates an accessibility-based snapshot of the page with visual metadata
|
|
32
|
+
* @param page - The Playwright page to snapshot
|
|
33
|
+
* @param locatorMap - Map to store element locators
|
|
34
|
+
* @param extraTags - Optional array of additional HTML tags to include (e.g., ["p", "span", "h1"])
|
|
32
35
|
*/
|
|
33
|
-
export declare function generateAccessibilitySnapshot(page: Page, locatorMap: Map<string, Locator
|
|
36
|
+
export declare function generateAccessibilitySnapshot(page: Page, locatorMap: Map<string, Locator>, extraTags?: string[]): Promise<PageSnapshot>;
|
|
34
37
|
//# sourceMappingURL=accessibility-snapshot.util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility-snapshot.util.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/accessibility-snapshot.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,IAAI,EACA;QACE,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,GACD,SAAS,CAAC;IACd,QAAQ,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAsGD
|
|
1
|
+
{"version":3,"file":"accessibility-snapshot.util.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/accessibility-snapshot.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,IAAI,EACA;QACE,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,GACD,SAAS,CAAC;IACd,QAAQ,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAsGD;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,GAAE,MAAM,EAAO,GACvB,OAAO,CAAC,YAAY,CAAC,CAmOvB"}
|
|
@@ -73,14 +73,17 @@ async function enrichElement(page, elementData, locatorMap) {
|
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* Generates an accessibility-based snapshot of the page with visual metadata
|
|
76
|
+
* @param page - The Playwright page to snapshot
|
|
77
|
+
* @param locatorMap - Map to store element locators
|
|
78
|
+
* @param extraTags - Optional array of additional HTML tags to include (e.g., ["p", "span", "h1"])
|
|
76
79
|
*/
|
|
77
|
-
export async function generateAccessibilitySnapshot(page, locatorMap) {
|
|
80
|
+
export async function generateAccessibilitySnapshot(page, locatorMap, extraTags = []) {
|
|
78
81
|
// Reset counter for consistent IDs
|
|
79
82
|
elementIdCounter = 0;
|
|
80
83
|
// Clear previous locator map
|
|
81
84
|
locatorMap.clear();
|
|
82
85
|
// Extract all interactive elements with XPath locators
|
|
83
|
-
const elementsData = await page.evaluate(() => {
|
|
86
|
+
const elementsData = await page.evaluate((additionalTags) => {
|
|
84
87
|
const results = [];
|
|
85
88
|
function getXPath(element) {
|
|
86
89
|
if (element.id) {
|
|
@@ -139,6 +142,33 @@ export async function generateAccessibilitySnapshot(page, locatorMap) {
|
|
|
139
142
|
return "main";
|
|
140
143
|
if (tagName === "dialog")
|
|
141
144
|
return "dialog";
|
|
145
|
+
// Text content elements
|
|
146
|
+
if (tagName === "p")
|
|
147
|
+
return "paragraph";
|
|
148
|
+
if (tagName === "span")
|
|
149
|
+
return "text";
|
|
150
|
+
if (tagName === "div")
|
|
151
|
+
return "text";
|
|
152
|
+
if (tagName === "h1")
|
|
153
|
+
return "heading";
|
|
154
|
+
if (tagName === "h2")
|
|
155
|
+
return "heading";
|
|
156
|
+
if (tagName === "h3")
|
|
157
|
+
return "heading";
|
|
158
|
+
if (tagName === "h4")
|
|
159
|
+
return "heading";
|
|
160
|
+
if (tagName === "h5")
|
|
161
|
+
return "heading";
|
|
162
|
+
if (tagName === "h6")
|
|
163
|
+
return "heading";
|
|
164
|
+
if (tagName === "label")
|
|
165
|
+
return "label";
|
|
166
|
+
if (tagName === "li")
|
|
167
|
+
return "listitem";
|
|
168
|
+
if (tagName === "ul")
|
|
169
|
+
return "list";
|
|
170
|
+
if (tagName === "ol")
|
|
171
|
+
return "list";
|
|
142
172
|
return "generic";
|
|
143
173
|
}
|
|
144
174
|
function getName(element) {
|
|
@@ -164,10 +194,15 @@ export async function generateAccessibilitySnapshot(page, locatorMap) {
|
|
|
164
194
|
return (labels[0].textContent || "").trim();
|
|
165
195
|
}
|
|
166
196
|
}
|
|
197
|
+
// For text elements (p, span, div, headings), return text content
|
|
198
|
+
const tagName = element.tagName.toLowerCase();
|
|
199
|
+
if (["p", "span", "div", "h1", "h2", "h3", "h4", "h5", "h6", "label", "li"].includes(tagName)) {
|
|
200
|
+
return (element.textContent || "").trim().substring(0, 200);
|
|
201
|
+
}
|
|
167
202
|
return "";
|
|
168
203
|
}
|
|
169
204
|
// Find all interactive elements
|
|
170
|
-
const
|
|
205
|
+
const baseSelectors = [
|
|
171
206
|
"button",
|
|
172
207
|
"a[href]",
|
|
173
208
|
"input",
|
|
@@ -181,6 +216,8 @@ export async function generateAccessibilitySnapshot(page, locatorMap) {
|
|
|
181
216
|
"[role='combobox']",
|
|
182
217
|
"[onclick]",
|
|
183
218
|
];
|
|
219
|
+
// Add additional tags if provided
|
|
220
|
+
const selectors = [...baseSelectors, ...additionalTags];
|
|
184
221
|
const elements = document.querySelectorAll(selectors.join(", "));
|
|
185
222
|
elements.forEach((element) => {
|
|
186
223
|
const role = inferRole(element);
|
|
@@ -221,7 +258,7 @@ export async function generateAccessibilitySnapshot(page, locatorMap) {
|
|
|
221
258
|
});
|
|
222
259
|
});
|
|
223
260
|
return results;
|
|
224
|
-
});
|
|
261
|
+
}, extraTags);
|
|
225
262
|
// Get viewport size
|
|
226
263
|
const viewportSize = page.viewportSize() || { width: 1280, height: 800 };
|
|
227
264
|
// Enrich each element with visual metadata
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessibility-snapshot.util.js","sourceRoot":"","sources":["../../../src/tools/utils/accessibility-snapshot.util.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"accessibility-snapshot.util.js","sourceRoot":"","sources":["../../../src/tools/utils/accessibility-snapshot.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare function validateConditionTool(): import("langchain").DynamicStructuredTool<z.ZodObject<{
|
|
3
|
+
result: z.ZodBoolean;
|
|
4
|
+
reasoning: z.ZodString;
|
|
5
|
+
}, z.core.$strip>, {
|
|
6
|
+
result: boolean;
|
|
7
|
+
reasoning: string;
|
|
8
|
+
}, {
|
|
9
|
+
result: boolean;
|
|
10
|
+
reasoning: string;
|
|
11
|
+
}, string>;
|
|
12
|
+
//# sourceMappingURL=validate-condition.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-condition.tool.d.ts","sourceRoot":"","sources":["../../src/tools/validate-condition.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wBAAgB,qBAAqB;;;;YAEC,OAAO;eAAa,MAAM;;;;WAoB/D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { tool } from "langchain";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
export function validateConditionTool() {
|
|
4
|
+
return tool(({ result, reasoning }) => {
|
|
5
|
+
console.log(`Validation result: ${result}`);
|
|
6
|
+
console.log(`Reasoning: ${reasoning}`);
|
|
7
|
+
return JSON.stringify({ result, reasoning });
|
|
8
|
+
}, {
|
|
9
|
+
name: "ReturnValidationResult",
|
|
10
|
+
description: `Use this tool to return the final validation result after examining the page.
|
|
11
|
+
Call this tool once you have determined whether the condition is true or false.
|
|
12
|
+
This is a TERMINAL action - after calling this tool, your task is complete and you should not take any further actions.
|
|
13
|
+
|
|
14
|
+
Parameters:
|
|
15
|
+
- result: true if the condition is met, false otherwise
|
|
16
|
+
- reasoning: Brief explanation of why the condition is true/false`,
|
|
17
|
+
schema: z.object({
|
|
18
|
+
result: z.boolean().describe("Whether the condition is met"),
|
|
19
|
+
reasoning: z.string().describe("Brief explanation of the result"),
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=validate-condition.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-condition.tool.js","sourceRoot":"","sources":["../../src/tools/validate-condition.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CACT,CAAC,EAAE,MAAM,EAAE,SAAS,EAA0C,EAAE,EAAE;QAChE,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC,EACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE;;;;;;kEAM+C;QAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAClE,CAAC;KACH,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED