@browserflow-ai/exploration 0.0.6

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.
Files changed (58) hide show
  1. package/dist/adapters/claude-cli.d.ts +57 -0
  2. package/dist/adapters/claude-cli.d.ts.map +1 -0
  3. package/dist/adapters/claude-cli.js +195 -0
  4. package/dist/adapters/claude-cli.js.map +1 -0
  5. package/dist/adapters/claude.d.ts +54 -0
  6. package/dist/adapters/claude.d.ts.map +1 -0
  7. package/dist/adapters/claude.js +160 -0
  8. package/dist/adapters/claude.js.map +1 -0
  9. package/dist/adapters/index.d.ts +6 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +4 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/types.d.ts +196 -0
  14. package/dist/adapters/types.d.ts.map +1 -0
  15. package/dist/adapters/types.js +3 -0
  16. package/dist/adapters/types.js.map +1 -0
  17. package/dist/agent-browser-session.d.ts +62 -0
  18. package/dist/agent-browser-session.d.ts.map +1 -0
  19. package/dist/agent-browser-session.js +272 -0
  20. package/dist/agent-browser-session.js.map +1 -0
  21. package/dist/evidence.d.ts +111 -0
  22. package/dist/evidence.d.ts.map +1 -0
  23. package/dist/evidence.js +144 -0
  24. package/dist/evidence.js.map +1 -0
  25. package/dist/explorer.d.ts +180 -0
  26. package/dist/explorer.d.ts.map +1 -0
  27. package/dist/explorer.js +393 -0
  28. package/dist/explorer.js.map +1 -0
  29. package/dist/index.d.ts +15 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +15 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/locator-candidates.d.ts +127 -0
  34. package/dist/locator-candidates.d.ts.map +1 -0
  35. package/dist/locator-candidates.js +358 -0
  36. package/dist/locator-candidates.js.map +1 -0
  37. package/dist/step-executor.d.ts +99 -0
  38. package/dist/step-executor.d.ts.map +1 -0
  39. package/dist/step-executor.js +646 -0
  40. package/dist/step-executor.js.map +1 -0
  41. package/package.json +34 -0
  42. package/src/adapters/claude-cli.test.ts +134 -0
  43. package/src/adapters/claude-cli.ts +240 -0
  44. package/src/adapters/claude.test.ts +195 -0
  45. package/src/adapters/claude.ts +190 -0
  46. package/src/adapters/index.ts +21 -0
  47. package/src/adapters/types.ts +207 -0
  48. package/src/agent-browser-session.test.ts +369 -0
  49. package/src/agent-browser-session.ts +349 -0
  50. package/src/evidence.test.ts +239 -0
  51. package/src/evidence.ts +203 -0
  52. package/src/explorer.test.ts +321 -0
  53. package/src/explorer.ts +565 -0
  54. package/src/index.ts +51 -0
  55. package/src/locator-candidates.test.ts +602 -0
  56. package/src/locator-candidates.ts +441 -0
  57. package/src/step-executor.test.ts +696 -0
  58. package/src/step-executor.ts +783 -0
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Represents a step execution result from AI exploration
3
+ */
4
+ export interface StepExecution {
5
+ status: 'completed' | 'failed' | 'skipped';
6
+ method: string;
7
+ elementRef?: string;
8
+ selectorUsed?: string;
9
+ durationMs: number;
10
+ error?: string | null;
11
+ }
12
+ /**
13
+ * Screenshots captured during a step
14
+ */
15
+ export interface StepScreenshots {
16
+ before: string;
17
+ after: string;
18
+ }
19
+ /**
20
+ * Result of executing a single step
21
+ */
22
+ export interface StepResult {
23
+ stepIndex: number;
24
+ specAction: Record<string, unknown>;
25
+ execution: StepExecution;
26
+ screenshots: StepScreenshots;
27
+ snapshotBefore?: Record<string, unknown>;
28
+ snapshotAfter?: Record<string, unknown>;
29
+ }
30
+ /**
31
+ * Outcome check result
32
+ */
33
+ export interface OutcomeCheck {
34
+ check: string;
35
+ expected: unknown;
36
+ actual: unknown;
37
+ passed: boolean;
38
+ }
39
+ /**
40
+ * Complete output from an exploration run
41
+ */
42
+ export interface ExplorationOutput {
43
+ spec: string;
44
+ specPath: string;
45
+ specDescription?: string;
46
+ explorationId: string;
47
+ timestamp: string;
48
+ durationMs: number;
49
+ browser: string;
50
+ viewport: {
51
+ width: number;
52
+ height: number;
53
+ };
54
+ baseUrl: string;
55
+ steps: StepResult[];
56
+ outcomeChecks: OutcomeCheck[];
57
+ overallStatus: 'completed' | 'failed' | 'timeout';
58
+ errors: string[];
59
+ }
60
+ /**
61
+ * Verify check conditions
62
+ */
63
+ export interface VerifyCheck {
64
+ element_visible?: string;
65
+ element_not_visible?: string;
66
+ text_contains?: string;
67
+ text_not_contains?: string;
68
+ url_contains?: string;
69
+ element_count?: {
70
+ selector: string;
71
+ expected: number;
72
+ };
73
+ attribute?: {
74
+ selector: string;
75
+ attribute: string;
76
+ equals: string;
77
+ };
78
+ }
79
+ /**
80
+ * Step definition from a spec file
81
+ */
82
+ export interface SpecStep {
83
+ action: string;
84
+ query?: string;
85
+ selector?: string;
86
+ ref?: string;
87
+ url?: string;
88
+ to?: string;
89
+ value?: string;
90
+ for?: string;
91
+ text?: string;
92
+ contains?: string;
93
+ timeout?: string | number;
94
+ duration?: string | number;
95
+ checks?: VerifyCheck[];
96
+ name?: string;
97
+ description?: string;
98
+ why?: string;
99
+ option?: string;
100
+ checked?: boolean;
101
+ scrollX?: number;
102
+ scrollY?: number;
103
+ [key: string]: unknown;
104
+ }
105
+ /**
106
+ * Spec file structure
107
+ */
108
+ export interface Spec {
109
+ name: string;
110
+ description?: string;
111
+ preconditions?: Record<string, unknown>;
112
+ steps: SpecStep[];
113
+ expectedOutcomes?: Record<string, unknown>[];
114
+ tags?: string[];
115
+ timeout?: string;
116
+ priority?: string;
117
+ }
118
+ /**
119
+ * Parameters for running an exploration
120
+ */
121
+ export interface ExploreParams {
122
+ spec: Spec;
123
+ specPath: string;
124
+ baseUrl: string;
125
+ browser?: 'chromium' | 'firefox' | 'webkit';
126
+ viewport?: {
127
+ width: number;
128
+ height: number;
129
+ };
130
+ timeout?: number;
131
+ outputDir: string;
132
+ sessionId?: string;
133
+ }
134
+ /**
135
+ * Parameters for retrying with feedback
136
+ */
137
+ export interface RetryParams extends ExploreParams {
138
+ previousExploration: ExplorationOutput;
139
+ reviewFeedback: ReviewFeedback;
140
+ }
141
+ /**
142
+ * Review feedback structure
143
+ */
144
+ export interface ReviewFeedback {
145
+ explorationId: string;
146
+ reviewer: string;
147
+ steps: {
148
+ stepIndex: number;
149
+ status: 'approved' | 'rejected' | 'pending';
150
+ comment?: string;
151
+ tags?: string[];
152
+ }[];
153
+ overallNotes?: string;
154
+ verdict: 'approved' | 'rejected';
155
+ }
156
+ /**
157
+ * Enhanced snapshot from browser - includes tree and element refs
158
+ */
159
+ export interface EnhancedSnapshot {
160
+ tree: string;
161
+ refs: Record<string, unknown>;
162
+ }
163
+ /**
164
+ * Result from findElement operation
165
+ */
166
+ export interface FindElementResult {
167
+ /** Element reference (e.g., "e5") or "NOT_FOUND" */
168
+ ref: string;
169
+ /** AI reasoning for why this element was selected */
170
+ reasoning: string;
171
+ /** Confidence score 0-1 */
172
+ confidence: number;
173
+ }
174
+ /**
175
+ * AI Adapter interface - defines the contract for LLM integrations
176
+ */
177
+ export interface AIAdapter {
178
+ /**
179
+ * Name of the adapter (e.g., 'claude', 'openai')
180
+ */
181
+ readonly name: string;
182
+ /**
183
+ * Run exploration on a spec
184
+ */
185
+ explore(params: ExploreParams): Promise<ExplorationOutput>;
186
+ /**
187
+ * Find element from natural language query
188
+ * Uses AI to interpret the query and match against snapshot elements
189
+ */
190
+ findElement(query: string, snapshot: EnhancedSnapshot): Promise<FindElementResult>;
191
+ /**
192
+ * Retry exploration with review feedback
193
+ */
194
+ retryWithFeedback?(params: RetryParams): Promise<ExplorationOutput>;
195
+ }
196
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // @browserflow-ai/exploration - Adapter types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,8CAA8C"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * BrowserSession adapter using agent-browser's BrowserManager
3
+ *
4
+ * This adapter wraps agent-browser to provide a clean BrowserSession interface
5
+ * for the exploration engine.
6
+ */
7
+ import type { BrowserSession, BrowserLaunchOptions } from './explorer';
8
+ import type { EnhancedSnapshot } from './adapters/types';
9
+ /**
10
+ * AgentBrowserSession implements BrowserSession using agent-browser
11
+ */
12
+ export declare class AgentBrowserSession implements BrowserSession {
13
+ private browser;
14
+ constructor();
15
+ isLaunched(): boolean;
16
+ launch(options?: BrowserLaunchOptions): Promise<void>;
17
+ navigate(url: string): Promise<void>;
18
+ screenshot(options?: {
19
+ fullPage?: boolean;
20
+ clip?: {
21
+ x: number;
22
+ y: number;
23
+ width: number;
24
+ height: number;
25
+ };
26
+ mask?: string[];
27
+ quality?: number;
28
+ }): Promise<Buffer>;
29
+ getSnapshot(options?: {
30
+ interactive?: boolean;
31
+ maxDepth?: number;
32
+ compact?: boolean;
33
+ selector?: string;
34
+ }): Promise<EnhancedSnapshot>;
35
+ close(): Promise<void>;
36
+ click(ref: string): Promise<void>;
37
+ fill(ref: string, value: string): Promise<void>;
38
+ type(ref: string, text: string): Promise<void>;
39
+ select(ref: string, option: string): Promise<void>;
40
+ check(ref: string, checked: boolean): Promise<void>;
41
+ press(key: string): Promise<void>;
42
+ back(): Promise<void>;
43
+ forward(): Promise<void>;
44
+ refresh(): Promise<void>;
45
+ waitForSelector(selector: string, timeout: number): Promise<void>;
46
+ waitForURL(urlPattern: string, timeout: number): Promise<void>;
47
+ waitForText(text: string, timeout: number): Promise<void>;
48
+ waitForLoadState(state: 'load' | 'domcontentloaded' | 'networkidle'): Promise<void>;
49
+ waitForTimeout(ms: number): Promise<void>;
50
+ scrollIntoView(ref: string): Promise<void>;
51
+ scroll(x: number, y: number): Promise<void>;
52
+ getCurrentURL(): string;
53
+ /**
54
+ * Ensures browser is launched before performing operations
55
+ */
56
+ private ensureLaunched;
57
+ }
58
+ /**
59
+ * Factory function to create a new browser session
60
+ */
61
+ export declare function createBrowserSession(): BrowserSession;
62
+ //# sourceMappingURL=agent-browser-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-browser-session.d.ts","sourceRoot":"","sources":["../src/agent-browser-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,OAAO,CAAiB;;IAMhC,UAAU,IAAI,OAAO;IAIf,MAAM,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAapC,UAAU,CAAC,OAAO,CAAC,EAAE;QACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,IAAI,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBb,WAAW,CAAC,OAAO,CAAC,EAAE;QAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgBvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa9C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAarB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAcxB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa9D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAazD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAanF,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1C,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD,aAAa,IAAI,MAAM;IAavB;;OAEG;IACH,OAAO,CAAC,cAAc;CAKvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * BrowserSession adapter using agent-browser's BrowserManager
3
+ *
4
+ * This adapter wraps agent-browser to provide a clean BrowserSession interface
5
+ * for the exploration engine.
6
+ */
7
+ import { BrowserManager } from 'agent-browser/dist/browser.js';
8
+ /**
9
+ * AgentBrowserSession implements BrowserSession using agent-browser
10
+ */
11
+ export class AgentBrowserSession {
12
+ browser;
13
+ constructor() {
14
+ this.browser = new BrowserManager();
15
+ }
16
+ isLaunched() {
17
+ return this.browser.isLaunched();
18
+ }
19
+ async launch(options) {
20
+ const launchOptions = {
21
+ id: 'launch',
22
+ action: 'launch',
23
+ headless: options?.headless ?? true,
24
+ viewport: options?.viewport ?? { width: 1280, height: 720 },
25
+ browser: 'chromium',
26
+ };
27
+ try {
28
+ await this.browser.launch(launchOptions);
29
+ }
30
+ catch (error) {
31
+ throw new Error(`Failed to launch browser: ${error instanceof Error ? error.message : String(error)}`);
32
+ }
33
+ }
34
+ async navigate(url) {
35
+ this.ensureLaunched();
36
+ try {
37
+ const page = this.browser.getPage();
38
+ await page.goto(url, { waitUntil: 'load' });
39
+ }
40
+ catch (error) {
41
+ throw new Error(`Failed to navigate to ${url}: ${error instanceof Error ? error.message : String(error)}`);
42
+ }
43
+ }
44
+ async screenshot(options) {
45
+ this.ensureLaunched();
46
+ try {
47
+ const page = this.browser.getPage();
48
+ const { mask, ...restOptions } = options ?? {};
49
+ const buffer = await page.screenshot({
50
+ type: 'png',
51
+ ...restOptions,
52
+ ...(mask && { mask: mask.map((selector) => page.locator(selector)) }),
53
+ });
54
+ return Buffer.from(buffer);
55
+ }
56
+ catch (error) {
57
+ throw new Error(`Failed to capture screenshot: ${error instanceof Error ? error.message : String(error)}`);
58
+ }
59
+ }
60
+ async getSnapshot(options) {
61
+ this.ensureLaunched();
62
+ try {
63
+ const snapshot = await this.browser.getSnapshot(options);
64
+ return {
65
+ tree: snapshot.tree,
66
+ refs: snapshot.refs,
67
+ };
68
+ }
69
+ catch (error) {
70
+ throw new Error(`Failed to get snapshot: ${error instanceof Error ? error.message : String(error)}`);
71
+ }
72
+ }
73
+ async close() {
74
+ if (this.browser.isLaunched()) {
75
+ try {
76
+ await this.browser.close();
77
+ }
78
+ catch (error) {
79
+ // Ignore errors on close - browser might already be closed
80
+ }
81
+ }
82
+ }
83
+ // Interaction methods
84
+ async click(ref) {
85
+ this.ensureLaunched();
86
+ try {
87
+ const locator = this.browser.getLocator(ref);
88
+ await locator.click();
89
+ }
90
+ catch (error) {
91
+ throw new Error(`Failed to click ${ref}: ${error instanceof Error ? error.message : String(error)}`);
92
+ }
93
+ }
94
+ async fill(ref, value) {
95
+ this.ensureLaunched();
96
+ try {
97
+ const locator = this.browser.getLocator(ref);
98
+ await locator.fill(value);
99
+ }
100
+ catch (error) {
101
+ throw new Error(`Failed to fill ${ref}: ${error instanceof Error ? error.message : String(error)}`);
102
+ }
103
+ }
104
+ async type(ref, text) {
105
+ this.ensureLaunched();
106
+ try {
107
+ const locator = this.browser.getLocator(ref);
108
+ await locator.pressSequentially(text);
109
+ }
110
+ catch (error) {
111
+ throw new Error(`Failed to type into ${ref}: ${error instanceof Error ? error.message : String(error)}`);
112
+ }
113
+ }
114
+ async select(ref, option) {
115
+ this.ensureLaunched();
116
+ try {
117
+ const locator = this.browser.getLocator(ref);
118
+ await locator.selectOption(option);
119
+ }
120
+ catch (error) {
121
+ throw new Error(`Failed to select option in ${ref}: ${error instanceof Error ? error.message : String(error)}`);
122
+ }
123
+ }
124
+ async check(ref, checked) {
125
+ this.ensureLaunched();
126
+ try {
127
+ const locator = this.browser.getLocator(ref);
128
+ if (checked) {
129
+ await locator.check();
130
+ }
131
+ else {
132
+ await locator.uncheck();
133
+ }
134
+ }
135
+ catch (error) {
136
+ throw new Error(`Failed to ${checked ? 'check' : 'uncheck'} ${ref}: ${error instanceof Error ? error.message : String(error)}`);
137
+ }
138
+ }
139
+ async press(key) {
140
+ this.ensureLaunched();
141
+ try {
142
+ const page = this.browser.getPage();
143
+ await page.keyboard.press(key);
144
+ }
145
+ catch (error) {
146
+ throw new Error(`Failed to press key ${key}: ${error instanceof Error ? error.message : String(error)}`);
147
+ }
148
+ }
149
+ // Navigation methods
150
+ async back() {
151
+ this.ensureLaunched();
152
+ try {
153
+ const page = this.browser.getPage();
154
+ await page.goBack();
155
+ }
156
+ catch (error) {
157
+ throw new Error(`Failed to go back: ${error instanceof Error ? error.message : String(error)}`);
158
+ }
159
+ }
160
+ async forward() {
161
+ this.ensureLaunched();
162
+ try {
163
+ const page = this.browser.getPage();
164
+ await page.goForward();
165
+ }
166
+ catch (error) {
167
+ throw new Error(`Failed to go forward: ${error instanceof Error ? error.message : String(error)}`);
168
+ }
169
+ }
170
+ async refresh() {
171
+ this.ensureLaunched();
172
+ try {
173
+ const page = this.browser.getPage();
174
+ await page.reload();
175
+ }
176
+ catch (error) {
177
+ throw new Error(`Failed to refresh page: ${error instanceof Error ? error.message : String(error)}`);
178
+ }
179
+ }
180
+ // Wait methods
181
+ async waitForSelector(selector, timeout) {
182
+ this.ensureLaunched();
183
+ try {
184
+ const page = this.browser.getPage();
185
+ await page.waitForSelector(selector, { timeout });
186
+ }
187
+ catch (error) {
188
+ throw new Error(`Failed to wait for selector ${selector}: ${error instanceof Error ? error.message : String(error)}`);
189
+ }
190
+ }
191
+ async waitForURL(urlPattern, timeout) {
192
+ this.ensureLaunched();
193
+ try {
194
+ const page = this.browser.getPage();
195
+ await page.waitForURL(urlPattern, { timeout });
196
+ }
197
+ catch (error) {
198
+ throw new Error(`Failed to wait for URL ${urlPattern}: ${error instanceof Error ? error.message : String(error)}`);
199
+ }
200
+ }
201
+ async waitForText(text, timeout) {
202
+ this.ensureLaunched();
203
+ try {
204
+ const page = this.browser.getPage();
205
+ await page.locator(`text=${text}`).waitFor({ timeout });
206
+ }
207
+ catch (error) {
208
+ throw new Error(`Failed to wait for text "${text}": ${error instanceof Error ? error.message : String(error)}`);
209
+ }
210
+ }
211
+ async waitForLoadState(state) {
212
+ this.ensureLaunched();
213
+ try {
214
+ const page = this.browser.getPage();
215
+ await page.waitForLoadState(state);
216
+ }
217
+ catch (error) {
218
+ throw new Error(`Failed to wait for load state ${state}: ${error instanceof Error ? error.message : String(error)}`);
219
+ }
220
+ }
221
+ async waitForTimeout(ms) {
222
+ await new Promise((resolve) => setTimeout(resolve, ms));
223
+ }
224
+ // Scroll methods
225
+ async scrollIntoView(ref) {
226
+ this.ensureLaunched();
227
+ try {
228
+ const locator = this.browser.getLocator(ref);
229
+ await locator.scrollIntoViewIfNeeded();
230
+ }
231
+ catch (error) {
232
+ throw new Error(`Failed to scroll ${ref} into view: ${error instanceof Error ? error.message : String(error)}`);
233
+ }
234
+ }
235
+ async scroll(x, y) {
236
+ this.ensureLaunched();
237
+ try {
238
+ const page = this.browser.getPage();
239
+ // Use mouse wheel for scrolling (more reliable than evaluate)
240
+ await page.mouse.wheel(x, y);
241
+ }
242
+ catch (error) {
243
+ throw new Error(`Failed to scroll by (${x}, ${y}): ${error instanceof Error ? error.message : String(error)}`);
244
+ }
245
+ }
246
+ // State methods
247
+ getCurrentURL() {
248
+ this.ensureLaunched();
249
+ try {
250
+ const page = this.browser.getPage();
251
+ return page.url();
252
+ }
253
+ catch (error) {
254
+ throw new Error(`Failed to get current URL: ${error instanceof Error ? error.message : String(error)}`);
255
+ }
256
+ }
257
+ /**
258
+ * Ensures browser is launched before performing operations
259
+ */
260
+ ensureLaunched() {
261
+ if (!this.browser.isLaunched()) {
262
+ throw new Error('Browser is not launched. Call launch() first.');
263
+ }
264
+ }
265
+ }
266
+ /**
267
+ * Factory function to create a new browser session
268
+ */
269
+ export function createBrowserSession() {
270
+ return new AgentBrowserSession();
271
+ }
272
+ //# sourceMappingURL=agent-browser-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-browser-session.js","sourceRoot":"","sources":["../src/agent-browser-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import type { BrowserSession } from './explorer';
2
+ /**
3
+ * Evidence metadata
4
+ */
5
+ export interface EvidenceMetadata {
6
+ timestamp: string;
7
+ sessionId: string;
8
+ stepIndex?: number;
9
+ type: 'screenshot' | 'trace' | 'snapshot';
10
+ path: string;
11
+ }
12
+ /**
13
+ * Screenshot capture options
14
+ */
15
+ export interface ScreenshotOptions {
16
+ fullPage?: boolean;
17
+ clip?: {
18
+ x: number;
19
+ y: number;
20
+ width: number;
21
+ height: number;
22
+ };
23
+ mask?: string[];
24
+ quality?: number;
25
+ }
26
+ /**
27
+ * Configuration for the evidence collector
28
+ */
29
+ export interface EvidenceCollectorConfig {
30
+ outputDir?: string;
31
+ screenshotFormat?: 'png' | 'jpeg';
32
+ screenshotQuality?: number;
33
+ }
34
+ /**
35
+ * EvidenceCollector - Captures screenshots and traces during exploration
36
+ *
37
+ * Provides:
38
+ * - Screenshot capture (full page, clipped, masked)
39
+ * - Browser snapshot capture
40
+ * - Trace/HAR file generation
41
+ * - Evidence metadata tracking
42
+ */
43
+ export declare class EvidenceCollector {
44
+ private outputDir;
45
+ private screenshotFormat;
46
+ private screenshotQuality;
47
+ private evidence;
48
+ private sessions;
49
+ constructor(config?: EvidenceCollectorConfig);
50
+ /**
51
+ * Register a browser session for screenshot capture
52
+ *
53
+ * @param sessionId - Unique identifier for the session
54
+ * @param session - Browser session instance
55
+ */
56
+ registerSession(sessionId: string, session: BrowserSession): void;
57
+ /**
58
+ * Unregister a browser session
59
+ *
60
+ * @param sessionId - Session identifier to remove
61
+ */
62
+ unregisterSession(sessionId: string): void;
63
+ /**
64
+ * Capture a screenshot from the browser session
65
+ *
66
+ * @param sessionId - Browser session ID
67
+ * @param name - Screenshot name/identifier
68
+ * @param options - Screenshot options
69
+ * @returns Promise resolving to screenshot file path
70
+ */
71
+ captureScreenshot(sessionId: string, name: string, options?: ScreenshotOptions): Promise<string>;
72
+ /**
73
+ * Capture a browser snapshot (DOM state with element refs)
74
+ *
75
+ * @param sessionId - Browser session ID
76
+ * @param name - Snapshot name/identifier
77
+ * @returns Promise resolving to snapshot data
78
+ */
79
+ captureSnapshot(sessionId: string, name: string): Promise<Record<string, unknown>>;
80
+ /**
81
+ * Start trace recording
82
+ *
83
+ * @param sessionId - Browser session ID
84
+ * @param name - Trace name/identifier
85
+ */
86
+ startTrace(sessionId: string, name: string): Promise<void>;
87
+ /**
88
+ * Stop trace recording and save
89
+ *
90
+ * @param sessionId - Browser session ID
91
+ * @returns Promise resolving to trace file path
92
+ */
93
+ stopTrace(sessionId: string): Promise<string>;
94
+ /**
95
+ * Get all collected evidence metadata
96
+ */
97
+ getEvidence(): EvidenceMetadata[];
98
+ /**
99
+ * Clear collected evidence metadata
100
+ */
101
+ clearEvidence(): void;
102
+ /**
103
+ * Get the output directory
104
+ */
105
+ getOutputDir(): string;
106
+ /**
107
+ * Set the output directory
108
+ */
109
+ setOutputDir(dir: string): void;
110
+ }
111
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,QAAQ,CAA0C;gBAE9C,MAAM,GAAE,uBAA4B;IAMhD;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAIjE;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;;;;OAOG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC;IA8BlB;;;;;;OAMG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAenC;;;;;OAKG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE;;;;;OAKG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAenD;;OAEG;IACH,WAAW,IAAI,gBAAgB,EAAE;IAIjC;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAGhC"}