sentienceapi 0.90.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +43 -0
- package/README.md +946 -0
- package/dist/actions.d.ts +54 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +349 -0
- package/dist/actions.js.map +1 -0
- package/dist/agent.d.ts +157 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +437 -0
- package/dist/agent.js.map +1 -0
- package/dist/browser.d.ts +46 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +622 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -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 +327 -0
- package/dist/conversational-agent.js.map +1 -0
- package/dist/expect.d.ts +16 -0
- package/dist/expect.d.ts.map +1 -0
- package/dist/expect.js +66 -0
- package/dist/expect.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 +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -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 +147 -0
- package/dist/inspector.js.map +1 -0
- package/dist/llm-provider.d.ts +60 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +106 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/query.d.ts +8 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +337 -0
- package/dist/query.js.map +1 -0
- package/dist/read.d.ts +40 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +86 -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 +256 -0
- package/dist/recorder.js.map +1 -0
- package/dist/screenshot.d.ts +17 -0
- package/dist/screenshot.d.ts.map +1 -0
- package/dist/screenshot.js +37 -0
- package/dist/screenshot.js.map +1 -0
- package/dist/snapshot.d.ts +23 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +187 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/tracing/cloud-sink.d.ts +74 -0
- package/dist/tracing/cloud-sink.d.ts.map +1 -0
- package/dist/tracing/cloud-sink.js +262 -0
- package/dist/tracing/cloud-sink.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/jsonl-sink.d.ts +41 -0
- package/dist/tracing/jsonl-sink.d.ts.map +1 -0
- package/dist/tracing/jsonl-sink.js +168 -0
- package/dist/tracing/jsonl-sink.js.map +1 -0
- package/dist/tracing/sink.d.ts +24 -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 +57 -0
- package/dist/tracing/tracer-factory.d.ts.map +1 -0
- package/dist/tracing/tracer-factory.js +274 -0
- package/dist/tracing/tracer-factory.js.map +1 -0
- package/dist/tracing/tracer.d.ts +74 -0
- package/dist/tracing/tracer.d.ts.map +1 -0
- package/dist/tracing/tracer.js +131 -0
- package/dist/tracing/tracer.js.map +1 -0
- package/dist/tracing/types.d.ts +63 -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 +110 -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.d.ts +29 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +74 -0
- package/dist/utils.js.map +1 -0
- package/dist/wait.d.ts +20 -0
- package/dist/wait.d.ts.map +1 -0
- package/dist/wait.js +63 -0
- package/dist/wait.js.map +1 -0
- package/package.json +72 -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/dist/expect.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expect/Assert functionality
|
|
3
|
+
*/
|
|
4
|
+
import { SentienceBrowser } from './browser';
|
|
5
|
+
import { Element, QuerySelector } from './types';
|
|
6
|
+
export declare class Expectation {
|
|
7
|
+
private browser;
|
|
8
|
+
private selector;
|
|
9
|
+
constructor(browser: SentienceBrowser, selector: QuerySelector);
|
|
10
|
+
toBeVisible(timeout?: number): Promise<Element>;
|
|
11
|
+
toExist(timeout?: number): Promise<Element>;
|
|
12
|
+
toHaveText(expectedText: string, timeout?: number): Promise<Element>;
|
|
13
|
+
toHaveCount(expectedCount: number, timeout?: number): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function expect(browser: SentienceBrowser, selector: QuerySelector): Expectation;
|
|
16
|
+
//# sourceMappingURL=expect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKjD,qBAAa,WAAW;IAEpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ;gBADR,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,aAAa;IAG3B,WAAW,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBtD,OAAO,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB3E,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBjF;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,GAAG,WAAW,CAEtF"}
|
package/dist/expect.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Expect/Assert functionality
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Expectation = void 0;
|
|
7
|
+
exports.expect = expect;
|
|
8
|
+
const wait_1 = require("./wait");
|
|
9
|
+
const query_1 = require("./query");
|
|
10
|
+
const snapshot_1 = require("./snapshot");
|
|
11
|
+
class Expectation {
|
|
12
|
+
constructor(browser, selector) {
|
|
13
|
+
this.browser = browser;
|
|
14
|
+
this.selector = selector;
|
|
15
|
+
}
|
|
16
|
+
async toBeVisible(timeout = 10000) {
|
|
17
|
+
const result = await (0, wait_1.waitFor)(this.browser, this.selector, timeout);
|
|
18
|
+
if (!result.found) {
|
|
19
|
+
throw new Error(`Element not found: ${this.selector} (timeout: ${timeout}ms)`);
|
|
20
|
+
}
|
|
21
|
+
const element = result.element;
|
|
22
|
+
if (!element.in_viewport) {
|
|
23
|
+
throw new Error(`Element found but not visible in viewport: ${this.selector}`);
|
|
24
|
+
}
|
|
25
|
+
return element;
|
|
26
|
+
}
|
|
27
|
+
async toExist(timeout = 10000) {
|
|
28
|
+
const result = await (0, wait_1.waitFor)(this.browser, this.selector, timeout);
|
|
29
|
+
if (!result.found) {
|
|
30
|
+
throw new Error(`Element does not exist: ${this.selector} (timeout: ${timeout}ms)`);
|
|
31
|
+
}
|
|
32
|
+
return result.element;
|
|
33
|
+
}
|
|
34
|
+
async toHaveText(expectedText, timeout = 10000) {
|
|
35
|
+
const result = await (0, wait_1.waitFor)(this.browser, this.selector, timeout);
|
|
36
|
+
if (!result.found) {
|
|
37
|
+
throw new Error(`Element not found: ${this.selector} (timeout: ${timeout}ms)`);
|
|
38
|
+
}
|
|
39
|
+
const element = result.element;
|
|
40
|
+
if (!element.text || !element.text.includes(expectedText)) {
|
|
41
|
+
throw new Error(`Element text mismatch. Expected '${expectedText}', got '${element.text}'`);
|
|
42
|
+
}
|
|
43
|
+
return element;
|
|
44
|
+
}
|
|
45
|
+
async toHaveCount(expectedCount, timeout = 10000) {
|
|
46
|
+
const startTime = Date.now();
|
|
47
|
+
while (Date.now() - startTime < timeout) {
|
|
48
|
+
const snap = await (0, snapshot_1.snapshot)(this.browser);
|
|
49
|
+
const matches = (0, query_1.query)(snap, this.selector);
|
|
50
|
+
if (matches.length === expectedCount) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
54
|
+
}
|
|
55
|
+
// Final check
|
|
56
|
+
const snap = await (0, snapshot_1.snapshot)(this.browser);
|
|
57
|
+
const matches = (0, query_1.query)(snap, this.selector);
|
|
58
|
+
const actualCount = matches.length;
|
|
59
|
+
throw new Error(`Element count mismatch. Expected ${expectedCount}, got ${actualCount}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.Expectation = Expectation;
|
|
63
|
+
function expect(browser, selector) {
|
|
64
|
+
return new Expectation(browser, selector);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=expect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expect.js","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script Generator - converts trace into executable code
|
|
3
|
+
*/
|
|
4
|
+
import { Trace } from './recorder';
|
|
5
|
+
export declare class ScriptGenerator {
|
|
6
|
+
private trace;
|
|
7
|
+
constructor(trace: Trace);
|
|
8
|
+
generatePython(): string;
|
|
9
|
+
generateTypeScript(): string;
|
|
10
|
+
private generatePythonStep;
|
|
11
|
+
private generateTypeScriptStep;
|
|
12
|
+
savePython(filepath: string): Promise<void>;
|
|
13
|
+
saveTypeScript(filepath: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function generate(trace: Trace, language?: 'py' | 'ts'): string;
|
|
16
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAE9C,qBAAa,eAAe;IACd,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK;IAEhC,cAAc,IAAI,MAAM;IAyBxB,kBAAkB,IAAI,MAAM;IA4B5B,OAAO,CAAC,kBAAkB;IA4C1B,OAAO,CAAC,sBAAsB;IA8CxB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKtD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAO3E"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Script Generator - converts trace into executable code
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ScriptGenerator = void 0;
|
|
40
|
+
exports.generate = generate;
|
|
41
|
+
class ScriptGenerator {
|
|
42
|
+
constructor(trace) {
|
|
43
|
+
this.trace = trace;
|
|
44
|
+
}
|
|
45
|
+
generatePython() {
|
|
46
|
+
const lines = [
|
|
47
|
+
'"""',
|
|
48
|
+
`Generated script from trace: ${this.trace.start_url}`,
|
|
49
|
+
`Created: ${this.trace.created_at}`,
|
|
50
|
+
'"""',
|
|
51
|
+
'',
|
|
52
|
+
'from sentience import SentienceBrowser, snapshot, find, click, type_text, press',
|
|
53
|
+
'',
|
|
54
|
+
'def main():',
|
|
55
|
+
' with SentienceBrowser(headless=False) as browser:',
|
|
56
|
+
` browser.page.goto("${this.trace.start_url}")`,
|
|
57
|
+
' browser.page.wait_for_load_state("networkidle")',
|
|
58
|
+
'',
|
|
59
|
+
];
|
|
60
|
+
for (const step of this.trace.steps) {
|
|
61
|
+
lines.push(...this.generatePythonStep(step, ' '));
|
|
62
|
+
}
|
|
63
|
+
lines.push('', 'if __name__ == "__main__":', ' main()');
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
}
|
|
66
|
+
generateTypeScript() {
|
|
67
|
+
const lines = [
|
|
68
|
+
'/**',
|
|
69
|
+
` * Generated script from trace: ${this.trace.start_url}`,
|
|
70
|
+
` * Created: ${this.trace.created_at}`,
|
|
71
|
+
' */',
|
|
72
|
+
'',
|
|
73
|
+
"import { SentienceBrowser, snapshot, find, click, typeText, press } from './src';",
|
|
74
|
+
'',
|
|
75
|
+
'async function main() {',
|
|
76
|
+
' const browser = new SentienceBrowser(undefined, undefined, false);',
|
|
77
|
+
'',
|
|
78
|
+
' try {',
|
|
79
|
+
' await browser.start();',
|
|
80
|
+
` await browser.getPage().goto('${this.trace.start_url}');`,
|
|
81
|
+
' await browser.getPage().waitForLoadState(\'networkidle\');',
|
|
82
|
+
'',
|
|
83
|
+
];
|
|
84
|
+
for (const step of this.trace.steps) {
|
|
85
|
+
lines.push(...this.generateTypeScriptStep(step, ' '));
|
|
86
|
+
}
|
|
87
|
+
lines.push(' } finally {', ' await browser.close();', ' }', '}', '', 'main().catch(console.error);');
|
|
88
|
+
return lines.join('\n');
|
|
89
|
+
}
|
|
90
|
+
generatePythonStep(step, indent) {
|
|
91
|
+
const lines = [];
|
|
92
|
+
if (step.type === 'navigation') {
|
|
93
|
+
lines.push(`${indent}# Navigate to ${step.url}`);
|
|
94
|
+
lines.push(`${indent}browser.page.goto("${step.url}")`);
|
|
95
|
+
lines.push(`${indent}browser.page.wait_for_load_state("networkidle")`);
|
|
96
|
+
}
|
|
97
|
+
else if (step.type === 'click') {
|
|
98
|
+
if (step.selector) {
|
|
99
|
+
lines.push(`${indent}# Click: ${step.selector}`);
|
|
100
|
+
lines.push(`${indent}snap = snapshot(browser)`);
|
|
101
|
+
lines.push(`${indent}element = find(snap, "${step.selector}")`);
|
|
102
|
+
lines.push(`${indent}if element:`);
|
|
103
|
+
lines.push(`${indent} click(browser, element.id)`);
|
|
104
|
+
lines.push(`${indent}else:`);
|
|
105
|
+
lines.push(`${indent} raise Exception("Element not found: ${step.selector}")`);
|
|
106
|
+
}
|
|
107
|
+
else if (step.element_id !== undefined) {
|
|
108
|
+
lines.push(`${indent}# TODO: replace with semantic selector`);
|
|
109
|
+
lines.push(`${indent}click(browser, ${step.element_id})`);
|
|
110
|
+
}
|
|
111
|
+
lines.push('');
|
|
112
|
+
}
|
|
113
|
+
else if (step.type === 'type') {
|
|
114
|
+
if (step.selector) {
|
|
115
|
+
lines.push(`${indent}# Type into: ${step.selector}`);
|
|
116
|
+
lines.push(`${indent}snap = snapshot(browser)`);
|
|
117
|
+
lines.push(`${indent}element = find(snap, "${step.selector}")`);
|
|
118
|
+
lines.push(`${indent}if element:`);
|
|
119
|
+
lines.push(`${indent} type_text(browser, element.id, "${step.text}")`);
|
|
120
|
+
lines.push(`${indent}else:`);
|
|
121
|
+
lines.push(`${indent} raise Exception("Element not found: ${step.selector}")`);
|
|
122
|
+
}
|
|
123
|
+
else if (step.element_id !== undefined) {
|
|
124
|
+
lines.push(`${indent}# TODO: replace with semantic selector`);
|
|
125
|
+
lines.push(`${indent}type_text(browser, ${step.element_id}, "${step.text}")`);
|
|
126
|
+
}
|
|
127
|
+
lines.push('');
|
|
128
|
+
}
|
|
129
|
+
else if (step.type === 'press') {
|
|
130
|
+
lines.push(`${indent}# Press key: ${step.key}`);
|
|
131
|
+
lines.push(`${indent}press(browser, "${step.key}")`);
|
|
132
|
+
lines.push('');
|
|
133
|
+
}
|
|
134
|
+
return lines;
|
|
135
|
+
}
|
|
136
|
+
generateTypeScriptStep(step, indent) {
|
|
137
|
+
const lines = [];
|
|
138
|
+
if (step.type === 'navigation') {
|
|
139
|
+
lines.push(`${indent}// Navigate to ${step.url}`);
|
|
140
|
+
lines.push(`${indent}await browser.getPage().goto('${step.url}');`);
|
|
141
|
+
lines.push(`${indent}await browser.getPage().waitForLoadState('networkidle');`);
|
|
142
|
+
}
|
|
143
|
+
else if (step.type === 'click') {
|
|
144
|
+
if (step.selector) {
|
|
145
|
+
lines.push(`${indent}// Click: ${step.selector}`);
|
|
146
|
+
lines.push(`${indent}const snap = await snapshot(browser);`);
|
|
147
|
+
lines.push(`${indent}const element = find(snap, '${step.selector}');`);
|
|
148
|
+
lines.push(`${indent}if (element) {`);
|
|
149
|
+
lines.push(`${indent} await click(browser, element.id);`);
|
|
150
|
+
lines.push(`${indent}} else {`);
|
|
151
|
+
lines.push(`${indent} throw new Error('Element not found: ${step.selector}');`);
|
|
152
|
+
lines.push(`${indent}}`);
|
|
153
|
+
}
|
|
154
|
+
else if (step.element_id !== undefined) {
|
|
155
|
+
lines.push(`${indent}// TODO: replace with semantic selector`);
|
|
156
|
+
lines.push(`${indent}await click(browser, ${step.element_id});`);
|
|
157
|
+
}
|
|
158
|
+
lines.push('');
|
|
159
|
+
}
|
|
160
|
+
else if (step.type === 'type') {
|
|
161
|
+
if (step.selector) {
|
|
162
|
+
lines.push(`${indent}// Type into: ${step.selector}`);
|
|
163
|
+
lines.push(`${indent}const snap = await snapshot(browser);`);
|
|
164
|
+
lines.push(`${indent}const element = find(snap, '${step.selector}');`);
|
|
165
|
+
lines.push(`${indent}if (element) {`);
|
|
166
|
+
lines.push(`${indent} await typeText(browser, element.id, '${step.text}');`);
|
|
167
|
+
lines.push(`${indent}} else {`);
|
|
168
|
+
lines.push(`${indent} throw new Error('Element not found: ${step.selector}');`);
|
|
169
|
+
lines.push(`${indent}}`);
|
|
170
|
+
}
|
|
171
|
+
else if (step.element_id !== undefined) {
|
|
172
|
+
lines.push(`${indent}// TODO: replace with semantic selector`);
|
|
173
|
+
lines.push(`${indent}await typeText(browser, ${step.element_id}, '${step.text}');`);
|
|
174
|
+
}
|
|
175
|
+
lines.push('');
|
|
176
|
+
}
|
|
177
|
+
else if (step.type === 'press') {
|
|
178
|
+
lines.push(`${indent}// Press key: ${step.key}`);
|
|
179
|
+
lines.push(`${indent}await press(browser, '${step.key}');`);
|
|
180
|
+
lines.push('');
|
|
181
|
+
}
|
|
182
|
+
return lines;
|
|
183
|
+
}
|
|
184
|
+
async savePython(filepath) {
|
|
185
|
+
const code = this.generatePython();
|
|
186
|
+
const fs = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
187
|
+
fs.writeFileSync(filepath, code, 'utf-8');
|
|
188
|
+
}
|
|
189
|
+
async saveTypeScript(filepath) {
|
|
190
|
+
const code = this.generateTypeScript();
|
|
191
|
+
const fs = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
192
|
+
fs.writeFileSync(filepath, code, 'utf-8');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
exports.ScriptGenerator = ScriptGenerator;
|
|
196
|
+
function generate(trace, language = 'py') {
|
|
197
|
+
const generator = new ScriptGenerator(trace);
|
|
198
|
+
if (language === 'py') {
|
|
199
|
+
return generator.generatePython();
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
return generator.generateTypeScript();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sentience TypeScript SDK - AI Agent Browser Automation
|
|
3
|
+
*/
|
|
4
|
+
export { SentienceBrowser } from './browser';
|
|
5
|
+
export { snapshot, SnapshotOptions } from './snapshot';
|
|
6
|
+
export { query, find, parseSelector } from './query';
|
|
7
|
+
export { click, typeText, press, clickRect, ClickRect } from './actions';
|
|
8
|
+
export { waitFor } from './wait';
|
|
9
|
+
export { expect, Expectation } from './expect';
|
|
10
|
+
export { Inspector, inspect } from './inspector';
|
|
11
|
+
export { Recorder, Trace, TraceStep, record } from './recorder';
|
|
12
|
+
export { ScriptGenerator, generate } from './generator';
|
|
13
|
+
export { read, ReadOptions, ReadResult } from './read';
|
|
14
|
+
export { screenshot, ScreenshotOptions } from './screenshot';
|
|
15
|
+
export * from './types';
|
|
16
|
+
export { saveStorageState } from './utils';
|
|
17
|
+
export { LLMProvider, LLMResponse, OpenAIProvider, AnthropicProvider } from './llm-provider';
|
|
18
|
+
export { SentienceAgent, AgentActResult, HistoryEntry, TokenStats } from './agent';
|
|
19
|
+
export { ConversationalAgent, ExecutionPlan, PlanStep, StepResult, ConversationEntry, ActionType, ActionParameters } from './conversational-agent';
|
|
20
|
+
export { Tracer, TraceSink, JsonlTraceSink, TraceEvent, TraceEventData } from './tracing';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sentience TypeScript SDK - AI Agent Browser Automation
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
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;
|
|
21
|
+
var browser_1 = require("./browser");
|
|
22
|
+
Object.defineProperty(exports, "SentienceBrowser", { enumerable: true, get: function () { return browser_1.SentienceBrowser; } });
|
|
23
|
+
var snapshot_1 = require("./snapshot");
|
|
24
|
+
Object.defineProperty(exports, "snapshot", { enumerable: true, get: function () { return snapshot_1.snapshot; } });
|
|
25
|
+
var query_1 = require("./query");
|
|
26
|
+
Object.defineProperty(exports, "query", { enumerable: true, get: function () { return query_1.query; } });
|
|
27
|
+
Object.defineProperty(exports, "find", { enumerable: true, get: function () { return query_1.find; } });
|
|
28
|
+
Object.defineProperty(exports, "parseSelector", { enumerable: true, get: function () { return query_1.parseSelector; } });
|
|
29
|
+
var actions_1 = require("./actions");
|
|
30
|
+
Object.defineProperty(exports, "click", { enumerable: true, get: function () { return actions_1.click; } });
|
|
31
|
+
Object.defineProperty(exports, "typeText", { enumerable: true, get: function () { return actions_1.typeText; } });
|
|
32
|
+
Object.defineProperty(exports, "press", { enumerable: true, get: function () { return actions_1.press; } });
|
|
33
|
+
Object.defineProperty(exports, "clickRect", { enumerable: true, get: function () { return actions_1.clickRect; } });
|
|
34
|
+
var wait_1 = require("./wait");
|
|
35
|
+
Object.defineProperty(exports, "waitFor", { enumerable: true, get: function () { return wait_1.waitFor; } });
|
|
36
|
+
var expect_1 = require("./expect");
|
|
37
|
+
Object.defineProperty(exports, "expect", { enumerable: true, get: function () { return expect_1.expect; } });
|
|
38
|
+
Object.defineProperty(exports, "Expectation", { enumerable: true, get: function () { return expect_1.Expectation; } });
|
|
39
|
+
var inspector_1 = require("./inspector");
|
|
40
|
+
Object.defineProperty(exports, "Inspector", { enumerable: true, get: function () { return inspector_1.Inspector; } });
|
|
41
|
+
Object.defineProperty(exports, "inspect", { enumerable: true, get: function () { return inspector_1.inspect; } });
|
|
42
|
+
var recorder_1 = require("./recorder");
|
|
43
|
+
Object.defineProperty(exports, "Recorder", { enumerable: true, get: function () { return recorder_1.Recorder; } });
|
|
44
|
+
Object.defineProperty(exports, "record", { enumerable: true, get: function () { return recorder_1.record; } });
|
|
45
|
+
var generator_1 = require("./generator");
|
|
46
|
+
Object.defineProperty(exports, "ScriptGenerator", { enumerable: true, get: function () { return generator_1.ScriptGenerator; } });
|
|
47
|
+
Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return generator_1.generate; } });
|
|
48
|
+
var read_1 = require("./read");
|
|
49
|
+
Object.defineProperty(exports, "read", { enumerable: true, get: function () { return read_1.read; } });
|
|
50
|
+
var screenshot_1 = require("./screenshot");
|
|
51
|
+
Object.defineProperty(exports, "screenshot", { enumerable: true, get: function () { return screenshot_1.screenshot; } });
|
|
52
|
+
__exportStar(require("./types"), exports);
|
|
53
|
+
var utils_1 = require("./utils");
|
|
54
|
+
Object.defineProperty(exports, "saveStorageState", { enumerable: true, get: function () { return utils_1.saveStorageState; } });
|
|
55
|
+
// Agent Layer (v0.2.0+)
|
|
56
|
+
var llm_provider_1 = require("./llm-provider");
|
|
57
|
+
Object.defineProperty(exports, "LLMProvider", { enumerable: true, get: function () { return llm_provider_1.LLMProvider; } });
|
|
58
|
+
Object.defineProperty(exports, "OpenAIProvider", { enumerable: true, get: function () { return llm_provider_1.OpenAIProvider; } });
|
|
59
|
+
Object.defineProperty(exports, "AnthropicProvider", { enumerable: true, get: function () { return llm_provider_1.AnthropicProvider; } });
|
|
60
|
+
var agent_1 = require("./agent");
|
|
61
|
+
Object.defineProperty(exports, "SentienceAgent", { enumerable: true, get: function () { return agent_1.SentienceAgent; } });
|
|
62
|
+
// Conversational Agent Layer (v0.3.0+)
|
|
63
|
+
var conversational_agent_1 = require("./conversational-agent");
|
|
64
|
+
Object.defineProperty(exports, "ConversationalAgent", { enumerable: true, get: function () { return conversational_agent_1.ConversationalAgent; } });
|
|
65
|
+
// Tracing Layer (v0.3.1+)
|
|
66
|
+
var tracing_1 = require("./tracing");
|
|
67
|
+
Object.defineProperty(exports, "Tracer", { enumerable: true, get: function () { return tracing_1.Tracer; } });
|
|
68
|
+
Object.defineProperty(exports, "TraceSink", { enumerable: true, get: function () { return tracing_1.TraceSink; } });
|
|
69
|
+
Object.defineProperty(exports, "JsonlTraceSink", { enumerable: true, get: function () { return tracing_1.JsonlTraceSink; } });
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inspector tool - helps developers see what the agent "sees"
|
|
3
|
+
*/
|
|
4
|
+
import { SentienceBrowser } from './browser';
|
|
5
|
+
export declare class Inspector {
|
|
6
|
+
private browser;
|
|
7
|
+
private active;
|
|
8
|
+
constructor(browser: SentienceBrowser);
|
|
9
|
+
start(): Promise<void>;
|
|
10
|
+
stop(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare function inspect(browser: SentienceBrowser): Inspector;
|
|
13
|
+
//# sourceMappingURL=inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../src/inspector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,qBAAa,SAAS;IAGR,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,MAAM,CAAkB;gBAEZ,OAAO,EAAE,gBAAgB;IAEvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2ItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAW5B;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAE5D"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Inspector tool - helps developers see what the agent "sees"
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Inspector = void 0;
|
|
7
|
+
exports.inspect = inspect;
|
|
8
|
+
class Inspector {
|
|
9
|
+
constructor(browser) {
|
|
10
|
+
this.browser = browser;
|
|
11
|
+
this.active = false;
|
|
12
|
+
}
|
|
13
|
+
async start() {
|
|
14
|
+
const page = this.browser.getPage();
|
|
15
|
+
this.active = true;
|
|
16
|
+
// Inject inspector script into page
|
|
17
|
+
await page.evaluate(() => {
|
|
18
|
+
// Remove existing inspector if any
|
|
19
|
+
if (window.__sentience_inspector_active) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
window.__sentience_inspector_active = true;
|
|
23
|
+
window.__sentience_last_element_id = null;
|
|
24
|
+
// Get element at point
|
|
25
|
+
function getElementAtPoint(x, y) {
|
|
26
|
+
const el = document.elementFromPoint(x, y);
|
|
27
|
+
if (!el)
|
|
28
|
+
return null;
|
|
29
|
+
// Find element in registry
|
|
30
|
+
const registry = window.sentience_registry;
|
|
31
|
+
if (registry) {
|
|
32
|
+
for (let i = 0; i < registry.length; i++) {
|
|
33
|
+
if (registry[i] === el) {
|
|
34
|
+
return i;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
// Mouse move handler
|
|
41
|
+
function handleMouseMove(e) {
|
|
42
|
+
if (!window.__sentience_inspector_active)
|
|
43
|
+
return;
|
|
44
|
+
const elementId = getElementAtPoint(e.clientX, e.clientY);
|
|
45
|
+
if (elementId === null || elementId === window.__sentience_last_element_id) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
window.__sentience_last_element_id = elementId;
|
|
49
|
+
// Get element info from snapshot if available
|
|
50
|
+
const sentience = window.sentience;
|
|
51
|
+
const registry = window.sentience_registry;
|
|
52
|
+
if (sentience && registry) {
|
|
53
|
+
const el = registry[elementId];
|
|
54
|
+
if (el) {
|
|
55
|
+
const rect = el.getBoundingClientRect();
|
|
56
|
+
const text = el.getAttribute('aria-label') ||
|
|
57
|
+
el.value ||
|
|
58
|
+
el.placeholder ||
|
|
59
|
+
el.alt ||
|
|
60
|
+
(el.innerText || '').substring(0, 50);
|
|
61
|
+
const role = el.getAttribute('role') || el.tagName.toLowerCase();
|
|
62
|
+
console.log(`[Sentience Inspector] Element #${elementId}: role=${role}, text="${text}", bbox=(${Math.round(rect.x)}, ${Math.round(rect.y)}, ${Math.round(rect.width)}, ${Math.round(rect.height)})`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Click handler
|
|
67
|
+
function handleClick(e) {
|
|
68
|
+
if (!window.__sentience_inspector_active)
|
|
69
|
+
return;
|
|
70
|
+
e.preventDefault();
|
|
71
|
+
e.stopPropagation();
|
|
72
|
+
const elementId = getElementAtPoint(e.clientX, e.clientY);
|
|
73
|
+
if (elementId === null)
|
|
74
|
+
return;
|
|
75
|
+
// Get full element info
|
|
76
|
+
const sentience = window.sentience;
|
|
77
|
+
const registry = window.sentience_registry;
|
|
78
|
+
if (sentience && registry) {
|
|
79
|
+
const el = registry[elementId];
|
|
80
|
+
if (el) {
|
|
81
|
+
const rect = el.getBoundingClientRect();
|
|
82
|
+
const info = {
|
|
83
|
+
id: elementId,
|
|
84
|
+
tag: el.tagName.toLowerCase(),
|
|
85
|
+
role: el.getAttribute('role') || 'generic',
|
|
86
|
+
text: el.getAttribute('aria-label') ||
|
|
87
|
+
el.value ||
|
|
88
|
+
el.placeholder ||
|
|
89
|
+
el.alt ||
|
|
90
|
+
(el.innerText || '').substring(0, 100),
|
|
91
|
+
bbox: {
|
|
92
|
+
x: Math.round(rect.x),
|
|
93
|
+
y: Math.round(rect.y),
|
|
94
|
+
width: Math.round(rect.width),
|
|
95
|
+
height: Math.round(rect.height),
|
|
96
|
+
},
|
|
97
|
+
attributes: {
|
|
98
|
+
id: el.id || null,
|
|
99
|
+
class: el.className || null,
|
|
100
|
+
name: el.name || null,
|
|
101
|
+
type: el.type || null,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
console.log('[Sentience Inspector] Clicked element:', JSON.stringify(info, null, 2));
|
|
105
|
+
// Also try to get from snapshot if available
|
|
106
|
+
if (sentience && sentience.snapshot) {
|
|
107
|
+
sentience
|
|
108
|
+
.snapshot({ limit: 100 })
|
|
109
|
+
.then((snap) => {
|
|
110
|
+
const element = snap.elements.find((el) => el.id === elementId);
|
|
111
|
+
if (element) {
|
|
112
|
+
console.log('[Sentience Inspector] Snapshot element:', JSON.stringify(element, null, 2));
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
.catch(() => { });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Add event listeners
|
|
121
|
+
document.addEventListener('mousemove', handleMouseMove, true);
|
|
122
|
+
document.addEventListener('click', handleClick, true);
|
|
123
|
+
// Store cleanup function
|
|
124
|
+
window.__sentience_inspector_cleanup = () => {
|
|
125
|
+
document.removeEventListener('mousemove', handleMouseMove, true);
|
|
126
|
+
document.removeEventListener('click', handleClick, true);
|
|
127
|
+
window.__sentience_inspector_active = false;
|
|
128
|
+
};
|
|
129
|
+
console.log('[Sentience Inspector] ✅ Inspection mode active. Hover elements to see info, click to see full details.');
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async stop() {
|
|
133
|
+
const page = this.browser.getPage();
|
|
134
|
+
this.active = false;
|
|
135
|
+
// Cleanup inspector
|
|
136
|
+
await page.evaluate(() => {
|
|
137
|
+
if (window.__sentience_inspector_cleanup) {
|
|
138
|
+
window.__sentience_inspector_cleanup();
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.Inspector = Inspector;
|
|
144
|
+
function inspect(browser) {
|
|
145
|
+
return new Inspector(browser);
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../src/inspector.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAiKH,0BAEC;AA/JD,MAAa,SAAS;IAGpB,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAFrC,WAAM,GAAY,KAAK,CAAC;IAEgB,CAAC;IAEjD,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,oCAAoC;QACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACvB,mCAAmC;YACnC,IAAK,MAAc,CAAC,4BAA4B,EAAE,CAAC;gBACjD,OAAO;YACT,CAAC;YAEA,MAAc,CAAC,4BAA4B,GAAG,IAAI,CAAC;YACnD,MAAc,CAAC,2BAA2B,GAAG,IAAI,CAAC;YAEnD,uBAAuB;YACvB,SAAS,iBAAiB,CAAC,CAAS,EAAE,CAAS;gBAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAC;gBAErB,2BAA2B;gBAC3B,MAAM,QAAQ,GAAI,MAAc,CAAC,kBAAkB,CAAC;gBACpD,IAAI,QAAQ,EAAE,CAAC;oBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACzC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;4BACvB,OAAO,CAAC,CAAC;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,qBAAqB;YACrB,SAAS,eAAe,CAAC,CAAa;gBACpC,IAAI,CAAE,MAAc,CAAC,4BAA4B;oBAAE,OAAO;gBAE1D,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAM,MAAc,CAAC,2BAA2B,EAAE,CAAC;oBACpF,OAAO;gBACT,CAAC;gBAEA,MAAc,CAAC,2BAA2B,GAAG,SAAS,CAAC;gBAExD,8CAA8C;gBAC9C,MAAM,SAAS,GAAI,MAAc,CAAC,SAAS,CAAC;gBAC5C,MAAM,QAAQ,GAAI,MAAc,CAAC,kBAAkB,CAAC;gBACpD,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;oBAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC/B,IAAI,EAAE,EAAE,CAAC;wBACP,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;wBACxC,MAAM,IAAI,GACR,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;4BAC5B,EAAuB,CAAC,KAAK;4BAC7B,EAAuB,CAAC,WAAW;4BACnC,EAAuB,CAAC,GAAG;4BAC5B,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAExC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;wBAEjE,OAAO,CAAC,GAAG,CACT,kCAAkC,SAAS,UAAU,IAAI,WAAW,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CACxL,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,SAAS,WAAW,CAAC,CAAa;gBAChC,IAAI,CAAE,MAAc,CAAC,4BAA4B;oBAAE,OAAO;gBAE1D,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;gBAEpB,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,SAAS,KAAK,IAAI;oBAAE,OAAO;gBAE/B,wBAAwB;gBACxB,MAAM,SAAS,GAAI,MAAc,CAAC,SAAS,CAAC;gBAC5C,MAAM,QAAQ,GAAI,MAAc,CAAC,kBAAkB,CAAC;gBACpD,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;oBAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC/B,IAAI,EAAE,EAAE,CAAC;wBACP,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;wBACxC,MAAM,IAAI,GAAG;4BACX,EAAE,EAAE,SAAS;4BACb,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;4BAC7B,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;4BAC1C,IAAI,EACF,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;gCAC5B,EAAuB,CAAC,KAAK;gCAC7B,EAAuB,CAAC,WAAW;gCACnC,EAAuB,CAAC,GAAG;gCAC5B,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;4BACxC,IAAI,EAAE;gCACJ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gCACrB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gCACrB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gCAC7B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;6BAChC;4BACD,UAAU,EAAE;gCACV,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI;gCACjB,KAAK,EAAE,EAAE,CAAC,SAAS,IAAI,IAAI;gCAC3B,IAAI,EAAG,EAAuB,CAAC,IAAI,IAAI,IAAI;gCAC3C,IAAI,EAAG,EAAuB,CAAC,IAAI,IAAI,IAAI;6BAC5C;yBACF,CAAC;wBAEF,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;wBAErF,6CAA6C;wBAC7C,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;4BACpC,SAAS;iCACN,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;iCACxB,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;gCAClB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;gCACrE,IAAI,OAAO,EAAE,CAAC;oCACZ,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gCAC3F,CAAC;4BACH,CAAC,CAAC;iCACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;wBACrB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;YAC9D,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YAEtD,yBAAyB;YACxB,MAAc,CAAC,6BAA6B,GAAG,GAAG,EAAE;gBACnD,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;gBACjE,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBACxD,MAAc,CAAC,4BAA4B,GAAG,KAAK,CAAC;YACvD,CAAC,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC;QACxH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,oBAAoB;QACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACvB,IAAK,MAAc,CAAC,6BAA6B,EAAE,CAAC;gBACjD,MAAc,CAAC,6BAA6B,EAAE,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA3JD,8BA2JC;AAED,SAAgB,OAAO,CAAC,OAAyB;IAC/C,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
|