sentienceapi 0.92.2 → 0.93.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/README.md +152 -54
- package/dist/actions.d.ts +33 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +81 -3
- package/dist/actions.js.map +1 -1
- package/dist/agent-runtime.d.ts +190 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +257 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/canonicalization.d.ts +126 -0
- package/dist/canonicalization.d.ts.map +1 -0
- package/dist/canonicalization.js +161 -0
- package/dist/canonicalization.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/ordinal.d.ts +90 -0
- package/dist/ordinal.d.ts.map +1 -0
- package/dist/ordinal.js +249 -0
- package/dist/ordinal.js.map +1 -0
- package/dist/snapshot-diff.d.ts +8 -15
- package/dist/snapshot-diff.d.ts.map +1 -1
- package/dist/snapshot-diff.js +38 -43
- package/dist/snapshot-diff.js.map +1 -1
- package/dist/snapshot.js +2 -0
- package/dist/snapshot.js.map +1 -1
- package/dist/tracing/indexer.d.ts.map +1 -1
- package/dist/tracing/indexer.js +3 -46
- package/dist/tracing/indexer.js.map +1 -1
- package/dist/tracing/types.d.ts +19 -0
- package/dist/tracing/types.d.ts.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/verification.d.ts +177 -0
- package/dist/verification.d.ts.map +1 -0
- package/dist/verification.js +315 -0
- package/dist/verification.js.map +1 -0
- package/package.json +1 -1
- package/src/extension/injected_api.js +9 -2
- package/src/extension/manifest.json +1 -1
- package/src/extension/pkg/sentience_core_bg.wasm +0 -0
- package/src/extension/release.json +47 -46
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tracing/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tracing/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -31,6 +31,13 @@ export interface Element {
|
|
|
31
31
|
ml_probability?: number;
|
|
32
32
|
ml_score?: number;
|
|
33
33
|
diff_status?: 'ADDED' | 'REMOVED' | 'MODIFIED' | 'MOVED';
|
|
34
|
+
center_x?: number;
|
|
35
|
+
center_y?: number;
|
|
36
|
+
doc_y?: number;
|
|
37
|
+
group_key?: string;
|
|
38
|
+
group_index?: number;
|
|
39
|
+
href?: string;
|
|
40
|
+
in_dominant_group?: boolean;
|
|
34
41
|
}
|
|
35
42
|
export interface Snapshot {
|
|
36
43
|
status: 'success' | 'error';
|
|
@@ -42,6 +49,7 @@ export interface Snapshot {
|
|
|
42
49
|
screenshot_format?: 'png' | 'jpeg';
|
|
43
50
|
error?: string;
|
|
44
51
|
requires_license?: boolean;
|
|
52
|
+
dominant_group_key?: string;
|
|
45
53
|
}
|
|
46
54
|
/**
|
|
47
55
|
* Metadata for a stored screenshot.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAGhB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification primitives for agent assertion loops.
|
|
3
|
+
*
|
|
4
|
+
* This module provides assertion predicates and outcome types for runtime verification
|
|
5
|
+
* in agent loops. Assertions evaluate against the current browser state (snapshot/url)
|
|
6
|
+
* and record results into the trace.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - AssertOutcome: Result of evaluating an assertion
|
|
10
|
+
* - AssertContext: Context provided to assertion predicates (snapshot, url, stepId)
|
|
11
|
+
* - Predicate: Callable that takes context and returns outcome
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { urlMatches, exists, AssertContext } from './verification';
|
|
16
|
+
*
|
|
17
|
+
* // Create predicates
|
|
18
|
+
* const onSearchPage = urlMatches(/\/s\?k=/);
|
|
19
|
+
* const resultsLoaded = exists("text~'Results'");
|
|
20
|
+
*
|
|
21
|
+
* // Evaluate against context
|
|
22
|
+
* const ctx: AssertContext = { snapshot, url: "https://example.com/s?k=shoes" };
|
|
23
|
+
* const outcome = onSearchPage(ctx);
|
|
24
|
+
* console.log(outcome.passed); // true
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import { Snapshot, QuerySelector } from './types';
|
|
28
|
+
/**
|
|
29
|
+
* Result of evaluating an assertion predicate.
|
|
30
|
+
*/
|
|
31
|
+
export interface AssertOutcome {
|
|
32
|
+
/** Whether the assertion passed */
|
|
33
|
+
passed: boolean;
|
|
34
|
+
/** Human-readable explanation (especially useful when failed) */
|
|
35
|
+
reason: string;
|
|
36
|
+
/** Additional structured data for debugging/display */
|
|
37
|
+
details: Record<string, any>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Context provided to assertion predicates.
|
|
41
|
+
*
|
|
42
|
+
* Provides access to current browser state without requiring
|
|
43
|
+
* the predicate to know about browser internals.
|
|
44
|
+
*/
|
|
45
|
+
export interface AssertContext {
|
|
46
|
+
/** Current page snapshot (may be null if not taken) */
|
|
47
|
+
snapshot: Snapshot | null;
|
|
48
|
+
/** Current page URL */
|
|
49
|
+
url: string | null;
|
|
50
|
+
/** Current step identifier (for trace correlation) */
|
|
51
|
+
stepId: string | null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Type alias for assertion predicates.
|
|
55
|
+
* A predicate takes context and returns an outcome.
|
|
56
|
+
*/
|
|
57
|
+
export type Predicate = (ctx: AssertContext) => AssertOutcome;
|
|
58
|
+
/**
|
|
59
|
+
* Create a predicate that checks if current URL matches a regex pattern.
|
|
60
|
+
*
|
|
61
|
+
* @param pattern - Regular expression pattern or string to match against URL
|
|
62
|
+
* @returns Predicate function that evaluates URL matching
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const pred = urlMatches(/\/search\?q=/);
|
|
67
|
+
* const ctx = { snapshot: null, url: "https://example.com/search?q=shoes", stepId: null };
|
|
68
|
+
* const outcome = pred(ctx);
|
|
69
|
+
* console.log(outcome.passed); // true
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function urlMatches(pattern: string | RegExp): Predicate;
|
|
73
|
+
/**
|
|
74
|
+
* Create a predicate that checks if current URL contains a substring.
|
|
75
|
+
*
|
|
76
|
+
* @param substring - String to search for in URL
|
|
77
|
+
* @returns Predicate function that evaluates URL containment
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const pred = urlContains("/cart");
|
|
82
|
+
* const ctx = { snapshot: null, url: "https://example.com/cart/checkout", stepId: null };
|
|
83
|
+
* const outcome = pred(ctx);
|
|
84
|
+
* console.log(outcome.passed); // true
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare function urlContains(substring: string): Predicate;
|
|
88
|
+
/**
|
|
89
|
+
* Create a predicate that checks if elements matching selector exist.
|
|
90
|
+
*
|
|
91
|
+
* Uses the SDK's query engine to find matching elements.
|
|
92
|
+
*
|
|
93
|
+
* @param selector - Semantic selector string (e.g., "role=button text~'Sign in'")
|
|
94
|
+
* @returns Predicate function that evaluates element existence
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const pred = exists("text~'Results'");
|
|
99
|
+
* // Will check if snapshot contains elements with "Results" in text
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export declare function exists(selector: QuerySelector): Predicate;
|
|
103
|
+
/**
|
|
104
|
+
* Create a predicate that checks that NO elements match the selector.
|
|
105
|
+
*
|
|
106
|
+
* Useful for asserting that error messages, loading spinners, etc. are gone.
|
|
107
|
+
*
|
|
108
|
+
* @param selector - Semantic selector string
|
|
109
|
+
* @returns Predicate function that evaluates element non-existence
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const pred = notExists("text~'Loading'");
|
|
114
|
+
* // Will pass if no elements contain "Loading" text
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export declare function notExists(selector: QuerySelector): Predicate;
|
|
118
|
+
/**
|
|
119
|
+
* Create a predicate that checks the number of matching elements.
|
|
120
|
+
*
|
|
121
|
+
* @param selector - Semantic selector string
|
|
122
|
+
* @param options - Count constraints
|
|
123
|
+
* @returns Predicate function that evaluates element count
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const pred = elementCount("role=button", { minCount: 1, maxCount: 5 });
|
|
128
|
+
* // Will pass if 1-5 buttons found
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare function elementCount(selector: QuerySelector, options?: {
|
|
132
|
+
minCount?: number;
|
|
133
|
+
maxCount?: number;
|
|
134
|
+
}): Predicate;
|
|
135
|
+
/**
|
|
136
|
+
* Create a predicate that passes only if ALL sub-predicates pass.
|
|
137
|
+
*
|
|
138
|
+
* @param predicates - Predicate functions to combine with AND logic
|
|
139
|
+
* @returns Combined predicate
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* const pred = allOf(urlContains("/cart"), exists("text~'Checkout'"));
|
|
144
|
+
* // Will pass only if both conditions are true
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export declare function allOf(...predicates: Predicate[]): Predicate;
|
|
148
|
+
/**
|
|
149
|
+
* Create a predicate that passes if ANY sub-predicate passes.
|
|
150
|
+
*
|
|
151
|
+
* @param predicates - Predicate functions to combine with OR logic
|
|
152
|
+
* @returns Combined predicate
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* const pred = anyOf(exists("text~'Success'"), exists("text~'Complete'"));
|
|
157
|
+
* // Will pass if either condition is true
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export declare function anyOf(...predicates: Predicate[]): Predicate;
|
|
161
|
+
/**
|
|
162
|
+
* Create a predicate from a custom function.
|
|
163
|
+
*
|
|
164
|
+
* @param checkFn - Function that takes AssertContext and returns boolean
|
|
165
|
+
* @param label - Label for debugging/display
|
|
166
|
+
* @returns Predicate wrapping the custom function
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const pred = custom(
|
|
171
|
+
* (ctx) => ctx.snapshot !== null && ctx.snapshot.elements.length > 10,
|
|
172
|
+
* "has_many_elements"
|
|
173
|
+
* );
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
export declare function custom(checkFn: (ctx: AssertContext) => boolean, label?: string): Predicate;
|
|
177
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAUlD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,uBAAuB;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,sDAAsD;IACtD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAY9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAUxD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,CAoBzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,CAoB5D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,SAAS,CA0CX;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,CAoB3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,CAwB3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,EACxC,KAAK,GAAE,MAAiB,GACvB,SAAS,CAiBX"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verification primitives for agent assertion loops.
|
|
4
|
+
*
|
|
5
|
+
* This module provides assertion predicates and outcome types for runtime verification
|
|
6
|
+
* in agent loops. Assertions evaluate against the current browser state (snapshot/url)
|
|
7
|
+
* and record results into the trace.
|
|
8
|
+
*
|
|
9
|
+
* Key concepts:
|
|
10
|
+
* - AssertOutcome: Result of evaluating an assertion
|
|
11
|
+
* - AssertContext: Context provided to assertion predicates (snapshot, url, stepId)
|
|
12
|
+
* - Predicate: Callable that takes context and returns outcome
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { urlMatches, exists, AssertContext } from './verification';
|
|
17
|
+
*
|
|
18
|
+
* // Create predicates
|
|
19
|
+
* const onSearchPage = urlMatches(/\/s\?k=/);
|
|
20
|
+
* const resultsLoaded = exists("text~'Results'");
|
|
21
|
+
*
|
|
22
|
+
* // Evaluate against context
|
|
23
|
+
* const ctx: AssertContext = { snapshot, url: "https://example.com/s?k=shoes" };
|
|
24
|
+
* const outcome = onSearchPage(ctx);
|
|
25
|
+
* console.log(outcome.passed); // true
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.urlMatches = urlMatches;
|
|
30
|
+
exports.urlContains = urlContains;
|
|
31
|
+
exports.exists = exists;
|
|
32
|
+
exports.notExists = notExists;
|
|
33
|
+
exports.elementCount = elementCount;
|
|
34
|
+
exports.allOf = allOf;
|
|
35
|
+
exports.anyOf = anyOf;
|
|
36
|
+
exports.custom = custom;
|
|
37
|
+
const query_1 = require("./query");
|
|
38
|
+
/**
|
|
39
|
+
* Convert QuerySelector to string for display/logging.
|
|
40
|
+
*/
|
|
41
|
+
function selectorToString(selector) {
|
|
42
|
+
return typeof selector === 'string' ? selector : JSON.stringify(selector);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a predicate that checks if current URL matches a regex pattern.
|
|
46
|
+
*
|
|
47
|
+
* @param pattern - Regular expression pattern or string to match against URL
|
|
48
|
+
* @returns Predicate function that evaluates URL matching
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const pred = urlMatches(/\/search\?q=/);
|
|
53
|
+
* const ctx = { snapshot: null, url: "https://example.com/search?q=shoes", stepId: null };
|
|
54
|
+
* const outcome = pred(ctx);
|
|
55
|
+
* console.log(outcome.passed); // true
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
function urlMatches(pattern) {
|
|
59
|
+
const rx = typeof pattern === 'string' ? new RegExp(pattern) : pattern;
|
|
60
|
+
return (ctx) => {
|
|
61
|
+
const url = ctx.url || '';
|
|
62
|
+
const ok = rx.test(url);
|
|
63
|
+
return {
|
|
64
|
+
passed: ok,
|
|
65
|
+
reason: ok ? '' : `url did not match pattern: ${pattern}`,
|
|
66
|
+
details: { pattern: String(pattern), url: url.substring(0, 200) },
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a predicate that checks if current URL contains a substring.
|
|
72
|
+
*
|
|
73
|
+
* @param substring - String to search for in URL
|
|
74
|
+
* @returns Predicate function that evaluates URL containment
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const pred = urlContains("/cart");
|
|
79
|
+
* const ctx = { snapshot: null, url: "https://example.com/cart/checkout", stepId: null };
|
|
80
|
+
* const outcome = pred(ctx);
|
|
81
|
+
* console.log(outcome.passed); // true
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
function urlContains(substring) {
|
|
85
|
+
return (ctx) => {
|
|
86
|
+
const url = ctx.url || '';
|
|
87
|
+
const ok = url.includes(substring);
|
|
88
|
+
return {
|
|
89
|
+
passed: ok,
|
|
90
|
+
reason: ok ? '' : `url does not contain: ${substring}`,
|
|
91
|
+
details: { substring, url: url.substring(0, 200) },
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create a predicate that checks if elements matching selector exist.
|
|
97
|
+
*
|
|
98
|
+
* Uses the SDK's query engine to find matching elements.
|
|
99
|
+
*
|
|
100
|
+
* @param selector - Semantic selector string (e.g., "role=button text~'Sign in'")
|
|
101
|
+
* @returns Predicate function that evaluates element existence
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* const pred = exists("text~'Results'");
|
|
106
|
+
* // Will check if snapshot contains elements with "Results" in text
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
function exists(selector) {
|
|
110
|
+
const selectorStr = selectorToString(selector);
|
|
111
|
+
return (ctx) => {
|
|
112
|
+
const snap = ctx.snapshot;
|
|
113
|
+
if (!snap) {
|
|
114
|
+
return {
|
|
115
|
+
passed: false,
|
|
116
|
+
reason: 'no snapshot available',
|
|
117
|
+
details: { selector: selectorStr },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const matches = (0, query_1.query)(snap, selector);
|
|
121
|
+
const ok = matches.length > 0;
|
|
122
|
+
return {
|
|
123
|
+
passed: ok,
|
|
124
|
+
reason: ok ? '' : `no elements matched selector: ${selectorStr}`,
|
|
125
|
+
details: { selector: selectorStr, matched: matches.length },
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Create a predicate that checks that NO elements match the selector.
|
|
131
|
+
*
|
|
132
|
+
* Useful for asserting that error messages, loading spinners, etc. are gone.
|
|
133
|
+
*
|
|
134
|
+
* @param selector - Semantic selector string
|
|
135
|
+
* @returns Predicate function that evaluates element non-existence
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* const pred = notExists("text~'Loading'");
|
|
140
|
+
* // Will pass if no elements contain "Loading" text
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
function notExists(selector) {
|
|
144
|
+
const selectorStr = selectorToString(selector);
|
|
145
|
+
return (ctx) => {
|
|
146
|
+
const snap = ctx.snapshot;
|
|
147
|
+
if (!snap) {
|
|
148
|
+
return {
|
|
149
|
+
passed: false,
|
|
150
|
+
reason: 'no snapshot available',
|
|
151
|
+
details: { selector: selectorStr },
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const matches = (0, query_1.query)(snap, selector);
|
|
155
|
+
const ok = matches.length === 0;
|
|
156
|
+
return {
|
|
157
|
+
passed: ok,
|
|
158
|
+
reason: ok ? '' : `found ${matches.length} elements matching: ${selectorStr}`,
|
|
159
|
+
details: { selector: selectorStr, matched: matches.length },
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Create a predicate that checks the number of matching elements.
|
|
165
|
+
*
|
|
166
|
+
* @param selector - Semantic selector string
|
|
167
|
+
* @param options - Count constraints
|
|
168
|
+
* @returns Predicate function that evaluates element count
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```typescript
|
|
172
|
+
* const pred = elementCount("role=button", { minCount: 1, maxCount: 5 });
|
|
173
|
+
* // Will pass if 1-5 buttons found
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
function elementCount(selector, options = {}) {
|
|
177
|
+
const { minCount = 0, maxCount } = options;
|
|
178
|
+
const selectorStr = selectorToString(selector);
|
|
179
|
+
return (ctx) => {
|
|
180
|
+
const snap = ctx.snapshot;
|
|
181
|
+
if (!snap) {
|
|
182
|
+
return {
|
|
183
|
+
passed: false,
|
|
184
|
+
reason: 'no snapshot available',
|
|
185
|
+
details: { selector: selectorStr, minCount, maxCount },
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
const matches = (0, query_1.query)(snap, selector);
|
|
189
|
+
const count = matches.length;
|
|
190
|
+
let ok = count >= minCount;
|
|
191
|
+
if (maxCount !== undefined) {
|
|
192
|
+
ok = ok && count <= maxCount;
|
|
193
|
+
}
|
|
194
|
+
let reason = '';
|
|
195
|
+
if (!ok) {
|
|
196
|
+
if (maxCount !== undefined) {
|
|
197
|
+
reason = `expected ${minCount}-${maxCount} elements, found ${count}`;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
reason = `expected at least ${minCount} elements, found ${count}`;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
passed: ok,
|
|
205
|
+
reason,
|
|
206
|
+
details: {
|
|
207
|
+
selector: selectorStr,
|
|
208
|
+
matched: count,
|
|
209
|
+
minCount,
|
|
210
|
+
maxCount,
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Create a predicate that passes only if ALL sub-predicates pass.
|
|
217
|
+
*
|
|
218
|
+
* @param predicates - Predicate functions to combine with AND logic
|
|
219
|
+
* @returns Combined predicate
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* const pred = allOf(urlContains("/cart"), exists("text~'Checkout'"));
|
|
224
|
+
* // Will pass only if both conditions are true
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
function allOf(...predicates) {
|
|
228
|
+
return (ctx) => {
|
|
229
|
+
const failedReasons = [];
|
|
230
|
+
const allDetails = [];
|
|
231
|
+
for (const p of predicates) {
|
|
232
|
+
const outcome = p(ctx);
|
|
233
|
+
allDetails.push(outcome.details);
|
|
234
|
+
if (!outcome.passed) {
|
|
235
|
+
failedReasons.push(outcome.reason);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const ok = failedReasons.length === 0;
|
|
239
|
+
return {
|
|
240
|
+
passed: ok,
|
|
241
|
+
reason: failedReasons.join('; '),
|
|
242
|
+
details: { subPredicates: allDetails, failedCount: failedReasons.length },
|
|
243
|
+
};
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Create a predicate that passes if ANY sub-predicate passes.
|
|
248
|
+
*
|
|
249
|
+
* @param predicates - Predicate functions to combine with OR logic
|
|
250
|
+
* @returns Combined predicate
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* ```typescript
|
|
254
|
+
* const pred = anyOf(exists("text~'Success'"), exists("text~'Complete'"));
|
|
255
|
+
* // Will pass if either condition is true
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
function anyOf(...predicates) {
|
|
259
|
+
return (ctx) => {
|
|
260
|
+
const allReasons = [];
|
|
261
|
+
const allDetails = [];
|
|
262
|
+
for (let i = 0; i < predicates.length; i++) {
|
|
263
|
+
const outcome = predicates[i](ctx);
|
|
264
|
+
allDetails.push(outcome.details);
|
|
265
|
+
if (outcome.passed) {
|
|
266
|
+
return {
|
|
267
|
+
passed: true,
|
|
268
|
+
reason: '',
|
|
269
|
+
details: { subPredicates: allDetails, matchedAtIndex: i },
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
allReasons.push(outcome.reason);
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
passed: false,
|
|
276
|
+
reason: `none of ${predicates.length} predicates passed: ${allReasons.join('; ')}`,
|
|
277
|
+
details: { subPredicates: allDetails },
|
|
278
|
+
};
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Create a predicate from a custom function.
|
|
283
|
+
*
|
|
284
|
+
* @param checkFn - Function that takes AssertContext and returns boolean
|
|
285
|
+
* @param label - Label for debugging/display
|
|
286
|
+
* @returns Predicate wrapping the custom function
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* ```typescript
|
|
290
|
+
* const pred = custom(
|
|
291
|
+
* (ctx) => ctx.snapshot !== null && ctx.snapshot.elements.length > 10,
|
|
292
|
+
* "has_many_elements"
|
|
293
|
+
* );
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
function custom(checkFn, label = 'custom') {
|
|
297
|
+
return (ctx) => {
|
|
298
|
+
try {
|
|
299
|
+
const ok = checkFn(ctx);
|
|
300
|
+
return {
|
|
301
|
+
passed: ok,
|
|
302
|
+
reason: ok ? '' : `custom check '${label}' returned false`,
|
|
303
|
+
details: { label },
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
catch (e) {
|
|
307
|
+
return {
|
|
308
|
+
passed: false,
|
|
309
|
+
reason: `custom check '${label}' raised exception: ${e}`,
|
|
310
|
+
details: { label, error: String(e) },
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -323,6 +323,12 @@
|
|
|
323
323
|
if (!el.getBoundingClientRect) return;
|
|
324
324
|
const rect = el.getBoundingClientRect();
|
|
325
325
|
if (rect.width < 5 || rect.height < 5) return;
|
|
326
|
+
if ("span" === el.tagName.toLowerCase()) {
|
|
327
|
+
if (el.closest("a")) return;
|
|
328
|
+
const childLink = el.querySelector("a[href]");
|
|
329
|
+
if (childLink && childLink.href) return;
|
|
330
|
+
options.debug && el.className && el.className.includes("titleline");
|
|
331
|
+
}
|
|
326
332
|
window.sentience_registry[idx] = el;
|
|
327
333
|
const semanticText = function(el, options = {}) {
|
|
328
334
|
if (!el) return {
|
|
@@ -439,14 +445,15 @@
|
|
|
439
445
|
inferred_label: semanticText?.source && ![ "explicit_aria_label", "input_value", "img_alt", "inner_text" ].includes(semanticText.source) ? toSafeString(semanticText.text) : null,
|
|
440
446
|
label_source: semanticText?.source || null,
|
|
441
447
|
inferred_role: inferredRole ? toSafeString(inferredRole) : null,
|
|
442
|
-
href: toSafeString(el.href || el.getAttribute("href") || null),
|
|
448
|
+
href: toSafeString(el.href || el.getAttribute("href") || el.closest && el.closest("a")?.href || null),
|
|
443
449
|
class: toSafeString(getClassName(el)),
|
|
444
450
|
value: void 0 !== el.value ? toSafeString(el.value) : toSafeString(el.getAttribute("value")),
|
|
445
451
|
checked: void 0 !== el.checked ? String(el.checked) : null
|
|
446
452
|
},
|
|
447
453
|
text: toSafeString(textVal),
|
|
448
454
|
in_viewport: inView,
|
|
449
|
-
is_occluded: occluded
|
|
455
|
+
is_occluded: occluded,
|
|
456
|
+
scroll_y: window.scrollY
|
|
450
457
|
});
|
|
451
458
|
});
|
|
452
459
|
const allRawElements = [ ...rawData ];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Sentience Semantic Visual Grounding Extractor",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.4.0",
|
|
5
5
|
"description": "Extract semantic visual grounding data from web pages",
|
|
6
6
|
"permissions": ["activeTab", "scripting"],
|
|
7
7
|
"host_permissions": ["<all_urls>"],
|
|
Binary file
|