sentienceapi 0.94.0 → 0.95.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 +44 -3
- package/dist/backends/snapshot.d.ts +4 -0
- package/dist/backends/snapshot.d.ts.map +1 -1
- package/dist/backends/snapshot.js +52 -0
- package/dist/backends/snapshot.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/snapshot.d.ts +2 -0
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +50 -4
- package/dist/snapshot.js.map +1 -1
- package/dist/types.d.ts +48 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/grid-utils.d.ts +37 -0
- package/dist/utils/grid-utils.d.ts.map +1 -0
- package/dist/utils/grid-utils.js +283 -0
- package/dist/utils/grid-utils.js.map +1 -0
- package/package.json +3 -1
- package/src/extension/content.js +35 -0
- package/src/extension/injected_api.js +9 -0
- package/src/extension/manifest.json +1 -1
- package/src/extension/pkg/sentience_core_bg.wasm +0 -0
- package/src/extension/release.json +46 -47
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Sentience TypeScript SDK
|
|
2
2
|
|
|
3
|
-
**Semantic
|
|
3
|
+
**Semantic snapshots and Jest-style assertions for reliable AI web agents with time-travel traces**
|
|
4
4
|
|
|
5
5
|
## 📦 Installation
|
|
6
6
|
|
|
@@ -19,6 +19,49 @@ npm install
|
|
|
19
19
|
npm run build
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
## Jest for AI Web Agent
|
|
23
|
+
|
|
24
|
+
### Semantic snapshots and assertions that let agents act, verify, and know when they're done.
|
|
25
|
+
|
|
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
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { SentienceBrowser, AgentRuntime, urlContains, exists, allOf } from 'sentienceapi';
|
|
30
|
+
import { createTracer } from 'sentienceapi';
|
|
31
|
+
import { Page } from 'playwright';
|
|
32
|
+
|
|
33
|
+
// Create browser and tracer
|
|
34
|
+
const browser = await SentienceBrowser.create({ apiKey: process.env.SENTIENCE_API_KEY });
|
|
35
|
+
const tracer = await createTracer({ runId: 'my-run', uploadTrace: false });
|
|
36
|
+
|
|
37
|
+
// Create browser adapter for AgentRuntime
|
|
38
|
+
const browserAdapter = {
|
|
39
|
+
snapshot: async (_page: Page, options?: Record<string, any>) => {
|
|
40
|
+
return await browser.snapshot(options);
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const runtime = new AgentRuntime(browserAdapter, browser.getPage(), tracer);
|
|
44
|
+
|
|
45
|
+
// Navigate and take snapshot
|
|
46
|
+
await browser.getPage().goto('https://example.com');
|
|
47
|
+
runtime.beginStep('Verify page loaded');
|
|
48
|
+
await runtime.snapshot();
|
|
49
|
+
|
|
50
|
+
// Run assertions (Jest-style)
|
|
51
|
+
runtime.assert(urlContains('example.com'), 'on_correct_domain');
|
|
52
|
+
runtime.assert(exists('role=heading'), 'has_heading');
|
|
53
|
+
runtime.assert(allOf([exists('role=button'), exists('role=link')]), 'has_interactive_elements');
|
|
54
|
+
|
|
55
|
+
// Check task completion
|
|
56
|
+
if (runtime.assertDone(exists("text~'Example'"), 'task_complete')) {
|
|
57
|
+
console.log('✅ Task completed!');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
console.log(`Task done: ${runtime.isTaskDone}`);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**See example:** [examples/agent-runtime-verification.ts](examples/agent-runtime-verification.ts)
|
|
64
|
+
|
|
22
65
|
## 🚀 Quick Start: Choose Your Abstraction Level
|
|
23
66
|
|
|
24
67
|
Sentience SDK offers **4 levels of abstraction** - choose based on your needs:
|
|
@@ -142,8 +185,6 @@ await browser.close();
|
|
|
142
185
|
|
|
143
186
|
---
|
|
144
187
|
|
|
145
|
-
## 🆕 What's New (2026-01-06)
|
|
146
|
-
|
|
147
188
|
### Human-like Typing
|
|
148
189
|
|
|
149
190
|
Add realistic delays between keystrokes to mimic human typing:
|
|
@@ -63,6 +63,10 @@ export interface SnapshotOptions {
|
|
|
63
63
|
filter?: SnapshotFilter;
|
|
64
64
|
/** Show visual overlay on page */
|
|
65
65
|
showOverlay?: boolean;
|
|
66
|
+
/** Show visual overlay highlighting detected grids */
|
|
67
|
+
showGrid?: boolean;
|
|
68
|
+
/** Optional grid ID to show specific grid (only used if showGrid=true) */
|
|
69
|
+
gridId?: number | null;
|
|
66
70
|
/** Use server-side API (Pro/Enterprise tier) */
|
|
67
71
|
useApi?: boolean;
|
|
68
72
|
/** API key for server-side processing */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/backends/snapshot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/backends/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,39 @@
|
|
|
22
22
|
* const snap2 = await cache.get(); // Returns cached if < 2s old
|
|
23
23
|
* cache.invalidate(); // Force refresh on next get()
|
|
24
24
|
*/
|
|
25
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
28
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
29
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(o, k2, desc);
|
|
32
|
+
}) : (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
o[k2] = m[k];
|
|
35
|
+
}));
|
|
36
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
38
|
+
}) : function(o, v) {
|
|
39
|
+
o["default"] = v;
|
|
40
|
+
});
|
|
41
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
42
|
+
var ownKeys = function(o) {
|
|
43
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
44
|
+
var ar = [];
|
|
45
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
46
|
+
return ar;
|
|
47
|
+
};
|
|
48
|
+
return ownKeys(o);
|
|
49
|
+
};
|
|
50
|
+
return function (mod) {
|
|
51
|
+
if (mod && mod.__esModule) return mod;
|
|
52
|
+
var result = {};
|
|
53
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
54
|
+
__setModuleDefault(result, mod);
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
25
58
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
59
|
exports.CachedSnapshot = exports.SnapshotError = exports.ExtensionNotLoadedError = void 0;
|
|
27
60
|
exports.snapshot = snapshot;
|
|
@@ -278,6 +311,25 @@ async function snapshotViaExtension(backend, options) {
|
|
|
278
311
|
`);
|
|
279
312
|
}
|
|
280
313
|
}
|
|
314
|
+
// Show grid overlay if requested
|
|
315
|
+
if (options.showGrid) {
|
|
316
|
+
const { getGridBounds } = await Promise.resolve().then(() => __importStar(require('../utils/grid-utils')));
|
|
317
|
+
// Get all grids (don't filter by gridId here - we want to show all but highlight the target)
|
|
318
|
+
const grids = getGridBounds(result, undefined);
|
|
319
|
+
if (grids.length > 0) {
|
|
320
|
+
// Pass gridId as targetGridId to highlight it in red
|
|
321
|
+
const targetGridId = options.gridId ?? null;
|
|
322
|
+
await backend.eval(`
|
|
323
|
+
(() => {
|
|
324
|
+
if (window.sentience && window.sentience.showGrid) {
|
|
325
|
+
window.sentience.showGrid(${JSON.stringify(grids)}, ${targetGridId !== null ? targetGridId : 'null'});
|
|
326
|
+
} else {
|
|
327
|
+
console.warn('[SDK] showGrid not available in extension');
|
|
328
|
+
}
|
|
329
|
+
})()
|
|
330
|
+
`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
281
333
|
return result;
|
|
282
334
|
}
|
|
283
335
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/backends/snapshot.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/backends/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export { showOverlay, clearOverlay } from './overlay';
|
|
|
16
16
|
export { findTextRect } from './textSearch';
|
|
17
17
|
export * from './types';
|
|
18
18
|
export { saveStorageState } from './utils';
|
|
19
|
+
export { getGridBounds } from './utils/grid-utils';
|
|
19
20
|
export { LLMProvider, LLMResponse, OpenAIProvider, AnthropicProvider, GLMProvider, } from './llm-provider';
|
|
20
21
|
export { SentienceAgent, AgentActResult, HistoryEntry, TokenStats } from './agent';
|
|
21
22
|
export { SentienceVisualAgent } from './visual-agent';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG1F,OAAO,EACL,aAAa,EACb,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,YAAY,EACZ,KAAK,EACL,KAAK,EACL,MAAM,GACP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,EACL,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAGnB,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -39,7 +39,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
39
39
|
};
|
|
40
40
|
})();
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.backends = exports.boostOrdinalElements = exports.selectByOrdinal = exports.detectOrdinalIntent = exports.AgentRuntime = exports.custom = exports.anyOf = exports.allOf = exports.elementCount = exports.notExists = exports.exists = exports.urlContains = exports.urlMatches = exports.JsonlTraceSink = exports.TraceSink = exports.Tracer = exports.ConversationalAgent = exports.SentienceVisualAgent = exports.SentienceAgent = exports.GLMProvider = exports.AnthropicProvider = exports.OpenAIProvider = exports.LLMProvider = exports.saveStorageState = exports.findTextRect = exports.clearOverlay = exports.showOverlay = exports.screenshot = exports.read = exports.generate = exports.ScriptGenerator = exports.record = exports.Recorder = exports.inspect = exports.Inspector = exports.Expectation = exports.expect = exports.waitFor = exports.clickRect = exports.press = exports.typeText = exports.click = exports.parseSelector = exports.find = exports.query = exports.snapshot = exports.SentienceBrowser = void 0;
|
|
42
|
+
exports.backends = exports.boostOrdinalElements = exports.selectByOrdinal = exports.detectOrdinalIntent = exports.AgentRuntime = exports.custom = exports.anyOf = exports.allOf = exports.elementCount = exports.notExists = exports.exists = exports.urlContains = exports.urlMatches = exports.JsonlTraceSink = exports.TraceSink = exports.Tracer = exports.ConversationalAgent = exports.SentienceVisualAgent = exports.SentienceAgent = exports.GLMProvider = exports.AnthropicProvider = exports.OpenAIProvider = exports.LLMProvider = exports.getGridBounds = exports.saveStorageState = exports.findTextRect = exports.clearOverlay = exports.showOverlay = exports.screenshot = exports.read = exports.generate = exports.ScriptGenerator = exports.record = exports.Recorder = exports.inspect = exports.Inspector = exports.Expectation = exports.expect = exports.waitFor = exports.clickRect = exports.press = exports.typeText = exports.click = exports.parseSelector = exports.find = exports.query = exports.snapshot = exports.SentienceBrowser = void 0;
|
|
43
43
|
var browser_1 = require("./browser");
|
|
44
44
|
Object.defineProperty(exports, "SentienceBrowser", { enumerable: true, get: function () { return browser_1.SentienceBrowser; } });
|
|
45
45
|
var snapshot_1 = require("./snapshot");
|
|
@@ -80,6 +80,8 @@ Object.defineProperty(exports, "findTextRect", { enumerable: true, get: function
|
|
|
80
80
|
__exportStar(require("./types"), exports);
|
|
81
81
|
var utils_1 = require("./utils");
|
|
82
82
|
Object.defineProperty(exports, "saveStorageState", { enumerable: true, get: function () { return utils_1.saveStorageState; } });
|
|
83
|
+
var grid_utils_1 = require("./utils/grid-utils");
|
|
84
|
+
Object.defineProperty(exports, "getGridBounds", { enumerable: true, get: function () { return grid_utils_1.getGridBounds; } });
|
|
83
85
|
// Agent Layer (v0.2.0+)
|
|
84
86
|
var llm_provider_1 = require("./llm-provider");
|
|
85
87
|
Object.defineProperty(exports, "LLMProvider", { enumerable: true, get: function () { return llm_provider_1.LLMProvider; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,uCAAuD;AAA9C,oGAAA,QAAQ,OAAA;AACjB,iCAAqD;AAA5C,8FAAA,KAAK,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,sGAAA,aAAa,OAAA;AACnC,qCAAmF;AAA1E,gGAAA,KAAK,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,gGAAA,KAAK,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,oGAAA,SAAS,OAAA;AACpD,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,mCAA+C;AAAtC,gGAAA,MAAM,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC5B,yCAAiD;AAAxC,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA;AAC3B,uCAAgE;AAAvD,oGAAA,QAAQ,OAAA;AAAoB,kGAAA,MAAM,OAAA;AAC3C,yCAAwD;AAA/C,4GAAA,eAAe,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAClC,+BAAuD;AAA9C,4FAAA,IAAI,OAAA;AACb,2CAA6D;AAApD,wGAAA,UAAU,OAAA;AACnB,qCAAsD;AAA7C,sGAAA,WAAW,OAAA;AAAE,uGAAA,YAAY,OAAA;AAClC,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,0CAAwB;AACxB,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,uCAAuD;AAA9C,oGAAA,QAAQ,OAAA;AACjB,iCAAqD;AAA5C,8FAAA,KAAK,OAAA;AAAE,6FAAA,IAAI,OAAA;AAAE,sGAAA,aAAa,OAAA;AACnC,qCAAmF;AAA1E,gGAAA,KAAK,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,gGAAA,KAAK,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,oGAAA,SAAS,OAAA;AACpD,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,mCAA+C;AAAtC,gGAAA,MAAM,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC5B,yCAAiD;AAAxC,sGAAA,SAAS,OAAA;AAAE,oGAAA,OAAO,OAAA;AAC3B,uCAAgE;AAAvD,oGAAA,QAAQ,OAAA;AAAoB,kGAAA,MAAM,OAAA;AAC3C,yCAAwD;AAA/C,4GAAA,eAAe,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAClC,+BAAuD;AAA9C,4FAAA,IAAI,OAAA;AACb,2CAA6D;AAApD,wGAAA,UAAU,OAAA;AACnB,qCAAsD;AAA7C,sGAAA,WAAW,OAAA;AAAE,uGAAA,YAAY,OAAA;AAClC,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,0CAAwB;AACxB,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AACzB,iDAAmD;AAA1C,2GAAA,aAAa,OAAA;AAEtB,wBAAwB;AACxB,+CAMwB;AALtB,2GAAA,WAAW,OAAA;AAEX,8GAAA,cAAc,OAAA;AACd,iHAAA,iBAAiB,OAAA;AACjB,2GAAA,WAAW,OAAA;AAEb,iCAAmF;AAA1E,uGAAA,cAAc,OAAA;AACvB,+CAAsD;AAA7C,oHAAA,oBAAoB,OAAA;AAE7B,uCAAuC;AACvC,+DAQgC;AAP9B,2HAAA,mBAAmB,OAAA;AASrB,0BAA0B;AAC1B,qCAA0F;AAAjF,iGAAA,MAAM,OAAA;AAAE,oGAAA,SAAS,OAAA;AAAE,yGAAA,cAAc,OAAA;AAE1C,4CAA4C;AAC5C,+CAYwB;AARtB,0GAAA,UAAU,OAAA;AACV,2GAAA,WAAW,OAAA;AACX,sGAAA,MAAM,OAAA;AACN,yGAAA,SAAS,OAAA;AACT,4GAAA,YAAY,OAAA;AACZ,qGAAA,KAAK,OAAA;AACL,qGAAA,KAAK,OAAA;AACL,sGAAA,MAAM,OAAA;AAER,iDAAgE;AAAvD,6GAAA,YAAY,OAAA;AAErB,4BAA4B;AAC5B,qCAMmB;AAHjB,8GAAA,mBAAmB,OAAA;AACnB,0GAAA,eAAe,OAAA;AACf,+GAAA,oBAAoB,OAAA;AAGtB,qCAAqC;AACrC,uDAAuC"}
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface SnapshotOptions {
|
|
|
19
19
|
trace_path?: string;
|
|
20
20
|
goal?: string;
|
|
21
21
|
show_overlay?: boolean;
|
|
22
|
+
show_grid?: boolean;
|
|
23
|
+
grid_id?: number | null;
|
|
22
24
|
}
|
|
23
25
|
export declare function snapshot(browser: IBrowser, options?: SnapshotOptions): Promise<Snapshot>;
|
|
24
26
|
//# sourceMappingURL=snapshot.d.ts.map
|
package/dist/snapshot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,OAAO,GAAG;QAAE,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAsBD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAenB"}
|
package/dist/snapshot.js
CHANGED
|
@@ -120,6 +120,11 @@ async function snapshotViaExtension(browser, options) {
|
|
|
120
120
|
if (options.save_trace && result.raw_elements) {
|
|
121
121
|
_saveTraceToFile(result.raw_elements, options.trace_path);
|
|
122
122
|
}
|
|
123
|
+
// Basic validation
|
|
124
|
+
if (result.status !== 'success' && result.status !== 'error') {
|
|
125
|
+
throw new Error(`Invalid snapshot status: ${result.status}`);
|
|
126
|
+
}
|
|
127
|
+
const snapshot = result;
|
|
123
128
|
// Show visual overlay if requested
|
|
124
129
|
if (options.show_overlay && result.raw_elements) {
|
|
125
130
|
await browser_evaluator_1.BrowserEvaluator.evaluate(page, (elements) => {
|
|
@@ -128,11 +133,34 @@ async function snapshotViaExtension(browser, options) {
|
|
|
128
133
|
}
|
|
129
134
|
}, result.raw_elements);
|
|
130
135
|
}
|
|
131
|
-
//
|
|
132
|
-
if (
|
|
133
|
-
|
|
136
|
+
// Show grid overlay if requested
|
|
137
|
+
if (options.show_grid) {
|
|
138
|
+
const { getGridBounds } = await Promise.resolve().then(() => __importStar(require('./utils/grid-utils')));
|
|
139
|
+
// Get all grids (don't filter by grid_id here - we want to show all but highlight the target)
|
|
140
|
+
const grids = getGridBounds(snapshot, undefined);
|
|
141
|
+
// Debug: Check if elements have layout data
|
|
142
|
+
const elementsWithLayout = snapshot.elements.filter(e => e.layout?.grid_id != null).length;
|
|
143
|
+
if (grids.length === 0 && elementsWithLayout === 0) {
|
|
144
|
+
console.warn('[SDK] No grids detected. Elements may not have layout data. ' +
|
|
145
|
+
'Ensure you are using use_api: false or that the API returns layout data.');
|
|
146
|
+
}
|
|
147
|
+
if (grids.length > 0) {
|
|
148
|
+
// Pass grid_id as targetGridId to highlight it in red
|
|
149
|
+
const targetGridId = options.grid_id ?? null;
|
|
150
|
+
await browser_evaluator_1.BrowserEvaluator.evaluate(page, (args) => {
|
|
151
|
+
if (window.sentience && window.sentience.showGrid) {
|
|
152
|
+
window.sentience.showGrid(args.grids, args.targetGridId);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.warn('[SDK] showGrid not available in extension. Make sure the extension is loaded.');
|
|
156
|
+
}
|
|
157
|
+
}, { grids, targetGridId });
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.warn(`[SDK] No grids to display. Found ${elementsWithLayout} elements with layout data out of ${snapshot.elements.length} total elements.`);
|
|
161
|
+
}
|
|
134
162
|
}
|
|
135
|
-
return
|
|
163
|
+
return snapshot;
|
|
136
164
|
}
|
|
137
165
|
async function snapshotViaApi(browser, options, apiKey, apiUrl) {
|
|
138
166
|
const page = browser.getPage();
|
|
@@ -230,6 +258,24 @@ async function snapshotViaApi(browser, options, apiKey, apiUrl) {
|
|
|
230
258
|
}
|
|
231
259
|
}, apiResult.elements);
|
|
232
260
|
}
|
|
261
|
+
// Show grid overlay if requested
|
|
262
|
+
if (options.show_grid) {
|
|
263
|
+
const { getGridBounds } = await Promise.resolve().then(() => __importStar(require('./utils/grid-utils')));
|
|
264
|
+
// Get all grids (don't filter by grid_id here - we want to show all but highlight the target)
|
|
265
|
+
const grids = getGridBounds(snapshotData, undefined);
|
|
266
|
+
if (grids.length > 0 && page) {
|
|
267
|
+
// Pass grid_id as targetGridId to highlight it in red
|
|
268
|
+
const targetGridId = options.grid_id ?? null;
|
|
269
|
+
await browser_evaluator_1.BrowserEvaluator.evaluate(page, (args) => {
|
|
270
|
+
if (window.sentience && window.sentience.showGrid) {
|
|
271
|
+
window.sentience.showGrid(args.grids, args.targetGridId);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
console.warn('[SDK] showGrid not available in extension');
|
|
275
|
+
}
|
|
276
|
+
}, { grids, targetGridId });
|
|
277
|
+
}
|
|
278
|
+
}
|
|
233
279
|
return snapshotData;
|
|
234
280
|
}
|
|
235
281
|
catch (e) {
|
package/dist/snapshot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -38,6 +38,54 @@ export interface Element {
|
|
|
38
38
|
group_index?: number;
|
|
39
39
|
href?: string;
|
|
40
40
|
in_dominant_group?: boolean;
|
|
41
|
+
layout?: LayoutHints;
|
|
42
|
+
}
|
|
43
|
+
export interface GridPosition {
|
|
44
|
+
/** 0-based row index */
|
|
45
|
+
row_index: number;
|
|
46
|
+
/** 0-based column index */
|
|
47
|
+
col_index: number;
|
|
48
|
+
/** ID of the row cluster (for distinguishing separate grids) */
|
|
49
|
+
cluster_id: number;
|
|
50
|
+
}
|
|
51
|
+
export interface LayoutHints {
|
|
52
|
+
/** Grid ID (maps to GridInfo.grid_id) - distinguishes multiple grids on same page */
|
|
53
|
+
/** Per feedback: Add grid_id to distinguish main feed + sidebar lists + nav links */
|
|
54
|
+
grid_id?: number | null;
|
|
55
|
+
/** Grid position within the grid (row_index, col_index) */
|
|
56
|
+
grid_pos?: GridPosition | null;
|
|
57
|
+
/** Inferred parent index in the original elements slice */
|
|
58
|
+
parent_index?: number | null;
|
|
59
|
+
/** Indices of children elements (optional to avoid payload bloat - container elements can have hundreds) */
|
|
60
|
+
/** Per feedback: Make optional/capped to prevent serializing large arrays */
|
|
61
|
+
children_indices?: number[] | null;
|
|
62
|
+
/** Confidence score for grid position assignment (0.0-1.0) */
|
|
63
|
+
grid_confidence: number;
|
|
64
|
+
/** Confidence score for parent-child containment (0.0-1.0) */
|
|
65
|
+
parent_confidence: number;
|
|
66
|
+
/** Optional: Page region (header/nav/main/aside/footer) - killer signal for ordinality + dominant group */
|
|
67
|
+
/** Per feedback: Optional but very useful for region detection */
|
|
68
|
+
region?: 'header' | 'nav' | 'main' | 'aside' | 'footer' | null;
|
|
69
|
+
/** Confidence score for region assignment (0.0-1.0) */
|
|
70
|
+
region_confidence: number;
|
|
71
|
+
}
|
|
72
|
+
export interface GridInfo {
|
|
73
|
+
/** The grid ID (matches grid_id in LayoutHints) */
|
|
74
|
+
grid_id: number;
|
|
75
|
+
/** Bounding box: x, y, width, height (document coordinates) */
|
|
76
|
+
bbox: BBox;
|
|
77
|
+
/** Number of rows in the grid */
|
|
78
|
+
row_count: number;
|
|
79
|
+
/** Number of columns in the grid */
|
|
80
|
+
col_count: number;
|
|
81
|
+
/** Total number of items in the grid */
|
|
82
|
+
item_count: number;
|
|
83
|
+
/** Confidence score (currently 1.0) */
|
|
84
|
+
confidence: number;
|
|
85
|
+
/** Optional inferred label (e.g., "product_grid", "search_results", "navigation") - best-effort heuristic, may be null */
|
|
86
|
+
label?: string | null;
|
|
87
|
+
/** Whether this grid is the dominant group (main content area) */
|
|
88
|
+
is_dominant?: boolean;
|
|
41
89
|
}
|
|
42
90
|
export interface Snapshot {
|
|
43
91
|
status: 'success' | 'error';
|
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;IAGzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,IAAI,CAAC,EAAE,MAAM,CAAC;IAKd,iBAAiB,CAAC,EAAE,OAAO,CAAC;
|
|
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;IAGzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,IAAI,CAAC,EAAE,MAAM,CAAC;IAKd,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAK5B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,qFAAqF;IACrF,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4GAA4G;IAC5G,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2GAA2G;IAC3G,kEAAkE;IAClE,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC/D,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,IAAI,EAAE,IAAI,CAAC;IACX,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,0HAA0H;IAC1H,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAIzD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAID;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,iEAAiE;IACjE,CAAC,EAAE,MAAM,CAAC;IACV,iEAAiE;IACjE,CAAC,EAAE,MAAM,CAAC;IACV,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,CAAC,EAAE,MAAM,CAAC;IACV,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,QAAQ,CAAC;IACf,0DAA0D;IAC1D,aAAa,EAAE,YAAY,CAAC;IAC5B,+BAA+B;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,QAAQ,GAAG;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for working with grid layout data in snapshots.
|
|
3
|
+
*/
|
|
4
|
+
import type { Snapshot, GridInfo } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Get grid coordinates (bounding boxes) for detected grids.
|
|
7
|
+
*
|
|
8
|
+
* Groups elements by grid_id and computes the overall bounding box,
|
|
9
|
+
* row/column counts, and item count for each grid.
|
|
10
|
+
*
|
|
11
|
+
* @param snapshot - The snapshot containing elements with layout data
|
|
12
|
+
* @param gridId - Optional grid ID to filter by. If undefined, returns all grids.
|
|
13
|
+
* @returns Array of GridInfo objects, one per detected grid, sorted by grid_id.
|
|
14
|
+
* Each GridInfo contains:
|
|
15
|
+
* - grid_id: The grid identifier
|
|
16
|
+
* - bbox: Bounding box (x, y, width, height) in document coordinates
|
|
17
|
+
* - row_count: Number of rows in the grid
|
|
18
|
+
* - col_count: Number of columns in the grid
|
|
19
|
+
* - item_count: Total number of items in the grid
|
|
20
|
+
* - confidence: Confidence score (currently 1.0)
|
|
21
|
+
* - label: Optional inferred label (e.g., "product_grid", "search_results", "navigation")
|
|
22
|
+
* Note: Label inference is best-effort and may not always be accurate
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const snapshot = await browser.snapshot();
|
|
27
|
+
* // Get all grids
|
|
28
|
+
* const allGrids = getGridBounds(snapshot);
|
|
29
|
+
* // Get specific grid
|
|
30
|
+
* const mainGrid = getGridBounds(snapshot, 0);
|
|
31
|
+
* if (mainGrid.length > 0) {
|
|
32
|
+
* console.log(`Grid 0: ${mainGrid[0].item_count} items at (${mainGrid[0].bbox.x}, ${mainGrid[0].bbox.y})`);
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function getGridBounds(snapshot: Snapshot, gridId?: number): GridInfo[];
|
|
37
|
+
//# sourceMappingURL=grid-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-utils.d.ts","sourceRoot":"","sources":["../../src/utils/grid-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAW,MAAM,UAAU,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgI7E"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for working with grid layout data in snapshots.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getGridBounds = getGridBounds;
|
|
7
|
+
/**
|
|
8
|
+
* Get grid coordinates (bounding boxes) for detected grids.
|
|
9
|
+
*
|
|
10
|
+
* Groups elements by grid_id and computes the overall bounding box,
|
|
11
|
+
* row/column counts, and item count for each grid.
|
|
12
|
+
*
|
|
13
|
+
* @param snapshot - The snapshot containing elements with layout data
|
|
14
|
+
* @param gridId - Optional grid ID to filter by. If undefined, returns all grids.
|
|
15
|
+
* @returns Array of GridInfo objects, one per detected grid, sorted by grid_id.
|
|
16
|
+
* Each GridInfo contains:
|
|
17
|
+
* - grid_id: The grid identifier
|
|
18
|
+
* - bbox: Bounding box (x, y, width, height) in document coordinates
|
|
19
|
+
* - row_count: Number of rows in the grid
|
|
20
|
+
* - col_count: Number of columns in the grid
|
|
21
|
+
* - item_count: Total number of items in the grid
|
|
22
|
+
* - confidence: Confidence score (currently 1.0)
|
|
23
|
+
* - label: Optional inferred label (e.g., "product_grid", "search_results", "navigation")
|
|
24
|
+
* Note: Label inference is best-effort and may not always be accurate
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const snapshot = await browser.snapshot();
|
|
29
|
+
* // Get all grids
|
|
30
|
+
* const allGrids = getGridBounds(snapshot);
|
|
31
|
+
* // Get specific grid
|
|
32
|
+
* const mainGrid = getGridBounds(snapshot, 0);
|
|
33
|
+
* if (mainGrid.length > 0) {
|
|
34
|
+
* console.log(`Grid 0: ${mainGrid[0].item_count} items at (${mainGrid[0].bbox.x}, ${mainGrid[0].bbox.y})`);
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
function getGridBounds(snapshot, gridId) {
|
|
39
|
+
// Group elements by grid_id
|
|
40
|
+
const gridElements = new Map();
|
|
41
|
+
for (const elem of snapshot.elements) {
|
|
42
|
+
if (elem.layout?.grid_id != null) {
|
|
43
|
+
const gid = elem.layout.grid_id;
|
|
44
|
+
if (!gridElements.has(gid)) {
|
|
45
|
+
gridElements.set(gid, []);
|
|
46
|
+
}
|
|
47
|
+
gridElements.get(gid).push(elem);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Filter by gridId if specified
|
|
51
|
+
if (gridId !== undefined) {
|
|
52
|
+
if (!gridElements.has(gridId)) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
const filtered = new Map([[gridId, gridElements.get(gridId)]]);
|
|
56
|
+
gridElements.clear();
|
|
57
|
+
filtered.forEach((v, k) => gridElements.set(k, v));
|
|
58
|
+
}
|
|
59
|
+
const gridInfos = [];
|
|
60
|
+
const gridDominantCounts = new Map();
|
|
61
|
+
// Sort by grid_id for consistent output
|
|
62
|
+
const sortedGridIds = Array.from(gridElements.keys()).sort((a, b) => a - b);
|
|
63
|
+
// First pass: compute all grid infos and count dominant group elements
|
|
64
|
+
for (const gid of sortedGridIds) {
|
|
65
|
+
const elementsInGrid = gridElements.get(gid);
|
|
66
|
+
if (elementsInGrid.length === 0) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Count dominant group elements in this grid
|
|
70
|
+
const dominantCount = elementsInGrid.filter(e => e.in_dominant_group === true).length;
|
|
71
|
+
gridDominantCounts.set(gid, {
|
|
72
|
+
dominant: dominantCount,
|
|
73
|
+
total: elementsInGrid.length,
|
|
74
|
+
});
|
|
75
|
+
// Compute bounding box
|
|
76
|
+
let minX = Infinity;
|
|
77
|
+
let minY = Infinity;
|
|
78
|
+
let maxX = -Infinity;
|
|
79
|
+
let maxY = -Infinity;
|
|
80
|
+
// Count rows and columns
|
|
81
|
+
const rowIndices = new Set();
|
|
82
|
+
const colIndices = new Set();
|
|
83
|
+
for (const elem of elementsInGrid) {
|
|
84
|
+
const bbox = elem.bbox;
|
|
85
|
+
minX = Math.min(minX, bbox.x);
|
|
86
|
+
minY = Math.min(minY, bbox.y);
|
|
87
|
+
maxX = Math.max(maxX, bbox.x + bbox.width);
|
|
88
|
+
maxY = Math.max(maxY, bbox.y + bbox.height);
|
|
89
|
+
if (elem.layout?.grid_pos) {
|
|
90
|
+
rowIndices.add(elem.layout.grid_pos.row_index);
|
|
91
|
+
colIndices.add(elem.layout.grid_pos.col_index);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Infer grid label from element patterns (best-effort heuristic)
|
|
95
|
+
const label = inferGridLabel(elementsInGrid);
|
|
96
|
+
gridInfos.push({
|
|
97
|
+
grid_id: gid,
|
|
98
|
+
bbox: {
|
|
99
|
+
x: minX,
|
|
100
|
+
y: minY,
|
|
101
|
+
width: maxX - minX,
|
|
102
|
+
height: maxY - minY,
|
|
103
|
+
},
|
|
104
|
+
row_count: rowIndices.size,
|
|
105
|
+
col_count: colIndices.size,
|
|
106
|
+
item_count: elementsInGrid.length,
|
|
107
|
+
confidence: 1.0,
|
|
108
|
+
label: label,
|
|
109
|
+
is_dominant: false, // Will be set below
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Second pass: identify dominant grid
|
|
113
|
+
// The grid with the highest count (or highest percentage >= 50%) of dominant group elements
|
|
114
|
+
if (gridDominantCounts.size > 0) {
|
|
115
|
+
// Find grid with highest absolute count
|
|
116
|
+
let maxDominantCount = 0;
|
|
117
|
+
for (const { dominant } of gridDominantCounts.values()) {
|
|
118
|
+
maxDominantCount = Math.max(maxDominantCount, dominant);
|
|
119
|
+
}
|
|
120
|
+
if (maxDominantCount > 0) {
|
|
121
|
+
// Find grid(s) with highest count
|
|
122
|
+
const dominantGrids = [];
|
|
123
|
+
for (const [gid, counts] of gridDominantCounts.entries()) {
|
|
124
|
+
if (counts.dominant === maxDominantCount) {
|
|
125
|
+
dominantGrids.push(gid);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// If multiple grids tie, prefer the one with highest percentage
|
|
129
|
+
dominantGrids.sort((a, b) => {
|
|
130
|
+
const aCounts = gridDominantCounts.get(a);
|
|
131
|
+
const bCounts = gridDominantCounts.get(b);
|
|
132
|
+
const aPct = aCounts.total > 0 ? aCounts.dominant / aCounts.total : 0;
|
|
133
|
+
const bPct = bCounts.total > 0 ? bCounts.dominant / bCounts.total : 0;
|
|
134
|
+
return bPct - aPct;
|
|
135
|
+
});
|
|
136
|
+
// Mark the dominant grid
|
|
137
|
+
const dominantGid = dominantGrids[0];
|
|
138
|
+
const counts = gridDominantCounts.get(dominantGid);
|
|
139
|
+
// Only mark as dominant if it has >= 50% dominant group elements or >= 3 elements
|
|
140
|
+
if (counts.dominant >= 3 || (counts.total > 0 && counts.dominant / counts.total >= 0.5)) {
|
|
141
|
+
const gridInfo = gridInfos.find(g => g.grid_id === dominantGid);
|
|
142
|
+
if (gridInfo) {
|
|
143
|
+
gridInfo.is_dominant = true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return gridInfos;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Infer grid label from element patterns using text fingerprinting (best-effort heuristic).
|
|
152
|
+
*
|
|
153
|
+
* Uses patterns similar to dominant_group.rs content filtering logic, inverted to detect
|
|
154
|
+
* semantic grid types. Analyzes first 5 items as a "bag of features".
|
|
155
|
+
*
|
|
156
|
+
* Returns null if label cannot be reliably determined.
|
|
157
|
+
* This is a simple heuristic and may not always be accurate.
|
|
158
|
+
*/
|
|
159
|
+
function inferGridLabel(elements) {
|
|
160
|
+
if (elements.length === 0) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
// Sample first 5 items for fingerprinting (as suggested in feedback)
|
|
164
|
+
const sampleElements = elements.slice(0, 5);
|
|
165
|
+
const elementTexts = sampleElements.map(e => (e.text || '').trim()).filter(t => t.length > 0);
|
|
166
|
+
if (elementTexts.length === 0) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
// Collect text patterns
|
|
170
|
+
const allText = elementTexts.map(t => t.toLowerCase()).join(' ');
|
|
171
|
+
const hrefs = sampleElements.filter(e => e.href).map(e => (e.href || '').toLowerCase());
|
|
172
|
+
// =========================================================================
|
|
173
|
+
// 1. PRODUCT GRID: Currency symbols, action verbs, ratings
|
|
174
|
+
// =========================================================================
|
|
175
|
+
// Currency patterns: $, €, £, or price patterns like "19.99", "$50", "€30"
|
|
176
|
+
const currencyPattern = /[$€£¥]\s*\d+|\d+\.\d{2}/.test(allText);
|
|
177
|
+
const productActionVerbs = [
|
|
178
|
+
'add to cart',
|
|
179
|
+
'buy now',
|
|
180
|
+
'shop now',
|
|
181
|
+
'purchase',
|
|
182
|
+
'out of stock',
|
|
183
|
+
'in stock',
|
|
184
|
+
];
|
|
185
|
+
const hasProductActions = productActionVerbs.some(verb => allText.includes(verb));
|
|
186
|
+
// Ratings pattern: "4.5 stars", "(120 reviews)", "4.5/5"
|
|
187
|
+
const ratingPattern = /\d+\.?\d*\s*(stars?|reviews?|\/5|\/10)/i.test(allText);
|
|
188
|
+
// Product URL patterns
|
|
189
|
+
const productUrlPatterns = ['/product/', '/item/', '/dp/', '/p/', '/products/'];
|
|
190
|
+
const hasProductUrls = hrefs.some(href => productUrlPatterns.some(pattern => href.includes(pattern)));
|
|
191
|
+
if ((currencyPattern || hasProductActions || ratingPattern) &&
|
|
192
|
+
(hasProductUrls ||
|
|
193
|
+
elementTexts.filter(t => /[$€£¥]\s*\d+|\d+\.\d{2}/.test(t.toLowerCase())).length >= 2)) {
|
|
194
|
+
return 'product_grid';
|
|
195
|
+
}
|
|
196
|
+
// =========================================================================
|
|
197
|
+
// 2. ARTICLE/NEWS FEED: Timestamps, bylines, reading time
|
|
198
|
+
// =========================================================================
|
|
199
|
+
// Timestamp patterns (reusing logic from dominant_group.rs)
|
|
200
|
+
// "2 hours ago", "3 days ago", "5 minutes ago", "1 second ago", "2 ago"
|
|
201
|
+
const timestampPatterns = [
|
|
202
|
+
/\d+\s+(hour|day|minute|second)s?\s+ago/i,
|
|
203
|
+
/\d+\s+ago/i, // Short form: "2 ago"
|
|
204
|
+
/\d{1,2}\s+(hour|day|minute|second)\s+ago/i, // Singular
|
|
205
|
+
];
|
|
206
|
+
const hasTimestamps = timestampPatterns.some(pattern => pattern.test(allText));
|
|
207
|
+
// Date patterns: "Aug 21, 2024", "2024-01-13", "Jan 15"
|
|
208
|
+
const datePatterns = [
|
|
209
|
+
/\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\s+\d{1,2},?\s+\d{4}/i,
|
|
210
|
+
/\d{4}-\d{2}-\d{2}/,
|
|
211
|
+
/\d{1,2}\/\d{1,2}\/\d{4}/,
|
|
212
|
+
];
|
|
213
|
+
const hasDates = datePatterns.some(pattern => pattern.test(allText));
|
|
214
|
+
// Bylines: "By [Name]", "Author:", "Written by"
|
|
215
|
+
const bylinePatterns = ['by ', 'author:', 'written by', 'posted by'];
|
|
216
|
+
const hasBylines = bylinePatterns.some(pattern => allText.includes(pattern));
|
|
217
|
+
// Reading time: "5 min read", "10 min", "read more"
|
|
218
|
+
const readingTimePattern = /\d+\s*(min|minute)s?\s*(read)?/i.test(allText);
|
|
219
|
+
if (hasTimestamps || (hasDates && hasBylines) || readingTimePattern) {
|
|
220
|
+
return 'article_feed';
|
|
221
|
+
}
|
|
222
|
+
// =========================================================================
|
|
223
|
+
// 3. SEARCH RESULTS: Snippets, metadata, ellipses
|
|
224
|
+
// =========================================================================
|
|
225
|
+
const searchKeywords = ['result', 'search', 'found', 'showing', 'results 1-', 'sponsored'];
|
|
226
|
+
const hasSearchMetadata = searchKeywords.some(keyword => allText.includes(keyword));
|
|
227
|
+
// Snippet indicators: ellipses, "match found", truncated text
|
|
228
|
+
const hasEllipses = allText.includes('...') || elementTexts.some(t => t.length > 100 && t.includes('...'));
|
|
229
|
+
// Check if many elements are links (typical for search results)
|
|
230
|
+
const linkCount = sampleElements.filter(e => e.role === 'link' || e.href).length;
|
|
231
|
+
const isMostlyLinks = linkCount >= sampleElements.length * 0.7; // 70%+ are links
|
|
232
|
+
if ((hasSearchMetadata || hasEllipses) && isMostlyLinks) {
|
|
233
|
+
return 'search_results';
|
|
234
|
+
}
|
|
235
|
+
// =========================================================================
|
|
236
|
+
// 4. NAVIGATION: Short length, homogeneity, common nav terms
|
|
237
|
+
// =========================================================================
|
|
238
|
+
// Calculate average text length and variance
|
|
239
|
+
const textLengths = elementTexts.map(t => t.length);
|
|
240
|
+
if (textLengths.length > 0) {
|
|
241
|
+
const avgLength = textLengths.reduce((sum, len) => sum + len, 0) / textLengths.length;
|
|
242
|
+
// Low variance = homogeneous (typical of navigation)
|
|
243
|
+
const variance = textLengths.length > 1
|
|
244
|
+
? textLengths.reduce((sum, len) => sum + Math.pow(len - avgLength, 2), 0) /
|
|
245
|
+
textLengths.length
|
|
246
|
+
: 0;
|
|
247
|
+
const navKeywords = [
|
|
248
|
+
'home',
|
|
249
|
+
'about',
|
|
250
|
+
'contact',
|
|
251
|
+
'menu',
|
|
252
|
+
'login',
|
|
253
|
+
'sign in',
|
|
254
|
+
'profile',
|
|
255
|
+
'settings',
|
|
256
|
+
];
|
|
257
|
+
const hasNavKeywords = navKeywords.some(keyword => allText.includes(keyword));
|
|
258
|
+
// Navigation: short average length (< 15 chars) AND low variance OR nav keywords
|
|
259
|
+
if (avgLength < 15 && (variance < 20 || hasNavKeywords)) {
|
|
260
|
+
// Also check if all are links
|
|
261
|
+
if (sampleElements.every(e => e.role === 'link' || e.href)) {
|
|
262
|
+
return 'navigation';
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// =========================================================================
|
|
267
|
+
// 5. BUTTON GRID: All buttons
|
|
268
|
+
// =========================================================================
|
|
269
|
+
if (sampleElements.every(e => e.role === 'button')) {
|
|
270
|
+
return 'button_grid';
|
|
271
|
+
}
|
|
272
|
+
// =========================================================================
|
|
273
|
+
// 6. LINK LIST: Mostly links but not navigation
|
|
274
|
+
// =========================================================================
|
|
275
|
+
const linkListCount = sampleElements.filter(e => e.role === 'link' || e.href).length;
|
|
276
|
+
if (linkListCount >= sampleElements.length * 0.8) {
|
|
277
|
+
// 80%+ are links
|
|
278
|
+
return 'link_list';
|
|
279
|
+
}
|
|
280
|
+
// Unknown/unclear
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=grid-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-utils.js","sourceRoot":"","sources":["../../src/utils/grid-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sentienceapi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.95.0",
|
|
4
4
|
"description": "TypeScript SDK for Sentience AI Agent Browser Automation",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
"sentience": "./dist/cli.js"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
+
"canvas": "^3.2.1",
|
|
33
34
|
"playwright": "^1.40.0",
|
|
35
|
+
"sharp": "^0.34.5",
|
|
34
36
|
"turndown": "^7.2.2",
|
|
35
37
|
"uuid": "^9.0.0",
|
|
36
38
|
"zod": "^3.22.0"
|
package/src/extension/content.js
CHANGED
|
@@ -114,6 +114,41 @@
|
|
|
114
114
|
|
|
115
115
|
case "SENTIENCE_CLEAR_OVERLAY":
|
|
116
116
|
removeOverlay();
|
|
117
|
+
break;
|
|
118
|
+
|
|
119
|
+
case "SENTIENCE_SHOW_GRID_OVERLAY":
|
|
120
|
+
!function(data) {
|
|
121
|
+
const {grids: grids, targetGridId: targetGridId} = data;
|
|
122
|
+
if (!grids || !Array.isArray(grids)) return;
|
|
123
|
+
removeOverlay();
|
|
124
|
+
const host = document.createElement("div");
|
|
125
|
+
host.id = OVERLAY_HOST_ID, host.style.cssText = "\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n width: 100vw !important;\n height: 100vh !important;\n pointer-events: none !important;\n z-index: 2147483647 !important;\n margin: 0 !important;\n padding: 0 !important;\n ",
|
|
126
|
+
document.body.appendChild(host);
|
|
127
|
+
const shadow = host.attachShadow({
|
|
128
|
+
mode: "closed"
|
|
129
|
+
});
|
|
130
|
+
grids.forEach(grid => {
|
|
131
|
+
const bbox = grid.bbox;
|
|
132
|
+
if (!bbox) return;
|
|
133
|
+
const isTarget = grid.grid_id === targetGridId, isDominant = !0 === grid.is_dominant;
|
|
134
|
+
let color = "#9B59B6";
|
|
135
|
+
isTarget ? color = "#FF0000" : isDominant && (color = "#FF8C00");
|
|
136
|
+
const borderStyle = isTarget ? "solid" : "dashed", borderWidth = isTarget ? 3 : isDominant ? 2.5 : 2, opacity = isTarget ? 1 : isDominant ? .9 : .8, fillOpacity = .1 * opacity, hexOpacity = Math.round(255 * fillOpacity).toString(16).padStart(2, "0"), box = document.createElement("div");
|
|
137
|
+
box.style.cssText = `\n position: absolute;\n left: ${bbox.x}px;\n top: ${bbox.y}px;\n width: ${bbox.width}px;\n height: ${bbox.height}px;\n border: ${borderWidth}px ${borderStyle} ${color};\n background-color: ${color}${hexOpacity};\n box-sizing: border-box;\n opacity: ${opacity};\n pointer-events: none;\n `;
|
|
138
|
+
let labelText = grid.label ? `Grid ${grid.grid_id}: ${grid.label}` : `Grid ${grid.grid_id}`;
|
|
139
|
+
grid.is_dominant && (labelText = `⭐ ${labelText} (dominant)`);
|
|
140
|
+
const badge = document.createElement("span");
|
|
141
|
+
if (badge.textContent = labelText, badge.style.cssText = `\n position: absolute;\n top: -18px;\n left: 0;\n background: ${color};\n color: white;\n font-size: 11px;\n font-weight: bold;\n padding: 2px 6px;\n font-family: Arial, sans-serif;\n border-radius: 3px;\n opacity: 0.95;\n white-space: nowrap;\n pointer-events: none;\n `,
|
|
142
|
+
box.appendChild(badge), isTarget) {
|
|
143
|
+
const targetIndicator = document.createElement("span");
|
|
144
|
+
targetIndicator.textContent = "🎯", targetIndicator.style.cssText = "\n position: absolute;\n top: -18px;\n right: 0;\n font-size: 16px;\n pointer-events: none;\n ",
|
|
145
|
+
box.appendChild(targetIndicator);
|
|
146
|
+
}
|
|
147
|
+
shadow.appendChild(box);
|
|
148
|
+
}), overlayTimeout = setTimeout(() => {
|
|
149
|
+
removeOverlay();
|
|
150
|
+
}, 5e3);
|
|
151
|
+
}(event.data);
|
|
117
152
|
}
|
|
118
153
|
});
|
|
119
154
|
const OVERLAY_HOST_ID = "sentience-overlay-host";
|
|
@@ -855,6 +855,14 @@
|
|
|
855
855
|
timestamp: Date.now()
|
|
856
856
|
}, "*");
|
|
857
857
|
}
|
|
858
|
+
function showGrid(grids, targetGridId = null) {
|
|
859
|
+
grids && Array.isArray(grids) && window.postMessage({
|
|
860
|
+
type: "SENTIENCE_SHOW_GRID_OVERLAY",
|
|
861
|
+
grids: grids,
|
|
862
|
+
targetGridId: targetGridId,
|
|
863
|
+
timestamp: Date.now()
|
|
864
|
+
}, "*");
|
|
865
|
+
}
|
|
858
866
|
function clearOverlay() {
|
|
859
867
|
window.postMessage({
|
|
860
868
|
type: "SENTIENCE_CLEAR_OVERLAY"
|
|
@@ -875,6 +883,7 @@
|
|
|
875
883
|
click: click,
|
|
876
884
|
startRecording: startRecording,
|
|
877
885
|
showOverlay: showOverlay,
|
|
886
|
+
showGrid: showGrid,
|
|
878
887
|
clearOverlay: clearOverlay
|
|
879
888
|
}, window.sentience_iframe_handler_setup || (window.addEventListener("message", async event => {
|
|
880
889
|
if ("SENTIENCE_IFRAME_SNAPSHOT_REQUEST" === event.data?.type) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Sentience Semantic Visual Grounding Extractor",
|
|
4
|
-
"version": "2.4.
|
|
4
|
+
"version": "2.4.1",
|
|
5
5
|
"description": "Extract semantic visual grounding data from web pages",
|
|
6
6
|
"permissions": ["activeTab", "scripting"],
|
|
7
7
|
"host_permissions": ["<all_urls>"],
|
|
Binary file
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
"url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/
|
|
3
|
-
"assets_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/
|
|
4
|
-
"upload_url": "https://uploads.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/
|
|
5
|
-
"html_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/tag/v2.4.
|
|
6
|
-
"id":
|
|
2
|
+
"url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/276563152",
|
|
3
|
+
"assets_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/276563152/assets",
|
|
4
|
+
"upload_url": "https://uploads.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/276563152/assets{?name,label}",
|
|
5
|
+
"html_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/tag/v2.4.1",
|
|
6
|
+
"id": 276563152,
|
|
7
7
|
"author": {
|
|
8
|
-
"login": "
|
|
9
|
-
"id":
|
|
10
|
-
"node_id": "
|
|
11
|
-
"avatar_url": "https://avatars.githubusercontent.com/
|
|
8
|
+
"login": "rcholic",
|
|
9
|
+
"id": 135060,
|
|
10
|
+
"node_id": "MDQ6VXNlcjEzNTA2MA==",
|
|
11
|
+
"avatar_url": "https://avatars.githubusercontent.com/u/135060?v=4",
|
|
12
12
|
"gravatar_id": "",
|
|
13
|
-
"url": "https://api.github.com/users/
|
|
14
|
-
"html_url": "https://github.com/
|
|
15
|
-
"followers_url": "https://api.github.com/users/
|
|
16
|
-
"following_url": "https://api.github.com/users/
|
|
17
|
-
"gists_url": "https://api.github.com/users/
|
|
18
|
-
"starred_url": "https://api.github.com/users/
|
|
19
|
-
"subscriptions_url": "https://api.github.com/users/
|
|
20
|
-
"organizations_url": "https://api.github.com/users/
|
|
21
|
-
"repos_url": "https://api.github.com/users/
|
|
22
|
-
"events_url": "https://api.github.com/users/
|
|
23
|
-
"received_events_url": "https://api.github.com/users/
|
|
24
|
-
"type": "
|
|
13
|
+
"url": "https://api.github.com/users/rcholic",
|
|
14
|
+
"html_url": "https://github.com/rcholic",
|
|
15
|
+
"followers_url": "https://api.github.com/users/rcholic/followers",
|
|
16
|
+
"following_url": "https://api.github.com/users/rcholic/following{/other_user}",
|
|
17
|
+
"gists_url": "https://api.github.com/users/rcholic/gists{/gist_id}",
|
|
18
|
+
"starred_url": "https://api.github.com/users/rcholic/starred{/owner}{/repo}",
|
|
19
|
+
"subscriptions_url": "https://api.github.com/users/rcholic/subscriptions",
|
|
20
|
+
"organizations_url": "https://api.github.com/users/rcholic/orgs",
|
|
21
|
+
"repos_url": "https://api.github.com/users/rcholic/repos",
|
|
22
|
+
"events_url": "https://api.github.com/users/rcholic/events{/privacy}",
|
|
23
|
+
"received_events_url": "https://api.github.com/users/rcholic/received_events",
|
|
24
|
+
"type": "User",
|
|
25
25
|
"user_view_type": "public",
|
|
26
26
|
"site_admin": false
|
|
27
27
|
},
|
|
28
|
-
"node_id": "
|
|
29
|
-
"tag_name": "v2.4.
|
|
28
|
+
"node_id": "RE_kwDOQshiJ84QfATQ",
|
|
29
|
+
"tag_name": "v2.4.1",
|
|
30
30
|
"target_commitish": "main",
|
|
31
|
-
"name": "Release v2.4.
|
|
31
|
+
"name": "Release v2.4.1",
|
|
32
32
|
"draft": false,
|
|
33
33
|
"immutable": false,
|
|
34
34
|
"prerelease": false,
|
|
35
|
-
"created_at": "2026-01-
|
|
36
|
-
"updated_at": "2026-01-
|
|
37
|
-
"published_at": "2026-01-
|
|
35
|
+
"created_at": "2026-01-14T01:02:36Z",
|
|
36
|
+
"updated_at": "2026-01-14T01:04:42Z",
|
|
37
|
+
"published_at": "2026-01-14T01:04:00Z",
|
|
38
38
|
"assets": [
|
|
39
39
|
{
|
|
40
|
-
"url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/
|
|
41
|
-
"id":
|
|
42
|
-
"node_id": "
|
|
40
|
+
"url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/340210571",
|
|
41
|
+
"id": 340210571,
|
|
42
|
+
"node_id": "RA_kwDOQshiJ84URzOL",
|
|
43
43
|
"name": "extension-files.tar.gz",
|
|
44
44
|
"label": "",
|
|
45
45
|
"uploader": {
|
|
@@ -65,17 +65,17 @@
|
|
|
65
65
|
},
|
|
66
66
|
"content_type": "application/gzip",
|
|
67
67
|
"state": "uploaded",
|
|
68
|
-
"size":
|
|
69
|
-
"digest": "sha256:
|
|
68
|
+
"size": 74389,
|
|
69
|
+
"digest": "sha256:ed8aeac5d364186b1a6b255aa3aeb5b562f204830f75402d528f2c7e6d819cfd",
|
|
70
70
|
"download_count": 2,
|
|
71
|
-
"created_at": "2026-01-
|
|
72
|
-
"updated_at": "2026-01-
|
|
73
|
-
"browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.
|
|
71
|
+
"created_at": "2026-01-14T01:04:41Z",
|
|
72
|
+
"updated_at": "2026-01-14T01:04:42Z",
|
|
73
|
+
"browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.1/extension-files.tar.gz"
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
|
-
"url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/
|
|
77
|
-
"id":
|
|
78
|
-
"node_id": "
|
|
76
|
+
"url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/assets/340210572",
|
|
77
|
+
"id": 340210572,
|
|
78
|
+
"node_id": "RA_kwDOQshiJ84URzOM",
|
|
79
79
|
"name": "extension-package.zip",
|
|
80
80
|
"label": "",
|
|
81
81
|
"uploader": {
|
|
@@ -101,16 +101,15 @@
|
|
|
101
101
|
},
|
|
102
102
|
"content_type": "application/zip",
|
|
103
103
|
"state": "uploaded",
|
|
104
|
-
"size":
|
|
105
|
-
"digest": "sha256:
|
|
104
|
+
"size": 76376,
|
|
105
|
+
"digest": "sha256:7f209ac1eac7d1a3be1a12248bf523f82a47f6767501dba7dc01660ed218763e",
|
|
106
106
|
"download_count": 0,
|
|
107
|
-
"created_at": "2026-01-
|
|
108
|
-
"updated_at": "2026-01-
|
|
109
|
-
"browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.
|
|
107
|
+
"created_at": "2026-01-14T01:04:41Z",
|
|
108
|
+
"updated_at": "2026-01-14T01:04:42Z",
|
|
109
|
+
"browser_download_url": "https://github.com/SentienceAPI/Sentience-Geometry-Chrome-Extension/releases/download/v2.4.1/extension-package.zip"
|
|
110
110
|
}
|
|
111
111
|
],
|
|
112
|
-
"tarball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/tarball/v2.4.
|
|
113
|
-
"zipball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/zipball/v2.4.
|
|
114
|
-
"body": "
|
|
115
|
-
"mentions_count": 1
|
|
112
|
+
"tarball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/tarball/v2.4.1",
|
|
113
|
+
"zipball_url": "https://api.github.com/repos/SentienceAPI/Sentience-Geometry-Chrome-Extension/zipball/v2.4.1",
|
|
114
|
+
"body": ""
|
|
116
115
|
}
|