agent-browser-loop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/types.ts ADDED
@@ -0,0 +1,229 @@
1
+ import type { Browser, BrowserContext, Page } from "playwright";
2
+
3
+ export interface BrowserConfig {
4
+ /** Run browser without visible UI (default: true) */
5
+ headless?: boolean;
6
+ /** Path to Chrome/Chromium executable (auto-detected if not provided) */
7
+ executablePath?: string;
8
+ /** Prefer system Chrome/Chromium over bundled Playwright (default: true) */
9
+ useSystemChrome?: boolean;
10
+ /** Viewport width (default: 1280) */
11
+ viewportWidth?: number;
12
+ /** Viewport height (default: 720) */
13
+ viewportHeight?: number;
14
+ /** User data directory for persistent sessions */
15
+ userDataDir?: string;
16
+ /** Timeout for operations in ms (default: 30000) */
17
+ timeout?: number;
18
+ /** Enable network request capture */
19
+ captureNetwork?: boolean;
20
+ /** Max network events to store */
21
+ networkLogLimit?: number;
22
+ /** Storage state to initialize the context */
23
+ storageState?: string | StorageState;
24
+ /** Storage state file path to initialize the context */
25
+ storageStatePath?: string;
26
+ }
27
+
28
+ export interface BrowserCliConfig extends BrowserConfig {
29
+ /** Save storage state to this path after running */
30
+ saveStorageStatePath?: string;
31
+ /** Server host to bind */
32
+ serverHost?: string;
33
+ /** Server port to bind */
34
+ serverPort?: number;
35
+ /** Server session TTL in milliseconds */
36
+ serverSessionTtlMs?: number;
37
+ }
38
+
39
+ export interface InteractiveElement {
40
+ /** Index for referencing this element in actions */
41
+ index: number;
42
+ /** ARIA role (button, textbox, link, etc.) */
43
+ role: string;
44
+ /** Element's accessible name/label */
45
+ name: string;
46
+ /** Visible text content */
47
+ text: string;
48
+ /** aria-ref for precise targeting */
49
+ ref: string;
50
+ /** Whether element is currently visible */
51
+ visible: boolean;
52
+ /** Whether element is enabled/not disabled */
53
+ enabled: boolean;
54
+ /** Bounding box if available */
55
+ boundingBox?: {
56
+ x: number;
57
+ y: number;
58
+ width: number;
59
+ height: number;
60
+ };
61
+ /** Element attributes (href, placeholder, etc.) */
62
+ attributes: Record<string, string>;
63
+ }
64
+
65
+ export interface TabInfo {
66
+ /** Tab/page ID */
67
+ id: string;
68
+ /** Page URL */
69
+ url: string;
70
+ /** Page title */
71
+ title: string;
72
+ /** Whether this is the active tab */
73
+ active: boolean;
74
+ }
75
+
76
+ export interface ScrollPosition {
77
+ /** Pixels scrolled from top */
78
+ scrollTop: number;
79
+ /** Pixels available above viewport */
80
+ pixelsAbove: number;
81
+ /** Pixels available below viewport */
82
+ pixelsBelow: number;
83
+ /** Total scrollable height */
84
+ totalHeight: number;
85
+ /** Viewport height */
86
+ viewportHeight: number;
87
+ }
88
+
89
+ export interface BrowserState {
90
+ /** Current page URL */
91
+ url: string;
92
+ /** Page title */
93
+ title: string;
94
+ /** List of open tabs */
95
+ tabs: TabInfo[];
96
+ /** Interactive elements on the page with indices */
97
+ elements: InteractiveElement[];
98
+ /** ARIA accessibility tree as text */
99
+ accessibilityTree: string;
100
+ /** Current scroll position */
101
+ scrollPosition: ScrollPosition;
102
+ /** Screenshot as base64 (optional, call with includeScreenshot: true) */
103
+ screenshot?: string;
104
+ /** Recent console + network errors (if available) */
105
+ errors?: {
106
+ console: string[];
107
+ network: NetworkEvent[];
108
+ };
109
+ }
110
+
111
+ export interface StorageState {
112
+ cookies: Array<{
113
+ name: string;
114
+ value: string;
115
+ domain: string;
116
+ path: string;
117
+ expires: number;
118
+ httpOnly: boolean;
119
+ secure: boolean;
120
+ sameSite: "Strict" | "Lax" | "None";
121
+ }>;
122
+ origins: Array<{
123
+ origin: string;
124
+ localStorage: Array<{ name: string; value: string }>;
125
+ }>;
126
+ }
127
+
128
+ export interface NetworkEvent {
129
+ id: string;
130
+ type: "request" | "response" | "failed";
131
+ url: string;
132
+ method: string;
133
+ resourceType?: string;
134
+ status?: number;
135
+ ok?: boolean;
136
+ failureText?: string;
137
+ timestamp: number;
138
+ durationMs?: number;
139
+ }
140
+
141
+ export interface ClickOptions {
142
+ /** Element reference (aria-ref) */
143
+ ref?: string;
144
+ /** Element index from state.elements */
145
+ index?: number;
146
+ /** Double click */
147
+ double?: boolean;
148
+ /** Mouse button */
149
+ button?: "left" | "right" | "middle";
150
+ /** Modifier keys */
151
+ modifiers?: Array<"Alt" | "Control" | "Meta" | "Shift">;
152
+ }
153
+
154
+ export interface TypeOptions {
155
+ /** Element reference (aria-ref) */
156
+ ref?: string;
157
+ /** Element index from state.elements */
158
+ index?: number;
159
+ /** Text to type */
160
+ text: string;
161
+ /** Press Enter after typing */
162
+ submit?: boolean;
163
+ /** Clear existing text first */
164
+ clear?: boolean;
165
+ /** Type slowly (delay between keystrokes in ms) */
166
+ delay?: number;
167
+ }
168
+
169
+ export interface NavigateOptions {
170
+ /** URL to navigate to */
171
+ url: string;
172
+ /** Wait until this load state */
173
+ waitUntil?: "load" | "domcontentloaded" | "networkidle";
174
+ }
175
+
176
+ export interface GetStateOptions {
177
+ /** Include base64 screenshot (increases response size) */
178
+ includeScreenshot?: boolean;
179
+ /** Only include elements in current viewport */
180
+ viewportOnly?: boolean;
181
+ /** Include interactive elements */
182
+ includeElements?: boolean;
183
+ /** Include accessibility tree */
184
+ includeTree?: boolean;
185
+ /** Limit number of elements returned (from start) */
186
+ elementsLimit?: number;
187
+ /** Return first N elements */
188
+ elementsHead?: number;
189
+ /** Return last N elements */
190
+ elementsTail?: number;
191
+ /** Limit number of tree lines returned (from start) */
192
+ treeLimit?: number;
193
+ /** Return first N tree lines */
194
+ treeHead?: number;
195
+ /** Return last N tree lines */
196
+ treeTail?: number;
197
+ }
198
+
199
+ export interface DumpStateOptions {
200
+ /** File path to write the state JSON */
201
+ path: string;
202
+ /** Pretty-print JSON output */
203
+ pretty?: boolean;
204
+ /** getState() options for trimming output */
205
+ state?: GetStateOptions;
206
+ }
207
+
208
+ export interface DumpStateTextOptions {
209
+ /** File path to write the state text */
210
+ path: string;
211
+ /** getState() options for trimming output */
212
+ state?: GetStateOptions;
213
+ }
214
+
215
+ export interface DumpNetworkOptions {
216
+ /** File path to write the network logs */
217
+ path: string;
218
+ /** Pretty-print JSON output */
219
+ pretty?: boolean;
220
+ }
221
+
222
+ export interface BrowserInstance {
223
+ /** Underlying Playwright browser */
224
+ browser: Browser;
225
+ /** Browser context */
226
+ context: BrowserContext;
227
+ /** Current page */
228
+ page: Page;
229
+ }