+
    lHàjUÇ ã                   ó”  a € ER‚ Et¶0 t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIHtHtHtHt ^ RIHtHtH t  ^ RI!H"t"H#t#H$t$H%t%H&t&H't' ^ RI(H)t) ^ RI*H+t+H,t, ^ R	I-H.t. ^ R
I/H0t0 ^ RI1H2t2 ^ RI3H4t4 ^ RI5H6t6H7t7 ^ RI8H9t9 ^ RI:H;t; ^ RI<H=t= ^ RI>H?t? ^ RI@HAtA ^ RIBHCtCHDtDHEtF ^ RIGHHtHHItI ^ RIJHKtKHLtLHMtMHNtN ^ RIOHPtQ ^ RIRHStSHTtTHUtUHVtVHWtWHXtXHYtY ^ RIZH[t[H\t\H]t]H^t^H_t_H`t` ]PÂ                  ! ]b4      tc]"! 4       ;tdte])! ]d]! ]f4      PÎ                  PÎ                  R,          R7       ]PÐ                  PÓ                  ]dRR4      tjRR/R R lltkR  tl]l]nm        R! ]nm        ]PÜ                  ! ]o4      ;_uu_ 4        ^ R"IpHqtq ]q! 4        RRR4       ^ R#IrHstsHtttHutu / tv] ^ k / tw] ^k RsxRsy] ^k ]Pô                  ! 4       t{]Pô                  ! 4       t|]Pô                  ! 4       t}]Pü                  ! 4       tRs€] ^k Rs�] ^k Rs‚/ tƒ] ^k R$t„]Pô                  ! 4       t…]†! R%]H! R&R'4      4      t‡R( R) ltˆR* R+ lt‰]‰! 4       tŠR,t‹]ˆ! R-R.R/4      tŒR0t�^<tŽR%t�ERƒt�]‘! 0 ER„m4      t’]‘! 0 R1kR2kR3kR4kR5kR6kR7kR8kR9kR:kR;kR<kR=kR>kR?kR@kRAkRBkRCkRDkREkRFkRGkRHkRIkRJkRKkRLkRMkRNkROkRPkRQkRRkRSkRTkRUkRVkRWkRXkRYkRZkR[kR\kR]kR^kR_kR`kRakRbkRckRdkRekRfkRgkRhkRikRjkRkkRlkRmkRnkRokRpkRqkRrkRskRtkRukRvk4      t“]†! ^]I! Rw^4      4      t”]EP*                  EP-                  ]”RxRy7      t—]EP0                  ! Rz 4       ]EP2                  ! R{RR|7      tš] ^k ]EP2                  ! R}R~R|7      t›] ^k ]EP8                  t�]EP<                  ]nœ         ! R R€4      tŸ]\! R� ]{4      t ]Ÿ! 4       t¡R‚ Rƒ lt¢ ! R„ R…4      t£R† R‡ lt¤Rˆ R‰ lt¥RŠ R‹ lt¦RŒ R� lt§]†! RŽ]H! R�]¨! ER…4      4      4      t©R$tª]†! RŽ]H! R�R%4      4      t«]†! RŽ]H! R‘]ª4      4      t¬R’ R“ lt­]EP0                  ! ]§4       ]­! 4        R” R• lt®R– R— lt¯R˜ t°R™ Rš lt±R› t²Rœ R� lt³]EPh                  ER†RžRŸ/R  R¡ lll4       tµR¢ R£ lt¶ER†R¤ R¥ llt·R¦ R§ lt¸ ! R¨ R©]¹4      tºRª R« lt»]¼! 4       t½] ^k R¬ t¾0 ER‡mt¿R­ R® ltÀR¯ R° ltÁR± R² ltÂR³ R´ ltÃRµ R¶ ltÄER†R· R¸ lltÅER†R¹ Rº lltÆ^ R»I@HÇtÈ ]ÈEP’                  ! R¼ R½ R¾ R¿ 4       ]¼! 4       tÊ] ^	k ]Pô                  ! 4       tËRŸtÌRÀ RÁ ltÍRÂ RÃ ltÎER†RÄ]‘! 4       /RÅ RÆ llltÏRÇ RÈ ltÐRÉ RÊ ltÑRË RÌ ltÒRÍ RÎ ltÓRÏ RÐ ltÔER†RÑ RÒ lltÕRÓ RÔ ltÖRÕ RÖ lt×ER†R× RØ lltØRÙ RÚ ltÙRÛ RÜ ltÚRÝ RÞ ltÛRß Rà ltÜRŸtÝ^tÞ^tßRá Râ ltàER†Rã Rä lltáRå Ræ ltâRç Rè ltãRé Rê ltäRë Rì ltåRí Rî ltæER†RïR~/Rð Rñ llltçRò Ró ltèRô Rõ ltéERˆRö R÷ lltêRø Rù ltëRú Rû ltì^-tí^
tî]
EPÞ                  ! RüRŸRýRþ/4      tðRÿ ER  ltñ^-tò^
tó^tô]
EPÞ                  ! RüRŸRýER/4      tõ/ tö] ^
k ]Pô                  ! 4       t÷ER ER ltøER†ER ER lltùER ER ltúER ER	 ltûER
tüER ER ltýER ER ltþER ER ltÿER ER lEt ]‘! 0 ER‰m4      Et]‘! 0 ERŠm4      Et]‘! 0 ER‹m4      EtERERERERERERERERERRŸERRŸERRŸERRŸ/EtER ER lEtER ER lEtER  ER! lEtER" ER# lEtER$ ER% lEt	^Et
ER& ER' lEtER( ER) lEtER* ER+ lEtER, ER- lEtER.R/ER/ ER0 llEtER†ER1 ER2 llEtER3 ER4 lEtER5 ER6 lEtER7 ER8 lEtER9 ER: lEt ! ER; ER<]4      EtER= ER> lEt]Pô                  ! 4       Et/ Et] ^k ER? ER@ lEtERA ERB lEtERC ERD lEtERE ERF lEtERG ERH lEtERI ERJ lEtERK EtERL ERM lEt ERN Et!EROERP/ERQ ERR llEt"ERS^ /ERT ERU llEt#]Pô                  ! 4       Et$]¼! 4       Et%] ^k ERVERVERWERXERXERXERYERYERZERZ/Et& ]†! ^E]'! ]EPP                  EPS                  ER[4      ;'       g    E]*! ERŒ4      4      4      Et+ER\ ER] lEt.ER^ ER_ lEt/E]/Et0ER` ERa lEt1ERb ERc lEt2ERd Et3ERe ERf lEt4ERgEt5ERh ERi lEt6ERj ERk lEt7ERlEt8^Et9]EPt                  Et;ER�ERm ERn llEt<ERo ERp lEt=]Pô                  ! 4       Et>^ Et?R~Et@^EtAERq ERr lEtBERs ERt lEtC]‘! 0 ERŽm4      EtD] ^k ]‘! ERuERv04      EtE] ^k ER�ERwER�ERxER‘ERyER’ERz/EtFER{ ER| lEtGER} ER~ lEtH^ EtI^EREIJEHKEtL ^ ER€EIMEHNEtN ^ER�EIOEHPEtQEHREtSEHTEtUEHVEtWEHXEtYEHZEt[EH\Et]EH^Et_EH`EtaEHbEtcEHdEteEHfEtgEHhEtiEHjEtkEHlEtmEHnEtoEHpEtqEHrEtsEHtEtuEHvEtwEHxEtyEHzEt{EH|Et}EH~EtEH€Et�EH‚EtƒEH„Et…EH†Et‡EHˆEt‰EHŠEt‹EHŒEt�EHŽEt�EH�Et‘EH’Et“EH”Et•EH–Et—EH˜Et™EHšEt›EHœEt�EHžEtŸEH Et¡EH¢Et£EH¤Et¥EH¦Et§EH¨Et©EHªEt«EH¬Et­EH®Et¯EH°Et±EH²Et³ . E]QNE]SNE]{NE]yNE]wNE]uNE]sNE]qNE]oNE]mNE]kNE]iNE]gNE]eNE]cNE]]NE]_NE]aNE][NE]YNE]UNE]WNE]�NE]‘NE]�NE]‡NE]‰NE]…NE]“NE]•NE]�NE]‹NE]ƒNE]}NE]NE]—NE]™NE]›NE]�NE]ŸNE]¡NE]£NE]¥NE]§NE]©NE]«NE]­NE]¯NE]±NE]³N F)  Et´E]´EP1                  ]EPj                  ]b,          4       K+  	  EA´R#   + '       g   i     E	Lk; i  E],E]-3 d	    ERŒEt+ EL½i ; i(“  é    N)ÚdatetimeÚtimezone©ÚPath)ÚAnyÚCallableÚ
NamedTupleÚOptional)Úbuild_profile_secret_scopeÚreset_secret_scopeÚset_secret_scope)Úget_hermes_homeÚget_hermes_home_overrideÚget_process_hermes_homeÚprofile_name_for_homeÚreset_hermes_home_overrideÚset_hermes_home_override)Úload_hermes_dotenv)Úfile_signatureÚis_truthy_value)Únew_session_id)Úhermes_subprocess_env)ÚSTATIC_TIERS)Úcanonicalize_replay_history)Úclamp_effortÚroute_supported_efforts)Úsession_runtime_view)Ú&project_compaction_message_for_display)Údescribe_skill_invocation)Ú"INTERRUPT_WAITING_FOR_MODEL_PREFIX)Ú	git_probe)Ú_load_checkpoints_enabledÚ_resolve_checkpoint_hashÚresolve_checkpoints_enabled)Ú	env_floatÚenv_int)Úclear_turn_markerÚmarker_writer_stateÚread_turn_markerÚrecord_turn_start)Úregistry)ÚAGENT_BUILD_ABANDONEDÚAGENT_MISSING_FOR_TURNÚAGENT_STILL_STARTINGÚagent_init_failed_messageÚbusy_messageÚresume_failed_messageÚturn_error_text)ÚFanoutTransportÚStdioTransportÚ	TransportÚbind_transportÚcurrent_transportÚreset_transportz.env)Úhermes_homeÚproject_envÚlogsztui_gateway_crash.logÚthread_namec                óB   € V ^8„  d   QhR\         R\         R,          RR/# )é   Úkindr<   NÚreturn©Ústr)Úformats   "Ú7/home/ubuntu/.hermes/hermes-agent/tui_gateway/server.pyÚ__annotate__rE   A   s,   € ÷ ]ñ ]œð ]Ì#ÐPTÍ*ð ]Ð`dñ ]ó    c                ód  € ^ RI pRP                  VP                  WV4      4      pVe   RV 2MRp\        P                  ! \
        4      ;_uu_ 4        \        P                  ! \        P                  P                  \        4      RR7       \        \        RRR7      ;_uu_ 4       pVP                  R	V  R
\        P                  ! R4       V R24       VP                  V4       RRR4       RRR4       \        V4      P!                  4       '       d/   \        V4      P!                  4       P#                  4       ^ ,          MVP$                  p	Ve   RV R2MRp
\'        RV
 VP$                   RV	 2\(        P*                  RR7       R#   + '       g   i     L­; i  + '       g   i     L¸; i)r   NÚ u    Â· thread=T)Úexist_okÚaúutf-8©Úencodingz
=== u    Â· z%Y-%m-%d %H:%M:%Sz ===
zthread z raised z[gateway-crash] ú: )ÚfileÚflush)Ú	tracebackÚjoinÚformat_exceptionÚ
contextlibÚsuppressÚ	ExceptionÚosÚmakedirsÚpathÚdirnameÚ
_CRASH_LOGÚopenÚwriteÚtimeÚstrftimerB   ÚstripÚ
splitlinesÚ__name__ÚprintÚsysÚstderr)r?   Úexc_typeÚ	exc_valueÚexc_tbr<   rQ   ÚtraceÚsuffixÚfÚfirstÚwhos   &&&&$      rD   Ú_record_crashrn   A   s>  € ÛØ�G‰G�I×.Ñ.¨xÀFÓKÓL€EØ,7Ò,Cˆ{˜;˜-Ñ(È€FÜ	×	Ò	œY×	'Õ	'Ü
�Š”B—G‘G—O‘O¤JÓ/¸$Õ?Ü”*˜c¨G×4Õ4¸Ø�G‰G�f˜T˜F $¤t§}¢}Ð5HÓ'IÐ&JÈ6È(ÐRXÐYÔZØ�G‰G�EŒN÷ 5÷ 
(ô 7:¸)³n×6JÑ6J×6LÒ6LŒC�	‹N× Ñ Ó"×-Ñ-Ó/°Ö2ÐRZ×RcÑRc€EØ-8Ò-DˆG�K�= Ñ
)È"€CÜ	Ð˜S˜E (×"3Ñ"3Ð!4°B°u°gÐ
>ÄSÇZÁZÐW[×\÷ 5×4ú÷ 
(×	'ús&   ÁAFÂ'A F	Ã'FÆFÆFÆF/	c                 óN   € \        R WV4       \        P                  ! WV4       R# )zunhandled exceptionN)rn   rd   Ú__excepthook__)rf   rg   rh   s   &&&rD   Ú_panic_hookrq   P   s   € ÜÐ'¨¸fÔEÜ×Ò�x¨FÖ3rF   c                 ó†   € \        R V P                  V P                  V P                  V P                  P
                  R7      # )zthread exception)r<   )rn   rf   rg   Úexc_tracebackÚthreadÚname)Úargss   &rD   Ú<lambda>rw   V   s0   € ¤MØ˜Ÿ™ t§~¡~°t×7IÑ7IÐW[×WbÑWb×WgÑWgõ%irF   )Úprefetch_update_check)Úmake_stream_rendererÚrender_diffÚrender_messageg     Àr@g      @ÚHERMES_TUI_SLASH_TIMEOUT_Sg     €F@c                óH   € V ^8„  d   QhR\         R\         R\        R\        /# )r>   Úenv_varÚcfg_keyÚdefaultr@   )rB   Úfloat)rC   s   "rD   rE   rE   v   s(   € ÷ 
ñ 
¤ð 
¬cð 
¼Eð 
Äeñ 
rF   c                óH  € \         P                  P                  V 4      pVe    \        V4      P	                  4       '       gc   Rp\
        P                  ! \        4      ;_uu_ 4        ^ RIH	p V! 4       P                  R4      ;'       g    / P                  V4      pRRR4       \
        P                  ! \        \        4      ;_uu_ 4        \        RVe   \        V4      MT4      uuRRR4       #   + '       g   i     L]; i  + '       g   i     M; i\        RT4      # )zX``dashboard.<cfg_key>`` seconds; the env var is an internal override that wins when set.N©Úload_configÚ	dashboardç        )rW   ÚenvironÚgetrB   r`   rT   rU   rV   Úhermes_cli.configr„   Ú
ValueErrorÚ	TypeErrorÚmaxr�   )r~   r   r€   Úrawr„   s   &&&  rD   Ú_ws_orphan_settingrŽ   v   s¼   € ä
�*‰*�.‰.˜Ó
!€CØ
‚{œ#˜c›(Ÿ.™.×*Ò*ØˆÜ× Ò ¤×+Õ+Ý5Ù“=×$Ñ$ [Ó1×7Ð7°R×<Ñ<¸WÓEˆC÷ ,ô 
×	Ò	œZ¬×	3Õ	3Ü�3 c¢oœ˜cœ
¸7ÓC÷ 
4Ò	3÷ ,×+ú÷ 
4×	3úäˆs�GÓÐs   Á'6C2ÃDÃ2D	ÄD	c                ó$   € V ^8„  d   QhR\         /# ©r>   r@   ©r�   )rC   s   "rD   rE   rE   ‹   s   € ÷ cñ c¤uñ crF   c                 ó   € \        RRR4      # )zéGrace before an orphaned WS session is interrupted/reaped (0 = park forever): ws.py parks a
disconnected session for a quick reattach, but a browser refresh mints a NEW sid and never
reattaches the old one (leaking its slash worker).Ú!HERMES_TUI_WS_ORPHAN_REAP_GRACE_SÚws_orphan_reap_grace_sg      4@)rŽ   © rF   rD   Ú_resolve_ws_orphan_reap_gracer–   ‹   s   € ô ÐAÐC[Ð]aÓbÐbrF   ç      à?Ú%HERMES_TUI_WS_ORPHAN_ACTIVITY_STALE_SÚws_orphan_activity_stale_sg     À‚@ç      ð?zsession.foreign.listzsession.foreign.previewzsession.foreign.importzbilling.statezsubscription.statezsubscription.previewzsubscription.changezsubscription.resumezsubscription.upgradez
usage.barsúsession.usagezbilling.step_upzbrowser.managezcli.execzcomplete.pathzcomplete.slashzllm.oneshotzmodel.optionsz	pet.cellszpet.galleryzpet.generatez	pet.hatchzpet.infoz
pet.selectz	pet.thumbzlearning.frameszplugins.managezplugins.catalog.lookupz
reload.mcpzmcp.servers.testzmcp.servers.oauth.startzprocess.listzprofiles.configurezprofiles.createzprofiles.describezprofiles.get_assetzprofiles.listzprofiles.set_assetzbot_relay.roster.synczbot_relay.outbox.drainzbot_relay.deliverzbot_relay.replyzimage.generatezprojects.discover_reposzprojects.record_reposzprojects.for_cwdzprojects.treezprojects.project_sessionszsetup.runtime_checkzsetup.statuszfree_tier.provisionzvoice.togglezvoice.recordz	voice.ttsz
wake.startzwake.statuszsession.active_listzsession.branchzsession.compresszsession.listzsession.resumezsession.savezsession.workspace.movez
shell.execzskills.managez
slash.execzonboarding.startzonboarding.statezcommand.dispatchzshared_metrics.setÚHERMES_TUI_RPC_POOL_WORKERSztui-rpc)Úmax_workersÚthread_name_prefixc                  ó0   € \         P                  R RR7      # )FT)ÚwaitÚcancel_futures)Ú_poolÚshutdownr•   rF   rD   rw   rw   Ê   s   € œŸ™¨EÀ$˜ÔGrF   Ú%hermes_gateway_runtime_session_record©r€   Úhermes_gateway_rpc_methodrH   c                   óH   a € ] tR t^Út o RtV 3R lR ltV 3R lR ltRtV tR# )Ú_DropTransportzGDetached WS sink: keep sessions resumable without writing stale frames.c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r>   Úobjr@   ©ÚdictÚbool)rC   Ú__classdict__s   "€rD   rE   Ú_DropTransport.__annotate__Ý   s   ø€ ÷ ñ ™ð ¡$ñ rF   c                ó   € R # )Fr•   )Úselfr«   s   &&rD   r]   Ú_DropTransport.writeÝ   s   € ÙrF   c                ó   <€ V ^8„  d   QhRR/# ©r>   r@   Nr•   )rC   r¯   s   "€rD   rE   r°   à   s   ø€ ÷ ñ �tñ rF   c                ó   € R # ©Nr•   )r²   s   &rD   ÚcloseÚ_DropTransport.closeà   s   € ÙrF   r•   N)	rb   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r]   r¸   Ú__static_attributes__Ú__classdictcell__©r¯   s   @rD   r¨   r¨   Ú   s   ø‡ € ÙQ÷ð ÷ö rF   r¨   c                  ó   € \         # r·   )Ú_real_stdoutr•   rF   rD   rw   rw   æ   s   € ­,rF   c                ót   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          /# )r>   Úenvr@   ©r­   rB   )rC   s   "rD   rE   rE   í   s*   € ÷ ñ œT¤#¤s (�^ð ´´S¼#°Xµñ rF   c                óð  € Rp\         P                  ! \        4      ;_uu_ 4        \        \	        \        4       4      R,          4      pRRR4       \        \	        \        P                  4      P                  4      pY\        \        P                  ! 4       R,          R,          4      V P                  R4      ;'       g    R3 Uu. uF  q3'       g   K  VNK  	  pp\        P                  P                  V4      V R&   \         P                  ! \        4      ;_uu_ 4        ^ RIpVP                  V R,          4      V R&   RRR4       V #   + '       g   i     EL; iu upi   + '       g   i     T # ; i)a  Prepend managed bin (managed-first policy for the Browser Use CLI), venv bin and
~/.local/bin to PATH so slash_worker children resolve Hermes-managed CLIs under the Desktop's minimal PATH.
The PM store dirs go in front of all of them: a user's node/uv in ~/.local/bin never wins.rH   ÚbinNz.localÚPATH)rT   rU   rV   rB   r   r   rd   Ú
executableÚparentÚhomerˆ   rW   ÚpathseprR   ÚpmÚstore_first_path)rÄ   Úmanaged_binÚvenv_binÚpÚpartsrÍ   s   &     rD   Ú_prepend_tool_pathsrÓ   í   s	  € ð €KÜ	×	Ò	œY×	'Õ	'Üœ$œÓ0Ó1°EÕ9Ó:ˆ÷ 
(ä”4œŸ™Ó'×.Ñ.Ó/€HØ$´´D·I²I³KÀ(Õ4JÈUÕ4RÓ0SÐUX×U\ÑU\Ð]cÓUd×UjÐUjÐhjÑkÓqÑk�1Óop�QˆQÑk€EÐqÜ—*‘*—/‘/ %Ó(€Cˆ�KÜ	×	Ò	œY×	'Õ	'Ûà×)Ñ)¨#¨f­+Ó6ˆˆF‰÷ 
(ð €J÷ 
(×	'Ð	'üò rç	'Ö	'ð €Jús#   ¥$EÃ	EÃEÄ! E$ÅE	Å$E5	c                   óp   a € ] tR t^þt o RtRV 3R lR lltR tR tV 3R lR ltV 3R	 lR
 lt	R t
RtV tR# )Ú_SlashWorkerz3Persistent HermesCLI subprocess for slash commands.Nc          	      óN   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RS[ R,          /# )r>   Úsession_keyÚmodelÚprofile_homeNÚproviderrA   )rC   r¯   s   "€rD   rE   Ú_SlashWorker.__annotate__  s8   ø€ ÷ /Iñ /I¡Cð /I±ð /IÁ3ÈÅ:ð /IÙ �:ñ/IrF   c                óH  € \         P                  ! 4       V n        ^ V n        . V n        \
        P                  ! 4       V n        \        P                  RRRVR\        \        P                  ! 4       4      .V'       d   RV.M. ,           V'       d   RV.M. ,           pRV n        ^ RIHp ^ R	IHp ^ R
IHp \)        T! T;'       g    V! 4       '       d   \*        MRRR7      4      p	\        \-        \.        4      P1                  4       P2                  P2                  4      p
\        P4                  P7                  R W©P9                  RR4      3 4       4      V	R&   \:        P<                  ! V\:        P>                  \:        P>                  \:        P>                  RRR^\        P@                  ! 4       V	V! 4       RR7      V n!        \         PD                  ! V PF                  RR7      PI                  4        \         PD                  ! V PJ                  RR7      PI                  4        R# )r   z-mztui_gateway.slash_workerz--session-keyz--parent-pidz--modelz
--providerF)Úwindows_hide_flags)Úserved_profile_child_env)Úis_multiplex_activeNT)Útarget_homeÚinherit_credentialsc              3   ó8   "  € T F  q'       g   K  Vx € K  	  R # 5ir·   r•   )Ú.0Úparts   & rD   Ú	<genexpr>Ú(_SlashWorker.__init__.<locals>.<genexpr>"  s   é € ð ,
ÙE�TË�DŠDÓEùs   ‚	�
Ú
PYTHONPATHrH   rK   Úreplace)ÚstdinÚstdoutre   ÚtextrM   ÚerrorsÚbufsizeÚcwdrÄ   ÚcreationflagsÚstart_new_session©ÚtargetÚdaemon)&Ú	threadingÚLockÚ_lockÚ_seqÚstderr_tailÚqueueÚQueueÚstdout_queuerd   rÉ   rB   rW   ÚgetpidÚ_closedÚhermes_cli._subprocess_compatrÝ   Útools.environments.localrÞ   Úagent.secret_scoperß   rÓ   Ú_hermes_homer   Ú__file__ÚresolverÊ   rÌ   rR   rˆ   Ú
subprocessÚPopenÚPIPEÚgetcwdÚprocÚThreadÚ_drain_stdoutÚstartÚ_drain_stderr)r²   r×   rØ   rÙ   rÚ   ÚargvrÝ   rÞ   rß   rÄ   Úmodule_roots   &&&&&      rD   Ú__init__Ú_SlashWorker.__init__  sœ  € ä—^’^Ó%ˆŒ
ØˆŒ	Ø&(ˆÔÜ6;·k²k³mˆÔô —‘ Ð&@À/ÐS^Ø¤¤B§I¢I£KÓ 0ð2ç%*�	˜5Ñ!°õ4÷ ,4�˜hÑ'¸õ=ˆð ˆŒÝDõ
 	FÝ:ô "Ñ":Ø$×YÐYÑ9L×9NÒ9N­ÐTXØ $ô#&ó 'ˆô œ$œx›.×0Ñ0Ó2×9Ñ9×@Ñ@ÓAˆÜŸJ™JŸO™Oñ ,
Ø)¯7©7°<ÀÓ+DÑEó,
ó 
ˆˆLÑô ×$Ò$Øœ
Ÿ™´
·±Ì
ÏÉÐ^bØ Y¸¼r¿yºy»{ÐPSÙ,Ó.À$ôHˆŒ	ô 	×Ò × 2Ñ 2¸4Ô@×FÑFÔHÜ×Ò × 2Ñ 2¸4Ô@×FÑFÖHrF   c                óz  € V P                   P                  ;'       g    .  Fg  p\        P                  ! \        P
                  4      ;_uu_ 4        V P                  P                  \        P                  ! V4      4       R R R 4       Ki  	  V P                  P                  R 4       R #   + '       g   i     K™  ; ir·   )	r  rê   rT   rU   ÚjsonÚJSONDecodeErrorrû   ÚputÚloads)r²   Úlines   & rD   r
  Ú_SlashWorker._drain_stdout2  s   € Ø—I‘I×$Ñ$×*Ð*¨Ò*ˆDÜ×$Ò$¤T×%9Ñ%9×:Õ:Ø×!Ñ!×%Ñ%¤d§j¢j°Ó&6Ô7÷ ;Ñ:ñ +ð 	×Ñ×Ñ˜dÖ#÷ ;×:Ð:ús   Á0B)Â)B:c                óÂ   € V P                   P                  ;'       g    .  F:  pVP                  R 4      ;p'       g   K  V P                  V.,           RR V n        K<  	  R# )Ú
Ni°ÿÿÿ)r  re   Úrstriprø   )r²   r  rë   s   &  rD   r  Ú_SlashWorker._drain_stderr8  sT   € Ø—I‘I×$Ñ$×*Ð*¨Ò*ˆDØ—{‘{ 4Ó(Ð(ˆt×(Ð(Ø$(×$4Ñ$4¸°vÕ$=¸s¸tÐ#D�Ö ó +rF   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r>   Úcommandr@   rA   )rC   r¯   s   "€rD   rE   rÛ   =  s   ø€ ÷ uñ u™3ð u¡3ñ urF   c                óH  € V P                   P                  4       e   \        R4      hV P                  ;_uu_ 4        V ;P                  ^,          un        V P                  pV P                   P
                  P                  \        P                  ! RVRV/4      R,           4       V P                   P
                  P                  4          V P                  P                  \        R7      pTf   M§TP                  R4      T8w  d   K?  TP                  R4      '       g   \        TP                  R	R
4      4      h\        TP                  RR4      ;'       g    R4      T n        \        TP                  RR4      4      P#                  4       uuRRR4       # \        RT P$                  '       d5   R\'        ^
4      P)                  T P$                  RR 4      ,            24      hR 24      h  \        P                   d    \        R4      hi ; i  + '       g   i     R# ; i)zãRun one command; return its output text.

A command like /prompt may also have parked a next-turn prompt (a "seed")
on the worker CLI; it rides back on the reply's ``seed`` field and is
retrieved separately via ``pop_seed()``.
Nzslash worker exitedÚidr  r  ©Útimeoutzslash worker timed outÚokÚerrorzslash worker failedÚseedrH   Úoutputzslash worker closed piperN   iøÿÿÿ)r  ÚpollÚRuntimeErrorrö   r÷   ré   r]   r  ÚdumpsrP   rû   rˆ   Ú_SLASH_WORKER_TIMEOUT_Srù   ÚEmptyrB   Ú
_last_seedr  rø   ÚchrrR   )r²   r  ÚridÚmsgs   &&  rD   ÚrunÚ_SlashWorker.run=  s³  € ð �9‰9�>‰>ÓÒ'ÜÐ4Ó5Ð5Ø�Z�Z‹ZØ�IŠI˜�N�IØ—)‘)ˆCØ�I‰I�O‰O×!Ñ!¤$§*¢*¨d°C¸ÀGÐ-LÓ"MÐPTÕ"TÔUØ�I‰I�O‰O×!Ñ!Ô#ØðAØ×+Ñ+×/Ñ/Ô8OÐ/ÓP�Cð ’;ØØ—7‘7˜4“= CÔ'ÙØ—w‘w˜t—}’}Ü& s§w¡w¨wÐ8MÓ'NÓOÐOÜ"% c§g¡g¨f°bÓ&9×&?Ð&?¸RÓ"@�”Ü˜3Ÿ7™7 8¨RÓ0Ó1×8Ñ8Ó:÷# ŠZô$ Ø*ÐY]×Yi×YiÐYi¨4´#°b³'·,±,¸t×?OÑ?OÐPRÐPSÐ?TÓ2UÕ+UÐ*rÐsóuð uØoqÐ*rÐsóuð uøô —{‘{ô AÜ&Ð'?Ó@Ð@ðAú÷ �ZˆZús7   ¼BHÃ G,Ã,3HÄ 8HÅ4HÆAHÇ,!HÈHÈH!	c                ó    <€ V ^8„  d   QhRS[ /# r�   rA   )rC   r¯   s   "€rD   rE   rÛ   [  s   ø€ ÷ ñ ™#ñ rF   c                ó.   € \        V RR4      Ruqn        V# )zDReturn and clear the seed from the last ``run()`` (empty when none).r+  rH   )Úgetattrr+  )r²   r$  s   & rD   Úpop_seedÚ_SlashWorker.pop_seed[  s   € ä '¨¨l¸BÓ ?ÀÐˆŒoØˆrF   c           
     ó†  € \        V R R4      '       d   R# RV n        V P                  p VP                  4       f%   VP	                  4         VP                  ^R7       M VP                  VP                  VP                  3 F>  p\        P                  ! \        4      ;_uu_ 4        VP                  4        RRR4       K@  	  R#   \         df    TP                  4        \        P                  ! \        4      ;_uu_ 4        TP                  ^R7       RRR4        KÂ    + '       g   i      LÓ; ii ; i  \         dh    \        P                  ! \        4      ;_uu_ 4        TP                  4        TP                  ^R7       RRR4        EK6    + '       g   i      ELH; ii ; i  + '       g   i     EK>  ; i  TP                  TP                  TP                  3 FR  p\        P                  ! \        4      ;_uu_ 4        TP                  4        RRR4       K@    + '       g   i     KQ  ; i	  i ; i)rý   FNTr   )r3  rý   r  r&  Ú	terminater    rV   ÚkillrT   rU   ré   rê   re   r¸   )r²   r  Ústreams   &  rD   r¸   Ú_SlashWorker.close`  s~  € Ü�4˜ E×*Ò*ÙØˆŒØ�y‰yˆð	#Ø�y‰y‹{Ò"Ø—‘Ô ð-Ø—I‘I a�IÕ(ð #ð  Ÿ:™: t§{¡{°D·K±KÓ@�Ü×(Ò(¬×3Õ3Ø—L‘L”N÷ 4Ñ3ó Aøô !ô -Ø—I‘I”KÜ#×,Ò,¬Y×7Õ7ØŸ	™	¨!˜	Ô,÷ 8×7×7Ó7úð-ûô ô 	%Ü×$Ò$¤Y×/Õ/Ø—	‘	”Ø—	‘	 !�	Ô$÷ 0×/×/Õ/úð	%ú÷ 4×3Ñ3ûð  Ÿ:™: t§{¡{°D·K±KÓ@�Ü×(Ò(¬×3Õ3Ø—L‘L”N÷ 4×3×3Ò3úò Aús´   ª"D; ÁC ÁG Â)F0Ã=D8ÄD#ÄD8Ä D; Ä!G Ä#D4Ä.D8Ä2D; Ä3G Ä4D8Ä8D; Ä;-F-Å(#FÆF-ÆG ÆF)Æ"F-Æ&G Æ)F-Æ-G Æ0GÇA	I ÈH)È
I È)H:È4I )rý   r+  rö   r÷   r  rø   rû   ©NN)rb   rº   r»   r¼   r½   r  r
  r  r/  r4  r¸   r¾   r¿   rÀ   s   @rD   rÕ   rÕ   þ   s@   ø‡ € Ù=÷/Iò /Iòb$òE÷
uð u÷<ð ÷
#ð #rF   rÕ   c                ó$   € V ^8„  d   QhR\         /# r�   ©r­   )rC   s   "rD   rE   rE   x  s   € ÷ 8ñ 8”dñ 8rF   c                 óh   € \        4       P                  R4      p \        V \        4      '       d   V # / # )zN``display`` section of the behavioral config, or ``{}`` when absent/malformed.Údisplay)Ú	_load_cfgrˆ   Ú
isinstancer­   )r?  s    rD   Ú_display_cfgrB  x  s)   € ä‹k�o‰o˜iÓ(€GÜ  ¬$×/Ò/ˆ7Ð7°RÐ7rF   c                ó$   € V ^8„  d   QhR\         /# r�   rA   )rC   s   "rD   rE   rE   ~  s   € ÷ Jñ Jœsñ JrF   c                  óª   € \        \        4       P                  R R4      ;'       g    R4      P                  4       P	                  4       p V R9   d   V # R# )Úbusy_input_moderH   Ú	interrupt>   rù   ÚsteerrF  )rB   rB  rˆ   r`   Úlower)r�   s    rD   Ú_load_busy_input_moderI  ~  sI   € Ü
Œl‹n× Ñ Ð!2°BÓ7×=Ð=¸2Ó
>×
DÑ
DÓ
F×
LÑ
LÓ
N€CØÐ8Ô8ˆ3ÐI¸kÐIrF   c                ó$   € V ^8„  d   QhR\         /# r�   ©r®   )rC   s   "rD   rE   rE   ƒ  s   € ÷ Sñ S¬$ñ SrF   c                 óH   € \        \        4       P                  RR4      4      # )zÎ``display.interim_assistant_messages`` (default true); when false no ``interim_assistant_callback``
is installed, so tool-call/verify-on-stop interim text never becomes ``message.interim`` (gateway parity).Úinterim_assistant_messagesT)r   rB  rˆ   r•   rF   rD   Ú _load_interim_assistant_messagesrN  ƒ  s   € ô œ<›>×-Ñ-Ð.JÈDÓQÓRÐRrF   c                ó   € V ^8„  d   QhRR/# rµ   r•   )rC   s   "rD   rE   rE   ‰  s   € ÷ =ñ =˜Dñ =rF   c                  ó`  € \         \        \        3 F5  p \        P                  ! \
        4      ;_uu_ 4        V ! 4        R R R 4       K7  	  \        ;_uu_ 4        \        \        4      pR R R 4       X F  p\        VRR7       K  	  R #   + '       g   i     Kˆ  ; i  + '       g   i     L<; i)NÚtui_shutdown)Ú
end_reason)
Ú_flush_sessions_before_exitÚ_release_gateway_wake_ownerÚ_stop_turns_before_exitrT   rU   rV   Ú_sessions_lockÚlistÚ	_sessionsÚ_close_session_by_id)ÚstepÚsidsÚsids      rD   Ú_shutdown_sessionsr]  ‰  so   € ä,Ô.IÔKbÓcˆÜ× Ò ¤×+Õ+ÙŒF÷ ,Ñ+ñ d÷ 
ŽÜ”I‹ˆ÷ 
ãˆÜ˜S¨^×<ó ÷	 ,×+Ð+úç	�ús   ·B	ÁBÂ	BÂB-	r†   ÚHERMES_TUI_SESSION_TTL_SÚHERMES_TUI_EXIT_FLUSH_BUDGET_SÚ#HERMES_TUI_SESSION_FLUSH_INTERVAL_Sc                ó   € V ^8„  d   QhRR/# rµ   r•   )rC   s   "rD   rE   rE   Ÿ  s   € ÷ 8ñ 8˜Dñ 8rF   c                  óX   € R  p \         P                  ! V RR7      P                  4        R# )c                  óÎ   €  \         P                  ! \        4       \        P                  ! \
        4      ;_uu_ 4        \        4        RRR4       KR    + '       g   i     Kc  ; i)TN)r^   ÚsleepÚ_REAPER_SCAN_SrT   rU   rV   Ú_reap_idle_sessionsr•   rF   rD   Ú_loopÚ!_start_idle_reaper.<locals>._loop   s7   € ØÜ�JŠJ”~Ô&Ü×$Ò$¤Y×/Õ/Ü#Ô%÷ 0×/×/Ò/ús   ¾AÁA$	Trñ   N)rô   r	  r  )rg  s    rD   Ú_start_idle_reaperri  Ÿ  s"   € ò&ô
 ×Ò˜E¨$Ô/×5Ñ5Ö7rF   c                ó$   € V ^8„  d   QhR\         /# r�   r   )rC   s   "rD   rE   rE   ¯  s   € ÷ 	ñ 	”dñ 	rF   c                 óV   € \         \        8w  d   \         M	\        4       p \        V 4      # )ug  The launch profile's home at call time: the patched ``_hermes_home`` when a test changed
it, else the live process home â€” resolved through :func:`get_process_hermes_home`, which honours
``HERMES_HOME`` but ignores the context-local override. The desktop multiplex cron ticker sets
that override per profile at startup, and a first touch inside a foreign window would bind
process-wide launch state (the shared ``state.db`` handle, the launch ``.env`` secrets) to
another profile (#102526). Resolving here rather than at import time lets a harness that
redirects ``HERMES_HOME`` after import be honoured (#112692).)r  Ú_HERMES_HOME_AT_IMPORTr   r   )rË   s    rD   Ú_launch_homerm  ¯  s!   € ô (Ô+AÔA�<ÔG^ÓG`€DÜ�‹:ÐrF   c                ó$   € V ^8„  d   QhR\         /# r�   r   )rC   s   "rD   rE   rE   »  s   € ÷ 'ñ 'œtñ 'rF   c                 ó$   € \        4       R,          # )z9Launch profile's ``state.db`` (see :func:`_launch_home`).ústate.db)rm  r•   rF   rD   Ú_launch_state_db_pathrq  »  s   € ä‹>˜JÕ&Ð&rF   c                  óÒ   € \         f!   ^ RIHp   V ! \        4       4      R us s\         # \         #   \
         d-   p\        T4      s\        P                  RT4        R p?R # R p?ii ; i)N©ÚacquireuJ   TUI session store unavailable â€” continuing without state.db features: %s)	Ú_dbÚhermes_state_registryrt  rq  Ú	_db_errorrV   rB   ÚloggerÚwarning)rt  Úexcs     rD   Ú_get_dbr{  À  s^   € ä
‚{Ý1ð	ñ %Ô%:Ó%<Ó=¸tˆNˆC�ô
 €JŒ3€Jøô	 ô 	Ü˜C›ˆIÜ�N‰NÐgÐilÔmÝûð	ús   �/ ¯A&º!A!Á!A&c                ó$   € V ^8„  d   QhR\         /# r�   rK  )rC   s   "rD   rE   rE   Ï  s   € ÷ ñ ¬ñ rF   c                ó8  € \         P                  ! \        4      ;_uu_ 4        V e   Ve   \        V RR4      VJd    RRR4       R# V\	        4       J d!   \
        P                  R4        RRR4       R# RV n         RRR4       R#   + '       g   i     R# ; i)uq  Hand a DEDICATED profile ``state.db`` handle to *agent* (``AIAgent.close()`` then releases it).
False = agent not holding *this* handle (build failed before ``_make_agent`` or got a different db):
the caller still owns it. The shared launch handle never transfers â€” it outlives every agent, and
ownership would let session.close() tear down the process-wide database.NÚ_session_dbFu|   Refused transfer of the shared launch SessionDB to a session agent â€” the caller's owns_db gate should have prevented this.T)rT   rU   rV   r3  r{  rx  ry  Ú_owns_session_db)ÚagentÚdbs   &&rD   Ú_transfer_db_to_agentr‚  Ï  s„   € ô
 
×	Ò	œY×	'Õ	'ØŠ=˜BšJ¬'°%¸ÈÓ*MÐUWÓ*WØ÷ 
(Ñ	'ð ”“‹?Ü�N‰Nð ]ô ^à÷ 
(Ñ	'ð "&ˆÔØ÷ 
(×	'×	'Ð	'ñ ús   £BÁ$BÁ6BÂB	c                óŽ   € ^ RI Hp \        V 4      R,          p V! V4      #   \         d   p\	        RT RT 24      ThRp?ii ; i)u1  Open a DEDICATED handle on ``profile_home``'s ``state.db`` â€” FAIL CLOSED: a silent fallback to the
launch ``state.db`` would bleed rows into the wrong profile's store exactly when the profile store is
briefly unopenable (locked, mid-restore); callers let the error abort the build (â†’ ``agent_error``).rs  rp  z#profile session store unavailable: rN   N)rv  rt  r   rV   r'  )rÙ   rt  Údb_pathrz  s   &   rD   Ú_open_profile_session_dbr…  ä  sU   € õ .Ü�<Ó  :Õ-€Gð\Ù�wÓÐøÜô \ÜÐ@ÀÀ	ÈÈCÈ5ÐQÓRÐX[Ð[ûð\ús   š" ¢A­?¿Ac                ó(   € V ^8„  d   QhR\         RR/# )r>   r„  r@   Nr   )rC   s   "rD   rE   rE   ð  s   € ÷ 'ñ '¬Tð '°dñ 'rF   c                óš   €  V P                  4       P                  ^ 8”  d   R#  ^ RIHpHp V! V! V 4      4       R#   \         d     L%i ; i)as  A served profile whose first RPC is a read (Bot Chat registry lookup on a fresh bot) has no
``state.db`` yet. Browsing never creates a store, but THIS process is the profile's session
owner (``_open_profile_session_db`` acquires the writer for every agent build), so it seeds the
store it is about to own instead of answering ``storage_unavailable`` until a turn happens.N)rt  Úrelease_or_close)ÚstatÚst_sizeÚFileNotFoundErrorrv  rt  rˆ  )r„  rt  rˆ  s   &  rD   Ú_bootstrap_served_profile_storerŒ  ð  sJ   € ð
Ø�<‰<‹>×!Ñ! AÔ%Ùð &÷ @Ù‘W˜WÓ%Ö&øô ô Ùðús   ‚< ¼A
Á	A
ÚwriterFc                ó>   € V ^8„  d   QhR\         R,          R\        /# )r>   ÚparamsNr�  r¬   )rC   s   "rD   rE   rE   ÿ  s   € ÷ ñ œ˜t�ð ´tñ rF   c          	   #  ó�  "  € \        V \        4      '       d4   V P                  R4      ;'       g    RP                  4       ;'       g    RMRp\	        V4      ;pf   \        4       RrTMe V'       d    ^ RIHp V! \        V4      R,          4      pM;^ RI	H
p \        \        V4      R,          4       V! \        V4      R,          RR	7      pRp Vx € V'       dD   Ve>   \        P                   ! \        4      ;_uu_ 4        VP#                  4        RRR4       R# R# R#   \         d$   p\        P                  R
Y(4       RRrT Rp?L{Rp?ii ; i  + '       g   i     R# ; i  T'       dU   TeP   \        P                   ! \        4      ;_uu_ 4        TP#                  4        RRR4       i   + '       g   i     i ; ii i ; i5i)aq  Yield the SessionDB for ``params['profile']`` (None when unavailable); closes dedicated
profile handles, leaves the launch-profile shared handle open.

Foreign-profile handles are read-only unless ``writer=True``: that store belongs to ITS
gateway/dashboard, and a writer here would take its write lock per RPC. Mirrors
hermes_cli.web_routers.profiles._read_profile_db.ÚprofilerH   NFrs  rp  )Ú_open_session_db_at_pathT)Ú	read_onlyz0TUI profile session store unavailable for %s: %s)rA  r­   rˆ   r`   Ú_profile_homer{  rv  rt  r   Úhermes_cli.web_server_sessionsr’  rŒ  rV   rx  ry  rT   rU   r¸   )	r�  r�  r‘  rÙ   r�  Úownsrt  r’  rz  s	   &$       rD   Ú_profile_dbr—  þ  sS  é € ô @JÈ&ÔRV×?WÒ?Wˆv�z‰z˜)Ó$×*Ð*¨×1Ñ1Ó3×;Ð;°tøÐ]a€Gô & gÓ.Ð.ˆÒ7Ü“9˜e‰Dð	#ßÝ9ÙœT ,Ó/°*Õ<Ó=‘åSÜ/´°\Ó0BÀZÕ0OÔPÙ-¬d°<Ó.@À:Õ.MÐY]Ô^�ØˆDðØŠç�B’NÜ×$Ò$¤Y×/Õ/Ø—‘”
÷ 0Ñ/ñ #‰4øô ô 	#Ü�N‰NÐMÈwÔ\Ø˜U•ûð	#ú÷ 0×/Ð/û÷ �B’NÜ×$Ò$¤Y×/Õ/Ø—‘”
÷ 0×/×/Ð/úð #ˆ4üsƒ   ‚.G±GÁ	 GÁ*D  Á2AD  ÃE% Ã.GÄEÄGÄ EÄ+E	ÅGÅ	EÅGÅE"	Å	GÅ%/GÆF.	Æ%	GÆ.F>Æ9
GÇGc                ó0   € V ^8„  d   QhR\         R\         /# ©r>   ru   r@   rA   )rC   s   "rD   rE   rE      s   € ÷ ñ ¤Sð ¬Sñ rF   c                ó´   € V P                  4       R9   dC   ^ RIHp VP                  4       VP	                  V 4      ,          P                  4       '       g   R# V # )uY  Canonicalize profile basenames emitted by older session-info payloads.

``Path(default_home).name`` was historically sent as a profile id. Those basenames are
installation details â€” unless a real named profile of that name exists (``hermes`` is a legal
id), in which case it wins; other unknown names keep failing closed in ``_profile_home``.
©Úprofilesr€   >   Úhermesú.hermes)ÚcasefoldÚ
hermes_clirœ  Ú_get_profiles_rootÚnormalize_profile_nameÚis_dir)ru   Úprofiles_mods   & rD   Ú_canonical_profile_requestr¥     sI   € ð ‡}�}ƒÐ/Ô/Ý7ð ×/Ñ/Ó1°L×4WÑ4WÐX\Ó4]Õ]×eÑe×gÒgÙØ€KrF   c                ó>   € V ^8„  d   QhR\         R,          R\         /# ©r>   r‘  Nr@   rA   )rC   s   "rD   rE   rE   0  s   € ÷ 'ñ '¤C¨$¥Jð '¼#ñ 'rF   c                óÖ   € \        T ;'       g    RP                  4       4      pV'       g   \        4       #  \        V4      e   V# \        4       #   \         d    \        4       u # i ; i)z`Profile name for session.* payloads: the requested real non-launch profile, else the launch one.rH   )r¥  r`   Ú_current_profile_namer”  ÚProfileUnavailableError)r‘  ru   s   & rD   Ú_response_profile_namer«  0  s]   € ä% w§} }°"×&;Ñ&;Ó&=Ó>€DßÜ$Ó&Ð&ð'Ü$ TÓ*Ò6ˆtÐSÔ<QÓ<SÐSøÜ"ô 'Ü$Ó&Ò&ð'ús   ·A Á	A ÁA(Á'A(c                ó$   € V ^8„  d   QhR\         /# )r>   Úcode©Úint)rC   s   "rD   rE   rE   ;  s   € ÷ lñ l¬ñ lrF   c                óÂ   € ^ RI HpHp V! \        4      p\	        WRVP
                   RVP                   2RVP                  RVP                  RV! \        4      /R7      # )r   )Údescribe_storage_failureÚstorage_failure_detailsz Session storage is unavailable: z. r­  ÚcauseÚdetails)Údata)	Úhermes_state_user_copyr±  r²  rw  Ú_errÚglossÚactionr­  r³  )r-  r­  r±  r²  Úfailures   &$   rD   Ú_db_unavailable_errorr»  ;  sY   € ßXÙ&¤yÓ1€GÜØØ
*¨7¯=©=¨/¸¸G¿N¹NÐ;KÐLØ�g—l‘l G¨W¯]©]¸IÑG^Ô_hÓGiÐjôlð lrF   c                   ó   € ] tR tRtRtRtR# )rª  iG  a  An explicit ``profile`` param names no live profile on this host. Raised out of the method
(never a silent fall-back to the launch profile); ``handle_request`` turns it into JSON-RPC 4064
so a client holding a deleted profile gets a typed error instead of a ws dispatch crash (#107829).r•   N)rb   rº   r»   r¼   r½   r¾   r•   rF   rD   rª  rª  G  s   † õjrF   rª  c                óL   € V ^8„  d   QhR\         R,          R\        R,          /# r§  )rB   r   )rC   s   "rD   rE   rE   M  s"   € ÷ ñ œ3 �:ð ¬$°­+ñ rF   c                óØ  € \        T ;'       g    RP                  4       4      ;p'       g   R# ^ RIHp  \	        VP                  V4      4      pVe   VP                  4       '       g   \        RV R24      hVP                  4       \	        \        4      P                  4       8X  d   R# V\        9  d   ^ RIHp V! 4        \        P                  V4       V#   \         d    Rp L™i ; i)zLResolve a named profile's home on THIS host, or None for the launch profile.rH   Nr›  z	Profile 'z' does not exist.)Úactivate_multi_profile_hosting)r¥  r`   r   rœ  r   Úget_profile_dirrŠ   r£  rª  r  r  Ú_served_profile_homesÚ!tui_gateway.launch_profile_policyr¿  Úadd)r‘  ru   r¤  rË   r¿  s   &    rD   r”  r”  M  sÄ   € ä.°·°¸2×/DÑ/DÓ/FÓGÐGˆDÖGÙÝ3ðÜ�L×0Ñ0°Ó6Ó7ˆð ‚|˜4Ÿ;™;Ÿ=š=Ü%¨	°$°Ð7HÐ&IÓJÐJØ‡|�|ƒ~œœlÓ+×3Ñ3Ó5Ô5ÙØÔ(Ô(õ
 	UÙ&Ô(Ü×Ñ˜dÔ#Ø€Køô ô ØŠðús   µC ÃC)Ã(C)c                ó   a € V 3R lpV# )a§  Bind ``params['profile']``'s full runtime scope (HERMES_HOME + secrets + terminal policy) around a
handler, so config.yaml ``${VAR}`` refs, provider credential checks and ``.env`` writes resolve to
THAT profile (app-global remote mode hits the focused profile). Home alone left ``get_secret`` on the
launch process's ``os.environ``: ``config.get full`` for a secondary shipped the default profile's
expanded secrets and ``config.set`` published a secondary's ``.env`` edit into the shared process env.

Launch profile: unscoped while this is a single-profile process (legacy ``os.environ`` precedence,
systemd / ``op run`` injection); once multiplexing is active it binds its own scope from the env
frozen at activation (``_session_profile_runtime_scope``), never ambient state a secondary context
might have poisoned (#107422).

No ``profile`` param but a ``session_id`` naming a live session: that session's ``profile_home``
is the scope. The TUI and the Desktop's ambient dispatcher send session-bound RPCs with the
session id alone, so a ``config.set`` from a focused worker session otherwise persisted into the
LAUNCH profile's config.yaml while the worker's stayed unchanged (#85669).
c                 ój  <€ \        V\        4      '       d   TM/ p\        VP                  R 4      ;'       g    R4      P	                  4       '       d1   \        VP                  R 4      4      pV'       d   \        V4      MRpMk^ RIHp \        P                  \        VP                  R4      ;'       g    R4      4      p\        V\        4      '       d   VP                  R4      MV! 4       p\        RT;'       g    R/4      ;_uu_ 4        S! W4      uuRRR4       #   + '       g   i     R# ; i)r‘  rH   N)Úconnection_profile_homeÚ
session_idrÙ   )
rA  r­   rB   rˆ   r`   r”  Útui_gateway.ws_legacy_fallbackrÆ  rX  Ú_session_profile_runtime_scope)r-  r�  rÑ   rË   rÙ   rÆ  ÚsessionÚhandlers   &&     €rD   ÚwrapperÚ _profile_scoped.<locals>.wrapper{  sÕ   ø€ Ü  ¬×.Ò.‰F°BˆÜˆq�u‰u�YÓ×%Ð% 2Ó&×,Ñ,×.Ò.Ü  §¡ yÓ!1Ó2ˆDß(,œ3˜tœ9°$‰Lõ OÜ—m‘m¤C¨¯©¨lÓ(;×(AÐ(A¸rÓ$BÓCˆGÜ:DÀWÌd×:SÒ:S˜7Ÿ;™; ~Ô6ÑYpÓYrˆLÜ+¨^¸\×=QÐ=QÈTÐ,R×SÕSÙ˜3Ó'÷ T×S×SÓSús   ÄD!Ä!D2	r•   )rË  rÌ  s   f rD   Ú_profile_scopedrÎ  j  s   ø€ õ"(ð €NrF   c                óL   € V ^8„  d   QhR\         R,          R\        R,          /# ©r>   ÚcfgNr@   rÅ   )rC   s   "rD   rE   rE   �  s"   € ÷ 9ñ 9¤$¨¥+ð 9´#¸µ*ñ 9rF   c                óÜ  € \        V \        4      '       d   V P                  R4      MRp\        V\        4      '       d3   \        VP                  R4      ;'       g    R4      P	                  4       MRpV'       d   V\
        9   d   R# \        P                  P                  \        P                  P                  V4      4      p\        P                  P                  V4      '       d   V# R# )zaAbsolute, existing ``terminal.cwd`` from a config mapping; None for placeholders/missing/invalid.ÚterminalNrî   rH   )rA  r­   rˆ   rB   r`   Ú_CWD_PLACEHOLDERSrW   rY   ÚabspathÚ
expanduserÚisdir)rÑ  Úterminal_cfgr�   Úresolveds   &   rD   Ú_configured_cwd_from_cfgrÚ  �  s    € ä*4°S¼$×*?Ò*?�3—7‘7˜:Ô&ÀT€LÜ8BÀ<ÔQU×8VÒ8VŒ#ˆl×Ñ˜uÓ%×+Ð+¨Ó
,×
2Ñ
2Ô
4Ð\^€Cß�#Ô*Ô*ÙÜ�w‰w�‰œrŸw™w×1Ñ1°#Ó6Ó7€HÜ—w‘w—}‘} X×.Ò.ˆ8Ð8°DÐ8rF   c                óL   € V ^8„  d   QhR\         R,          R\        R,          /# )r>   rÙ   Nr@   )r   rB   )rC   s   "rD   rE   rE   ™  s"   € ÷ ñ ¬$°­+ð ¼#À½*ñ rF   c                ó  € V f   R# \         P                  ! \        4      ;_uu_ 4        ^ RIHp \        V 4      R,          pVP                  4       '       d   \        V! V4      4      MRuuRRR4       #   + '       g   i     R# ; i)uó  A profile's ``terminal.cwd`` from ITS config.yaml (fail-open â†’ None): the process-global
``TERMINAL_CWD`` belongs to the *launch* profile, and load_config() resolves the ACTIVE profile, so
read the requested file through the same effective-config pipeline as ``_load_cfg``.

A new session bound to another profile must take its workspace from THAT profile's config, not the stale
env var (issue #40334). Returns an absolute, existing directory, or None for placeholders / missing /
invalid paths.
N©Úload_user_config_effectiveúconfig.yaml)rT   rU   rV   Úhermes_cli.config_effectiverÞ  r   ÚexistsrÚ  )rÙ   rÞ  rÑ   s   &  rD   Ú_profile_configured_cwdrâ  ™  s`   € ð ÒÙÜ	×	Ò	œY×	'Õ	'ÝJÜ�Ó Õ.ˆØJKÏ(É(Ï*Ê*Ô'Ñ(BÀ1Ó(EÔFÐZ^÷ 
(×	'×	'Ñ	'ñ ús   ©AA5Á5B	c                ó2   € V ^8„  d   QhR\         R,          /# rµ   rA   )rC   s   "rD   rE   rE   «  s   € ÷ 7ñ 7¤ d¥
ñ 7rF   c                 ó2   € \        \        \        4      4      # )zÕLaunch profile's ``terminal.cwd`` from config.yaml: the dashboard's in-memory gateway gets no bridged
``TERMINAL_CWD`` env (only the Node PTY child does), so a fresh /chat would otherwise start in ``os.getcwd()``.)râ  r   r  r•   rF   rD   Ú_launch_configured_cwdrå  «  s   € ô
 #¤4¬Ó#5Ó6Ð6rF   c                ó$   € V ^8„  d   QhR\         /# r�   rA   )rC   s   "rD   rE   rE   ³  s   € ÷ Pñ Pœcñ PrF   c                 óŒ   € \        4       ;'       g4    \        P                  ! R4      ;'       g    \        P                  ! 4       # )z¦Fallback cwd when no explicit / stored / profile cwd (mirrors :func:`_completion_cwd`'s tail so created
AND resumed sessions land in the configured ``terminal.cwd``).ÚTERMINAL_CWD)rå  rW   Úgetenvr  r•   rF   rD   Ú_default_session_cwdrê  ³  s,   € ô "Ó#×OÐO¤r§y¢y°Ó'@×OÐOÄBÇIÂIÃKÐOrF   c                ó0   € V ^8„  d   QhR\         R\        /# rª   r¬   )rC   s   "rD   rE   rE   ¹  s   € ÷ @ñ @”Dð @œTñ @rF   c                ó4  € ^ RI Hp ^ RIHp V! V 4       V P	                  R4      pV P	                  R4      R8X  g-   \        V P	                  R4      \        4      '       d“   RV 9   dŒ   V! V \        4       \        V\        4      '       d   T;'       g    / P	                  R4      MRpV'       dD   \        P	                  V4      ;'       g    / P	                  R	4      ;pe   VP                  V 4      # \        4       ;'       g    \        P                  V 4      # )
u   Emit one JSON frame via the most-specific transport: (1) event frames with a session id â†’ that
session's transport (async events reach the owner even from threads with no contextvar binding);
(2) the context-bound transport (:func:`dispatch`); (3) module stdio (tests monkey-patch ``_real_stdout``).
Every event frame gets a per-session monotonic ``seq`` + replay-ring entry so ``session.events.since`` can resume.)Ú_stamp_event)Úproject_room_member_activityr�  ÚmethodÚeventr  rÇ  rH   Ú	transport)Útui_gateway.event_replayrí  Ú'tui_gateway.hosted_room_member_activityrî  rˆ   rA  rB   rX  r­   r]   r7   Ú_stdio_transport)r«   rí  rî  r�  r\  Úts   &     rD   Ú
write_jsonrö  ¹  sÑ   € õ
 6ÝTÙ�ÔØ�W‰W�XÓ€FØ
‡w�wˆxÓ˜GÔ#¬
°3·7±7¸4³=Ä#×(FÒ(FÈ8ÐWZÌ?ñ 	% S¬)Ô4Ü4>¸vÄt×4LÒ4L�—�˜"×!Ñ! ,Ô/ÐRTˆßœ)Ÿ-™-¨Ó,×2Ð2°×7Ñ7¸ÓDÐD�AÒQØ—7‘7˜3“<ÐÜÓ×3Ð3Ô#3×:Ñ:¸3Ó?Ð?rF   c                óV   € V ^8„  d   QhR\         R\         R\        R,          R\        /# ©r>   rð  r\  ÚpayloadNr@   ©rB   r­   )rC   s   "rD   rE   rE   Í  s2   € ÷ Cñ Cœð C¤#ð C´°tµð CÄtñ CrF   c                 ó^   € \         P                  ! W4       R V RV/Ve   RV/M/ CpRRRRRV/# )ÚtyperÇ  rù  Újsonrpcú2.0rï  rð  r�  )Ú
_contractsÚcheck_payload)rð  r\  rù  r�  s   &&& rD   Ú_event_framer  Í  sD   € Ü×Ò˜UÔ,Ø˜E <°ÐnÐQXÒQd¸)ÀWÑ9MÐjlÐn€FØ�u˜h¨°¸6ÐBÐBrF   c                óV   € V ^8„  d   QhR\         R\         R\        R,          R\        /# rø  )rB   r­   r®   )rC   s   "rD   rE   rE   Ó  s,   € ÷ 9ñ 9”ð 9œ3ð 9¬°­ð 9Äñ 9rF   c                 óX   € ^ RI Hp V! W4      '       d   R# \        \        WV4      4      # )r   )Úevent_presentation_mutedF)Úagent.notification_presentationr  rö  r  )rð  r\  rù  r  s   &&& rD   Ú_emitr  Ó  s%   € ÝHÙ ×+Ò+ÙÜ”l 5¨wÓ7Ó8Ð8rF   ©Úserver_requestsc                 ó   € \        V 4      # r·   )rö  )Úframes   &rD   rw   rw   Ü  s	   € ¬*°UÔ*;rF   c                 ó   € \        WV4      # r·   )r  )rð  r\  rù  s   &&&rD   rw   rw   Ü  s   € ÔY^Ð_dÐkrÔYsrF   c                 ó   € \        V 4      # r·   )Ú _session_client_answers_requests©r\  s   &rD   rw   rw   Ý  s
   € Ô(HÈÔ(MrF   c                 ó   € \        V 4      # r·   )Ú_session_answering_clientsr  s   &rD   rw   rw   Þ  s
   € Ô(BÀ3Ô(GrF   c                ó6   € V ^8„  d   QhR\         R,          RR/# ©r>   rñ  Nr@   ©r5   )rC   s   "rD   rE   rE   ì  s   € ÷ ,ñ ,¤y°4Õ'7ð ,¸Dñ ,rF   c                ó’   € V e/   \         ;_uu_ 4        \        P                  V 4       RRR4       R# R#   + '       g   i     R# ; i)zETrack a connected client transport for global broadcasts. Idempotent.N)Ú_live_transports_lockÚ_live_transportsrÃ  ©rñ  s   &rD   Úregister_live_transportr  ì  s3   € àÒß"Ö"Ü× Ñ  Ô+÷ #Ñ"ñ ß"×"Ð"ús	   “5µA	c                ó6   € V ^8„  d   QhR\         R,          RR/# r  r  )rC   s   "rD   rE   rE   ó  s   € ÷ 'ñ '¬°TÕ)9ð '¸dñ 'rF   c                ó°   € \         ;_uu_ 4        \        P                  V 4       RRR4       \        P                  ! V 4       R#   + '       g   i     L(; i)z;Stop tracking a transport (call on disconnect). Idempotent.N)r  r  ÚdiscardÚ_server_requestsÚforgetr  s   &rD   Úunregister_live_transportr  ó  s2   € ç	Ö	Ü× Ñ  Ô+÷ 
ä×Ò˜IÖ&÷ 
×	ús   �AÁA	Úskipc                óB   € V ^8„  d   QhR\         R\        R,          RR/# )r>   rð  rù  Nr@   rú  )rC   s   "rD   rE   rE   ú  s+   € ÷ ^ñ ^¤3ð ^´¸µð ^Ð]añ ^rF   c               óÄ  € \         ;_uu_ 4        \         Uu. uF  q3V9  g   K  VNK  	  ppRRR4       X'       g:   V'       g2   \        '       d   \        V RV4      # \        P                  RV 4       R# \        V RV4      pV F  p VP                  V4       K  	  R# u upi   + '       g   i     L€; i  \         d    \        P                  RT RR7        KY  i ; i)u/  Fan a session-less, surface-global event (``skin.changed``) to every connected client â€” background
emitters bottom out at stdio in ``write_json``'s ladder. No registered transports â†’ ``_emit`` when stdout is the
stdio TUI's JSON-RPC channel, else dropped (nobody is listening; stdout is a log sink).NrH   z<global-event broadcast dropped (no connected client) type=%sz+global-event broadcast write failed type=%sT©Úexc_info)	r  r  Ú_stdio_is_rpc_channelr  rx  Údebugr  r]   rV   )rð  rù  r  rñ  Útargetsr
  s   &&$   rD   Ú_broadcast_global_eventr'  ú  s¹   € ÷ 
Ö	Ý.>ÓXÑ.> ÐSWÑBW—9�9Ñ.>ˆÐX÷ 
çŸ4ß Ó Ü˜  GÓ,Ð,Ü�‰ÐSÐUZÔ[ÙÜ˜  GÓ,€EÛˆ	ð	^Ø�O‰O˜EÖ"ó ùò Y÷ 
×	ûô ô 	^Ü�L‰LÐFÈÐX\ˆL×]ð	^ús2   �	B%˜B ¥B «B%Â	B8Â B%Â%B5	Â8#CÃCc                ó>   € V ^8„  d   QhR\         R,          R\         /# )r>   rµ  Nr@   r=  )rC   s   "rD   rE   rE     s   € ÷ ñ ¤D¨4¥Kð ´Dñ rF   c                ór  € \        T ;'       g    / 4      pRV9  dt   R.pVP                  R4      '       gM   VP                  R4      RJd8   VP                  R4       VP                  R4      RJd   VP                  R4       VR	.,           VR&   R
V9   d!   ^ RIHp V! VP                  R
4      4      VR
&   V# )z;Build the client-safe representation of a pending approval.ÚchoicesÚonceÚsmart_deniedÚallow_sessionFrÊ  Úallow_permanentÚalwaysÚdenyr  )Ú_redact_approval_command)r­   rˆ   ÚappendÚgateway.runr1  )rµ  rù  r*  r1  s   &   rD   Ú_approval_request_payloadr4    s¤   € ä�4—:�:˜2Ó€GØ˜ÔØ�(ˆØ�{‰{˜>×*Ò*¨w¯{©{¸?Ó/KÐSXÓ/XØ�N‰N˜9Ô%Ø�{‰{Ð,Ó-°UÓ:Ø—‘˜xÔ(Ø$¨ xÕ/ˆ�	ÑØ�GÔÝ8Ù5°g·k±kÀ)Ó6LÓMˆ�	ÑØ€NrF   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r>   r\  r@   ©rB   rW  r­   )rC   s   "rD   rE   rE     s   € ÷ ñ œð ¤¤T¥
ñ rF   c                ó|  € ^ RI Hp VP                  V 4      pV'       d   V# \        P	                  V 4      ;pen   VP	                  R\
        P                  ! 4       4      ;_uu_ 4        VP	                  R4      p\        V\        4      '       d   \        V4      .M. uuRRR4       # . #   + '       g   i     . # ; i)u�  Serverâ†’client requests still waiting on *sid*'s renderer, for reconnect snapshots (``session.resume`` /
``session.activate`` / ``session.events.since``). A client detached when the request frame was written would
otherwise never see it (agent parked until timeout). Under turn isolation the compute-host child owns the
request; the parent mirrors it from the relayed frame (compute_host_bridge).r  NÚhistory_lockÚ_compute_host_open_request)	Útui_gatewayr  Úopen_requestsrX  rˆ   rô   rõ   rA  r­   )r\  r  ÚreqsrÊ  Úmirroreds   &    rD   Ú_open_requestsr>    s‘   € õ
 ,Ø×(Ñ(¨Ó-€DßØˆÜ—=‘= Ó%Ð%ˆÒ2Ø�[‰[˜¬¯ªÓ)9×:Õ:Ø—{‘{Ð#?Ó@ˆHÜ'1°(¼D×'AÒ'A”D˜“NÑ#Àr÷ ;Ò:ð €I÷ ;Ö:ð €Iús   Á(5B*Â*B;	c                ó>   € V ^8„  d   QhR\         R\        R,          /# ©r>   r\  r@   Nrú  )rC   s   "rD   rE   rE   -  s"   € ÷ Jñ J¬Sð J´T¸Dµ[ñ JrF   c                ó   € ^ RI Hp \        P                  V 4      pV'       dE   TP	                  \        VP                  R4      ;'       g    R4      VP                  R4      R7      MRpVe   VP                  4       # R# )z¬The open connection operation on *sid* as its ``connection.request`` payload, so a client
that missed the event (or restarted) restores the card with the server's deadline.)Úliver×   rH   rÙ   )rÙ   N)Útools.connectorsrB  rX  rˆ   ÚcurrentrB   Úrequest_payload)r\  rB  rÊ  Ú	operations   &   rD   Ú#_pending_connection_request_payloadrG  -  sn   € õ &ä�m‰m˜CÓ €Gçð —‘œc '§+¡+¨mÓ"<×"BÐ"BÀÓCÐRY×R]ÑR]Ð^lÓRm�ÔnØ!%ð à*3Ò*?ˆ9×$Ñ$Ó&ÐIÀTÐIrF   c                ó>   € V ^8„  d   QhR\         R\        R,          /# ©r>   r×   r@   Nrú  )rC   s   "rD   rE   rE   8  s"   € ÷ Eñ E´3ð E¼4À$½;ñ ErF   c                óž   €  ^ RI Hp V! V 4      pT'       d   \        T4      # R#   \         d    \        P	                  RT RR7        R# i ; i)zBRead the oldest unresolved approval in a session, if there is one.)Úget_pending_gateway_approvalz&failed to read pending approval for %sTr"  N)Útools.approvalrK  rV   rx  r%  r4  )r×   rK  Úapprovals   &  rD   Ú!_pending_approval_request_payloadrN  8  sQ   € ðÝ?Ù/°Ó<ˆ÷ 3;Ô$ XÓ.ÐDÀÐDøô ô Ü�‰Ð=¸{ÐUYˆÔZÚðús   ‚% ¥#AÁAc                óB   € V ^8„  d   QhR\         R\        R,          RR/# )r>   r\  rµ  Nr@   rú  )rC   s   "rD   rE   rE   C  s%   € ÷ !ñ !¤ð !¬4°$­;ð !¸4ñ !rF   c                óš  aaa€ ^ RI Hp ^ RIHo \	        V4      p\        VP                  R4      ;'       g    R4      o\        \        P                  V 4      ;'       g    / P                  R4      ;'       g    R4      oR VVV3R llpVP                  RWV4      pS'       d&   SP                  SSV4      '       g   V! R	4       R
# R
# R
# )aî  Send an ``approval`` server request with the command redacted: a credential-shaped value
would otherwise echo verbatim to the TUI (third egress alongside chat platforms and the SSE/API stream).
See #48456, #50767.

The wait is owned by ``tools.approval``'s queue (its own timeout, ``/approve all``, coalescing), so the request
is queue-backed: the response resolves the queue entry, and the entry's own resolution (any surface, timeout,
interrupt) withdraws the request with ``request.cancel``.r  )rM  Ú
request_idrH   r×   c                ó6   € V ^8„  d   QhR\         R,          RR/# )r>   ÚresultNr@   r=  )rC   s   "rD   rE   Ú,_emit_approval_request.<locals>.__annotate__Q  s"   € ÷ Jñ Jœ$ �+ð J¨$ñ JrF   c           	      ó   <€ V f   S'       d   SP                  SSR4       R # \        V P                  R4      ;'       g    R4      pSP                  ST\	        V P                  R4      4      S;'       g    R R7       R # )NzKthe attached client cannot answer approval requests (update the Hermes app)Úchoicer0  Úall)Úresolve_allrQ  )Úwithdraw_gateway_approvalrB   rˆ   Úresolve_gateway_approvalr®   )rS  rV  Ú	_approvalrQ  r×   s   & €€€rD   Ú	on_resultÚ)_emit_approval_request.<locals>.on_resultQ  s}   ø€ ØŠ>÷
 Ø×3Ñ3°KÀð5NôOñ Ü�V—Z‘Z Ó)×3Ð3¨VÓ4ˆØ×*Ñ*¨;¸ÌDÐQW×Q[ÑQ[Ð\aÓQbÓLcØ6@×6HÐ6HÀDð 	+ö 	JrF   rM  rÙ  N)
r:  r  ÚtoolsrM  r4  rB   rˆ   rX  Ú
send_asyncÚregister_gateway_settle)	r\  rµ  r  rù  r\  Úsettler[  rQ  r×   s	   &&    @@@rD   Ú_emit_approval_requestrb  C  sª   ú€ õ ,Ý+Ü'¨Ó-€GÜ�W—[‘[ Ó.×4Ð4°"Ó5€JÜ”y—}‘} SÓ)×/Ð/¨R×4Ñ4°]ÓC×IÐIÀrÓJ€K÷Jò Jð ×'Ñ'¨
°CÀ)ÓL€F÷ ˜)×;Ñ;¸KÈÐU[×\Ò\ÙˆzÖñ ]�zrF   c                óJ   € V ^8„  d   QhR\         R\         R\         R,          /# )r>   r\  r?   rë   NrA   )rC   s   "rD   rE   rE   g  s*   € ÷ Bñ Bœð B¤3ð B¬c°D­jñ BrF   c                 ó²   € Ve   TMTP                  4       ;p'       g   R # Ve   TMRpVR8X  d   ^ RIHp V! V4      '       d   Rp\        RV RVRV/4       R # )NÚstatusÚ	lifecycle)Úis_compaction_progress_statusÚ
compactingzstatus.updater?   rë   )r`   Úagent.conversation_compressionrg  r  )r\  r?   rë   ÚbodyÚout_kindrg  s   &&&   rD   Ú_status_updaterl  g  s^   € Ø!Ò-‘T°4×>Ñ>Ó@Ð@ˆDÖ@ÙØÒ'‰t¨X€Hð �;ÔÝPÙ(¨×.Ò.Ø#ˆHÜ	ˆ/˜3 ¨°6¸4Ð @ÖArF   c                ó0   € V ^8„  d   QhR\         R\        /# )r>   rY   r@   )r   r­   )rC   s   "rD   rE   rE   u  s   € ÷ 	ñ 	”dð 	œtñ 	rF   c           	      ó  € R V P                   /p\        P                  ! \        4      ;_uu_ 4        ^ RIHp VP                  V 4      ;_uu_ 4       pR VP                   4       w  rERRR4       X^ 8”  dA   X^ 8”  d:   \        ^VR,           R,          4      \        ^VR,           R,          4      ,          M^ pVP                  VXV^U,          R7       RRR4       V#   + '       g   i     L~; i  + '       g   i     T# ; i)ru   ©ÚImagec              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir·   r®  )rã   Úvs   & rD   rå   Ú_image_meta.<locals>.<genexpr>z  s   é € Ð6©X¨œS ŸV˜V«Xùs   ‚Niÿ  i   )ÚwidthÚheightÚtoken_estimate)
ru   rT   rU   rV   ÚPILrp  r\   ÚsizerŒ   Úupdate)rY   Úmetarp  Úimgrt  ru  Útiless   &      rD   Ú_image_metar}  u  sÇ   € Ø�D—I‘IÐ€DÜ	×	Ò	œY×	'Õ	'ÝØ�Z‰Z˜×Ô Ù6¨S¯XªXÓ6‰MˆE÷ ð QVÐXYÔPYÐ^dÐghÔ^h”�A˜ �¨Õ+Ó,¬s°1°vÀµ|ÈÕ6KÓ/LÖLÐnoˆØ�‰˜%¨¸uÀr½zˆÔJ÷ 
(ð €K÷ ×ú÷ 
(Ö	'ð €Kús$   ± C0ÁC	Á'A,C0ÃC-Ã(C0Ã0D	c                ó0   € V ^8„  d   QhR\         R\         /# )r>   rS  r@   r=  )rC   s   "rD   rE   rE   �  s   € ÷ ;ñ ;”Tð ;œdñ ;rF   c                 ó   € R RRV RV/# )rý  rþ  r  rS  r•   )r-  rS  s   &&rD   Ú_okr€  �  s   € Ø�u˜d C¨°6Ð:Ð:rF   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r>   r­  r.  r@   )r¯  rB   r­   )rC   s   "rD   rE   rE   …  s!   € ÷ 9ñ 9”Cð 9œcð 9´ñ 9rF   c                 ó2   € R VRV/Ve   RV/M/ CpRRRV RV/# )r­  Úmessagerµ  rý  rþ  r  r#  r•   )r-  r­  r.  rµ  r#  s   &&&& rD   r·  r·  …  s4   € Ø�T˜9 cÐZÀÒ@P¨v°t©nÐVXÐZ€EØ�u˜d C¨°%Ð8Ð8rF   c                ó(   € V ^8„  d   QhR\         RR/# )r>   ru   r@   NrA   )rC   s   "rD   rE   rE   Š  s   € ÷ ñ œ#ð  dñ rF   c                ó   € V\         V &   R# )a  The ONE registration seam (``@method`` here and ``HandlerRegistry.install`` for the split
modules). ``tests/tui_gateway/contracts/test_generated.py::test_every_method_has_a_contract`` and the
generator's ``assert_complete`` fail when a registered name has no contract.N)Ú_methods)ru   Úfns   &&rD   Úregister_methodrˆ  Š  s   € ð „HˆTƒNrF   c                ó$   € V ^8„  d   QhR\         /# )r>   ru   rA   )rC   s   "rD   rE   rE   ‘  s   € ÷ ñ ”ñ rF   c                 ó   a € V 3R  lpV# )c                 ó    <€ \        SV 4       V # r·   )rˆ  )r‡  ru   s   &€rD   ÚdecÚmethod.<locals>.dec’  s   ø€ Ü˜˜bÔ!Øˆ	rF   r•   )ru   rŒ  s   f rD   rï  rï  ‘  s   ø€ õð €JrF   c                ór   € V ^8„  d   QhR\         R\        \         \        \        3,          \        ,          /# )r>   Úreqr@   )r   ÚtuplerB   r­   )rC   s   "rD   rE   rE   ˜  s*   € ÷ 
=ñ 
=œCð 
=¤E¬#¬s´D¨.Õ$9¼DÕ$@ñ 
=rF   c                óh  € \        V \        4      '       g   \        RRR4      # V P                  R4      V P                  R4      r!\        V\        4      '       d	   V'       g   \        VRR4      # V P                  R/ 4      pVe$   \        V\        4      '       g   \        VR	R4      # YVe   V3# / 3# )
z;Validate a JSON-RPC request enough for safe local dispatch.Nz#invalid request: expected an objectr  rï  z2invalid request: method must be a non-empty stringr�  z"invalid params: expected an objecti¨€ÿÿi¦€ÿÿ)rA  r­   r·  rˆ   rB   )r�  r-  rï  r�  s   &   rD   Ú_normalize_requestr’  ˜  s    € ä�cœ4× Ò Ü�D˜&Ð"GÓHÐHØ—'‘'˜$“- §¡¨Ó!2ˆÜ�fœc×"Ò"¯&Ü�C˜Ð!UÓVÐVØ�W‰W�X˜rÓ"€FØÒ¤*¨V´T×":Ò":Ü�C˜Ð!EÓFÐFØ &Ò"4˜Ð<Ð<¸"Ð<Ð<rF   c                ón   € V ^8„  d   QhR\         R\        \        R,          \        R,          3,          /# )r>   rÇ  r@   N)rB   r�  r5   r­   )rC   s   "rD   rE   rE   ¦  s0   € ÷ "ñ "´ð "¼¼yÈ4Õ?OÔQUÐX\ÕQ\Ð?\Õ9]ñ "rF   c                ó8  € \        4       pVe	   V '       g   R# \        P                  4       p\        ;_uu_ 4        \        P                  V 4      pVe   Ve   W2Jg   \        W14      '       g   RuuRRR4       # W3uuRRR4       #   + '       g   i     R# ; i)a&  Unforgeable steering authority for this RPC context: the public session id is only a lookup
hint; authority requires the ContextVar-bound transport to be ATTACHED to the live in-memory record
under that id, so transport detachment, session removal or id reuse invalidates an earlier generation.Nr;  )r7   Ú_current_runtime_session_recordrˆ   rV  rX  Ú_session_transport_contains)rÇ  rñ  Úexpected_sessionrÊ  s   &   rD   Ú _current_session_steer_authorityr˜  ¦  sw   € ô "Ó#€IØÒ§
ØÐÜ6×:Ñ:Ó<Ðß	ŽÜ—-‘- 
Ó+ˆð
 ŠOÐ 0Ò <ÀÓA`Ü2°7×FÒFØ÷ 
Šð Ð!÷ 
��‹ús   »5BÁ;BÂB	c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r>   Úvaluer€   Ú	min_valuer@   )r   r¯  )rC   s   "rD   rE   rE   Å  s(   € ÷ 8ñ 8¤Cð 8´#ð 8ÄSð 8ÌSñ 8rF   c                ó`   €  \        V 4      pY28¼  d   T# T#   \        \        3 d    Tu # i ; ir·   )r¯  r‹   rŠ   )rš  r€   r›  Úcoerceds   &&$ rD   Ú_coerce_int_config_valuerž  Å  s=   € ðÜ�e“*ˆð Ô*ˆ7Ð7°Ð7øô ”zÐ"ô ØŠðús   ‚ —-¬-c                ó`   € V ^8„  d   QhR\         R,          R\         \        \        3,          /# rÐ  )r­   rB   r   )rC   s   "rD   rE   rE   Í  s'   € ÷ ñ ´$¸µ+ð ÌÌcÔSVÈhÍñ rF   c                óp  € V f   \        4       MT p\        V\        4      '       d   VP                  R4      M/ p\        V\        4      '       d   TM/ pR\	        VP                  R4      \
        R7      R\        VP                  R4      \        ^R7      R\        VP                  R4      \        ^ R7      /# )z·Dashboard process-isolation config with read-site defaults: ``_load_cfg()`` does not
deep-merge DEFAULT_CONFIG, so the Phase-0 defaults live here to stay in step with the REST editor.r…   Úturn_isolationr¥   Úcompute_host_heartbeat_secs)r›  Úcompute_host_respawn_max)	r@  rA  r­   rˆ   r   Ú!_DASHBOARD_TURN_ISOLATION_DEFAULTrž  Ú._DASHBOARD_COMPUTE_HOST_HEARTBEAT_SECS_DEFAULTÚ+_DASHBOARD_COMPUTE_HOST_RESPAWN_MAX_DEFAULT)rÑ  ÚrootÚdashs   &  rD   Ú(_load_dashboard_process_isolation_configr©  Í  sŸ   € ð š+Œ9Œ;¨3€DÜ$.¨t´T×$:Ò$:ˆ4�8‰8�KÔ À€DÜ˜d¤D×)Ò)‰4¨r€Dàœ/¨$¯(©(Ð3CÓ*DÔNoÔpØ%Ô'?Ø�H‰HÐ2Ó3Ô5cÐopô(rà"Ô$<Ø�H‰HÐ/Ó0Ô2]Ðijô%lð	ð rF   c                ó$   € V ^8„  d   QhR\         /# r�   r   )rC   s   "rD   rE   rE   Ü  s   € ÷ fñ fœTñ frF   c                 ó˜   € \        4       p \        \        V \        4      '       d   V '       d   V 4      R,          # \        4      R,          # )zbconfig.yaml of the per-session profile override (session.resume) when bound, else the launch home.rß  )r   r   rA  rB   r  )Úoverrides    rD   Ú_active_config_pathr­  Ü  s7   € ä'Ó)€HÜœJ x´×5Ò5¿(�ÓUÐXeÕeÐeÌÓUÐXeÕeÐerF   c                ó$   € V ^8„  d   QhR\         /# r�   r=  )rC   s   "rD   rE   rE   â  s   € ÷ ñ ”tñ rF   c                 óz  € ^ RI Hp  ^ RIHp  \	        4       pVP                  4       '       d   \        VP                  4       4      MRp\        ;_uu_ 4        \        e;   \        V8X  d0   \        V8X  d%   \        P                  ! \        4      uuRRR4       # RRR4       VP                  4       '       d	   V ! V4      M/ p\        ;_uu_ 4        \        P                  ! T4      Y2us	s
sRRR4       T#   + '       g   i     Lc; i  \         d   pT! TR7      u Rp?# Rp?ii ; i  + '       g   i     T# ; i)ua  The active profile's config.yaml EXACTLY as written â€” the write-back primitive, ONLY for
readâ†’mutateâ†’``_save_cfg`` round-trips and raw inspection (defaults / managed overlay / ``${VAR}``
expansion applied here would be persisted on the next save). Behavioral reads use :func:`_load_cfg`.
Cache keyed on the resolved path so profiles don't clobber.)Úread_user_config_raw)ÚFailedConfigReadN)r#  )r‰   r°  Úhermes_cli.config_read_errorsr±  r­  rá  r   r‰  Ú	_cfg_lockÚ
_cfg_cacheÚ_cfg_sigÚ	_cfg_pathÚcopyÚdeepcopyrV   )r°  r±  rÑ   Úsigrµ  rz  s         rD   Ú_load_cfg_rawrº  â  sÏ   € õ 7Ý>ð+ÜÓ!ˆØ*+¯(©(¯*ª*Œn˜QŸV™V›XÔ&¸$ˆßŽYÜÒ%¬(°c¬/¼iÈ1¼nÜ—}’}¤ZÓ0÷ �YŠYð +,¯(©(¯*ª*Ñ# AÔ&¸"ˆ÷ 
ŽÜ*.¯-ª-¸Ó*=¸sÐ'ˆ
�H˜i÷ 
à€K÷ �Yûô ô +Ù cÔ*Õ*ûð+úç	Žà€KúsN   ŽA	D Á8C5Â
D ÂD Â8
D ÃD)Ã5D	Ä D ÄD&ÄD!ÄD&Ä!D&Ä)D:	c                ó$   € V ^8„  d   QhR\         /# r�   r=  )rC   s   "rD   rE   rE   ø  s   € ÷ ñ ”4ñ rF   c                 ó°   € \         P                  ! \        4      ;_uu_ 4        ^ RIHp  V ! \        4       4      uuRRR4       #   + '       g   i     / # ; i)uD  Behavioral config read: the effective USER config (managed overlay, ``${VAR}`` expansion, model-key
canon) minus the DEFAULT_CONFIG merge â€” callers treat a missing key as "unset", so merging would break
``_load_cfg() == {}`` sentinels. Fail-open to ``{}``. Never pass the result to ``_save_cfg`` (use
``_load_cfg_raw()``).rÝ  N)rT   rU   rV   rà  rÞ  r­  rÝ  s    rD   r@  r@  ø  s:   € ô
 
×	Ò	œY×	'Õ	'ÝJÙ)Ô*=Ó*?Ó@÷ 
(×	'×	'Ñ	'ð €Iús   £AÁA	c                ó$   € V ^8„  d   QhR\         /# )r>   rÑ  r=  )rC   s   "rD   rE   rE     s   € ÷ 
ñ 
”4ñ 
rF   c                 ó  € ^ RI Hp \        4       pV! W 4       \        ;_uu_ 4        \        P
                  ! V 4      Vuss \        VP                  4       4      s
RRR4       R#   \         d    Rs
 Li ; i  + '       g   i     R# ; i)r   )Úatomic_config_replaceN)r‰   r¿  r­  r³  r·  r¸  r´  r¶  r   r‰  rµ  rV   )rÑ  r¿  rY   s   &  rD   Ú	_save_cfgrÀ    sk   € å7ÜÓ €DÙ˜$Ô$ß	ŽÜ $§¢¨cÓ 2°DÐˆ
�Ið	Ü% d§i¡i£kÓ2ˆH÷ 
‰øô ô 	ØŠHð	ú÷	 
�ˆús)   §A8ÁA%Á%A5Á2A8Á4A5Á5A8Á8B		c                ó>   € V ^8„  d   QhR\         R\        R,          /# rI  rú  )rC   s   "rD   rE   rE     s"   € ÷ hñ h¤#ð h¬$°­+ñ hrF   c           	     óÀ   a € \         ;_uu_ 4        \        V 3R l\        \        P	                  4       4       4       R4      uuRRR4       #   + '       g   i     R# ; i)zfFirst live record with this session_key (snapshot under the lock: pool handlers mutate ``_sessions``).c              3   óV   <"  € T F  qP                  R 4      S8X  g   K  Vx € K   	  R# 5i)r×   N©rˆ   )rã   Úsr×   s   & €rD   rå   Ú#_session_for_key.<locals>.<genexpr>  s$   øé € Ð`Ñ 8˜1¿E¹EÀ-Ó<PÐT_Ñ<_—Q’QÓ 8ùs   ƒ)Ÿ
)N)rV  ÚnextrW  rX  Úvalues)r×   s   frD   Ú_session_for_keyrÉ    s3   ø€ ç	ŽÜÔ`¤¤Y×%5Ñ%5Ó%7Ô 8Ó`ÐbfÓg÷ 
��‹ús   �1AÁA	Úui_session_idc                óV   € V ^8„  d   QhR\         R\         R,          R\         R\        /# )r>   r×   rî   NrÊ  r@   ©rB   rW  )rC   s   "rD   rE   rE     s.   € ÷ ñ ¤cð ´°dµ
ð ÔUXð Ôbfñ rF   c                óØ  € \         P                  ! \        4      ;_uu_ 4        ^ RIHp V '       d   \        V 4      MRpVe   TM)Ve%   \        VP                  R4      ;'       g    R4      MRp\        4       p\        4       pR;r‰T p
Ve´   \        V4      p\        VP                  R4      4      ;'       g    Tp\        VP                  R4      RR4      ;'       g    T p
\        VP                  R4      R	R4      p\        P                  ! V4      '       d'   \        P                  ! V4      p\        P                   p	V! W
VVVW•VRR
7	      uuRRR4       #   + '       g   i     . # ; i)r   )Úset_session_varsNrî   rH   rÙ   r€  rÇ  rñ  Úauth_identity)	r×   rÇ  Úsourcer‘  Úbrowser_control_principalÚ browser_control_transport_familyrî   rÊ  Úcron_session)rT   rU   rV   Úgateway.session_contextrÎ  rÉ  rB   rˆ   Ú_resolve_session_platformr©  Ú_session_sourcer   r3  Ú_methods_browser_controlÚ_is_authenticated_identityÚ_principal_digestÚ_CLOUD_TRANSPORT_FAMILY)r×   rî   rÊ  rÎ  ÚsessrÙ  rÐ  r‘  rÑ  rÒ  rÇ  Úidentitys   &&$         rD   Ú_set_session_contextrÝ    s0  € Ü	×	Ò	œY×	'Õ	'Ý<ß0;Ô Ô,Àˆð š/‘3ÈdÒN^´°D·H±H¸U³O×4IÐ4IÀrÔ0JÐdfˆÜ*Ó,ˆÜ'Ó)ˆØGIÐIÐ!ð !ˆ
ØÒÜ$ TÓ*ˆFä+¨D¯H©H°^Ó,DÓE×PÐPÈˆGÜ  §¡¨'Ó!2°LÀ$ÓG×VÐVÈ;ˆJÜ˜tŸx™x¨Ó4°oÀtÓLˆHÜ'×BÒBÀ8×LÒLÜ,D×,VÒ,VÐW_Ó,`Ð)Ü3K×3cÑ3cÐ0ÙØ#À6ØØ&?Ø-MØ'°bô:÷+ 
(×	'×	'Ñ	'ð6 €Iús    £AEÁ&AEÂ8%EÃA/EÅE)	c                ó(   € V ^8„  d   QhR\         RR/# )r>   Útokensr@   N)rW  )rC   s   "rD   rE   rE   5  s   € ÷ 'ñ '¤4ð '¨Dñ 'rF   c                 ó´   € V '       d<   \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! V 4       RRR4       R# R#   + '       g   i     R# ; i)r   )Úclear_session_varsN)rT   rU   rV   rÔ  rá  )rß  rá  s   & rD   Ú_clear_session_contextrâ  5  s8   € ßÜ× Ò ¤×+Õ+ÝBÙ˜vÔ&÷ ,Ñ+ñ ß+×+Ð+ús   «AÁA	c                ó   € V ^8„  d   QhRR/# rµ   r•   )rC   s   "rD   rE   rE   <  s   € ÷ _ñ _ ñ _rF   c                 óJ   € \         P                  P                  RRRR7       R# )zARoute approvals through gateway callbacks instead of CLI input().Ú1)ÚHERMES_GATEWAY_SESSIONÚHERMES_EXEC_ASKÚHERMES_INTERACTIVEN)rW   r‡   ry  r•   rF   rD   Ú_enable_gateway_promptsré  <  s   € ä‡J�J×Ñ¨SÀ#ÐZ]ÐÖ^rF   c          
      ób   € V ^8„  d   QhR\         R\         R\        R\        R,          R\         /# )r>   rï  r\  r�  r!  Nr@   )rB   r­   r�   )rC   s   "rD   rE   rE   D  s:   € ÷ Vñ V”ð Vœ3ð V¬ð V´u¸tµ|ð VÌcñ VrF   c                óÌ   € ^ RI Hp VP                  WW#R7      pT;'       g    / P                  RR4      p\	        V\
        4      '       d   V# \        P                  ! VRR7      # )u¼   Serverâ†’client request whose answer is one string under ``value`` (sudo, secret, vault prompts, GUI reads,
MCP setup). Empty string when the renderer skipped, timed out, or was cancelled.r  r   rš  rH   F©Úensure_ascii)r:  r  Úsendrˆ   rA  rB   r  r(  )rï  r\  r�  r!  r  rS  rš  s   &&&&   rD   Ú_askrï  D  sV   € õ ,Ø×!Ñ! &¨vÐ!ÓG€FØ�\ˆ\�r×Ñ˜w¨Ó+€EÜ˜u¤c×*Ò*ˆ5ÐU´·
²
¸5ÈuÔ0UÐUrF   c                ó2   € V ^8„  d   QhR\         R,          /# rµ   r‘   )rC   s   "rD   rE   rE   N  s   € ÷ ñ ¤%¨$¥,ñ rF   c                 ó´   € \         P                  ! \        4      ;_uu_ 4        ^ RIHp  V ! 4       pV^ 8”  d   TMRuuRRR4       #   + '       g   i     R# ; i)u¹   Clarify wait for the TUI/desktop bridge from the canonical config (gateway/CLI parity); 300s
historical default if config can't be read; ``<= 0`` = unlimited â†’ None (never auto-skip).)Úget_clarify_timeoutNé,  )rT   rU   rV   Útools.clarify_gatewayrò  )rò  r!  s     rD   Ú_clarify_timeout_secondsrõ  N  s?   € ô 
×	Ò	œY×	'Õ	'Ý=Ù%Ó'ˆØ! Aœ+‰w¨4÷ 
(×	'×	'Ñ	'ñ ús   £AÁA	c                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )r>   r\  Ú	questionsr@   r6  )rC   s   "rD   rE   rE   X  s%   € ÷ 	?ñ 	?œð 	?¬¬T­
ð 	?´tñ 	?rF   c                ó*  € ^ RI Hp V Uu. uF2  pRVR,          RVR,          RVR,          R\        VR,          4      /NK4  	  ppTP                  RT RV/\	        4       V Uu. uF  q3R,          NK  	  upR7      pT;'       g    R	/ R
R/# u upi u upi )u5  Bridge the clarify tool callback onto one ``clarify`` server request carrying only the wire fields
(tool-side entries carry result-assembly keys too). Answers lock one at a time through ``clarify.lock``
(``null`` = skipped); the tool gets ``{"answers", "outcome"}`` â€” ``undelivered`` when no client took it.r  ÚqidÚquestionr*  Úmulti_selectÚclarifyr÷  )r!  ÚqidsÚanswersÚoutcomeÚundelivered)r:  r  r®   rî  rõ  )r\  r÷  r  ÚeÚwirerS  s   &&    rD   Ú_clarify_blockr  X  s±   € õ ,áó Ù�ð �A�e•H˜j¨!¨J­-¸ÀAÀiÅLÐR`ÔbfÐghÐiwÕgxÓbyÓzÙð 	ð  à×!Ñ! )¨S°;ÀÐ2EÔOgÓOiÙ:CÓ'D¹)°Q¨%¯¨¹)Ñ'Dð "ó F€Fà×>Ð>�i  Y°Ð>Ð>ùò	 ùò (Es   ‹8BÁ"BÚsuccessr#  a+  No Hermes Desktop window answered the tour request. The tour is driven by the desktop app's renderer, which updates separately from this backend, so an app build older than the tour tool has nothing listening. Update the Hermes Desktop app and start a new session. Do not retry tour in this session.c                ó<   € V ^8„  d   QhR\         R\        R\         /# ©r>   r\  rù  r@   rú  )rC   s   "rD   rE   rE   r  s!   € ÷ .ñ .”sð .¤Tð .¬cñ .rF   c                ó  € \         P                  V 4      pVf   / pVP                  R4      pVR8X  d   \        # \        RT \	        V4      VR8X  d   \
        M\        R7      pV'       d   RVR&   MVR8w  d   RVR&   T;'       g    \        # )uä  Bridge the tour tool callback onto a ``tour`` server request without paying for a client that cannot answer: against
an older app nobody answers ``tour`` and each action would block the full deadline, stacking per
turn. First action per session gets the short probe deadline; unanswered â†’ bridge marked unavailable
for that session; once answered, the full deadline. Verdict lives on the record, so a new session re-probes.

The renderer's ``tour`` handler ships in the desktop bundle, but the tool is offered by this
backend â€” and the two update on different clocks. The model then does what the schema tells it to and
tries the next action, so a single "give me a tour" turn stacks those waits (the timeouts reported
against #89620).
Útour_bridgeÚ
unansweredÚtourÚansweredr   )rX  rˆ   Ú_TOUR_BRIDGE_UNAVAILABLErï  r­   Ú_TOUR_TIMEOUT_SÚ_TOUR_PROBE_TIMEOUT_S)r\  rù  rÊ  ÚstateÚanswers   &&   rD   Ú_tour_requestr  r  sˆ   € ô �m‰m˜CÓ €GØ‚ØˆØ�K‰K˜Ó&€EØ�ÔÜ'Ð'Ü�&˜#œt G›}Ø-2°jÔ-@�/ÔF[ô]€FçØ!+ˆ�ÒØ	�*Ô	Ø!-ˆ�ÑØ×-Ð-Ô-Ð-rF   am  No Hermes Desktop window answered the preview action request. The drive_preview / annotate_preview bridge is served by the desktop app's renderer, which updates separately from this backend, so an app build older than the tool has nothing listening. Update the Hermes Desktop app, open a page with open_preview, and try again in this session after a short cooldown.c                ó<   € V ^8„  d   QhR\         R\        R\         /# r  rú  )rC   s   "rD   rE   rE   ¢  s!   € ÷ '8ñ '8¤ð '8¬tð '8¼ñ '8rF   c           	     óÄ  € \         ;_uu_ 4        \        P                  V 4      pVf   / pVP                  R4      p\        P                  ! 4       pVR8X  d'   WBP                  R^ 4      8  d   \
        uuRRR4       # VR8X  dj   \        ;_uu_ 4        \        P                  V 4      e   \
        uuRRR4       uuRRR4       # \        4       \        V &   V\        ,           VR&   RRR4       RRR4        \        RT \        V4      XR8X  d   \        M\        R7      pVR8X  d/   \        ;_uu_ 4        \        P                  V R4       RRR4       M \         ;_uu_ 4        V'       d   RXR&   M>XP                  R4      R8w  d)   RVR&   \        P                  ! 4       \        ,           VR&   RRR4       T;'       g    \
        #   + '       g   i     Lë; i  + '       g   i     Lö; i  + '       g   i     L©; i  XR8X  dB   \        ;_uu_ 4        \        P                  T R4       RRR4       i   + '       g   i     i ; ii ; i  + '       g   i     L¦; i)uJ  Bridge the drive_preview / annotate_preview callback onto a ``preview.act`` server request
without paying for a client that cannot answer: against an older app (or a session no window
hosts, #94272 / #119333) nobody answers ``preview.act`` and each action would block the full
deadline, stacking per turn exactly like the tour timeouts (#89620). First action per session
gets the short probe deadline; unanswered â†’ bridge marked unavailable for that session with a
cooldown-gated reprobe; once answered, the full deadline. The verdict lives on the session
record, so a new session re-probes. Interrupt â‰  timeout: a cancelled wait (Stop, session close)
returns without poisoning the state, because ``send()``'s None conflates the two and only the
cooldown-reprobe token distinguishes an in-flight probe â€” so state flips only through it.
NÚpreview_action_bridger	  Úpreview_action_bridge_retry_atzpreview.actr  r   )rV  rX  rˆ   r^   Ú	monotonicÚ"_PREVIEW_ACTION_BRIDGE_UNAVAILABLEÚ_preview_action_reprobe_lockÚ_preview_action_reprobeÚobjectÚ"_PREVIEW_ACTION_REPROBE_COOLDOWN_Srï  r­   Ú_PREVIEW_ACTION_TIMEOUT_SÚ_PREVIEW_ACTION_PROBE_TIMEOUT_SÚpop)r\  rù  rÊ  r  Únowr  s   &&    rD   Ú_preview_action_requestr   ¢  sÉ  € ÷ 
ŽÜ—-‘- Ó$ˆØŠ?àˆGØ—‘Ð3Ó4ˆÜ�nŠnÓˆØ�LÔ  S¯;©;Ð7WÐYZÓ+[Ô%[Ü5÷ 
Šð �LÔ ß-Ö-Ü*×.Ñ.¨sÓ3Ò?Ü=÷ .Ñ-÷ 
Šô 06«xÔ'¨Ñ,Ø<?ÔBdÕ<d�Ð8Ñ9÷	 .÷ 
ð7Ü�m S¬$¨w«-Ø;@ÀJÔ;NÕ7ÔTsôuˆð �LÔ ß-Ö-Ü'×+Ñ+¨C°Ô6÷ .Ð-ð !÷ 
ŽßØ/9ˆGÐ+Ò,Ø�[‰[Ð0Ó1°ZÔ?Ø/;ˆGÐ+Ñ,Ü8<¿ºÓ8HÔKmÕ8mˆGÐ4Ñ5÷ 
ð ×7Ð7Ô7Ð7÷% .×-ú÷ 
�ú÷( .×-ûð �LÔ ß-Ö-Ü'×+Ñ+¨C°Ô6÷ .×-×-Ð-úð !ú÷ 
�úss   �A$GÁ>GÂG		Â0
GÃ!G		Ã&GÃ7)H Ä5G/Å$AIÇ	GÇGÇG,	Ç/G?	ÈIÈH8	È/	IÈ8IÉ	IÉI	c                ó6   € V ^8„  d   QhR\         R,          RR/# )r>   r\  Nr@   rA   )rC   s   "rD   rE   rE   Ì  s"   € ÷ Mñ Mœ˜d�
ð M¨dñ MrF   c                óJ   € ^ RI Hp TP                  Y '       d   RMRR7       R# )uÅ   Withdraw open serverâ†’client requests: only *sid*'s (session.interrupt must not cancel other sessions'
prompts), or every one when *sid* is None (process exit). Each one gets a ``request.cancel``.r  Úinterruptedr£   )ÚreasonN)r:  r  Úcancel)r\  r  s   & rD   Ú_clear_pendingr&  Ì  s   € õ ,Ø×Ñ˜3¾¡}ÀÐÖLrF   c                ó2   € V ^8„  d   QhR\         R,          /# )r>   rÊ  Nr=  )rC   s   "rD   rE   rE   Ø  s   € ÷ <ñ <¤D¨4¥Kñ <rF   c                ó  € T ;'       g    / P                  R4      p\        T ;'       g    / P                  R4      ;'       g    R4      P                  4       pVe	   V'       g   R# \        VRR4      ;'       g    \	        4       pVf   R# WV3# )zP(agent, session_key, db) for a live record, or None when any of them is missing.r€  r×   rH   Nr~  )rˆ   rB   r`   r3  r{  )rÊ  r€  r×   r�  s   &   rD   Ú_live_session_agent_dbr)  Ø  sz   € à�]ˆ]˜×Ñ Ó(€EÜ�w—}�} "×)Ñ)¨-Ó8×>Ð>¸BÓ?×EÑEÓG€KØ‚}ŸKÙÜ	�˜ tÓ	,×	9Ð	9´³	€BØ’:ˆ4Ð; E¸Ð#;Ð;rF   c                ó6   € V ^8„  d   QhR\         R,          RR/# ©r>   rÊ  Nr@   r=  )rC   s   "rD   rE   rE   â  s   € ÷ /ñ /´¸µð /Àñ /rF   c                ó&  € \        V 4      pVe3   \        V^ ,          R4      '       d   \        V^,          R4      '       g   R# Vw  r#p\        V\        V 4      R7      p \	        V 4      ;_uu_ 4        VP                  R4      ;qbn        RRR4       TP                  \        VRR4      ;'       g    TX4       \        V4       R#   + '       g   i     LD; i  \         d    \        P                  RTRR7        LEi ; i  \        T4       i ; i)	zFRefresh the stored system prompt after a live runtime identity change.NÚ_build_system_promptÚupdate_system_prompt)rî   rÇ  z;failed to persist live session system prompt for session %sTr"  )r)  ÚhasattrrÝ  Ú_session_cwdrÉ  r-  Ú_cached_system_promptr.  r3  rV   rx  ry  râ  )rÊ  rB  r€  r×   r�  Úsession_tokensÚprompts   &      rD   Ú#_persist_live_session_system_promptr4  â  sè   € ä! 'Ó*€DØ‚|œ7 4¨¥7Ð,B×CÒCÌ7ÐSWÐXYÕSZÐ\r×KsÒKsÙØ!Ñ€E˜ô
 *¨+¼<ÈÓ;PÔQ€Nð/Ü+¨G×4Õ4Ø38×3MÑ3MÈdÓ3SÐSˆFÔ0÷ 5à
×Ñ¤¨¨|¸TÓ B× QÐ QÀkÐSYÔZô 	˜~Ö.÷ 5×4ûô ô rÜ�‰ÐTÐVaÐlpˆÖqðrûô 	˜~Õ.úsB   Á C Á3CÂ&C Â2C ÃC	ÃC Ã#D Ã=D Ã?D Ä D ÄDz7[System: The active model for this chat has changed to c                ó0   € V ^8„  d   QhR\         R\        /# ©r>   Úentryr@   ©r   r®   )rC   s   "rD   rE   rE   ý  s   € ÷ Xñ X¤3ð X¬4ñ XrF   c                ó®   € \        V \        4      '       g   R# V P                  R4      p\        V\        4      ;'       d    VP	                  \
        4      # )zBWhether a history entry is a (self-replacing) model-switch marker.FÚcontent)rA  r­   rˆ   rB   Ú
startswithÚ_MODEL_SWITCH_MARKER_PREFIX)r7  r:  s   & rD   Ú_is_model_switch_markerr=  ý  sA   € ä�eœT×"Ò"ÙØ�i‰i˜	Ó"€GÜ�gœsÓ#×WÐW¨×(:Ñ(:Ô;VÓ(WÐWrF   c                ó0   € V ^8„  d   QhR\         R\        /# r6  r8  )rC   s   "rD   rE   rE     s   € ÷ }ñ }œCð }¤Dñ }rF   c                ó€   € \        V 4      ;'       g-    \        V \        4      ;'       d    V P                  R4      R8H  # )uÓ   A ``role=user`` pivot the gateway splices in mid-turn (model switch or personality change) â€” either can
be the sole reason turn-start and current history differ. Only the model-switch marker is self-replacing.Údisplay_kindÚpersonality_switch)r=  rA  r­   rˆ   )r7  s   &rD   Ú_is_pivot_markerrB    s6   € ô # 5Ó)×|Ð|¬j¸ÄÓ.E×.{Ð.{È%Ï)É)ÐTbÓJcÐg{ÑJ{Ð|rF   c                óN   € V ^8„  d   QhR\         R,          R\        R\        RR/# )r>   rÊ  NrØ   rÚ   r@   rÅ   )rC   s   "rD   rE   rE     s3   € ÷ /Oñ /O¬°­ð /OÄð /OÌsð /OÐW[ñ /OrF   c               óV  € \        T ;'       g    / P                  R4      ;'       g    R4      P                  4       pV'       g   R# V'       d   RV 2MRp\         V V R2pRRRVR	R
/pV P                  R4      ;'       g    \        P
                  ! 4       ;_uu_ 4        V P                  R. 4      pV Uu. uF  p\        V4      '       d   K  VNK  	  upVR&   VP                  V4       \        V P                  R^ 4      4      ^,           V R&   RRR4        V P                  R4      p	V	e   \        V	RR4      MRp
V
f   \        V 4       V
e   \        P
                  ! V
4      M
\        V 4      ;_uu_ 4       p
V
eM   ^ RIHp \        V 4      pV
P!                  VR
4       ^ RIHp V
P'                  VRVR
V! V4      R7      VR&   RWk&   RRR4       R# u upi   + '       g   i     LÑ; i  + '       g   i     R# ; i  \(         d    \*        P-                  RRR7        R# i ; i)a'  Record a real system-history pivot after a live model switch. Only the newest marker is kept (each
switch strips prior ones, so N switches leave one marker, not N re-sent every API call; self-healing
across resumes because the next switch collapses whatever a reload brought back).

See #65891.
r×   rH   Nz via provider zs. From this point forward, use this runtime metadata when answering questions about what model/provider is active.]ÚroleÚuserr:  r@  Úmodel_switchr8  Úhistory:NNNÚhistory_versionr€  r~  )Ú_DB_PERSISTED_MARKER)Ústamp_message_uid)rÇ  rE  r:  r@  Úmessage_uidÚ_row_idTz%failed to persist model switch markerr"  )rB   rˆ   r`   r<  rT   ÚnullcontextÚ
setdefaultr=  r2  r¯  r3  Ú_ensure_session_db_rowr~  Úagent.context_compressorrJ  Ú_submit_row_target_keyÚ#deactivate_messages_by_display_kindÚagent.message_metadatarK  Úappend_messagerV   rx  ry  )rÊ  rØ   rÚ   r×   Úprovider_partÚmarkerr7  rH  Úhr€  r�  rJ  rò   rK  s   &$$           rD   Ú_append_model_switch_markerrY    s  € ô �w—}�} "×)Ñ)¨-Ó8×>Ð>¸BÓ?×EÑEÓG€KßÙß3;�n X JÑ/À€Mä&Ð
'¨ w¨}¨oð >Rð 	Rð ð
 $ V¨Y¸ÀÐP^Ð_€EØ	�‰�^Ó	$×	@Ð	@¬
×(>Ò(>Ó(@×	@Ñ	@Ø×$Ñ$ Y°Ó3ˆÙ!(ÓK¡˜AÔ0GÈ×0J—a�a¡ÑKˆ�‰
Ø�‰�uÔÜ%(¨¯©Ð5FÈÓ)JÓ%KÈaÕ%OˆÐ!Ñ"÷	 
Að
OØ—‘˜GÓ$ˆØ49Ò4EŒW�U˜M¨4Ô0È4ˆØŠ:Ü" 7Ô+Ø,.ªNŒj×$Ò$ RÔ(ÄÈGÓ@T×TÐTÐY[ØŠ~ÝIô 0°Ó8�ð ×6Ñ6°v¸~ÔNÝDØ#%×#4Ñ#4Ø%¨F¸FÐQ_Ù 1°%Ó 8ð $5ó $:��iÑ ð /3�Ñ+÷ UÑTùò L÷ 
A×	@ú÷ U×TÐTûô ô Oô
 	�‰Ð>Èˆ×NðOúsV   Â!GÂ8GÃGÃ<GÄA H Å;AG.ÇH ÇGÇG+	Ç.G?	Ç9H Ç?H È"H(È'H(c                ó$   € V ^8„  d   QhR\         /# )r>   Úkey_pathrA   )rC   s   "rD   rE   rE   =  s   € ÷ 	ñ 	¤ñ 	rF   c                 óÔ   € \        4       ;r#V P                  R 4      Ev rEV F4  p\        VP                  V4      \        4      '       g   / W6&   W6,          pK6  	  WV&   \        V4       R# )Ú.N)rº  ÚsplitrA  rˆ   r­   rÀ  )r[  rš  rÑ  rD  ÚparentsÚleafÚkeys   &&     rD   Ú_write_config_keyrb  =  sZ   € ä!“OÐ#€CØ—^‘^ CÓ(�N€WÛˆÜ˜'Ÿ+™+ cÓ*¬D×1Ò1ØˆG‰LØ•,Šñ ð ˆD�MÜˆc†NrF   Úoffrå  TÚonÚtrueÚyesÚ0ÚfalseÚnoc                ó0   € V ^8„  d   QhR\         R\        /# )r>   r\  rÊ  rú  )rC   s   "rD   rE   rE   V  s   € ÷ -ñ -œsð -¬Tñ -rF   c           
      óî  € VP                  R 4      pVf   R# \        P                  ! \        4      ;_uu_ 4        VP	                  4        RRR4        \        VR,          \        VP                  R4      R\        4       4      VP                  R4      \        VP                  R4      RR4      ;'       g    RR7      p\        YT4       R#   + '       g   i     LŠ; i  \         d
    RTR &    R# i ; i)Úslash_workerNr×   r€  rØ   rÙ   rÚ   )rÙ   rÚ   )	rˆ   rT   rU   rV   r¸   rÕ   r3  Ú_resolve_modelÚ_attach_worker)r\  rÊ  ÚworkerÚ
new_workers   &&  rD   Ú_restart_slash_workerrq  V  sÆ   € ð �[‰[˜Ó(€FØ‚~ÙÜ	×	Ò	œY×	'Õ	'Ø�‰Œ÷ 
(ðÜ! '¨-Õ"8¼'À'Ç+Á+ÈgÓBVÐX_ÔaoÓaqÓ:rØ/6¯{©{¸>Ó/JÜ+2°7·;±;¸wÓ3GÈÐUYÓ+Z×+bÐ+bÐ^bôdˆ
ô �3 Ö,÷ 
(×	'ûô ô Ø"&ˆ�ÑÚðús   ºCÁA+C  ÃC	Ã C4Ã3C4c                ó$   € V ^8„  d   QhR\         /# r�   r=  )rC   s   "rD   rE   rE   m  s   € ÷ 1ñ 1œñ 1rF   c                 óú  a € R#V 3R llpR\        S RR4      ;'       g    RRV! RR4      RV! RR	4      R
V! R4      RV! R4      RV! R	4      RV! R4      RV! R4      /p\        S RR 4      pV'       d8   ^ RIHp VP                  V! V4      4       \        VR^ 4      ;'       g    ^ VR&   \        P
                  ! \        4      ;_uu_ 4        \        \        S R^ 4      ;'       g    ^ 4      p\        \        S R^ 4      ;'       g    ^ 4      pV^ 8”  d7   V^ 8”  d0   \        ^ \        ^d\        We,          ^d,          4      4      4      VR&   R R R 4       \        P
                  ! \        4      ;_uu_ 4        \        \        S R. 4      ;'       g    . 4      p\        \        S R. 4      ;'       g    . 4      p\        \        V4      \        V4      4      ;p	'       d~   \        Wy) R  4      p
V
^ 8”  d   \        W‰) R  4      V
,          MR pRW©,          3RV33 F?  w  rÍVf   K  WÝ8X  g   K  ^ Tu;8  d
   R8  g   K$  M K(  \        \        V4      ^4      W,&   KA  	  R R R 4       ^ RIHp V! S 4      ;pe   WòR&   \        P
                  ! \        4      ;_uu_ 4        ^ RIHp V! 4       VR &   R R R 4       \'        \(        P*                  P-                  R!4      4      '       dP   \        P
                  ! \        4      ;_uu_ 4        S P/                  4       pVe   \        V4      VR"&   R R R 4       V# V#   + '       g   i     ELï; i  + '       g   i     Lô; i  + '       g   i     L¶; i  + '       g   i     T# ; i)$Nc                 ó\   <€ \        SV ^ 4      ;'       g    V'       d   \        SV^ 4      # ^ # )r   )r3  )ÚkÚfbr€  s   &&€rD   rw   Ú_get_usage.<locals>.<lambda>n  s*   ø€ œ7 5¨!¨QÓ/×WÐWÏR´G¸EÀ2ÀqÓ4IÐWÐUVÐWrF   rØ   rH   ÚinputÚsession_input_tokensÚsession_prompt_tokensr%  Úsession_output_tokensÚsession_completion_tokensÚ	reasoningÚsession_reasoning_tokensr3  Ú
completionÚtotalÚsession_total_tokensÚcallsÚsession_api_callsÚcontext_compressor)Úcontext_usage_fieldsÚcompression_countÚcompressionsÚsession_cache_read_tokensÚcache_hit_pctÚ_api_latency_historyÚ_api_output_historyÚavg_latency_sÚavg_tpsg    €„.A)Ú
plan_gaugerŽ  )Úactive_countÚactive_subagentsÚHERMES_DEV_CREDITSÚdev_credits_spent_microsr·   )r3  Úagent.context_breakdownr…  ry  rT   rU   rV   r¯  rŒ   ÚminÚroundrW  ÚlenÚsumr�   Úgateway.session_usagerŽ  Útools.async_delegationr�  r   rW   r‡   rˆ   Úget_credits_spent_micros)r€  ÚgÚusageÚcompr…  Ú_prompt_totalÚ_cache_readÚ_lhistÚ_ohistÚ_nÚ
_total_latÚ_avg_velÚ_keyÚ_valrŽ  ÚgaugeÚ_async_active_countÚspents   f                 rD   Ú
_get_usagerª  m  sð  ø€ ÞW€Aà”˜ ¨Ó,×2Ð2°Ø‘Ð)Ð+BÓCØ‘!Ð+Ð-HÓIØ‘QÐ1Ó2°H¹aÐ@WÓ>XØ‘aÐ3Ó4°g¹qÐAWÓ?XØ‘Ð&Ó'ð€Eô �5Ð.°Ó5€DßÝ@Ø�‰Ñ)¨$Ó/Ô0Ü '¨Ð.AÀ1Ó E× JÐ JÈˆˆnÑô 
×	Ò	œY×	'Õ	'ô
 œG EÐ+BÀAÓF×KÐKÈ!ÓLˆÜœ' %Ð)DÀaÓH×MÐMÈAÓNˆØ˜1Ô ¨q¤Ü%(¨¬C°´U¸;Õ;VÐY\Õ;\Ó5]Ó,^Ó%_ˆE�/Ñ"÷ 
(ô 
×	Ò	œY×	'Õ	'Ü”g˜eÐ%;¸RÓ@×FÐFÀBÓGˆÜ”g˜eÐ%:¸BÓ?×EÐEÀ2ÓFˆÜ”S˜“[¤# f£+Ó.Ð.ˆ2Ö.Ü˜V C D˜\Ó*ˆJØ;EÈ¼>œ˜F 3 4˜LÓ)¨JÖ6ÈtˆHØ /°µÐAÀIÈxÐCXÓY‘
�ØÔ#¨®¸¸T¾ÀC¿ºÜ"'¬¨d«°QÓ"7�E“Kñ Z÷ 
(õ 1Ù˜EÓ"Ð"ˆÒ/Ø#ˆlÑä	×	Ò	œY×	'Õ	'ÝNÙ$7Ó$9ˆÐ Ñ!÷ 
(ô ”r—z‘z—~‘~Ð&:Ó;×<Ò<Ü× Ò ¤×+Õ+Ø×2Ñ2Ó4ˆEØÒ Ü47¸³J�Ð0Ñ1÷ ,ð €Lˆ5€L÷A 
(×	'Ð	'ú÷ 
(×	'ú÷ 
(×	'ú÷
 ,Ö+ð €LúsP   Ã9L/ÄAL/Å39MÆ-A-MÈMÈ'MÈ8MÊMÌ #M)Ì/M 	ÍM	ÍM&	Í)M:	c                ó$   € V ^8„  d   QhR\         /# r�   rA   )rC   s   "rD   rE   rE   ¡  s   € ÷ ñ ¤ñ rF   c                óú   € \         P                  ! \        4      ;_uu_ 4        \        V RR4      '       g)    \        V RR4      ;'       g    RpRV R2uuRRR4       # RRR4       R#   + '       g   i     R# ; i)zUWarning or '' (``no-key-required`` is a valid sentinel for keyless custom providers).Úapi_keyrH   rÚ   z$No API key configured for provider 'z'. First message will fail.N)rT   rU   rV   r3  )r€  rÚ   s   & rD   Ú_probe_credentialsr®  ¡  se   € ä	×	Ò	œY×	'Õ	'Ü˜˜y¨"×-Ò-°Ü˜u j°"Ó5×;Ð;¸ˆHØ9¸(¸ÐC^Ð_÷ 
(×	'Ò	'ñ ÷	 
(Ö	'ñ ús   £(A)ÁA)Á)A:	c                ó0   € V ^8„  d   QhR\         R\        /# )r>   rÑ  r@   rÅ   )rC   s   "rD   rE   rE   ª  s   € ÷ &ñ &œdð &¤sñ &rF   c                óÖ  € \        V \        4      '       g   R# . p\        R V P                  4        4       4      ;p'       d.   RP	                  R V 4       4      pVP                  RV R24       V P                  R4      p\        V\        4      '       d£   \        VP                  RR4      ;'       g    R4      P                  4       P                  4       pV'       dZ   VR9  dS   \        P                  ! \        4      ;_uu_ 4        ^ R	IHp WV! V 4      9  d   VP                  R
V R24       RRR4       RP	                  V4      P                  4       #   + '       g   i     L/; i)uu   Warn on bare YAML keys (`agent:` â†’ None, silently dropping nested settings) and an unknown ``display.personality``.rH   c              3   ó6   "  € T F  w  rVe   K  Vx € K  	  R # 5ir·   r•   )rã   ru  rr  s   &  rD   rå   Ú'_probe_config_health.<locals>.<genexpr>¯  s   é € ÐB©¡ ¸Ÿ1š1«ùs   ‚�
z, c              3   ó.   "  € T F  pR V R 2x € K  	  R# 5i)Ú`Nr•   )rã   ru  s   & rD   rå   r²  °  s   é € Ð5©9 a˜1˜Q˜C˜q�«9ùs   ‚z"config.yaml has empty section(s): uZ   . Remove the line(s) or set them to `{}` â€” empty sections silently drop nested settings.r?  Úpersonality)Úavailable_personalitiesz`display.personality: zb` does not match any built-in or `agent.personalities` entry; personality overlay will be skipped.NÚ >   Únoner€   Úneutral)rA  r­   ÚsortedÚitemsrR   r2  rˆ   rB   r`   rH  rT   rU   rV   Úhermes_cli.personalityr¶  )rÑ  ÚwarningsÚ	null_keysÚkeysÚdisplay_cfgrµ  r¶  s   &      rD   Ú_probe_config_healthrÁ  ª  s(  € ä�cœ4× Ò ÙØ€HÜÑB¨¯©¬ÓBÓBÐB€yÖBØ�y‰yÑ5©9Ó5Ó5ˆØ�‰Ð<¸T¸Fð CHð Iô 	Jà—'‘'˜)Ó$€KÜ�+œt×$Ò$Ü˜+Ÿ/™/¨-¸Ó<×BÐBÀÓC×IÑIÓK×QÑQÓSˆß˜;Ð.LÔLÜ×$Ò$¤Y×/Õ/ÝJØÐ&=¸cÓ&BÔBØ—O‘OÐ&<¸[¸Mð Jhð %hô i÷ 0ð
 �8‰8�HÓ×#Ñ#Ó%Ð%÷ 0×/ús   Ä	(EÅE(	c                ó$   € V ^8„  d   QhR\         /# r�   rA   )rC   s   "rD   rE   rE   ¿  s   € ÷ ñ œsñ rF   c                  ó²   € \         P                  ! \        4      ;_uu_ 4        ^ RIHp  V ! 4       ;'       g    RuuRRR4       #   + '       g   i     R# ; i)r   ©Úget_active_profile_namer€   N)rT   rU   rV   Úhermes_cli.profilesrÅ  rÄ  s    rD   r©  r©  ¿  s8   € Ü	×	Ò	œY×	'Õ	'Ý?Ù&Ó(×5Ð5¨I÷ 
(×	'×	'Ñ	'ñ ús   £AÁA	c                ó>   € V ^8„  d   QhR\         R,          R\         /# r+  r=  )rC   s   "rD   rE   rE   Ñ  s"   € ÷ Hñ H¤T¨D¥[ð H´Tñ HrF   c                 ó8  € T ;'       g    / p\        V 4      P                  R 4      pVP                  R4      e@   VP                  R4      '       d   \        V\        4      '       g   \	        VR,          4      # \        V\        4      '       d   \        V4      # / # )rœ  r€  Ú_compute_host_active)Ú_metadata_mirrorrˆ   rA  r­   rª  )rÊ  rÛ  Úmirror_usages   &  rD   Ú_session_usage_snapshotrÌ  Ñ  sz   € Ø�=ˆ=�b€DÜ# GÓ,×0Ñ0°Ó9€LØ‡x�x�ÓÒ$¨d¯h©hÐ7M×.NÒ.NÔS]Ð^jÔlp×SqÒSqÜ˜$˜w�-Ó(Ð(Ü!+¨L¼$×!?Ò!?Œ4�ÓÐGÀRÐGrF   c                ó>   € V ^8„  d   QhR\         R\        R,          /# )r>   rî   r@   Nrú  )rC   s   "rD   rE   rE   Ù  s   € ÷ ñ œsð ¤t¨d¥{ñ rF   c                ó²  € \        T ;'       g    R4      P                  4       '       g   R#  ^ RIHp VP	                  4       ;_uu_ 4       pVP                  W 4      pRRR4       Xf   R# RVP                  RVP                  RVP                  RVP                  /#   + '       g   i     LH; i  \         d    \        P                  RR	R
7        R# i ; i)z¸The first-class Project owning ``cwd`` (per-profile projects.db) so TUI status, desktop status bar and
``/status`` name the workspace identically. Only explicit named projects resolve.rH   N)Úprojects_dbr  Úslugru   Úprimary_pathz!failed to resolve project for cwdTr"  )rB   r`   r   rÏ  Úconnect_closingÚproject_for_pathr  rÐ  ru   rÑ  rV   rx  r%  )rî   ÚpdbÚconnÚprojects   &   rD   Ú_project_info_for_cwdr×  Ù  s¸   € ô ˆs�yˆy�b‹>×Ñ×!Ò!ÙðÝ1Ø× Ñ ×"Ô" dØ×*Ñ*¨4Ó5ˆG÷ #à’ˆtð 	pØ�'—*‘*˜f g§l¡l°F¸G¿L¹LÈ.ÐZa×ZnÑZnð-pð 	p÷ #×"ûô ô Ü�‰Ð8À4ˆÔHÚðús/   ­B0 ÁBÁB0 Á+1B0 ÂB-	Â(B0 Â0"CÃCc                óL   € V ^8„  d   QhR\         R,          R\        R,          /# r+  )r­   r�   )rC   s   "rD   rE   rE   é  s&   € ÷ pñ pœd T�kð p¬e°d­lñ prF   c                óº   € T ;'       g    / P                  R4      p\        V\        4      '       d*   VP                  R4      '       d   \        VR,          4      # R# )zlEpoch seconds the current turn started, or None when idle (desktop keeps the elapsed timer across switches).Úinflight_turnÚ
started_atN)rˆ   rA  r­   r�   )rÊ  Úinflights   & rD   Ú_turn_started_atrÝ  é  sI   € à—�˜2×"Ñ" ?Ó3€HÜ,6°xÄ×,FÒ,FÈ8Ï<É<ÐXd×KeÒKeŒ5�˜,Õ'Ó(ÐoÐkoÐorF   c                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# ©r>   rÊ  r@   )r­   r�  rB   )rC   s   "rD   rE   rE   ï  s&   € ÷ Añ A¤Dð A¬U´3¼°8­_ñ ArF   c                ó6  € V P                  R4      ;'       g    / p\        V 4      p\        V P                  R4      4      pV P                  R4      ;'       g    / p\        VP                  R4      ;'       g    R4      P	                  4       ;'       g@    VP                  R4      ;'       g'    \        VRR4      ;'       g    VP                  R4      p\        VP                  R4      ;'       g    R4      P	                  4       ;'       g@    VP                  R4      ;'       g'    \        VRR4      ;'       g    VP                  R4      pV'       d   R	M
\        V 4      p\        T;'       g
    V^ ,          4      \        T;'       g
    V^,          4      3# )
u4  ``(model, provider)`` the live session actually runs â€” the same precedence ``_session_info`` reports:
a switch queued mid-turn, the metadata mirror, the built agent, the composer override a deferred record
carries. The profile default is the LAST resort, never the answer for a chat that made its own pick.Úpending_model_switchr€  Úmodel_overrideÚdisplay_modelrH   rØ   Údisplay_providerrÚ   )rH   rH   )rˆ   rÊ  r   rB   r`   r3  Ú_session_default_route)rÊ  ÚpendingÚmirrorr€  r¬  rØ   rÚ   r€   s   &       rD   Ú_live_session_identityrè  ï  si  € ð �k‰kÐ0Ó1×7Ð7°R€GÜ˜gÓ&€FÜ  §¡¨WÓ!5Ó6€EØ�{‰{Ð+Ó,×2Ð2°€HÜ�—‘˜_Ó-×3Ð3°Ó4×:Ñ:Ó<÷ Eð EÀÇ
Á
È7Ó@S÷ Eð EÜ˜˜w¨Ó+÷Eð EØ/7¯|©|¸GÓ/Dð 
ä�G—K‘KÐ 2Ó3×9Ð9°rÓ:×@Ñ@ÓB÷ Nð NÀfÇjÁjÐQ[ÓF\÷ Nð NÜ˜5 *¨bÓ1÷Nð NØ5=·\±\À*Ó5Mð ç‰hÔ%;¸GÓ%D€GÜˆu×"Ð"˜ �
Ó#¤S¨×)?Ð)?°W¸QµZÓ%@Ð@Ð@rF   Útierc          
      ób   € V ^8„  d   QhR\         R\         R\        R\         R,          R\        /# )r>   rØ   rÚ   Úroute_knownré  Nr@   ©rB   r®   )rC   s   "rD   rE   rE   ÿ  s7   € ÷ ñ ¤Sð ´Cð Ìð ÔUXÐ[_ÕU_ð Ôkoñ rF   c               óè   € ^ RI Hp RpV'       d;   V e7   \        V RR4      R8X  d   \        V RR4      pT;'       g    \        V RR4      p T! Y;'       g    RWdR7      RJ#   \         d     R# i ; i)	aP  Whether a priority tier reaches this session's route. Every request builder asks the same gate, so a
profile-wide ``service_tier: fast`` sends nothing to a local server or a proxy, and the session must not
report Fast there either. ``route_known`` is False while a switch is pending: the agent's base URL still
belongs to the old route.)Úresolve_fast_mode_overridesNÚapi_modeÚanthropic_messagesÚ_anthropic_base_urlÚbase_url)rÚ   rò  ré  F)Úhermes_cli.modelsrî  r3  rV   )r€  rØ   rÚ   rë  ré  rî  rò  s   &&&$$  rD   Ú_fast_tier_appliesrô  ÿ  s~   € õ
 >Ø€Hß�uÒ(Ü�5˜* dÓ+Ð/CÔCÜ˜uÐ&;¸TÓBˆHØ×?Ð?œw u¨j¸$Ó?ˆðÙ*¨5×;KÐ;KÀtÐV^ÔjÐrvÐvÐvøÜô Úðús   Á
A" Á
A" Á"A1Á0A1c                ó>   € V ^8„  d   QhR\         R,          R\         /# r+  r=  )rC   s   "rD   rE   rE     s"   € ÷ ^ñ ^¤$¨¥+ð ^¼ñ ^rF   c                 óÌ  a € Vf)   \        V 3R l\        P                  4        4       R 4      p\        S 4      o T;'       g    / p\	        V4      p\        V4      p\        VP                  R4      ;'       g    \        S RR4      ;'       g    R4      pTP                  R\        4       P                  R4      ;'       g    R4      p\        S RR 4      pRp\        V\        4      '       d=   VP                  R4      RJ d   R	M$\        VP                  R
R4      ;'       g    R4      p\        S RR 4      ;'       g    VP                  R4      ;'       g    Rp	 ^ RIHp
Hp V'       d   \        V! V4      4      MRp\!        4       p\        V
4      ;'       g    T;'       g    VR8H  pVP                  R4      ;'       g    / p\        VP                  R4      ;'       g    R4      P%                  4       p\        VP                  R4      ;'       g    R4      P%                  4       pVP                  R\        S RR4      4      pVR8X  d`   RV9  dY   S eU   \'        VP                  R4      ;'       g    \(        4      ;_uu_ 4        \+        S 4      P                  RV4      pR R R 4       T;'       g    VP                  R\        S RR4      4      pRpV'       dG   VR	8w  d@   \        \-        T\/        T;'       g    TV\        S RR 4      4      4      ;'       g    R4      p/ RVbRT;'       g    TbRVbRVbRV	bRV	\0        9   ;'       d     \3        S TT;'       g    TV'       * V	R7      bRVbRVbR\        VP                  R4      \        4      '       d%   \        VP                  R4      ;'       g    / 4      M/ bR\        VP                  R4      \        4      '       d%   \        VP                  R4      ;'       g    / 4      M/ bRVbR \4        P6                  ! V4      bR!\9        V4      bR"\;        4       bR\        T;'       g    R4      bR#\        VP                  R#4      4      bR$\=        V4      bR%V'       d   \?        W%4      MRR&T;'       g    RR'\@        R(RR)RR*R R+RR,\C        V4      R-\E        VP                  R4      4      ;'       g    \G        4       /	Cp\H        PJ                  ! \"        4      ;_uu_ 4        ^ R.I&H'p ^ R/I(H)p VPU                  V! 4       PV                  VR07       R R R 4       S R J;'       d    VP                  R14      '       * pV'       dØ   \H        PJ                  ! \"        4      ;_uu_ 4        ^ R2I,H-p / VR&   \        S R. 4      ;'       g    .  FK  pVR3,          R4,          pVR,          P]                  V! V4      ;'       g    R5. 4      P_                  V4       KM  	  R R R 4       \H        PJ                  ! \"        4      ;_uu_ 4        ^ R6I0H1p V! 4       VR&   R R R 4       . VR7&   \H        PJ                  ! \"        4      ;_uu_ 4        ^ R8I2H3p V! 4       VR7&   R R R 4       \H        PJ                  ! \"        4      ;_uu_ 4        R9V9   d   VP                  R94      M\        S R:R4      ;'       g    RVR9&   R R R 4       \H        PJ                  ! \"        4      ;_uu_ 4        ^ R;I0H4p ^ R<I5H6p V! R=R>7      VR*&   V! 4       VR+&   R R R 4       V'       d   \o        S 4      ;p '       d   V VR?&   V#   \"         d    RRrÞ EL°i ; i  + '       g   i     ELÃ; i  + '       g   i     ELG; i  + '       g   i     EL•; i  + '       g   i     ELn; i  + '       g   i     ELB; i  + '       g   i     Lø; i  + '       g   i     L¾; i)@Nc              3   óT   <"  € T F  qP                  R 4      SJ g   K  Vx € K  	  R# 5i)r€  NrÄ  )rã   Úcr€  s   & €rD   rå   Ú _session_info.<locals>.<genexpr>  s"   øé € ÐQÑ#5˜a¿¹¸w»È5Ð9PŸšÓ#5ùs   ƒ(ž
(r×   rÇ  rH   rµ  Úreasoning_configÚenabledFr¸  ÚeffortÚservice_tier)Ú_YOLO_MODE_FROZENÚis_session_yolo_enabledrc  Úmanualrá  rã  rä  rÚ   ÚcustomrÙ   rØ   rï  Úreasoning_effortÚreasoning_effort_wireÚfast)rë  ré  ÚyoloÚapproval_moder^  Úskillsrî   ÚbranchrÖ  Úterminal_backendÚrunningÚturn_started_atÚtitleÚstored_session_idÚdesktop_contractÚversionÚrelease_dateÚupdate_behindÚupdate_commandrœ  Úprofile_name)Ú__release_date__)Úget_version_info)r  r  rÉ  )Úget_toolset_for_toolÚfunctionru   Úother)Úget_available_skillsÚmcp_servers)Úget_mcp_statusÚsystem_promptr1  )Úget_update_result)Úrecommended_update_commandr—   r   Úcredential_warning)8rÇ  rX  rÈ  r   rÊ  Ú_display_session_cwdrB   rˆ   r3  rB  rA  r­   rL  rþ  rÿ  r®   Ú_load_approval_moderV   r`   Ú_profile_build_scoper  Ú_runtime_model_configr   r   r   rô  r!   r  r×  Ú_effective_terminal_backendrÝ  Ú_session_live_titleÚDESKTOP_BACKEND_CONTRACTrÌ  r   r©  rT   rU   r   r  Úhermes_cli.version_infor  ry  Úbase_versionÚmodel_toolsr  rO  r2  Úhermes_cli.bannerr  Útools.mcp_tool_discoveryr  r  r‰   r  r®  )!r€  rÊ  rÛ  rç  rî   r×   rµ  rú  r  rý  rþ  rÿ  Úsession_yolor  r  Úpending_switchÚpending_modelÚpending_providerrÚ   rØ   r  Úinfor  r  Ú
live_agentr  rõ  ru   r  r  r  r  Úwarns!   f&                               rD   Ú_session_infor3    s  ø€ Ø‚ÜÔQ¤9×#3Ñ#3Ô#5ÓQÐSWÓXˆÜ  Ó'€EØ�=ˆ=�b€DÜ˜gÓ&€FÜ
˜wÓ
'€CÜ�d—h‘h˜}Ó-×WÐW´¸ÀÈbÓ1Q×WÐWÐUWÓX€KØ—(‘(˜=¬,«.×*<Ñ*<¸]Ó*K×*QÐ*QÈrÓR€KÜ˜uÐ&8¸$Ó?ÐØÐÜÐ"¤D×)Ò)à%5×%9Ñ%9¸)Ó%DÈÓ%M™6ÔSVÐWg×WkÑWkÐltÐvxÓWy×WÐWÐ}ó  TAÐÜ˜5 .°$Ó7×[Ð[¸6¿:¹:ÀnÓ;U×[Ð[ÐY[€Lð.ßMßEP”tÑ3°KÓ@ÔAÐV[ˆÜ+Ó-ˆÜÐ%Ó&×PÐP¨,×PÐP¸-È5Ñ:Pˆð
 —X‘XÐ4Ó5×;Ð;¸€NÜ˜×*Ñ*¨?Ó;×AÐA¸rÓB×HÑHÓJ€MÜ˜>×-Ñ-Ð.@ÓA×GÐGÀRÓH×NÑNÓPÐØ�z‰z˜*¤g¨e°ZÀÓ&DÓE€HØ�8Ô 
°&Ô 8¸UÒ=Nô " $§(¡(¨>Ó":×"JÐ"J¼l×KÕKÜ,¨UÓ3×7Ñ7¸
ÀHÓMˆH÷ Là×MÐM˜VŸZ™Z¨´¸ÀÈÓ1LÓM€Eð ÐßÐ,°Ô6Ü #¤LÐ1AÔCZØ×(Ð( ¨%´¸À
ÈDÓ1QóDSó %T÷ %Zð %ZØWYó![ÐðØ�ðàÐ$×0Ð0¨ðð 	Ð,ðð /FÐG\ðð 	˜ð	ð
 	�¤Ñ,÷ yð yÔ1CÀEÈ5ÐRb×RnÐRnÐfnØTdÔPdÐkwô2yðð 	�ðð & }ðð 	´J¸v¿z¹zÈ'Ó?RÔTX×4YÒ4Y”�f—j‘j Ó)×/Ð/¨RÔ0Ð_aðð 	´jÀÇÁÈHÓAUÔW[×6\Ò6\”$�v—z‘z (Ó+×1Ð1¨rÔ2Ðbdðð 	ˆsðð œi×.Ò.¨sÓ3ðð 6?Ô@UÐVYÓ@Zðð 	Ô7Ó9ðð <IÌ#Èk×N_ÐN_Ð]_ÓJ`ðð 	”4˜Ÿ™ Ó+Ó,ðð /@ÔAQÐRYÓAZðð 	¿;Ô$ TÔ7ÈBØ˜[×.Ð.¨BÐ0BÔD\Ø�2�~ r¨?¸DÐBRÐTVØÔ(¨Ó1ØÔ-¨d¯h©h°~Ó.FÓG×bÐbÔK`ÓKbñ#€Dô& 
×	Ò	œY×	'Õ	'Ý/Ý<à�‰Ñ,Ó.×;Ñ;ÐJZˆÔ[÷	 
(ð
 ˜dÐ"×KÐK¨4¯8©8Ð4JÓ+KÔ'K€JßÜ× Ò ¤×+Õ+Ý8ØˆD�‰MÜ˜U G¨RÓ0×6Ð6°BÒ6�Ø˜•} VÕ,�Ø�W•×(Ñ(Ñ)=¸dÓ)C×)NÐ)NÀwÐPRÓS×ZÑZÐ[_Ö`ñ 7÷ ,ô × Ò ¤×+Õ+Ý>Ù1Ó3ˆD�‰N÷ ,ð €DˆÑÜ	×	Ò	œY×	'Õ	'Ý;Ù,Ó.ˆˆ]Ñ÷ 
(ô 
×	Ò	œY×	'Õ	'à+:¸fÔ+DˆF�J‰J�Ô'Ì'ÐRWÐYpÐrtÓJu×J{ÐJ{Ðy{ð 	ˆ_Ñ÷ 
(ô 
×	Ò	œY×	'Õ	'Ý7Ý@ñ !2¸#Ô >ˆˆ_ÑÙ!;Ó!=ˆÐÑ÷ 
(÷ Ô1°%Ó8Ð8�tÖ8Ø%)ˆÐ!Ñ"Ø€KøôQ ô .Ø# X‹mð.ú÷ L×KÐKú÷: 
(×	'Ð	'ú÷ ,×+Ð+ú÷ ,×+Ð+ú÷ 
(×	'Ð	'ú÷ 
(×	'ú÷ 
(×	'ús…   Å] Å).] Æ	] Æ"] Ê]Ô/]0ÖA^×^Ø"^Ù"^,Ú,_ Û
_ Û:#_Ý]Ý]Ý]-	Ý0^	Þ^	Þ^)	Þ,^=	ß _	ß_#	c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r>   ru   rv   r@   rú  )rC   s   "rD   rE   rE   q  s!   € ÷ ñ ”Cð œtð ¬ñ rF   c                ó¸   € \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! W^PR7      ;'       g    RuuRRR4       #   + '       g   i     R# ; i)uÇ   Argument preview for a tool row â€” never a phrased label: clients own their phrasing, so
``build_tool_label`` here would stutter ("Running Running â€¦") and leak into the desktop's ``args.context``.)Úbuild_tool_preview)Úmax_lenrH   N)rT   rU   rV   Úagent.displayr6  )ru   rv   r6  s   && rD   Ú	_tool_ctxr9  q  s>   € ô 
×	Ò	œY×	'Õ	'Ý4Ù! $°bÔ9×?Ð?¸R÷ 
(×	'×	'Ñ	'ñ ús   £AÁA	c                ó4   € V ^8„  d   QhR\         R\        RR/# )r>   r\  rÊ  r@   Nrú  )rC   s   "rD   rE   rE   z  s&   € ÷ Fñ F¬ð F´dð F¸tñ FrF   c           
      ó   € VP                  R 4      pVf   \        V4      '       dD   \        P                  ! \        4      ;_uu_ 4        \        RV \        W!4      4       RRR4       R# R#   + '       g   i     R# ; i)r€  Núsession.info)rˆ   rÊ  rT   rU   rV   r  r3  )r\  rÊ  r€  s   && rD   Ú_emit_session_info_for_sessionr=  z  sZ   € Ø�K‰K˜Ó €EØÒÔ,¨W×5Ò5Ü× Ò ¤×+Õ+Ü�. #¤}°UÓ'DÔE÷ ,Ñ+ñ 6ß+×+Ð+ús   Á	A,Á,A=	c                ó   € V ^8„  d   QhRR/# rµ   r•   )rC   s   "rD   rE   rE   �  s   € ÷ 2ñ 2 ñ 2rF   c                 óÀ   € \         ;_uu_ 4        \        \        P                  4       4      p RRR4       X  F  w  r\	        W4       K  	  R#   + '       g   i     L(; i)uÊ   Re-emit ``session.info`` to every live session â€” for approvals-config writers that bypass the
self-re-emitting ``config.set`` RPC. Only THIS process; a spawned child gateway has its own ``_sessions``.N)rV  rW  rX  r»  r=  )Úsessionsr\  rÛ  s      rD   Úbroadcast_session_inforA  �  s;   € ÷ 
ŽÜœ	Ÿ™Ó)Ó*ˆ÷ 
ã‰	ˆÜ& sÖ1ó ÷ 
�ús   �AÁA	c                ó(   € V ^8„  d   QhR\         RR/# r@  rA   )rC   s   "rD   rE   rE   Š  s   € ÷ iñ i¤Cð i°4ñ irF   c                óÊ   a aa€  ^ RI HpHo T! 4       '       g   R# R TTT 3R llp\        P
                  ! TRS  2RR7      P                  4        R#   \         d     R# i ; i)aŠ  Refresh a session's tool snapshot when MCP discovery lands late (``_make_agent`` waits only a bounded
``mcp_discovery_timeout``, so a slow server's tools would be missing all session): a daemon joins discovery,
rebuilds like ``/reload-mcp`` and re-emits ``session.info``. Only pre-first-turn (nothing cached to
invalidate); afterwards late tools need an explicit, consent-gated ``/reload-mcp``.)Úmcp_discovery_in_flightÚjoin_mcp_discoveryNc                ó   € V ^8„  d   QhRR/# rµ   r•   )rC   s   "rD   rE   Ú0_schedule_mcp_late_refresh.<locals>.__annotate__–  s   € ÷ )ñ ) ñ )rF   c            	      ó„  <€ S! R R7      '       g   R# \         ;_uu_ 4        \        P                  S4      p V e   V P                  R4      SJd    RRR4       R# \        \	        SR^ 4      ;'       g    ^ 4      ^ 8”  g&   \        \	        SR^ 4      ;'       g    ^ 4      ^ 8”  d    RRR4       R#  ^ RIHp V! SRR7      pT'       g    RRR4       R# \        ST 4      pRRR4       \        R
SX4       R#   \         d+   p\        P                  R	ST4        Rp?RRR4       R# Rp?ii ; i  + '       g   i     LW; i)g      >@r   Nr€  Ú_user_turn_countÚ_api_call_count)Úrefresh_agent_mcp_toolsT)Ú
quiet_modez9Late MCP refresh: tool snapshot rebuild failed for %s: %sr<  )rV  rX  rˆ   r¯  r3  Útools.mcp_tool_agentrK  rV   rx  ry  r3  r  )rÊ  rK  Úaddedrz  r0  r€  rE  r\  s        €€€rD   Ú_wait_then_refreshÚ6_schedule_mcp_late_refresh.<locals>._wait_then_refresh–  s  ø€ Ù!¨$×/Ó/ÙßŽ^Ü—m‘m CÓ(ˆGØŠ '§+¡+¨gÓ"6¸eÓ"CØ÷ ‰^ô ”7˜5Ð"4°aÓ8×=Ð=¸AÓ>ÀÔBÄcÌ'ÐRWÐYjÐlmÓJn×JsÐJsÐrsÓFtÐwxÔFxØ÷ ‰^ðÝHÙ/°À$ÔG�÷ Ø÷ ‰^ô ! ¨Ó0ˆD÷ ô 	ˆn˜c 4Ö(øô ô Ü—‘ÐZÐ\_ÐadÔeÛ÷ ‰^ûðú÷ �^úsS   ¡0D/ÁD/Á4$D/ÂD/Â1C7ÃD/Ã	D/ÃD/Ã7D,ÄD'ÄD/Ä'D,Ä,D/Ä/D?	ztui-mcp-late-refresh-T)rò   ru   ró   )Útui_gateway.entryrD  rE  rV   rô   r	  r  )r\  r€  rD  rO  rE  s   ff  @rD   Ú_schedule_mcp_late_refreshrR  Š  s^   ú€ ð
ßQñ #×$Ò$Ù÷)ò )ô& ×ÒÐ.Ð7LÈSÈEÐ5RÐ[_Ô`×fÑfÖhøô1 ô Úðús   …A ÁA"Á!A"c                   ó,   a € ] tR tRt o V 3R ltRtV tR# )Ú_RuntimeFallbackResolutioni¬  c                óL   <€ V ^8„  d   Qh/ S[ ;R&   S[R,          ;R&   S[;R&   # )r>   ÚruntimeNÚselected_modelÚused_fallback)r­   rB   r®   )rC   r¯   s   "€rD   rE   Ú'_RuntimeFallbackResolution.__annotate__¬  s+   ø‡ ‚ Ù�Mñ á˜$•JÑñ ñ Ñò rF   r•   N)rb   rº   r»   r¼   Ú__annotate_func__r¾   r¿   rÀ   s   @rD   rT  rT  ¬  s   ø‡ ‡ „ rF   rT  c                óN   € V ^8„  d   QhR\         R\         R\         R,          RR/# )r>   r\  ra  rÙ   Nr@   rA   )rC   s   "rD   rE   rE   ´  s-   € ÷ 1ñ 1œcð 1¬ð 1ÄsÈTÅzð 1ÐVZñ 1rF   c           	     ó^  € RTrTVf   V'       g   \        4       pMVf    \        V4      pRp VEe­   \        VR4      '       d   VP                  V4      MRpV'       dæ   \        VP                  R4      V4      '       dÅ   \        V4      '       * p\        ;_uu_ 4        V \        9   d0   VR,          \        V ,          R&   V'       d   R\        V ,          R&   RRR4       VP                  R	4      '       d   VP                  R
4      '       g5   \        VR4      '       d#    \        \        V ,          VR,          VR7       M›MšV'       d1   VP                  R4      '       d   \        VR,          V4      '       dc   \        VR4      '       dQ   \        \        P                  V 4      4      '       g-    \        \        V ,          \        V ,          R,          VR7       V'       dD   Ve>   \         P"                  ! \        4      ;_uu_ 4        VP%                  4        RRR4       R# R# R#   \         d    \        P	                  RTRR7        EL%i ; i  + '       g   i     EL…; i  \         d    \        P                  RRR7        L¯i ; i  \         d    \        P                  RRR7        L×i ; i  + '       g   i     R# ; i  T'       dU   TeP   \         P"                  ! \        4      ;_uu_ 4        TP%                  4        RRR4       i   + '       g   i     i ; ii i ; i)zQAdopt the stored row's cwd and fill missing Git metadata, or persist a fresh cwd.FNTuk   profile session store unavailable for %s â€” skipping cwd hydration instead of touching the launch state.dbr"  Úget_sessionrî   Úexplicit_cwdÚ
git_branchÚgit_repo_rootÚupdate_session_cwd)r�  z-failed to enrich resumed session git metadataz%failed to persist resumed session cwd)r{  r…  rV   rx  ry  r/  r]  Ú_resumable_stored_cwdrˆ   Ú_host_cwd_is_terminal_cwdrV  rX  Ú*_persist_session_cwd_and_schedule_git_metar%  Ú_is_other_profiles_cwdÚ_is_remote_launch_cwdrT   rU   r¸   )r\  ra  Ú
session_dbrÙ   Úowns_dbr�  ÚrowÚremotes   &&&&    rD   Ú_hydrate_session_cwdrk  ´  sq  € à˜ˆRØ	‚zŸ,Ü‹Y‰Ø	Šð	XÜ)¨,Ó7ˆBØˆGð#Ø‹>Ü)0°°]×)CÒ)C�"—.‘. Ô%ÈˆCßÔ,¨S¯W©W°U«^¸\×JÒJô 7°|ÓDÔD�ß#–^ØœiÔ'Ø03°Eµ
œ	 #� uÑ-ß!Ø=AœI c�N¨>Ñ:÷	 $ð Ÿ™ ×-Ò-°S·W±W¸_×5MÒ5MÔSZØÐ,÷Tò TðeÜBÄ9ÈSÅ>ÐSVÐW\ÕS]ÐbdÖeø÷ ˜sŸw™w uŸ~š~Ô2HÈÈUÍÐUa×2bÒ2bÔhoØÐ(÷iò iä+¬I¯M©M¸#Ó,>×?Ò?ðYÜ>¼yÈ½~ÌyÐY\Í~Ð^cÕOdÐikÕl÷ �r’~Ü×$Ò$¤Y×/Õ/Ø—‘”
÷ 0Ñ/ñ &‰7øôM ô 	Xô �N‰Nð :Ø;GÐRVð ÷ Xð	Xú÷ $—^�^ûô %ô eÜŸ™Ð%TÐ_c˜Ödðeûô !ô YÜ—L‘LÐ!HÐSW�LÖXðYú÷ 0×/Ð/û÷ �r’~Ü×$Ò$¤Y×/Õ/Ø—‘”
÷ 0×/×/Ð/úð &ˆ7ús¿    H, ®1K Á ?K Â*IÃ
IÃK Ã9K ÄK Ä# I* Å	K ÅK Å$AK Æ4+J ÈJ:È,#IÉIÉI'	É!	K É*"JÊK ÊJÊK Ê"J7Ê4K Ê6J7Ê7K Ê:K	Ë/L,Ë=L	Ì	L,ÌL'Ì"
L,c                ó$   € V ^8„  d   QhR\         /# r�   rA   )rC   s   "rD   rE   rE   ð  s   € ÷ ñ ¬ñ rF   c                óÚ   € \         P                  ! \        4      ;_uu_ 4        V P                  4       pVP                   RVP
                   2uuRRR4       #   + '       g   i     R# ; i)z,Stable revision id for one spritesheet file.Ú:Nz0:0)rT   rU   rV   r‰  Úst_mtime_nsrŠ  )Úspritesheetr‰  s   & rD   Ú_pet_sheet_revisionrq  ð  sN   € ä	×	Ò	œY×	'Õ	'Ø×ÑÓ!ˆØ×"Ñ"Ð# 1 T§\¡\ NÐ3÷ 
(×	'×	'Ñ	'ñ ús   £+AÁA*	c                ó0   € V ^8„  d   QhR\         R\         /# )r>   rù  r@   r=  )rC   s   "rD   rE   rE   ø  s   € ÷ ñ ¤ð ¬ñ rF   c                óÂ   € \        V 4      pR\         3R\         3R\        33 F8  w  r#\        V P                  V4      V4      '       g   K(  V! W,          4      W&   K:  	  V# )zCShallow-clone cached payloads so callers can't mutate shared state.ÚframesByStateÚframesByRowÚ	stateRows)r­   rW  rA  rˆ   )rù  Úoutra  r?   s   &   rD   Ú_clone_pet_payloadrx  ø  sZ   € ä
ˆw‹-€CØ&¬Ð-°¼tÐ/DÀ{ÔTXÐFYÓZ‰	ˆÜ�g—k‘k #Ó&¨×-Ô-Ù˜G�LÓ)ˆC‹Hñ [ð €JrF   c                ó$   € V ^8„  d   QhR\         /# r�   r=  )rC   s   "rD   rE   rE     s   € ÷ ñ ¬$ñ rF   c           	     óž  a
aaaaa€ \         P                  ! \        4      ;_uu_ 4        ^ RIHp ^ RIHpHo VP                  V 4      ;_uu_ 4       pVP                  R4      oRRR4       VP                  VP                  uoo
\        ^SP                  S,          4      p\        ^SP                  S
,          4      pVP                  V4      p/ p\!        VRV 4       F9  w  r‰VS
,          oV
VVVV3R lo\#        V3R l\%        V4       4       V4      Wy&   K;  	  VuuRRR4       #   + '       g   i     LÍ; i  + '       g   i     / # ; i)z3Real frame count per concrete spritesheet row name.ro  )Ú	constantsÚrenderÚRGBANc           	      ó„   <€ SP                  SP                  V S,          SV S,          S,           SS,           34      4      # r·   )Ú_frame_is_blankÚcrop)ÚcolÚHÚWÚimager|  Útops   &€€€€€rD   rw   Ú'_pet_row_frame_counts.<locals>.<lambda>  s:   ø€  × 6Ñ 6°u·z±zÀ3ÈÅ7ÈCÐQTÐWXÕQXÐ[\ÕQ\Ð^aÐdeÕ^eÐBfÓ7gÔ hrF   c              3   óH   <"  € T F  pS! V4      '       g   K  Vx € K  	  R # 5ir·   r•   )rã   r�  Úblanks   & €rD   rå   Ú(_pet_row_frame_counts.<locals>.<genexpr>  s   øé € ÐG©[ c¹EÀ#¿JŸcšc«[ùs   ƒ"˜
")rT   rU   rV   rw  rp  Ú	agent.petr{  r|  r\   ÚconvertÚFRAME_WÚFRAME_HrŒ   rt  ru  Ústate_rows_for_gridÚ	enumeraterÇ  Úrange)rp  rp  r{  ÚopenedÚcolsÚ	row_countÚrowsrw  Úrow_idxru   r‚  rƒ  rˆ  r„  r|  r…  s   &         @@@@@@rD   Ú_pet_row_frame_countsr–    sû   ý€ ä	×	Ò	œY×	'Õ	'Ýß/Ø�Z‰Z˜×$Ô$¨Ø—N‘N 6Ó*ˆE÷ %à× Ñ  )×"3Ñ"3ˆˆˆ1Ü�1�e—k‘k QÕ&Ó'ˆÜ˜˜5Ÿ<™<¨1Õ,Ó-ˆ	Ø×,Ñ,¨YÓ7ˆØ ˆÜ& t¨J¨YÐ'7Ö8‰MˆGØ˜A•+ˆCßhÐhˆEÜÔG¬U°4¬[ÓGÈÓNˆC‹Iñ 9ð ÷ 
(Ò	'÷ %×$ú÷ 
(Ö	'ð €Iús$   ©(D;ÁD(	Á#B:D;Ä(D8Ä3D;Ä;E	c                ó$   € V ^8„  d   QhR\         /# r�   r=  )rC   s   "rD   rE   rE     s   € ÷ ñ ”$ñ rF   c                 óB  € \         P                  ! \        4      ;_uu_ 4        ^ RIHp  V ! 4       P                  R4      p\        V\        4      '       d   VP                  R4      MRp\        V\        4      '       d   TM/ uuRRR4       #   + '       g   i     / # ; i)z>``display.pet`` from the canonical config ({} on any failure).rƒ   r?  ÚpetN)rT   rU   rV   r‰   r„   rˆ   rA  r­   )r„   r?  r™  s      rD   Ú_pet_cfgrš    sk   € ä	×	Ò	œY×	'Õ	'Ý1Ù“-×#Ñ# IÓ.ˆÜ$.¨w¼×$=Ò$=ˆg�k‰k˜%Ô À4ˆÜ  ¤d×+Ò+‰s°÷	 
(×	'×	'Ñ	'ð
 €Iús   £ABÂB	c                ó$   € V ^8„  d   QhR\         /# r�   r‘   )rC   s   "rD   rE   rE     s   € ÷ #ñ #œ5ñ #rF   c                 ó&  € ^ RI Hp  \        P                  ! \        4      ;_uu_ 4        \        \        4       P                  RV P                  4      ;'       g    V P                  4      uuRRR4       #   + '       g   i     T P                  # ; i)zGConfigured ``display.pet.scale`` (or the engine default), never raises.©r{  ÚscaleN)	rŠ  r{  rT   rU   rV   r�   rš  rˆ   ÚDEFAULT_SCALEr�  s    rD   Ú_pet_config_scaler     sZ   € å#Ü	×	Ò	œY×	'Õ	'Ü”X“Z—^‘^ G¨Y×-DÑ-DÓE×`Ð`È×I`ÑI`Óa÷ 
(×	'×	'Ñ	'à×"Ñ"Ð"ús   ©AA5Á5B	c                ó0   € V ^8„  d   QhR\         R\        /# )r>   rž  r@   )r�   r­   )rC   s   "rD   rE   rE   '  s   € ÷ $'ñ $'¤uð $'´ñ $'rF   c               ó&  € ^ RI p^ RIHp  V P                  P	                  4       p\        V P                  4      VP                  VP                  V P                  V P                  \        V^4      3pVe<   \        ;_uu_ 4        \        P                  V4      pRRR4       Xe   \        V4      #  ^ RIHp VP#                  \        V P                  4      4      pV P                  P%                  4       p	V P                  P&                  P)                  4       R8X  d   RMRp
RV P                  RV P                  R	V
R
VP+                  V	4      P-                  R4      R\/        V P                  4      RVP0                  RVP2                  RVP4                  RVR\7        V P                  4      RVP8                  RVR\;        V P                  4      /pVec   \        ;_uu_ 4        V\        V&   \=        \        4      ^8”  d.   \        P?                  \A        \C        \        4      4      4       KA   RRR4       \        V4      #   \         d    Rp ELái ; i  + '       g   i     ELÆ; i  \         d    / p ELŸi ; i  + '       g   i     LW; i)u�   Renderer payload (spritesheet bytes + geometry) for *pet* â€” one shape for ``pet.info`` (active
mascot) and ``pet.hatch`` (unadopted preview).Nr�  )r|  z.pngz	image/pngz
image/webprÐ  ÚdisplayNameÚmimeÚspritesheetBase64ÚasciiÚspritesheetRevisionÚframeWÚframeHÚframesPerStatert  ru  ÚloopMsrž  rv  )"Úbase64rŠ  r{  rp  r‰  rB   ro  rŠ  rÐ  Údisplay_namer•  rV   Ú_pet_payload_cache_lockÚ_pet_payload_cacherˆ   rx  r|  Ústate_frame_countsÚ
read_bytesrj   rH  Ústandard_b64encodeÚdecoderq  rŒ  r�  ÚFRAMES_PER_STATEr–  ÚLOOP_MSÚ_pet_state_rowsr–  r  rÇ  Úiter)r™  rž  r¬  r{  r‰  Ú	cache_keyÚcachedr|  Úframes_by_stater�   r¤  rù  s   &$          rD   Ú_pet_sprite_payloadr»  '  s  € ó Ý#ðØ�‰×#Ñ#Ó%ˆÜ˜Ÿ™Ó)¨4×+;Ñ+;¸T¿\¹\È3Ï8É8ÐUX×UeÑUeÔglÐmrÐtuÓgvÐwˆ	ð Òß$Ö$Ü'×+Ñ+¨IÓ6ˆF÷ %àÒÜ% fÓ-Ð-ðÝ$Ø ×3Ñ3´C¸¿¹Ó4HÓIˆð �/‰/×
$Ñ
$Ó
&€CØŸ/™/×0Ñ0×6Ñ6Ó8¸FÔB‰;È€Dà�—‘˜-¨×)9Ñ)9¸6À4Ø˜V×6Ñ6°sÓ;×BÑBÀ7ÓKØÔ2°3·?±?ÓCÀXÈy×O`ÑO`Ø�)×#Ñ#Ð%5°y×7QÑ7QØ˜ØÔ,¨S¯_©_Ó=¸xÈ×IZÑIZØ�˜¤_°S·_±_Ó%Eð€Gð Òß$Ö$Ø,3Ô˜yÑ)ÜÔ(Ó)¨AÔ-Ü"×&Ñ&¤t¬DÔ1CÓ,DÓ'EÖFð .÷ %ô ˜gÓ&Ð&øô9 ô Ø‹	ðú÷ %×$Ð$ûô ô Ø‹ðú÷ %×$ús=   ŒA'I ÂIÂ3*I, Ç%AJ ÉIÉIÉI)	É,I=É<I=Ê J	c                 óP  € ^ RI Hp Hp \        4       p\	        VP                  R4      RR7      pV'       d5   TP                  \        VP                  RR4      ;'       g    R4      4      MRpY4\        VP                  RV P                  4      ;'       g    V P                  4      3# )	z2Resolve configured active pet + scale from config.)r{  Ústorerû  Fr¥   rÐ  rH   Nrž  )
rŠ  r{  r½  rš  r   rˆ   Úresolve_active_petrB   r�   rŸ  )r{  r½  Úpet_cfgrû  r™  s        rD   Ú_pet_active_selectionrÀ  N  s~   € ç*Ü‹j€GÜ˜gŸk™k¨)Ó4¸eÔD€GßJQˆ%×
"Ñ
"¤3 w§{¡{°6¸2Ó'>×'DÐ'DÀ"Ó#EÔ
FÐW[€CØœ˜wŸ{™{¨7°I×4KÑ4KÓL×gÐgÐPY×PgÑPgÓhÐhÐhrF   c                ó:   € V ^8„  d   QhR\         \        ,          /# r�   ©rW  rB   )rC   s   "rD   rE   rE   W  s   € ÷ &ñ &¤D¬¥Iñ &rF   c           	     ó°  € ^ RI Hp \        P                  ! \        4      ;_uu_ 4        ^ RIHp VP                  V 4      ;_uu_ 4       p\        ^VP                  VP                  ,          4      pRRR4       \        VP                  X4      4      uuRRR4       #   + '       g   i     L4; i  + '       g   i     M; i\        TP                  4      # )znRow taxonomy for the concrete sheet (legacy 8-row or current 9-row atlas), in the renderer's `PetState` names.r�  ro  N)rŠ  r{  rT   rU   rV   rw  rp  r\   rŒ   ru  r�  rW  rŽ  Ú
STATE_ROWS)rp  r{  rp  r„  r“  s   &    rD   r¶  r¶  W  sˆ   € å#Ü	×	Ò	œY×	'Õ	'ÝØ�Z‰Z˜×$Ô$¨Ü˜A˜uŸ|™|¨y×/@Ñ/@Õ@ÓAˆI÷ %ä�I×1Ñ1°)Ó<Ó=÷	 
(Ò	'ç$×$ú÷ 
(×	'úô
 �	×$Ñ$Ó%Ð%s#   © B0Á	(B	Á1!B0ÂB-Â(B0Â0C 	c                 ó\   € \        4       R,          R,          p V P                  RRR7       V # )z=Profile-scoped staging dir for in-progress generation drafts.Úcachezpet-genT©r_  rI   ©r   Úmkdir©r§  s    rD   Ú_pet_gen_rootrË  b  s)   € äÓ˜wÕ&¨Õ2€DØ‡J�J�t d€JÔ+Ø€KrF   Ú	max_age_sg      ¬@c                ó(   € V ^8„  d   QhR\         RR/# )r>   rÌ  r@   Nr‘   )rC   s   "rD   rE   rE   i  s   € ÷ 6ñ 6¤uð 6¸$ñ 6rF   c               ó  aa€ ^ RI p \        P                  ! 4       oVV3R lV P                  4        4        F  pVP                  VRR7       K  	  R#   \         d"   p\
        P                  RT4        Rp?R# Rp?ii ; i)z=Drop stale draft staging dirs so cache never grows unbounded.Nc              3   ó¦   <"  € T FF  qP                  4       '       g   K  SVP                  4       P                  ,
          S8”  g   KB  Vx € KH  	  R # 5ir·   )r£  r‰  Úst_mtime)rã   rø  rÌ  r  s   & €€rD   rå   Ú!_pet_gen_sweep.<locals>.<genexpr>n  s4   øé € Ðf¡˜A·8±8·:”aÀ#ÈÏÉË×HYÑHYÕBYÐ\eÑBe—a’a£ùs   ƒAŸ#AÁ
AT)Úignore_errorszpet-gen sweep failed: %s)Úshutilr^   ÚiterdirÚrmtreerV   rx  r%  )r§  rÌ  rÓ  Úchildrz  r  s   &d   @rD   Ú_pet_gen_sweepr×  i  s^   ù€ ãð6Ü�iŠi‹kˆÝf §¡¤ÖfˆEØ�M‰M˜%¨tˆMÖ4ó gøäô 6Ü�‰Ð/°×5Ò5ûð6ús   ˆA
A ÁB ÁA;Á;B Úmax_pxc                ó0   € V ^8„  d   QhR\         R\        /# )r>   rØ  r@   )r¯  rB   )rC   s   "rD   rE   rE   t  s   € ÷ `ñ `¤sð `´Sñ `rF   c               ó”  € ^ RI p^ RIp^ RIHp VP	                  V 4      ;_uu_ 4       pVP                  R4      pRRR4       XP                  W3VP                  4       VP                  VP                  4       ;pRR7       RVP                  VP                  4       4      P                  R4      ,           #   + '       g   i     L…; i)zBDownscaled PNG data URI for a draft image (small preview payload).Nro  r}  ÚPNG)rC   zdata:image/png;base64,r¦  )r¬  Úiorw  rp  r\   r‹  Ú	thumbnailÚLANCZOSÚsaveÚBytesIOr²  Úgetvaluer³  )rY   rØ  r¬  rÜ  rp  r‘  r{  Úbufs   &$      rD   Ú_pet_png_data_urirã  t  s�   € çÝØ	�‰�D×	Ô	˜VØ�n‰n˜VÓ$ˆ÷ 
à‡M�M�6Ð" E§M¡MÔ2Ø‡H�H�B—J‘J“LÐ ˆS¨€HÔ/Ø# f×&?Ñ&?ÀÇÁÃÓ&O×&VÑ&VÐW^Ó&_Õ_Ð_÷	 
×	ús   ¨B7Â7C	ÚpngÚjpegÚjpgÚwebpÚgifÚHERMES_PET_REFERENCE_MAX_BYTESc                ó0   € V ^8„  d   QhR\         R\        /# )r>   Úref_rawr@   rÌ  )rC   s   "rD   rE   rE   Š  s   € ÷ ñ ´ð Äñ rF   c                ó¬  € ^ RI p^ RIp^ RIpVP                  RWP                  4      pV'       g   \        R4      h\        P                  VP                  ^4      P                  4       4      ;pf   \        R4      hRP                  VP                  ^4      P                  4       4      p\        V4      ^,          ^,          \        8”  d   \        R4      h VP                  VRR7      p\        T4      \        8”  d   \        R4      hTR
T 2,          ;p
P!                  T4       T
.#   TP                  \
        3 d   p	\        R	4      T	hRp	?	ii ; i)z@Decode + validate a reference-image data URL into the stage dir.Nz*^data:image/([a-zA-Z0-9.+-]+);base64,(.*)$zinvalid reference image formatz unsupported reference image typerH   zreference image too largeT)Úvalidatezinvalid reference image dataz
reference.)r¬  ÚbinasciiÚreÚmatchÚDOTALLrŠ   Ú_PET_REFERENCE_MIME_EXTrˆ   ÚgrouprH  rR   r^  r–  Ú_PET_REFERENCE_MAX_BYTESÚ	b64decodeÚErrorÚwrite_bytes)rë  Ústager¬  rî  Ú_rerð  Úextrù  r�   rz  Úref_paths   &&         rD   Ú#_pet_reference_images_from_data_urlrü  Š  s)  € çÛØ�I‰IÐCÀWÏjÉjÓY€EßÜÐ9Ó:Ð:Ü&×*Ñ*¨5¯;©;°q«>×+?Ñ+?Ó+AÓBÐBˆÒKÜÐ;Ó<Ð<Ø�g‰g�e—k‘k !“n×*Ñ*Ó,Ó-€GÜˆG‹�qÕ˜QÕÔ!9Ô9ÜÐ4Ó5Ð5ðBØ×Ñ˜w°ÐÓ6ˆô ˆ3ƒxÔ*Ô*ÜÐ4Ó5Ð5Ø˜: c UÐ+Õ+Ð+€X×8Ñ8¸Ô=Øˆ:Ðøð �N‰NœJÐ'ô BÜÐ7Ó8¸cÐAûðBús   ÃD+ Ä+EÅEÅEc                ó(   € V ^8„  d   QhR\         RR/# ©r>   Útokenr@   NrA   )rC   s   "rD   rE   rE      s   € ÷ &ñ &œ3ð & 4ñ &rF   c                ó†   € \         ;_uu_ 4        \        P                  V 4       RRR4       R#   + '       g   i     R# ; i)z?Clear a stale cancel flag at the start of a generate/hatch run.N)Ú_pet_cancel_lockÚ_pet_cancelledr  ©rÿ  s   &rD   Ú_pet_cancel_armr     s%   € ç	Ö	Ü×Ñ˜uÔ%÷ 
×	×	Ò	úó	   �/¯A 	c                ó(   € V ^8„  d   QhR\         RR/# rþ  rA   )rC   s   "rD   rE   rE   ©  s   € ÷ "ñ "œsð " tñ "rF   c                 ó†   € \         ;_uu_ 4        \        P                  V 4       R R R 4       R #   + '       g   i     R # ; ir·   )r  r  rÃ  r  s   &rD   Ú_pet_cancel_requestr  ©  s%   € ß	Ö	Ü×Ñ˜5Ô!÷ 
×	×	Ò	úr  c                ó0   € V ^8„  d   QhR\         R\        /# )r>   rÿ  r@   rì  )rC   s   "rD   rE   rE   ®  s   € ÷ 'ñ 'œSð '¤Tñ 'rF   c                 ón   € \         ;_uu_ 4        V \        9   uuR R R 4       #   + '       g   i     R # ; ir·   )r  r  r  s   &rD   Ú_pet_is_cancelledr  ®  s   € ß	Ö	ØœÑ&÷ 
×	×	Ó	ús   �	#£4	c                  óN   € \        4       R ,          p V P                  RRR7       V # )zspawn-treesTrÇ  rÈ  rÊ  s    rD   Ú_spawn_trees_rootr  ·  s$   € ÜÓ˜}Õ,€DØ‡J�J�t d€JÔ+Ø€KrF   c                ó$   € V ^8„  d   QhR\         /# )r>   rÇ  rA   )rC   s   "rD   rE   rE   ½  s   € ÷ ñ ¬ñ rF   c                 óŽ   € \        4       R P                  R V  4       4      ;'       g    R,          pVP                  RRR7       V# )rH   c              3   ób   "  € T F%  qP                  4       '       g   VR 9   d   TMRx € K'  	  R# 5i)z-_Ú_N)Úisalnum)rã   rø  s   & rD   rå   Ú*_spawn_tree_session_dir.<locals>.<genexpr>¾  s&   é € Ð&bÑWaÐRS¯I©I¯KªK¸1À¼9¡qÈ#Ô'MÓWaùs   ‚-/ÚunknownTrÇ  )r  rR   rÉ  )rÇ  Úds   & rD   Ú_spawn_tree_session_dirr  ½  s=   € ÜÓ˜rŸw™wÑ&bÑWaÓ&bÓb×oÐoÐfoÕp€AØ‡G�G�D 4€GÔ(Ø€HrF   z_index.jsonlc                ó(   € V ^8„  d   QhR\         RR/# )r>   r7  r@   Nr=  )rC   s   "rD   rE   rE   Ê  s   € ÷ @ñ @´ð @¸$ñ @rF   c           	      óH  €  V \         ,          P                  R RR7      ;_uu_ 4       pVP                  \        P                  ! VRR7      R,           4       RRR4       R#   + '       g   i     R# ; i  \
         d"   p\        P                  RT4        Rp?R# Rp?ii ; i)rJ   rK   rL   Frì  r  Nz"spawn_tree index append failed: %s)Ú_SPAWN_TREE_INDEXr\   r]   r  r(  ÚOSErrorrx  r%  )Úsession_dirr7  rk   rz  s   &&  rD   Ú_append_spawn_tree_indexr  Ê  su   € ð@ØÔ-Õ-×3Ñ3°CÀ'Ð3×JÔJÈaØ�G‰G”D—J’J˜u°5Ô9¸DÕ@ÔA÷ K×J×JÒJûäô @Ü�‰Ð9¸3×?Ò?ûð@ús4   ‚&A5 ¨/A!ÁA5 Á!A2	Á,A5 Á2A5 Á5B!Â BÂB!c                ó:   € V ^8„  d   QhR\         \        ,          /# r�   )rW  r­   )rC   s   "rD   rE   rE   Ò  s   € ÷ 
ñ 
¬4´­:ñ 
rF   c           
      óÚ  € . p V \         ,          P                  R RR7      ;_uu_ 4       pV Fw  pVP                  4       ;p'       g   K  \        P                  ! \
        P                  4      ;_uu_ 4        VP                  \
        P                  ! V4      4       RRR4       Ky  	  RRR4       V#   + '       g   i     K–  ; i  + '       g   i     T# ; i  \         d    . u # i ; i)Úrz	utf-8-sigrL   N)
r  r\   r`   rT   rU   r  r  r2  r  r  )r  rw  rk   r  s   &   rD   Ú_read_spawn_tree_indexr   Ò  s¾   € Ø€CðØÔ-Õ-×3Ñ3°CÀ+Ð3×NÔNÐRSÛ�ØŸ:™:›<Ð'�4×'Ð'Ü#×,Ò,¬T×-AÑ-A×BÕBØŸ
™
¤4§:¢:¨dÓ#3Ô4÷ CÑBñ ÷ Oð €J÷	 C×BÐBú÷ OÖNð €Jûô ô ØŠ	ðúsL   „&C ªCÁ
,CÁ6&B2ÂCÂ(C Â2CÂ=	CÃC	ÃC ÃC ÃC*Ã)C*Ú#_goal_compression_recovery_attemptsc                ó†   € V ^8„  d   QhR\         R\        R\        \        P                  \        P
                  3,          /# )r>   r\  Úintervalr@   )rB   r�   r�  rô   ÚEventr	  )rC   s   "rD   rE   rE   ê  s6   € ÷ ñ œSð ´5ð Ä5ÌÏÉÔZc×ZjÑZjÐIjÕCkñ rF   c                ó(  a aaaa€ \         P                  ! 4       oRo\        P                  ! \        4      ;_uu_ 4        \        S4      oRRR4       R VVVV V3R llp\        VRR7      pVP                  4        SV3#   + '       g   i     L>; i)zÉPush live ``session.usage`` snapshots every ``interval`` s while a turn runs. The caller must set the
Event AND join the thread before ``message.complete``: a late tick would roll the final usage back.Nc                ó   € V ^8„  d   QhRR/# rµ   r•   )rC   s   "rD   rE   Ú)_start_usage_ticker.<locals>.__annotate__ô  s   € ÷ 
>ñ 
>�4ñ 
>rF   c                  óX  <€ Sp SP                  S4      '       g|   \        P                  ! \        4      ;_uu_ 4        \	        S4      pW8X  d    R R R 4       KV  Tp SP                  4       '       d    R R R 4       R # \        RSRV/4       R R R 4       K’  R #   + '       g   i     K¥  ; i)Nr›   rœ  )r    rT   rU   rV   rª  Úis_setr  )Úlastrœ  r€  Úbaseliner#  r\  Ústops     €€€€€rD   rg  Ú"_start_usage_ticker.<locals>._loopô  s‰   ø€ ØˆØ—)‘)˜H×%Ò%Ü×$Ò$¤Y×/Õ/Ü" 5Ó)�Ø”=Ø÷ 0Ñ/ð �Ø—;‘;—=’=Ø÷ 0Ñ/ô �o s¨W°eÐ,<Ô=÷ 0Ñ/ñ &ß/×/Ð/ús   ½BÁBÁ2BÁ=BÂB)	Trñ   )rô   r$  rT   rU   rV   rª  Ú_RealThreadr  )r\  r€  r#  rg  rt   r+  r,  s   fff  @@rD   Ú_start_usage_tickerr/  ê  sl   ü€ ô �?Š?Ó€Dð !€HÜ	×	Ò	œY×	'Õ	'Ü˜eÓ$ˆ÷ 
(÷
>ô 
>ô  ¨dÔ3€FØ
‡L�L„NØ�ˆ<Ð÷! 
(×	'ús   ¿BÂB	c                ó0   € V ^8„  d   QhR\         R\        /# rß  )r­   rW  )rC   s   "rD   rE   rE     s   € ÷ ñ ¤ð ¬ñ rF   c                óp  € ^ RI Hp \        V P                  R4      ;'       g    R4      p. pVP	                  4        Fu  pVP                  VR,          4      pVf   K!  \        \        VRR4      ;'       g    R4      V8X  g   KH  VP                  ;'       g    RRR VR&   VP                  V4       Kw  	  V# )zHBackground processes owned by this session (registry session_key match).)Úprocess_registryr×   rH   rÇ  NÚoutput_taili`ðÿÿ)Útools.process_registryr2  rB   rˆ   Úlist_sessionsr3  Úoutput_bufferr2  )rÊ  r2  ra  Úownedr7  r  s   &     rD   Ú_session_processesr8    s¤   € õ 8Ü
ˆg�k‰k˜-Ó(×.Ð.¨BÓ
/€CØ€EØ!×/Ñ/Ö1ˆØ×#Ñ# E¨,Õ$7Ó8ˆØÔ¤¤G¨D°-ÀÓ$D×$JÐ$JÈÓ KÈsÖ RØ$(×$6Ñ$6×$<Ð$<¸"¸e¸fÐ#EˆE�-Ñ Ø�L‰L˜Öñ	 2ð
 €LrF   c                ó$   € V ^8„  d   QhR\         /# r�   rA   )rC   s   "rD   rE   rE   %  s   € ÷ ñ œ#ñ rF   c                 óŒ  € \         P                  ! \        4      ;_uu_ 4        \        4       p \        P
                  ! R Uu/ uF  qV P                  V4      bK  	  upR\        R7      p\        P                  ! VP                  4       4      P                  4       R,          uuRRR4       # u upi   + '       g   i     R# ; i)uÙ   Hash of mcp_servers (definitions â€” omitting it meant an edited server never bumped the rev) + mcp +
tools. ``config.get mtime`` ships it so cosmetic writes don't reload; ``reload.mcp`` coalesces on it. "" = unknown.T)Ú	sort_keysr€   :Né   NNrH   )Úmcpr  r^  )rT   rU   rV   r@  r  r(  rˆ   rB   ÚhashlibÚsha1ÚencodeÚ	hexdigest)rÑ  ru  Úrev_srcs      rD   Ú_compute_mcp_revrC  %  s†   € ô 
×	Ò	œY×	'Õ	'Ü‹kˆÜ—*’*Ñ5TÓUÑ5T° §¡¨£šmÑ5TÑUÐaeÔorÔsˆÜ�|Š|˜GŸN™NÓ,Ó-×7Ñ7Ó9¸#Õ>÷ 
(Ò	'ùâU÷ 
(Ö	'ñ ús   £B2ÁB-ÁAB2Â-B2Â2C	c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r>   r�  Ú	coalescedr@   r¬   )rC   s   "rD   rE   rE   /  s&   € ÷ @ñ @¤ð @´Dð @¼Tñ @rF   c               ó  € \        VP                  RR4      4      '       d    ^ RIHp V! RR4       \        T RRR	\        /V'       d
   R
R/C4      # / C4      #   \         d!   p\
        P                  RT4        Rp?LMRp?ii ; i)zlShared tail for both reload paths: honor ``always`` (persist the confirm opt-out) and return the ok payload.r/  F)Úsave_config_valuezapprovals.mcp_reload_confirmz.Failed to persist mcp_reload_confirm=false: %sNre  ÚreloadedÚ
loaded_revrE  T)	r®   rˆ   ÚclirG  rV   rx  ry  r€  Ú_mcp_reload_loaded_rev)r-  r�  rE  rG  Ú_excs   &&$  rD   Ú_finish_reloadrM  /  s†   € äˆF�J‰J�x Ó'×(Ò(ð	SÝ-ÙÐ<¸eÔDô ˆs�X˜z¨<Ô9OÐ~×ktÐU`ÐbfÐTgÐ~ÓÐÐz|Ð~ÓÐøô ô 	SÜ�N‰NÐKÈT×RÑRûð	Sús   £A ÁBÁ$A?Á?BÚsnapshotÚsnapu?   `hermes setup` needs a full terminal â€” run it outside the TUIu?   `hermes gateway` is long-running â€” run it in another terminalu_   `hermes sessions browse` is interactive â€” use /resume here, or run browse in another terminalz5`hermes config edit` needs $EDITOR in a real terminalc                óT   € V ^8„  d   QhR\         \        ,          R\        R,          /# )r>   r  r@   NrÂ  )rC   s   "rD   rE   rE   M  s&   € ÷ Jñ JœD¤�Ið J¬#°­*ñ JrF   c                óü   € V '       g   R# \         ;QJ d    . R V R,           4       F  NK  	  5M! R V R,           4       4      p\        P                  VR,          4      ;'       g    \        P                  V4      # )zKReturn user hint if this argv must not run headless in the gateway process.u^   bare `hermes` is interactive â€” use `/hermes chat -q â€¦` or run `hermes` in another terminalc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir·   )rH  )rã   rJ   s   & rD   rå   Ú$_cli_exec_blocked.<locals>.<genexpr>Q  s   é € Ð-¡H˜q—‘—�£Hùs   ‚:Nr>   N:Né   N)r�  Ú_CLI_EXEC_BLOCKEDrˆ   )r  Úheads   & rD   Ú_cli_exec_blockedrW  M  sW   € çÙoßŒ5Ñ- D¨¦HÓ-�5‰5Ñ- D¨¦HÓ-Ó-€DÜ× Ñ   b¥Ó*×IÐIÔ.?×.CÑ.CÀDÓ.IÐIrF   c                ó0   € V ^8„  d   QhR\         R\         /# r™  rA   )rC   s   "rD   rE   rE   U  s   € ÷ ñ œð ¤ñ rF   c                 óÌ   € \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! V 4      ;p'       d   VP
                  MT uuRRR4       #   + '       g   i     T # ; i)r   )Úresolve_commandN)rT   rU   rV   Úhermes_cli.commandsrZ  ru   )ru   rZ  r  s   &  rD   Ú_resolve_namer\  U  sD   € Ü	×	Ò	œY×	'Õ	'Ý7Ù.¨tÓ4Ð4˜!Ö4ˆq�vŠv¸4÷ 
(×	'×	'Ñ	'ð €Kús   £$AÁA#	)Úsummarize_server)Ú_BARE_BILLING_PROVIDERS)2Úsession_registryÚagent_factoryÚmethods_voiceÚmethods_browserÚmethods_slashÚmethods_complete_helpersÚsession_auto_continueÚplugin_injectÚrpc_dispatchÚagent_callbacksÚsession_historyÚprompt_attachmentsÚsession_notificationsÚtool_progressÚchange_watcherÚsession_compressionrG  Úcompute_host_bridgeÚsession_workdirÚsession_lifecycleÚsession_reaperÚsession_transportsÚprompt_turnÚbilling_viewÚmethods_browser_controlÚmethods_bot_relayÚmethods_completeÚmethods_configÚmethods_config_setÚmethods_imagesÚmethods_profilesÚmethods_promptÚmethods_sessionÚmethods_toolsÚmethods_tools_plugin_serversÚmethods_projectsÚmethods_session_foreignÚmethods_session_controlÚmethods_subagentsÚmethods_vaultÚmethods_free_tierÚmethods_connectorsÚmethods_connectors_accountÚmethods_displayÚmethods_display_watchÚmethods_onboardingÚmethods_i18nÚmethods_machineÚmethods_shared_metricsÚmethods_plugin_catalogc                ó6  € V ^8„  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   ^\         9   d   \        R,          ;R&   ^\         9   d   \        R,          ;R&   ^\         9   d   \        R,          ;R&   ^\         9   d,   \        \        \        \        \
        3,          3,          ;R&   ^\         9   d&   \        P                  \        R,          ,          ;R&   ^\         9   d   \        P                  \        ,          ;R	&   ^\         9   d   \        \        ,          ;R
&   ^	\         9   d   \        \        ,          ;R&   ^
\         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d   \        \        ,          ;R&   # )r>   rX  r†  Nrw  r´  rµ  Ú_idempotency_keysr•  Ú_current_rpc_methodrÁ  r  r  r¯  r  Ú_PENDING_INPUT_COMMANDSÚ_WORKER_BLOCKED_COMMANDS)Ú__conditional_annotations__r­   rB   Úcallabler�  r�   ÚcontextvarsÚ
ContextVarÚsetr   r5   r  Ú	frozenset)rC   s   "rD   rE   rE      s°  € ‡�÷|  Ò Œ4””T�	�?Ñ ñ} ÷~ #Ò "Œ$Œs”Hˆ}Õ
Ñ "ñ ÷B Ò Œ3��:Ñ ñC ÷P Ò ŒD�4�KÑ ñQ ÷R Ò Œ%�$�,Ñ ñS ÷^ 5Ò 4”4œœU¤3¬ :Õ.Ð.Õ/Ñ 4ñ_ ÷X;ò ;¤×!7Ñ!7¼¸t½Õ!Dñ ;ñY ÷` sÒ r”[×+Ñ+¬CÕ0Ñ rña ÷J )Ò (”sœ4•yÑ (ñK ÷B )Ò (”#”i•.Ñ (ñC ÷x$ 0Ò /œœc¤6˜kÕ*Ñ /ñy$ ÷V7 +Ò *”Dœ¤˜Õ%Ñ *ñW7 ÷@< !Ò  ””C•Ñ  ñA< ÷tAò œ¤3�ñ ñuA ÷~A KÒ Jœ)¤C�.Ñ JòA rF   )Úthinkingr^  Ú	subagentsÚactivity>   ÚhiddenÚexpandedÚ	collapsedi`T  r·   >   r]  rî   Úauto)ró  >   rc  r…  Úbottom>   rc  Úsmartr   >   údisplay.in_app_tipsúdisplay.in_app_toursúdisplay.message_reactionsi   )rš   >   ÚqÚmoaÚgoalÚinitÚloopÚplanÚundoÚlearnrù   ÚretryrG  ÚcompactÚcompressÚ	proactive)Úsetup)Úgateway)r@  Úbrowse)ÚconfigÚedit(·  r•  ÚatexitÚconcurrent.futuresÚ
concurrentrT   r—  r·  r>  Ú	importlibÚinspectr  ÚloggingrW   rù   rï  r  rd   rô   r^   Úuuidr   r   Úpathlibr   Útypingr   r   r	   r
   r   r   r   r   Úhermes_constantsr   r   r   r   r   r   Úhermes_cli.env_loaderr   Úutilsr   r   Úhermes_state_idsr   rÿ   r   Úagent.fast_moder   Úagent.replay_cleanupr   Úagent.reasoning_effortr   r   Úagent.voice_turn_router   Úagent.compaction_displayr   Úagent.skill_commandsr   Úagent.conversation_loopr    r:  r!   Útui_gateway.checkpointsr"   r#   r$   Ú_resolve_checkpoints_enabledÚtui_gateway._envr%   r&   Útui_gateway.turn_markerr'   r(   r)   r*   Útui_gateway.contractsr+   rÿ  Útui_gateway.user_messagesr,   r-   r.   r/   r0   r1   r2   Útui_gateway.transportr3   r4   r5   r6   r7   r8   Ú	getLoggerrb   rx  r  rl  r  rÊ   rY   rR   r[   rn   rq   Ú
excepthookrU   rV   r*  rx   Útui_gateway.renderry   rz   r{   rX  r†  ru  rw  rõ   Ú_stdout_lockr³  Ú_profile_ui_meta_lockÚRLockrV  r´  rµ  r¶  r‘  Ú_IDEMPOTENCY_KEY_TTLÚ_session_resume_lockrŒ   r)  rŽ   r–   Ú_WS_ORPHAN_REAP_GRACE_SÚ_WS_ORPHAN_REAP_SLEEP_SLACK_SÚ_WS_ORPHAN_ACTIVITY_STALE_SÚ _WS_ORPHAN_INTERRUPT_REAP_POLL_SÚ#_WS_ORPHAN_INTERRUPT_REAP_MAX_POLLSÚ!_TURN_SETTLE_BEFORE_CLOSE_SECONDSÚ_DETAIL_SECTION_NAMESrš  Ú_DETAIL_MODESÚ_LONG_HANDLERSÚ_rpc_pool_workersÚfuturesÚThreadPoolExecutorr¢   Úregisterr˜  r•  r’  rê   rÂ   re   r¨   rô  Ú_detached_ws_transportrÓ   rÕ   rB  rI  rN  r]  r�   Ú_SESSION_TTL_Sre  Ú_EXIT_FLUSH_BUDGET_SÚ_INCREMENTAL_FLUSH_INTERVAL_Sri  rm  rq  r{  r‚  r…  rŒ  Úcontextmanagerr—  r¥  r«  r»  r‹  rª  r”  r™  rÁ  rÎ  rÔ  rÚ  râ  rå  rê  rö  r  r  r  r  Ú
bind_sinksr  r  r$  r  r  r'  r4  r>  rG  rN  rb  rl  r}  r€  r·  rˆ  rï  r’  r˜  r¤  r¥  r¦  rž  r©  r­  rº  r@  rÀ  rÉ  rÝ  râ  ré  rï  rõ  r  r  r  r(  r  r  r  r  r  r  r  r  r   r&  r)  r4  r<  r=  rB  rY  rb  Ú_STATUSBAR_MODESÚ_APPROVAL_MODESÚ_DISPLAY_TOGGLE_KEYSÚ_BOOL_WORDSrq  rª  r®  rÁ  r©  r&  rÌ  r×  rÝ  rè  rô  r3  r9  r=  rA  rR  rT  rk  r®  r¯  rq  rx  r–  rš  r   r»  rÀ  r¶  rË  r×  rã  r  r  rò  r¯  r‡   rˆ   rB   rô  r‹   rŠ   rü  r  Ú_pet_cancel_releaser  r  r  r  r  r  r   Ú#_GOAL_COMPRESSION_RECOVERY_ATTEMPTSÚ _GOAL_COMPRESSION_RECOVERY_LIMITr	  r.  r/  r8  Ú_mcp_reload_lockÚ_mcp_reload_genrK  Ú_MCP_RELOAD_MAX_PASSESrC  rM  r“  r”  rU  rW  r\  Ú_paste_counterÚmcp_rpc_helpersr]  Ú_mcp_summarize_serverÚhermes_stater^  rH   r_  Ú_session_registryr`  Ú_agent_factoryra  Ú_methods_voicerb  Ú_methods_browserrc  Ú_methods_slashrd  Ú_methods_complete_helpersre  Ú_session_auto_continuerf  Ú_plugin_injectrg  Ú_rpc_dispatchrh  Ú_agent_callbacksri  Ú_session_historyrj  Ú_prompt_attachmentsrk  Ú_session_notificationsrl  Ú_tool_progressrm  Ú_change_watcherrn  Ú_session_compressionrG  Ú_model_switchro  Ú_compute_host_bridgerp  Ú_session_workdirrq  Ú_session_lifecyclerr  Ú_session_reaperrs  Ú_session_transportsrt  Ú_prompt_turnru  Ú_billing_viewrv  r×  rw  Ú_methods_bot_relayrx  Ú_methods_completery  Ú_methods_configrz  Ú_methods_config_setr{  Ú_methods_imagesr|  Ú_methods_profilesr}  Ú_methods_promptr~  Ú_methods_sessionr  Ú_methods_toolsr€  Ú_methods_tools_plugin_serversr�  Ú_methods_projectsr‚  Ú_methods_session_foreignrƒ  Ú_methods_session_controlr„  Ú_methods_subagentsr…  Ú_methods_vaultr†  Ú_methods_free_tierr‡  Ú_methods_connectorsrˆ  Ú_methods_connectors_accountr‰  Ú_methods_displayrŠ  Ú_methods_display_watchr‹  Ú_methods_onboardingrŒ  Ú_methods_i18nr�  Ú_methods_machinerŽ  Ú_methods_shared_metricsr�  Ú_methods_plugin_catalogÚ_mÚmodulesrE   )r•  s   @rD   Ú<module>r/     s¡  øðç ‚Û Û Û Û Û Û Û Û Û Û 	Û Û 	Û Û 
Û Û Û ß 'Ý ß 6Ó 6÷ `Ñ _÷:÷ :õ 5ß 1Ý +Ý :Ý (Ý <ß HÝ 7Ý KÝ :Ý FÝ !÷bñ bç /ß oÓ oÝ 8÷,÷ ,ñ ,÷G÷ Gð 
×	Ò	˜8Ó	$€á(7Ó(9Ð 9€Ð%Ù ˜|¹¸h»×9NÑ9N×9UÑ9UÐX^Õ9^Õ _ð
 �W‰W�\‰\˜,¨Ð0GÓH€
ð]ÐW[÷ ]ò4ð
 €„ñi€	Ô ð ×Ò˜×#Õ#Ý7áÔ÷ $÷
 QÑ Pà€	Ó Ø "€Ó "Ø
€Ø€	Ó Ø�~Š~Ó€Ø�NŠNÓ€	ð "ŸšÓ(Ð Ø—’Ó"€Ø€
Ó Ø€Ó Ø€	ð
 35Ð Ó 4ØÐ Ø —~’~Ó'Ð Ù˜c¡9Ð-IÈ4Ó#PÓQÐ õ
õ*cñ 8Ó9Ð ð
 !$Ð ñ 1Ð1XÐZvÐx}Ó~Ð Ø#&Ð  ð ')Ð #Ø$'Ð !ÙFÐ ÙÓ=Ó>€ñ ð ØðØ5ðØ7Oðàðà)ðà+AðàCXðð ðð 2ðð 4@ðð BQðð Sdðð ð	ð !ð	ð #2ð	ð 4Dð	ð FSð	ð Udð	ð
 ðð
 ðð
 !/ðð
 1<ðð
 >Hðð
 JVðð
 Xcðð ðð (ðð *Bðð DPðð Rdðð ðð ðð )ðð +<ðð >Qðð Sgðð ðð *ðð ,Cðð E]ðð ðð +ðð -=ðð ?Xðð ðð 0ðð 2Aðð C^ðð ðð *ðð ,Aðð CQðð Saðð cnðð p|ðð ðð )ðð +;ðð =Oðð Q_ðð ðð %ðð '?ðð AMðð O^ðð `lðð ðð +ðð  ð!ð" ð#ó €ñ( ˜™7Ð#@À!ÓDÓEÐ Ø×Ò×-Ò-Ð:KÐ`iÐ-Ój€Ø ‡ƒÑGÔ Hð HS×G]ÓG]Ø+°TôH;Ð ó ;ð 4?×3IÓ3IÐJeÐoqÔ3rÐ Ó rð �zŠz€Ø�ZŠZ€„
÷ñ ñ "Ñ"6¸ÓEÐ ñ (Ó)Ð õ÷"w#ñ w#õt8õJõ
Sõ=ñ �S™)Ð$>ÁÁhÃÓPÓQ€Ø€ñ ˜3¡	Ð*JÈCÓ PÓQÐ Ù # C©Ð3XÐZhÓ)iÓ jÐ õ8ð ‡ƒÐ"Ô #Ù Ô õ	õ'ò
õò*	\õ'ð ×Òò¸e÷ ó ðõB÷ 'ð 'õlôjÐ/ô jõñ4 $'£5Ð Ó (òóD )Ð õ9õõ$7õPõ@÷(Cð C÷9ð 9õ <à × Ó Ñ;Ñ=sÙMÙGôIñ $'£5Ð Ó (Ø!ŸšÓ(Ð ð
 Ð õ,õ'ò^ÉYË[÷ ^ð ^õ&õ õ JõEõ!÷HBð Bõ	õ;÷9ð 9õ
õõ
=õ"ð4 %*Ð !Ø13Ð .Ø./Ð +õ8÷ð õfõõ,õ
õhòÐ[]÷ ð õ>'õ_÷Vð Võõ	?ð €àÐ àŸ:›:ØˆuØð !ð'#ó $Ð ö.ð4 Ð ð #%Ð ð &(Ð "à%)§Z£ZØˆuØñ >ð1@ó &AÐ "ð .0Ð Ó /Ø(Ÿ~š~Ó/Ð ÷'8÷TMò M÷<÷/ñ0 XÐ ÷X÷}÷/O÷d	ð 	ñ Ó5Ó6Ñ ÙÓ6Ó7�ñ !Ó!mÓnÑ á‰‰t‘T™6¡4©±±c¸5Á%ÈÑPWÐY^Ñ`dÐfkð�÷-ð -÷.1ð 1÷hð ÷&ð &÷*ð ð Ñ ÷Hð H÷ð ÷ pð p÷Að Añ Ðbf÷ ò ÷"^ó ^÷Bð ÷Fð F÷2ð 2÷ið iöD õ ÷1ð 1ðp $Ÿ.š.Ó*Ñ Ø(*Ñ Ó *÷ð ÷ð ÷ð ÷(ð ÷#ð #÷$'ð $'ôNi÷&ð &ôñ6©v÷ 6ò 6ñ`¨S÷ `ò `ð —>’>Ó#Ñ Ù›5�Ó  Ù ¡%©±¹¹uÁfÉfÑV[Ñ]bÐcÑ ð0Ù" 1¢c¨"¯*ª*¯.ª.Ñ9YÓ*Z×*sÐ*sÒ^aÑbrÓ^sÓ&tÓuÑ÷
ð ÷,&ð &ñ &Ñ ÷"ð "÷
'ð 'ô÷ð ñ #Ñ ÷@ð @÷
ð 
ñ  'LÑ #Ø#$Ñ  ð ×Ò�÷ó ÷:ð ð& —>’>Ó#Ñ ð �ð Ñ àÑ ÷ð ÷@ð @ñ +4ó 5ó +Ñ ó ñ
 ,5±jÁ&Ð5IÓ+JÑ Ó Jñ
 ÑQÙÑSÙÑ}ÙÑOð	Ñ ÷Jð J÷ð ð �÷ GÑ F÷
 1Ñ 0÷j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ jõ jð4WÙðWÙ%ðWáðWá(ðWá*<ðWá>NðWáPdðWáfsðWñ ðWñ *ðWñ ,:ðWñ <RðWñ ð	Wñ *ð	Wñ ,<ð	Wñ >Tð	Wñ Vdð	Wñ fsð	Wñ
 ðWñ
  .ðWñ
 0>ðWñ
 @PðWñ ðWñ /ðWñ 1@ðWñ BQðWñ ðWñ +ðWñ -;ðWñ =ZðWñ \mðWñ o~ðWñ ðWñ %ðWñ '4ðWñ 6GðWñ IaðWñ ðWñ 1ðWñ 3AðWñ CUðWñ WjðWñ  ðWñ "2ðWñ 4JðWñ L_ðWñ ðWñ $ðWñ &=ðWñ ?VóW�Bñ ‡K‚K�—’˜HÕ%Ö&ñWó ÷kA $×#Ð#ûñZ9 	‘:Ðô 0Ù/Ôð0ús$   Æ0l á
*l4 á5l4 ì l1	ì4mím