+
    jHàjáv  ã                  ó$  € R t ^ RIHt ^ RI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 ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHtHtHt ]P4                  ! ]4      tRctRdtR	tR
t ReR lt!R R lt"RRRRRR/t#RRR^RRRR/R R llt$R^RR/R R llt%R R lt&R R lt'R R  lt(]3R! R" llt)]3R# R$ llt*RfR% R& llt+R' R( lt,RgR) R* llt-R+ R, lt.]
! RR-7       ! R. R/4      4       t/R0 R1 lt0R2 R3 lt1R4 R5 lt2R6 R7 lt3R8 R9 lt4R: R; lt5R< R= lt6R> R? lt7R@ RA lt8RB RC lt9RD RE lt:RF RG lt;RHRI/RJ RK llt<RL RM lt=RN RO lt>RP RQ lt?RR RS lt@RT RU ltARVRRWRRXRRYRRZRR[RR\RIR]RIRR/	R^ R_ lltBR` Ra ltC]Rb8X  d
   ]C! 4        R# R# )hz�Passive source update decisions for one exact installation and profile.

No fetch, lock repair, or Git writes. Desktop, CLI, and dashboard share this owner.
)ÚannotationsN)Ú	dataclass)ÚPath)ÚOptional©Úquote)Úget_hermes_home)ÚOFFICIAL_REPOSITORYÚ_GITHUB_ORIGINÚresolve_source_targeti  g       @c                ó8   €  V ! 4       #   \          d    Tu # i ; i©N)Ú	Exception)ÚfnÚdefaults   &&Ú</home/ubuntu/.hermes/hermes-agent/hermes_cli/source_check.pyÚ_quietr      s"   € ðÙ‹tˆøÜô ØŠðús   ‚	 ‰˜c               ó   € V ^8„  d   QhRR/# )é   Úreturnzdict[str, str]© )Úformats   "r   Ú__annotate__r   %   s   € ÷ ñ ˜ñ ó    c                 ó†   € ^ RI Hp Hp V! 4       pR F  pVP                  VR4       K  	  RVR&   VP	                  V 4       V# )a8  Keep read-only Git probes in their explicit cwd, not an inherited worktree.

No probe may lazy-fetch from a partial clone's promisor remote: asking about
an upstream tip the clone never fetched would download its history, and the
probe timeout kills only git itself, orphaning the fetch (see NO_LAZY_FETCH_ENV).
)ÚNO_LAZY_FETCH_ENVÚnoninteractive_git_envNÚ0ÚGIT_OPTIONAL_LOCKS)ÚGIT_DIRÚGIT_WORK_TREEÚGIT_COMMON_DIRÚGIT_INDEX_FILEÚGIT_OBJECT_DIRECTORYÚ GIT_ALTERNATE_OBJECT_DIRECTORIESÚGIT_SHALLOW_FILEÚGIT_NAMESPACEÚGIT_LITERAL_PATHSPECSÚGIT_GLOB_PATHSPECSÚGIT_NOGLOB_PATHSPECSÚGIT_ICASE_PATHSPECS)Úhermes_cli._subprocess_compatr   r   ÚpopÚupdate)r   r   ÚenvÚkeys       r   Úsource_git_envr0   %   sM   € ÷ Xá
 Ó
"€Cónˆð 	�‰��TÖñnð !$€CÐÑØ‡J�JÐ Ô!Ø€Jr   ÚtextTÚencodingzutf-8ÚerrorsÚreplaceÚcwdÚtimeoutÚgitc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   Úargsú	list[str]r5   zOptional[Path]r6   Úintr1   Úboolr7   Ústrr   )r   s   "r   r   r   =   s1   € ÷ ñ �9ð  nð Àcð ÐUYð Øñr   c               ó   € ^ RI Hp RV! 4       R\        4       R\        P                  /p \        P
                  ! V.V O3RRRTRVe   \        V4      MR	/V'       d   \        M/ BVBR
R/B #   \         d     R	# i ; i)zNRead Git state without prompts, optional index writes, or inherited targeting.)Úwindows_hide_flagsÚcreationflagsr.   ÚstdinÚcapture_outputTr6   r5   NÚcheckF)	r+   r?   r0   Ú
subprocessÚDEVNULLÚrunr=   Ú_GIT_TEXT_KWr   )r9   r5   r6   r1   r7   r?   Úkwargss   &$$$$  r   Ú_git_runrI   =   s¤   € õ Aà#Ñ%7Ó%9¸5Ä.ÓBRÐT[Ô]g×]oÑ]oÐp€FðÜ�~Š~ØˆL�4ˆLñEØ)-ðEØ7>ðEØPSÒP_ÄCÈÄHÐeiðEç#�|¨ðEà06ñEà>CòEð 	Eøô ô Úðús   «2A. ÁA. Á.A=Á<A=c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   r9   r:   r5   r   r6   r;   r7   r=   r   úOptional[str]r   )r   s   "r   r   r   K   s0   € ÷ )ñ )�ið )¨ð )¸ð )Àcð )ÐVcñ )r   c               ó’   € \        WW#R 7      pVe   VP                  ^ 8w  d   R# VP                  ;'       g    RP                  4       # ))r5   r6   r7   NÚ )rI   Ú
returncodeÚstdoutÚstrip)r9   r5   r6   r7   Úresults   &$$$ r   Ú_git_stdoutrR   K   s>   € Ü�d¨WÔ>€FØ‚~˜×*Ñ*¨aÔ/ÙØ�M‰M×Ð˜R×&Ñ&Ó(Ð(r   c               ó    € V ^8„  d   QhRRRR/# )r   r9   r:   r   r<   r   )r   s   "r   r   r   R   s   € ÷ 9ñ 9�)ð 9 dñ 9r   c                óT   € \        V 3RR/VB pVRJ;'       d    VP                  ^ 8H  # )z=True when ``git <args>`` ran and exited 0 (output discarded).r1   FN)rI   rN   )r9   ÚkwrQ   s   &, r   Ú_git_okrV   R   s4   € ä�dÑ- Ð-¨"Ñ-€FØ˜Ð×8Ð8 &×"3Ñ"3°qÑ"8Ð8r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r9   r:   r5   r   r   úOptional[int]r   )r   s   "r   r   r   X   s!   € ÷ ñ �Yð ¨ð °ñ r   c               óh   a€ \        WR7      oSe!   SP                  ^ 8X  d   \        V3R l4      # R# )zJ``int`` of a successful ``git rev-list --count``-style command, else None.)r5   Nc                 óJ   <€ \        S P                  P                  4       4      # r   )r;   rO   rP   )rQ   s   €r   Ú<lambda>Ú_git_count.<locals>.<lambda>\   s   ø€ œc &§-¡-×"5Ñ"5Ó"7Ô8r   )rI   rN   r   )r9   r5   rQ   s   &$@r   Ú
_git_countr]   X   s/   ø€ ä�dÔ$€FØÒ˜f×/Ñ/°1Ô4ÜÔ8Ó9Ð9Ùr   c               ó    € V ^8„  d   QhRRRR/# )r   ÚvaluerK   r   r<   r   )r   s   "r   r   r   `   s   € ÷ mñ m˜ð m¨$ñ mr   c                óÆ   € \        V \        4      ;'       dK    \        V 4      ^(8H  ;'       d5    \        ;QJ d    R V  4       F  '       d   K   R# 	  R# ! R V  4       4      # )é(   c              3  ó*   "  € T F	  qR 9   x € K  	  R# 5i)Ú0123456789abcdefABCDEFNr   )Ú.0Úcs   & r   Ú	<genexpr>Ú_is_full_sha.<locals>.<genexpr>a   s   é € Ð>lÑfkÐabÐD\Ö?\Ófkùs   ‚FT)Ú
isinstancer=   ÚlenÚall)r_   s   &r   Ú_is_full_shark   `   sM   € Ü�eœSÓ!×lÐl¤c¨%£j°BÑ&6×lÐl¿3»3Ñ>lÑfkÓ>l¿3¼3Ðlº3Ðl¸3Ñ>lÑfkÓ>lÓ;lÐlr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úcurrent_revr=   Ú
target_revÚ
repositoryr   úOptional[dict]r   )r   s   "r   r   r   d   s)   € ÷ :ñ : ð :°#ð :À3ð :Ðaoñ :r   c                ó¦   a aa€ \        S 4      '       d   \        S4      '       g   R # \        V VV3R l4      p\        V\        4      '       d   V# R # )Nc            
     óT   <€ \         P                  ! \        R S RS  RS 24      4      # )úhttps://api.github.com/repos/z	/compare/z...)ÚjsonÚloadsÚ_request)rm   ro   rn   s   €€€r   r[   Ú!_github_compare.<locals>.<lambda>h   s-   ø€ œTŸZšZ¬Ø
'¨
 |°9¸[¸MÈÈZÈLÐYó)[ô \r   )rk   r   rh   Údict)rm   rn   ro   Úpayloads   fff r   Ú_github_comparerz   d   sC   ú€ ä˜×%Ò%¬,°z×*BÒ*BÙÜö \ó ]€Gä  ¬$×/Ò/ˆ7Ð9°TÐ9r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rm   r=   rn   ro   r   rX   r   )r   s   "r   r   r   m   s/   € ÷ dñ d¨ð d¸ð dÈ#ð dÐhuñ dr   c                ó¾   € \        WV4      pV'       d   VP                  R 4      MRp\        V\        4      '       d    \        V\        4      '       g
   V^ 8¼  d   V# R# )Úahead_byN)rz   Úgetrh   r;   r<   )rm   rn   ro   ry   Úaheads   &&&  r   Ú_github_compare_behindr€   m   sK   € Ü˜k°zÓB€Gß'.ˆG�K‰K˜
Ô#°D€EÜ˜u¤c×*Ò*´:¸eÄT×3JÒ3JÈuÐXYÌzˆ5ÐcÐ_cÐcr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úurlr=   Úacceptr   r   )r   s   "r   r   r   s   s!   € ÷ ñ �#ð ˜sð Àsñ r   c                ón  € ^ RI Hp V! 4       p \        WV4      #   \        P                  P
                   d?   pTe   TP                  R8w  d   TRJTn        h \        P                  R4        Rp?MRp?ii ; i \        YR4      #   \        P                  P
                   d   pRTn        h Rp?ii ; i)zÇGET an api.github.com resource with the credential ladder in hermes_cli.github_api.

A token GitHub rejects (401) drops this request to anonymous rather than
failing the check on a stale credential.
)Úgithub_tokenNi‘  z:GitHub rejected the configured token; retrying anonymouslyF)
Úhermes_cli.github_apir…   Ú_request_withÚurllibÚerrorÚ	HTTPErrorÚcodeÚhermes_authenticatedÚloggerÚdebug)r‚   rƒ   r…   ÚtokenÚexcs   &&   r   rv   rv   s   s£   € õ 3á‹N€EðSÜ˜S¨%Ó0Ð0øÜ�<‰<×!Ñ!ô SØŠ=˜CŸH™H¨œOØ',°DÐ'8ˆCÔ$ØÜ�‰ÐQ×RÑRûð	Súð
Ü˜S¨$Ó/Ð/øÜ�<‰<×!Ñ!ô Ø#(ˆÔ Øûðús,   � ›A8º4A3Á3A8Á<B ÂB4Â'B/Â/B4c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r‚   r=   rƒ   r�   ú
str | Noner   r   )r   s   "r   r   r   Š   s.   € ÷ Jñ J�sð J Cð J°
ð J¸sñ Jr   c                óZ  € R VRR/pV'       d	   RV 2VR&   \         P                  P                  WR7      p\         P                  P                  V^
R7      ;_uu_ 4       pVP	                  R	4      P                  R4      P                  4       uuRRR4       #   + '       g   i     R# ; i)
ÚAcceptz
User-Agentzhermes-update-checkzBearer ÚAuthorization)Úheaders©r6   ú	utf-8-sigNi    )rˆ   ÚrequestÚRequestÚurlopenÚreadÚdecoderP   )r‚   rƒ   r�   r–   ÚreqÚresponses   &&&   r   r‡   r‡   Š   s‡   € Ø˜ Ð/DÐE€GßØ%,¨U¨GÐ#4ˆ�Ñ Ü
�.‰.×
 Ñ
  Ð
 Ó
6€CÜ	�‰×	Ñ	 ¨RÐ	×	0Ô	0°HØ�}‰}˜_Ó-×4Ñ4°[ÓA×GÑGÓI÷ 
1×	0×	0Ó	0ús   Á .BÂB*	c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   ro   r’   Úbranchr=   Úrootr   r7   Úremoter   z#tuple[str | None, bool, str | None]r   )r   s   "r   r   r   “   s@   € ÷  Wñ  W˜Jð  W°ð  W¸4ð  WÀcð  WØð WØ+Nñ Wr   c           
     ó  € RpV '       dV   ^ RI HpHp  \        RV  R\	        VRR7       2R4      p\        V4      '       d   VR	R3# Vf   R
pVR8X  d   VR8X  d   RR	V3# \        RRRVRV 2.W#^
R7      p
V
f   RR	T;'       g    RV R23# V
P                  ^ 8X  d4   V
P                  '       d"   V
P                  P                  4       ^ ,          MRp\        V4      '       d   VR	R3# V
P                  ^8X  d   R# V
P                  ;'       g    RP                  4       P                  4       pRR	T;'       g    V'       d   RV RVR,           23# RV R23#   \
         d   p	RpT! Y—! 4       RJR7      p Rp	?	ELKRp	?	ii ; i)zš``(sha, missing, failure)``: ``missing`` only on a confirmed empty advertisement;
``failure`` names why no tip could be read, for the user-facing message.N)Údescribe_github_failurer…   rs   z	/commits/rM   )Úsafezapplication/vnd.github.sha)ÚauthenticatedFz1api.github.com returned no commit for the branch.ÚmainÚoriginz	ls-remotez--exit-codez--headsúrefs/heads/©r5   r7   r6   z`git ls-remote z` could not run.z
` failed: z` returned no tip.)NTNéÿÿÿÿ)r†   r¥   r…   rv   r   r   rk   rI   rN   rO   ÚsplitÚstderrrP   Ú
splitlines)ro   r¡   r¢   r7   r£   Úfailurer¥   r…   Úshar�   rQ   Údetails   &&&&&       r   Ú_branch_tipr³   “   s¿  € ð €GßßOð	]ÜÐ:¸:¸,ÀiÔPUÐV\ÐceÔPfÐOgÐhØ7ó9ˆCô
 ˜×ÒØ˜˜tÐ#Ð#ØŠ?ØIˆGØ�VÔ ¨(Ô 2Ø˜ Ð'Ð'Ü�{ M°9¸fÈÐTZÐS[ÐF\Ð]Ø°ô5€Fà‚~Ø�U˜G×QÐQ¨¸¸Ð@PÐ'QÐQÐQØ&,×&7Ñ&7¸1Ô&<ÀÇÇÀˆ&�-‰-×
Ñ
Ó
 Ö
"ÐTX€CÜ�C×ÒØ�E˜4ÐÐØ×Ñ˜AÔØÐØ�m‰m×!Ð!˜r×(Ñ(Ó*×5Ñ5Ó7€FØ�˜÷ Wð W×X^ o°f°X¸ZÈÈrÍ
À|Ð$Tð Wð WØ+:¸6¸(ÐBTÐ)UðWð Wøô' ô 	]ØˆCÙ-¨cÀÃÐW[ÐA[Ô\ŽGûð	]ús   ”E ÅFÅ$E<Å<Fc               ó    € V ^8„  d   QhRRRR/# )r   ry   zdict | Noner   z
list[dict]r   )r   s   "r   r   r   ¶   s   € ÷ ñ �kð  jñ r   c                óê  aa€ ^ RI H o . pT ;'       g    / P                  R. 4      p\        V\        4      '       d   TM.  EF#  p\        V\        4      '       d&   \        VP                  R4      \
        4      '       g   KA  VP                  R4      ;'       g    / pVP                  R4      ;'       g    / P                  R4      ;'       g    Ro\        VV3R l^ 4      pTP                  RVR,          R	\        VP                  R
R4      4      P                  R^4      ^ ,          R\        VP                  R4      ;'       g    / P                  RR4      4      RV/4       EK&  	  VRRR1,          # )é    )ÚdatetimeÚcommitsr±   ÚcommitÚ	committerÚdaterM   c                 ób   <€ \        S P                  S4      P                  4       R ,          4      # )éè  )r;   ÚfromisoformatÚ	timestamp)r·   Úwhens   €€r   r[   Ú_commits.<locals>.<lambda>¿   s#   ø€ œC × 6Ñ 6°tÓ <× FÑ FÓ HÈ4Õ OÔPr   ÚsummaryÚmessageÚ
ÚauthorÚnameÚatNr¬   )	r·   r~   rh   Úlistrx   r=   r   Úappendr­   )ry   ÚrowsÚentriesÚentryr¹   rÇ   r·   rÀ   s   &     @@r   Ú_commitsrÍ   ¶   s2  ù€ Ý!Ø€DØ�}ˆ}˜"×!Ñ! )¨RÓ0€GÜ& w´×5Ò5‘¸2Ó=ˆÜ˜%¤×&Ò&¬j¸¿¹À5Ó9IÌ3×.OÒ.OÙØ—‘˜8Ó$×*Ð*¨ˆØ—
‘
˜;Ó'×-Ð-¨2×2Ñ2°6Ó:×@Ð@¸bˆÜÕPÐRSÓTˆØ�‰�U˜E %�L¨)´S¸¿¹ÀIÈrÓ9RÓ5S×5YÑ5YÐZ^Ð`aÓ5bÐcdÕ5eØœs F§J¡J¨xÓ$8×$>Ð$>¸B×#CÑ#CÀFÈBÓ#OÓPÐRVÐXZð\÷ 	]ñ >ð ‘�"��:Ðr   )Úfrozenc                  ól   € ] tR t^Åt$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   RtR# )Ú	_CheckoutzGRead-only facts about the checkout under test, gathered once per check.r   r¢   r=   r7   rK   ÚembeddedÚheadÚcurrent_branchr©   ro   r<   Údirtyr   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__r   r   r   rÐ   rÐ   Å   s1   ‡ áQØ
ƒJØ	ƒHØÓØ
ÓØ!Ó!ØƒKØÓØ‡Kr   rÐ   c               ó   € V ^8„  d   QhRR/# )r   Úpathr   r   )r   s   "r   r   r   Ò   s   € ÷ Lñ L�Tñ Lr   c                ó"   a € \        V 3R  l4      # )c                 óP   <€ \         P                  ! S P                  R R7      4      # )r˜   )r2   )rt   ru   Ú	read_text©rÝ   s   €r   r[   Ú_read_json.<locals>.<lambda>Ó   s   ø€ œ$Ÿ*š* T§^¡^¸[ ^Ó%IÔJr   )r   rá   s   fr   Ú
_read_jsonrã   Ò   s   ø€ ÜÔJÓKÐKr   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   Ústamprx   r¢   r   Úexplicit_rootr<   rÑ   rK   r   rp   r   )r   s   "r   r   r   Ö   s1   € ÷ ñ ˜tð ¨4ð À4ð ÐS`ð Ðesñ r   c               óV  € ^ RI Hp ^ RIHp V P	                  R4      R8X  d   RRRV/# V P	                  R4      R9   g   V'       g   V! V4      R9   d   RR/# V'       g$   VR	,          P                  4       '       g   RRRR
/# V P	                  R4      R9  d   V'       g	   RRRRRR/# R# )zTFields explaining why this install cannot self-update from Git, or None when it can.)Údetect_install_method)ÚCOMMIT_BUILD_UPDATE_MESSAGEÚsourcezcommit-buildÚreasonrÃ   ry   znot-a-git-checkoutú.gitz+This install has no git checkout to update.ÚupdateMechanismNz"update-root-steward-owned-git-treezDThis installation is managed by its install method; use its updater.Úadvicezgit pull>   ÚlightÚbundledÚruntime>   ÚaptÚdocker)NÚself)Úhermes_cli.configrè   Úhermes_cli.update_contractré   r~   Úexists)rå   r¢   ræ   rÑ   rè   ré   s   &&$$  r   Ú_unsupported_reasonrø   Ö   s³   € å7ÝFà‡y�y�Ó˜nÔ,Ø˜.¨)Ð5PÐQÐQØ‡y�y�ÓÐ>Ô>ßÑ"7¸Ó"=ÐARÔ"RØÐ.Ð/Ð/ß˜T F�]×2Ñ2×4Ò4ØÐ.°	Ð;hÐiÐiØ‡y�yÐ"Ó#¨>Ô9Ç(ØÐ>ØÐaÐckÐmwðyð 	yár   c               ó    € V ^8„  d   QhRRRR/# )r   r7   r=   r   r   )r   s   "r   r   r   è   s   € ÷ ñ ˜ð  ñ r   c                óf   € V R8w  g   \         P                  ! V 4      '       d   V # ^ RIHp V! 4       # )aÏ  ``git`` as given, unless it is a bare ``git`` PATH lacks: then the git ``hermes update`` runs.

A Windows source install's only git is often the copy install.ps1 staged in PM's store, which
is on PATH only inside ``hermes update`` (``expose_pm_git``). Desktop and the dashboard pass a
bare ``git`` there, it dies with WinError 2, and the check reports ``head-unavailable``, which
Desktop shows as "couldn't reach the update server" while ``hermes update`` works.
r7   )Ú_git_executable)ÚshutilÚwhichÚhermes_cli.update_pause_recordrû   )r7   rû   s   & r   Ú_installed_gitrÿ   è   s*   € ð ˆe„|”v—|’| C×(Ò(Øˆ
Ý>áÓÐr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r¢   r   r7   r=   rÑ   rK   r   rÐ   r   )r   s   "r   r   r   ÷   s.   € ÷ [ñ [˜ð [ Cð [°=ð [ÀYñ [r   c           
     óz  € T;'       g    \        R R.WR7      pV'       d   RM\        . ROWR7      pV'       d   RM\        . R	OWR7      ;'       g    Rp\        P                  ! V4      pV'       d   \        MV'       d
   V^,          MRpV'       d   RM\	        \        RR.WR7      4      p\        WW#WEWx4      # )
ú	rev-parseÚHEAD©r5   r7   NrM   FÚstatusz--porcelain)r  z--abbrev-refr  )r£   zget-urlr©   )rR   r
   Ú	fullmatchr	   r<   rÐ   )	r¢   r7   rÑ   rÒ   rÓ   r©   Úmatchro   rÔ   s	   &&&      r   Ú_read_checkoutr  ÷   s–   € à×LÐL”{ K°Ð#8¸dÔL€Dß%‘T¬;Ò7\ÐbfÔ+p€Nß‰R¤+Ò.MÐSWÔ"a×"gÐ"gÐeg€FÜ×$Ò$ VÓ,€Eß(0Õ$Ç5°u¸Q¶xÈd€Jß‰E¤4¬°X¸}Ð4MÐSWÔ(aÓ#b€EÜ�T °È
ÓZÐZr   c               ó   € V ^8„  d   QhRR/# ©r   r   rK   r   )r   s   "r   r   r     s   € ÷ Gñ G¨-ñ Gr   c                ó¸   € \        V \        4      '       d   V P                  R 4      MRp\        V\        4      '       d   VP	                  4       ;'       g    R# R# )r¡   N)rh   rx   r~   r=   rP   )Údesktop_configr_   s   & r   Ú_configured_branchr    sF   € Ü,6°~Ät×,LÒ,LˆN×Ñ˜xÔ(ÐRV€EÜ&0°¼×&<Ò&<ˆE�K‰K‹M×!Ð!˜TÐFÀ$ÐFr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÓ   rK   Úfallbackr   r   )r   s   "r   r   r     s'   € ÷ Wñ W¨ð WÀð WÐS`ñ Wr   c                ó(   € V '       d
   V R8w  d   V # T# )zCThe checkout's branch, or ``fallback`` when detached or unreadable.r  r   )rÓ   r  s   &&r   Ú_checked_out_branchr    s   € ç+°À&Ô0Hˆ>ÐVÈhÐVr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Ú
cache_filer   Úidentityrx   ÚnowÚfloatr   rp   r   )r   s   "r   r   r     s.   € ÷ Tñ T˜tð T¨tð T¸%ð TÀNñ Tr   c                óî  € \        V 4      p\        V\        4      '       dX   VP                  R4      V8X  dB   \        VP                  R4      \        4      '       d   VR,          P                  R4      RJ g   R# VP                  R/ 4      pVP                  R4      '       d   \        M\
        pVP                  R4      p\        V\        \        34      '       d   ^ W&,
          u;8:  d	   V8  d   V#  R# )z¢A still-fresh supported status cached for exactly this identity, else None.

Failures expire sooner so a transient network error does not hide updates for a day.
r  r  Ú	supportedTNr‰   Úts)rã   rh   rx   r~   Ú#_UPDATE_CHECK_FAILURE_CACHE_SECONDSÚ_UPDATE_CHECK_CACHE_SECONDSr  r;   )r  r  r  Úcachedr  Úttlr  s   &&&    r   Ú_cached_statusr    s¾   € ô
 ˜
Ó#€FÜ�vœt×$Ò$¨¯©°JÓ)?À8Ô)KÜ˜6Ÿ:™: hÓ/´×6Ò6¸6À(Õ;K×;OÑ;OÐP[Ó;\Ð`dÓ;dÙØ�Z‰Z˜ "Ó%€FØ17·±¸G×1DÒ1DÕ
-ÔJe€CØ	�‰�DÓ	€BÜ ¤U¬C L×1Ò1°a¸3½8Ö6IÀcÔ6Iˆ6ÐSÐ6IÈtÐSr   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   r  r   r  rx   r  r  rQ   r   ÚNoner   )r   s   "r   r   r     s0   € ÷ >ñ >˜Tð >¨Tð >¸ð >Àtð >ÐPTñ >r   c           	     óÊ   €  ^ RI Hp V P                  P                  RRR7       V! V RVRVRV/4       R#   \         d"   p\
        P                  RT4        Rp?R# Rp?ii ; i)	r¶   ©Úatomic_json_writeT©ÚparentsÚexist_okr  r  r  z Could not cache source check: %sN)Úutilsr#  ÚparentÚmkdirÚOSErrorr�   rŽ   )r  r  r  rQ   r#  r�   s   &&&&  r   Ú_write_cacher+    s]   € ð>Ý+Ø×Ñ×Ñ¨°tÐÔ<Ù˜* z°8¸TÀ3ÈÐRXÐ&YÖZøÜô >Ü�‰Ð7¸×=Ò=ûð>ús   ‚26 ¶A"ÁAÁA"c               ó$   € V ^8„  d   QhRRRRRR/# )r   ro   r=   r±   r   úOptional[bool]r   )r   s   "r   r   r   $  s!   € ÷ 7ñ 7 cð 7°ð 7¸ñ 7r   c                ó:  a aaaaaaa€ ^ RI Ho ^ RIHp ^ RIHp ^ RIHoHp ^ RI	H
o ^ RIHpHp \        P                  ! 4       \         ,           oV! 4       oRR/R	 VVV3R
 lllpR VVV3R lloV! RS  RS 2RR7        \#        V3R l4      p\%        V\&        4      '       d)   VP)                  R4      '       g   VP)                  R4      MRp	\%        V	\*        4      '       g   R# V	 U
u. uF{  p
\%        V
\&        4      '       g   K  V
P)                  R4      R8X  g   K3  \%        V
P)                  R4      \,        4      '       g   KZ  V! V
R,          V4      '       g   Kr  V
R,          NK}  	  pp
V'       g   R# \/        V V3R lV 4       4      p^ pV! V^4       F  pV! V4       V^,          pK  	  V'       dM   S! 4       pVf   R# V! V.4      '       d   R# V^,          p\1        VR4      pVf   KA  V! V4       V^,          pKT  R# u up
i   S d     R# i ; i)zPRead the tree and at most four schema blobs at once, within one lookup deadline.)Úcopy_context)Úfnmatchcase)Úislice)ÚEmptyÚQueue)ÚThread)ÚSTATE_MODULESÚdefines_runtimeÚapiFc               ó$   € V ^8„  d   QhRRRRRR/# )r   r‚   r=   r7  r<   r   r   r   )r   s   "r   r   Ú+_read_runtime_verdict.<locals>.__annotate__1  s&   € ÷ Mñ M�Cð M ð M°$ñ Mr   c               ót   <a a€ R  VVV 3R llpS! S! 4       P                   V3RR7      P                  4        R# )c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   Ú;_read_runtime_verdict.<locals>.launch.<locals>.__annotate__2  s   € ÷ 	cñ 	c�dñ 	cr   c                 óF   <€ SP                  \        V V3R  l4      4       R# )c                 óD   <€ S '       d   \        S4      # \        SR R4      # )z*/*N)rv   r‡   )r7  r‚   s   €€r   r[   ÚE_read_runtime_verdict.<locals>.launch.<locals>.read.<locals>.<lambda>3  s   ø€ ¿¤x°£}Ð'`ÄÈsÐTYÐ[_ÓA`Ð'`r   N)Úputr   )r7  Úrepliesr‚   s   €€€r   rœ   Ú3_read_runtime_verdict.<locals>.launch.<locals>.read2  s   ø€ Ø�K‰KœÕ`ÓaÖbr   T)Útargetr9   ÚdaemonN)rF   Ústart)r‚   r7  rœ   r4  r/  rB  s   fd €€€r   ÚlaunchÚ%_read_runtime_verdict.<locals>.launch1  s0   ú€ ÷	cò 	cñ
 	‘l“n×(Ñ(°¨w¸tÔD×JÑJÖLr   c               ó   € V ^8„  d   QhRR/# r
  r   )r   s   "r   r   r9  9  s   € ÷ .ñ .�]ñ .r   c                 ór   <€ S\         P                  ! 4       ,
          p V ^ 8:  d   ShSP                  V R7      # )r¶   r—   )ÚtimeÚ	monotonicr~   )Ú	remainingr2  ÚdeadlinerB  s    €€€r   ÚreceiveÚ&_read_runtime_verdict.<locals>.receive9  s1   ø€ ØœtŸ~š~Ó/Õ/ˆ	Ø˜Œ>ØˆKØ�{‰{ 9ˆ{Ó-Ð-r   rs   z/git/trees/T)r7  c                 óN   <€ \         P                  ! S ! 4       ;'       g    R 4      # )rM   )rt   ru   )rO  s   €r   r[   Ú'_read_runtime_verdict.<locals>.<lambda>A  s   ø€ œdŸjšj©«¯¨°bÔ9r   Ú	truncatedÚtreeNÚtypeÚblobrÝ   c           	   3  óL   <"  € T F  pR S RS R\        V4       2x € K  	  R# 5i)z"https://raw.githubusercontent.com/Ú/Nr   )rd   rÝ   ro   r±   s   & €€r   rf   Ú(_read_runtime_verdict.<locals>.<genexpr>I  s-   øé € ÐlÑfkÐ^bÐ8¸¸ÀAÀcÀUÈ!ÌEÐRVËKÈ=ÕYÓfkùs   ƒ!$)Úcontextvarsr/  Úfnmatchr0  Ú	itertoolsr1  Úqueuer2  r3  Ú	threadingr4  Ú!hermes_cli.update_downgrade_guardr5  r6  rK  rL  Ú_RUNTIME_LOOKUP_SECONDSr   rh   rx   r~   rÈ   r=   ÚiterÚnext)ro   r±   r0  r1  r3  r5  r6  rG  rT  rË   ÚeÚpathsÚurlsÚpendingr‚   r1   r2  r4  r/  rN  rO  rB  s   ff              @@@@@@r   Ú_read_runtime_verdictrg  $  s¿  ÿ€ å(Ý#Ý ß"Ý çPä�~Š~ÓÔ"9Õ9€HÙ$)£G€GðM¨÷ Mô M÷.ò .ñ Ð*¨:¨,°kÀ#ÀÐGÈTÕRðÜÔ9Ó:ˆÜ&0°´t×&<Ò&<ÀTÇXÁXÈk×EZÒEZ�$—(‘(˜6Ô"Ð`dˆÜ˜'¤4×(Ò(ÙÙ$+ó _¡G˜q¬z¸!¼T×/B”ÀqÇuÁuÈVÃ}ÐX^ÑG^”Ü §¡ f£¬s×3ô Ù8CÀAÀfÅIÈ}×8]ô ��6—�¡Gˆð _çÙÜÕlÑfkÓlÓlˆØˆÙ˜$ –?ˆCÙ�3ŒKØ�q�LŠGñ #÷ Ù“9ˆDØŠ|ÙÙ ˜v×&Ò&ÙØ�q�LˆGÜ�t˜TÓ"ˆCØŒÙ�s”Ø˜1•’Ùùò)_øð* ô Úðúsm   Â$H Â(H Â?)H Ã*H Ã.H
ÄH
Ä#"H
Å
H
Å"H
Å/
H Å;A H Æ<H Ç	H ÇH Ç5H È
H ÈHÈHc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   ro   r=   r±   r  r   r   r-  r   )r   s   "r   r   r   ^  s(   € ÷ ñ ¨ð °3ð ÀDð È^ñ r   c                óŠ  € \        V4      p\        V\        4      '       d   TM/ pVP                  V4      p\        V\        4      '       d   V# \
        P
                  ! 4       p\        V\        4      '       d   VP                  R4      MRp\        V\        \        34      '       d	   WV8  d   R# \        W4      p ^ RI	H
p VP                  P                  RRR7       T! T/ VCYe   TM!R\
        P
                  ! 4       \        ,           //C4       V#   \         d"   p	\        P!                  RT	4        Rp	?	T# Rp	?	ii ; i)a  Read an unfetched release without Git writes. Definite verdicts are immutable per SHA;
unknown verdicts expire so passive cache hits do not repeatedly contact an unreachable GitHub.
Schema blobs use raw.githubusercontent.com rather than spending the anonymous API quota.ÚretryAtNr"  Tr$  z.Could not cache the release schema verdict: %s)rã   rh   rx   r~   r<   rK  r;   r  rg  r'  r#  r(  r)  r  r*  r�   rŽ   )
ro   r±   r  Úknownr  r  Úretry_atÚverdictr#  r�   s
   &&&       r   Ú_github_predates_runtimern  ^  s  € ô �zÓ"€EÜ ¤t×,Ò,‰E°"€EØ�Y‰Y�s‹^€FÜ�&œ$×ÒØˆÜ
�)Š)‹+€CÜ(2°6¼4×(@Ò(@ˆv�z‰z˜)Ô$Àd€HÜ�(œS¤%˜L×)Ò)¨c¬nÙÜ# JÓ4€GðLÝ+Ø×Ñ×Ñ¨°tÐÔ<Ù˜*ð 'f¨ð 'f°Ò@S±WØ'0´$·)²)³+Ô@cÕ2cÐ&dñ'fô 	gð €Nøô ô LÜ�‰ÐEÀs×KÐKØ€NûðLús   Â=AD ÄEÄ!D=Ä=Ec               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   ÚcorÐ   rD  r=   Úhomer   r   r<   r   )r   s   "r   r   r   v  s.   € ÷ Gñ G˜	ð G¨3ð G°dð G¸tñ Gr   c                óŒ   a a€ S P                   '       d   R# ^ RIHp R V 3R llpR V V3R llpV! S P                  VSWER7      # )zYThe updater's downgrade refusal, asked read-only. An embedded checkout has no git to ask.F)Úwould_refusec               ó    € V ^8„  d   QhRRRR/# )r   r9   r=   r   r;   r   )r   s   "r   r   Ú%_update_refuses.<locals>.__annotate__|  s   € ÷ ;ñ ;�3ð ;˜3ñ ;r   c                 ó‚   <€ \        \        V 4      SP                  SP                  R ^R7      pVf   R# VP                  # )F)r5   r7   r1   r6   r¬   )rI   rÈ   r¢   r7   rN   )r9   rQ   rp  s   * €r   r7   Ú_update_refuses.<locals>.git|  s7   ø€ Üœ$˜t›*¨"¯'©'°r·v±vÀEÐSUÔVˆØ’^ˆrÐ:¨×):Ñ):Ð:r   c               ó    € V ^8„  d   QhRRRR/# )r   r±   r=   r   r-  r   )r   s   "r   r   ru  €  s   € ÷ Yñ Y�Cð Y˜Nñ Yr   c                ój   <€ \        SP                  ;'       g    \        V SR ,          R,          4      # )úsource-checkszrelease-runtime.json)rn  ro   r	   )r±   rp  rq  s   &€€r   r£   Ú_update_refuses.<locals>.remote€  s1   ø€ Ü'¨¯©×(LÐ(LÔ9LÈcØ(,¨Õ(>ÐAWÕ(WóYð 	Yr   )r7   r£   )rÑ   r_  rs  r¢   )rp  rD  rq  rs  r7   r£   s   f&f   r   Ú_update_refusesr|  v  s?   ù€ à	‡{‡{€{ÙÝ>÷;ð ;÷Yñ Yñ ˜Ÿ™ ¨°3ÔFÐFr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rQ   rx   rp  rÐ   rq  r   r   r   r   )r   s   "r   r   r   †  s.   € ÷ Yñ Y $ð Y¨Ið Y¸Tð YÀdñ Yr   c                óÀ   € V P                  R4      pV P                  R4      '       d6   V'       d,   \        WV4      '       d   V P                  R^ RRR7       R# R# R# R# )aX  Hold an offered release `hermes update` refuses (it predates the gateway runtime these session
stores use). Covers releases off this checkout's history too, which the ancestry-only rollback
test cannot see. Apply only after caching the release facts: stores can gain runtime history,
or the only ledgered profile can be removed, between checks.Ú	targetShaÚupdateAvailableFÚ	downgrade)r€  ÚbehindÚheldÚrollbackN)r~   r|  r-   )rQ   rp  rq  rD  s   &&& r   Ú_hold_refused_releaser…  †  sQ   € ð
 �Z‰Z˜Ó$€FØ‡z�zÐ#×$Ò$¯´OÀBÐPT×4UÒ4UØ�‰ e°A¸KÐRWˆÖXñ 5V©Ñ$r   Úforward_onlyFc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rQ   rx   Úchannelr=   rp  rÐ   r†  r<   r   )r   s   "r   r   r   �  s)   € ÷ ñ ˜Tð ¨Cð °Yð ÐQUñ r   c          	     ó®  €  \        YP                  '       g   VP                  .MRVP                  VP                  ;'       g    \
        VR7      pTP                  '       Ed*   TP                  pT P                  RR4       T P                  YTP                  T8g  TP                  T8X  d   ^ M\        TP                  TP                   R7       \#        \%        TR	R
4      4      T R&   \#        TP                  ;'       d`    TP                  T8g  ;'       dI    TP                  '       * ;'       d0    \'        RRYbP                  .TP                  TP                  R7      4      T R&   TP(                  '       d   RTP*                  RR/T R&   T#   \        \        \        P                  3 d%   pT P                  RRT RT 2R7        Rp?R# Rp?ii ; i)z¯Resolve a release channel's target into ``result``; the SourceTarget, or None on error.

A target with a pinned commit is final; one without names a branch to follow instead.
N)ro   r†  zrelease-unavailablezCould not resolve the z source channel: ©r‰   rÃ   r¡   )rˆ  r  r€  r‚  ÚsourceVersionÚbuildIdr   FÚaheadOfReleaseú
merge-baseú--is-ancestorr  r„  ÚdestinationÚ
sourceOnlyTÚ
retirement)r   rÑ   r7   r¢   ro   r	   r*  Ú
ValueErrorrD   ÚSubprocessErrorr-   r¹   r,   rÒ   ÚUPDATE_AVAILABLE_NO_COUNTÚversionÚbuild_idr<   ÚgetattrrV   Úretiredrˆ  )rQ   rˆ  rp  r†  Úsource_targetr�   rD  s   &&&$   r   Ú_resolve_channelr›  �  sª  € ð
Ü-¨gÇ{Ç{À{¸¿¹±xÐX\Ð^`×^eÑ^eØ9;¿¹×9]Ð9]ÔJ]Ø;GôIˆð ××ÑØ×%Ñ%ˆØ�
‰
�8˜TÔ"Ø�‰˜gÈÏÉÐTZÑIZØ"$§'¡'¨VÔ"3™QÔ9RØ$1×$9Ñ$9À=×CYÑCYð 	ô 	[ô
 $(¬°¸wÈÓ(NÓ#OˆÐÑ ô " "§'¡'÷ #Wð #W¨b¯g©g¸Ñ.?÷ #Wð #WÈÏÉÄO÷ #Wð #WÔX_Ø˜?¨F·G±GÐ<À"Ç'Á'ÈrÏvÉvôYWó XˆˆzÑà× × Ð Ø$1°=×3HÑ3HÈ,ÐX\Ð#]ˆF�<Ñ ØÐøô% ”Z¤×!;Ñ!;Ð<ô Ø�‰Ð1Ð=SÐT[ÐS\Ð\mÐnqÐmrÐ;sˆÔtÝûðús   ‚AF ÁF Æ GÆ0GÇGc               ó$   € V ^8„  d   QhRRRRRR/# )r   rp  rÐ   Úselected_branchr=   r   r   )r   s   "r   r   r   ®  s&   € ÷ Zñ Z�yð Z°3ð Z¸3ñ Zr   c                óF  € V P                   ;'       db    V P                   P                  4       \        P                  ! 4       8H  ;'       d*    V P                  P                  4       P	                  R4      pV P
                  '       g   V'       d   VR8w  d   R\         R2# R# )úgit@r¨   zhttps://github.com/rì   r©   )rŸ  zssh://)ro   Úlowerr	   r©   Ú
startswithrÑ   )rp  r�  Úofficial_sshs   && r   Ú_branch_remoter£  ®  s‘   € Ø—M‘M÷ Ið I b§m¡m×&9Ñ&9Ó&;Ô?R×?XÒ?XÓ?ZÑ&Z÷ Ið IØŸ	™	Ÿ™Ó)×4Ñ4Ð5GÓHð ð
 �{�{ˆ{Ÿ|°À6Ô0Ið "Ô"5Ð!6°dÐ;ð ZØPXðZr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úbranch_config_pathr   r  rx   r   r   r   )r   s   "r   r   r   ·  s&   € ÷ Tñ T¨Tð TÀ4ð TÈDñ Tr   c                óT   € \        V 4      V8X  d   ^ RIHp V! V / VCRR/C4       R# R# )zTPoint the Desktop branch setting back at main after its branch was deleted upstream.r"  r¡   r¨   N)rã   r'  r#  )r¥  r  r#  s   && r   Ú_heal_deleted_branchr§  ·  s2   € ô Ð$Ó%¨Ô7Ý+ÙÐ,Ð.R°Ð.RÀÈ6Ñ.RÖSñ 8r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rp  rÐ   r¡   r=   r   rK   r   )r   s   "r   r   r   ¿  s!   € ÷ ñ ˜9ð ¨cð °mñ r   c                óÂ  € V P                   '       d   R# RV 2p\        RRRV.V P                  V P                  R7      '       g   R# \        RRRRV 2.V P                  V P                  R7      '       g2   \        RR	R
V R2.V P                  V P                  R7      '       g   R# R F±  p\	        RW2.V P                  V P                  ^
R7      pVf   K.  VP
                  ^ 8X  g   KA  \        ;QJ d4    R VP                  P                  4        4       F  '       g   K   RM)	  RM%! R VP                  P                  4        4       4      '       d   Ru # Ru # 	  R# )ak  Why a branch the remote does not advertise must keep its pin; None when healing loses nothing.

An empty ref advertisement cannot tell "merged and deleted upstream" from "never pushed":
only a branch that was once published (remote-tracking ref or configured upstream, which
survives ``fetch --prune``) and whose commits are all in main may be re-pinned to main.
Nrª   r  z--verifyz--quietr  zrefs/remotes/origin/Úconfigz--getzbranch.z.mergeúnever-pushedÚcherryr«   c              3  óB   "  € T F  qP                  R 4      x € K  	  R# 5i)Ú+N)r¡  )rd   Úlines   & r   rf   Ú%_unhealable_reason.<locals>.<genexpr>Ò  s   é € Ð$aÑF`¸d§_¡_°S×%9Ð%9ÓF`ùs   ‚TFÚunmerged)zrefs/remotes/origin/mainzrefs/heads/main)	rÑ   rV   r¢   r7   rI   rN   ÚanyrO   r¯   )rp  r¡   ÚlocalÚbaser¬  s   &&   r   Ú_unhealable_reasonrµ  ¿  s%  € ð 
‡{‡{€{ÙØ˜&˜Ð"€EÜ�K ¨Y¸Ð>ÀBÇGÁGÐQS×QWÑQW×XÓXÙÜ�[ *¨iÐ;OÐPVÈxÐ9XÐYÐ_a×_fÑ_fÐln×lrÑlr×sÓsÜ˜ '¨W°V°H¸FÐ+CÐDÈ"Ï'É'ÐWY×W]ÑW]×^Ó^ÙÛ?ˆä˜8 TÐ1°r·w±wÀBÇFÁFÐTVÔWˆØÔ &×"3Ñ"3°qÖ"8ß!$£Ñ$aÀfÇmÁm×F^ÑF^ÔF`Ó$a§§¢Ñ$aÀfÇmÁm×F^ÑF^ÔF`Ó$a×!aÒ!a�:ÒkÐgkÒkñ	 @ñ
 r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rp  rÐ   rD  r=   r   ztuple[int, list[dict]]r   )r   s   "r   r   r   Ö  s"   € ÷ 
)ñ 
)�ið 
)¨ð 
)Ð1Gñ 
)r   c                ó  a€ V P                   V8X  gH   V P                  '       g:   \        RRWP                   .V P                  V P                  R7      '       d   ^ . 3# V P
                  '       d‹   \        V P                   WP
                  4      oS;'       g    / P                  R4      p\        V\        4      '       d:   \        V\        4      '       g$   V^ 8¼  d   Y"'       d   \        V3R l. 4      3# . 3# \        . 3# )zX``(behind, commits)`` for ``target``: local ancestry first, then the GitHub compare API.rŽ  r�  r  r}   c                 ó   <€ \        S 4      # r   )rÍ   )ry   s   €r   r[   Ú_behind_count.<locals>.<lambda>ß  s
   ø€ ¬(°7Ô*;r   )rÒ   rÑ   rV   r¢   r7   ro   rz   r~   rh   r;   r<   r   r•  )rp  rD  r   ry   s   && @r   Ú_behind_countrº  Ö  sÂ   ø€ à	‡w�w�&Ô §§ ´Ø˜?¨F·G±GÐ<À"Ç'Á'ÈrÏvÉv÷2Wó 2Wà�"ˆuˆØ	‡}‡}€}Ü! "§'¡'¨6·=±=ÓAˆØ—�˜B×#Ñ# JÓ/ˆÜ�eœS×!Ò!¬*°U¼D×*AÒ*AÀeÈqÄjØÆEœ6Ô";¸RÓ@ÐRÐRÈrÐRÐRÜ$ bÐ(Ð(r   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r   rQ   rx   rp  rÐ   r�  r=   ÚhealzOptional[tuple[Path, dict]]r   r   r   )r   s   "r   r   r   ã  s8   € ÷ Pñ P˜$ð P Ið PÀð PØ3ðPØ8<ñPr   c          	     ó†  € W R&   \        W4      p\        VP                  W!P                  VP                  V4      w  rVpV'       d   VR8w  d   \        W4      MRpV'       d)   VR8X  d   RMRp	V P                  RRR	V R
V	 R2R7       R# V'       db   VR8w  d[   RV R&   V'       d
   \        V!   \        VP                  RVP                  VP                  VP                  '       d   TMR4      w  rZpVf#   T P                  RV'       d   RV 2MRR7       R# \        W4      w  r¼WÀR&   V P                  W[V^ 8g  R7       R# )zcCompare the checkout with ``selected_branch``'s remote tip, falling back to main if it was deleted.r¡   r¨   Nr«  zhas never been pushedz<is gone from the remote but has commits that are not in mainzbranch-local-onlyTzBranch 'z' z*; keeping it instead of switching to main.)r‰   Ú	localOnlyrÃ   r©   zfetch-failedz)Could not resolve the remote branch tip: z(Could not resolve the remote branch tip.rŠ  r¸   )r  r‚  r€  )
r£  r³   ro   r¢   r7   rµ  r-   r§  rÑ   rº  )rQ   rp  r�  r¼  r£   rD  Úmissingr°   rë   r²   Ú_r‚  r¸   s   &&&$         r   Ú_check_branchrÁ  ã  s?  € ð 'ˆ8ÑÜ˜BÓ0€FÜ*¨2¯=©=¸/Ï7É7ÐTV×TZÑTZÐ\bÓcÑ€F�Wß8?ÀOÐW]ÔD]Ô Ô4Ðcg€FßØ-3°~Ô-EÑ)ØUð 	à�‰Ð/¸4Ø (¨Ð(9¸¸F¸8ÐCmÐnð 	ô 	páß�? fÔ,Ø!ˆˆxÑßÜ  $Ò'Ü(¨¯©¸ÀÇÁÈÏÉÐ[]×[f×[fÐ[fÑQWÐltÓuÑˆ�7Ø‚~Ø�‰˜NßW^Ð IÈ'ÈÑSØEð 	ô 	Gñ 	Ü# BÓ/�O€FØˆ9ÑØ
‡M�M˜FÀ6ÈQÁ;€MÖOr   Úinstall_rootrq  r¡   rˆ  Ú
cache_pathr¥  ÚforceÚpassivec               ó@   € V ^8„  d   QhRRRRRRRRRRRRR	R
RR
RRRR/
# )r   rÂ  zPath | Nonerq  r¡   r’   rˆ  rÃ  r¥  rÄ  r<   rÅ  r7   r=   r   rx   r   )r   s   "r   r   r   ÿ  sp   € ÷ Añ A {ð AÀð AØ(ðAØ:DðAà"-ðAàJUðAð "ðAð  $ð	Að 36ð	Að CGñ	Ar   c        	        óÈ  € ^ RI Hp	Hp
 ^ RIHp ^ RIHpHpHpH	p ^ RI
Hp V f*   \        P                  P                  R4      ;'       g    RMRp\        V e   T MV	! 4       4      P!                  4       p\        Ve   TM	\#        4       4      P!                  4       pRRR	\%        V4      R
RR. /p\'        V! V4      VV RJVR7      pV'       d   / VCVC# V
! VR,          4      pV'       d7   VP                  R4      ;'       g    / P                  R4      RJ d	   / VCRR/C# Vf
   V! VV4      MV! V4      pV! V! VV4      VV4      p\)        V\+        V4      V4      pV'       d   \-        V4      MRp\/        V4      pT;'       g!    T;'       g    \1        VP2                  R4      pVP5                  RVP6                  VP2                  VP8                  R7       VR8w  d   VVR&   MVVR&   R\%        V4      R\%        V4      RVP6                  RVP:                  RVRVRVRVRJR^RV/
pVe   \        V4      MVR,          V! V4       R 2,          p\<        P<                  ! 4       pV'       d   RM\?        VVV4      pVeE   / VCR!VP8                  R"VP2                  /CpVP                  R4      '       d   \A        VVV4       V# \C        VR#,          4      VR$&   Rp\E        VP6                  4      '       g   VP5                  R%R&R'7       MSVfP   \G        VVVVR(7      pVe=   VPH                  '       g+   T;'       g!    \1        VP2                  VPJ                  4      pR)V9  dL   Ve   VPJ                  e:   T;'       d    V'       * ;'       d    VV8H  p \M        TTTV '       d   VV3MRR*7       \O        VVVV4       VP                  R4      '       d   \A        VVV4       V# )+zèReturn a presentation-ready status. Omitted branch follows the current checkout.

Only the default (running installation) may use HERMES_REVISION. An explicit
target must never inherit the host process's embedded revision or stamp.
)Úget_project_rootÚ$require_readable_config_before_write)Úread_install_stamp)Úchannel_recordÚ
install_idÚresolve_update_channelÚrides_default_channel©Úvalidate_nameNÚHERMES_REVISIONr  FÚ
hermesRootr‚  r¸   )ræ   rÑ   zconfig.yamlÚupdatesrC   rë   Údisabledr¨   T)r  Ú
currentShaÚcurrentBranchrÔ   rˆ  r¡   r¢   rq  rÒ   r©   rÑ   ÚbranchOverrideÚchannelProtocolÚforwardOnlyrz  z.jsonrÔ   rÖ  r½   Ú	fetchedAtzhead-unavailablez&Could not read the installed revision.rŠ  )r†  r‰   )r¼  )(rõ   rÈ  rÉ  Úhermes_cli.stewardrÊ  Úhermes_cli.update_channelrË  rÌ  rÍ  rÎ  Úhermes_cli.release_channelsrÐ  ÚosÚenvironr~   r   Úresolver   r=   rø   r  rÿ   rã   r  r  rÓ   r-   rÒ   rÔ   r©   rK  r  r…  r;   rk   r›  r¹   r¡   rÁ  r+  )!rÂ  rq  r¡   rˆ  rÃ  r¥  rÄ  rÅ  r7   rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÐ  rÑ   r¢   rQ   Úunsupportedrª  r†  rp  r  Úconfigured_branchr�  r  r  r  r  rš  r¼  s!   $$$$$$$$$                        r   Úcheck_for_updatesrã  ÿ  s¨  € ÷ YÝ5ßsÓsÝ9à>JÒ>R”—
‘
—‘Ð0Ó1×9Ð9°TøÐX\€HÜ Ò 8‘Ñ>NÓ>PÓQ×YÑYÓ[€DÜ˜Ò(‘¬oÓ.?Ó@×HÑHÓJ€DØ˜5 ,´°D³	¸8ÀTÈ9ÐVXÐY€FÜ%Ñ&8¸Ó&>ÀØ4@ÈÐ4LÐW_ôa€KçØ(�&Ð(˜KÐ(Ð(Ù1°$¸Õ2FÓG€Fß�F—J‘J˜yÓ)×/Ð/¨R×4Ñ4°WÓ=ÀÓFØ/�&Ð/˜( JÑ/Ð/Ø6=²oÑ$ V¨TÔ2É=ÐY`ÓKa€GÙ(©¸ÀÓ)EÀwÐPTÓU€LÜ	˜œn¨SÓ1°8Ó	<€Bß7I”ZÐ 2Ô3Èt€NÜ*¨>Ó:ÐØ×cÐcÐ 1×cÐcÔ5HÈ×IZÑIZÐ\bÓ5c€OØ
‡M�M˜D¨R¯W©WÀB×DUÑDUÐ]_×]eÑ]e€MÔfØ�&ÔØ#ˆˆyÒà*ˆˆxÑØœ˜D›	 6¬3¨t«9°f¸b¿g¹gÀxÐQS×QZÑQZÐ\dÐfuØ˜7 J°Ð:JÈFÐZ^ÐL^Ð`qÐstØ˜|ð-€Hð &0Ò%;”�jÔ!ÀÈÕAWÑ]gÐhlÓ]mÐ\nÐnsÐZtÕAt€JÜ
�)Š)‹+€Cß‰T¤¨z¸8ÀSÓ I€FØÒØR�FÐR˜G R§X¡X¨À×@QÑ@QÑRˆØ�:‰:�i× Ò Ü! &¨"¨dÔ3ØˆÜ˜c D�j›/€Fˆ;ÑØ€MÜ˜Ÿ™× Ò Ø�‰Ð.Ð8`ˆÕaØ	ŠÜ(¨°¸"È<ÔXˆØÒ$¨]×-A×-AÐ-Aà/×oÐoÔ3FÀr×GXÑGXÐZg×ZnÑZnÓ3oˆOØ�fÔ -Ò"7¸=×;OÑ;OÒ;[à!×YÐY¨&¤j×YÐYÐ5FÈ/Ñ5YˆÜ�f˜b /ßCGÐ.°Ñ?ÈTõ	Sä�˜X s¨FÔ3Ø‡z�z�)×ÒÜ˜f b¨$Ô/Ø€Mr   c               ó   € V ^8„  d   QhRR/# r<  r   )r   s   "r   r   r   C  s   € ÷ ñ ˆdñ r   c                 ó  € ^ RI p ^ RIp^ RIpV P                  \        R7      pVP                  R\        RR7       VP                  R\        RR7       VP                  RRR	7       VP                  R
4       ^ RIHp VP                  RVR7       VP                  R\        R7       VP                  R\        R7       VP                  RRR7       VP                  RVRR7       VP                  4       pVP                  VP                  4      ;_uu_ 4        VP                  '       dC   ^ RIHp ^ RIHp V! VP"                  4       V! VP                  VP$                  4       RVn        \)        R/ \+        V4      P-                  4        UU	u/ uF  w  r‰VR8w  g   K  W‰bK  	  up	pB p
RRR4       \/        X
\0        4      '       d   RV
R&   \3        \4        P6                  ! V
4      4       R# u up	pi   + '       g   i     LR; i)r¶   N)Údescriptionz--install-rootT)rU  Úrequiredz--homez--gitr7   )r   z--branchrÏ  z	--channel)rU  z--cache-pathz--branch-config-pathz--forceÚ
store_true)Úactionz--set-channelzLPersist this install's channel (the Desktop selector), then report as usual.)rU  Úhelp)Úset_hermes_home_override)Úset_install_channelÚset_channelÚchannelSelectabler   )ÚargparseÚ
contextlibÚsysÚArgumentParserrÙ   Úadd_argumentr   rÝ  rÐ  Ú
parse_argsÚredirect_stdoutr®   rí  Úhermes_constantsrë  rÜ  rì  rq  rÂ  rÄ  rã  ÚvarsÚitemsrh   rx   Úprintrt   Údumps)rï  rð  rñ  ÚparserrÐ  r9   rë  rì  ÚkÚvrQ   s              r   r¨   r¨   C  s­  € ÛÛÛØ×$Ñ$´Ð$Ó9€FØ
×ÑÐ(¬t¸dÐÔCØ
×Ñ˜¤t°dÐÔ;Ø
×Ñ˜¨ÐÔ/Ø
×Ñ˜
Ô#Ý9Ø
×Ñ˜¨-ÐÔ8Ø
×Ñ˜¬TÐÔ2Ø
×ÑÐ.´TÐÔ:Ø
×Ñ˜	¨,ÐÔ7Ø
×Ñ˜¨mØkð ô mà×ÑÓ€DØ	×	#Ñ	# C§J¡J×	/Õ	/Ø××ÐÝAÝEñ % T§Y¡YÔ/Ù × 0Ñ 0°$×2CÑ2CÔDØˆDŒJÜ"Ña´t¸D³z×7GÑ7GÔ7IÔ%`Ñ7I©t¨qÈQÐR_ÑM_¤d a¢dÑ7IÒ%`Ñaˆ÷ 
0ô �&œ$×Òà&*ˆÐ"Ñ#Ü	Œ$�*Š*�VÓ
Öùó	 &a÷ 
0×	/ús%   ÄA8G6ÆG0Æ G0Æ&G6Ç0G6Ç6H	Ú__main__r¬   i€Q r   )zapplication/vnd.github+json)r©   )DrÙ   Ú
__future__r   rt   ÚloggingrÞ  rü   rD   rK  Údataclassesr   Úpathlibr   Útypingr   Úurllib.parser   Úurllib.errorrˆ   Úurllib.requeströ  r   Úhermes_cli.source_releasesr	   r
   r   Ú	getLoggerrÕ   r�   r•  r  r  r`  r   r0   rG   rI   rR   rV   r]   rk   rz   r€   rv   r‡   r³   rÍ   rÐ   rã   rø   rÿ   r  r  r  r  r+  rg  rn  r|  r…  r›  r£  r§  rµ  rº  rÁ  rã  r¨   r   r   r   Ú<module>r	     sù  ðñõ #ã Û Û 	Û Û Û Ý !Ý Ý Ý Û Û å ,ß aÑ aà	×	Ò	˜8Ó	$€ØÐ Ø'Ð Ø&*Ð #ØÐ ôõð* ˜˜j¨'°8¸YÐG€ð°tð ÈAð Ð\`ð Ø÷ð)¸að )ÈE÷ )õ9õõmð J]÷ :ð Qd÷ d÷õ.J÷ WõFñ �$Ô÷	ð 	ó ð	õLõõ$õ[õGõ
Wõ
Tõ>õ7õtõ0Gõ YðÐX]÷ õ<ZõTõõ.
)õPð8A°Tð AÈtð AØ+/ðAØGKðAà04ðAàX\ðAð %*ðAð ',ð	Að 9>÷	AõHðB ˆzÔÙ†Fñ r   