Ë
    =ìj®¨  ã                   ó*	  — U d dl Zd dlZd dlmZ  ej                  «       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 d dlmZ d dlZd dlZd dlmZ d dlmZmZ d dlmZ d d	lmZ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( d„ Z) e	jT                  e	jV                  d e	jX                   e- e)«       «      «       e	j\                  «       g¬«        e	j^                  d«      Z0d dlm1Z2  e- e2«       «      Z3dZ4e3› d�Z5e3› d�Z6 e
jn                  dd«      jq                  d«      Z9 e
jn                  d e
jn                  dd«      «      Z: e
jn                  dd«      Z;d Z< e= e
jn                  d!d"«      «      Z>d#Z?d$Z@d%ZAd&ZBdd'd(d)d*d+d,d-œZC ed.d/¬0«      ZDeDj‹                  ed1d2gd3d4gd4g¬5«       i ZFeGe-eGf   eHd6<   i ZIeGe-eGf   eHd7<   i ZJeGe-eGf   eHd8<    G d9„ d:e «      ZK G d;„ d<e «      ZLd=e-d>e-fd?„ZMd@e-dz  d=e-dAe-d>e-fdB„ZNdAe-d>e-fdC„ZOdDe-d>ePe-dz  e-dz  eQf   fdE„ZRdFe-dGe-fdH„ZSdIeGdJe-dAe-dKe-d>eQeG   f
dL„ZTd=e-dMeQeG   d>e-fdN„ZUeDj­                  dO«      d>eGe-ef   fdP„«       ZWd dlXZYd dQlZm[Z\ d dRlZm]Z^ d dSlZm_Z` d dTlZmaZb d dUlZmcZd d dVlZmeZf d dWlgmhZi d dXlgmjZk d dYllmmZn d dZllmoZp e#e`e^e\eneigZqd[e-d\eGd>eGe-ef   fd]„Zrd^„ Zsd_„ Ztg d`¢ZudŽda„Zvdb„ ZweDjñ                  dc«      ddeKd>eGfde„«       ZyeDj­                  df«      dge-d>eGfdh„«       Zzdge-ddeKd>dfdi„Z{d dlZ|d djl}m~Z d dkl}m€Z� d dll}m‚Zƒ d dml}m„Z… d dnl}m†Z‡  e|�j                  doe|�j                  «      ZŠdp„ Z‹eqegz   ZŒdq„ Z�dr„ ZŽds„ Z�eDj­                  dt«      d�due-dz  fdv„«       Z�eDj­                  dw«      dxe-fdy„«       Z‘eDjñ                  dz«      dxe-fd{„«       Z’eDjñ                  d|«      ddeKfd}„«       Z“eDj­                  d~«      d„ «       Z”eDj­                  d€«      d�e-fd‚„«       Z•eDjñ                  d€«      d�e-ddeLfdƒ„«       Z–eDj­                  d„«      d�e-fd…„«       Z—eDj­                  d†«      d‡„ «       Z˜eD�j3                  dˆ«      d@e-fd‰„«       Zše›dŠk(  r,e0�j9                  d‹e<e>«        e�j:                  eDe<e>dŒ¬�«       yy)�é    N)Úprogress)Údatetime)ÚPath)ÚAny)Úremember_if_relevant)ÚrememberÚretrieve_active_context)Úlogs_dir)ÚFastAPIÚHTTPException)ÚCORSMiddleware)Ú	BaseModel)ÚWEB_SEARCH_TOOL)Ú
web_searché   )Úrunnerc                  óZ   — t        «       dz  } | j                  j                  dd¬«       | S )Nzsafe_oi_api.logT©ÚparentsÚexist_ok)r
   ÚparentÚmkdir)Úps    úG/home/oem/CyberBrain26-unified/src/cyberbrain26/services/safe_oi/app.pyÚ_safe_oi_log_pathr   *   s(   € Ü‹
Ð&Ñ&€AØ‡H�H‡N�N˜4¨$€NÔ/Ø€Hó    z'%(asctime)s [%(levelname)s] %(message)s)ÚlevelÚformatÚhandlersÚsafe_oi_api)Úproject_rootú/tmp/cb26-sandboxz/runner-workspacez/backupsÚCB26_PROXY_URLzhttp://127.0.0.1:4000ú/ÚCB26_PROXY_KEYÚLITELLM_MASTER_KEYzsk-cb26-localÚCB26_DEFAULT_MODELúgroq-gpt-oss-120bz	127.0.0.1ÚCB26_SAFE_OI_PORTÚ7682i   é   é   g     €V@úgemini-flash-liteúgemini-flashúmistral-codestralz%openrouter-nemotron-3-ultra-550b-freezopenrouter-gemma-4-31b-freezopenrouter-north-mini-code-free)ÚdefaultÚfastÚgeminiÚcodeÚlongÚvisionz	code-freezCyberBrain26 SAFE-OI APIú
0.6-phase1)ÚtitleÚversionzhttp://localhost:8080zhttp://127.0.0.1:8080TÚ*)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersÚsessionsÚpending_approvalsÚexecuted_approvalsc                   ód   — e Zd ZU dZedz  ed<   eed<   eZeed<   dZeed<   dZ	eed<   d	Z
eed
<   y)ÚChatRequestNÚ	thread_idÚmessageÚmodelÚSAFEÚmodeÚnormalÚdepthFÚconfirm_full)Ú__name__Ú
__module__Ú__qualname__rC   ÚstrÚ__annotations__ÚDEFAULT_MODELrE   rG   rI   rJ   Úbool© r   r   rB   rB   g   s=   … Ø €Iˆs�T‰zÓ ØƒLØ€Eˆ3ÓØ€Dˆ#ÓØ€Eˆ3ÓØ€L�$Ôr   rB   c                   ó   — e Zd ZU dZeed<   y)ÚApproveRequestÚapproveÚactionN)rK   rL   rM   rV   rN   rO   rR   r   r   rT   rT   p   s   … Ø€FˆCÔr   rT   rE   Úreturnc                 ó.   — t         j                  | | «      S ©N)ÚMODEL_ALIASESÚget)rE   s    r   Úresolve_modelr\   t   s   € Ü×Ñ˜U EÓ*Ð*r   rC   rG   c                 óÂ   — | r| t         vrT| xs t        t        j                  «       «      } g |j	                  «       |d dœt         | <   t
        j                  d| |«       | S )N)ÚhistoryrG   rE   Úpending_approvalu   NovÃ¡ session: %s | mode=%s)r>   rN   ÚuuidÚuuid4ÚupperÚloggerÚinfo)rC   rE   rG   s      r   Úget_or_create_sessionre   x   sX   € Ù˜	¬Ñ1ØÒ2¤¤T§Z¡Z£\Ó!2ˆ	àØ—J‘J“LØØ $ñ	
Œ�Ñô 	�‰Ð1°9¸dÔCØÐr   c                 óŽ   — | xs dj                  «       } dt        › d�}d}dt        › dt        › dt        › d�}|| dk(  r|z   S |z   S )	NrF   u7   
Jsi CyberBrain26, lokÃ¡lnÃ­ AI asistent pro projekt v uÝ  .
Komunikuj Ä�esky, prakticky a struÄ�nÄ›.

Nikdy nevyzrazuj ani nevypisuj hodnoty z .env, API klÃ­Ä�e, tokeny, hesla,
SSH privÃ¡tnÃ­ klÃ­Ä�e, cookies ani jinÃ© secrets. Pokud je nutnÃ¡ kontrola .env,
pracuj pouze se jmÃ©ny promÄ›nnÃ½ch bez hodnot.

PÅ™ed akcÃ­ struÄ�nÄ› Å™ekni plÃ¡n. Po akci jasnÄ› uveÄ� skuteÄ�nÃ½ vÃ½sledek,
nÃ¡vratovÃ½ kÃ³d, relevantnÃ­ vÃ½stup a dalÅ¡Ã­ bezpeÄ�nÃ½ krok.
NeprohlaÅ¡uj, Å¾e se nÄ›co provedlo, pokud nemÃ¡Å¡ skuteÄ�nÃ½ vÃ½sledek nÃ¡stroje.
uÁ   
ReÅ¾im SAFE:
- Nic automaticky nespouÅ¡tÄ›j a nic nemÄ›Åˆ.
- PÅ™iprav nÃ¡vrhy pÅ™Ã­kazÅ¯ nebo krokÅ¯ v samostatnÃ©m bash bloku.
- VysvÄ›tli, co by pÅ™Ã­kaz provedl a jakÃ© mÅ¯Å¾e mÃ­t dopady.
uÞ  
ReÅ¾im FULL MAX:
- MÃ¡Å¡ oprÃ¡vnÄ›nÃ­ autonomnÄ› provÃ¡dÄ›t read-only diagnostiku lokÃ¡lnÃ­ho projektu
  CyberBrain26, sluÅ¾eb a Linux VM.
- SmÃ­Å¡ samostatnÄ› prochÃ¡zet necitlivÃ© soubory, hledat v projektu, Ä�Ã­st logy,
  kontrolovat procesy, porty, health endpointy, modely, Git stav, testy,
  Python syntax, konfigurace bez secrets, konverzace a metadata pamÄ›ti.
- SmÃ­Å¡ autonomnÄ› vytvÃ¡Å™et, upravovat, pÅ™esouvat a mazat bÄ›Å¾nÃ© pracovnÃ­ soubory
  pouze uvnitÅ™:
  z
  u‰   
  /tmp/cb26-sandbox
- U zmÄ›ny existujÃ­cÃ­ho zdrojovÃ©ho nebo konfiguraÄ�nÃ­ho souboru nejdÅ™Ã­ve vytvoÅ™
  timestampovanou zÃ¡lohu do uˆ  .
- Po zmÄ›nÄ› Pythonu proveÄ� py_compile; po zmÄ›nÄ› sluÅ¾by proveÄ� relevantnÃ­
  health-check; po zmÄ›nÄ› logiky proveÄ� cÃ­lenÃ½ funkÄ�nÃ­ test.
- PÅ™i selhÃ¡nÃ­ pokraÄ�uj bezpeÄ�nou read-only diagnostikou, nalezni konkrÃ©tnÃ­
  chybu a navrhni nebo proveÄ� vratelnou opravu v povolenÃ©m projektu.
- Diagnostika vlastnÃ­ho lokÃ¡lnÃ­ho programu a jeho funkcÃ­ je explicitnÄ› povolena.
- I ve FULL MAX si vÅ¾dy vyÅ¾Ã¡dej samostatnÃ© potvrzenÃ­ pÅ™ed: sudo, su, zmÄ›nou
  /etc, /usr, /boot, /var/lib nebo domovskÃ½ch dat mimo projekt; apt, pip,
  npm Ä�i jinou instalacÃ­; Dockerem; zmÄ›nou firewallu, sÃ­tÄ›, Tailscale nebo
  Cloudflare Tunnel; veÅ™ejnÃ½m odeslÃ¡nÃ­m dat; Git push/force push;
  git reset --hard; git clean; mazÃ¡nÃ­m databÃ¡zÃ­, konverzacÃ­, zÃ¡loh nebo
  virtuÃ¡lnÃ­ch prostÅ™edÃ­; reboot, shutdown, kill hromadnÃ½ch procesÅ¯;
  dd, mkfs, mount, chmod/chown -R; a akcemi se secrets.
)rb   ÚPROJECT_ROOT_STRÚRUNNER_WORKSPACE_PATHÚBACKUPS_PATH)rG   ÚcommonÚsafeÚfulls       r   Úmode_instructionrm   …   s~   € ØŠN�F×!Ñ!Ó#€Dð7Ü7GÐ6Hð 
Ið€Fð€Dð	ô Ðð ÜÐð ô +˜^ð ,ð€Dð8 ˜T Vš^�TÑ6Ð6°Ñ6Ð6r   Útextc                 ó˜   — t        j                  d| t         j                  «      }|sd d g fS |d   \  }}|xs d|j                  «       |fS )Nz```(\w+)?\n(.*?)```éÿÿÿÿrn   )ÚreÚfindallÚDOTALLÚstrip)rn   Úcode_blocksÚlanguager3   s       r   Úextract_code_from_responserw   »   sM   € Ü—*‘*Ð3°T¼2¿9¹9ÓE€KÙØ�T˜2ˆ~ÐØ  ‘_�N€HˆdØÒ�v˜tŸz™z›|¨[Ð8Ð8r   r3   rv   c                 ó  ‡‡— | xs dj                  «       } |xs dj                  «       j                  «       }| j                  «       Šddl}|j                  d| «      rddgfS g d¢}|D ]  }|‰v sŒd	d
|› �gfc S  ddl}|j                  d| «      rd	dgfS ddl}|j	                  d| «      D ]B  }|j                  d«      j                  d«      Šd}t        ˆfd„|D «       «      rŒ:d	d‰› �gfc S  | sddgfS g d¢}	|	D ]  }
|
‰v sŒdd|
› �gfc S  g d¢}|dv r|D ]  }|| v sŒddgfc S  d}|dv r‰j                  |«      rd| vr	d| vrddgfS t        j                  «       t        t        j                  «       f}t        ˆfd„|D «       «      }d}|dv r2|r‰j                  |«      rd d!gfS ‰j                  d"«      r	d#‰v rd d$gfS |d%v r9d&}t        ˆfd'„|D «       «      rdd(gfS t        ˆfd)„|D «       «      rd d*gfS dd+gfS dd,gfS )-u   
    VracÃ­ (category, reasons).

    Kategorie:
    - read: bezpeÄ�nÃ© Ä�tenÃ­ a diagnostika, automaticky ve FULL.
    - project_write: bÄ›Å¾nÃ¡ vratelnÃ¡ prÃ¡ce v povolenÃ©m projektu/sandboxu,
      automaticky ve FULL.
    - write: citlivÃ¡/rizikovÃ¡ Ä�innost, vyÅ¾aduje approval.
    Ú Úbashr   Nzc\.env(\.(lab|local|production|secrets|prod|staging|test))?\.(example|sample|template|dist)(?![\w.])Úreadz!priklad nebo sablona .env souboru),zrm -rf /z	rm -rf /*zrm -rf /homezrm -rf /etczrm -rf /usrzrm -rf /varzrm -rf /bootzrm -rf ~zdd if=zdd of=Úmkfsz:(){:|:&};:z> /dev/zchmod -r 000 /zchown -r rootz/etc/passwdz/etc/shadowz.ssh/id_rsaz.ssh/id_ed25519Úauthorized_keysÚgemini_api_keyÚlitellm_master_keyÚopenrouter_api_keyz/home/oem/.envr~   r   r€   Úgroq_api_keyÚmistral_api_keyÚcerebras_api_keyz/.ssh/Úid_rsaÚ
id_ed25519r}   Úknown_hostsz.netrcz.pgpasszcredentials.jsonÚservice_accountz.aws/z.gcloud/z.config/gcloudz.docker/config.jsonúchroma.sqlite3Údenyzzakazany pattern: zL(?<![\w])\.env(\.(lab|local|production|secrets|prod|staging|test))?(?![\w.])zcteni .env souboru je zakazanoz>>?\s*(/\S+)r   z;|&)z/home/oem/CyberBrain26-lab/z/tmp/cb26-sandbox/c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrY   )Ú
startswith)Ú.0ÚaÚtargets     €r   ú	<genexpr>z"classify_action.<locals>.<genexpr>  s   øè ø€ Ò9¨A�6×$Ñ$ Q×'Ñ9ùs   ƒzzapis mimo povoleny prostor: Úwriteu'   prÃ¡zdnÃ½ nebo nejednoznaÄ�nÃ½ pÅ™Ã­kaz)6Úsudozsu Údoaszapt zapt-getÚdpkgzsnap zflatpak zpip installzpip uninstallznpm installznpm uninstallzdocker zpodman ÚrebootÚshutdownÚpoweroffÚhaltr|   ÚfdiskÚpartedzdd zmount zumount Úiptablesznft zufw ÚfirewallÚ	tailscaleÚcloudflaredÚngrokzcurl zwget zssh zscp zrsync zgit pushzgit reset --hardz	git cleanzgit checkout --zrm -rfzrm -r zrmdir zchmod -rzchown -rz/etc/z/usr/z/boot/z	/var/lib/rˆ   zworkspace/chroma_dbzdata/conversationszvenv/zvenv-u#   citlivÃ¡ nebo systÃ©movÃ¡ operace: )ú;z&&z||ú`z$(ú
>   ÚshÚzshrz   Úshellu)   sloÅ¾enÃ½ shell pÅ™Ã­kaz nebo Å™etÄ›zenÃ­)ÚpwdÚlszfind zgrep zrg zcat zhead ztail zsed -nzawk zcut zsort zuniq zwc zstat zfile zdu zdf Úfreezps zpgrep zss z
git statuszgit diffzgit logz
git branchzpython -m py_compilezpython3 -m py_compileÚpytestzcurl -s http://127.0.0.1zcurl -sS http://127.0.0.1ú>z>>u.   bezpeÄ�nÃ½ Ä�tecÃ­ nebo diagnostickÃ½ pÅ™Ã­kazc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrY   rR   )rŒ   r   Úlowereds     €r   r�   z"classify_action.<locals>.<genexpr>P  s   øè ø€ Ò>¨1˜!˜wœ,Ñ>ùó   ƒ)útouch úmkdir úmkdir -pzcp zmv zpython zpython3 zpytest zgit add zgit commit ztee r©   Úproject_writeu4   vratelnÃ¡ prÃ¡ce v povolenÃ©m projektu nebo sandboxu)r­   r®   r¯   r"   u   vratelnÃ¡ prÃ¡ce v sandboxu>   ÚpythonÚpython3)Ú
subprocessz	os.systemzshutil.rmtreez	os.removezpathlib.path.unlinkz	requests.ÚurllibÚsocketc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrY   rR   )rŒ   Útokenr«   s     €r   r�   z"classify_action.<locals>.<genexpr>e  s   øè ø€ Ò> Eˆu˜ÔÑ>ùr¬   u%   Python kÃ³d obsahuje citlivou operacic              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrY   rR   )rŒ   Úpathr«   s     €r   r�   z"classify_action.<locals>.<genexpr>h  s   øè ø€ Ò9 4ˆt�wŒÑ9ùr¬   u1   Python prÃ¡ce v povolenÃ©m projektu nebo sandboxuu*   neprivilegovanÃ½ Python diagnostickÃ½ kÃ³du'   neznÃ¡mÃ½ nebo nejednoznaÄ�nÃ½ typ akce)rt   Úlowerrq   ÚsearchÚfinditerÚgroupÚrstripÚanyr‹   rg   ÚSANDBOX_PATHrh   )r3   rv   Ú
_re_env_wlÚ	hard_denyÚpatÚ_re_envÚ_reÚ_mÚallowedÚalways_approvalr·   Úshell_operatorsÚoperatorÚread_prefixesÚallowed_pathsÚis_allowed_pathÚproject_write_markersÚdangerous_pythonr«   rŽ   s                     @@r   Úclassify_actionrÐ   Ã   sæ  ù€ ð ŠJ�B×ÑÓ€DØÒ"˜F×)Ñ)Ó+×1Ñ1Ó3€HØ�j‰j‹l€Gó Ø×ÑØnØôð Ð;Ð<Ð<Ð<ò-€Ið\ ò 8ˆØ�'Š>ØÐ0°°Ð6Ð7Ð7Ò7ð8ó
 ð ‡~�~ÐeÐgkÔlØÐ8Ð9Ð9Ð9ó Ø�l‰l˜?¨DÓ1ò FˆØ—‘˜!“×#Ñ# EÓ*ˆð
ˆô Ó9°Ô9Õ9ØÐ;¸F¸8ÐDÐEÐEÒEðFñ ØÐBÐCÐCÐCò€Oð$ !ò LˆØ�GÒØÐBÀ5À'ÐJÐKÐKÒKðLò 9€OØÐ1Ñ1Ø'ò 	NˆHØ˜4ÒØÐ!LÐ MÐMÒMð	Nð€Mð Ð1Ñ1°g×6HÑ6HÈÔ6WØ�d‰?˜t¨4Ñ/ØÐLÐMÐMÐMô 	×ÑÓ ÜÜ×#Ñ#Ó%ð€Mô
 Ó>°Ô>Ó>€OðÐð Ð1Ñ1Ù˜w×1Ñ1Ð2GÔHØ"Ð%[Ð$\Ð\Ð\à×ÑÐ>Ô?ÐDWÐ[bÑDbØ"Ð%BÐ$CÐCÐCàÐ(Ñ(ð
Ðô Ó>Ð-=Ô>Ô>ØÐDÐEÐEÐEäÓ9¨=Ô9Ô9Ø"Ð%XÐ$YÐYÐYàÐDÐEÐEÐEàÐ>Ð?Ð?Ð?r   ÚsessionÚnormalized_messagerI   c                 ó  — dt        |«      dœg}	 t        |t        ¬«      }|r/dj                  d„ |D «       «      }|j	                  dd|z   dœ«       | d   t         d  D ]Q  }|j                  d	«      }	|j                  d
«      }
|	dv sŒ*t        |
t        «      sŒ;|
sŒ>|j	                  |	|
dœ«       ŒS |dk(  rdnd}|j	                  d||z   dœ«       |S # t
        $ r }t        j                  d|«       Y d }~Œ§d }~ww xY w)NÚsystem©ÚroleÚcontent)ÚqueryÚlimitr¡   c              3   ó,   K  — | ]  }d |d   › �–— Œ y­w)z- r×   NrR   )rŒ   Úitems     r   r�   z!build_messages.<locals>.<genexpr>v  s   è ø€ Ò#O¸t b¨¨i©Ð(9Ô$:Ñ#Oùs   ‚uˆ   RelevantnÃ­ dlouhodobÃ¡ pamÄ›Å¥ CyberBrain26. PouÅ¾ij ji jako kontext. NetvrÄ�, Å¾e je nÄ›co uloÅ¾enÃ©, pokud to nenÃ­ v tomto seznamu:
u   Nelze naÄ�Ã­st pamÄ›Å¥: %sr^   rÖ   r×   >   ÚuserÚ	assistantÚdeepu   [PÅ™emÃ½Å¡lej dÅ¯kladnÄ›] ry   rÜ   )rm   r	   ÚMEMORY_LIMITÚjoinÚappendÚ	Exceptionrc   ÚwarningÚHISTORY_LIMITr[   Ú
isinstancerN   )rÑ   rÒ   rG   rI   ÚmessagesÚrecordsÚmemory_textÚexcrÛ   rÖ   r×   Úprefixs               r   Úbuild_messagesrë   p  s  € Ø%-Ô:JÈ4Ó:PÑQÐR€Hð:Ü)Ð0BÌ,ÔWˆÙØŸ)™)Ñ#OÀwÔ#OÓOˆKØ�O‰OØ ðYà!ñ"ñô ð ˜	Ñ"¤M > ?Ð3ò @ˆØ�x‰x˜ÓˆØ—(‘(˜9Ó%ˆØÐ(Ò(¬Z¸ÄÕ-EÊ'Ø�O‰O T°gÑ>Õ?ð	@ð .3°fª_Ñ)À"€FØ‡O�O˜V°Ð9KÑ0KÑLÔMØ€Oøô ò :Ü�‰Ð3°S×9Ñ9ûð:ús   ‘AC Ã	C?ÃC:Ã:C?ræ   c           	      ó(  — 	 t        j                  t        ¬«      5 }|j                  t        › d�dt
        › �ddœ| |t        dœ¬«      }d d d «       j                  dk7  r*t        dd|j                  › d|j                  d d › �¬
«      ‚	 |j                  «       }|d   d   d   d   S # 1 sw Y   ŒaxY w# t         j                  $ r}t        dd	|› �¬
«      |‚d }~ww xY w# t        t        t        t        f$ r}t        dd|› �¬
«      |‚d }~ww xY w)N©Útimeoutú/v1/chat/completionsúBearer úapplication/json©ÚAuthorizationzContent-Type)rE   ræ   Ú
max_tokens©ÚheadersÚjsonéö  z!Nelze se spojit s LiteLLM proxy: ©Ústatus_codeÚdetailéÈ   zProxy HTTP ú: éè  Úchoicesr   rD   r×   u    NeoÄ�ekÃ¡vanÃ¡ odpovÄ›Ä� proxy: )ÚhttpxÚClientÚREQUEST_TIMEOUTÚpostÚ	PROXY_URLÚ	PROXY_KEYÚ
MAX_TOKENSÚRequestErrorr   rú   rn   r÷   Ú
ValueErrorÚKeyErrorÚ
IndexErrorÚ	TypeError)rE   ræ   ÚclientÚresponseré   Údatas         r   Ú
call_proxyr  �  sA  € ðhÜ�\‰\¤/Ô2ð 	°fØ—{‘{Ü�+Ð1Ð2à'.¬y¨kÐ%:Ø$6ñð
 #Ø (Ü",ñð #ó ˆH÷	ð  ×Ñ˜sÒ"ÜØØ  ×!5Ñ!5Ð 6°b¸¿¹ÀuÈÐ9MÐ8NÐOô
ð 	
ð
gØ�}‰}‹ˆØ�I‰˜qÑ! )Ñ,¨YÑ7Ð7÷1	ð 	ûô ×Ñò hÜ¨Ð6WÐX[ÐW\Ð4]Ô^ÐdgÐgûðhûô œ¤*¬iÐ8ò gÜ¨Ð6VÐWZÐV[Ð4\Ô]ÐcfÐfûðgúsF   ‚B6 œ.B*Á
B6 ÂC" Â*B3Â/B6 Â6CÃ	CÃCÃ"DÃ;DÄDz/healthc                  ó6   — dddt        t        «      t        ddœS )NÚokr    r6   zdisabled-phase1)ÚstatusÚservicer8   r>   ÚproxyÚ	execution)Úlenr>   r  rR   r   r   Úhealthr  ¬  s$   € ð Ø ØÜœ“MÜØ&ñð r   )ÚFIND_FILES_TOOL)ÚLIST_DIR_TOOL)ÚREAD_FILE_TOOL)Ú
find_files)Úlist_dir)Ú	read_file)ÚRUN_SHELL_TOOL)Ú	run_shell)ÚSYSTEM_STATUS_TOOL)Úsystem_statusÚnameÚargsc                 óØ  — 	 | dk(  r-t        |j                  dd«      |j                  dd«      ¬«      S | dk(  r-t        |j                  dd«      |j                  d	d
«      ¬«      S | dk(  rt        |j                  dd«      ¬«      S | dk(  r>t	        |j                  dd«      |j                  dd«      |j                  dd«      ¬«      S | dk(  r
t        «       S | dk(  rSt        t        dd«      dk(  }t        |j                  dd«      |j                  dd«      |j                  dd«      |¬«      S dd| › �dœS # t        $ r'}dt        |«      j                  › d |› �dœcY d }~S d }~ww xY w)!Nr   rØ   ry   Úmax_resultsé   )rØ   r%  r  r¹   Ú	max_bytesiPÃ  )r¹   r'  r  ú.)r¹   r  Úpatterné2   )r)  r¹   r%  r!  r  Ú	chat_moderF   ÚAUTOÚcommandÚcwdrî   é   )r-  r.  rî   Úauto_runÚerrorzneznamy tool: ©r  r1  rý   )Ú_web_search_fnr[   Ú_read_file_fnÚ_list_dir_fnÚ_find_files_fnÚ_system_status_fnÚgetattrÚ_thread_localÚ_run_shell_fnrâ   ÚtyperK   )r"  r#  ÚautoÚes       r   Ú_dispatch_toolr>  à  sx  € ðHØ�<ÒÜ!¨¯©°¸"Ó(=Ø.2¯h©h°}ÀaÓ.HôJð Jà�;ÒÜ  d§h¡h¨v°rÓ&:Ø+/¯8©8°KÀÓ+GôIð Ià�:ÒÜ T§X¡X¨f°cÓ%:Ô;Ð;Ø�<ÒÜ!¨$¯(©(°9¸bÓ*AØ'+§x¡x°¸Ó'<Ø.2¯h©h°}ÀbÓ.IôKð Kð �?Ò"Ü$Ó&Ð&Ø�;ÒÜœ=¨+°vÓ>À&ÑHˆDÜ ¨¯©°)¸RÓ)@Ø%)§X¡X¨e°SÓ%9Ø)-¯©°)¸RÓ)@Ø*.ô0ð 0ð "¨n¸T¸FÐ,CÑDÐDøÜò HØ!¬t°A«w×/?Ñ/?Ð.@ÀÀ1À#Ð,FÑGÕGûðHúsB   ‚1D9 ´1D9 Á& D9 ÂAD9 Ã
D9 ÃAD9 Ä1D9 Ä9	E)ÅE$ÅE)Å$E)c                 óÜ   — 	 t        | |«      S # t        $ rT}dd l} |j                  t        «      j                  dt        |«      j                  |«       t        | |«      cY d }~S d }~ww xY w)Nr   z0Tool calling selhalo (%s), fallback na plain: %s)Ú_call_with_tools_innerrâ   ÚloggingÚ	getLoggerrK   rã   r;  r  ©rE   ræ   ré   rA  s       r   Ú_call_with_toolsrD  û  sc   € ð+Ü% e¨XÓ6Ð6øÜò +ÛØˆ×Ñœ(Ó#×+Ñ+Ø>Ü�‹I×Ñ ô	%ô ˜% Ó*Õ*ûð+úó   ‚ Ž	A+—A	A&Á A+Á&A+c                 ó4   — |dddœgz   }t        | ||d«      }|S )z,Posle modelu znovu zpravu, aby zavolal tool.rÜ   z•NEPIS PLAN. ZAVOLEJ TOOL HNED. Pouzij tools API (tool_calls), ne text. Pokud potrebujes vice informaci, zavolej nekolik toolu za sebou v jednom tahu.rÕ   Úrequired)Ú_litellm_call_fallback)	rE   ÚworkingÚtoolsÚ	_json_wstr   r  r  Úworking2r  s	            r   Ú_force_tool_callrM    s6   € àØð]ñð ñ €Hô " %¨°5¸*ÓE€DØ€Kr   )r.   r/   r(   r-   c                 óŒ  — ddl }|j                  t        «      }| gt        D �cg c]
  }|| k7  sŒ	|‘Œ c}z   }g }|D �]  }	 t	        j
                  d¬«      5 }	|	j                  t        › d�dt        › �ddœ||||d	d
dœ¬«      }
ddd«       
j                  dk(  r1|
j                  «       }||d<   || k7  r|j                  d| |«       |c S |
j                  dv r>|j                  |› d|
j                  › �«       |j                  d||
j                  «       ŒÜt        d|
j                  › d|
j                  dd › �«      ‚ t        d|› �«      ‚c c}w # 1 sw Y   ŒÑxY w# t        $ rZ}|j                  |› dt!        |«      j                  › �«       |j                  d|t!        |«      j                  «       Y d}~�Œ‚d}~ww xY w)zKZkusi zadany model, pri chybe (404/429/5xx) zkusi dalsi z fallback seznamu.r   Nç      N@rí   rï   rð   rñ   rò   é¸  çš™™™™™¹?©rE   ræ   rJ  Útool_choicerô   Útemperaturerõ   rü   Ú_used_modelz#Fallback: %s -> %s (puvodni selhal))é�  é”  i­  éô  rø   i÷  iø  z:HTTPz)Model %s selhal HTTP %s, zkousim dalsi...úHTTP rý   ú:z%Model %s vyjimka %s, zkousim dalsi...zVsechny modely selhaly: )rA  rB  rK   Ú_FALLBACK_MODELSr   r  r  r  r  rú   r÷   rã   rá   ÚRuntimeErrorrn   râ   r;  )rE   ræ   rJ  rS  Ú_lgrc   ÚmÚ
candidatesÚtriedr  Úrr  r=  s                r   rH  rH    sÆ  € ãØ�]‰]œ8Ó$€FØ�Ô'7ÖF !¸1À»:šAÒFÑF€JØ€EØó ˆð	Ü—‘ dÔ+ð ¨vØ—K‘KÜ �kÐ!5Ð6Ø07¼	°{Ð.CØ-?ñAà#$°(Ø#(¸Ø(,¸SñBð	  ó �÷ð �}‰} Ò#Ø—v‘v“x�Ø&'��]Ñ#Ø˜’:Ø—N‘NÐ#HÈ%ÐQRÔSØ’Ø�}‰}Ð CÑCØ—‘ ˜s %¨¯© Ð7Ô8Ø—‘ÐJÈAÈqÏ}É}Ô]ØÜ  q§}¡} o°R¸¿¹¸tÀ¸°~ÐFÓGÐGð+ô4 Ð1°%°Ð9Ó
:Ð:ùò9 G÷ð ûô( ò 	Ø�L‰L˜A˜3˜a¤ Q£× 0Ñ 0Ð1Ð2Ô3Ø�N‰NÐBÀAÄtÈAÃw×GWÑGWÔXÝûð	úsI   ¤
E¯EÁE Á-EÂAE ÃAE Ä(E ÅE	ÅE Å 	GÅ)AF>Æ>Gc                 óL  — t        |«      }d}g }dt        «       v rt        t        dd «      nd }t	        d«      D �]@  }|r1t        d|dz  z   d«      }t        j                  |d|d|d	z   › d
�«       t        | |t        d«      }|j                  d| «      }	|r |	| k7  rt        j                  |ddd|	z   «       |j                  d«      xs g }
|
st        d«      ‚|
d   j                  di «      }|j                  d«      xs g }|j                  d«      xs d}|r||v r �n]|r|j                  |«       |dd  }|s¯|dk(  rª|r¨t        |«      dkD  rš|rt        j                  |ddd«       	 t        | |t        t        t         t"        t$        «      }|j                  d«      xs g }|rC|d   j                  di «      }|j                  d«      xs g }|r|}|j                  d«      xs d}|rè|j                  d||dœ«       |D ]Ê  }|j                  di «      xs i }|j                  dd«      }	 t        j(                  |j                  d«      xs d«      }|rt        j*                  ||«       dt        «       v rt-        ||«      nt/        ||«      }|j                  d|j                  dd«      |t        j0                  |d ¬!«      d"œ«       ŒÌ |}�Œšd#t        «       v rt3        |«      nd }|r†|\  }}|rt        j*                  ||«       dt        «       v rt-        ||«      nt/        ||«      }|j                  d|d$œ«       |j                  d%d&t        j0                  |d ¬!«      z   d'z   d$œ«       �Œ;|s�Œ?|c S  |xs d(S # t&        $ r Y �Œ¦w xY w# t&        $ r i }Y �ŒKw xY w))Nry   r9  Újob_idr,   é   éU   ÚllmúModel pracuje (iterace r   ú/8)...r<  rU  r/  z
Fallback: rÿ   úzadne choicesr   rD   Ú
tool_callsr×   éûÿÿÿz#Model popsal plan, vynucuji tool...rÝ   ©rÖ   r×   rj  Úfunctionr"  Ú	argumentsú{}Ú_dispatch_v2ÚtoolÚidF©Úensure_ascii©rÖ   Útool_call_idr"  r×   Ú_extract_text_tool_v2rÕ   rÜ   zVysledek toolu: z

Nyni odpovez uzivateli.ú(Model neposkytl odpoved))ÚlistÚglobalsr8  r9  ÚrangeÚminÚ_progress_modÚ	set_phaserH  Ú
_ALL_TOOLSr[   r\  rá   r  rM  rK  r   r  r  râ   ÚloadsÚadd_toolrp  r>  Údumpsrw  )rE   ræ   rI  Ú	last_textÚseenÚ_jidÚitÚpctr  Ú_usedrÿ   ÚmsgÚcallsrn   Údata2Úchoices2Úmsg2Úcalls2ÚtcÚfnÚtnÚtaÚresÚtts                           r   r@  r@  B  sÀ  € Ü�8‹n€GØ€IØ€DØ5DÌË	Ñ5QŒ7”= (¨DÔ1ÐW[€Dä�A‹hó QˆÙÜ�b˜2 ™6‘k 2Ó&ˆCÜ×#Ñ# D¨%°Ø&=¸bÀ¹d¸VÀ6Ð$JôLô & e¨W´jÀ&ÓIˆØ—‘˜¨Ó.ˆÙ�E˜U’NÜ×#Ñ# D¨%°°\ÀEÑ5IÔJà—(‘(˜9Ó%Ò+¨ˆÙÜ˜Ó/Ð/Ø�a‰j�n‰n˜Y¨Ó+ˆØ—‘˜Ó%Ò+¨ˆØ�w‰w�yÓ!Ò' Rˆñ �D˜D‘LÚÙØ�K‰K˜ÔØ˜˜�9ˆDñ ˜˜qš¡T¬c°$«i¸"ªnÙÜ×'Ñ'¨¨e°RØ(MôOðÜ(¨°¼Ü*3´UÜ*3´Yó@�ð !Ÿ9™9 YÓ/Ò5°2�ÙØ# A™;Ÿ?™?¨9°bÓ9�DØ!ŸX™X lÓ3Ò9°r�FÙØ &˜Ø#Ÿx™x¨	Ó2Ò8°b˜ñ
 Ø�N‰N K¸DØ*/ñ1ô 2àò V�Ø—V‘V˜J¨Ó+Ò1¨r�Ø—V‘V˜F BÓ'�ðÜ"Ÿ™¨¯©°Ó)<Ò)DÀÓE�Bñ Ü!×*Ñ*¨4°Ô4Ø.<ÄÃ	Ñ.I”l 2 rÔ*Ì~Ð^`ÐbdÓOe�Ø—‘¨Ø02·±°t¸RÓ0@Ø(*Ü+4¯?©?¸3ÈUÔ+Sñ Uõ VðVð ˆIÙð -DÄwÃyÑ,PÔ" 4Ô(ÐVZˆÙØ‰FˆB�ÙÜ×&Ñ& t¨RÔ0Ø*8¼G»IÑ*E”,˜r 2Ô&Ì>ÐZ\Ð^`ÓKaˆCØ�N‰N K¸DÑAÔBØ�N‰N FØ'9Ü'0§¡°sÈÔ'Oñ(Pà'Dñ(EñFô Gñ ãØŠKðcQðf Ò3Ð3Ð3øôS ò Úðûô !ò Ø“Bðús%   Å+A?NÈ/(NÎ	NÎNÎN#Î"N#z/chat/startÚreqc                 ó  — t        j                  «        t        t        j                  «       «      }t        j
                  |«       t        j                  |ddd«       t        j                  t        || fd¬«      j                  «        d|iS )NÚinitr&  zPrijimam zpravu...T)rŽ   r#  Údaemonrc  )r}  Úcleanup_oldrN   Ú_uuid_pgra   Úcreater~  Ú
_threadingÚThreadÚ_chat_workerÚstart)r•  rc  s     r   Ú
chat_startr   �  sl   € ä×ÑÔÜ”—‘Ó!Ó"€FÜ×Ñ˜Ô Ü×Ñ˜F F¨AÐ/CÔDÜ×Ñœ\°¸°ÀdÔK×QÑQÔSØ�fÐÐr   z/chat/progress/{job_id}rc  c                 óL   — t        j                  | «      }|st        dd«      ‚|S )NrW  zjob nenalezen)r}  Úsnapshotr   )rc  Úsnaps     r   Úchat_progressr¤  ¦  s'   € ä×!Ñ! &Ó)€DÙÜ˜C Ó1Ð1Ø€Kr   c                 óx  — | t         _        	 t        j                  | ddd«       t	        |«      }t        j
                  | |¬«       d t         _        y # t        $ rM}dd l}t        j
                  | t        |«      j                  › d|› �¬«       |j                  «        Y d }~Œ]d }~ww xY w# d t         _        w xY w)NÚcontexté   zNacitam pamet a kontext...)Úresultr   rý   )r1  )r9  rc  r}  r~  ÚchatÚfinishrâ   Ú	tracebackr;  rK   Ú	print_exc)rc  r•  r¨  ré   r«  s        r   rž  rž  ­  sœ   € Ø!„MÔð	$Ü×Ñ ¨	°2Ð7SÔTÜ�c“ˆÜ×Ñ˜V¨FÕ3ð  $ŒÕøô ò ÛÜ×Ñ˜V¬d°3«i×.@Ñ.@Ð-AÀÀCÀ5Ð+IÕJØ×Ñ×Ñûðûð
  $ŒÕús*   �:A Á	B)ÁAB$ÂB, Â$B)Â)B, Â,B9)ÚSAVE_PROPOSAL_TOOL)Úlist_proposals)Úread_proposal)Úsave_proposal)Úupdate_statusz„```(?:bash|shell|sh|python)?\s*\n\s*(system_status|read_file|list_dir|find_files|run_shell|web_search|save_proposal)(?:\s*\(|\s+|\n)c                 ó‚  — | sy t         j                  | «      }|sy |j                  d«      j                  «       }i }t	        j                  d| t        j
                  «      }|rY|j                  d«      }dD ]C  }t	        j                  |› d�|«      }|sŒ|j                  d«      j                  «       d d ||<   ŒE ||fS )Nr   z```[^`]*\n(.*?)```)rØ   r¹   r)  r-  r7   Údescriptionz\s*[:=]\s*(.+?)(?:\n|$)rX  )Ú_TEXT_TOOL_RE_V2r»   r½   rº   Ú_re_v2rs   rt   )rn   r^  r"  r#  ÚblockÚbodyÚkÚvms           r   rw  rw  Î  s·   € ÙØÜ×Ñ Ó%€AÙØØ�7‰7�1‹:×ÑÓ€DØ€DÜ�M‰MÐ/°´v·}±}ÓE€EÙØ�{‰{˜1‹~ˆØPò 	4ˆAÜ—‘ 1 #Ð%<Ð=¸tÓDˆBÚØŸ(™( 1›+×+Ñ+Ó-¨d¨sÐ3��Q’ð	4ð �ˆ:Ðr   c                 óz  — | dk(  rRt        |j                  dd«      |j                  dd«      |j                  dd«      |j                  d«      xs g ¬«      S t        | |«      }| dk(  rRt        |t        «      rB|j                  d	«      d
k(  r.|j                  dd«      |j                  dd«      dœt
        _        |S )Nr°  r7   ry   r³  Úcode_changesÚfiles_affected)r7   r³  r»  r¼  r  r  Úneeds_approvalr-  Úreason)r-  r¾  )Ú_save_prop_fnr[   r>  rå   Údictr9  Úpending_approval_request)r"  r#  r¨  s      r   rp  rp  ã  s²   € ØˆÒÜ 4§8¡8¨G°RÓ#8Ø*.¯(©(°=À"Ó*EØ+/¯8©8°NÀBÓ+GØ-1¯X©XÐ6FÓ-GÒ-MÈ2ôOð 	Oô ˜D $Ó'€FØˆ{Òœz¨&´$Ô7¸F¿J¹JÀxÓ<PÐTdÒ<dØ=C¿Z¹ZÈ	ÐSUÓ=VÐbh×blÑblÐmuÐwyÓbzÑ1{ŒÔ.Ø€Mr   c                 ó\  — t        |«      }d}g }t        t        dd «      }t        d«      D �]Ù  }|r1t	        d|dz  z   d«      }t        j                  |d|d|dz   › d	�«       t        j                  d
¬«      5 }|j                  t        › d�dt        › �ddœ| |t        ddddœ¬«      }	|	j                  dk7  r(t        d|	j                  › d|	j                  d d › �«      ‚|	j!                  «       }
d d d «       
j#                  d«      xs g }|st        d«      ‚|d   j#                  di «      }|j#                  d«      xs g }|j#                  d«      xs d}|r!||v r|rt        j                  |ddd «        �nŒ|r|j%                  |«       |d!d  }|rÐ|j%                  d"||d#œ«       |D ]²  }|j#                  d$i «      xs i }|j#                  d%d«      }	 t'        j(                  |j#                  d&«      xs d'«      }|rt        j,                  ||«       t/        ||«      }|j%                  d(|j#                  d)d«      |t'        j0                  |d*¬+«      d,œ«       Œ´ |}�Œ;t3        |«      }|rr|\  }}|rt        j,                  ||«       t/        ||«      }|j%                  d"|d-œ«       |j%                  d.d/|› d�t'        j0                  |d*¬+«      z   d0z   d-œ«       �Œº|s�Œ¾|rt        j                  |d1d2d3«       |c S  |xs d4S # 1 sw Y   �Œ xY w# t*        $ r i }Y �Œ(w xY w)5Nry   rc  r,   rd  re  rf  rg  r   rh  rO  rí   rï   rð   rñ   rò   r<  rP  rQ  rR  rõ   rü   rY  rý   i,  rÿ   ri  r   rD   rj  r×   ÚstopzDetekovano opakovani, ukoncuji.rk  rÝ   rl  rm  r"  rn  ro  rq  rr  Frs  ru  rÕ   rÜ   zVysledek toolu z*

Nyni odpovez uzivateli finalni odpovedi.ÚwritingéZ   zFinalizuji...rx  )ry  r8  r9  r{  r|  r}  r~  r   r  r  r  r  Ú_ALL_TOOLS_V2rú   r\  rn   r÷   r[   rá   rK  r€  râ   r�  rp  r‚  rw  )rE   ræ   rI  rƒ  r„  r…  r†  r‡  r  ra  r  rÿ   r‰  rŠ  rn   r�  r�  r‘  r’  r“  r”  s                        r   Ú_call_with_tools_inner_v2rÇ  ï  sR  € Ü�8‹n€GØ€IØ€DÜ”= (¨DÓ1€Dä�A‹hó AˆÙÜ�b˜2 ™6‘k 2Ó&ˆCÜ×#Ñ# D¨%°Ø&=¸bÀ¹d¸VÀ6Ð$JôLä�\‰\ $Ô'ð 		¨6Ø—‘œy˜kÐ)=Ð>Ø,3´I°;Ð*?Ø);ñ=à$°'Ü,¸VØ$(¸ñ>ð ó ?ˆAð �}‰} Ò#Ü" U¨1¯=©=¨/¸¸A¿F¹FÀ4ÀC¸L¸>Ð#JÓKÐKØ—6‘6“8ˆD÷		ð —(‘(˜9Ó%Ò+¨ˆÙÜ˜Ó/Ð/Ø�a‰j�n‰n˜Y¨Ó+ˆØ—‘˜Ó%Ò+¨ˆØ�w‰w�yÓ!Ò' Rˆá�D˜D‘LÙÜ×'Ñ'¨¨f°bØ(IôKâÙØ�K‰K˜ÔØ˜˜�9ˆDáØ�N‰N K¸DÐPUÑVÔWØò V�Ø—V‘V˜J¨Ó+Ò1¨r�Ø—V‘V˜F BÓ'�ðÜ"Ÿ™¨¯©°Ó)<Ò)DÀÓE�Bñ Ü!×*Ñ*¨4°Ô4Ü" 2 rÓ*�Ø—‘¨ÀÇÁÀtÈRÓ@PØ(*Ü+4¯?©?¸3ÈUÔ+Sñ Uõ VðVð ˆIÙä" 4Ó(ˆÙØ‰FˆB�ÙÜ×&Ñ& t¨RÔ0Ü˜r 2Ó&ˆCØ�N‰N K¸DÑAÔBØ�N‰N FØ)8¸¸¸BÐ'?Ü'0§¡°sÈÔ'Oñ(Pà'Uñ(VñWô Xñ ãÙÜ×'Ñ'¨¨i¸¸_ÔMØŠKðCAðF Ò3Ð3Ð3÷}		ñ 		ûôB !ò Ø“Bðús   Á9A8LÇ(LÌL	ÌL+Ì*L+c                 óÜ   — 	 t        | |«      S # t        $ rT}dd l} |j                  t        «      j                  dt        |«      j                  |«       t        | |«      cY d }~S d }~ww xY w)Nr   zV2 selhal (%s): %s)rÇ  râ   rA  rB  rK   rã   r;  r  rC  s       r   Ú_call_with_tools_v2rÉ  ;  sb   € ð+Ü(¨°Ó9Ð9øÜò +ÛØˆ×Ñœ(Ó#×+Ñ+Ð,@Ü-1°#«Y×-?Ñ-?Àô	Fä˜% Ó*Õ*ûð	+úrE  z
/proposalsr  c                 ó   — dt        | ¬«      iS )NÚ	proposals©r  )Ú_list_props_fnrÌ  s    r   Ú_list_props_endpointrÎ  E  s   € àœ¨vÔ6Ð7Ð7r   z/proposals/{pid}Úpidc                 ó8   — t        | «      }|st        dd«      ‚|S )NrW  úproposal nenalezen)Ú_read_prop_fnr   )rÏ  r   s     r   Ú_get_prop_endpointrÓ  J  s"   € ä�cÓ€AÙÜ˜CÐ!5Ó6Ð6Ø€Hr   z/proposals/{pid}/rejectc                 ó<   — t        | d«      st        dd«      ‚d| dœS )NÚrejectedrW  rÑ  )r  rr  )Ú_upd_prop_statusr   )rÏ  s    r   Ú_reject_prop_endpointr×  R  s%   € ä˜C Ô,Ü˜CÐ!5Ó6Ð6Ø ¨Ñ,Ð,r   z/chatc                 ó  — | j                   j                  «       }|t        _        |dvrt	        dd¬«      ‚|dk(  r| j
                  st	        dd¬«      ‚| j                  j                  «       }|st	        dd¬«      ‚t        | j                  «      }t        | j                  ||«      }t        |   }||d	<   ||d
<   d }|j                  «       j                  d«      r_|t        d«      d  j!                  d«      }|st	        dd¬«      ‚	 t#        |d|j%                  «       › d�d¬«      }|d   |d   |d   d   dœ}t)        |||| j*                  «      }
t,        j/                  d||||d d «       t1        ||
«      }t3        t        dd «      }|d   j5                  d|dœ«       |d   j5                  d|dœ«       d }|s	 t7        ||j%                  «       › d �¬!«      }d }d#}d#}d }|rœ|d$k7  r—d t        _        t=        t?        j@                  «       «      }||jC                  d%d&«      d'd(|jC                  d)d&«      g|d*tE        jF                  «       jI                  «       d+œtJ        |<   ||d,<   d-}d.|jC                  d%d&«      z   }tM        |«      \  }}}|�r|�rtO        ||«      \  }}|dk(  rÉ|d/k(  rÄ	 tQ        jR                  ||«      }d-}d0|jC                  d1d2«      › d3|jC                  d4d5«      › d6�}|jC                  d7«      r|d8|d7   › d6�z  }|jC                  d9«      r|d:|d9   › d6�z  }|d;|› d<d=jU                  |«      › d>|j                  «       › d?�z  }|d   j5                  d@dA|z   dœ«       �n2|dEk(  r·	 dFd l-}t]        t_        «       «      dGz  }|j`                  jc                  d-d-¬H«       te        |dIdJ¬K«      5 }|jg                  |ji                  tE        jF                  «       jI                  «       dE||d d ||dLœd#¬M«      d6z   «       d d d «       |dOd=jU                  |«      › dP�z  }nv|d/k7  rqt=        t?        j@                  «       «      }||||||d*tE        jF                  «       jI                  «       d+œtJ        |<   ||d,<   d-}|dQ|› d<d=jU                  |«      › dR�z  }|||| j                  ||||dSœ}|r||dT<   |r||dU<   |S # t&        $ r}	t	        dd|	› �¬«      |	‚d }	~	ww xY w# t&        $ r!}	t,        j9                  d"|	«       Y d }	~	�Œ6d }	~	ww xY w# t&        $ r)}	|dBtW        |	«      jX                  › dC|	› dD�z  }Y d }	~	Œ¡d }	~	ww xY w# 1 sw Y   �ŒBxY w# t&        $ r!}t,        j9                  dN|«       Y d }~�Œjd }~ww xY w)VN>   r,  ÚFULLrF   rV  u$   mode musÃ­ bÃ½t SAFE, FULL nebo AUTOrù   rÙ  i“  u#   FULL-OI vyÅ¾aduje confirm_full=trueu   Zadej zprÃ¡vu.rG   rE   zzapamatuj siz ,:-uD   Za pÅ™Ã­kazem â€žzapamatuj siâ€œ musÃ­ nÃ¡sledovat text k uloÅ¾enÃ­.Úfactz-oi-explicitÚuser_confirmed)r×   ÚkindÚsourceÚ
confidencerr  r×   ÚmetadatarÜ  )rr  r×   rÜ  rX  u    NepodaÅ™ilo se uloÅ¾it pamÄ›Å¥: z[%s] %s | %s | %séx   rÁ  r^   rÜ   rÕ   rÝ   z-oi-auto)rÝ  u*   AutomatickÃ© uloÅ¾enÃ­ pamÄ›ti selhalo: %sFr,  r-  ry   rz   r�   r¾  Úpending)rC   r3   rv   ÚcategoryÚreasonsrG   r  Ú
created_atr_   TzCeka na schvaleni: r{   úStatus: r  Úunknownú
Return code: Ú
returncodeúN/Ar¡   ÚstdoutúSTDOUT:
ÚstderrúSTDERR:
uA   

---
**Automaticky proveden bezpeÄ�nÃ½ Ä�tecÃ­ pÅ™Ã­kaz**

Typ: u	   
DÅ¯vod: z, z


```text
z
```rÔ   u5   BezpeÄ�nÃ½ Ä�tecÃ­ pÅ™Ã­kaz byl proveden. VÃ½sledek:
uR   

---
**Chyba pÅ™i automatickÃ©m spuÅ¡tÄ›nÃ­ bezpeÄ�nÃ©ho Ä�tecÃ­ho pÅ™Ã­kazu**

`rý   r    r‰   r   zterminal_audit.jsonlr   r�   zutf-8)Úencoding)ÚtsÚeventrC   r3   rv   rã  rs  zAudit log selhal: %su"   

---
**â›” ODMÃ�TNUTO**

DÅ¯vod: u4   

Tento pÅ™Ã­kaz je na blacklistu a nebyl spuÅ¡tÄ›n.u%   

---
**ÄŒekÃ¡ na potvrzenÃ­**

Typ: ub   

Tento pÅ™Ã­kaz mÅ¯Å¾e mÄ›nit systÃ©m nebo data. Pro provedenÃ­ vyÅ¾aduje samostatnÃ© potvrzenÃ­.)rC   ÚreplyrG   rE   r0  Ú
run_resultÚhas_approvalÚapproval_idÚmemory_savedÚauto_memory_saved)5rG   rb   r9  r+  r   rJ   rD   rt   r\   rE   re   rC   r>   Úcasefoldr‹   r  Úlstripr   rº   râ   rë   rI   rc   rd   rÉ  r8  rá   r   rã   rÁ  rN   r`   ra   r[   r   ÚnowÚ	isoformatr?   rw   rÐ   Úsafe_runnerÚrun_approved_coderà   r;  rK   r÷   r   r
   r   r   Úopenr�   r‚  )r•  rG   rÒ   Úresolved_modelrC   rÑ   rõ  Úmemory_contentÚrecordré   ræ   rñ  Ú_pending_reqrö  rô  ró  r0  rò  rv   r3   Ú_râ  rã  Úresult_textÚ_jsonÚ
audit_pathÚ_fÚ_er¨  s                                r   r©  r©  Z  s£  € à�8‰8�>‰>Ó€DØ"„MÔØÐ+Ñ+Ü¨Ð4ZÔ[Ð[Øˆv‚~˜c×.Ò.Ü¨Ð4YÔZÐZàŸ™×*Ñ*Ó,ÐÙÜ¨Ð4DÔEÐEä" 3§9¡9Ó-€NÜ% c§m¡m°^ÀTÓJ€IÜ�yÑ!€GØ€GˆF�OØ%€GˆGÑà€LØ×"Ñ"Ó$×/Ñ/°Ô?Ø+¬C°Ó,?Ð,@ÐA×HÑHÈÓPˆÙÜØØ]ôð ð	kÜØ&ØØŸ*™*›,˜ |Ð4Ø+ô	ˆFð ˜T‘lØ! )Ñ,Ø˜zÑ*¨6Ñ2ñˆLô ˜gÐ'9¸4ÀÇÁÓK€HÜ
‡K�KÐ# Y°°nÐFXÐY]ÐZ]ÐF^Ô_ä °Ó9€EÜœ=Ð*DÀdÓK€LàˆIÑ×Ñ vÐ:LÑMÔNØˆIÑ×Ñ {¸uÑEÔFàÐÙð	NÜ 4Ø"ØŸ*™*›,˜ xÐ0ô!Ðð €KØ€LØ€HØ€Já˜ šØ15ŒÔ.Üœ$Ÿ*™*›,Ó'ˆØ7@È,×JZÑJZÐ[dÐfhÓJiÐw}ð  LSð  am÷  aqñ  aqð  rzð  |~ó  að  `@ð  JNð  Zcô  s{÷  sñ  só  sA÷  sKñ  sKó  sMñ  *NÔ˜+Ñ&Ø&1ˆÐ"Ñ#ØˆØ%¨×(8Ñ(8¸ÀBÓ(GÑGˆä2°5Ó9Ñ€Hˆd�AÚ’Ü+¨D°(Ó;Ñˆ�'à�6Š>˜h¨&Ò0ð$Ü(×:Ñ:¸4ÀÓJ�
Ø�ð ˜zŸ~™~¨h¸	ÓBÐCð D$Ø$.§N¡N°<ÀÓ$GÐ#HÈðLð ð
 —>‘> (Ô+Ø Y¨z¸(Ñ/CÐ.DÀBÐ#GÑG�Kà—>‘> (Ô+Ø Y¨z¸(Ñ/CÐ.DÀBÐ#GÑG�Kàðà$˜:ð &Ø#Ÿy™y¨Ó1Ð2ð 3 Ø +× 1Ñ 1Ó 3Ð4°Eð	;ñ�ð ˜	Ñ"×)Ñ)Ø$àPØ%ñ&ñ+ö ð ˜Òð;Û$Ü!¤(£*Ó-Ð0FÑF�
Ø×!Ñ!×'Ñ'°¸tÐ'ÔDÜ˜* c°GÔ<ð 3ÀØ—H‘H˜UŸ[™[Ü&Ÿl™l›n×6Ñ6Ó8Ø!'Ø%.Ø $ T c 
Ø$,Ø#*ñ*ð %*ð )ó +ð .2ñ2ô 3÷3ð ðØŸ9™9 WÓ-Ð.ð /EðEñ‰Eð ˜ÒÜœdŸj™j›lÓ+ˆKà&ØØ$Ø$Ø"ØØ#Ü&Ÿl™l›n×6Ñ6Ó8ñ	.Ô˜kÑ*ð +6ˆGÐ&Ñ'ØˆLØØ<¸X¸JØ˜TŸY™Y wÓ/Ð0ðCðCñˆEð ØØØ—‘ØØ Ø$Ø"ñ	€Fñ Ø!-ˆˆ~ÑÙØ&7ˆÐ"Ñ#Ø€MøôS ò 	kÜ¨CÐ:ZÐ[^ÐZ_Ð8`ÔaÐgjÐjûð	kûô& ò 	NÜ�N‰NÐGÈ×MÒMûð	Nûôh ò Øðä˜S›	×*Ñ*Ð+¨2¨c¨U°!ð5ñ•ûðú÷3ñ 3ûô ò ;Ü—‘Ð5°r×:Ò:ûð;ús{   Ä2S ÇS0 Ê4CT Í=AU ÏAUÐU Ó	S-ÓS(Ó(S-Ó0	TÓ9TÔTÔ	UÔ&U
Õ
UÕUÕU Õ	V	Õ(VÖV	z
/approvalsc                  ó   — t        t        «      t        j                  «       D � �cg c]I  \  } }| |j                  d«      |j                  d«      |j                  d«      |j                  d«      dœ‘ŒK c}} dœS c c}} w )Nrâ  r  rG   rä  )rô  râ  r  rG   rä  )ÚcountÚ	approvals)r  r?   Úitemsr[   )ÚaidrÛ   s     r   Úlist_approvalsr    sx   € ô Ô&Ó'ô /×4Ñ4Ó6÷	
ñ ��Tð  #Ø ŸH™H ZÓ0ØŸ(™( 8Ó,ØŸ™ Ó(Ø"Ÿh™h |Ó4óó	
ñð ùó	
s   ¦AA:z/approvals/{approval_id}rô  c                 óN   — t         j                  | «      }|st        dd¬«      ‚|S )NrW  úApproval not foundrù   )r?   r[   r   )rô  Úapprovals     r   Úget_approvalr    s(   € ä ×$Ñ$ [Ó1€HÙÜ¨Ð4HÔIÐIØ€Or   c                 óô  — t         j                  | «      }|st        dd¬«      ‚|d   }t        j                  |«      }|j                  dk(  r”d|d<   |rd |d<   |d	   |d
   dt        j                  «       j                  «       ddidœt        | <   t         j                  | d «       d| dd t        t        j                  «       j                  «       dz  «      dd| idœgdœS |j                  dk7  rt        dd¬«      ‚d|d<   |rd |d<   	 t        j                  |d	   |d
   «      }|j                  dd«      }|dvrdnd}d|› d|j                  dd«      › d�}|j                  d «      r|d!|d    › d�z  }|j                  d"«      r|d#|d"   › d�z  }||d<   |d	   |d
   |t        j                  «       j                  «       |dœt        | <   t         j                  | d «       |dk(  rd(nd)}
|dk(  rd*nd+}|| ||› d,|› �|d t        t        j                  «       j                  «       dz  «      |
| |d-œdœgd.œS # t        $ r5}	d}d$t        |	«      j                   › d%|	› �}d&t#        |	«      d'œ}Y d }	~	ŒÞd }	~	ww xY w)/NrW  r  rù   rC   r‰   Údeniedr  r_   r3   rv   u!   Akce byla uÅ¾ivatelem zamÃ­tnuta.)r3   rv   r¨  Úexecuted_atr  u   â�Œ Akce byla zamÃ­tnuta.rþ   zapproval.deniedrô  )rr  r;  Úpayload)r  rô  rñ  r_   ÚeventsrU   rV  u   NeznÃ¡mÃ¡ akcezapproved-pending-runnerræ  >   r1  ÚfailedÚexecutedr  rå  rç  rè  ré  r¡   rê  rë  rì  rí  u   Chyba pÅ™i provÃ¡dÄ›nÃ­: rý   r1  r2  zapproval.executedz
run.failedu$   âœ… SchvÃ¡lenÃ¡ akce byla provedena.u   â›” SchvÃ¡lenÃ¡ akce selhala.z

)rô  r  )r  rô  rC   rñ  r¨  r_   r  )r?   r[   r   r>   rV   r   rù  rú  r@   ÚpopÚintÚ	timestamprû  rü  râ   r;  rK   rN   )rô  r•  r  rC   rÑ   rò  Úexecution_statusÚfinal_statusr  ré   Ú
event_typeÚreply_prefixs               r   Úapprove_actionr   &  s  € ä ×$Ñ$ [Ó1€HÙÜ¨Ð4HÔIÐIà˜Ñ%€IÜ�l‰l˜9Ó%€Gà
‡z�z�VÒØ%ˆ�ÑÙØ*.ˆGÐ&Ñ'ð ˜VÑ$Ø  Ñ,Ø9Ü#Ÿ<™<›>×3Ñ3Ó5Ø" HÐ-ñ+
Ô˜;Ñ'ô 	×Ñ˜k¨4Ô0ð Ø&Ø0Ø $ô œhŸl™l›n×6Ñ6Ó8¸4Ñ?Ó@Ø-Ø -¨{Ð;ñðñ
ð 	
ð ‡z�z�YÒÜ¨Ð4DÔEÐEà2€HˆXÑÙØ&*ˆÐ"Ñ#ð
Ü ×2Ñ2Ø�VÑØ�ZÑ ó
ˆ
ð &Ÿ>™>¨(°IÓ>ÐØ%5Ð=PÑ%P‘zÐV^ˆð Ð'Ð(ð )Ø&ŸN™N¨<¸Ó?Ð@ÀðDð 	ð �>‰>˜(Ô#Ø˜Y z°(Ñ';Ð&<¸BÐ?Ñ?ˆKØ�>‰>˜(Ô#Ø˜Y z°(Ñ';Ð&<¸BÐ?Ñ?ˆKð &€HˆXÑð ˜Ñ Ø˜ZÑ(ØÜ—|‘|“~×/Ñ/Ó1Øñ'Ô�{Ñ#ô ×Ñ˜+ tÔ,à(4¸
Ò(BÑ$È€JØ=IÈZÒ=WÑ9Ð]|€Lð Ø"ØØ �>  k ]Ð3ØØ ô œ(Ÿ,™,›.×2Ñ2Ó4°tÑ;Ó<Ø"à#.Ø*ññð	
ñð øô/ ò 
ØˆØ1´$°s³)×2DÑ2DÐ1EÀRÈÀuÐMˆàÜ˜“Xñ
�
ûð
ús   ÄB	H9 È9	I7É+I2É2I7z/executed/{approval_id}c                 óN   — t         j                  | «      }|st        dd¬«      ‚|S )NrW  zExecution not foundrù   )r@   r[   r   )rô  r¨  s     r   Úget_executedr"  �  s(   € ä×#Ñ# KÓ0€FÙÜ¨Ð4IÔJÐJØ€Mr   z	/sessionsc                  ó  — t        t        «      t        j                  «       D � �cg c]U  \  } }| |j                  d«      |j                  d«      t        |j                  dg «      «      |j                  d«      d udœ‘ŒW c}} dœS c c}} w )NrG   rE   r^   r_   )rC   rG   rE   ræ   Úhas_pending)r	  r>   )r  r>   r  r[   )rC   rÑ   s     r   Úlist_sessionsr%  •  s�   € ô ”X“ô '/§n¡nÓ&6÷	
ñ #�	˜7ð 'ØŸ™ FÓ+Ø Ÿ™ WÓ-Ü §¡¨I°rÓ :Ó;Ø&Ÿ{™{Ð+=Ó>ÀdÐJóó	
ñð ùó	
s   ¦ABz/sessions/{thread_id}c                 óB   — | t         v rt         | = ddiS t        dd¬«      ‚)Nr  ÚdeletedrW  zSession not foundrù   )r>   r   )rC   s    r   Údelete_sessionr(  ¦  s+   € à”HÑÜ�YÐØ˜)Ð$Ð$Ü
 CÐ0CÔ
DÐDr   Ú__main__z6Starting SAFE/FULL LiteLLM Phase 1 API on http://%s:%srd   )ÚhostÚportÚ	log_level)r<  rY   )žÚ	threadingrœ  r`   rš  Úcyberbrain26.services.safe_oir   r}  Úlocalr9  rA  Úosrq   r   Úpathlibr   Útypingr   r   ÚuvicornÚcyberbrain26.memory.autor   Úcyberbrain26.memory.corer   r	   Úcyberbrain26.pathsr
   Úfastapir   r   Úfastapi.middleware.corsr   Úpydanticr   Ú(cyberbrain26.services.safe_oi.web_searchr   Ú_WEB_SEARCH_TOOLr   r3  ry   r   rû  r   ÚbasicConfigÚINFOÚFileHandlerrN   ÚStreamHandlerrB  rc   r!   Ú_project_root_fnrg   rÀ   rh   ri   Úgetenvr¾   r  r  rP   ÚHOSTr  ÚPORTr  rä   rß   r  rZ   ÚappÚadd_middlewarer>   rÀ  rO   r?   r@   rB   rT   r\   re   rm   Útuplery  rw   rÐ   rë   r  r[   r  r÷   rK  Ú(cyberbrain26.services.safe_oi.file_toolsr  Ú_FIND_FILES_TOOLr  Ú_LIST_DIR_TOOLr  Ú_READ_FILE_TOOLr  r6  r  r5  r  r4  Ú)cyberbrain26.services.safe_oi.shell_toolsr  Ú_RUN_SHELL_TOOLr  r:  Ú*cyberbrain26.services.safe_oi.system_toolsr   Ú_SYSTEM_STATUS_TOOLr!  r7  r  r>  rD  rM  r[  rH  r@  r  r   r¤  rž  rµ  Ú'cyberbrain26.services.safe_oi.proposalsr­  Ú_SAVE_PROPOSAL_TOOLr®  rÍ  r¯  rÒ  r°  r¿  r±  rÖ  ÚcompileÚ
IGNORECASEr´  rw  rÆ  rp  rÇ  rÉ  rÎ  rÓ  r×  r©  r  r  r   r"  r%  Údeleter(  rK   rd   ÚrunrR   r   r   ú<module>rU     sB  ðä Û å Cà �
× Ñ Ó"€ðó Û 	Û 	Û Ý Ý Ý ã Û Ý 9ß FÝ 'ß *Ý 2Ý õõõ $òð
 €× Ñ Ø
�,‰,Ø4àˆ×Ñ™CÑ 1Ó 3Ó4Ó5Øˆ×ÑÓðõð 
ˆ×	Ñ	˜=Ó	)€å ?áÑ'Ó)Ó*Ð Ø"€Ø+Ð,Ð,=Ð>Ð Ø"Ð# 8Ð,€ð ˆB�I‰IÐ&Ð(?Ó@×GÑGÈÓL€	ØˆB�I‰IØØ€B‡I�IÐ" OÓ4ó€	ð �—	‘	Ð.Ð0CÓD€Ø€Ù
ˆ9ˆ2�9‰9Ð(¨&Ó1Ó2€Ø€
Ø€Ø€Ø€ð #ØØØØ3Ø+Ø2ñ€ñ Ð.¸ÔE€à × Ñ ØØ*Ð,CÐDØØ�%Ø�%ð ô ð €ˆ$ˆs�Dˆy‰/Ó Ø%'Ð �4˜˜T˜	‘?Ó 'Ø&(Ð �D˜˜d˜‘OÓ (ô�)ô ô�Yô ð+˜ð + ó +ð
 S¨4¡Zð 
¸ð 
À3ð 
È3ó 
ð37˜3ð 37 3ó 37ðl9 Sð 9¨U°3¸±:¸sÀT¹zÈ4Ð3OÑ-Pó 9ðj@˜#ð j@¨ó j@ðZ˜Dð °cð Àð ÈSð ÐUYÐZ^ÑU_ó ð:g�cð g T¨$¡Zð g°Có gð> ‡�ˆÓð��S˜#�X‘ò ó ðó õõõõõõõõõõð
 �o ~Ð7GØ˜ð€
ðH˜ð H Dð H¨T°#°s°(©^ó Hò6+òò Ð ó ;òHY4ðv ‡�ˆ-Óð�Kð  Dò ó ðð ‡�Ð	"Ó#ð˜#ð  $ò ó $ðð$˜ð $ ;ð $°4ó $ó$ å ]Ý TÝ RÝ RÝ Uà!�6—>’>ðð ×Òó	Ð òð$ Ð1Ð2Ñ2€ò	òI4òX+ð ‡�ˆÓñ8  t¡ò 8ó ð8ð ‡�Ð	Óð˜Cò ó ðð ‡�Ð
#Ó$ð-˜sò -ó %ð-ð ‡�ˆ'Óðoˆkò oó ðoðd ‡�ˆÓñó ðð  ‡�Ð	#Ó$ð˜cò ó %ðð ‡�Ð
$Ó%ðd ð d¨.ò dó &ðdðL ‡�Ð	"Ó#ð˜cò ó $ðð ‡�ˆÓñó ðð  ‡‚Ð#Ó$ðE˜cò Eó %ðEð ˆzÒØ
‡K‚KÐHÈ$ÐPTÔUØ€G‡K‚K�˜$ T°VÖ<ð r   