rensan-browser 0.1.0 → 0.1.2

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/dist/ai.d.ts CHANGED
@@ -10,12 +10,12 @@ export declare class AIClient {
10
10
  constructor(apiKey: string, model: string);
11
11
  /**
12
12
  * Look at a screenshot and decide what element to interact with.
13
- * Returns a CSS/semantic selector and action type.
13
+ * pageUrl and context give Claude more signal to make the right call.
14
14
  */
15
- decide(screenshot: string, goal: string, value?: string): Promise<AIDecision>;
15
+ decide(screenshot: string, goal: string, value?: string, pageUrl?: string, context?: string): Promise<AIDecision>;
16
16
  /**
17
17
  * Read and extract specific text from a screenshot.
18
18
  */
19
- read(screenshot: string, goal?: string): Promise<string>;
19
+ read(screenshot: string, goal?: string, pageUrl?: string): Promise<string>;
20
20
  }
21
21
  //# sourceMappingURL=ai.d.ts.map
package/dist/ai.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,qBAAa,QAAQ;IAGS,QAAQ,CAAC,KAAK,EAAE,MAAM;IAFlD,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,MAAM,EAAW,KAAK,EAAE,MAAM;IAIlD;;;OAGG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA4CnF;;OAEG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB/D"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,qBAAa,QAAQ;IAGS,QAAQ,CAAC,KAAK,EAAE,MAAM;IAFlD,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,MAAM,EAAW,KAAK,EAAE,MAAM;IAIlD;;;OAGG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC;IAgDtB;;OAEG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAuBjF"}
package/dist/ai.js CHANGED
@@ -17,10 +17,12 @@ class AIClient {
17
17
  }
18
18
  /**
19
19
  * Look at a screenshot and decide what element to interact with.
20
- * Returns a CSS/semantic selector and action type.
20
+ * pageUrl and context give Claude more signal to make the right call.
21
21
  */
22
- async decide(screenshot, goal, value) {
22
+ async decide(screenshot, goal, value, pageUrl, context) {
23
23
  const valueHint = value ? `Value to type: "${value}"` : '';
24
+ const urlHint = pageUrl ? `Current page URL: ${pageUrl}` : '';
25
+ const contextHint = context ? `Context: ${context}` : '';
24
26
  const msg = await this.client.messages.create({
25
27
  model: this.model,
26
28
  max_tokens: 200,
@@ -35,9 +37,10 @@ class AIClient {
35
37
  type: 'text',
36
38
  text: `Goal: ${goal}
37
39
  ${valueHint}
40
+ ${urlHint}
41
+ ${contextHint}
38
42
 
39
- Look at this screenshot of a webpage.
40
- Find the best element to interact with to achieve the goal.
43
+ Look at this webpage screenshot. Find the best element to interact with to achieve the goal.
41
44
 
42
45
  Respond ONLY with JSON:
43
46
  {
@@ -47,10 +50,11 @@ Respond ONLY with JSON:
47
50
  }
48
51
 
49
52
  Rules:
50
- - For search/input goals use "fill"
51
- - For button/link goals use "click"
52
- - If nothing relevant exists use "none"
53
- - Prefer specific selectors: [placeholder="..."], [aria-label="..."], button:has-text("...")`,
53
+ - For search/input goals "fill"
54
+ - For button/link/dismiss goals "click"
55
+ - Prefer specific selectors: input[placeholder="..."], [aria-label="..."], button:has-text("...")
56
+ - NEVER return nav links, logo links, or footer links
57
+ - If nothing relevant is visible → "none"`,
54
58
  },
55
59
  ],
56
60
  }],
@@ -62,10 +66,11 @@ Rules:
62
66
  /**
63
67
  * Read and extract specific text from a screenshot.
64
68
  */
65
- async read(screenshot, goal) {
69
+ async read(screenshot, goal, pageUrl) {
70
+ const urlHint = pageUrl ? `Page: ${pageUrl}` : '';
66
71
  const prompt = goal
67
- ? `From this webpage screenshot, extract: ${goal}. Return only the extracted text, nothing else.`
68
- : 'Extract all visible main content text from this webpage. Skip navigation, ads, and footers.';
72
+ ? `${urlHint}\nFrom this webpage screenshot, extract: ${goal}. Return only the extracted text, nothing else.`
73
+ : `${urlHint}\nExtract all visible main content text from this webpage. Skip navigation, ads, and footers.`;
69
74
  const msg = await this.client.messages.create({
70
75
  model: this.model,
71
76
  max_tokens: 1000,
package/dist/ai.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,4DAA0C;AAG1C,MAAa,QAAQ;IAGnB,YAAY,MAAc,EAAW,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,IAAY,EAAE,KAAc;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;yBACvE;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS,IAAI;EAC7B,SAAS;;;;;;;;;;;;;;;;6FAgBkF;yBAClF;qBACF;iBACF,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,GAAG,GAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAoC,CAAC,IAAI,CAAC,IAAI,EAAE;aACvE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,IAAa;QAC1C,MAAM,MAAM,GAAG,IAAI;YACjB,CAAC,CAAC,0CAA0C,IAAI,iDAAiD;YACjG,CAAC,CAAC,6FAA6F,CAAC;QAElG,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;yBACvE;wBACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;qBAC/B;iBACF,CAAC;SACH,CAAC,CAAC;QAEH,OAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;CACF;AAhFD,4BAgFC"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,4DAA0C;AAG1C,MAAa,QAAQ;IAGnB,YAAY,MAAc,EAAW,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,IAAY,EACZ,KAAc,EACd,OAAgB,EAChB,OAAgB;QAEhB,MAAM,SAAS,GAAK,KAAK,CAAI,CAAC,CAAC,mBAAmB,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,OAAO,GAAO,OAAO,CAAE,CAAC,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,WAAW,GAAG,OAAO,CAAE,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;yBACvE;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS,IAAI;EAC7B,SAAS;EACT,OAAO;EACP,WAAW;;;;;;;;;;;;;;;;0CAgB6B;yBAC/B;qBACF;iBACF,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,GAAG,GAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAoC,CAAC,IAAI,CAAC,IAAI,EAAE;aACvE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,IAAa,EAAE,OAAgB;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAI,IAAI;YAClB,CAAC,CAAC,GAAG,OAAO,4CAA4C,IAAI,iDAAiD;YAC7G,CAAC,CAAC,GAAG,OAAO,+FAA+F,CAAC;QAE9G,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;yBACvE;wBACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;qBAC/B;iBACF,CAAC;SACH,CAAC,CAAC;QAEH,OAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;CACF;AA3FD,4BA2FC"}
@@ -1 +1 @@
1
- {"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAsC/C,qBAAa,WAAW;IAKV,OAAO,CAAC,IAAI;IAJxB,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,OAAO,CAAmD;IAClE,OAAO,CAAC,OAAO,CAAS;gBAEJ,IAAI,EAAE,IAAI,EAAE,OAAO,SAAK;IAI5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,KAAK,IAAI,IAAI;IAyBb,IAAI,IAAI,eAAe,EAAE;IAQzB,IAAI,GAAG,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAE/C;IAED,MAAM,CAAC,IAAI,SAAK,GAAG,eAAe,EAAE;CAMrC"}
1
+ {"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAsC/C,qBAAa,WAAW;IAKV,OAAO,CAAC,IAAI;IAJxB,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,OAAO,CAAmD;IAClE,OAAO,CAAC,OAAO,CAAS;gBAEJ,IAAI,EAAE,IAAI,EAAE,OAAO,SAAK;IAI5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,KAAK,IAAI,IAAI;IA2Bb,IAAI,IAAI,eAAe,EAAE;IAQzB,IAAI,GAAG,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAE/C;IAED,MAAM,CAAC,IAAI,SAAK,GAAG,eAAe,EAAE;CAMrC"}
@@ -65,16 +65,15 @@ class Interceptor {
65
65
  return;
66
66
  if (!ct.includes('json'))
67
67
  return;
68
- if (url.length > 600)
69
- return;
70
68
  try {
71
69
  const data = await res.json();
72
70
  if (!data || typeof data !== 'object')
73
71
  return;
74
- const keys = Array.isArray(data)
75
- ? Object.keys(data[0] ?? {})
76
- : Object.keys(data);
77
- if (keys.length < 2)
72
+ // Accept arrays and objects — even single-key responses like { data: [...] }
73
+ const isEmpty = Array.isArray(data)
74
+ ? data.length === 0
75
+ : Object.keys(data).length === 0;
76
+ if (isEmpty)
78
77
  return;
79
78
  this.captured.push({ url, data });
80
79
  }
@@ -92,7 +91,7 @@ class Interceptor {
92
91
  get raw() {
93
92
  return [...this.captured];
94
93
  }
95
- ranked(topN = 15) {
94
+ ranked(topN = 25) {
96
95
  return this.captured
97
96
  .map(r => ({ url: r.url, data: r.data, score: scoreUrl(r.url, this.siteUrl) }))
98
97
  .sort((a, b) => b.score - a.score)
@@ -1 +1 @@
1
- {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"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"}
package/dist/session.d.ts CHANGED
@@ -19,14 +19,14 @@ export declare class Session {
19
19
  private defaultTimeout;
20
20
  private ai;
21
21
  private interceptor;
22
- private currentUrl;
22
+ currentUrl: string;
23
23
  constructor(page: Page, apiKey: string, model: string, defaultTimeout: number);
24
24
  goto(url: string, options?: GotoOptions): Promise<void>;
25
25
  wait(ms: number): Promise<void>;
26
26
  screenshot(): Promise<string>;
27
27
  /**
28
28
  * Click an element described in natural language.
29
- * AI sees the page and finds the right element.
29
+ * Layer 1: semantic patterns. Layer 2: Haiku vision.
30
30
  *
31
31
  * @example
32
32
  * await session.click('the Accept cookies button')
@@ -36,7 +36,7 @@ export declare class Session {
36
36
  private semanticClick;
37
37
  /**
38
38
  * Find an input and type a value.
39
- * AI sees the page and locates the right field.
39
+ * Layer 1: Playwright roles + common selectors. Layer 2: Haiku vision.
40
40
  *
41
41
  * @example
42
42
  * await session.fill('BUE', 'the origin airport input')
@@ -48,26 +48,21 @@ export declare class Session {
48
48
  */
49
49
  type(text: string, options?: FillOptions): Promise<void>;
50
50
  /**
51
- * Read text from the page using AI vision.
51
+ * Read text from the page. Uses DOM for full-page reads, vision for specific extractions.
52
52
  *
53
53
  * @example
54
- * const title = await session.read('the main article headline')
55
- * const price = await session.read('the product price')
56
- * const all = await session.read() // all visible content
54
+ * const headline = await session.read('the main article headline')
55
+ * const price = await session.read('the product price')
56
+ * const all = await session.read()
57
57
  */
58
58
  read(goal?: string): Promise<string>;
59
59
  /**
60
- * Scroll the page.
61
- *
62
60
  * @example
63
61
  * await session.scroll('down')
64
62
  * await session.scroll('up', { pixels: 200 })
65
- * await session.scroll('down', { pixels: 800 })
66
63
  */
67
64
  scroll(direction: 'up' | 'down', options?: ScrollOptions): Promise<void>;
68
65
  /**
69
- * Move cursor to coordinates or to an element described in natural language.
70
- *
71
66
  * @example
72
67
  * await session.moveTo({ x: 100, y: 200 })
73
68
  * await session.moveTo('the hamburger menu icon')
@@ -85,7 +80,6 @@ export declare class Session {
85
80
  * @example
86
81
  * const requests = await session.capture(async () => {
87
82
  * await session.fill('BUE', 'origin airport')
88
- * await session.click('search button')
89
83
  * })
90
84
  */
91
85
  capture(fn: () => Promise<void>): Promise<CapturedRequest[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExF,qBAAa,OAAO;IAMhB,QAAQ,CAAC,IAAI,EAAE,IAAI;IAGnB,OAAO,CAAC,cAAc;IARxB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAM;gBAGb,IAAI,EAAE,IAAI,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACL,cAAc,EAAE,MAAM;IAQ1B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAOnC;;;;;;;OAOG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAkB7B,aAAa;IAyB3B;;;;;;;OAOG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsCpF;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlE;;;;;;;OAOG;IACG,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc1C;;;;;;;OAOG;IACG,MAAM,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IASlF;;;;;;OAMG;IACG,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtE,YAAY,IAAI,IAAI;IAKpB,WAAW,IAAI,eAAe,EAAE;IAIhC,IAAI,gBAAgB,IAAI,eAAe,EAAE,CAExC;IAED;;;;;;;;OAQG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAY5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAgBxF,qBAAa,OAAO;IAMhB,QAAQ,CAAC,IAAI,EAAE,IAAI;IAGnB,OAAO,CAAC,cAAc;IARxB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,WAAW,CAAc;IACjC,UAAU,SAAM;gBAGL,IAAI,EAAE,IAAI,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACL,cAAc,EAAE,MAAM;IAQ1B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAOnC;;;;;;;OAOG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAkB7B,aAAa;IAuB3B;;;;;;;OAOG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDpF;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlE;;;;;;;OAOG;IACG,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1C;;;;OAIG;IACG,MAAM,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IASlF;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetE,YAAY,IAAI,IAAI;IAKpB,WAAW,IAAI,eAAe,EAAE;IAIhC,IAAI,gBAAgB,IAAI,eAAe,EAAE,CAExC;IAED;;;;;;;OAOG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAY5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
package/dist/session.js CHANGED
@@ -17,6 +17,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.Session = void 0;
18
18
  const ai_1 = require("./ai");
19
19
  const interceptor_1 = require("./interceptor");
20
+ // Extra input selectors to try before vision
21
+ const FILL_SELECTORS = [
22
+ 'input[type="search"]',
23
+ '[role="searchbox"]',
24
+ '[role="textbox"]',
25
+ 'input[placeholder]',
26
+ 'input[name="q"]',
27
+ 'input[name="search"]',
28
+ 'input[name="query"]',
29
+ 'input[type="text"]',
30
+ 'input:not([type])',
31
+ 'textarea',
32
+ ];
20
33
  class Session {
21
34
  constructor(page, apiKey, model, defaultTimeout) {
22
35
  this.page = page;
@@ -45,21 +58,21 @@ class Session {
45
58
  // ─── Click ──────────────────────────────────────────────────────────────────
46
59
  /**
47
60
  * Click an element described in natural language.
48
- * AI sees the page and finds the right element.
61
+ * Layer 1: semantic patterns. Layer 2: Haiku vision.
49
62
  *
50
63
  * @example
51
64
  * await session.click('the Accept cookies button')
52
65
  * await session.click('the search icon in the top right')
53
66
  */
54
67
  async click(goal) {
55
- // Layer 1 — try Playwright semantic first (free)
56
- const semanticResult = await this.semanticClick(goal);
57
- if (semanticResult)
68
+ // Layer 1 — semantic patterns
69
+ const l1 = await this.semanticClick(goal);
70
+ if (l1)
58
71
  return true;
59
72
  // Layer 2 — vision
60
73
  try {
61
74
  const img = await this.screenshot();
62
- const decision = await this.ai.decide(img, goal);
75
+ const decision = await this.ai.decide(img, goal, undefined, this.currentUrl);
63
76
  if (decision.action === 'none' || !decision.selector)
64
77
  return false;
65
78
  await this.page.locator(decision.selector).first().click({ timeout: 4000 });
@@ -70,13 +83,13 @@ class Session {
70
83
  }
71
84
  }
72
85
  async semanticClick(goal) {
73
- const lower = goal.toLowerCase();
74
- // Cookie-like goals: try common patterns
75
- if (/cookie|accept|consent|agree|dismiss/i.test(lower)) {
86
+ if (/cookie|accept|consent|agree|dismiss/i.test(goal)) {
76
87
  for (const sel of [
77
- 'button:has-text("Accept")', 'button:has-text("Aceptar")',
78
- 'button:has-text("I agree")', 'button:has-text("Got it")',
79
- '#onetrust-accept-btn-handler', '[class*="cookie"] button',
88
+ '#onetrust-accept-btn-handler',
89
+ 'button:has-text("Accept all")', 'button:has-text("Accept")',
90
+ 'button:has-text("Aceptar")', 'button:has-text("I agree")',
91
+ 'button:has-text("Got it")', 'button:has-text("Dismiss")',
92
+ '[class*="cookie"] button', '[id*="consent"] button',
80
93
  ]) {
81
94
  try {
82
95
  const el = this.page.locator(sel).first();
@@ -93,7 +106,7 @@ class Session {
93
106
  // ─── Fill ───────────────────────────────────────────────────────────────────
94
107
  /**
95
108
  * Find an input and type a value.
96
- * AI sees the page and locates the right field.
109
+ * Layer 1: Playwright roles + common selectors. Layer 2: Haiku vision.
97
110
  *
98
111
  * @example
99
112
  * await session.fill('BUE', 'the origin airport input')
@@ -101,11 +114,11 @@ class Session {
101
114
  */
102
115
  async fill(value, goal, options = {}) {
103
116
  const { pressEnter = true, delay = 60 } = options;
104
- // Layer 1 — Playwright semantic roles (free)
117
+ // Layer 1 — Playwright roles
105
118
  for (const role of ['searchbox', 'textbox']) {
106
119
  try {
107
120
  const loc = this.page.getByRole(role).first();
108
- if (await loc.isVisible({ timeout: 500 }).catch(() => false)) {
121
+ if (await loc.isVisible({ timeout: 400 }).catch(() => false)) {
109
122
  await loc.fill('');
110
123
  await loc.type(value, { delay });
111
124
  if (pressEnter)
@@ -115,10 +128,26 @@ class Session {
115
128
  }
116
129
  catch { /* try next */ }
117
130
  }
118
- // Layer 2vision
131
+ // Layer 1bcommon input selectors
132
+ for (const sel of FILL_SELECTORS) {
133
+ try {
134
+ const loc = this.page.locator(sel).first();
135
+ if (await loc.isVisible({ timeout: 400 }).catch(() => false) &&
136
+ await loc.isEnabled({ timeout: 400 }).catch(() => false)) {
137
+ await loc.scrollIntoViewIfNeeded();
138
+ await loc.fill('');
139
+ await loc.type(value, { delay });
140
+ if (pressEnter)
141
+ await this.page.keyboard.press('Enter');
142
+ return true;
143
+ }
144
+ }
145
+ catch { /* try next */ }
146
+ }
147
+ // Layer 2 — vision with full context
119
148
  try {
120
149
  const img = await this.screenshot();
121
- const decision = await this.ai.decide(img, goal, value);
150
+ const decision = await this.ai.decide(img, goal, value, this.currentUrl, `Looking for input to type "${value}"`);
122
151
  if (decision.action === 'none' || !decision.selector)
123
152
  return false;
124
153
  const el = this.page.locator(decision.selector).first();
@@ -149,32 +178,27 @@ class Session {
149
178
  }
150
179
  // ─── Read ───────────────────────────────────────────────────────────────────
151
180
  /**
152
- * Read text from the page using AI vision.
181
+ * Read text from the page. Uses DOM for full-page reads, vision for specific extractions.
153
182
  *
154
183
  * @example
155
- * const title = await session.read('the main article headline')
156
- * const price = await session.read('the product price')
157
- * const all = await session.read() // all visible content
184
+ * const headline = await session.read('the main article headline')
185
+ * const price = await session.read('the product price')
186
+ * const all = await session.read()
158
187
  */
159
188
  async read(goal) {
160
- // Try to get text from DOM first (free)
161
189
  if (!goal) {
162
190
  const text = await this.page.evaluate(() => document.body.innerText).catch(() => '');
163
191
  if (text.length > 50)
164
192
  return text.slice(0, 5000);
165
193
  }
166
- // Vision for specific extractions
167
194
  const img = await this.screenshot();
168
- return this.ai.read(img, goal);
195
+ return this.ai.read(img, goal, this.currentUrl);
169
196
  }
170
197
  // ─── Scroll ─────────────────────────────────────────────────────────────────
171
198
  /**
172
- * Scroll the page.
173
- *
174
199
  * @example
175
200
  * await session.scroll('down')
176
201
  * await session.scroll('up', { pixels: 200 })
177
- * await session.scroll('down', { pixels: 800 })
178
202
  */
179
203
  async scroll(direction, options = {}) {
180
204
  const { pixels = 400 } = options;
@@ -184,8 +208,6 @@ class Session {
184
208
  }
185
209
  // ─── Move cursor ─────────────────────────────────────────────────────────────
186
210
  /**
187
- * Move cursor to coordinates or to an element described in natural language.
188
- *
189
211
  * @example
190
212
  * await session.moveTo({ x: 100, y: 200 })
191
213
  * await session.moveTo('the hamburger menu icon')
@@ -195,10 +217,9 @@ class Session {
195
217
  await this.page.mouse.move(target.x, target.y);
196
218
  return;
197
219
  }
198
- // AI finds the element
199
220
  try {
200
221
  const img = await this.screenshot();
201
- const decision = await this.ai.decide(img, `hover over: ${target}`);
222
+ const decision = await this.ai.decide(img, `hover over: ${target}`, undefined, this.currentUrl);
202
223
  if (decision.action === 'none' || !decision.selector)
203
224
  return;
204
225
  await this.page.locator(decision.selector).first().hover({ timeout: 3000 });
@@ -222,7 +243,6 @@ class Session {
222
243
  * @example
223
244
  * const requests = await session.capture(async () => {
224
245
  * await session.fill('BUE', 'origin airport')
225
- * await session.click('search button')
226
246
  * })
227
247
  */
228
248
  async capture(fn) {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAGH,6BAAgC;AAChC,+CAA4C;AAG5C,6CAA6C;AAC7C,MAAM,cAAc,GAAG;IACrB,sBAAsB;IACtB,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,UAAU;CACX,CAAC;AAEF,MAAa,OAAO;IAKlB,YACW,IAAU,EACnB,MAAc,EACd,KAAa,EACL,cAAsB;QAHrB,SAAI,GAAJ,IAAI,CAAM;QAGX,mBAAc,GAAd,cAAc,CAAQ;QANhC,eAAU,GAAG,EAAE,CAAC;QAQd,IAAI,CAAC,EAAE,GAAY,IAAI,aAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,+EAA+E;IAE/E,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,UAAuB,EAAE;QAC/C,MAAM,EAAE,SAAS,GAAG,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC;QAClF,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;YACjE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU;QACnB,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,+EAA+E;IAE/E,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,+EAA+E;IAE/E;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,8BAA8B;QAC9B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAEpB,mBAAmB;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAEnE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAY;QACtC,IAAI,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,KAAK,MAAM,GAAG,IAAI;gBAChB,8BAA8B;gBAC9B,+BAA+B,EAAE,2BAA2B;gBAC5D,4BAA4B,EAAE,4BAA4B;gBAC1D,2BAA2B,EAAE,4BAA4B;gBACzD,0BAA0B,EAAE,wBAAwB;aACrD,EAAE,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;oBAC1C,IAAI,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC5D,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;wBAClC,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+EAA+E;IAE/E;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAAY,EAAE,UAAuB,EAAE;QAC/D,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAElD,6BAA6B;QAC7B,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,SAAS,CAAU,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC9C,IAAI,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7D,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnB,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBACjC,IAAI,UAAU;wBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QAED,oCAAoC;QACpC,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC3C,IACE,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;oBACxD,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EACxD,CAAC;oBACD,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAC;oBACnC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnB,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBACjC,IAAI,UAAU;wBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,8BAA8B,KAAK,GAAG,CAAC,CAAC;YACjH,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAEnE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;YACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC/B,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBAChC,IAAI,UAAU;oBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,+EAA+E;IAE/E;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,UAAuB,EAAE;QAChD,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QACnD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,IAAI,UAAU;YAAE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,+EAA+E;IAE/E;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CAAC,IAAa;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,+EAA+E;IAE/E;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,SAAwB,EAAE,UAAyB,EAAE;QAChE,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;QACjC,MAAM,KAAK,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,gFAAgF;IAEhF;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAyC;QACpD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAChG,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAAE,OAAO;YAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,gFAAgF;IAEhF,YAAY;QACV,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,EAAuB;QACnC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,gFAAgF;IAEhF,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF;AA3PD,0BA2PC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rensan-browser",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "AI-powered browser for agents — navigate, click, type, read, see images, capture requests",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",