§
    ÷žyjt  ã                  ó†   — d Z ddlmZ ddlmZ ddlmZmZmZ dZ	dZ
 G d„ dee¦  «        Zd d„Zd!d„Zd"d„Zddddœd#d„ZdS )$uF  Shared session activity observation contract (#72016 / #72039).

Observation-only: timestamp + bounded description/provenance.
Notification, timeout, kill, and retry policy stay in their own components.
Consumers distinguish work (API / tool / compacting / stalled) from the
description text itself â€” there is no separate phase enum.

Provenance is a small closed enum of *noun* sources (where the stamp came
from). The default agent activity clock (``_touch_activity``) stamps
``unknown`` unless a caller passes an explicit ``provenance=``; named
values are for special writers.
é    )Úannotations)ÚEnum)ÚAnyÚMappingÚOptionaléx   g      N@c                  ó"   — e Zd ZdZdZdZdZdZdS )ÚActivityProvenancez3Where a durable/in-memory activity stamp came from.Úunknownzagent.compressionzagent.compression_timeoutzagent.compression_cooldownN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚUNKNOWNÚAGENT_COMPRESSIONÚAGENT_COMPRESSION_TIMEOUTÚAGENT_COMPRESSION_COOLDOWN© ó    ú</home/ragecks/.hermes/hermes-agent/agent/session_activity.pyr
   r
       s-   € € € € € Ø=Ð=à€Gà+ÐØ ;ÐØ!=ÐÐÐr   r
   ÚdescriptionúOptional[str]ÚreturnÚstrc                óŒ   — | pd                      ¦   «         }t          |¦  «        t          k    r|S |dt          dz
  …         dz   S )z?Clamp free-form activity text to the shared description budget.Ú Né   u   â€¦)ÚstripÚlenÚACTIVITY_DESCRIPTION_MAX)r   Útexts     r   Úbound_activity_descriptionr"   *   sK   € àÐ˜2×$Ò$Ñ&Ô&€DÝ
ˆ4�y„yÕ,Ò,Ð,ØˆØÐ.Õ*¨QÑ.Ð.Ô/°%Ñ7Ð7r   Ú
provenanceú"Optional[ActivityProvenance | str]c                ó´   — t          | t          ¦  «        r| S | pd                     ¦   «         }	 t          |¦  «        S # t          $ r t          j        cY S w xY w)zBReturn a known provenance, or ``UNKNOWN`` when unset/unrecognized.r   )Ú
isinstancer
   r   Ú
ValueErrorr   )r#   Úvalues     r   Únormalize_activity_provenancer)   2   sp   € õ �*Õ0Ñ1Ô1ð ØÐØÐ˜2×$Ò$Ñ&Ô&€Eð*Ý! %Ñ(Ô(Ð(øÝð *ð *ð *Ý!Ô)Ð)Ð)Ð)ð*øøøs   ¯> ¾AÁAÚagentr   ÚNonec                ó8   — 	 d| _         dS # t          $ r Y dS w xY w)am  Clear the agent's durable SessionDB activity persist rate-limit window.

    The next ``_touch_activity`` / ``_persist_session_activity_if_due`` will
    write through even if a stamp landed within the last 60s. Used for
    terminal compression labels that must not stay stuck on mid-compress
    text (e.g. "context compression in progress" after /compress).
    g        N)Ú#_session_activity_last_persist_monoÚ	Exception)r*   s    r   Ú%reset_session_activity_persist_windowr/   ?   s7   € ðØ47ˆÔ1Ð1Ð1øÝð ð ð Øˆˆðøøøs   ‚ ‹
˜N)Úlast_activity_provenanceÚnowÚextraÚlast_activity_atúOptional[float]Úlast_activity_descriptionr0   r1   r2   úOptional[Mapping[str, Any]]údict[str, Any]c           	     óZ  — ddl }| �t          | ¦  «        nd}t          |�|n|                      ¦   «         ¦  «        }t          |¦  «        }t          |¦  «        }	|�t	          ||z
  d¦  «        nd}
|||	j        |
||||	j        dœ}|r"|                     t          |¦  «        ¦  «         |S )zABuild the shared activity snapshot (plus optional caller extras).r   Nr   )r3   r5   r0   Úseconds_since_activityÚlast_activity_tsÚlast_activity_descr   r#   )ÚtimeÚfloatr"   r)   Úroundr(   ÚupdateÚdict)r3   r5   r0   r1   r2   Ú_timeÚwhenÚclockÚdescÚprovÚelapsedÚsnaps               r   Úbuild_activity_snapshotrH   M   sÍ   € ð ÐÐÐà&6Ð&B�5Ð!Ñ"Ô"Ð"È€DÝ˜˜�#�#¨e¯jªj©l¬lÑ;Ô;€EÝ%Ð&?Ñ@Ô@€DÝ(Ð)AÑBÔB€DØ(,Ð(8�e�E˜D‘L !Ñ$Ô$Ð$¸d€Gà Ø%)Ø$(¤JØ")à Ø"ØØ”jð
ð 
€Dð ð !Ø�Š•D˜‘K”KÑ Ô Ð Ø€Kr   )r   r   r   r   )r#   r$   r   r
   )r*   r   r   r+   )r3   r4   r5   r   r0   r$   r1   r4   r2   r6   r   r7   )r   Ú
__future__r   Úenumr   Útypingr   r   r   r    Ú/SESSION_ACTIVITY_HEARTBEAT_MIN_INTERVAL_SECONDSr   r
   r"   r)   r/   rH   r   r   r   ú<module>rM      sþ   ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )àÐ ð 37Ð /ð>ð >ð >ð >ð >˜˜dñ >ô >ð >ð8ð 8ð 8ð 8ð
*ð 
*ð 
*ð 
*ðð ð ð ð$ DHØØ)-ðð ð ð ð ð ð ð r   