
    PL
j'm                     |   U 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 ddlmZ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  ej        e          ZdZdZ dZ!dZ"de#fdZ$de#de#de#fdZ%de#de#de#fdZ&ddl'm(Z)m*Z+ dZ,dZ-dee#ee#         f         fdZ.dZ/dZ0dZ1de#dee2         fdZ3de	dee2         fd Z4d!e#de5e2d"f         fd#Z6dBd%e#dee#         fd&Z7dee2         fd'Z8dee2         fd(Z9dee	         fd)Z:de	d*e#dee#         fd+Z;dCdee	         dee<         fd,Z=d-Z>da?ee5         e@d.<   dCdee	         dee5         fd/ZAde#fd0ZBdaCee2         e@d1<    ejD                    ZEd2 ZFdDd4eGdee2         fd5ZHd6e2de#fd7ZId8e#de#fd9ZJ	 	 	 	 	 dEd:ed;e#d<e#d=ee<         d>ee#         d?e#d@e2fdAZKdS )FzWelcome banner, ASCII art, skills summary, and update check for the CLI.

Pure display functions with no HermesCLI state dependency.
    N)Path)get_hermes_home)DictListOptional)Console)Panel)Table)print_formatted_text)ANSIz[1;38;2;255;215;0mz[1mz[2mz[0mtextc                 >    t          t          |                      dS )z:Print ANSI-colored text through prompt_toolkit's renderer.N)	_pt_print_PT_ANSI)r   s    5/home/kuhnn/.hermes/hermes-agent/hermes_cli/banner.pycprintr   %   s    htnn    keyfallbackreturnc                 p    	 ddl m}  |                                | |          S # t          $ r |cY S w xY w)z5Get a color from the active skin, or return fallback.r   get_active_skin)hermes_cli.skin_enginer   	get_color	Exceptionr   r   r   s      r   _skin_colorr   .   s[    ::::::  **3999      #& 55c                 p    	 ddl m}  |                                | |          S # t          $ r |cY S w xY w)z?Get a branding string from the active skin, or return fallback.r   r   )r   r   get_brandingr   r   s      r   _skin_brandingr"   7   s[    ::::::  --c8<<<   r   )__version____release_date__u  [bold #FFD700]██╗  ██╗███████╗██████╗ ███╗   ███╗███████╗███████╗       █████╗  ██████╗ ███████╗███╗   ██╗████████╗[/]
[bold #FFD700]██║  ██║██╔════╝██╔══██╗████╗ ████║██╔════╝██╔════╝      ██╔══██╗██╔════╝ ██╔════╝████╗  ██║╚══██╔══╝[/]
[#FFBF00]███████║█████╗  ██████╔╝██╔████╔██║█████╗  ███████╗█████╗███████║██║  ███╗█████╗  ██╔██╗ ██║   ██║[/]
[#FFBF00]██╔══██║██╔══╝  ██╔══██╗██║╚██╔╝██║██╔══╝  ╚════██║╚════╝██╔══██║██║   ██║██╔══╝  ██║╚██╗██║   ██║[/]
[#CD7F32]██║  ██║███████╗██║  ██║██║ ╚═╝ ██║███████╗███████║      ██║  ██║╚██████╔╝███████╗██║ ╚████║   ██║[/]
[#CD7F32]╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝╚══════╝      ╚═╝  ╚═╝ ╚═════╝ ╚══════╝╚═╝  ╚═══╝   ╚═╝[/]u  [#CD7F32]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀⠀⣀⣀⠀⢀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#CD7F32]⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣇⠸⣿⣿⠇⣸⣿⣿⣷⣦⣄⡀⠀⠀⠀⠀⠀⠀[/]
[#FFBF00]⠀⢀⣠⣴⣶⠿⠋⣩⡿⣿⡿⠻⣿⡇⢠⡄⢸⣿⠟⢿⣿⢿⣍⠙⠿⣶⣦⣄⡀⠀[/]
[#FFBF00]⠀⠀⠉⠉⠁⠶⠟⠋⠀⠉⠀⢀⣈⣁⡈⢁⣈⣁⡀⠀⠉⠀⠙⠻⠶⠈⠉⠉⠀⠀[/]
[#FFD700]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⡿⠛⢁⡈⠛⢿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#FFD700]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿⣿⣦⣤⣈⠁⢠⣴⣿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#FFBF00]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠻⢿⣿⣦⡉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#FFBF00]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢷⣦⣈⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#CD7F32]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣴⠦⠈⠙⠿⣦⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#CD7F32]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣤⡈⠁⢤⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#B8860B]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠷⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#B8860B]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠑⢶⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#B8860B]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠁⢰⡆⠈⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#B8860B]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⠈⣡⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]
[#B8860B]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[/]c                      	 ddl m}   |             }n# t          $ r i cY S w xY wi }|D ]H}|                    d          pd}|                    |g                               |d                    I|S )a  Return skills grouped by category, filtered by platform and disabled state.

    Delegates to ``_find_all_skills()`` from ``tools/skills_tool`` which already
    handles platform gating (``platforms:`` frontmatter) and respects the
    user's ``skills.disabled`` config list.
    r   )_find_all_skillscategorygeneralname)tools.skills_toolr&   r   get
setdefaultappend)r&   
all_skillsskills_by_categoryskillr'   s        r   get_available_skillsr1   c   s    666666%%''

   			 02 J J99Z((5I%%h33::5=IIIIs    ""i`T  z0https://github.com/NousResearch/hermes-agent.git	local_revc                     	 t          j        ddt          dgddd          }n# t          $ r Y dS w xY w|j        dk    s|j        sdS |j                                        d         }|sdS || k    rdnt          S )	zCompare an embedded git revision to upstream main via ls-remote.

    Returns 0 if up-to-date, ``UPDATE_AVAILABLE_NO_COUNT`` if behind,
    or ``None`` on failure.
    gitz	ls-remotezrefs/heads/mainT
   )capture_outputr   timeoutNr   )
subprocessrun_UPSTREAM_REPO_URLr   
returncodestdoutsplitUPDATE_AVAILABLE_NO_COUNT)r3   resultupstream_revs      r   _check_via_revrB      s    K!35FGdB
 
 
    ttAV]t=&&((+L t	))11/HHs   !$ 
22repo_dirc           	      N   	 t          j        g dddt          |                      n# t          $ r Y nw xY w	 t          j        g ddddt          |                     }|j        dk    r&t          |j                                                  S n# t          $ r Y nw xY wd	S )
z5Count commits behind origin/main in a local checkout.)r5   fetchoriginz--quietTr6   )r7   r8   cwd)r5   rev-list--countzHEAD..origin/main   r7   r   r8   rG   r   N)r9   r:   strr   r<   intr=   strip)rC   r@   s     r   _check_via_local_gitrO      s    111H	
 	
 	
 	
 	

    	???dAH
 
 

 !!v}**,,--- "   4s   '* 
77AB 
B"!B"v.c                     g }|                      d          D ]J}	 |                    t          |                     &# t          $ r |                    d           Y Gw xY wt	          |          S )zMParse '0.13.0' into (0, 13, 0) for comparison. Non-numeric segments become 0..r   )r>   r-   rM   
ValueErrortuple)rP   partssegments      r   _version_tuplerW      sz    E773<<  	LLW&&&& 	 	 	LLOOOOO	<<s   ">A A hermes-agentpackagec                    	 ddl }d|  d}|j                            |ddi          }|j                            |d	          5 }t	          j        |                                          }|                    d
i                               d          cddd           S # 1 swxY w Y   dS # t          $ r Y dS w xY w)zIFetch the latest version of a package from PyPI. Returns None on failure.r   Nzhttps://pypi.org/pypi/z/jsonAcceptzapplication/json)headersrJ   r8   infoversion)	urllib.requestrequestRequesturlopenjsonloadsreadr+   r   )rY   urlliburlreqrespdatas         r   _fetch_pypi_latestrl      s   5w555n$$S8=O2P$QQ^##C#33 	7t:diikk**D88FB''++I66	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7    tts7   AB/ AB"B/ "B&&B/ )B&*B/ /
B=<B=c                      t                      } | dS | t          k    rdS 	 t          |           t          t                    k    rdS dS # t          $ r | t          k    rdndcY S w xY w)zoCompare installed version against PyPI latest.

    Returns 0 if up-to-date, 1 if behind, None on failure.
    Nr      )rl   VERSIONrW   r   )latests    r   check_via_pypirq      s    
  !!F~tq-&!!N7$;$;;;1q - - -g%%qq1,,,-s   %A
 
A&%A&c                  l   t                      } | dz  }t          j                            d          pd}t	          j                    }	 |                                rvt          j        |                                          }||                    dd          z
  t          k     r.|                    d          |k    r|                    d          S n# t          $ r Y nw xY w|rt          |          }nt          t                    j        j                                        }|dz                                  s| d	z  }|dz                                  st!                      }nt#          |          }	 |                    t          j        |||d
                     n# t          $ r Y nw xY w|S )a  Check whether a Hermes update is available.

    Two paths: if ``HERMES_REVISION`` is set (nix builds embed it), compare
    it to upstream main via ``git ls-remote``. Otherwise look for a local
    git checkout and count commits behind ``origin/main``.

    Returns the number of commits behind, ``UPDATE_AVAILABLE_NO_COUNT`` (-1)
    if behind but the count is unknown, ``0`` if up-to-date, or ``None`` if
    the check failed or doesn't apply. Cached for 6 hours.
    z.update_checkHERMES_REVISIONNtsr   revbehind.gitrX   )rt   rv   ru   )r   osenvironr+   timeexistsrd   re   	read_text_UPDATE_CHECK_CACHE_SECONDSr   rB   r   __file__parentresolverq   rO   
write_textdumps)hermes_home
cache_fileembedded_revnowcachedrv   rC   s          r   check_for_updatesr      s    "##K.J:>>"344<L )++C	 	,Z
 4 4 6 677Ffjjq))),GGGJJu%%55zz(+++     4--
 >>(/77996!))++ 	4"^3H6!))++ 	4#%%FF)(33Fdjvl)[)[\\]]]]    Ms%   	B	C 
C! C!8+F$ $
F10F1c                      t          t                    j        j                                        } | dz                                  st                      }|dz  } | dz                                  r| ndS )zReturn the active Hermes git checkout, or None if this isn't a git install.

    Prefers the running code's location over the profile-scoped path
    because ``$HERMES_HOME/hermes-agent/`` may be a stale copy carried
    over by ``--clone-all``.
    rw   rX   N)r   r~   r   r   r{   r   )rC   r   s     r   _resolve_repo_dirr     so     H~~$+3355Hv%%'' 0%''/ 6)1133=88=r   ru   c           	          	 t          j        ddd|gdddt          |                     }n# t          $ r Y dS w xY w|j        dk    rdS |j        pd	                                }|pdS )
z4Resolve a git revision to an 8-character short hash.r5   z	rev-parsez	--short=8TrJ   rK   Nr    )r9   r:   rL   r   r<   r=   rN   )rC   ru   r@   values       r   _git_short_hashr     s    	Kc2H
 
 
    ttAt] b''))E=Ds   *- 
;;c           	         | pt                      } | dS t          | d          }t          | d          }|r|sdS d}	 t          j        g ddddt	          |                     }|j        dk    r*t          |j        pd	                                pd	          }n# t          $ r d}Y nw xY w||t          |d          d
S )z8Return upstream/local git hashes for the startup banner.Nzorigin/mainHEADr   )r5   rH   rI   zorigin/main..HEADTrJ   rK   0)upstreamlocalahead)r   r   r9   r:   rL   r<   rM   r=   rN   r   max)rC   r   r   r   r@   s        r   get_git_banner_stater   .  s    .,..Htx77HHf--E 5 tE???H
 
 
 !!-#4466=#>>E    !53ua==IIIs   AB B+*B+z9https://github.com/NousResearch/hermes-agent/releases/tag_latest_release_cachec           	      V   t           	t           pdS | pt                      } | da dS 	 t          j        g ddddt	          |                     }n# t
          $ r da Y dS w xY w|j        dk    rda dS |j        pd                                }|sda dS t           d	| }||fa t           S )
u  Return ``(tag, release_url)`` for the latest git tag, or None.

    Local-only — runs ``git describe --tags --abbrev=0`` against the
    Hermes checkout. Cached per-process. Release URL always points at the
    canonical NousResearch/hermes-agent repo (forks don't get a link).
    N )r5   describez--tagsz
--abbrev=0T   rK   r   r   /)
r   r   r9   r:   rL   r   r<   r=   rN   _RELEASE_URL_BASE)rC   r@   tagrh   s       r   get_latest_release_tagr   N  s    ($,,.,..H "t
777H
 
 
     "tt A "t=B
%
%
'
'C  "t
&
&
&
&C #J  s   (A A! A!c            
         dt            dt           d} t                      }|s| S |d         }|d         }t          |                    d          pd          }|dk    s||k    r|  d| S |d	k    rd
nd}|  d| d| d| d| d
S )z;Return the version label shown in the startup banner title.zHermes Agent vz ()r   r   r   r   u    · upstream rn   commitcommitsu
    · local z (+z	 carried )ro   RELEASE_DATEr   rM   r+   )basestater   r   r   carried_words         r   format_banner_version_labelr   x  s    6G66|666D ""E Z H'NE		'""'a((EzzX&&//X///$zz88yL^^^^U^^u^^|^^^^r   _update_resultc                  `    d } t          j        | d          }|                                 dS )z4Kick off update check in a background daemon thread.c                  T    t                      at                                           d S N)r   r   _update_check_donesetr   r   r   _runz#prefetch_update_check.<locals>._run  s%    *,,     r   T)targetdaemonN)	threadingThreadstart)r   ts     r   prefetch_update_checkr     s9    ! ! ! 	T222AGGIIIIIr         ?r8   c                 F    t                               |            t          S )z:Get result of prefetched check. Returns None if not ready.r]   )r   waitr   r]   s    r   get_update_resultr     s    G,,,r   tokensc                    | dk    r5| dz  }t          |          }t          ||z
            dk     r| dS |ddS | dk    r5| dz  }t          |          }t          ||z
            dk     r| dS |ddS t          |           S )uL   Format a token count for display (e.g. 128000 → '128K', 1048576 → '1M').i@B g?Mz.1fi  K)roundabsrL   )r   valroundeds      r   _format_context_lengthr     s    y **sW}$$=== }}}}	5un**sW}$$=== }}}}v;;r   toolset_namec                 L    | sdS |                      d          r
| dd         n| S )zANormalize internal/legacy toolset identifiers for banner display.unknown_toolsNi)endswith)r   s    r   _display_toolset_namer     s=     y   **	SbSr   consolemodelrG   toolsenabled_toolsets
session_idcontext_lengthc                 (   ddl m}m}	 |ddl m} |pg }|pg } |d          \  }
}t	                      }t	                      }|D ]}|                    dd          }|	                    |i           }|                    d	g           }|                    d
          r|                    |           o|                    |           t          j        d          }|	                    dd           |	                    dd           t          dd          }t          dd          }t          dd          }t          dd          }	 ddlm}  |            }t          |d          r|j        r|j        nt          }n# t           $ r d}t          }Y nw xY wd|dg}d|v r|                    d          d         n|}|                    d          r
|dd         }t'          |          dk    r|dd          d!z   }|rd"| d#| d$t)          |           d%nd}|                    d&| d$| d'| d"| d#| d(           t-          j        d)          r|                    d*| d+           |                    d,| d$| d'           |r|                    d,| d-| d'           d.                    |          }d/| d0g}i }|D ]S} | d1         d         }!t3           ||!          pd2          }"|                    |"g                               |!           T|D ]}|                    d3|                    dd4                    }#t3          |#          }$|$|vrg ||$<   |                    d	g           D ]'}!|!||$         vr||$                             |!           (t7          |                                          }%|%dd5         }&t'          |%          d5z
  }'|&D ]}"||"         }(g })t7          |(          D ]Z}*|*|v r|)                    d6|* d'            |*|v r|)                    d7|* d'           >|)                    d&| d$|* d'           [d8                    |)          }+t'          d8                    t7          |(                              d9k    r g },d}-t7          |(          D ]\}*|-t'          |*          z   d:z   d;k    r|,                    d!            n+|,                    |*           |-t'          |*          d:z   z  }-]g })|,D ]v}*|*d!k    r|)                    d<           |*|v r|)                    d6|* d'           <|*|v r|)                    d7|* d'           Z|)                    d&| d$|* d'           wd8                    |)          }+|                    d,| d$|" d=|+            |'dk    r|                    d,| d>|' d?           	 dd@lm}.  |.            }/n# t           $ r g }/Y nw xY w|/r|                    d           |                    d/| dA           |/D ]p}0|0dB         r>|                    d,| d$|0d          dC| dD|0dE          dF| dG| d$|0d	          dH           H|                    d6|0d          dI|0dE          dJ           q|                    d           |                    d/| dK           t?                      }1tA          dL |1!                                D                       }2|1rt7          |1                                          D ]}3t7          |1|3                   }4t'          |4          d5k    r7|4dd5         }5d8                    |5          dMt'          |4          d5z
   dNz   }6nd8                    |4          }6t'          |6          dOk    r|6ddP         d!z   }6|                    d,| d$|3 dQ| d$|6 d'	           n|                    d,| dR           |                    d           |/rtA          dS |/D                       nd}7t'          |           dT|2 dUg}8|7r|8                    |7 dV           |8                    dW           	 ddXl"m#}9 ddYl$m%}:  |9 |:                      dZk    r|                    d/| d[| d\| d]           n# t           $ r Y nw xY w	 dd^l&m'};  |;            }<|<r%|<d_k    r|                    d/| d`| d$|< d'           n# t           $ r Y nw xY w|                    d,| d$da                    |8           d'           	 tQ          dbc          }=|=r|=dk    rldddl$m)}>m*}? |=dk    r2|=dek    rdfndg}@|                    dh|= di|@ dj |?             dk           n, |>            }Adl}B|Ar	|Bdm|A dnz  }B|                    |B           n# t           $ r Y nw xY wd.                    |          }C|+                    ||C           t          dodp          }Dt          dqdr          }EtY                      }Ft[                      }G|Gr|G\  }H}Id/|D ds|I d$|F dt}Jn	d/|D d$|F d'}Jt]          ||J|Edu          }K| /                                 ta          j1                    j2        }L|Ldvk    rP|rt          |dw          r|j3        r|j3        nth          }M| /                    |M           | /                                 | /                    |K           dS )xa  Build and print a welcome banner with caduceus on left and info on right.

    Args:
        console: Rich Console instance.
        model: Current model name.
        cwd: Current working directory.
        tools: List of tool definitions.
        enabled_toolsets: List of enabled toolset names.
        session_id: Session identifier.
        get_toolset_for_tool: Callable to map tool name -> toolset name.
        context_length: Model's context window size in tokens.
    r   )check_tool_availabilityTOOLSET_REQUIREMENTSN)get_toolset_for_toolT)quietr)   r   r   check_fn)r      )paddingleftcenter)justifyrightbanner_accentz#FFBF00
banner_dimz#B8860Bbanner_textz#FFF8DCsession_borderz#8B8682r   banner_heror   r2   z.gguf      z...z [dim u   ]·[/] [dim ]z context[/][z[/]z]Nous Research[/]HERMES_YOLO_MODEu    [bold red]⚠ YOLO mode[/] [dim u%   ]— all approval prompts bypassed[/]z[dim z
]Session: 
z[bold z]Available Tools[/]functionotheridr      z[red]z[yellow]z, -   r   *   z[dim]...[/]z:[/] z](and z more toolsets...)[/])get_mcp_statusz]MCP Servers[/]	connectedz[/] [z](	transportz
)[/] [dim u	   ]—[/] [z tool(s)[/]z
[/] [dim](u   )[/] [red]— failed[/]z]Available Skills[/]c              3   4   K   | ]}t          |          V  d S r   )len.0ss     r   	<genexpr>z'build_welcome_banner.<locals>.<genexpr>`  s(      CC!s1vvCCCCCCr   z +z more2   /   z:[/] [z]No skills installed[/]c              3   *   K   | ]}|d          
dV  dS )r   rn   Nr   r   s     r   r   z'build_welcome_banner.<locals>.<genexpr>q  s+      @@a;@@@@@@@r   z toolsz skillsz MCP serversz/help for commands)get_current_runtime)load_configcodex_app_serverz]Runtime:[/] [z]codex app-server[/] [dim z,](terminal/file ops/MCP run inside codex)[/])get_active_profile_namedefaultz]Profile:[/] [u    · r   r]   )get_managed_update_commandrecommended_update_commandrn   r   r   u   [bold yellow]⚠  u%    behind[/][dim yellow] — run [bold]z[/bold] to update[/]u$   [bold yellow]⚠ update available[/]u   [dim yellow] — run [bold]z
[/bold][/]banner_titlez#FFD700banner_borderz#CD7F32z][link=z
[/link][/])titleborder_styler   _   banner_logo)5model_toolsr   r   r   r   r+   updater
   grid
add_columnr   r   r   hasattrr   HERMES_CADUCEUSr   r>   r   r   r   r-   rx   getenvjoinr   r,   sortedkeystools.mcp_toolr   r1   sumvalueshermes_cli.codex_runtime_switchr   hermes_cli.configr   hermes_cli.profilesr   r   r   r   add_rowr   r   r	   printshutilget_terminal_sizecolumnsr  HERMES_AGENT_LOGO)Nr   r   rG   r   r   r   r   r   r   r   _unavailable_toolsetsdisabled_tools
lazy_toolsitemr   ts_reqtools_in_tslayout_tableaccentdimr   session_colorr   _bskin_hero
left_linesmodel_shortctx_strleft_contentright_linestoolsets_dicttool	tool_nametoolset
toolset_iddisplay_namesorted_toolsetsdisplay_toolsetsremaining_toolsets
tool_namescolored_namesr)   	tools_strshort_nameslengthr   
mcp_statussrvr/   total_skillsr'   skill_namesdisplay_names
skills_strmcp_connectedsummary_partsr   	_load_cfgr   _profile_namerv   r   r   commits_wordmanaged_cmdlineright_contenttitle_colorborder_colorversion_labelrelease_info_tag_urltitle_markupouter_panel
term_width_logosN                                                                                 r   build_welcome_bannerrV    s"   $ JIIIIIII#444444KRE'-255DAAAAUUN J$ / /xx++%)),;;hhw++::j!! 	/k****!!+....:f---LFH555GV444 )44F
lI
.
.C}i00D 0)<<M :::::: ""&-fm&D&DpI[p""ap        eRJ*-,,%++c""2&&EKG$$ '!#2#&
;"!#2#&.es{asaaaa.D^.T.Taaaay{Gi&ii;ii7ii#iiSViiijjj	y#$$ igSggghhh,c,,C,,,--- LJ-JJ:JJJKKK99Z((L7F7778K%'M @ @$V,	'(<(<Y(G(G(R7SS  "--44Y????$ > >XXdDHHVY$?$?@@
,Z88},,*,M,''2.. 	> 	>Il ;;;l+229===	> ]//1122O&rr*_--1# !D !D"7+
:&& 	; 	;D~%%$$%6T%6%6%67777##$$%9%9%9%9::::$$%9%9%9%9%9%9::::IIm,,	tyy
++,,--22KFz** ( (CII%)B..&&u---E""4(((#d))a-'M# ? ?5==!((7777^++!(():):):):;;;;Z''!(()=D)=)=)=>>>>!(()=T)=)=D)=)=)=>>>>		-00IB3BBBByBBCCCCAW3WW.@WWWXXX111111#^%%

   


  2;F;;;<<< 
	 
	C; 	""KC K K#f+ K KD K KC<L K KK K*.K K14WK K K   
 ""*CK * *3{3C * * *   
 r<<<<===-//CC'9'@'@'B'BCCCCCL A1668899 		U 		UH !3H!=>>K;!## +BQB!YY}558XS=M=MPQ=Q8X8X8XX

!YY{33
:##'_u4
SsSSXSSTSSJSSSTTTT		U 	?3???@@@rDNUC@@:@@@@@@TUME

***|,D,D,DEM =;;;<<<-...	GGGGGG>>>>>>yy{{++/AAAJ J Jt J JJ J J      ??????//11 	Y]i77WWWdWW]WWWXXX    DsDDV[[%?%?DDDEEE"3///&A++````````zz+1Q;;xxI""e e e e e2L2L2N2Ne e e    98::= RQ+QQQQD""4(((    IIk**M}555ni88K	::L/11M)++L A!
dTTTDTT=TTT@@@m@@@!	  K MMOOO)++3JR&,}1O1O}TZTf}""l}eMM+s\   5F FF'W8 8XXAc 
cc7d 
ddBg 
g! g!)rX   r   )r   )NNNNN)L__doc__rd   loggingrx   r  r9   r   rz   pathlibr   hermes_constantsr   typingr   r   r   rich.consoler   
rich.panelr	   
rich.tabler
   prompt_toolkitr   r   prompt_toolkit.formatted_textr   r   	getLogger__name__logger_GOLD_BOLD_DIM_RSTrL   r   r   r"   
hermes_clir#   ro   r$   r   r  r  r1   r}   r?   r;   rM   rB   rO   rT   rW   rl   rq   r   r   r   dictr   r   r   __annotations__r   r   r   Eventr   r   floatr   r   r   rV  r   r   r   <module>rm     s    
   				                 , , , , , , ' ' ' ' ' ' ' ' ' '                         < < < < < < : : : : : :		8	$	$ 	!    S C C     s s     P O O O O O O OF j,d3S	>2    2 '   G Ic Ihsm I I I I*4 HSM    0c eCHo    
 
 
# 
 
 
 
- - - - -$/8C= / / / /d>8D> > > > >d  #    $J J8D> JXd^ J J J J8 P )- x - - -'! '!Xd^ '!x '! '! '! '!T_S _ _ _ _, !% $ $ $$Y_&&    u x}    3 3    "      .27;+/.2/3| |' |# |C | $T
|+/9| &)|
 *-| | | | | |r   