Ë
    Ïìj±C  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ  ej                   e«      Z G d„ d«      Z G d„ d	«      Z G d
„ d«      Z G d„ d«      Z G d„ d«      Zg d¢Zy)aŽ  Additional execution backends for Phase 7 Execution Layer.

Provides browser automation, Git tooling, Docker/Podman container execution,
MCP execution provider, and Open Interpreter bridge capabilities on top of
the existing BubblewrapExecutionProvider sandbox.

All backends integrate with the existing AuthorizedExecutionService security
chain (identity -> scope -> policy -> approval -> audit).
é    )ÚannotationsN)ÚPath)ÚAnyc                  óv   — e Zd ZdZddddœ	 	 	 	 	 	 	 dd„Zdd„Zedd„«       Zd	ddd
œ	 	 	 	 	 	 	 	 	 dd„Zdd„Z	y)ÚBrowserAutomationProvidera  Browser automation via headless Playwright/Chromium in sandbox.

    When Playwright is unavailable, reports capability_unavailable instead of
    faking browsing results - consistent with the security-first design where
    absence of evidence is not evidence of absence.
    NTé   )Úbubblewrap_providerÚheadlessÚtimeout_secondsc               óX   — || _         || _        || _        | j                  «       | _        y ©N)r	   r
   r   Ú_check_playwrightÚ_playwright_available)Úselfr	   r
   r   s       úU/home/oem/CyberBrain26-unified/src/cyberbrain26/execution_plane/execution_backends.pyÚ__init__z"BrowserAutomationProvider.__init__$   s,   € ð $7ˆÔ Ø ˆŒØ.ˆÔØ%)×%;Ñ%;Ó%=ˆÕ"ó    c                óN   — 	 t        j                  d«       y# t        $ r Y yw xY w)NÚ
playwrightTF)Ú	importlibÚimport_moduleÚImportError©r   s    r   r   z+BrowserAutomationProvider._check_playwright0   s*   € ð	Ü×#Ñ# LÔ1ØøÜò 	Ùð	ús   ‚ ˜	$£$c                 ó   — y)NÚbrowser© r   s    r   Úprovider_namez'BrowserAutomationProvider.provider_name7   s   € àr   Úopen)ÚactionÚselectorÚ
input_textc             ƒ  óD  K  — | j                   s| j                  |dddddœS 	 t        j                  d«      }t	        |d«      } |«       4 ƒd{  –—† }|j
                  j                  | j                  ¬	«      ƒ d{  –—† }|j                  «       ƒ d{  –—† }	|	j                  || j                  d
z  ¬«      ƒ d{  –—†  ||	j                  «       ƒ d{  –—† ddœ}
|dk(  r|	j                  «       ƒ d{  –—† |
d<   nv|dk(  r5|r3|	j                  || j                  d
z  ¬«      ƒ d{  –—†  d|
d<   ||
d<   n<|dk(  r7|r5|r3|	j                  ||| j                  d
z  ¬«      ƒ d{  –—†  d|
d<   ||
d<   |j                  «       ƒ d{  –—†  | j                  d|
dœcddd«      ƒd{  –—†  S 7 �Œ_7 �Œ47 �Œ7 Œù7 Œâ7 ŒÄ7 Œ“7 ŒX7 Œ87 Œ# 1 ƒd{  –—†7  sw Y   yxY w# t         $ r:}t"        j%                  d|«       | j                  |dt'        |«      dœcY d}~S d}~ww xY w­w)zªNavigate to URL and optionally interact.

        Returns capability_unavailable if Playwright is not installed, rather
        than fabricating a browse result.
        Úcapability_unavailableÚbrowsingz;Playwright not installed; browser automation not available.zplaywright missing)ÚproviderÚurlÚstatusÚ
capabilityÚreasonÚerrorzplaywright.async_apiÚasync_playwrightN)r
   iè  ©ÚtimeoutÚ	completed)r&   Útitler'   Ú
screenshotÚclickr   r    ÚtypeÚsuccess©r%   r'   Údataz Browser automation failed for %sÚfailed)r%   r&   r'   r*   )r   r   r   r   ÚgetattrÚchromiumÚlaunchr
   Únew_pageÚgotor   r/   r0   r1   ÚfillÚcloseÚ	ExceptionÚloggerÚ	exceptionÚstr)r   r&   r   r    r!   Úplaywright_async_apir+   Úpr   ÚpageÚresult_dataÚexcs               r   Únavigatez"BrowserAutomationProvider.navigate;   s)  è ø€ ð ×)Ò)à ×.Ñ.ØØ2Ø(ØWØ-ñð ð&	Ü#,×#:Ñ#:Ð;QÓ#RÐ Ü&Ð';Ð=OÓPÐá'Ó)÷ ð ¨QØ !§
¡
× 1Ñ 1¸4¿=¹=Ð 1Ó I×I�Ø$×-Ñ-Ó/×/�Ø—i‘i ¨T×-AÑ-AÀDÑ-H�iÓI×IÐIàØ#'§:¡:£<×/Ø)ñ/�ð ˜\Ò)Ø6:·o±oÓ6G×0G�K Ò-Ø˜wÒ&©8ØŸ*™* X°t×7KÑ7KÈdÑ7R˜*ÓS×SÐSØ,3�K Ñ)Ø.6�K 
Ò+Ø˜vÒ%©(±zØŸ)™) H¨jÀ$×BVÑBVÐY]ÑB]˜)Ó^×^Ð^Ø,2�K Ñ)Ø.6�K 
Ñ+à—m‘m“o×%Ð%à $× 2Ñ 2Ø'Ø'ñ÷-÷ ò ùØIùØ/ùØIøð 0øð
 1HøàSøð _øð &øð+ø÷ ÷ ñ ûô6 ò 	Ü×ÑÐ?ÀÔEà ×.Ñ.ØØ"Ü˜S›ñ	õ ûð	üs  ‚ H £,G ÁF.ÁG Á*GÁ=F1Á>GÂF4Â'GÂ=F7Â>GÃF9ÃGÃ6F;Ã72GÄ)F=Ä*<GÅ&F?Å'!GÆGÆ	GÆG Æ(GÆ)G Æ-H Æ.G Æ1GÆ4GÆ7GÆ9GÆ;GÆ=GÆ?GÇGÇG ÇGÇGÇGÇG ÇH ÇG Ç	HÇ#/HÈHÈH ÈHÈH c                ó   — g S )z?Pages actually fetched. Always empty if Playwright unavailable.r   r   s    r   Úget_browsedz%BrowserAutomationProvider.get_browsedz   s   € àˆ	r   )r	   r   r
   Úboolr   ÚintÚreturnÚNone©rL   rJ   ©rL   rA   )
r&   rA   r   rA   r    ú
str | Noner!   rP   rL   údict[str, Any])rL   zlist[dict[str, Any]])
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr   rG   rI   r   r   r   r   r      sž   „ ñð $(ØØ!ñ
>ð !ð
>ð ð	
>ð
 ð
>ð 
ó
>óð òó ðð Ø#Ø!%ñ=àð=ð ð	=ð
 ð=ð ð=ð 
ó=ô~r   r   c                  óŽ   — e Zd ZdZddddœ	 	 	 	 	 	 	 dd„Zedd„«       Zdd„Zddd	œ	 	 	 	 	 	 	 dd
„Zdd„Z	ddd„Z
ddd„Zddd„Zy)ÚGitToolingProviderzEGit operations wrapper: clone, pull, push, diff, commit, status, log.NÚgité<   ©r	   Ú
git_binaryr   c               ó.   — || _         || _        || _        y r   r[   )r   r	   r\   r   s       r   r   zGitToolingProvider.__init__‚   s   € ð $7ˆÔ Ø$ˆŒØ.ˆÕr   c                 ó   — y)NrY   r   r   s    r   r   z GitToolingProvider.provider_name�   ó   € àr   c                óD   — t        j                  | j                  «      d uS r   )ÚshutilÚwhichr\   r   s    r   Ú_git_availablez!GitToolingProvider._git_available‘   s   € Ü�|‰|˜DŸO™OÓ,°DÐ8Ð8r   )Ú	workspaceÚcwdc             ƒ  ó@  K  — | j                  «       s | j                  |dd| j                  › d�ddœS | j                  g|¢}|rt        |«      n|xs t	        j
                  «       }	 t        j                  ||t        j                  j                  t        j                  j                  dœŽƒ d{  –—† }t        j                  |j                  «       | j                  ¬«      ƒ d{  –—† \  }}| j                  ||j                  d	k(  rd
nd|j                  dd¬«      |j                  dd¬«      |j                  dœS 7 ŒŽ7 ŒY# t        $ r" | j                  |dd| j                  › d�dœcY S t         $ r$}	| j                  |dt        |	«      dœcY d}	~	S d}	~	ww xY w­w)z-Run a git command and return captured output.r#   rY   ú not found on PATH.zgit missing)r%   Úcommandr'   r(   r)   r*   )re   ÚstdoutÚstderrNr,   r   r3   r6   úutf-8Úreplace©Úerrors)r%   rh   r'   ri   rj   Úreturn_coder-   zGit command timed out after Ús)r%   rh   r'   r*   )rc   r   r\   rA   ÚosÚgetcwdÚasyncioÚcreate_subprocess_execÚ
subprocessÚPIPEÚwait_forÚcommunicater   Ú
returncodeÚdecodeÚTimeoutErrorr>   )
r   rh   rd   re   ÚcmdÚworkdirÚresultri   rj   rF   s
             r   ÚrunzGitToolingProvider.run”   s   è ø€ ð ×"Ñ"Ô$à ×.Ñ.Ø"Ø2Ø#Ø!Ÿ_™_Ð-Ð-@ÐAØ&ñð ð �‰Ð) Ð)ˆÙ!”#�c”(¨	Ò(@´R·Y±Y³[ˆð	Ü"×9Ñ9ØØÜ×)Ñ)×.Ñ.Ü×)Ñ)×.Ñ.ò	÷ ˆFô $+×#3Ñ#3Ø×"Ñ"Ó$¨d×.BÑ.Bô$÷ ‰NˆF�Fð !×.Ñ.Ø"Ø'-×'8Ñ'8¸AÒ'=™)À8Ø Ÿ-™-¨¸	˜-ÓBØ Ÿ-™-¨¸	˜-ÓBØ%×0Ñ0ñð ðøðùô ò 	à ×.Ñ.Ø"Ø#Ø7¸×8LÑ8LÐ7MÈQÐOñ	ò ô ò 	à ×.Ñ.Ø"Ø"Ü˜S›ñ	õ ûð	üsh   ‚A%FÁ(A
E Â2EÂ36E Ã)EÃ*AE Å FÅE ÅE Å(FÅ-FÅ/FÅ7FÆFÆFÆFÆFc              ƒ  óF   K  — | j                  d||g«      ƒ d {  –—† S 7 Œ­w)NÚclone©r   )r   Úrepo_urlÚ
target_dirs      r   r�   zGitToolingProvider.cloneÊ   s"   è ø€ Ø—X‘X˜w¨°*Ð=Ó>×>Ð>Ð>úó   ‚!š›!c              ƒ  óF   K  — | j                  dg|¬«      ƒ d {  –—† S 7 Œ­w)Nr'   ©re   r‚   ©r   re   s     r   r'   zGitToolingProvider.statusÍ   s!   è ø€ Ø—X‘X˜x˜j¨c�XÓ2×2Ð2Ð2úr…   c              ƒ  óF   K  — | j                  dg|¬«      ƒ d {  –—† S 7 Œ­w)NÚdiffr‡   r‚   rˆ   s     r   rŠ   zGitToolingProvider.diffÐ   s!   è ø€ Ø—X‘X˜v˜h¨C�XÓ0×0Ð0Ð0úr…   c              ƒ  óP   K  — | j                  dd|› �dg|¬«      ƒ d {  –—† S 7 Œ­w)NÚlogz--max-count=z--pretty=format:%H %sr‡   r‚   )r   re   Ú	max_counts      r   rŒ   zGitToolingProvider.logÓ   s:   è ø€ Ø—X‘XØ�l 9 +Ð.Ð0GÐHÈcð ó 
÷ 
ð 	
ð 
ús   ‚&Ÿ$ &)r	   r   r\   rA   r   rK   rL   rM   rO   rN   )rh   z	list[str]rd   rP   re   ústr | Path | NonerL   rQ   )rƒ   rA   r„   rA   rL   rQ   r   )re   rŽ   rL   rQ   )Né
   )re   rŽ   r�   rK   rL   rQ   )rR   rS   rT   rU   r   rV   r   rc   r   r�   r'   rŠ   rŒ   r   r   r   rX   rX      sž   „ ÙOð
 $(ØØ!ñ	/ð !ð	/ð ð		/ð
 ð	/ð 
ó	/ð òó ðó9ð !%Ø!%ñ4àð4ð ð	4ð
 ð4ð 
ó4ól?ô3ô1õ
r   rX   c                  ój   — e Zd ZdZdddœ	 	 	 	 	 dd„Zdd„Zedd„«       Z	 ddd	d
œ	 	 	 	 	 	 	 	 	 dd„Zy)ÚDockerPodmanProviderz>Container execution via Docker or Podman (rootless preferred).Úpodmanéx   )Úruntimer   c               óJ   — || _         || _        | j                  «       | _        y r   )r”   r   Ú_check_runtimeÚ_runtime_available)r   r”   r   s      r   r   zDockerPodmanProvider.__init__Ü   s$   € ð ˆŒØ.ˆÔØ"&×"5Ñ"5Ó"7ˆÕr   c                óD   — t        j                  | j                  «      d uS r   )ra   rb   r”   r   s    r   r–   z#DockerPodmanProvider._check_runtimeæ   s   € Ü�|‰|˜DŸL™LÓ)°Ð5Ð5r   c                ó    — | j                   › d�S )Nz
-container)r”   r   s    r   r   z"DockerPodmanProvider.provider_nameé   s   € à—,‘,�˜zÐ*Ð*r   NÚnone)rd   Únetworkc          	   ƒ  ó¬  K  — | j                   s-| j                  |dd| j                  › d�| j                  › d�dœS | j                  ddd|g}|r|j                  d	|› d
�ddg«       |j                  dg«       |j	                  |«       |r|j                  |«       	 t        j                  |t
        j                  j                  t
        j                  j                  dœŽƒ d{  –—† }t        j                  |j                  «       | j                  ¬«      ƒ d{  –—† \  }}| j                  |||j                  dk(  rdnd|j                  dd¬«      |j                  dd¬«      |j                  dœS 7 Œ�7 ŒZ# t        $ r" | j                  |dd| j                  › d�dœcY S t        $ r$}	| j                  |dt!        |	«      dœcY d}	~	S d}	~	ww xY w­w)z1Run a container with the given image and command.r#   Ú	containerrg   z missing)r%   Úimager'   r(   r)   r*   r   z--rmz	--networkz-vz:/workspacez-wz
/workspacez--memory=512m)ri   rj   Nr,   r   r3   r6   rk   rl   rm   )r%   rž   rh   r'   ri   rj   ro   r-   z$Container execution timed out after rp   )r%   rž   r'   r*   )r—   r   r”   ÚextendÚappendrs   rt   ru   rv   rw   rx   r   ry   rz   r{   r>   rA   )
r   rž   rh   rd   r›   r|   r~   ri   rj   rF   s
             r   Úrun_containerz"DockerPodmanProvider.run_containerí   sÜ  è ø€ ð ×&Ò&à ×.Ñ.ØØ2Ø)Ø!Ÿ\™\˜NÐ*=Ð>Ø ŸL™L˜>¨Ð2ñð ð �|‰|˜U F¨K¸ÐAˆÙØ�J‰J˜  ¨;Ð7¸¸|ÐLÔMØ�
‰
�OÐ$Ô%Ø�
‰
�5ÔÙØ�J‰J�wÔð	Ü"×9Ñ9ØÜ×)Ñ)×.Ñ.Ü×)Ñ)×.Ñ.ò÷ ˆFô
 $+×#3Ñ#3Ø×"Ñ"Ó$¨d×.BÑ.Bô$÷ ‰NˆF�Fð !×.Ñ.ØØ"Ø'-×'8Ñ'8¸AÒ'=™)À8Ø Ÿ-™-¨¸	˜-ÓBØ Ÿ-™-¨¸	˜-ÓBØ%×0Ñ0ñð ðøð
ùô ò 	à ×.Ñ.ØØ#Ø?À×@TÑ@TÐ?UÐUVÐWñ	ò ô ò 	à ×.Ñ.ØØ"Ü˜S›ñ	õ ûð	üsh   ‚BGÂA	E; Ã'E7Ã(6E; ÄE9ÄAE; Å6GÅ7E; Å9E; Å;(GÆ#GÆ%GÆ-GÇGÇGÇGÇG)r”   rA   r   rK   rL   rM   rN   rO   r   )
rž   rA   rh   zlist[str] | Nonerd   rP   r›   rA   rL   rQ   )	rR   rS   rT   rU   r   r–   rV   r   r¡   r   r   r   r‘   r‘   Ù   s�   „ ÙHð
  Ø"ñ	8ð ð8ð ð	8ð
 
ó8ó6ð ò+ó ð+ð %)ð:ð
 !%Øñ:àð:ð "ð:ð
 ð:ð ð:ð 
ô:r   r‘   c                  ób   — e Zd ZdZddœ	 	 	 d
d„Zedd„«       Z	 	 	 	 	 	 dd„Zdd„Zdd„Z	dd	„Z
y)ÚMCPExecutionProviderzñMCP (Model Context Protocol) execution provider.

    Exposes execution capabilities as MCP tools via stdio transport, enabling
    MCP-compatible clients to invoke sandboxed code execution through the
    standard MCP protocol surface.
    N©Úauthorized_servicec               ó   — || _         y r   r¤   ©r   r¥   s     r   r   zMCPExecutionProvider.__init__2  s   € ð
 #5ˆÕr   c                 ó   — y)NÚmcpr   r   s    r   r   z"MCPExecutionProvider.provider_name9  r_   r   c              ƒ  óê   K  — |dk(  r| j                  |«      ƒ d{  –—† S |dk(  r| j                  |«      ƒ d{  –—† S |dk(  r| j                  «       S ddd|› �dœ|j                  d	«      d
œS 7 ŒR7 Œ6­w)z&Handle an MCP tool invocation request.Úexecute_codeNÚ	run_shellÚlist_capabilitiesú2.0i§€ÿÿzMethod not found: ©ÚcodeÚmessageÚ
request_id©Újsonrpcr*   Úid)Ú_execute_codeÚ
_run_shellÚ_list_capabilitiesÚget)r   ÚmethodÚparamss      r   Úhandle_mcp_requestz'MCPExecutionProvider.handle_mcp_request=  sˆ   è ø€ ð �^Ò#Ø×+Ñ+¨FÓ3×3Ð3Ø�[Ò ØŸ™¨Ó0×0Ð0ØÐ(Ò(Ø×*Ñ*Ó,Ð,àØ$Ð3EÀfÀXÐ1NÑOØ—*‘*˜\Ó*ñ
ð 	
ð 4øà0ús   ‚A3œA/�A3ºA1»5A3Á1A3c           	     ó^   — dddddddiddiddid	œd
dgdœdœdddddiddidœdgdœdœgiddœS )Nr®   Úcapabilitiesr«   z Execute code in isolated sandboxÚobjectr2   ÚstringÚinteger)r°   Úlanguager   r°   rÂ   )r2   Ú
propertiesÚrequired)ÚnameÚdescriptionÚinputSchemar¬   z%Run shell command in isolated sandbox)rh   r   rh   zmcp-capabilities©r´   r~   rµ   r   r   s    r   r¸   z'MCPExecutionProvider._list_capabilitiesO  sŒ   € ààà .Ø'Ià$,à)/°Ð(:Ø-3°XÐ,>Ø4:¸IÐ3Fñ+ð
 *0°Ð(<ñ(ñð !,Ø'Nà$,à,2°HÐ+=Ø4:¸IÐ3Fñ+ð *3¨ñ(ñð!ðð: %ñ? 
ð  	
r   c           	   ƒ  óê  K  — |j                  dd«      }|j                  dd«      }|j                  dd«      }| j                  sddd	d
œ|j                  d«      dœS 	 | j                  j                  |j                  d«      |||j                  dd«      |¬«      ƒ d {  –—† }d||j                  d«      dœS 7 Œ# t        $ r+}ddt	        |«      d
œ|j                  d«      dœcY d }~S d }~ww xY w­w)Nr°   Ú rÂ   Úpythonr   r   r®   i¥€ÿÿz*No authorized execution service configuredr¯   r²   r³   ÚidentityÚtask_idzmcp-task©rÌ   r°   rÂ   rÍ   r   rÈ   )r¹   r¥   Úexecuter>   rA   )r   r»   r°   rÂ   r-   r~   rF   s          r   r¶   z"MCPExecutionProvider._execute_coder  s  è ø€ Ø�z‰z˜& "Ó%ˆØ—:‘:˜j¨(Ó3ˆØ—*‘*Ð.°Ó3ˆà×&Ò&à à"ØKñð —j‘j Ó.ñð ð	Ø×2Ñ2×:Ñ:ØŸ™ JÓ/ØØ!ØŸ
™
 9¨jÓ9Ø 'ð ;ó ÷ ˆFð !Ø Ø—j‘j Ó.ñð ðùô ò 	à à"Ü" 3›xñð —j‘j Ó.ñõ ûð	üsI   ‚AC3ÁAB< Â B:Â!B< Â9C3Â:B< Â<	C0Ã C+Ã%C0Ã&C3Ã+C0Ã0C3c              ƒ  óL   K  — | j                  i |¥ddi¥«      ƒ d {  –—† S 7 Œ­w)NrÂ   Úshell)r¶   )r   r»   s     r   r·   zMCPExecutionProvider._run_shell˜  s:   è ø€ Ø×'Ñ'ð )
Øð)
à˜ñ)
ó ÷ ð 	ð ús   ‚$�"ž$©r¥   r   rL   rM   rO   )rº   rA   r»   rQ   rL   rQ   )rL   rQ   )r»   rQ   rL   rQ   )rR   rS   rT   rU   r   rV   r   r¼   r¸   r¶   r·   r   r   r   r£   r£   *  sk   „ ñð #'ñ5ð  ð5ð 
ó	5ð òó ðð
àð
ð ð
ð 
ó	
ó$!
óF$ôLr   r£   c                  ó^   — e Zd ZdZddœ	 	 	 d
d„Zdd„Zedd„«       Zddœ	 	 	 	 	 dd„Zdd	„Z	y)ÚOpenInterpreterBridgez÷Open Interpreter bridge for natural-language-to-command execution.

    Bridges Open Interpreter's agent loop with CyberBrain26's security-gated
    execution providers, translating natural language requests into sandboxed
    code execution.
    Nr¤   c               ó<   — || _         | j                  «       | _        y r   )r¥   Ú_check_open_interpreterÚ_oi_availabler§   s     r   r   zOpenInterpreterBridge.__init__§  s   € ð
 #5ˆÔØ!×9Ñ9Ó;ˆÕr   c                ó,   — 	 dd l }y# t        $ r Y yw xY w)Nr   TF)Úinterpreterr   )r   rÙ   s     r   rÖ   z-OpenInterpreterBridge._check_open_interpreter¯  s   € ð	ÛØøÜò 	Ùð	ús   ‚ ‡	’c                 ó   — y)Núopen-interpreterr   r   s    r   r   z#OpenInterpreterBridge.provider_name¶  s   € à!r   )rÌ   c             ƒ  ód  K  — | j                   s| j                  dddddœS | j                  |«      }|€| j                  dddddœS 	 | j                  j	                  ||d	d
d¬«      ƒ d{  –—† }| j                  d|dœS 7 Œ# t
        $ r#}| j                  dt        |«      dœcY d}~S d}~ww xY w­w)z:Translate natural language to code and execute in sandbox.r#   rÛ   zOpen Interpreter not installed.zopen-interpreter missing)r%   r'   r(   r)   r*   Nz4Open Interpreter LLM not configured for translation.ztranslation unavailablerË   zoi-bridge-taskr   rÎ   r3   r4   r6   )r%   r'   r*   )r×   r   Ú_translate_natural_languager¥   rÏ   r>   rA   )r   Únatural_languagerÌ   r°   r~   rF   s         r   Ú	interpretzOpenInterpreterBridge.interpretº  sé   è ø€ ð ×!Ò!à ×.Ñ.Ø2Ø0Ø;Ø3ñð ð ×/Ñ/Ð0@ÓAˆØˆ<à ×.Ñ.Ø2Ø0ØPØ2ñð ð	Ø×2Ñ2×:Ñ:Ø!ØØ!Ø(Ø "ð ;ó ÷ ˆFð !×.Ñ.Ø#Øñð ðùô ò 	à ×.Ñ.Ø"Ü˜S›ñõ ûð	üsH   ‚AB0Á#B Á*A?Á+B Á>B0Á?B Â	B-Â
B(Â"B-Â#B0Â(B-Â-B0c                ó\   — |j                  «       j                  «       }d|v rd|v ryd|v ryy)zŒVery limited NL-to-code translation for demonstration.

        Only handles trivial cases; real Open Interpreter uses its own LLM.
        ÚprintÚhelloz+print("Hello from Open Interpreter bridge")z
list filesz,import os; print('\n'.join(os.listdir('.')))N)ÚstripÚlower)r   ÚtextÚlowereds      r   rÝ   z1OpenInterpreterBridge._translate_natural_languageê  s8   € ð
 —*‘*“,×$Ñ$Ó&ˆØ�gÑ '¨WÑ"4Ø@Ø˜7Ñ"ØBØr   rÒ   rN   rO   )rÞ   rA   rÌ   r   rL   rQ   )rå   rA   rL   rP   )
rR   rS   rT   rU   r   rÖ   rV   r   rß   rÝ   r   r   r   rÔ   rÔ   Ÿ  sj   „ ñð #'ñ<ð  ð<ð 
ó	<óð ò"ó ð"ð ñ	.àð.ð ð	.ð
 
ó.ô`
r   rÔ   )r   rX   r‘   r£   rÔ   )rU   Ú
__future__r   rs   Úhashlibr   ÚjsonÚloggingrq   ra   ru   ÚtimeÚpathlibr   Útypingr   Ú	getLoggerrR   r?   r   rX   r‘   r£   rÔ   Ú__all__r   r   r   ú<module>rð      sŠ   ðñõ #ã Û Û Û Û Û 	Û Û Û Ý Ý à	ˆ×	Ñ	˜8Ó	$€÷`ñ `÷FW
ñ W
÷tNñ N÷brñ r÷jUñ Uòp�r   