sentienceapi 0.90.1 → 0.90.4
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 +236 -274
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/overlay.d.ts +63 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +96 -0
- package/dist/overlay.js.map +1 -0
- package/dist/snapshot.d.ts +1 -0
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +16 -0
- package/dist/snapshot.js.map +1 -1
- package/package.json +2 -1
- package/src/extension/background.js +63 -0
- package/src/extension/content.js +22 -0
- package/src/extension/injected_api.js +438 -0
- package/src/extension/manifest.json +30 -0
- package/src/extension/pkg/README.md +1062 -0
- package/src/extension/pkg/package.json +15 -0
- package/src/extension/pkg/sentience_core.d.ts +42 -0
- package/src/extension/pkg/sentience_core.js +513 -0
- package/src/extension/pkg/sentience_core_bg.wasm +0 -0
- package/src/extension/pkg/sentience_core_bg.wasm.d.ts +9 -0
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { Recorder, Trace, TraceStep, record } from './recorder';
|
|
|
12
12
|
export { ScriptGenerator, generate } from './generator';
|
|
13
13
|
export { read, ReadOptions, ReadResult } from './read';
|
|
14
14
|
export { screenshot, ScreenshotOptions } from './screenshot';
|
|
15
|
+
export { showOverlay, clearOverlay } from './overlay';
|
|
15
16
|
export * from './types';
|
|
16
17
|
export { saveStorageState } from './utils';
|
|
17
18
|
export { LLMProvider, LLMResponse, OpenAIProvider, AnthropicProvider } from './llm-provider';
|
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,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACzE,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,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,MAAM,EACN,SAAS,EACT,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,WAAW,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,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACzE,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,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,MAAM,EACN,SAAS,EACT,cAAc,EACd,UAAU,EACV,cAAc,EACf,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.JsonlTraceSink = exports.TraceSink = exports.Tracer = exports.ConversationalAgent = exports.SentienceAgent = exports.AnthropicProvider = exports.OpenAIProvider = exports.LLMProvider = exports.saveStorageState = 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;
|
|
20
|
+
exports.JsonlTraceSink = exports.TraceSink = exports.Tracer = exports.ConversationalAgent = exports.SentienceAgent = exports.AnthropicProvider = exports.OpenAIProvider = exports.LLMProvider = exports.saveStorageState = 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;
|
|
21
21
|
var browser_1 = require("./browser");
|
|
22
22
|
Object.defineProperty(exports, "SentienceBrowser", { enumerable: true, get: function () { return browser_1.SentienceBrowser; } });
|
|
23
23
|
var snapshot_1 = require("./snapshot");
|
|
@@ -49,6 +49,9 @@ var read_1 = require("./read");
|
|
|
49
49
|
Object.defineProperty(exports, "read", { enumerable: true, get: function () { return read_1.read; } });
|
|
50
50
|
var screenshot_1 = require("./screenshot");
|
|
51
51
|
Object.defineProperty(exports, "screenshot", { enumerable: true, get: function () { return screenshot_1.screenshot; } });
|
|
52
|
+
var overlay_1 = require("./overlay");
|
|
53
|
+
Object.defineProperty(exports, "showOverlay", { enumerable: true, get: function () { return overlay_1.showOverlay; } });
|
|
54
|
+
Object.defineProperty(exports, "clearOverlay", { enumerable: true, get: function () { return overlay_1.clearOverlay; } });
|
|
52
55
|
__exportStar(require("./types"), exports);
|
|
53
56
|
var utils_1 = require("./utils");
|
|
54
57
|
Object.defineProperty(exports, "saveStorageState", { enumerable: true, get: function () { return utils_1.saveStorageState; } });
|
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,qCAAyE;AAAhE,gGAAA,KAAK,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,gGAAA,KAAK,OAAA;AAAE,oGAAA,SAAS,OAAA;AAC1C,+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,0CAAwB;AACxB,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AAEzB,wBAAwB;AACxB,+CAKwB;AAJtB,2GAAA,WAAW,OAAA;AAEX,8GAAA,cAAc,OAAA;AACd,iHAAA,iBAAiB,OAAA;AAEnB,iCAKiB;AAJf,uGAAA,cAAc,OAAA;AAMhB,uCAAuC;AACvC,+DAQgC;AAP9B,2HAAA,mBAAmB,OAAA;AASrB,0BAA0B;AAC1B,qCAMmB;AALjB,iGAAA,MAAM,OAAA;AACN,oGAAA,SAAS,OAAA;AACT,yGAAA,cAAc,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,qCAAyE;AAAhE,gGAAA,KAAK,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAAE,gGAAA,KAAK,OAAA;AAAE,oGAAA,SAAS,OAAA;AAC1C,+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,0CAAwB;AACxB,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AAEzB,wBAAwB;AACxB,+CAKwB;AAJtB,2GAAA,WAAW,OAAA;AAEX,8GAAA,cAAc,OAAA;AACd,iHAAA,iBAAiB,OAAA;AAEnB,iCAKiB;AAJf,uGAAA,cAAc,OAAA;AAMhB,uCAAuC;AACvC,+DAQgC;AAP9B,2HAAA,mBAAmB,OAAA;AASrB,0BAA0B;AAC1B,qCAMmB;AALjB,iGAAA,MAAM,OAAA;AACN,oGAAA,SAAS,OAAA;AACT,yGAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual overlay utilities - show/clear element highlights in browser
|
|
3
|
+
*/
|
|
4
|
+
import { SentienceBrowser } from './browser';
|
|
5
|
+
import { Element, Snapshot } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Display visual overlay highlighting elements in the browser
|
|
8
|
+
*
|
|
9
|
+
* This function shows a Shadow DOM overlay with color-coded borders around
|
|
10
|
+
* detected elements. Useful for debugging, learning, and validating element detection.
|
|
11
|
+
*
|
|
12
|
+
* @param browser - SentienceBrowser instance
|
|
13
|
+
* @param elements - Can be:
|
|
14
|
+
* - List of Element objects (from snapshot.elements)
|
|
15
|
+
* - List of raw element objects (from snapshot result or API response)
|
|
16
|
+
* - Snapshot object (will use snapshot.elements)
|
|
17
|
+
* @param targetElementId - Optional ID of element to highlight in red (default: null)
|
|
18
|
+
*
|
|
19
|
+
* Color Coding:
|
|
20
|
+
* - Red: Target element (when targetElementId is specified)
|
|
21
|
+
* - Blue: Primary elements (is_primary=true)
|
|
22
|
+
* - Green: Regular interactive elements
|
|
23
|
+
*
|
|
24
|
+
* Visual Indicators:
|
|
25
|
+
* - Border thickness and opacity scale with importance score
|
|
26
|
+
* - Semi-transparent fill for better visibility
|
|
27
|
+
* - Importance badges showing scores
|
|
28
|
+
* - Star icon for primary elements
|
|
29
|
+
* - Target emoji for the target element
|
|
30
|
+
*
|
|
31
|
+
* Auto-clear: Overlay automatically disappears after 5 seconds
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Show overlay from snapshot
|
|
35
|
+
* const snap = await snapshot(browser);
|
|
36
|
+
* await showOverlay(browser, snap);
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* // Show overlay with custom elements
|
|
40
|
+
* const elements = [{id: 1, bbox: {x: 100, y: 100, width: 200, height: 50}, ...}];
|
|
41
|
+
* await showOverlay(browser, elements);
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // Show overlay with target element highlighted in red
|
|
45
|
+
* await showOverlay(browser, snap, 42);
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Clear overlay manually before 5 seconds
|
|
49
|
+
* await clearOverlay(browser);
|
|
50
|
+
*/
|
|
51
|
+
export declare function showOverlay(browser: SentienceBrowser, elements: Element[] | any[] | Snapshot, targetElementId?: number | null): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Clear the visual overlay manually (before 5-second auto-clear)
|
|
54
|
+
*
|
|
55
|
+
* @param browser - SentienceBrowser instance
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* await showOverlay(browser, snap);
|
|
59
|
+
* // ... inspect overlay ...
|
|
60
|
+
* await clearOverlay(browser); // Remove immediately
|
|
61
|
+
*/
|
|
62
|
+
export declare function clearOverlay(browser: SentienceBrowser): Promise<void>;
|
|
63
|
+
//# sourceMappingURL=overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,QAAQ,EACtC,eAAe,GAAE,MAAM,GAAG,IAAW,GACpC,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E"}
|
package/dist/overlay.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Visual overlay utilities - show/clear element highlights in browser
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.showOverlay = showOverlay;
|
|
7
|
+
exports.clearOverlay = clearOverlay;
|
|
8
|
+
/**
|
|
9
|
+
* Display visual overlay highlighting elements in the browser
|
|
10
|
+
*
|
|
11
|
+
* This function shows a Shadow DOM overlay with color-coded borders around
|
|
12
|
+
* detected elements. Useful for debugging, learning, and validating element detection.
|
|
13
|
+
*
|
|
14
|
+
* @param browser - SentienceBrowser instance
|
|
15
|
+
* @param elements - Can be:
|
|
16
|
+
* - List of Element objects (from snapshot.elements)
|
|
17
|
+
* - List of raw element objects (from snapshot result or API response)
|
|
18
|
+
* - Snapshot object (will use snapshot.elements)
|
|
19
|
+
* @param targetElementId - Optional ID of element to highlight in red (default: null)
|
|
20
|
+
*
|
|
21
|
+
* Color Coding:
|
|
22
|
+
* - Red: Target element (when targetElementId is specified)
|
|
23
|
+
* - Blue: Primary elements (is_primary=true)
|
|
24
|
+
* - Green: Regular interactive elements
|
|
25
|
+
*
|
|
26
|
+
* Visual Indicators:
|
|
27
|
+
* - Border thickness and opacity scale with importance score
|
|
28
|
+
* - Semi-transparent fill for better visibility
|
|
29
|
+
* - Importance badges showing scores
|
|
30
|
+
* - Star icon for primary elements
|
|
31
|
+
* - Target emoji for the target element
|
|
32
|
+
*
|
|
33
|
+
* Auto-clear: Overlay automatically disappears after 5 seconds
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Show overlay from snapshot
|
|
37
|
+
* const snap = await snapshot(browser);
|
|
38
|
+
* await showOverlay(browser, snap);
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // Show overlay with custom elements
|
|
42
|
+
* const elements = [{id: 1, bbox: {x: 100, y: 100, width: 200, height: 50}, ...}];
|
|
43
|
+
* await showOverlay(browser, elements);
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* // Show overlay with target element highlighted in red
|
|
47
|
+
* await showOverlay(browser, snap, 42);
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* // Clear overlay manually before 5 seconds
|
|
51
|
+
* await clearOverlay(browser);
|
|
52
|
+
*/
|
|
53
|
+
async function showOverlay(browser, elements, targetElementId = null) {
|
|
54
|
+
const page = browser.getPage();
|
|
55
|
+
// Handle different input types
|
|
56
|
+
let elementsList;
|
|
57
|
+
if ('elements' in elements && Array.isArray(elements.elements)) {
|
|
58
|
+
// It's a Snapshot object
|
|
59
|
+
elementsList = elements.elements;
|
|
60
|
+
}
|
|
61
|
+
else if (Array.isArray(elements)) {
|
|
62
|
+
// It's already an array
|
|
63
|
+
elementsList = elements;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw new Error('elements must be a Snapshot object or array of elements');
|
|
67
|
+
}
|
|
68
|
+
// Call extension API
|
|
69
|
+
await page.evaluate((args) => {
|
|
70
|
+
if (window.sentience && window.sentience.showOverlay) {
|
|
71
|
+
window.sentience.showOverlay(args.elements, args.targetId);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.warn('[Sentience SDK] showOverlay not available - is extension loaded?');
|
|
75
|
+
}
|
|
76
|
+
}, { elements: elementsList, targetId: targetElementId });
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Clear the visual overlay manually (before 5-second auto-clear)
|
|
80
|
+
*
|
|
81
|
+
* @param browser - SentienceBrowser instance
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* await showOverlay(browser, snap);
|
|
85
|
+
* // ... inspect overlay ...
|
|
86
|
+
* await clearOverlay(browser); // Remove immediately
|
|
87
|
+
*/
|
|
88
|
+
async function clearOverlay(browser) {
|
|
89
|
+
const page = browser.getPage();
|
|
90
|
+
await page.evaluate(() => {
|
|
91
|
+
if (window.sentience && window.sentience.clearOverlay) {
|
|
92
|
+
window.sentience.clearOverlay();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAkDH,kCA8BC;AAYD,oCAQC;AA/FD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAyB,EACzB,QAAsC,EACtC,kBAAiC,IAAI;IAErC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAE/B,+BAA+B;IAC/B,IAAI,YAAmB,CAAC;IACxB,IAAI,UAAU,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,yBAAyB;QACzB,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,wBAAwB;QACxB,YAAY,GAAG,QAAQ,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,IAAkD,EAAE,EAAE;QACrD,IAAK,MAAc,CAAC,SAAS,IAAK,MAAc,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACtE,MAAc,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,CACtD,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAE/B,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACvB,IAAK,MAAc,CAAC,SAAS,IAAK,MAAc,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YACvE,MAAc,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export interface SnapshotOptions {
|
|
|
18
18
|
save_trace?: boolean;
|
|
19
19
|
trace_path?: string;
|
|
20
20
|
goal?: string;
|
|
21
|
+
show_overlay?: boolean;
|
|
21
22
|
}
|
|
22
23
|
export declare function snapshot(browser: SentienceBrowser, options?: SnapshotOptions): Promise<Snapshot>;
|
|
23
24
|
//# 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;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAInC,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;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAInC,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;CACxB;AAwBD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAiBnB"}
|
package/dist/snapshot.js
CHANGED
|
@@ -111,6 +111,14 @@ async function snapshotViaExtension(browser, options) {
|
|
|
111
111
|
if (options.save_trace && result.raw_elements) {
|
|
112
112
|
_saveTraceToFile(result.raw_elements, options.trace_path);
|
|
113
113
|
}
|
|
114
|
+
// Show visual overlay if requested
|
|
115
|
+
if (options.show_overlay && result.raw_elements) {
|
|
116
|
+
await page.evaluate((elements) => {
|
|
117
|
+
if (window.sentience && window.sentience.showOverlay) {
|
|
118
|
+
window.sentience.showOverlay(elements, null);
|
|
119
|
+
}
|
|
120
|
+
}, result.raw_elements);
|
|
121
|
+
}
|
|
114
122
|
// Basic validation
|
|
115
123
|
if (result.status !== 'success' && result.status !== 'error') {
|
|
116
124
|
throw new Error(`Invalid snapshot status: ${result.status}`);
|
|
@@ -178,6 +186,14 @@ async function snapshotViaApi(browser, options, apiKey, apiUrl) {
|
|
|
178
186
|
screenshot_format: rawResult.screenshot_format,
|
|
179
187
|
error: apiResult.error,
|
|
180
188
|
};
|
|
189
|
+
// Show visual overlay if requested (use API-ranked elements)
|
|
190
|
+
if (options.show_overlay && apiResult.elements) {
|
|
191
|
+
await page.evaluate((elements) => {
|
|
192
|
+
if (window.sentience && window.sentience.showOverlay) {
|
|
193
|
+
window.sentience.showOverlay(elements, null);
|
|
194
|
+
}
|
|
195
|
+
}, apiResult.elements);
|
|
196
|
+
}
|
|
181
197
|
return snapshotData;
|
|
182
198
|
}
|
|
183
199
|
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sentienceapi",
|
|
3
|
-
"version": "0.90.
|
|
3
|
+
"version": "0.90.4",
|
|
4
4
|
"description": "TypeScript SDK for Sentience AI Agent Browser Automation",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
|
48
48
|
"dist",
|
|
49
|
+
"src/extension",
|
|
49
50
|
"spec",
|
|
50
51
|
"README.md",
|
|
51
52
|
"LICENSE"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// background.js - Service Worker for screenshot capture
|
|
2
|
+
// Chrome extensions can only capture screenshots from the background script
|
|
3
|
+
// Listen for screenshot requests from content script
|
|
4
|
+
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
|
5
|
+
if (request.action === 'captureScreenshot') {
|
|
6
|
+
handleScreenshotCapture(sender.tab.id, request.options)
|
|
7
|
+
.then(screenshot => {
|
|
8
|
+
sendResponse({ success: true, screenshot });
|
|
9
|
+
})
|
|
10
|
+
.catch(error => {
|
|
11
|
+
console.error('[Sentience] Screenshot capture failed:', error);
|
|
12
|
+
sendResponse({
|
|
13
|
+
success: false,
|
|
14
|
+
error: error.message || 'Screenshot capture failed'
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Return true to indicate we'll send response asynchronously
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Capture screenshot of the active tab
|
|
25
|
+
* @param {number} tabId - Tab ID to capture
|
|
26
|
+
* @param {Object} options - Screenshot options
|
|
27
|
+
* @returns {Promise<string>} Base64-encoded PNG data URL
|
|
28
|
+
*/
|
|
29
|
+
async function handleScreenshotCapture(tabId, options = {}) {
|
|
30
|
+
try {
|
|
31
|
+
const {
|
|
32
|
+
format = 'png', // 'png' or 'jpeg'
|
|
33
|
+
quality = 90 // JPEG quality (0-100), ignored for PNG
|
|
34
|
+
} = options;
|
|
35
|
+
|
|
36
|
+
// Capture visible tab as data URL
|
|
37
|
+
const dataUrl = await chrome.tabs.captureVisibleTab(null, {
|
|
38
|
+
format: format,
|
|
39
|
+
quality: quality
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
console.log(`[Sentience] Screenshot captured: ${format}, size: ${dataUrl.length} bytes`);
|
|
43
|
+
|
|
44
|
+
return dataUrl;
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.error('[Sentience] Screenshot error:', error);
|
|
47
|
+
throw new Error(`Failed to capture screenshot: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Optional: Add viewport-specific capture (requires additional setup)
|
|
53
|
+
* This would allow capturing specific regions, not just visible area
|
|
54
|
+
*/
|
|
55
|
+
async function captureRegion(tabId, region) {
|
|
56
|
+
// For region capture, you'd need to:
|
|
57
|
+
// 1. Capture full visible tab
|
|
58
|
+
// 2. Use Canvas API to crop to region
|
|
59
|
+
// 3. Return cropped image
|
|
60
|
+
|
|
61
|
+
// Not implemented in this basic version
|
|
62
|
+
throw new Error('Region capture not yet implemented');
|
|
63
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// content.js - ISOLATED WORLD
|
|
2
|
+
console.log('[Sentience] Bridge loaded.');
|
|
3
|
+
|
|
4
|
+
// 1. Pass Extension ID to Main World (So WASM knows where to load from)
|
|
5
|
+
document.documentElement.dataset.sentienceExtensionId = chrome.runtime.id;
|
|
6
|
+
|
|
7
|
+
// 2. Proxy for Screenshots (The only thing Isolated World needs to do)
|
|
8
|
+
window.addEventListener('message', (event) => {
|
|
9
|
+
// Security check: only accept messages from same window
|
|
10
|
+
if (event.source !== window || event.data.type !== 'SENTIENCE_SCREENSHOT_REQUEST') return;
|
|
11
|
+
|
|
12
|
+
chrome.runtime.sendMessage(
|
|
13
|
+
{ action: 'captureScreenshot', options: event.data.options },
|
|
14
|
+
(response) => {
|
|
15
|
+
window.postMessage({
|
|
16
|
+
type: 'SENTIENCE_SCREENSHOT_RESULT',
|
|
17
|
+
requestId: event.data.requestId,
|
|
18
|
+
screenshot: response?.success ? response.screenshot : null
|
|
19
|
+
}, '*');
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
});
|