
    `gj$                     d   d Z 	 ddlZ ej                          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h d      Z G d dej                        Zdd	Zdd
Zddee   dz  dej(                  fdZddZddZddZddedefdZddee   dz  ddfdZedk(  r e        yy# e$ r Y w xY w)a=  CLI entry point for the hermes-agent ACP adapter.

Loads environment variables from ``~/.hermes/.env``, configures logging
to write to stderr (so stdout is reserved for ACP JSON-RPC transport),
and starts the ACP agent server.

Usage::

    python -m acp_adapter.entry
    # or
    hermes acp
    # or
    hermes-acp
    N)Path)get_hermes_home>   pinghealthhealthcheckc                   4    e Zd ZdZdej
                  defdZy)_BenignProbeMethodFilteru   Suppress acp 'Background task failed' tracebacks caused by unknown
    liveness-probe methods (e.g. ``ping``) while leaving every other
    background-task error — including method_not_found for any non-probe
    method — visible in stderr.
    recordreturnc                 *   |j                         dk7  ry|j                  }|sy|d   }	 ddlm} t        ||      syt        |dd       dk7  ryt        |dd       }t        |t              r|j                  d	      nd }|t        vS # t        $ r Y yw xY w)
NzBackground task failedT   r   )RequestErrorcodeidatamethod)

getMessageexc_infoacp.exceptionsr   ImportError
isinstancegetattrdictget_BENIGN_PROBE_METHODS)selfr
   r   excr   r   r   s          D/root/.hermes/venv/lib/python3.12/site-packages/acp_adapter/entry.pyfilterz_BenignProbeMethodFilter.filter:   s    "::??qk	3 #|,3%/sFD)'1$'=(#4222  		s   B 	BBN)__name__
__module____qualname____doc__logging	LogRecordboolr        r   r	   r	   3   s     3W.. 34 3r'   r	   r   c                     t        j                  t        j                        } | j	                  t        j
                  dd             | j                  t                      t        j                         }|j                  j                          |j                  |        |j                  t         j                         t        j                  d      j                  t         j                         t        j                  d      j                  t         j                         t        j                  d      j                  t         j                         y)z@Route all logging to stderr so stdout stays clean for ACP stdio.z1%(asctime)s [%(levelname)s] %(name)s: %(message)sz%Y-%m-%d %H:%M:%S)datefmthttpxhttpcoreopenaiN)r#   StreamHandlersysstderrsetFormatter	Formatter	addFilterr	   	getLoggerhandlersclear
addHandlersetLevelINFOWARNING)handlerroots     r   _setup_loggingr<   P   s    ##CJJ/G?'	
 .01DMMOOGMM',, g''8j!**7??;h((9r'   c                      ddl m}  t               } | |      }|r1|D ]+  }t        j                  t
              j                  d|       - yt        j                  t
              j                  d|dz         y)z3Load .env from HERMES_HOME (default ``~/.hermes``).r   )load_hermes_dotenv)hermes_homezLoaded env from %sz%No .env found at %s, using system envz.envN)hermes_cli.env_loaderr>   r   r#   r3   r   info)r>   r?   loadedenv_files       r   	_load_envrD   e   sl    8!#KK8F 	MHh',,-A8L	M 	(#((3[65I	
r'   argvc                    t        j                  dd      }|j                  ddd       |j                  ddd	       |j                  d
dd       |j                  ddd       |j                  ddddd       |j                  |       S )Nz
hermes-acpz(Run Hermes Agent as an ACP stdio server.)progdescriptionz	--version
store_truezPrint Hermes version and exit)actionhelpz--checkz6Verify ACP dependencies and adapter imports, then exitz--setupzARun interactive Hermes provider/model setup for ACP terminal authz--setup-browserzfInstall agent-browser + Playwright Chromium into ~/.hermes/node/ for browser tool support. Idempotent.z--yesz-y
assume_yeszjAccept all prompts (currently used by --setup-browser to skip the ~400 MB Chromium download confirmation).)rJ   destrK   )argparseArgumentParseradd_argument
parse_args)rE   parsers     r   _parse_argsrS   t   s    $$>F L?^_
E  
 P  
 5   8   T""r'   c                  &    ddl m}  t        |        y )Nr   )__version__)
hermes_clirU   print)hermes_versions    r   _print_versionrY      s    8	.r'   c                  .    dd l } ddlm} t        d       y )Nr   HermesACPAgentzHermes ACP check OK)acpacp_adapter.serverr\   rW   )r]   r\   s     r   
_run_checkr_      s    1	
 r'   c                  ~   ddl m}  t        j                  d d  }	 |r|d   nddgt        _         |         |t        _        t        j                  j                         sy 	 t        d      j                         j                         }|dv rt        d       y y # |t        _        w xY w# t        t        f$ r Y y w xY w)	Nr   )mainhermesmodelzj
Install browser tools? Downloads agent-browser (npm) and optionally Playwright Chromium (~400 MB). [y/N] >   yyesFrL   )hermes_cli.mainra   r.   rE   stdinisattyinputstriplowerEOFErrorKeyboardInterrupt_run_setup_browser)hermes_mainold_argvreplys      r   
_run_setuprs      s    3xx{H#+HQK7C 99?
 %'%%' 	 e,   '( s   B !'B* B'*B<;B<rL   c                    ddl m} 	  |d|        }|st        dt        j                         y |d|        }|st        d	t        j                         yy# t
        $ r(}t        d
| t        j                         Y d}~yd}~ww xY w)zBootstrap agent-browser + Chromium.

    Routes through dep_ensure -> install.{sh,ps1} --ensure, sharing code
    with ``hermes postinstall`` and the runtime lazy installer.

    Returns 0 on success, 1 on failure.
    r   )ensure_dependencynode)interactiveuB   Node.js installation failed — cannot proceed with browser tools.)filer   browserz"Browser tools installation failed.zBrowser bootstrap failed: N)hermes_cli.dep_ensureru   rW   r.   r/   OSError)rL   ru   node_ok
browser_okr   s        r   ro   ro      s     8#FJGVzz#&y*nM
6SZZH *3%0szzBs   (A (A 	B$BBc                    t        |       }|j                  rt                y|j                  rt	                y|j
                  rt                y|j                  r1t        |j                        }|dk7  rt        j                  |       yt                t                t        j                  t               }|j#                  d       t%        t'        t(              j+                         j,                  j,                        }|t        j.                  vr t        j.                  j1                  d|       ddl}ddlm} 	 ddlm}  |         |       }	 tA        jB                  |jE                  |d	             y# t<        $ r |j?                  dd	
       Y Mw xY w# tF        $ r |j#                  d       Y yt<        $ r) |jI                  d       t        j                  d       Y yw xY w)z<Entry point: load env, configure logging, run the ACP agent.Nrf   r   z!Starting hermes-agent ACP adapterr   r[   )discover_mcp_toolsz(MCP tool discovery failed at ACP startupT)r   )use_unstable_protocolz!Shutting down (KeyboardInterrupt)zACP agent crashed)%rS   versionrY   checkr_   setuprs   setup_browserro   rL   r.   exitr<   rD   r#   r3   r   rA   strr   __file__resolveparentpathinsertr]   serverr\   tools.mcp_toolr   	Exceptiondebugasynciorun	run_agentrn   	exception)	rE   argsrcloggerproject_rootr]   r\   r   agents	            r   ra   ra      sq   tD||zzzz4??;7HHRLKx(F
KK34 tH~--/66==>L388#<(&P5 ECMM%tMDE  P?$OP  978 ,-s*   E? &F! ?FF!G.=.G.-G.__main__)r   N)N)F)r"   hermes_bootstrapharden_import_pathModuleNotFoundErrorrN   r   r#   r.   pathlibr   hermes_constantsr   	frozensetr   Filterr	   r<   rD   listr   	NamespacerS   rY   r_   rs   r%   intro   ra   r   r&   r'   r   <module>r      s   "* ('')    
  , ""CD 3w~~ 3::*
#d3i$& #(2D2D #B!-64 C 82tCy4 24 2j zF u  	
 		s   B' 'B/.B/