Ë
    âß²jÆ	  ã                  ó’   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
  ej                  e«      ZdZdZddd	œdd
„Zddœdd„Zy)z4Small shared time-formatting helpers for CLI output.é    )ÚannotationsN)Údatetime)ÚAnyÚOptionalg        g   @ÝJïAÚ	timestamp©Ú
session_idÚfieldc               ó>  — | �| dk(  ry	 t        | t        «      rt        | j                  «       «      n
t        | «      }t        |cxk  r	t        k  s'n t        j                  d|| |r
d|› �«       yd«       y|S # t        t
        f$ r t        j                  }Y Œ]w xY w)a-  A stored timestamp cell as float epoch seconds, or ``None`` when it cannot be trusted.

    Numbers, numeric strings and ``datetime`` are accepted; anything else, non-finite values and
    values outside ``EPOCH_MIN..EPOCH_MAX`` return ``None`` after a WARNING naming the session so
    the corrupt row can be found. ``None``/``""`` mean "unset" and stay silent. Every reader that
    renders a row timestamp goes through here (a bad row degrades to one ``?`` cell, never a dead
    command) and every writer uses it to refuse persisting a new bad row.
    NÚ zIgnoring corrupt %s %r%sz on session )Ú
isinstancer   Úfloatr   Ú	TypeErrorÚ
ValueErrorÚmathÚnanÚ	EPOCH_MINÚ	EPOCH_MAXÚloggerÚwarning)Úvaluer	   r
   Útss       ú7/home/ubuntu/.hermes/hermes-agent/hermes_cli/timefmt.pyÚcoerce_epochr      s™   € ð €}˜ šØðÜ)3°E¼8Ô)DŒU�5—?‘?Ó$Ô%Ì%ÐPUË,ˆô ˜Ô(œyÔ(Ü�‰Ð1°5¸%Ñ`jÀ<ÐPZÈ|ÐA\ÔsØð qsÔsØØ€Iøô ”zÐ"ò Ü�X‰XŠðús   Š4A: Á:BÂB)r	   c               ó:  — | rt        | |d¬«      x} €yt        j                  «       | z
  }|dk  ry|dk  rt        |dz  «      › d�S |dk  rt        |dz  «      › d	�S |d
k  ry|dk  rt        |dz  «      › d�S t	        j
                  | «      j                  d«      S )z_Format a timestamp as relative time (e.g., '2h ago', 'yesterday'); ``?`` when unset or corrupt.Úlast_activer   ú?é<   zjust nowi  zm agoi€Q zh agoi £ Ú	yesterdayi€:	 zd agoz%Y-%m-%d)r   Ú_timeÚtimeÚintr   ÚfromtimestampÚstrftime)r   r	   Údeltas      r   Úrelative_timer&   +   s´   € áœ R°JÀmÔTÐT�"Ð]ØÜ�J‰J‹L˜2Ñ€EØˆr‚zØØˆt‚|Ü�e˜b‘j“/Ð" %Ð(Ð(Øˆu‚}Ü�e˜d‘lÓ#Ð$ EÐ*Ð*Øˆv‚~ØØˆv‚~Ü�e˜e‘mÓ$Ð% UÐ+Ð+Ü×!Ñ! "Ó%×.Ñ.¨zÓ:Ð:ó    )r   r   r	   úOptional[str]r
   ÚstrÚreturnzOptional[float])r	   r(   r*   r)   )Ú__doc__Ú
__future__r   Úloggingr   r!   r    r   Útypingr   r   Ú	getLoggerÚ__name__r   r   r   r   r&   © r'   r   ú<module>r2      sO   ðÙ :å "ã Û Û Ý ß  à	ˆ×	Ñ	˜8Ó	$€ð €	Ø€	ð =AÈ{õ ð* 6:ö ;r'   