
    iB4                        U d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlZddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  e       ZdZi Zeeef   ed<   deeef   dz  fdZdeeef   fdZ dededz  fdZ!dede"dz  fdZ#dedefdZ$ edddddd      Z%de&fdZ'd8dedeeef   de&de(def
dZ)d8ded ed!e(de(fd"Z* ejV                  d#       ejX                  d$d%ed&'       ejX                  d(d) ej
                         d*'       ejX                  d+d,d-d./       ejX                  d0d1d2d-d3/      d4edz  d5edz  d!e(d2e(fd6                                   Z-e.d7k(  r e-        yy)9z
Standalone init command for browser-use template generation.

This module provides a minimal command-line interface for generating
browser-use templates without requiring heavy TUI dependencies.
    N)Path)Any)request)URLError)inquirer)Choice)InquirerPyStyle)Console)Panel)TextzChttps://raw.githubusercontent.com/browser-use/template-library/mainINIT_TEMPLATESreturnc                  *   	 t          d} t        j                  | d      5 }|j                         j	                  d      }t        j                  |      cddd       S # 1 sw Y   yxY w# t        t        t
        j                  t        f$ r Y yw xY w)zj
	Fetch template list from GitHub templates.json.

	Returns template dict if successful, None if failed.
	z/templates.json   timeoututf-8N)TEMPLATE_REPO_URLr   urlopenreaddecodejsonloadsr   TimeoutErrorJSONDecodeError	Exception)urlresponsedatas      ^/mnt/e/genesis-system/.venvs/browser-army/lib/python3.12/site-packages/browser_use/init_cmd.py_fetch_template_listr!   #   s}    
_-#sA& (
--/
 
 
)4
**T
   
<!5!5yA 	s.    A, 4A 	A,  A)%A, )A, ,#BBc                  4    t               } | | S t        d      )zT
	Get template list from GitHub.

	Raises FileNotFoundError if GitHub fetch fails.
	zFCould not fetch templates from GitHub. Check your internet connection.)r!   FileNotFoundError)	templatess    r    _get_template_listr%   2   s$     "#	abb    	file_pathc                     	 t          d|  }t        j                  |d      5 }|j                         j	                  d      cddd       S # 1 sw Y   yxY w# t
        t        t        f$ r Y yw xY w)zZ
	Fetch template file from GitHub.

	Returns file content if successful, None if failed.
	/r   r   r   N)r   r   r   r   r   r   r   r   r'   r   r   s      r    _fetch_from_githubr+   >   si    
Qyk*#sA& *(
--/
 
 
)* * *	<+ 	s.   "A A	A AA A A0/A0c                     	 t          d|  }t        j                  |d      5 }|j                         cddd       S # 1 sw Y   yxY w# t        t
        t        f$ r Y yw xY w)zX
	Fetch binary file from GitHub.

	Returns file content if successful, None if failed.
	r)   r   r   N)r   r   r   r   r   r   r   r*   s      r    _fetch_binary_from_githubr-   L   s^    
Qyk*#sA& (
--/  	<+ 	s+   "A
 >	A
 AA
 A
 
A! A!c                 <    t        |       }||S t        d|        )zM
	Get template file content from GitHub.

	Raises exception if fetch fails.
	z&Could not fetch template from GitHub: )r+   r#   )r'   contents     r    _get_template_contentr0   Z   s,     i(	.A)MNNr&   z#fe750e boldbold)pointerhighlightedquestionanswerquestionmarkc                  >    t        j                         j                  S )z&Get current terminal width in columns.)shutilget_terminal_sizecolumns r&   r    _get_terminal_widthr<   t   s      "***r&   namemetadatawidth
is_defaultc                 b   |j                  dd      }|j                  dd      }t        |j                  d      t              r"|j                  di       j                  dd      nd}|dkD  r,|r|rd|  d	| d
| S d|  d
| S |r|s
|  d	| d
| S |  d
| S |dkD  r|rd|  d
| S |  d
| S | S )a
  
	Format a template choice with responsive display based on terminal width.

	Styling:
	- Featured templates get [FEATURED] prefix
	- Author name included when width allows (except for default templates)
	- Everything turns orange when highlighted (InquirerPy's built-in behavior)

	Args:
		name: Template name
		metadata: Template metadata (description, featured, author)
		width: Terminal width in columns
		is_default: Whether this is a default template (default, advanced, tools)

	Returns:
		Formatted choice string
	featuredFdescription authorr=   d   z[FEATURED] z by z - <   )get
isinstancedict)r=   r>   r?   r@   is_featuredrC   author_names          r    _format_choicerM   y   s    $ ||J.||M2.=GU]H^`d=ex||Hb)--fb9km 
CKd;-s;-@@c+// *V4}C}55V3{m$$bjvS
..F#k]
## 
+r&   output_pathr/   forcec                 r   | j                         rH|sFt        j                  d|  d       t        j                  dd      st        j                  d       y| j
                  j                  dd       	 | j                  |d	
       y# t        $ r"}t        j                  d|        Y d}~yd}~ww xY w)z,Write content to a file, with safety checks.u1   [yellow]⚠[/yellow]  File already exists: [cyan][/cyan]z
Overwrite?Fdefault   [red]✗[/red] CancelledTparentsexist_okr   )encodingu#   [red]✗[/red] Error writing file: N)	existsconsoleprintclickconfirmparentmkdir
write_textr   )rN   r/   rO   es       r    _write_init_filerb      s     	--CK=PWXY	|U	3
==+,
 $673	 	--5aS9:	s   7B 	B6B11B6zbrowser-use-initz
--templatez-tzTemplate to use)typehelpz--outputz-oz5Output file path (default: browser_use_<template>.py)z--forcez-fTz'Overwrite existing files without asking)is_flagrd   z--listz-llist_templateszList available templatestemplateoutputc                    	 t               }|rat        j                  d       j                         D ]$  \  }}t        j                  d|dd|d           & t        j                          y| st               }g d	}	j                         D cg c]  \  }}|j                  d
d      s||f }
}}|j                         D cg c]  \  }}||	vr|j                  d
d      s||f! }}}d }|	D cg c]  }||v s|||   f }}|j                  |d       |
j                  |d       |j                  |d       g }t        |      D ]3  \  }\  }}t        |||d      }|j                  t        ||             5 t        |
      D ]3  \  }\  }}t        |||d      }|j                  t        ||             5 |D ]0  \  }}t        |||d      }|j                  t        ||             2 t        t        d      } |d|t         d      j#                         } | *t        j                  d       t	        j
                  d       | J t%        j&                         | z  }|j)                         r\|sZt        j                  d| d       t+        j,                  dd      s*t        j                  d       t	        j
                  d       |j/                  dd       |r|t%        |      z  }n|dz  }	 |    d   }t1        |      }t5        ||      rnt        j                  d| d       d |    v rSd!dl}||    d    D ]C  }|d"   }|d#   }|j8                  |z  }|j                  d$d      }|j                  d%d      }||k(  rG	 |rdt;        |      }|r=|j)                         r|r|j=                  |       t        j                  d&| d       nt        j                  d'| d(       nt1        |      }t5        |||      r~t        j                  d&| d       |rct        j>                  d)k7  rP|jA                  |j7                         jB                  |jD                  z  |jF                  z  |jH                  z         F tK               }d,||    v r||    d,   }t        |d      D ]  \  }} d-| v r|j                  | d-    d.d/0       $|j                  d.| d1| d2    d3d40       | j                  d5g       D ]G  }!|!jM                  d6|       }!|!jM                  d7|jN                        }!|j                  d8|! d.d90       I d:| v r|j                  d8| d:    d.d/0       |j                  d.        n|j                  d;d40       |j                  d<|  d=d90       |j                  d>d40       |j                  d?d90       |j                  d@d40       |j                  dAd90       |j                  dBd40       |j                  dCd90       |j                  dDd/0       |j                  dEd40       |j                  dF|jN                   d.d90       t        j                  tQ        |dGdHdIJ             yy# t        $ r8}t        j                  d|        t	        j
                  d       Y d}~d}~ww xY wc c}}w c c}}w c c}w # t2        $ r8}t        j                  d|        t	        j
                  d       Y d}~d}~ww xY w# t2        $ r&}t        j                  d*| d+|        Y d}~d}~ww xY w)Ka  
	Generate a browser-use template file to get started quickly.

	Examples:

	
	# Interactive mode - prompts for template selection
	uvx browser-use init
	uvx browser-use init --template

	
	# Generate default template
	uvx browser-use init --template default

	
	# Generate advanced template with custom filename
	uvx browser-use init --template advanced --output my_script.py

	
	# List available templates
	uvx browser-use init --list
	u   [red]✗[/red]    Nz#
[bold]Available templates:[/bold]
z  [#fe750e]12z[/#fe750e] - rC   )rS   advancedtoolsrB   Fc                     | \  }}t        |j                  d      t              r$|j                  di       j                  dd      }|S d}|S )NrE   last_modified_datez
1970-01-01)rI   rH   rJ   )itemr=   infodate_strs       r    get_last_modifiedzmain.<locals>.get_last_modified  s[    :4 $((8$d+ 	HHXr3\B 
 ? 
 
 ?r&   T)keyreverse)r@   )r=   valuefuzzyz#Select a template (type to search):z70%)messagechoicesstyle
max_heightu   
[red]✗[/red] Cancelledu6   [yellow]⚠[/yellow]  Directory already exists: [cyan]rQ   zContinue and overwrite files?rR   rT   rU   zmain.pyfileu'   [red]✗[/red] Error reading template: u"   
[green]✓[/green] Created [cyan]filesr   sourcedestbinary
executableu!   [green]✓[/green] Created [cyan]u,   [yellow]⚠[/yellow]  Could not fetch [cyan]z[/cyan] from GitHubwin32u-   [yellow]⚠[/yellow]  Error generating [cyan]z	[/cyan]: 
next_stepsfooter
z
dim italic)rz   z. titlez:
r1   commandsz
{template}z{output}z   dimnotez#
1. Navigate to project directory:
z   cd z

z2. Initialize uv project:
z   uv init

z3. Install browser-use:
z   uv add browser-use

z44. Set up your API key in .env file or environment:
z    BROWSER_USE_API_KEY=your-key
zX   (Get your key at https://cloud.browser-use.com/dashboard/settings?tab=api-keys&new)

z5. Run your script:
z
   uv run z[bold]Next steps[/bold]z#fe750e)rj      )r   border_stylepadding))r%   r#   rZ   r[   sysexititemsr<   rH   sort	enumeraterM   appendr   getattrr   inquirer_styleexecuter   cwdrY   r\   r]   r_   r0   r   rb   statr^   r-   write_bytesplatformchmodst_modeS_IXUSRS_IXGRPS_IXOTHr   replacer=   r   )"rg   rh   rO   rf   r   ra   r=   rq   r?   default_template_namesfeatured_templatesother_templatesrs   default_templatesry   i	formatted_fuzzytemplate_dirrN   template_filer/   r   	file_specsource_path	dest_name	dest_path	is_binaryis_executablefile_contentr   stepsstepcmds"                                     r    mainr      s   p%'. 	--78"((* LjdD
==;tBi}T-5H4IJKL	--/ 	

% <7E7K7K7MmtQUQYQYZdfkQltmm $))+tT
((*e1L 	$</  AWqZ^bpZpnT23qq.= />,d; ' ##45 6oa$dD%DA9
>>&it456
 ##56 6oa$dD%EB9
>>&it456
 $ 6jdDdD%EB9
>>&it456 8W%&0		
 GI  
==-.88A; 	 
X%%	--HV]^_	6	F
==+,88A; D40 tF|++y(+ *62-!-0' ['51	--5k]'JK x(("8,W5 \yH%K&!I""Y.Ih.IMM,6M K\.{;l	 El+9)GLM}}CI;Nabc*;7l	)\5	9}}87KL
CLLG3	(004<<?$,,NQUQ]Q]]^7\@ v* ^H--(#L15E1% wq$4$x.),LA 1#RWc2&A xx
B' 3;;|X.S;;z;#3#34SSE}E2	3 ~T&\N"-\Bd). <FKvhZt,E:2&A%U30?0>LTZ[8F`
   ,F;z+"2"2!326eD	--
#	e 2U 	 	--/!%&((1++& n" r@ 	 	--9!=>((1++P  \]]B9+YWXVYZ[[\sf   
Z [.[
$[$8	[*	[*
[/  C<\3	[#-[[/	\08-\++\03	]"<]]"__main__)F)/__doc__r   r8   r   pathlibr   typingr   urllibr   urllib.errorr   r\   
InquirerPyr   InquirerPy.base.controlr   InquirerPy.utilsr	   rich.consoler
   
rich.panelr   	rich.textr   rZ   r   r   rJ   str__annotations__r!   r%   r+   bytesr-   r0   r   intr<   boolrM   rb   commandoptionr   __name__r;   r&   r    <module>r      sC     
    !   * ,     ) Z  "$S#X #d38nt3 	cDcN 	c# #*   OS OS O ! +S +
. .S#X .s .PT .ad .b$  T d * !"		 ejjl=	 
	/	 		 c:c	tc 	c 	c #4cL z r&   