
    *"hj(                        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m	Z	 ddl
mZ ddlmZ  ej                  e      Z e	j"                         dz  d	z  Z G d
 d      Zy)z
SkillClaw service launcher.

Starts the proxy, skill injection, optional PRM side channel,
and client auto-configuration for the selected Claw agent.
    )annotationsN)Path)Optional   )ConfigStorez
.skillclawzskillclaw.pidc                  6    e Zd ZdZd	dZd Zd Zd Zd Zd Z	y)
SkillClawLauncherz3Start/stop SkillClaw services based on ConfigStore.c                n    || _         d | _        t        j                         | _        d | _        d | _        y )N)cs_api_server	threadingEvent_stop_event_validation_worker_validation_task)selfconfig_stores     -/root/.hermes/SkillClaw/skillclaw/launcher.py__init__zSkillClawLauncher.__init__   s0    $??,"& $    c                   K   | j                   j                         }t        j                  d       | j	                          | j                          | j                  |       d {    y 7 w)Nu!   [Launcher] Starting SkillClaw …)r   to_skillclaw_configloggerinfo
_write_pid_setup_signal_handlers_run)r   cfgs     r   startzSkillClawLauncher.start(   sL     gg))+78##%iins   A$A.&A,'A.c                <   | j                   j                          | j                  	 | j                  j                          | j
                  	 | j
                  j                          t        j                  d       y # t        $ r Y Iw xY w# t        $ r Y 1w xY w)NT)
missing_ok)r   setr   stop	Exceptionr   	_PID_FILEunlinkr   s    r   r#   zSkillClawLauncher.stop/   s    "".'',,. '  %%' 	D)  
  s#   B  B  	BB	BBc           	       K   ddl m} ddlm} ddlm} d }|j                  r~t        |j                        j                  dd        ||j                  |j                  |j                  |j                        }t        j                  d|j                                d }|j                   xs d	}|j"                  xs |j$                  xs d
j'                         }|j(                  xs |j*                  xs d
j'                         }	|j,                  xs |j.                  xs d
j'                         }
|j0                  rS|dk(  rN|	rLddlm}  ||	|j6                        } ||xs d|	|
|j8                  |j:                  |j<                  |      }n|j0                  r|dk(  rt        j?                  d       n|j0                  r2|r0|	r. |||	|
|j8                  |j:                  |j<                  d       }nM|j0                  rAt        j?                  d|j"                  |j(                  |j$                  |j*                         |j@                  r|jB                  r	 ddl"m#} |jI                  |      }|jK                  |j                        }t        j                  d|d   |d   |jM                  dd             |L|jM                  dd      dkD  s'|jM                  dd      dkD  s|jM                  dd      r|jO                           ||d ||      }|jS                          || _*        tW        |dd       }tY        |      r5 |d      r,t        j                  d|jZ                  |j\                         nLtY        |      r,t        j?                  d |jZ                  |j\                         nt        j                  d!       dd"l/m0}  ||       tW        |d#d      r]	 dd$l1m2}  |||%      | _3        ti        jj                  | jf                  jm                               | _7        t        j                  d&       	 | jp                  js                         s8ti        jt                  d(       d {    | jp                  js                         s8| jf                  | jf                  jw                          | jn                  0ti        jx                  | jn                  d)       d {    d | _7        d | _3        y # tP        $ r!}t        j?                  d|       Y d }~d }~ww xY w# tP        $ r!}t        j?                  d'|       Y d }~d }~ww xY w7 7 o# | jf                  | jf                  jw                          | jn                  1ti        jx                  | jn                  d)       d {  7   d | _7        d | _3        w xY ww)*Nr   )SkillClawAPIServer)	PRMScorer)SkillManagerTparentsexist_ok)
skills_dirpublic_skill_rootretrieval_modeembedding_model_pathz)[Launcher] SkillManager loaded: %s skillsopenai bedrock)BedrockChatClient)model_idregionzhttps://api.openai.com/v1)prm_url	prm_modelapi_keyprm_mtemperaturemax_new_tokens
llm_clientzC[Launcher] PRM enabled but bedrock prm_model is empty; PRM disabledzy[Launcher] PRM enabled but endpoint/model missing (prm_url=%r prm_model=%r llm_api_base=%r llm_model_id=%r); PRM disabled)SkillHubz=[Launcher] auto-pull: %d downloaded, %d unchanged, %d deleted
downloadedskippeddeletedr   restored_from_backupFz[Launcher] auto-pull failed: %s)configsampling_clientskill_manager
prm_scorerwait_until_readyg      >@)	timeout_sz&[Launcher] proxy ready at http://%s:%dzD[Launcher] proxy did not report ready within timeout on http://%s:%dzS[Launcher] proxy server does not expose wait_until_ready(); skipping readiness wait)configure_clawvalidation_enabled)ValidationWorker)idle_providerz/[Launcher] background validation worker startedz0[Launcher] failed to start validation worker: %sg      ?)return_exceptions)=
api_serverr)   rH   r*   rG   r+   
use_skillsr   r/   mkdirskills_public_rootr1   r2   r   r   get_skill_countprm_providerr9   llm_api_basestripr:   llm_model_idprm_api_keyllm_api_keyuse_prmbedrock_clientr6   bedrock_regionr<   prm_temperatureprm_max_new_tokenswarningsharing_enabledsharing_auto_pull_on_start	skill_hubr@   from_configpull_skillsgetreloadr$   r   r   getattrcallable
proxy_host
proxy_portclaw_adapterrK   validation_workerrM   r   asynciocreate_taskrunr   r   is_setsleepr#   gather)r   r   r)   r*   r+   rG   rH   rU   r9   r:   rY   r6   
prm_clientr@   hubresulteserverrI   rK   rM   s                        r   r   zSkillClawLauncher._runA   s    2)/04>> &&td&C(>>"%"8"8"11%(%=%=	M KKC]EbEbEde
''38;;8#"2"28b??A]]<c&6&6<"CCE	?#//?RFFH;;<949*"))J #>#>##ii//"55%J [[\Y6NN`a[[W"##ii//"55J [[NNZ     3#A#AE/**3/8S<(9%JJy!,	 !,JJ|Q/!3zz)Q/!3zz"8%@!((* $ '!	
 	!"6+=tD$%*:T*JKK@#..RUR`R`a&'NNV KKmn0s3,e4
V?*:"(+' )0(;(;D<S<S<W<W<Y(Z%MN		+&&--/mmC((( &&--/ &&2'',,.$$0nnT%:%:dSSS(,%&*D#e  E@!DDEL  VQSTUUV
 )
 T &&2'',,.$$0nnT%:%:dSSS(,%&*D#s   IW!B.T  CW'AT- 2U 6U7U AW,U-W 	T*	T%W%T**W-	U6UWUWU WAW
5V86W

Wc                    t         j                  j                  dd       t         j                  t	        t        j                                      y )NTr,   )r%   parentrR   
write_textstrosgetpidr'   s    r   r   zSkillClawLauncher._write_pid   s4    td;S-.r   c                      fd}t         j                  t         j                  fD ]  }	 t        j                   ||        y # t        t        f$ r Y .w xY w)Nc                R    t         j                  d|        j                          y )Nu.   [Launcher] signal %s received — stopping …)r   r   r#   )signumframer   s     r   _handlerz:SkillClawLauncher._setup_signal_handlers.<locals>._handler   s    KKH&QIIKr   )signalSIGTERMSIGINTOSError
ValueError)r   r   sigs   `  r   r   z(SkillClawLauncher._setup_signal_handlers   sR    	 NNFMM2 	Cc8,	 Z( s   AAAN)r   r   )
__name__
__module____qualname____doc__r   r   r#   r   r   r    r   r   r	   r	      s%    =%*$A+N/	r   r	   )r   
__future__r   rn   loggingr}   r   r   pathlibr   typingr   r   r   	getLoggerr   r   homer%   r	   r   r   r   <module>r      s\    #   	     %			8	$DIIK,&8	{ {r   