
    $Kj                     *   d 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dZej                            dd          Z e	e          Zdai Zdad Zd	 Zd
 Zd Zd ZddZddZddZddZ ddZ!ddZ"d Z#dS )a(  
Hermes Dashboard + Wiki Plugin
================================

Sends agent session events to the Hermes Dashboard and auto-starts
the dashboard server on first session.

Install:
  cd hermes-dashboard && ./install.sh

Dashboard: http://localhost:5173
Wiki API:  http://localhost:3002/api/wiki
    N)defaultdict)Pathz/tmp/hermes-dashboard.sockHERMES_AGENT_NAMEagentc                  L    	 t          j                    S # t          $ r Y dS w xY w)N )osgetcwd	Exception     2/root/.hermes/plugins/hermes_dashboard/__init__.py_cwdr   #   s5    y{{   rrs    
##c                      	 t          j        d          S # t          $ r* 	 t          j        d          cY S # t          $ r Y Y d S w xY ww xY w)Nr      )r	   ttynamer   r   r   r   _ttyr   *   sm    z!}}   	:a==    	 	 	444	s)    
A
7A

AA
AA
c                     | |t                      |t          j                    t                      d}|                    |           |S )N)event
session_idcwdstatuspidtty)r   r	   getpidr   update)
event_namer   r   extrapayloads        r   _base_payloadr    4   sG     vvy{{vv G NN5Nr   c                    	 t          j         t           j        t           j                  }|                    d           |                    t
                     t          j        |                               d          }|	                    |dz              |
                                 d S # t          t          t          f$ r Y d S t          $ r&}t                              d|           Y d }~d S d }~ww xY w)Ng      ?zutf-8   
z!hermes-dashboard: send failed: %s)socketAF_UNIXSOCK_STREAM
settimeoutconnectSOCKET_PATHjsondumpsencodesendallcloseConnectionRefusedErrorFileNotFoundErrorOSErrorr   loggerdebug)r   sockdataexcs       r   _sendr6   A   s    
?}V^V-?@@[!!!z'""))'22TE\"""

"$5w?    ? ? ?8#>>>>>>>>>?s   B+B/ /C8		C8C33C8c                     t           rt                                           dS t          j                            t
                    r	 t          j        t          j        t          j                  } | 	                    d           | 
                    t
                     |                                  dS # t          t          f$ r Y nw xY wt          j                            d          }|s]t!          j                    dz  t!          j                    dz  dz  fD ]-}|dz  dz                                  rt%          |          } n.|st&                              d           dS 	 t+          j        g d	|t*          j        t*          j        
          a t&                              dt           j                   dS # t4          $ r&}t&                              d|           Y d}~dS d}~ww xY w)z2Start the dashboard server if not already running.Ng      ?HERMES_DASHBOARD_DIRzhermes-dashboardz.hermesserverzindex.tsz7hermes-dashboard: server not found, skipping auto-start)npxtsxzserver/index.ts)r   stdoutstderrz)hermes-dashboard: started server (pid %d)z,hermes-dashboard: failed to start server: %s)_SERVER_PROCESSpollr	   pathexistsr(   r#   r$   r%   r&   r'   r-   r.   r0   environgetr   homestrr1   r2   
subprocessPopenDEVNULLinfor   r   )sdashboard_dir	candidater5   s       r   _ensure_serverrM   O   s     ?//119 
w~~k"" 	fnf.@AAALLIIk"""GGIIIF&0 	 	 	D	 JNN#9::M  IKK,,IKK)#&88
 	 	I H$z199;;  #I  NOOO	J$*---%%	
 
 
 	?ATUUUUU J J JCSIIIIIIIIIJs,   A,B6 6C
	C
*AF? ?
G/	G**G/r   c           	      z    | r| a t                       t          t          d| dt          |pd                     d S )NSessionStartwaiting_for_inputcli)r   platform)_CURRENT_SESSION_IDrM   r6   r    
AGENT_NAME)r   rR   kwargss      r   _on_session_startrV   |   s[     )(	-
$78#4u       r   c                 d   |                     d          p"t                               |          pt          p|}|r|r
|t          |<   t          j                    j        }| d|  }t          |                             |           t          t          d|d| |pi |t                               d S )Nr   :
PreToolUserunning_tool)tool
tool_inputtool_use_idr   )rC   _TASK_SESSION_IDSrS   uuiduuid4hex_TOOL_CALL_IDSappendr6   r    rT   )	tool_nameargstask_idrU   r   r]   	cache_keys          r   _on_pre_tool_callrh      s    L))m->-B-B7-K-KmObmfmJ 0: 0%/'"*,,"K((Y((I9$$[111	-j.4:2;j       r   c                    |                     d          p"t                               |          pt          p|}|r|r
|t          |<   |rt          |          d d         nd}| d|  }t                               |          r t          |                             d          nd }|t          v r(t          |         st                              |d            t          t          d|d| |pi |t          |                     d S )	Nr   d   r   rX   r   PostToolUse
processing)r[   r\   r]   r   message)	rC   r^   rS   rE   rb   popr6   r    rT   )	rd   re   resultrf   rU   r   
result_strrg   r]   s	            r   _on_post_tool_callrq      s   L))m->-B-B7-K-KmObmfmJ 0: 0%/'"&,4VTcT"""J((Y((I6D6H6H6S6S].+//222Y]KN"">)+D"9d+++	-z<4:2;*       r   c                 t    | r| a t          t          d| dt          |pd|pdd d                              d S )NUserPromptSubmitrl   rQ   r   x   )r   rR   rm   rS   r6   r    rT   )r   user_messagerR   rU   s       r   _on_pre_llm_callrw      s_     )(	-J8#4u#TcT*       r   c           
          | r| a |pdd d                             dd          }t          t          d| ddt          |                     d S )	Nr   P   
 Notificationrl   assistant_response)notification_typer   rm   )rS   replacer6   r    rT   )r   r}   rU   summarys       r   _on_post_llm_callr      sn     )(!'R"-55dC@@G	-
L.j'       r   Fc                 `    | r| a t          t          d| dddt          ||                     d S )Nr|   rP   turn_completeready)r~   rm   r   	completedinterruptedru   )r   r   r   rU   s       r   _on_session_endr      sQ     )(	-
$7)7I;       r   c                 ~   |                      dt                     |                      dt                     |                      dt                     |                      dt                     |                      dt
                     |                      dt                     t                              d           d S )Non_session_startpre_llm_callpre_tool_callpost_tool_callpost_llm_callon_session_endz"hermes-dashboard plugin registered)	register_hookrV   rw   rh   rq   r   r   r1   rI   )ctxs    r   registerr      s    (*;<<<n&6777o'8999&(:;;;o'8999&888
KK455555r   )r   r   )r   Nr   )r   Nr   r   )r   r   r   )r   FF)$__doc__r)   loggingr	   r#   rF   sysr_   collectionsr   pathlibr   	getLogger__name__r1   r(   rB   rC   rT   listrb   rS   r^   r>   r   r   r    r6   rM   rV   rh   rq   rw   r   r   r   r   r   r   <module>r      s      				      



  # # # # # #      		8	$	$*Z^^/99
T""      
 
 
? ? ?*J *J *JZ   
 
 
 
             6 6 6 6 6r   