+
    lHàj*  ã                   ó´   € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ]P                  ! R4      tRt^@tRtR tR R ltR	 R
 ltRR R lltR# )a-  Bounded, profile-local receipts for completed terminal processes.

Receipts are read through process_manage, never replayed as notifications or
adopted as live PIDs. Each producer writes its own file so independent one-shot
parents cannot overwrite each other's results in the running-PID checkpoint.
N)Úmake_user_dir)Úget_hermes_home)Úatomic_json_writeztools.process_registryc                 ó  € \        4       R,          R,          p \        P                  ! 4       \        ,
          p. pV P                  R4       FJ  p VP	                  4       P
                  pWA8  d   VP                  RR7       K8  VP                  WC34       KL  	  VP                  R RR7       V\        R  F  w  rSVP                  RR7       K  	  VR\          UUu. uF  w  rSVNK	  	  upp#   \         d     K±  i ; iu uppi )	z>Prune by completion time, not start time (jobs can take days).Úlogsúprocess-resultszproc_*.jsonT)Ú
missing_okc                 ó:   € V ^ ,          V ^,          P                   3# )é    )Úname)Úitems   &ÚC/home/ubuntu/.hermes/hermes-agent/tools/process_registry_results.pyÚ<lambda>Ú_result_paths.<locals>.<lambda>+   s   €  D¨¥G¨T°!­W¯\©\Ñ#:ó    )ÚkeyÚreverseN)r   ÚtimeÚRESULT_RETENTION_SECONDSÚglobÚstatÚst_mtimeÚunlinkÚappendÚFileNotFoundErrorÚsortÚMAX_RETAINED_RESULTS)Ú	directoryÚcutoffÚretainedÚpathÚmodifiedÚ_s         r   Ú_result_pathsr#      sè   € äÓ! FÕ*Ð->Õ>€IÜ�YŠY‹[Ô3Õ3€FØ€HØ—‘˜}Ö-ˆð	Ø—y‘y“{×+Ñ+ˆHØÔ Ø—‘ t�Ö,à—‘ Ð 0Ö1ñ .ð ‡M�MÑ:ÀD€MÔIØÔ0Ð1Ó2‰ˆØ�‰˜tˆÖ$ñ 3à (Ð)>Ô*>Ñ ?Ô@Ñ ?‘W�Q‹DÑ ?Ò@Ð@øô !ô 	Úð	üó
 As   Á2C/ÂC/ÃDÃ/C>Ã=C>c                ó   € V ^8„  d   QhRR/# )é   ÚreturnN© )Úformats   "r   Ú__annotate__r)   1   s   € ÷ bñ b dñ br   c           
      óz  € ^ RI HpHp ^ RIHp V P
                  ;_uu_ 4        \         Uu/ uF  qD\        W4      bK  	  ppV P                  V) R VR&   RRR4       T! XR,          VR,          RR7      VR&   V! VR,          RRR7      VR&   \        4       R	,          R
,          p ^ RI
Hp V! V4       \        VRRRR7       \        W`P                   R2,          VRR7       \        4        R# u upi   + '       g   i     L©; i  \          d'    \"        P%                  RT P                  RR7        R# i ; i)r
   )Úredact_sensitive_textÚredact_terminal_output)ÚMAX_OUTPUT_CHARSNÚoutputÚcommandT)Úforce)Ú	code_filer0   r   r   )Úassert_named_profile_home_liveiÀ  )ÚmodeÚparentsÚexist_okz.jsoni€  )r3   z,Could not retain completed process result %s©Úexc_info)Úagent.redactr+   r,   Útools.process_registryr-   Ú_lockÚ_RESULT_FIELDSÚgetattrÚoutput_bufferr   Úhermes_constantsr2   r   r   Úidr#   ÚOSErrorÚloggerÚwarning)Úsessionr+   r,   r-   r   Úrecordr   r2   s   &       r   Úsave_completed_resultrE   1   s  € ßJÝ7à	��‹Ý8FÓG¹°”w˜wÓ,Ò,¹ˆÐGØ"×0Ñ0Ð2BÐ1BÐ1CÐDˆˆxÑ÷ 
ñ .¨f°XÕ.>ÀÀyÕ@QÐY]Ô^€Fˆ8ÑÙ-¨f°YÕ.?È4ÐW[Ô\€Fˆ9ÑÜÓ! FÕ*Ð->Õ>€IðbÝCÙ& yÔ1Ü�i e°TÀDÕIÜ˜)¯©¨°EÐ&:Õ:¸FÈÕOÜŽùò H÷ 
�ûô ô bä�‰ÐEÀwÇzÁzÐ\`ˆ×aðbús/   £	C6¬C1Á C6Â'AD	 Ã1C6Ã6D	Ä	-D:Ä9D:c                óJ   € V ^8„  d   QhR\         R\         R,          R\        /# )r%   ÚownerÚparentNr&   )ÚstrÚbool)r(   s   "r   r)   r)   G   s%   € ÷ ñ œð ¤S¨4¥Zð ´Dñ r   c                 ó¸   € V'       g   R # W8X  d   R# ^ RI Hp V! RR7      p VP                  V4      V 8H  VP                  4        #   TP                  4        i ; i)FT)Ú	SessionDB)Ú	read_only)Úhermes_staterL   Úget_compression_tipÚclose)rG   rH   rL   Údbs   &&  r   Ú_owns_resultrR   G   sJ   € ßÙØ„ÙÝ&ñ 
˜TÔ	"€BðØ×%Ñ% fÓ-°Ñ6à
�‰�
øˆ�‰�
ús   £A ÁAc                ó0   € V ^8„  d   QhR\         R\        /# )r%   Úprefixr&   )rI   Údict)r(   s   "r   r)   r)   W   s   € ÷  ñ  ¤3ð  ´ñ  r   c                ó|  € ^ RI Hp ^ RIHp V! RR4      pV'       g   / # / p \	        4       pT EF  pTP                  P                  T 4      '       g   K'   \        P                  ! TP                  RR	7      4      pTR
,          TP                  8w  g%   \        P                  ! RTR
,          4      '       g   KŒ  \        Y7P!                  R4      4      '       g   K®  T! R/ \"         Uu/ uF  qˆYx,          bK  	  upBRRRTR,          /B p	T	P$                  P'                  4        Y”T	P(                  &   EK  	  T#   \
         d    \        P                  RRR7       Tu # i ; iu upi   \
        \*        \,        \.        \0        P2                  3 d(    \        P5                  RTP6                  RR7        EK‹  i ; i)zKRestore read-only snapshots; no process handles, watchers, or queue events.)ÚProcessSession)Úget_session_envÚHERMES_SESSION_IDÚ z'Could not read retained process resultsTr6   z	utf-8-sig)Úencodingr?   z
proc_[\w]+Úparent_session_idÚexitedr=   r.   z%Skipping unreadable process result %sr'   )r9   rW   Úgateway.session_contextrX   r#   r@   rA   rB   ÚstemÚ
startswithÚjsonÚloadsÚ	read_textÚreÚ	fullmatchrR   Úgetr;   Ú_completion_eventÚsetr?   Ú
ValueErrorÚKeyErrorÚ	TypeErrorÚsqlite3ÚErrorÚdebugr   )
rT   rW   rX   rG   ÚresultsÚpathsr    rD   r   rC   s
   &         r   Úload_completed_resultsrq   W   s{  € å5å7áÐ/°Ó4€EßØˆ	Ø€GðÜ“ˆô ˆØ�y‰y×#Ñ# F×+Ò+Ùð	\Ü—Z’Z §¡¸ Ó DÓEˆFØ�d�|˜tŸy™yÔ(´·²¸]ÈFÐSWÍL×0YÒ0YÙÜ §z¡zÐ2EÓ'F×GÒGÙÙ$ñ Ý/=Ó>©~¨˜�Ò#©~Ñ>ñàðà+1°(Õ+;òˆGð ×%Ñ%×)Ñ)Ô+Ø")�G—J‘JÔñ ð" €Nøô) ô Ü�‰Ð@È4ˆÔPØŠðüò ?øô
 œ¤X¬y¼'¿-¹-ÐHô 	\Ü�L‰LÐ@À$Ç)Á)ÐVZˆL×[Ð[ð	\úsC   £
D; ÁA!E*Â; E*ÃE*Ã)E%Ã::E*Ä;$E"Å!E"Å%E*Å*AF;Æ:F;i€:	 )r?   r/   ÚcwdÚtask_idÚowner_task_idÚsession_keyr\   Ú
started_atÚ	exit_codeÚcompletion_reasonÚtermination_sourceÚnotify_on_complete)rZ   )Ú__doc__ra   Úloggingrd   rl   r   Úhermes_dir_aclr   r>   r   Úutilsr   Ú	getLoggerrA   r   r   r;   r#   rE   rR   rq   r'   r   r   Ú<module>r€      sc   ðñó Û Û 	Û Û Ý (å ,Ý #à	×	Ò	Ð3Ó	4€à+Ð ØÐ ð€òAõ(bõ,÷  ñ  r   