@predicatelabs/sdk 0.99.9
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/LICENSE +24 -0
- package/README.md +252 -0
- package/dist/actions.d.ts +185 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +1120 -0
- package/dist/actions.js.map +1 -0
- package/dist/agent-runtime.d.ts +352 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +1170 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/agent.d.ts +164 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +408 -0
- package/dist/agent.js.map +1 -0
- package/dist/asserts/expect.d.ts +159 -0
- package/dist/asserts/expect.d.ts.map +1 -0
- package/dist/asserts/expect.js +547 -0
- package/dist/asserts/expect.js.map +1 -0
- package/dist/asserts/index.d.ts +58 -0
- package/dist/asserts/index.d.ts.map +1 -0
- package/dist/asserts/index.js +70 -0
- package/dist/asserts/index.js.map +1 -0
- package/dist/asserts/query.d.ts +199 -0
- package/dist/asserts/query.d.ts.map +1 -0
- package/dist/asserts/query.js +288 -0
- package/dist/asserts/query.js.map +1 -0
- package/dist/backends/actions.d.ts +119 -0
- package/dist/backends/actions.d.ts.map +1 -0
- package/dist/backends/actions.js +291 -0
- package/dist/backends/actions.js.map +1 -0
- package/dist/backends/browser-use-adapter.d.ts +131 -0
- package/dist/backends/browser-use-adapter.d.ts.map +1 -0
- package/dist/backends/browser-use-adapter.js +219 -0
- package/dist/backends/browser-use-adapter.js.map +1 -0
- package/dist/backends/cdp-backend.d.ts +66 -0
- package/dist/backends/cdp-backend.d.ts.map +1 -0
- package/dist/backends/cdp-backend.js +273 -0
- package/dist/backends/cdp-backend.js.map +1 -0
- package/dist/backends/index.d.ts +80 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +101 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/protocol.d.ts +156 -0
- package/dist/backends/protocol.d.ts.map +1 -0
- package/dist/backends/protocol.js +16 -0
- package/dist/backends/protocol.js.map +1 -0
- package/dist/backends/sentience-context.d.ts +143 -0
- package/dist/backends/sentience-context.d.ts.map +1 -0
- package/dist/backends/sentience-context.js +359 -0
- package/dist/backends/sentience-context.js.map +1 -0
- package/dist/backends/snapshot.d.ts +188 -0
- package/dist/backends/snapshot.d.ts.map +1 -0
- package/dist/backends/snapshot.js +360 -0
- package/dist/backends/snapshot.js.map +1 -0
- package/dist/browser.d.ts +154 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +920 -0
- package/dist/browser.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/captcha/strategies.d.ts +12 -0
- package/dist/captcha/strategies.d.ts.map +1 -0
- package/dist/captcha/strategies.js +43 -0
- package/dist/captcha/strategies.js.map +1 -0
- package/dist/captcha/types.d.ts +45 -0
- package/dist/captcha/types.d.ts.map +1 -0
- package/dist/captcha/types.js +12 -0
- package/dist/captcha/types.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +422 -0
- package/dist/cli.js.map +1 -0
- package/dist/conversational-agent.d.ts +123 -0
- package/dist/conversational-agent.d.ts.map +1 -0
- package/dist/conversational-agent.js +341 -0
- package/dist/conversational-agent.js.map +1 -0
- package/dist/cursor-policy.d.ts +41 -0
- package/dist/cursor-policy.d.ts.map +1 -0
- package/dist/cursor-policy.js +81 -0
- package/dist/cursor-policy.js.map +1 -0
- package/dist/debugger.d.ts +28 -0
- package/dist/debugger.d.ts.map +1 -0
- package/dist/debugger.js +107 -0
- package/dist/debugger.js.map +1 -0
- package/dist/expect.d.ts +16 -0
- package/dist/expect.d.ts.map +1 -0
- package/dist/expect.js +67 -0
- package/dist/expect.js.map +1 -0
- package/dist/failure-artifacts.d.ts +95 -0
- package/dist/failure-artifacts.d.ts.map +1 -0
- package/dist/failure-artifacts.js +805 -0
- package/dist/failure-artifacts.js.map +1 -0
- package/dist/generator.d.ts +16 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +205 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +160 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector.d.ts +13 -0
- package/dist/inspector.d.ts.map +1 -0
- package/dist/inspector.js +153 -0
- package/dist/inspector.js.map +1 -0
- package/dist/llm-provider.d.ts +144 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +460 -0
- package/dist/llm-provider.js.map +1 -0
- 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/overlay.d.ts +63 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +102 -0
- package/dist/overlay.js.map +1 -0
- package/dist/protocols/browser-protocol.d.ts +79 -0
- package/dist/protocols/browser-protocol.d.ts.map +1 -0
- package/dist/protocols/browser-protocol.js +9 -0
- package/dist/protocols/browser-protocol.js.map +1 -0
- package/dist/query.d.ts +66 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +482 -0
- package/dist/query.js.map +1 -0
- package/dist/read.d.ts +47 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +128 -0
- package/dist/read.js.map +1 -0
- package/dist/recorder.d.ts +44 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +262 -0
- package/dist/recorder.js.map +1 -0
- package/dist/runtime-agent.d.ts +72 -0
- package/dist/runtime-agent.d.ts.map +1 -0
- package/dist/runtime-agent.js +357 -0
- package/dist/runtime-agent.js.map +1 -0
- package/dist/screenshot.d.ts +17 -0
- package/dist/screenshot.d.ts.map +1 -0
- package/dist/screenshot.js +40 -0
- package/dist/screenshot.js.map +1 -0
- package/dist/snapshot-diff.d.ts +23 -0
- package/dist/snapshot-diff.d.ts.map +1 -0
- package/dist/snapshot-diff.js +119 -0
- package/dist/snapshot-diff.js.map +1 -0
- package/dist/snapshot.d.ts +47 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +358 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/textSearch.d.ts +64 -0
- package/dist/textSearch.d.ts.map +1 -0
- package/dist/textSearch.js +113 -0
- package/dist/textSearch.js.map +1 -0
- package/dist/tools/context.d.ts +18 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +40 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/defaults.d.ts +5 -0
- package/dist/tools/defaults.d.ts.map +1 -0
- package/dist/tools/defaults.js +368 -0
- package/dist/tools/defaults.js.map +1 -0
- package/dist/tools/filesystem.d.ts +12 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +137 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +38 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +100 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tracing/cloud-sink.d.ts +189 -0
- package/dist/tracing/cloud-sink.d.ts.map +1 -0
- package/dist/tracing/cloud-sink.js +1067 -0
- package/dist/tracing/cloud-sink.js.map +1 -0
- package/dist/tracing/index-schema.d.ts +231 -0
- package/dist/tracing/index-schema.d.ts.map +1 -0
- package/dist/tracing/index-schema.js +235 -0
- package/dist/tracing/index-schema.js.map +1 -0
- package/dist/tracing/index.d.ts +12 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +28 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/indexer.d.ts +20 -0
- package/dist/tracing/indexer.d.ts.map +1 -0
- package/dist/tracing/indexer.js +347 -0
- package/dist/tracing/indexer.js.map +1 -0
- package/dist/tracing/jsonl-sink.d.ts +51 -0
- package/dist/tracing/jsonl-sink.d.ts.map +1 -0
- package/dist/tracing/jsonl-sink.js +329 -0
- package/dist/tracing/jsonl-sink.js.map +1 -0
- package/dist/tracing/sink.d.ts +25 -0
- package/dist/tracing/sink.d.ts.map +1 -0
- package/dist/tracing/sink.js +15 -0
- package/dist/tracing/sink.js.map +1 -0
- package/dist/tracing/tracer-factory.d.ts +102 -0
- package/dist/tracing/tracer-factory.d.ts.map +1 -0
- package/dist/tracing/tracer-factory.js +375 -0
- package/dist/tracing/tracer-factory.js.map +1 -0
- package/dist/tracing/tracer.d.ts +140 -0
- package/dist/tracing/tracer.d.ts.map +1 -0
- package/dist/tracing/tracer.js +336 -0
- package/dist/tracing/tracer.js.map +1 -0
- package/dist/tracing/types.d.ts +203 -0
- package/dist/tracing/types.d.ts.map +1 -0
- package/dist/tracing/types.js +8 -0
- package/dist/tracing/types.js.map +1 -0
- package/dist/types.d.ts +422 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/action-executor.d.ts +25 -0
- package/dist/utils/action-executor.d.ts.map +1 -0
- package/dist/utils/action-executor.js +121 -0
- package/dist/utils/action-executor.js.map +1 -0
- package/dist/utils/browser-evaluator.d.ts +76 -0
- package/dist/utils/browser-evaluator.d.ts.map +1 -0
- package/dist/utils/browser-evaluator.js +130 -0
- package/dist/utils/browser-evaluator.js.map +1 -0
- package/dist/utils/browser.d.ts +30 -0
- package/dist/utils/browser.d.ts.map +1 -0
- package/dist/utils/browser.js +75 -0
- package/dist/utils/browser.js.map +1 -0
- package/dist/utils/element-filter.d.ts +76 -0
- package/dist/utils/element-filter.d.ts.map +1 -0
- package/dist/utils/element-filter.js +195 -0
- package/dist/utils/element-filter.js.map +1 -0
- 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/dist/utils/llm-interaction-handler.d.ts +41 -0
- package/dist/utils/llm-interaction-handler.d.ts.map +1 -0
- package/dist/utils/llm-interaction-handler.js +171 -0
- package/dist/utils/llm-interaction-handler.js.map +1 -0
- package/dist/utils/llm-response-builder.d.ts +56 -0
- package/dist/utils/llm-response-builder.d.ts.map +1 -0
- package/dist/utils/llm-response-builder.js +130 -0
- package/dist/utils/llm-response-builder.js.map +1 -0
- package/dist/utils/selector-utils.d.ts +12 -0
- package/dist/utils/selector-utils.d.ts.map +1 -0
- package/dist/utils/selector-utils.js +32 -0
- package/dist/utils/selector-utils.js.map +1 -0
- package/dist/utils/snapshot-event-builder.d.ts +28 -0
- package/dist/utils/snapshot-event-builder.d.ts.map +1 -0
- package/dist/utils/snapshot-event-builder.js +88 -0
- package/dist/utils/snapshot-event-builder.js.map +1 -0
- package/dist/utils/snapshot-processor.d.ts +27 -0
- package/dist/utils/snapshot-processor.d.ts.map +1 -0
- package/dist/utils/snapshot-processor.js +47 -0
- package/dist/utils/snapshot-processor.js.map +1 -0
- package/dist/utils/trace-event-builder.d.ts +122 -0
- package/dist/utils/trace-event-builder.d.ts.map +1 -0
- package/dist/utils/trace-event-builder.js +365 -0
- package/dist/utils/trace-event-builder.js.map +1 -0
- package/dist/utils/trace-file-manager.d.ts +70 -0
- package/dist/utils/trace-file-manager.d.ts.map +1 -0
- package/dist/utils/trace-file-manager.js +194 -0
- package/dist/utils/trace-file-manager.js.map +1 -0
- package/dist/utils/zod.d.ts +5 -0
- package/dist/utils/zod.d.ts.map +1 -0
- package/dist/utils/zod.js +80 -0
- package/dist/utils/zod.js.map +1 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +13 -0
- package/dist/utils.js.map +1 -0
- package/dist/verification.d.ts +194 -0
- package/dist/verification.d.ts.map +1 -0
- package/dist/verification.js +530 -0
- package/dist/verification.js.map +1 -0
- package/dist/vision-executor.d.ts +18 -0
- package/dist/vision-executor.d.ts.map +1 -0
- package/dist/vision-executor.js +60 -0
- package/dist/vision-executor.js.map +1 -0
- package/dist/visual-agent.d.ts +120 -0
- package/dist/visual-agent.d.ts.map +1 -0
- package/dist/visual-agent.js +796 -0
- package/dist/visual-agent.js.map +1 -0
- package/dist/wait.d.ts +35 -0
- package/dist/wait.d.ts.map +1 -0
- package/dist/wait.js +76 -0
- package/dist/wait.js.map +1 -0
- package/package.json +94 -0
- package/spec/README.md +72 -0
- package/spec/SNAPSHOT_V1.md +208 -0
- package/spec/sdk-types.md +259 -0
- package/spec/snapshot.schema.json +148 -0
- package/src/extension/background.js +104 -0
- package/src/extension/content.js +162 -0
- package/src/extension/injected_api.js +1399 -0
- package/src/extension/manifest.json +36 -0
- package/src/extension/pkg/README.md +1340 -0
- package/src/extension/pkg/package.json +15 -0
- package/src/extension/pkg/sentience_core.d.ts +51 -0
- package/src/extension/pkg/sentience_core.js +371 -0
- package/src/extension/pkg/sentience_core_bg.wasm +0 -0
- package/src/extension/pkg/sentience_core_bg.wasm.d.ts +10 -0
- package/src/extension/release.json +116 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDP Backend implementation for browser-use integration.
|
|
3
|
+
*
|
|
4
|
+
* This module provides CDPBackend, which implements BrowserBackend protocol
|
|
5
|
+
* using Chrome DevTools Protocol (CDP) commands.
|
|
6
|
+
*
|
|
7
|
+
* Usage with browser-use:
|
|
8
|
+
* import { CDPBackend, CDPTransport } from './backends/cdp-backend';
|
|
9
|
+
*
|
|
10
|
+
* // Create transport from browser-use CDP client
|
|
11
|
+
* const transport: CDPTransport = {
|
|
12
|
+
* send: async (method, params) => {
|
|
13
|
+
* // Call browser-use's CDP client
|
|
14
|
+
* return await cdpClient.send[domain][method](params, sessionId);
|
|
15
|
+
* }
|
|
16
|
+
* };
|
|
17
|
+
*
|
|
18
|
+
* const backend = new CDPBackend(transport);
|
|
19
|
+
*
|
|
20
|
+
* // Now use backend for Sentience operations
|
|
21
|
+
* const viewport = await backend.refreshPageInfo();
|
|
22
|
+
* await backend.mouseClick(100, 200);
|
|
23
|
+
*/
|
|
24
|
+
import { BrowserBackend, LayoutMetrics, MouseButton, ReadyState, ViewportInfo } from './protocol';
|
|
25
|
+
/**
|
|
26
|
+
* Protocol for CDP transport layer.
|
|
27
|
+
*
|
|
28
|
+
* This abstracts the actual CDP communication, allowing different
|
|
29
|
+
* implementations (browser-use, Playwright CDP, raw WebSocket).
|
|
30
|
+
*/
|
|
31
|
+
export interface CDPTransport {
|
|
32
|
+
/**
|
|
33
|
+
* Send a CDP command and return the result.
|
|
34
|
+
*
|
|
35
|
+
* @param method - CDP method name, e.g., "Runtime.evaluate"
|
|
36
|
+
* @param params - Method parameters
|
|
37
|
+
* @returns CDP response dict
|
|
38
|
+
*/
|
|
39
|
+
send(method: string, params?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* CDP-based implementation of BrowserBackend.
|
|
43
|
+
*
|
|
44
|
+
* This backend uses CDP commands to interact with the browser,
|
|
45
|
+
* making it compatible with browser-use's CDP client.
|
|
46
|
+
*/
|
|
47
|
+
export declare class CDPBackend implements BrowserBackend {
|
|
48
|
+
private transport;
|
|
49
|
+
private cachedViewport;
|
|
50
|
+
private executionContextId;
|
|
51
|
+
constructor(transport: CDPTransport);
|
|
52
|
+
private getExecutionContext;
|
|
53
|
+
refreshPageInfo(): Promise<ViewportInfo>;
|
|
54
|
+
eval(expression: string): Promise<unknown>;
|
|
55
|
+
call(functionDeclaration: string, args?: unknown[]): Promise<unknown>;
|
|
56
|
+
getLayoutMetrics(): Promise<LayoutMetrics>;
|
|
57
|
+
screenshotPng(): Promise<string>;
|
|
58
|
+
mouseMove(x: number, y: number): Promise<void>;
|
|
59
|
+
mouseClick(x: number, y: number, button?: MouseButton, clickCount?: number): Promise<void>;
|
|
60
|
+
wheel(deltaY: number, x?: number, y?: number): Promise<void>;
|
|
61
|
+
typeText(text: string): Promise<void>;
|
|
62
|
+
waitReadyState(state?: ReadyState, timeoutMs?: number): Promise<void>;
|
|
63
|
+
getUrl(): Promise<string>;
|
|
64
|
+
private sleep;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=cdp-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-backend.d.ts","sourceRoot":"","sources":["../../src/backends/cdp-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElG;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1F;AAED;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,kBAAkB,CAAuB;gBAErC,SAAS,EAAE,YAAY;YAIrB,mBAAmB;IA6B3B,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAqBxC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0B1C,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA4DrE,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC;IAqB1C,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAShC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,UAAU,CACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,GAAE,WAAoB,EAC5B,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,IAAI,CAAC;IAuBV,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB5D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBrC,cAAc,CAClB,KAAK,GAAE,UAA0B,EACjC,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,IAAI,CAAC;IAyBV,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAK/B,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CDP Backend implementation for browser-use integration.
|
|
4
|
+
*
|
|
5
|
+
* This module provides CDPBackend, which implements BrowserBackend protocol
|
|
6
|
+
* using Chrome DevTools Protocol (CDP) commands.
|
|
7
|
+
*
|
|
8
|
+
* Usage with browser-use:
|
|
9
|
+
* import { CDPBackend, CDPTransport } from './backends/cdp-backend';
|
|
10
|
+
*
|
|
11
|
+
* // Create transport from browser-use CDP client
|
|
12
|
+
* const transport: CDPTransport = {
|
|
13
|
+
* send: async (method, params) => {
|
|
14
|
+
* // Call browser-use's CDP client
|
|
15
|
+
* return await cdpClient.send[domain][method](params, sessionId);
|
|
16
|
+
* }
|
|
17
|
+
* };
|
|
18
|
+
*
|
|
19
|
+
* const backend = new CDPBackend(transport);
|
|
20
|
+
*
|
|
21
|
+
* // Now use backend for Sentience operations
|
|
22
|
+
* const viewport = await backend.refreshPageInfo();
|
|
23
|
+
* await backend.mouseClick(100, 200);
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.CDPBackend = void 0;
|
|
27
|
+
/**
|
|
28
|
+
* CDP-based implementation of BrowserBackend.
|
|
29
|
+
*
|
|
30
|
+
* This backend uses CDP commands to interact with the browser,
|
|
31
|
+
* making it compatible with browser-use's CDP client.
|
|
32
|
+
*/
|
|
33
|
+
class CDPBackend {
|
|
34
|
+
constructor(transport) {
|
|
35
|
+
this.cachedViewport = null;
|
|
36
|
+
this.executionContextId = null;
|
|
37
|
+
this.transport = transport;
|
|
38
|
+
}
|
|
39
|
+
async getExecutionContext() {
|
|
40
|
+
if (this.executionContextId !== null) {
|
|
41
|
+
return this.executionContextId;
|
|
42
|
+
}
|
|
43
|
+
// Enable Runtime domain if not already enabled
|
|
44
|
+
try {
|
|
45
|
+
await this.transport.send('Runtime.enable');
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// May already be enabled
|
|
49
|
+
}
|
|
50
|
+
// Get the main frame's execution context
|
|
51
|
+
const result = await this.transport.send('Runtime.evaluate', {
|
|
52
|
+
expression: '1',
|
|
53
|
+
returnByValue: true,
|
|
54
|
+
});
|
|
55
|
+
// Extract context ID from the result
|
|
56
|
+
if ('executionContextId' in result) {
|
|
57
|
+
this.executionContextId = result.executionContextId;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Fallback: use context ID 1 (main frame)
|
|
61
|
+
this.executionContextId = 1;
|
|
62
|
+
}
|
|
63
|
+
return this.executionContextId;
|
|
64
|
+
}
|
|
65
|
+
async refreshPageInfo() {
|
|
66
|
+
const result = (await this.eval(`(() => ({
|
|
67
|
+
width: window.innerWidth,
|
|
68
|
+
height: window.innerHeight,
|
|
69
|
+
scrollX: window.scrollX,
|
|
70
|
+
scrollY: window.scrollY,
|
|
71
|
+
contentWidth: document.documentElement.scrollWidth,
|
|
72
|
+
contentHeight: document.documentElement.scrollHeight
|
|
73
|
+
}))()`));
|
|
74
|
+
this.cachedViewport = {
|
|
75
|
+
width: result.width || 0,
|
|
76
|
+
height: result.height || 0,
|
|
77
|
+
scrollX: result.scrollX || 0,
|
|
78
|
+
scrollY: result.scrollY || 0,
|
|
79
|
+
contentWidth: result.contentWidth,
|
|
80
|
+
contentHeight: result.contentHeight,
|
|
81
|
+
};
|
|
82
|
+
return this.cachedViewport;
|
|
83
|
+
}
|
|
84
|
+
async eval(expression) {
|
|
85
|
+
const result = await this.transport.send('Runtime.evaluate', {
|
|
86
|
+
expression,
|
|
87
|
+
returnByValue: true,
|
|
88
|
+
awaitPromise: true,
|
|
89
|
+
});
|
|
90
|
+
// Check for exceptions
|
|
91
|
+
if ('exceptionDetails' in result) {
|
|
92
|
+
const exc = result.exceptionDetails;
|
|
93
|
+
const text = exc.text || 'Unknown error';
|
|
94
|
+
throw new Error(`JavaScript evaluation failed: ${text}`);
|
|
95
|
+
}
|
|
96
|
+
// Extract value from result
|
|
97
|
+
if ('result' in result) {
|
|
98
|
+
const res = result.result;
|
|
99
|
+
if (res.type === 'undefined') {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
return res.value;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
async call(functionDeclaration, args) {
|
|
107
|
+
// Build call arguments
|
|
108
|
+
const callArgs = [];
|
|
109
|
+
if (args) {
|
|
110
|
+
for (const arg of args) {
|
|
111
|
+
callArgs.push({ value: arg });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// We need an object ID to call function on
|
|
115
|
+
// Use globalThis (window) as the target
|
|
116
|
+
const globalResult = await this.transport.send('Runtime.evaluate', {
|
|
117
|
+
expression: 'globalThis',
|
|
118
|
+
returnByValue: false,
|
|
119
|
+
});
|
|
120
|
+
const resultObj = globalResult.result;
|
|
121
|
+
const objectId = resultObj?.objectId;
|
|
122
|
+
if (!objectId) {
|
|
123
|
+
// Fallback: evaluate the function directly
|
|
124
|
+
if (args && args.length > 0) {
|
|
125
|
+
const argsJson = args
|
|
126
|
+
.map(a => (typeof a === 'string' ? JSON.stringify(a) : String(a)))
|
|
127
|
+
.join(', ');
|
|
128
|
+
const expression = `(${functionDeclaration})(${argsJson})`;
|
|
129
|
+
return await this.eval(expression);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const expression = `(${functionDeclaration})()`;
|
|
133
|
+
return await this.eval(expression);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const result = await this.transport.send('Runtime.callFunctionOn', {
|
|
137
|
+
functionDeclaration,
|
|
138
|
+
objectId,
|
|
139
|
+
arguments: callArgs,
|
|
140
|
+
returnByValue: true,
|
|
141
|
+
awaitPromise: true,
|
|
142
|
+
});
|
|
143
|
+
// Check for exceptions
|
|
144
|
+
if ('exceptionDetails' in result) {
|
|
145
|
+
const exc = result.exceptionDetails;
|
|
146
|
+
const text = exc.text || 'Unknown error';
|
|
147
|
+
throw new Error(`JavaScript call failed: ${text}`);
|
|
148
|
+
}
|
|
149
|
+
// Extract value from result
|
|
150
|
+
if ('result' in result) {
|
|
151
|
+
const res = result.result;
|
|
152
|
+
if (res.type === 'undefined') {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
return res.value;
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
async getLayoutMetrics() {
|
|
160
|
+
const result = await this.transport.send('Page.getLayoutMetrics');
|
|
161
|
+
// Extract metrics from result
|
|
162
|
+
const layoutViewport = result.layoutViewport || {};
|
|
163
|
+
const contentSize = result.contentSize || {};
|
|
164
|
+
const visualViewport = result.visualViewport || {};
|
|
165
|
+
return {
|
|
166
|
+
viewportX: visualViewport.pageX || 0,
|
|
167
|
+
viewportY: visualViewport.pageY || 0,
|
|
168
|
+
viewportWidth: visualViewport.clientWidth || layoutViewport.clientWidth || 0,
|
|
169
|
+
viewportHeight: visualViewport.clientHeight || layoutViewport.clientHeight || 0,
|
|
170
|
+
contentWidth: contentSize.width || 0,
|
|
171
|
+
contentHeight: contentSize.height || 0,
|
|
172
|
+
deviceScaleFactor: visualViewport.scale || 1.0,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async screenshotPng() {
|
|
176
|
+
const result = await this.transport.send('Page.captureScreenshot', {
|
|
177
|
+
format: 'png',
|
|
178
|
+
captureBeyondViewport: false,
|
|
179
|
+
});
|
|
180
|
+
return result.data || '';
|
|
181
|
+
}
|
|
182
|
+
async mouseMove(x, y) {
|
|
183
|
+
await this.transport.send('Input.dispatchMouseEvent', {
|
|
184
|
+
type: 'mouseMoved',
|
|
185
|
+
x,
|
|
186
|
+
y,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
async mouseClick(x, y, button = 'left', clickCount = 1) {
|
|
190
|
+
// Mouse down
|
|
191
|
+
await this.transport.send('Input.dispatchMouseEvent', {
|
|
192
|
+
type: 'mousePressed',
|
|
193
|
+
x,
|
|
194
|
+
y,
|
|
195
|
+
button,
|
|
196
|
+
clickCount,
|
|
197
|
+
});
|
|
198
|
+
// Small delay between press and release
|
|
199
|
+
await this.sleep(50);
|
|
200
|
+
// Mouse up
|
|
201
|
+
await this.transport.send('Input.dispatchMouseEvent', {
|
|
202
|
+
type: 'mouseReleased',
|
|
203
|
+
x,
|
|
204
|
+
y,
|
|
205
|
+
button,
|
|
206
|
+
clickCount,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
async wheel(deltaY, x, y) {
|
|
210
|
+
// Get viewport center if coordinates not provided
|
|
211
|
+
if (x === undefined || y === undefined) {
|
|
212
|
+
if (this.cachedViewport === null) {
|
|
213
|
+
await this.refreshPageInfo();
|
|
214
|
+
}
|
|
215
|
+
x = x ?? (this.cachedViewport?.width ?? 0) / 2;
|
|
216
|
+
y = y ?? (this.cachedViewport?.height ?? 0) / 2;
|
|
217
|
+
}
|
|
218
|
+
await this.transport.send('Input.dispatchMouseEvent', {
|
|
219
|
+
type: 'mouseWheel',
|
|
220
|
+
x,
|
|
221
|
+
y,
|
|
222
|
+
deltaX: 0,
|
|
223
|
+
deltaY,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
async typeText(text) {
|
|
227
|
+
for (const char of text) {
|
|
228
|
+
// Key down
|
|
229
|
+
await this.transport.send('Input.dispatchKeyEvent', {
|
|
230
|
+
type: 'keyDown',
|
|
231
|
+
text: char,
|
|
232
|
+
});
|
|
233
|
+
// Char event (for text input)
|
|
234
|
+
await this.transport.send('Input.dispatchKeyEvent', {
|
|
235
|
+
type: 'char',
|
|
236
|
+
text: char,
|
|
237
|
+
});
|
|
238
|
+
// Key up
|
|
239
|
+
await this.transport.send('Input.dispatchKeyEvent', {
|
|
240
|
+
type: 'keyUp',
|
|
241
|
+
text: char,
|
|
242
|
+
});
|
|
243
|
+
// Small delay between characters
|
|
244
|
+
await this.sleep(10);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
async waitReadyState(state = 'interactive', timeoutMs = 15000) {
|
|
248
|
+
const startTime = Date.now();
|
|
249
|
+
// Map state to acceptable states
|
|
250
|
+
const acceptableStates = state === 'complete' ? new Set(['complete']) : new Set(['interactive', 'complete']);
|
|
251
|
+
while (true) {
|
|
252
|
+
const elapsed = Date.now() - startTime;
|
|
253
|
+
if (elapsed >= timeoutMs) {
|
|
254
|
+
throw new Error(`Timed out waiting for document.readyState='${state}' after ${timeoutMs}ms`);
|
|
255
|
+
}
|
|
256
|
+
const currentState = (await this.eval('document.readyState'));
|
|
257
|
+
if (acceptableStates.has(currentState)) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
// Poll every 100ms
|
|
261
|
+
await this.sleep(100);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
async getUrl() {
|
|
265
|
+
const result = await this.eval('window.location.href');
|
|
266
|
+
return result || '';
|
|
267
|
+
}
|
|
268
|
+
sleep(ms) {
|
|
269
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
exports.CDPBackend = CDPBackend;
|
|
273
|
+
//# sourceMappingURL=cdp-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-backend.js","sourceRoot":"","sources":["../../src/backends/cdp-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser backend abstractions for Sentience SDK.
|
|
3
|
+
*
|
|
4
|
+
* This module provides backend protocols and implementations that allow
|
|
5
|
+
* Sentience actions (click, type, scroll) to work with different browser
|
|
6
|
+
* automation frameworks.
|
|
7
|
+
*
|
|
8
|
+
* Supported Backends
|
|
9
|
+
* ------------------
|
|
10
|
+
*
|
|
11
|
+
* **CDPBackend**
|
|
12
|
+
* Low-level CDP (Chrome DevTools Protocol) backend. Use this when you have
|
|
13
|
+
* direct access to a CDP client and session.
|
|
14
|
+
*
|
|
15
|
+
* **BrowserUseAdapter**
|
|
16
|
+
* High-level adapter for browser-use framework. Automatically creates a
|
|
17
|
+
* CDPBackend from a BrowserSession.
|
|
18
|
+
*
|
|
19
|
+
* Quick Start with browser-use
|
|
20
|
+
* ----------------------------
|
|
21
|
+
*
|
|
22
|
+
* import { BrowserSession, BrowserProfile } from 'browser-use';
|
|
23
|
+
* import { getExtensionDir } from 'sentience';
|
|
24
|
+
* import { BrowserUseAdapter, snapshot, click, typeText } from 'sentience/backends';
|
|
25
|
+
*
|
|
26
|
+
* // Setup browser-use with Sentience extension
|
|
27
|
+
* const profile = new BrowserProfile({ args: [`--load-extension=${getExtensionDir()}`] });
|
|
28
|
+
* const session = new BrowserSession({ browserProfile: profile });
|
|
29
|
+
* await session.start();
|
|
30
|
+
*
|
|
31
|
+
* // Create adapter and backend
|
|
32
|
+
* const adapter = new BrowserUseAdapter(session);
|
|
33
|
+
* const backend = await adapter.createBackend();
|
|
34
|
+
*
|
|
35
|
+
* // Take snapshot and interact with elements
|
|
36
|
+
* const snap = await snapshot(backend);
|
|
37
|
+
* const searchBox = find(snap, 'role=textbox[name*="Search"]');
|
|
38
|
+
* await click(backend, searchBox.bbox);
|
|
39
|
+
* await typeText(backend, 'Sentience AI');
|
|
40
|
+
*
|
|
41
|
+
* Snapshot Caching
|
|
42
|
+
* ----------------
|
|
43
|
+
*
|
|
44
|
+
* Use CachedSnapshot to reduce redundant snapshot calls in action loops:
|
|
45
|
+
*
|
|
46
|
+
* import { CachedSnapshot } from 'sentience/backends';
|
|
47
|
+
*
|
|
48
|
+
* const cache = new CachedSnapshot(backend, 2000);
|
|
49
|
+
*
|
|
50
|
+
* const snap1 = await cache.get(); // Takes fresh snapshot
|
|
51
|
+
* const snap2 = await cache.get(); // Returns cached if < 2s old
|
|
52
|
+
*
|
|
53
|
+
* await click(backend, element.bbox);
|
|
54
|
+
* cache.invalidate(); // Force refresh on next get()
|
|
55
|
+
*
|
|
56
|
+
* Error Handling
|
|
57
|
+
* --------------
|
|
58
|
+
*
|
|
59
|
+
* The module provides specific exceptions for common failure modes:
|
|
60
|
+
*
|
|
61
|
+
* - `ExtensionNotLoadedError`: Extension not loaded in browser launch args
|
|
62
|
+
* - `SnapshotError`: window.sentience.snapshot() failed
|
|
63
|
+
*
|
|
64
|
+
* import { ExtensionNotLoadedError, snapshot } from 'sentience/backends';
|
|
65
|
+
*
|
|
66
|
+
* try {
|
|
67
|
+
* const snap = await snapshot(backend);
|
|
68
|
+
* } catch (e) {
|
|
69
|
+
* if (e instanceof ExtensionNotLoadedError) {
|
|
70
|
+
* console.log(`Fix suggestion: ${e.message}`);
|
|
71
|
+
* }
|
|
72
|
+
* }
|
|
73
|
+
*/
|
|
74
|
+
export { BrowserBackend, ViewportInfo, LayoutMetrics, MouseButton, ReadyState } from './protocol';
|
|
75
|
+
export { CDPTransport, CDPBackend } from './cdp-backend';
|
|
76
|
+
export { BrowserUseAdapter, BrowserUseCDPTransport } from './browser-use-adapter';
|
|
77
|
+
export { snapshot, CachedSnapshot, SnapshotOptions, ScreenshotOptions, SnapshotFilter, ExtensionNotLoadedError, SnapshotError, ExtensionDiagnostics, } from './snapshot';
|
|
78
|
+
export { click, typeText, scroll, scrollToElement, waitForStable, ClickTarget, ScrollBehavior, ScrollBlock, } from './actions';
|
|
79
|
+
export { SentienceContext, PredicateContext, SentienceContextState, SentienceContextOptions, TopElementSelector, BuildOptions, } from './sentience-context';
|
|
80
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AAGH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGlG,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGlF,OAAO,EACL,QAAQ,EACR,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,aAAa,EACb,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser backend abstractions for Sentience SDK.
|
|
4
|
+
*
|
|
5
|
+
* This module provides backend protocols and implementations that allow
|
|
6
|
+
* Sentience actions (click, type, scroll) to work with different browser
|
|
7
|
+
* automation frameworks.
|
|
8
|
+
*
|
|
9
|
+
* Supported Backends
|
|
10
|
+
* ------------------
|
|
11
|
+
*
|
|
12
|
+
* **CDPBackend**
|
|
13
|
+
* Low-level CDP (Chrome DevTools Protocol) backend. Use this when you have
|
|
14
|
+
* direct access to a CDP client and session.
|
|
15
|
+
*
|
|
16
|
+
* **BrowserUseAdapter**
|
|
17
|
+
* High-level adapter for browser-use framework. Automatically creates a
|
|
18
|
+
* CDPBackend from a BrowserSession.
|
|
19
|
+
*
|
|
20
|
+
* Quick Start with browser-use
|
|
21
|
+
* ----------------------------
|
|
22
|
+
*
|
|
23
|
+
* import { BrowserSession, BrowserProfile } from 'browser-use';
|
|
24
|
+
* import { getExtensionDir } from 'sentience';
|
|
25
|
+
* import { BrowserUseAdapter, snapshot, click, typeText } from 'sentience/backends';
|
|
26
|
+
*
|
|
27
|
+
* // Setup browser-use with Sentience extension
|
|
28
|
+
* const profile = new BrowserProfile({ args: [`--load-extension=${getExtensionDir()}`] });
|
|
29
|
+
* const session = new BrowserSession({ browserProfile: profile });
|
|
30
|
+
* await session.start();
|
|
31
|
+
*
|
|
32
|
+
* // Create adapter and backend
|
|
33
|
+
* const adapter = new BrowserUseAdapter(session);
|
|
34
|
+
* const backend = await adapter.createBackend();
|
|
35
|
+
*
|
|
36
|
+
* // Take snapshot and interact with elements
|
|
37
|
+
* const snap = await snapshot(backend);
|
|
38
|
+
* const searchBox = find(snap, 'role=textbox[name*="Search"]');
|
|
39
|
+
* await click(backend, searchBox.bbox);
|
|
40
|
+
* await typeText(backend, 'Sentience AI');
|
|
41
|
+
*
|
|
42
|
+
* Snapshot Caching
|
|
43
|
+
* ----------------
|
|
44
|
+
*
|
|
45
|
+
* Use CachedSnapshot to reduce redundant snapshot calls in action loops:
|
|
46
|
+
*
|
|
47
|
+
* import { CachedSnapshot } from 'sentience/backends';
|
|
48
|
+
*
|
|
49
|
+
* const cache = new CachedSnapshot(backend, 2000);
|
|
50
|
+
*
|
|
51
|
+
* const snap1 = await cache.get(); // Takes fresh snapshot
|
|
52
|
+
* const snap2 = await cache.get(); // Returns cached if < 2s old
|
|
53
|
+
*
|
|
54
|
+
* await click(backend, element.bbox);
|
|
55
|
+
* cache.invalidate(); // Force refresh on next get()
|
|
56
|
+
*
|
|
57
|
+
* Error Handling
|
|
58
|
+
* --------------
|
|
59
|
+
*
|
|
60
|
+
* The module provides specific exceptions for common failure modes:
|
|
61
|
+
*
|
|
62
|
+
* - `ExtensionNotLoadedError`: Extension not loaded in browser launch args
|
|
63
|
+
* - `SnapshotError`: window.sentience.snapshot() failed
|
|
64
|
+
*
|
|
65
|
+
* import { ExtensionNotLoadedError, snapshot } from 'sentience/backends';
|
|
66
|
+
*
|
|
67
|
+
* try {
|
|
68
|
+
* const snap = await snapshot(backend);
|
|
69
|
+
* } catch (e) {
|
|
70
|
+
* if (e instanceof ExtensionNotLoadedError) {
|
|
71
|
+
* console.log(`Fix suggestion: ${e.message}`);
|
|
72
|
+
* }
|
|
73
|
+
* }
|
|
74
|
+
*/
|
|
75
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
76
|
+
exports.PredicateContext = exports.SentienceContext = exports.waitForStable = exports.scrollToElement = exports.typeText = exports.click = exports.SnapshotError = exports.ExtensionNotLoadedError = exports.CachedSnapshot = exports.snapshot = exports.BrowserUseCDPTransport = exports.BrowserUseAdapter = exports.CDPBackend = void 0;
|
|
77
|
+
// CDP Backend
|
|
78
|
+
var cdp_backend_1 = require("./cdp-backend");
|
|
79
|
+
Object.defineProperty(exports, "CDPBackend", { enumerable: true, get: function () { return cdp_backend_1.CDPBackend; } });
|
|
80
|
+
// browser-use adapter
|
|
81
|
+
var browser_use_adapter_1 = require("./browser-use-adapter");
|
|
82
|
+
Object.defineProperty(exports, "BrowserUseAdapter", { enumerable: true, get: function () { return browser_use_adapter_1.BrowserUseAdapter; } });
|
|
83
|
+
Object.defineProperty(exports, "BrowserUseCDPTransport", { enumerable: true, get: function () { return browser_use_adapter_1.BrowserUseCDPTransport; } });
|
|
84
|
+
// Backend-agnostic functions
|
|
85
|
+
var snapshot_1 = require("./snapshot");
|
|
86
|
+
Object.defineProperty(exports, "snapshot", { enumerable: true, get: function () { return snapshot_1.snapshot; } });
|
|
87
|
+
Object.defineProperty(exports, "CachedSnapshot", { enumerable: true, get: function () { return snapshot_1.CachedSnapshot; } });
|
|
88
|
+
Object.defineProperty(exports, "ExtensionNotLoadedError", { enumerable: true, get: function () { return snapshot_1.ExtensionNotLoadedError; } });
|
|
89
|
+
Object.defineProperty(exports, "SnapshotError", { enumerable: true, get: function () { return snapshot_1.SnapshotError; } });
|
|
90
|
+
// Actions
|
|
91
|
+
var actions_1 = require("./actions");
|
|
92
|
+
Object.defineProperty(exports, "click", { enumerable: true, get: function () { return actions_1.click; } });
|
|
93
|
+
Object.defineProperty(exports, "typeText", { enumerable: true, get: function () { return actions_1.typeText; } });
|
|
94
|
+
Object.defineProperty(exports, "scroll", { enumerable: true, get: function () { return actions_1.scroll; } });
|
|
95
|
+
Object.defineProperty(exports, "scrollToElement", { enumerable: true, get: function () { return actions_1.scrollToElement; } });
|
|
96
|
+
Object.defineProperty(exports, "waitForStable", { enumerable: true, get: function () { return actions_1.waitForStable; } });
|
|
97
|
+
// SentienceContext (Token-Slasher Context Middleware)
|
|
98
|
+
var sentience_context_1 = require("./sentience-context");
|
|
99
|
+
Object.defineProperty(exports, "SentienceContext", { enumerable: true, get: function () { return sentience_context_1.SentienceContext; } });
|
|
100
|
+
Object.defineProperty(exports, "PredicateContext", { enumerable: true, get: function () { return sentience_context_1.PredicateContext; } });
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;;;AAKH,cAAc;AACd,6CAAyD;AAAlC,yGAAA,UAAU,OAAA;AAEjC,sBAAsB;AACtB,6DAAkF;AAAzE,wHAAA,iBAAiB,OAAA;AAAE,6HAAA,sBAAsB,OAAA;AAElD,6BAA6B;AAC7B,uCASoB;AARlB,oGAAA,QAAQ,OAAA;AACR,0GAAA,cAAc,OAAA;AAId,mHAAA,uBAAuB,OAAA;AACvB,yGAAA,aAAa,OAAA;AAIf,UAAU;AACV,qCASmB;AARjB,gGAAA,KAAK,OAAA;AACL,mGAAA,QAAQ,OAAA;AACR,iGAAA,MAAM,OAAA;AACN,0GAAA,eAAe,OAAA;AACf,wGAAA,aAAa,OAAA;AAMf,sDAAsD;AACtD,yDAO6B;AAN3B,qHAAA,gBAAgB,OAAA;AAChB,qHAAA,gBAAgB,OAAA"}
|