sentienceapi 0.95.0 → 0.96.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 +51 -56
- package/dist/actions.d.ts +3 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +40 -2
- package/dist/actions.js.map +1 -1
- package/dist/agent-runtime.d.ts +28 -0
- package/dist/agent-runtime.d.ts.map +1 -1
- package/dist/agent-runtime.js +200 -19
- package/dist/agent-runtime.js.map +1 -1
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +1 -0
- package/dist/agent.js.map +1 -1
- package/dist/backends/actions.d.ts +2 -1
- package/dist/backends/actions.d.ts.map +1 -1
- package/dist/backends/actions.js +34 -5
- package/dist/backends/actions.js.map +1 -1
- package/dist/cursor-policy.d.ts +41 -0
- package/dist/cursor-policy.d.ts.map +1 -0
- package/dist/cursor-policy.js +81 -0
- package/dist/cursor-policy.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/llm-provider.d.ts +56 -0
- package/dist/llm-provider.d.ts.map +1 -1
- package/dist/llm-provider.js +240 -1
- package/dist/llm-provider.js.map +1 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +91 -4
- package/dist/query.js.map +1 -1
- package/dist/snapshot.js +4 -0
- package/dist/snapshot.js.map +1 -1
- package/dist/tracing/types.d.ts +4 -0
- package/dist/tracing/types.d.ts.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/action-executor.d.ts.map +1 -1
- package/dist/utils/action-executor.js +1 -0
- package/dist/utils/action-executor.js.map +1 -1
- package/dist/utils/trace-event-builder.d.ts.map +1 -1
- package/dist/utils/trace-event-builder.js +3 -0
- package/dist/utils/trace-event-builder.js.map +1 -1
- package/dist/verification.d.ts +8 -0
- package/dist/verification.d.ts.map +1 -1
- package/dist/verification.js +192 -4
- package/dist/verification.js.map +1 -1
- package/package.json +1 -1
- package/src/extension/injected_api.js +133 -14
- package/src/extension/manifest.json +1 -1
- package/src/extension/pkg/sentience_core.d.ts +22 -22
- package/src/extension/pkg/sentience_core.js +192 -144
- package/src/extension/pkg/sentience_core_bg.wasm +0 -0
- package/src/extension/release.json +30 -30
package/README.md
CHANGED
|
@@ -26,7 +26,16 @@ npm run build
|
|
|
26
26
|
Use `AgentRuntime` to add Jest-style assertions to your agent loops. Verify browser state, check task completion, and get clear feedback on what's working:
|
|
27
27
|
|
|
28
28
|
```typescript
|
|
29
|
-
import {
|
|
29
|
+
import {
|
|
30
|
+
SentienceBrowser,
|
|
31
|
+
AgentRuntime,
|
|
32
|
+
urlContains,
|
|
33
|
+
exists,
|
|
34
|
+
allOf,
|
|
35
|
+
isEnabled,
|
|
36
|
+
isChecked,
|
|
37
|
+
valueEquals,
|
|
38
|
+
} from 'sentienceapi';
|
|
30
39
|
import { createTracer } from 'sentienceapi';
|
|
31
40
|
import { Page } from 'playwright';
|
|
32
41
|
|
|
@@ -52,6 +61,20 @@ runtime.assert(urlContains('example.com'), 'on_correct_domain');
|
|
|
52
61
|
runtime.assert(exists('role=heading'), 'has_heading');
|
|
53
62
|
runtime.assert(allOf([exists('role=button'), exists('role=link')]), 'has_interactive_elements');
|
|
54
63
|
|
|
64
|
+
// v1: state-aware assertions (when Gateway refinement is enabled)
|
|
65
|
+
runtime.assert(isEnabled('role=button'), 'button_enabled');
|
|
66
|
+
runtime.assert(isChecked("role=checkbox name~'subscribe'"), 'subscribe_checked_if_present');
|
|
67
|
+
runtime.assert(
|
|
68
|
+
valueEquals("role=textbox name~'email'", 'user@example.com'),
|
|
69
|
+
'email_value_if_present'
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// v2: retry loop with snapshot confidence gating + exhaustion
|
|
73
|
+
const ok = await runtime
|
|
74
|
+
.check(exists('role=heading'), 'heading_eventually_visible', true)
|
|
75
|
+
.eventually({ timeoutMs: 10_000, pollMs: 250, minConfidence: 0.7, maxSnapshotAttempts: 3 });
|
|
76
|
+
console.log('eventually() result:', ok);
|
|
77
|
+
|
|
55
78
|
// Check task completion
|
|
56
79
|
if (runtime.assertDone(exists("text~'Example'"), 'task_complete')) {
|
|
57
80
|
console.log('✅ Task completed!');
|
|
@@ -60,7 +83,7 @@ if (runtime.assertDone(exists("text~'Example'"), 'task_complete')) {
|
|
|
60
83
|
console.log(`Task done: ${runtime.isTaskDone}`);
|
|
61
84
|
```
|
|
62
85
|
|
|
63
|
-
**See
|
|
86
|
+
**See examples:** [`examples/asserts/`](examples/asserts/)
|
|
64
87
|
|
|
65
88
|
## 🚀 Quick Start: Choose Your Abstraction Level
|
|
66
89
|
|
|
@@ -316,69 +339,41 @@ console.log(`Task done: ${runtime.isTaskDone}`);
|
|
|
316
339
|
---
|
|
317
340
|
|
|
318
341
|
<details>
|
|
319
|
-
<summary><h2>💼 Real-World Example:
|
|
342
|
+
<summary><h2>💼 Real-World Example: Assertion-driven navigation</h2></summary>
|
|
320
343
|
|
|
321
|
-
This example
|
|
344
|
+
This example shows how to use **assertions + `.eventually()`** to make an agent loop resilient:
|
|
322
345
|
|
|
323
346
|
```typescript
|
|
324
|
-
import { SentienceBrowser,
|
|
347
|
+
import { SentienceBrowser, AgentRuntime, urlContains, exists } from 'sentienceapi';
|
|
348
|
+
import { createTracer } from 'sentienceapi';
|
|
325
349
|
|
|
326
350
|
async function main() {
|
|
327
|
-
const browser =
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
el.bbox.y < 600 // First row
|
|
349
|
-
);
|
|
350
|
-
|
|
351
|
-
if (products.length > 0) {
|
|
352
|
-
// Sort by position (left to right, top to bottom)
|
|
353
|
-
products.sort((a, b) => a.bbox.y - b.bbox.y || a.bbox.x - b.bbox.x);
|
|
354
|
-
const firstProduct = products[0];
|
|
355
|
-
|
|
356
|
-
console.log(`Clicking: ${firstProduct.text}`);
|
|
357
|
-
const result = await click(browser, firstProduct.id);
|
|
358
|
-
|
|
359
|
-
// Wait for product page
|
|
360
|
-
await browser.getPage().waitForLoadState('networkidle');
|
|
361
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
362
|
-
|
|
363
|
-
// Find and click "Add to Cart" button
|
|
364
|
-
const productSnap = await snapshot(browser);
|
|
365
|
-
const addToCart = find(productSnap, 'role=button text~"add to cart"');
|
|
366
|
-
|
|
367
|
-
if (addToCart) {
|
|
368
|
-
const cartResult = await click(browser, addToCart.id);
|
|
369
|
-
console.log(`Added to cart: ${cartResult.success}`);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
} finally {
|
|
373
|
-
await browser.close();
|
|
374
|
-
}
|
|
351
|
+
const browser = await SentienceBrowser.create({ apiKey: process.env.SENTIENCE_API_KEY });
|
|
352
|
+
const tracer = await createTracer({ runId: 'verified-run', uploadTrace: false });
|
|
353
|
+
|
|
354
|
+
const adapter = {
|
|
355
|
+
snapshot: async (_page: any, options?: Record<string, any>) => {
|
|
356
|
+
return await browser.snapshot(options);
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
const runtime = new AgentRuntime(adapter as any, browser.getPage() as any, tracer);
|
|
360
|
+
|
|
361
|
+
await browser.getPage().goto('https://example.com');
|
|
362
|
+
runtime.beginStep('Verify we are on the right page');
|
|
363
|
+
|
|
364
|
+
await runtime
|
|
365
|
+
.check(urlContains('example.com'), 'on_domain', true)
|
|
366
|
+
.eventually({ timeoutMs: 10_000, pollMs: 250, minConfidence: 0.7, maxSnapshotAttempts: 3 });
|
|
367
|
+
|
|
368
|
+
runtime.assert(exists('role=heading'), 'heading_present');
|
|
369
|
+
|
|
370
|
+
await tracer.close();
|
|
371
|
+
await browser.close();
|
|
375
372
|
}
|
|
376
373
|
|
|
377
|
-
main();
|
|
374
|
+
main().catch(console.error);
|
|
378
375
|
```
|
|
379
376
|
|
|
380
|
-
**📖 See the complete tutorial:** [Amazon Shopping Guide](../docs/AMAZON_SHOPPING_GUIDE.md)
|
|
381
|
-
|
|
382
377
|
</details>
|
|
383
378
|
|
|
384
379
|
---
|
package/dist/actions.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { IBrowser } from './protocols/browser-protocol';
|
|
5
5
|
import { ActionResult, BBox } from './types';
|
|
6
|
+
import { CursorPolicy } from './cursor-policy';
|
|
6
7
|
export interface ClickRect {
|
|
7
8
|
x: number;
|
|
8
9
|
y: number;
|
|
@@ -34,7 +35,7 @@ export interface ClickRect {
|
|
|
34
35
|
* }
|
|
35
36
|
* ```
|
|
36
37
|
*/
|
|
37
|
-
export declare function click(browser: IBrowser, elementId: number, useMouse?: boolean, takeSnapshot?: boolean): Promise<ActionResult>;
|
|
38
|
+
export declare function click(browser: IBrowser, elementId: number, useMouse?: boolean, takeSnapshot?: boolean, cursorPolicy?: CursorPolicy): Promise<ActionResult>;
|
|
38
39
|
/**
|
|
39
40
|
* Type text into an input element
|
|
40
41
|
*
|
|
@@ -143,5 +144,5 @@ export declare function press(browser: IBrowser, key: string, takeSnapshot?: boo
|
|
|
143
144
|
* await clickRect(browser, { x: 100, y: 200, w: 50, h: 30 }, true, 3.0);
|
|
144
145
|
* ```
|
|
145
146
|
*/
|
|
146
|
-
export declare function clickRect(browser: IBrowser, rect: ClickRect | BBox, highlight?: boolean, highlightDuration?: number, takeSnapshot?: boolean): Promise<ActionResult>;
|
|
147
|
+
export declare function clickRect(browser: IBrowser, rect: ClickRect | BBox, highlight?: boolean, highlightDuration?: number, takeSnapshot?: boolean, cursorPolicy?: CursorPolicy): Promise<ActionResult>;
|
|
147
148
|
//# sourceMappingURL=actions.d.ts.map
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAY,IAAI,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAY,IAAI,EAAE,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAwB,MAAM,iBAAiB,CAAC;AAoCrE,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,KAAK,CACzB,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,OAAc,EACxB,YAAY,GAAE,OAAe,EAC7B,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,YAAY,CAAC,CA2GvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,OAAe,EAC7B,OAAO,GAAE,MAAU,GAClB,OAAO,CAAC,YAAY,CAAC,CAoDvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,QAAQ,GAAG,SAAS,GAAG,MAAiB,EAClD,KAAK,GAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAoB,EACxD,YAAY,GAAE,OAAe,GAC5B,OAAO,CAAC,YAAY,CAAC,CAwDvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,KAAK,CACzB,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,OAAe,GAC5B,OAAO,CAAC,YAAY,CAAC,CAgCvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,SAAS,GAAG,IAAI,EACtB,SAAS,GAAE,OAAc,EACzB,iBAAiB,GAAE,MAAY,EAC/B,YAAY,GAAE,OAAe,EAC7B,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgGvB"}
|
package/dist/actions.js
CHANGED
|
@@ -10,6 +10,35 @@ exports.press = press;
|
|
|
10
10
|
exports.clickRect = clickRect;
|
|
11
11
|
const snapshot_1 = require("./snapshot");
|
|
12
12
|
const browser_evaluator_1 = require("./utils/browser-evaluator");
|
|
13
|
+
const cursor_policy_1 = require("./cursor-policy");
|
|
14
|
+
const cursorPosByPage = new WeakMap();
|
|
15
|
+
async function humanMoveIfEnabled(page, target, cursorPolicy) {
|
|
16
|
+
if (!cursorPolicy || cursorPolicy.mode !== 'human')
|
|
17
|
+
return undefined;
|
|
18
|
+
const prev = cursorPosByPage.get(page);
|
|
19
|
+
let from;
|
|
20
|
+
if (prev) {
|
|
21
|
+
from = prev;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const vp = page.viewportSize ? page.viewportSize() : null;
|
|
25
|
+
from = vp ? { x: vp.width / 2, y: vp.height / 2 } : { x: 0, y: 0 };
|
|
26
|
+
}
|
|
27
|
+
const meta = (0, cursor_policy_1.buildHumanCursorPath)([from.x, from.y], [target.x, target.y], cursorPolicy);
|
|
28
|
+
const pts = meta.path || [];
|
|
29
|
+
const durationMs = meta.duration_ms || 0;
|
|
30
|
+
const perStepMs = durationMs > 0 ? durationMs / Math.max(1, pts.length) : 0;
|
|
31
|
+
for (const p of pts) {
|
|
32
|
+
await page.mouse.move(p.x, p.y);
|
|
33
|
+
if (perStepMs > 0)
|
|
34
|
+
await page.waitForTimeout(perStepMs);
|
|
35
|
+
}
|
|
36
|
+
if (meta.pause_before_click_ms > 0) {
|
|
37
|
+
await page.waitForTimeout(meta.pause_before_click_ms);
|
|
38
|
+
}
|
|
39
|
+
cursorPosByPage.set(page, { x: target.x, y: target.y });
|
|
40
|
+
return meta;
|
|
41
|
+
}
|
|
13
42
|
/**
|
|
14
43
|
* Highlight a rectangle with a red border overlay
|
|
15
44
|
*/
|
|
@@ -82,7 +111,7 @@ async function highlightRect(browser, rect, durationSec = 2.0) {
|
|
|
82
111
|
* }
|
|
83
112
|
* ```
|
|
84
113
|
*/
|
|
85
|
-
async function click(browser, elementId, useMouse = true, takeSnapshot = false) {
|
|
114
|
+
async function click(browser, elementId, useMouse = true, takeSnapshot = false, cursorPolicy) {
|
|
86
115
|
const page = browser.getPage();
|
|
87
116
|
if (!page) {
|
|
88
117
|
throw new Error('Browser not started. Call start() first.');
|
|
@@ -90,6 +119,7 @@ async function click(browser, elementId, useMouse = true, takeSnapshot = false)
|
|
|
90
119
|
const startTime = Date.now();
|
|
91
120
|
const urlBefore = page.url();
|
|
92
121
|
let success;
|
|
122
|
+
let cursorMeta;
|
|
93
123
|
if (useMouse) {
|
|
94
124
|
// Hybrid approach: Get element bbox from snapshot, calculate center, use mouse.click()
|
|
95
125
|
try {
|
|
@@ -99,9 +129,12 @@ async function click(browser, elementId, useMouse = true, takeSnapshot = false)
|
|
|
99
129
|
// Calculate center of element bbox
|
|
100
130
|
const centerX = element.bbox.x + element.bbox.width / 2;
|
|
101
131
|
const centerY = element.bbox.y + element.bbox.height / 2;
|
|
132
|
+
cursorMeta = await humanMoveIfEnabled(page, { x: centerX, y: centerY }, cursorPolicy);
|
|
102
133
|
// Use Playwright's native mouse click for realistic simulation
|
|
103
134
|
await page.mouse.click(centerX, centerY);
|
|
104
135
|
success = true;
|
|
136
|
+
// Keep cursor position even when not in human mode (for future moves)
|
|
137
|
+
cursorPosByPage.set(page, { x: centerX, y: centerY });
|
|
105
138
|
}
|
|
106
139
|
else {
|
|
107
140
|
// Fallback to JS click if element not found in snapshot
|
|
@@ -167,6 +200,7 @@ async function click(browser, elementId, useMouse = true, takeSnapshot = false)
|
|
|
167
200
|
outcome,
|
|
168
201
|
url_changed: urlChanged,
|
|
169
202
|
snapshot_after: snapshotAfter,
|
|
203
|
+
cursor: cursorMeta,
|
|
170
204
|
error: success
|
|
171
205
|
? undefined
|
|
172
206
|
: { code: 'click_failed', reason: 'Element not found or not clickable' },
|
|
@@ -392,7 +426,7 @@ async function press(browser, key, takeSnapshot = false) {
|
|
|
392
426
|
* await clickRect(browser, { x: 100, y: 200, w: 50, h: 30 }, true, 3.0);
|
|
393
427
|
* ```
|
|
394
428
|
*/
|
|
395
|
-
async function clickRect(browser, rect, highlight = true, highlightDuration = 2.0, takeSnapshot = false) {
|
|
429
|
+
async function clickRect(browser, rect, highlight = true, highlightDuration = 2.0, takeSnapshot = false, cursorPolicy) {
|
|
396
430
|
const page = browser.getPage();
|
|
397
431
|
if (!page) {
|
|
398
432
|
throw new Error('Browser not started. Call start() first.');
|
|
@@ -431,6 +465,7 @@ async function clickRect(browser, rect, highlight = true, highlightDuration = 2.
|
|
|
431
465
|
// Calculate center of rectangle
|
|
432
466
|
const centerX = x + w / 2;
|
|
433
467
|
const centerY = y + h / 2;
|
|
468
|
+
let cursorMeta;
|
|
434
469
|
// Show highlight before clicking (if enabled)
|
|
435
470
|
if (highlight) {
|
|
436
471
|
await highlightRect(browser, { x, y, w, h }, highlightDuration);
|
|
@@ -441,8 +476,10 @@ async function clickRect(browser, rect, highlight = true, highlightDuration = 2.
|
|
|
441
476
|
let success;
|
|
442
477
|
let errorMsg;
|
|
443
478
|
try {
|
|
479
|
+
cursorMeta = await humanMoveIfEnabled(page, { x: centerX, y: centerY }, cursorPolicy);
|
|
444
480
|
await page.mouse.click(centerX, centerY);
|
|
445
481
|
success = true;
|
|
482
|
+
cursorPosByPage.set(page, { x: centerX, y: centerY });
|
|
446
483
|
}
|
|
447
484
|
catch (error) {
|
|
448
485
|
success = false;
|
|
@@ -475,6 +512,7 @@ async function clickRect(browser, rect, highlight = true, highlightDuration = 2.
|
|
|
475
512
|
outcome,
|
|
476
513
|
url_changed: urlChanged,
|
|
477
514
|
snapshot_after: snapshotAfter,
|
|
515
|
+
cursor: cursorMeta,
|
|
478
516
|
error: success ? undefined : { code: 'click_failed', reason: errorMsg || 'Click failed' },
|
|
479
517
|
};
|
|
480
518
|
}
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-runtime.d.ts
CHANGED
|
@@ -41,6 +41,7 @@ import { Page } from 'playwright';
|
|
|
41
41
|
import { Snapshot } from './types';
|
|
42
42
|
import { Predicate } from './verification';
|
|
43
43
|
import { Tracer } from './tracing/tracer';
|
|
44
|
+
import { LLMProvider } from './llm-provider';
|
|
44
45
|
interface BrowserLike {
|
|
45
46
|
snapshot(page: Page, options?: Record<string, any>): Promise<Snapshot>;
|
|
46
47
|
}
|
|
@@ -54,6 +55,30 @@ export interface AssertionRecord {
|
|
|
54
55
|
reason: string;
|
|
55
56
|
details: Record<string, any>;
|
|
56
57
|
}
|
|
58
|
+
export interface EventuallyOptions {
|
|
59
|
+
timeoutMs?: number;
|
|
60
|
+
pollMs?: number;
|
|
61
|
+
snapshotOptions?: Record<string, any>;
|
|
62
|
+
/** If set, `.eventually()` will treat snapshots below this confidence as failures and resnapshot. */
|
|
63
|
+
minConfidence?: number;
|
|
64
|
+
/** Max number of snapshot attempts to get above minConfidence before declaring exhaustion. */
|
|
65
|
+
maxSnapshotAttempts?: number;
|
|
66
|
+
/** Optional: vision fallback provider used after snapshot exhaustion (last resort). */
|
|
67
|
+
visionProvider?: LLMProvider;
|
|
68
|
+
/** Optional: override vision system prompt (YES/NO only). */
|
|
69
|
+
visionSystemPrompt?: string;
|
|
70
|
+
/** Optional: override vision user prompt (YES/NO only). */
|
|
71
|
+
visionUserPrompt?: string;
|
|
72
|
+
}
|
|
73
|
+
export declare class AssertionHandle {
|
|
74
|
+
private runtime;
|
|
75
|
+
private predicate;
|
|
76
|
+
private label;
|
|
77
|
+
private required;
|
|
78
|
+
constructor(runtime: AgentRuntime, predicate: Predicate, label: string, required: boolean);
|
|
79
|
+
once(): boolean;
|
|
80
|
+
eventually(options?: EventuallyOptions): Promise<boolean>;
|
|
81
|
+
}
|
|
57
82
|
/**
|
|
58
83
|
* Runtime wrapper for agent verification loops.
|
|
59
84
|
*
|
|
@@ -83,6 +108,9 @@ export declare class AgentRuntime {
|
|
|
83
108
|
/** Task completion tracking */
|
|
84
109
|
private taskDone;
|
|
85
110
|
private taskDoneLabel;
|
|
111
|
+
private static similarity;
|
|
112
|
+
_recordOutcome(outcome: ReturnType<Predicate>, label: string, required: boolean, extra: Record<string, any> | null, recordInStep: boolean): void;
|
|
113
|
+
check(predicate: Predicate, label: string, required?: boolean): AssertionHandle;
|
|
86
114
|
/**
|
|
87
115
|
* Create a new AgentRuntime.
|
|
88
116
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAiB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-runtime.js
CHANGED
|
@@ -39,8 +39,142 @@
|
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.AgentRuntime = void 0;
|
|
42
|
+
exports.AgentRuntime = exports.AssertionHandle = void 0;
|
|
43
43
|
const uuid_1 = require("uuid");
|
|
44
|
+
class AssertionHandle {
|
|
45
|
+
constructor(runtime, predicate, label, required) {
|
|
46
|
+
this.runtime = runtime;
|
|
47
|
+
this.predicate = predicate;
|
|
48
|
+
this.label = label;
|
|
49
|
+
this.required = required;
|
|
50
|
+
}
|
|
51
|
+
once() {
|
|
52
|
+
return this.runtime.assert(this.predicate, this.label, this.required);
|
|
53
|
+
}
|
|
54
|
+
async eventually(options = {}) {
|
|
55
|
+
const timeoutMs = options.timeoutMs ?? 10000;
|
|
56
|
+
const pollMs = options.pollMs ?? 250;
|
|
57
|
+
const snapshotOptions = options.snapshotOptions;
|
|
58
|
+
const minConfidence = options.minConfidence;
|
|
59
|
+
const maxSnapshotAttempts = options.maxSnapshotAttempts ?? 3;
|
|
60
|
+
const visionProvider = options.visionProvider;
|
|
61
|
+
const visionSystemPrompt = options.visionSystemPrompt;
|
|
62
|
+
const visionUserPrompt = options.visionUserPrompt;
|
|
63
|
+
const deadline = Date.now() + timeoutMs;
|
|
64
|
+
let attempt = 0;
|
|
65
|
+
let snapshotAttempt = 0;
|
|
66
|
+
let lastOutcome = null;
|
|
67
|
+
while (true) {
|
|
68
|
+
attempt += 1;
|
|
69
|
+
await this.runtime.snapshot(snapshotOptions);
|
|
70
|
+
snapshotAttempt += 1;
|
|
71
|
+
const diagnostics = this.runtime.lastSnapshot?.diagnostics;
|
|
72
|
+
const confidence = diagnostics?.confidence;
|
|
73
|
+
if (typeof minConfidence === 'number' &&
|
|
74
|
+
typeof confidence === 'number' &&
|
|
75
|
+
Number.isFinite(confidence) &&
|
|
76
|
+
confidence < minConfidence) {
|
|
77
|
+
lastOutcome = {
|
|
78
|
+
passed: false,
|
|
79
|
+
reason: `Snapshot confidence ${confidence.toFixed(3)} < minConfidence ${minConfidence.toFixed(3)}`,
|
|
80
|
+
details: {
|
|
81
|
+
reason_code: 'snapshot_low_confidence',
|
|
82
|
+
confidence,
|
|
83
|
+
min_confidence: minConfidence,
|
|
84
|
+
snapshot_attempt: snapshotAttempt,
|
|
85
|
+
diagnostics,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
this.runtime._recordOutcome(lastOutcome, this.label, this.required, { eventually: true, attempt, snapshot_attempt: snapshotAttempt, final: false }, false);
|
|
89
|
+
if (snapshotAttempt >= maxSnapshotAttempts) {
|
|
90
|
+
// Optional: vision fallback after snapshot exhaustion (last resort).
|
|
91
|
+
// Keeps the assertion surface invariant; only perception changes.
|
|
92
|
+
if (visionProvider && visionProvider.supportsVision?.()) {
|
|
93
|
+
try {
|
|
94
|
+
const buf = (await this.runtime.page.screenshot({ type: 'png' }));
|
|
95
|
+
const imageBase64 = Buffer.from(buf).toString('base64');
|
|
96
|
+
const sys = visionSystemPrompt ?? 'You are a strict visual verifier. Answer only YES or NO.';
|
|
97
|
+
const user = visionUserPrompt ??
|
|
98
|
+
`Given the screenshot, is the following condition satisfied?\n\n${this.label}\n\nAnswer YES or NO.`;
|
|
99
|
+
const resp = await visionProvider.generateWithImage(sys, user, imageBase64, {
|
|
100
|
+
temperature: 0.0,
|
|
101
|
+
});
|
|
102
|
+
const text = (resp.content || '').trim().toLowerCase();
|
|
103
|
+
const passed = text.startsWith('yes');
|
|
104
|
+
const finalOutcome = {
|
|
105
|
+
passed,
|
|
106
|
+
reason: passed ? 'vision_fallback_yes' : 'vision_fallback_no',
|
|
107
|
+
details: {
|
|
108
|
+
reason_code: passed ? 'vision_fallback_pass' : 'vision_fallback_fail',
|
|
109
|
+
vision_response: resp.content,
|
|
110
|
+
min_confidence: minConfidence,
|
|
111
|
+
snapshot_attempts: snapshotAttempt,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
this.runtime._recordOutcome(finalOutcome, this.label, this.required, {
|
|
115
|
+
eventually: true,
|
|
116
|
+
attempt,
|
|
117
|
+
snapshot_attempt: snapshotAttempt,
|
|
118
|
+
final: true,
|
|
119
|
+
vision_fallback: true,
|
|
120
|
+
}, true);
|
|
121
|
+
return passed;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// fall through to snapshot_exhausted
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const finalOutcome = {
|
|
128
|
+
passed: false,
|
|
129
|
+
reason: `Snapshot exhausted after ${snapshotAttempt} attempt(s) below minConfidence ${minConfidence.toFixed(3)}`,
|
|
130
|
+
details: {
|
|
131
|
+
reason_code: 'snapshot_exhausted',
|
|
132
|
+
confidence,
|
|
133
|
+
min_confidence: minConfidence,
|
|
134
|
+
snapshot_attempts: snapshotAttempt,
|
|
135
|
+
diagnostics,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
this.runtime._recordOutcome(finalOutcome, this.label, this.required, {
|
|
139
|
+
eventually: true,
|
|
140
|
+
attempt,
|
|
141
|
+
snapshot_attempt: snapshotAttempt,
|
|
142
|
+
final: true,
|
|
143
|
+
exhausted: true,
|
|
144
|
+
}, true);
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
if (Date.now() >= deadline) {
|
|
148
|
+
this.runtime._recordOutcome(lastOutcome, this.label, this.required, {
|
|
149
|
+
eventually: true,
|
|
150
|
+
attempt,
|
|
151
|
+
snapshot_attempt: snapshotAttempt,
|
|
152
|
+
final: true,
|
|
153
|
+
timeout: true,
|
|
154
|
+
}, true);
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
await new Promise(resolve => setTimeout(resolve, pollMs));
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
lastOutcome = this.predicate(this.runtime.ctx());
|
|
161
|
+
// Emit attempt event (not recorded in step_end)
|
|
162
|
+
this.runtime._recordOutcome(lastOutcome, this.label, this.required, { eventually: true, attempt, final: false }, false);
|
|
163
|
+
if (lastOutcome.passed) {
|
|
164
|
+
// Record final success once
|
|
165
|
+
this.runtime._recordOutcome(lastOutcome, this.label, this.required, { eventually: true, attempt, final: true }, true);
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
if (Date.now() >= deadline) {
|
|
169
|
+
// Record final failure once
|
|
170
|
+
this.runtime._recordOutcome(lastOutcome, this.label, this.required, { eventually: true, attempt, final: true, timeout: true }, true);
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
await new Promise(resolve => setTimeout(resolve, pollMs));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.AssertionHandle = AssertionHandle;
|
|
44
178
|
/**
|
|
45
179
|
* Runtime wrapper for agent verification loops.
|
|
46
180
|
*
|
|
@@ -53,6 +187,70 @@ const uuid_1 = require("uuid");
|
|
|
53
187
|
* to the tracer for Studio timeline display.
|
|
54
188
|
*/
|
|
55
189
|
class AgentRuntime {
|
|
190
|
+
static similarity(a, b) {
|
|
191
|
+
const s1 = a.toLowerCase();
|
|
192
|
+
const s2 = b.toLowerCase();
|
|
193
|
+
if (!s1 || !s2)
|
|
194
|
+
return 0;
|
|
195
|
+
if (s1 === s2)
|
|
196
|
+
return 1;
|
|
197
|
+
// Bigram overlap (cheap, robust enough for suggestions)
|
|
198
|
+
const bigrams = (s) => {
|
|
199
|
+
const out = [];
|
|
200
|
+
for (let i = 0; i < s.length - 1; i++)
|
|
201
|
+
out.push(s.slice(i, i + 2));
|
|
202
|
+
return out;
|
|
203
|
+
};
|
|
204
|
+
const a2 = bigrams(s1);
|
|
205
|
+
const b2 = bigrams(s2);
|
|
206
|
+
const setB = new Set(b2);
|
|
207
|
+
let common = 0;
|
|
208
|
+
for (const g of a2)
|
|
209
|
+
if (setB.has(g))
|
|
210
|
+
common += 1;
|
|
211
|
+
return (2 * common) / (a2.length + b2.length + 1e-9);
|
|
212
|
+
}
|
|
213
|
+
_recordOutcome(outcome, label, required, extra, recordInStep) {
|
|
214
|
+
const details = { ...(outcome.details || {}) };
|
|
215
|
+
// Failure intelligence: nearest matches for selector-driven assertions
|
|
216
|
+
if (!outcome.passed && this.lastSnapshot && typeof details.selector === 'string') {
|
|
217
|
+
const selector = details.selector;
|
|
218
|
+
const scored = [];
|
|
219
|
+
for (const el of this.lastSnapshot.elements) {
|
|
220
|
+
const hay = el.name ?? el.text ?? '';
|
|
221
|
+
if (!hay)
|
|
222
|
+
continue;
|
|
223
|
+
const score = AgentRuntime.similarity(selector, hay);
|
|
224
|
+
scored.push({ score, el });
|
|
225
|
+
}
|
|
226
|
+
scored.sort((x, y) => y.score - x.score);
|
|
227
|
+
details.nearest_matches = scored.slice(0, 3).map(({ score, el }) => ({
|
|
228
|
+
id: el.id,
|
|
229
|
+
role: el.role,
|
|
230
|
+
text: (el.text ?? '').toString().slice(0, 80),
|
|
231
|
+
name: (el.name ?? '').toString().slice(0, 80),
|
|
232
|
+
score: Math.round(score * 10000) / 10000,
|
|
233
|
+
}));
|
|
234
|
+
}
|
|
235
|
+
const record = {
|
|
236
|
+
label,
|
|
237
|
+
passed: outcome.passed,
|
|
238
|
+
required,
|
|
239
|
+
reason: outcome.reason,
|
|
240
|
+
details,
|
|
241
|
+
...(extra || {}),
|
|
242
|
+
};
|
|
243
|
+
if (recordInStep) {
|
|
244
|
+
this.assertionsThisStep.push(record);
|
|
245
|
+
}
|
|
246
|
+
this.tracer.emit('verification', {
|
|
247
|
+
kind: 'assert',
|
|
248
|
+
...record,
|
|
249
|
+
}, this.stepId || undefined);
|
|
250
|
+
}
|
|
251
|
+
check(predicate, label, required = false) {
|
|
252
|
+
return new AssertionHandle(this, predicate, label, required);
|
|
253
|
+
}
|
|
56
254
|
/**
|
|
57
255
|
* Create a new AgentRuntime.
|
|
58
256
|
*
|
|
@@ -145,24 +343,7 @@ class AgentRuntime {
|
|
|
145
343
|
*/
|
|
146
344
|
assert(predicate, label, required = false) {
|
|
147
345
|
const outcome = predicate(this.ctx());
|
|
148
|
-
|
|
149
|
-
label,
|
|
150
|
-
passed: outcome.passed,
|
|
151
|
-
required,
|
|
152
|
-
reason: outcome.reason,
|
|
153
|
-
details: outcome.details,
|
|
154
|
-
};
|
|
155
|
-
this.assertionsThisStep.push(record);
|
|
156
|
-
// Emit dedicated verification event (Option B from design doc)
|
|
157
|
-
// This makes assertions visible in Studio timeline
|
|
158
|
-
this.tracer.emit('verification', {
|
|
159
|
-
kind: 'assert',
|
|
160
|
-
passed: outcome.passed,
|
|
161
|
-
label,
|
|
162
|
-
required,
|
|
163
|
-
reason: outcome.reason,
|
|
164
|
-
details: outcome.details,
|
|
165
|
-
}, this.stepId || undefined);
|
|
346
|
+
this._recordOutcome(outcome, label, required, null, true);
|
|
166
347
|
return outcome.passed;
|
|
167
348
|
}
|
|
168
349
|
/**
|