Skip to content

Commit 0e14c02

Browse files
author
SentienceDEV
committed
support for live overlay
1 parent d61e845 commit 0e14c02

File tree

1 file changed

+40
-3
lines changed

1 file changed

+40
-3
lines changed

sentience/agent.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,21 +163,39 @@ def act(
163163
if snap.status != "success":
164164
raise RuntimeError(f"Snapshot failed: {snap.error}")
165165

166+
# Apply element filtering based on goal
167+
filtered_elements = self.filter_elements(snap, goal)
168+
166169
# Emit snapshot trace event if tracer is enabled
167170
if self.tracer:
171+
# Include element data for live overlay visualization
172+
# Use filtered_elements for overlay (only relevant elements)
173+
elements_data = [
174+
{
175+
"id": el.id,
176+
"bbox": {
177+
"x": el.bbox.x,
178+
"y": el.bbox.y,
179+
"width": el.bbox.width,
180+
"height": el.bbox.height,
181+
},
182+
"role": el.role,
183+
"text": el.text[:50] if el.text else "", # Truncate for brevity
184+
}
185+
for el in filtered_elements[:50] # Limit to first 50 for performance
186+
]
187+
168188
self.tracer.emit(
169189
"snapshot",
170190
{
171191
"url": snap.url,
172192
"element_count": len(snap.elements),
173193
"timestamp": snap.timestamp,
194+
"elements": elements_data, # Add element data for overlay
174195
},
175196
step_id=step_id,
176197
)
177198

178-
# Apply element filtering based on goal
179-
filtered_elements = self.filter_elements(snap, goal)
180-
181199
# Create filtered snapshot
182200
filtered_snap = Snapshot(
183201
status=snap.status,
@@ -242,6 +260,23 @@ def act(
242260
# Emit action execution trace event if tracer is enabled
243261
if self.tracer:
244262
post_url = self.browser.page.url if self.browser.page else None
263+
264+
# Include element data for live overlay visualization
265+
elements_data = [
266+
{
267+
"id": el.id,
268+
"bbox": {
269+
"x": el.bbox.x,
270+
"y": el.bbox.y,
271+
"width": el.bbox.width,
272+
"height": el.bbox.height,
273+
},
274+
"role": el.role,
275+
"text": el.text[:50] if el.text else "",
276+
}
277+
for el in filtered_snap.elements[:50]
278+
]
279+
245280
self.tracer.emit(
246281
"action",
247282
{
@@ -251,6 +286,8 @@ def act(
251286
"outcome": result.outcome,
252287
"duration_ms": duration_ms,
253288
"post_url": post_url,
289+
"elements": elements_data, # Add element data for overlay
290+
"target_element_id": result.element_id, # Highlight target in red
254291
},
255292
step_id=step_id,
256293
)

0 commit comments

Comments
 (0)