1- import { Tool } from ' ../../core/types.js' ;
2- import { z } from ' zod' ;
3- import { zodToJsonSchema } from ' zod-to-json-schema' ;
4- import { v4 as uuidv4 } from ' uuid' ;
5- import { chromium } from ' @playwright/test' ;
6- import { browserSessions , type BrowserError , BrowserErrorCode } from ' ./types.js' ;
1+ import { Tool } from " ../../core/types.js" ;
2+ import { z } from " zod" ;
3+ import { zodToJsonSchema } from " zod-to-json-schema" ;
4+ import { v4 as uuidv4 } from " uuid" ;
5+ import { chromium } from " @playwright/test" ;
6+ import { browserSessions } from " ./types.js" ;
77
88const parameterSchema = z . object ( {
9- url : z . string ( ) . url ( ) . optional ( ) . describe ( 'Initial URL to navigate to' ) ,
10- headless : z . boolean ( ) . optional ( ) . describe ( 'Run browser in headless mode (default: true)' ) ,
11- timeout : z . number ( ) . optional ( ) . describe ( 'Default timeout in milliseconds (default: 30000)' ) ,
12- description : z . string ( ) . max ( 80 ) . describe ( 'The reason for starting this browser session (max 80 chars)' ) ,
9+ url : z . string ( ) . url ( ) . optional ( ) . describe ( "Initial URL to navigate to" ) ,
10+ headless : z
11+ . boolean ( )
12+ . optional ( )
13+ . describe ( "Run browser in headless mode (default: true)" ) ,
14+ timeout : z
15+ . number ( )
16+ . optional ( )
17+ . describe ( "Default timeout in milliseconds (default: 30000)" ) ,
18+ description : z
19+ . string ( )
20+ . max ( 80 )
21+ . describe ( "The reason for starting this browser session (max 80 chars)" ) ,
1322} ) ;
1423
1524const returnSchema = z . object ( {
@@ -23,32 +32,36 @@ type Parameters = z.infer<typeof parameterSchema>;
2332type ReturnType = z . infer < typeof returnSchema > ;
2433
2534export const browseStartTool : Tool < Parameters , ReturnType > = {
26- name : ' browseStart' ,
27- description : ' Starts a new browser session with optional initial URL' ,
35+ name : " browseStart" ,
36+ description : " Starts a new browser session with optional initial URL" ,
2837 parameters : zodToJsonSchema ( parameterSchema ) ,
2938 returns : zodToJsonSchema ( returnSchema ) ,
3039
31- execute : async ( { url, headless = true , timeout = 30000 } , { logger } ) : Promise < ReturnType > => {
32- logger . verbose ( `Starting browser session${ url ? ` at ${ url } ` : '' } ` ) ;
40+ execute : async (
41+ { url, headless = true , timeout = 30000 } ,
42+ { logger }
43+ ) : Promise < ReturnType > => {
44+ logger . verbose ( `Starting browser session${ url ? ` at ${ url } ` : "" } ` ) ;
3345
3446 try {
3547 const instanceId = uuidv4 ( ) ;
36-
48+
3749 // Launch browser
3850 const browser = await chromium . launch ( {
39- headless
51+ headless,
4052 } ) ;
4153
4254 // Create new context with default settings
4355 const context = await browser . newContext ( {
4456 viewport : null ,
45- userAgent : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
57+ userAgent :
58+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" ,
4659 } ) ;
4760
4861 // Create new page
4962 const page = await context . newPage ( ) ;
5063 page . setDefaultTimeout ( timeout ) ;
51-
64+
5265 // Initialize browser session
5366 const session = {
5467 browser,
@@ -59,41 +72,40 @@ export const browseStartTool: Tool<Parameters, ReturnType> = {
5972 browserSessions . set ( instanceId , session ) ;
6073
6174 // Setup cleanup handlers
62- browser . on ( ' disconnected' , ( ) => {
75+ browser . on ( " disconnected" , ( ) => {
6376 browserSessions . delete ( instanceId ) ;
6477 } ) ;
6578
6679 // Navigate to URL if provided
67- let content = '' ;
80+ let content = "" ;
6881 if ( url ) {
69- await page . goto ( url , { waitUntil : ' networkidle' } ) ;
82+ await page . goto ( url , { waitUntil : " networkidle" } ) ;
7083 content = await page . content ( ) ;
7184 }
7285
73- logger . verbose ( ' Browser session started successfully' ) ;
74-
86+ logger . verbose ( " Browser session started successfully" ) ;
87+
7588 return {
7689 instanceId,
77- status : ' initialized' ,
90+ status : " initialized" ,
7891 content : content || undefined ,
7992 } ;
80-
8193 } catch ( error ) {
8294 logger . error ( `Failed to start browser: ${ error } ` ) ;
8395 return {
84- instanceId : '' ,
85- status : ' error' ,
96+ instanceId : "" ,
97+ status : " error" ,
8698 error : error instanceof Error ? error . message : String ( error ) ,
8799 } ;
88100 }
89101 } ,
90102
91103 logParameters : ( { url, description } , { logger } ) => {
92104 logger . info (
93- `Starting browser session${ url ? ` at ${ url } ` : '' } , ${ description } ` ,
105+ `Starting browser session${ url ? ` at ${ url } ` : "" } , ${ description } `
94106 ) ;
95107 } ,
96-
108+
97109 logReturns : ( output , { logger } ) => {
98110 if ( output . error ) {
99111 logger . error ( `Browser start failed: ${ output . error } ` ) ;
0 commit comments