+
    lHàjü ã                   ó~  € R t ^ RIt^RIHtHt ]! 4       t]P                  t]P                  tR t	]	! R 4      t
]	! R 4      tRR/R R	 l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 tR R ltR tR R ltER€R R lltRRRRRR/R  R! llt^ R"IHt ]! ]4      tR# R$ ltR% R& ltR' R( ltR) tR* R+ lt R, R- lt!R. R/ lt"R0RR1RR2R3/R4 R5 llt#R6 t$ER€R7 R8 llt%ER�R: R; llt&R< R= lt'R> R? lt(R@ER‚RARRBRCRDR/RE RF llt)RG RH lt*RI RJ lt+RKR/RL RM llt,]! RN4      RO RP l4       t-]! RQ4      RR RS l4       t-RT RU lt.RV RW lt/]! RX4      ]! RYRRZ7      R[ R\ l4       4       t-]! R]4      R^ R_ l4       t-]! R`4      Ra Rb l4       t-]! Rc4      ]Rd Re l4       4       t- ! Rf Rg4      t0Rh Ri lt1Rj Rk lt2Rl Rm lt3Rn Ro lt4Rp Rq lt5Rr Rs lt6Rt Ru lt7Rv Rw lt8Rx Ry lt9RzER‚R{RR|RR}RR~RRR€R�RR‚RRƒR/	R„ R… llt:R† R‡ lt;Rˆ R‰ lt<RŠ R‹ lt=RŒ R� lt>]! RŽ4      R� R� l4       t-]! R‘4      R’ R“ l4       t-]! R”4      R• R– l4       t-]! R—4      R˜ R™ l4       t-]! Rš4      R› Rœ l4       t-]! R�4      Rž RŸ l4       t-R  R¡ lt?]! R¢4      ]! R£R3RZ7      R¤ R¥ l4       4       t-]! R¦4      R§ R¨ l4       t-]! R©4      Rª R« l4       t-]! R¬4      R­ R® l4       t-]! R¯4      ]R° R± l4       4       t-]! R²4      R³ R´ l4       t-]! Rµ4      ]! R£R3RZ7      R¶ R· l4       4       t-]! R¸4      R¹ Rº l4       t-]! R»4      R¼ R½ l4       t-]! R¾4      R¿ RÀ l4       t-RÁR/t@]#! RÂ]@RÃ7      RÄ RÅ l4       t-]#! RÆ]@RÃ7      RÇ RÈ l4       t-RÉ RÊ ltA]#! RË]@RÃ7      RÌ RÍ l4       t-]#! RÎRÁRRÏRRÐ. /RÃ7      RÑ RÒ l4       t-]#! RÓR3RÔ7      RÕ RÖ l4       t-]#! R×R3RÔ7      RØ RÙ l4       t-RÚ RÛ ltBRÜ RÝ ltC]#! RÞR3RÔ7      Rß Rà l4       t-]#! RáR3RÔ7      Râ Rã l4       t-]#! RäR3Rå Ræ7      Rç Rè l4       t-]#! Ré4      Rê Rë l4       t-]#! Rì4      Rí Rî l4       t-]! Rï4      Rð Rñ l4       t-]#! RòRRóRRô. /Rõ7      Rö R÷ l4       t-Rø Rù ltD]#! RúRRû7      Rü Rý l4       t-]#! RþRRû7      Rÿ ER  l4       t-ER ER ltE]! ER4      ER ER l4       t-]E! ERERERER	ER
R3RóR/4       ]E! ERERERERER
R3ERRERER/4       ]! ER4      ER ER l4       t-ERRERRERR9ERR/ER ER lltF]F! ERER ER ERER7       ]F! ERER  4       ]F! ER!ER" ER# ER$R3ER%7       ]F! ER&ER' ER( ER)R3ER%7       ]F! ER*ER+ ER, ER-ER.ER/7       ER0 ER1 ltG]F! ER2]GER3ER4 ER57       ]F! ER6ER7 ER8 ER9ER7       ]! ER:4      ER; ER< l4       t-ER= ER> ltHER? ER@ ltI]! ERA4      ERB ERC l4       t-]! ERD4      ERE ERF l4       t-]! ERGR3ERH7      ERI ERJ l4       t-ERK ERL ltJERM ERN ltKERO ERP ltL]! ERQ4      ]ERR ERS l4       4       t-]! ERTR3ERH7      ERU ERV l4       t-]! ERW4      ERX ERY l4       t-]! ERZR3ERH7      ER[ ER\ l4       t-]! ER]R3ERH7      ER^ ER_ l4       t-]! ER`4      ERa ERb l4       t-]! ERc4      ERd ERe l4       t-]! ERf4      ERg ERh l4       t-]! ERi4      ERj ERk l4       t-ERl ERm ltM]! ERn4      ERo ERp l4       t-]! ERq4      ERr ERs l4       t-]! ERt4      ERu ERv l4       t-]! ERw4      ERx ERy l4       t-]! ERz4      ER{ ER| l4       t-ER} ER~ ltNR# (ƒ  aO  Session / delegation / spawn-tree / billing / pet JSON-RPC handlers.

Bodies are rebound onto server.py's globals at install time (method_ctx.py), so they use server
helpers (``_sessions``, ``_ok``, ``_err``, ...) bare; module-level helpers are published onto
server.py the same way (tests monkeypatching ``server.X`` still intercept).N)ÚHandlerRegistryÚbind_modulec                ó   a € V 3R lpV# )ui   Resolve ``params.session_id`` via ``resolve`` (a lambda â€” decoration precedes bind_module) â†’ 3rd arg.c                 ó   <a € R  V V3R llpV# )c                ó0   € V ^8„  d   QhR\         R\         /# ©é   ÚparamsÚreturn©Údict)Úformats   "Ú@/home/ubuntu/.hermes/hermes-agent/tui_gateway/methods_session.pyÚ__annotate__Ú0_session_arg.<locals>.deco.<locals>.__annotate__   s   € ÷ 	3ñ 	3¤ð 	3¬$ñ 	3ó    c                 ó>   <€ S! W4      w  r#T;'       g
    S! WV4      # ©N© )Úridr	   ÚsessionÚerrÚfnÚresolves   &&  €€r   ÚhandlerÚ+_session_arg.<locals>.deco.<locals>.handler   s$   ø€ Ù" 6Ó/‰LˆGØ×2Ð2™"˜S¨'Ó2Ð2r   r   )r   r   r   s   f €r   ÚdecoÚ_session_arg.<locals>.deco   s   ù€ ÷	3ñ 	3ð ˆr   r   )r   r   s   f r   Ú_session_argr      s   ø€ õð
 €Kr   c                 ó   € \        W4      # r   )Ú_sess_nowait©r	   r   s   &&r   Ú<lambda>r"      s	   € ´¸fÔ1Jr   c                 ó   € \        W4      # r   )Ú_sessr!   s   &&r   r"   r"      s	   € ´e¸FÔ6Hr   ÚliveFc                ó0   € V ^8„  d   QhR\         R\        /# )r   Únamer%   ©ÚstrÚbool)r   s   "r   r   r      s   € ÷ Xñ Xœ#ð X¬ñ Xr   c               ó   a a€ VV 3R l# )z_``@method(name)`` over ``_with_live_session`` (waits for the agent build) or ``_with_session``.c                 óV   <€ \        S4      ! S'       d   \        M\        ! V 4      4      # r   )ÚmethodÚ_with_live_sessionÚ_with_session)r   r%   r'   s   &€€r   r"   Ú!_session_method.<locals>.<lambda>!   s   ø€ ”f˜T”l¿$Õ$6ÄMÐ$QÐSUÓ#VÔWr   r   )r'   r%   s   fdr   Ú_session_methodr1      s	   ù€ åWÐWr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚcodeÚsession_scoped)Úintr*   )r   s   "r   r   r   $   s   € ÷ 	ñ 	”3ð 	¬4ñ 	r   c               ó   a a€ V V3R lpV# )un   Append a db arg â€” the session's db (after ``_with_session``) or ``_profile_db(params)``; ``code`` when None.c                 óF   <a € R  VV V3R llpS'       d   \        V4      # T# )c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   Ú,_with_db.<locals>.deco.<locals>.__annotate__'   s   € ÷ 	5ñ 	5¤ð 	5´Dñ 	5r   c                 óê   <€ S'       d   \        V^ ,          4      M
\        V4      ;_uu_ 4       pVf   \        V SR7      uuRRR4       # S! W.VOVN5!  uuRRR4       #   + '       g   i     R# ; i)é    N©r3   )Ú_session_dbÚ_profile_dbÚ_db_unavailable_error)r   r	   r   Údbr3   r   r4   s   &&* €€€r   r   Ú'_with_db.<locals>.deco.<locals>.handler'   s]   ø€ ß-;”+˜g a�jÔ)ÄÈVÓAT×TÐTÐY[Ø’:Ü0°¸4Ô@÷ UÒTñ ˜#Ð4¨Ð4°Ó4÷ U×T×TÓTús   ¯A!ÁA!Á!A2	)r/   )r   r   r3   r4   s   f €€r   r   Ú_with_db.<locals>.deco&   s!   ù€ ÷	5ò 	5÷
 *8Œ}˜WÓ%ÐD¸WÐDr   r   )r3   r4   r   s   fd r   Ú_with_dbrC   $   s   ù€ öEð €Kr   Ú c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# ©r   r	   ÚkeyÚdefaultr
   ©r   r)   )r   s   "r   r   r   0   s(   € ÷ 9ñ 9”tð 9¤#ð 9´ð 9¼Sñ 9r   c                óz   € \        V P                  V4      ;'       g    R4      P                  4       ;'       g    T# )zI``str(params[key]).strip()`` with ``default`` for missing / falsy values.rD   )r)   ÚgetÚstrip©r	   rG   rH   s   &&&r   Ú
_str_paramrN   0   s.   € äˆv�z‰z˜#‹×$Ð$ "Ó%×+Ñ+Ó-×8Ð8°Ð8r   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r	   r'   r
   )r   r)   r*   )r   s   "r   r   r   5   s!   € ÷ 4ñ 4”$ð 4œcð 4¤dñ 4r   c                 ó8   € \        V P                  VR 4      4      # )F)Úis_truthy_valuerK   )r	   r'   s   &&r   Ú_flagrR   5   s   € Ü˜6Ÿ:™: d¨EÓ2Ó3Ð3r   c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# rF   )r   r)   r5   )r   s   "r   r   r   9   s(   € ÷ ñ ”tð ¤#ð ´ð ¼ñ r   c                ój   €  \        V P                  W4      4      #   \        \        3 d    Tu # i ; i)zF``int(params[key])`` with ``default`` for missing / unparsable values.)r5   rK   Ú	TypeErrorÚ
ValueErrorrM   s   &&&r   Ú
_int_paramrW   9   s4   € ðÜ�6—:‘:˜cÓ+Ó,Ð,øÜ”zÐ"ô ØŠðús   ‚ œ2±2c                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# r   )r   Útupler)   )r   s   "r   r   r   A   s&   € ÷ _ñ _œTð _¤e¬C´¨H¥oñ _r   c                óŠ   € \         P                  4       P                  R,          \        \	        V R4      ;'       g    R4      3# )zPFresh runtime sid + resolved DB ``source`` for a session minted from ``params``.ºNé   NÚsourceN)ÚuuidÚuuid4ÚhexÚ_resolve_session_sourcerN   ©r	   s   &r   Ú_new_runtime_idsrc   A   s4   € ä�:‰:‹<×Ñ˜BÕÔ!8¼ÀFÈHÓ9U×9]Ð9]ÐY]Ó!^Ð^Ð^r   c                óL   € \        RV '       d   \        V 4      /4      # R/4      # )as  Bind HERMES_HOME + secret + terminal scope for an agent build: the same composition a turn
binds (``_session_profile_runtime_scope``). Home alone leaves ``get_secret()`` on the LAUNCH
``.env``; home + secrets alone leaves ``_make_agent``'s terminal probing on the launch process's
ambient ``TERMINAL_*`` (a ``terminal.backend: docker`` secondary built a ``local`` agent).Úprofile_homeN)Ú_session_profile_runtime_scoper)   ©re   s   &r   Ú_profile_build_scoperh   F   s(   € ô
 *¨>×P\¼3¸|Ó;LÐ*gÓhÐhÐbfÐ*gÓhÐhr   c                ó0   € V ^8„  d   QhR\         R\         /# )r   ÚsidrG   ©r)   )r   s   "r   r   r   N   s   € ÷ 'ñ '¤ð '¬#ñ 'r   c                óŒ   € \        WP                  R4      R7      p \        W3RV/VB \        V4       #   \        T4       i ; i)zO``_make_agent`` with the session context bound for the build and cleared after.Úcwd_override)ÚcwdÚ
session_id)Ú_set_session_contextrK   Ú_make_agentÚ_clear_session_context)rj   rG   ÚkwargsÚtokenss   &&, r   Ú_make_agent_in_contextru   N   s>   € ä! #¯:©:°nÓ+EÔF€Fð'Ü˜3Ñ>°Ð>°vÑ>ä˜vÕ&øÔ˜vÕ&ús	   �6 ¶Ac                ój   € V '       d!   ^ RI Hp V! \        V 4      R,          4      R3# \        4       R3# )z]``(db, owns)``: a DEDICATED handle on ``profile_home``'s state.db, else the shared launch db.©Úacquirezstate.dbTF)Úhermes_state_registryrx   ÚPathÚ_get_db)re   rx   s   & r   Ú_profile_session_dbr|   W   s/   € çÝ1Ù”t˜LÓ)¨JÕ6Ó7¸Ð=Ð=Ü‹9�eÐÐr   c                ó   € V ^8„  d   QhRR/# ©r   r
   Nr   )r   s   "r   r   r   _   s   € ÷ ñ �tñ r   c                 ó    € \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! V 4       RRR4       R#   + '       g   i     R# ; i)r;   )Úrelease_or_closeN)Ú
contextlibÚsuppressÚ	Exceptionry   r€   )r@   r€   s   & r   Ú_release_dbr„   _   s-   € Ü	×	Ò	œY×	'Õ	'Ý:Ù˜Ô÷ 
(×	'×	'Ò	'ús	   £<¼A	c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   r   rn   r
   rI   )r   s   "r   r   r   e   s!   € ÷ :ñ :”tð :¤#ð :´tñ :r   c           
     ó¦   € V P                  R4      ;pe   \        W04      # RTRVf   \        P                  V4      MTR\	        V4      RRR\
        /# )zHsession.info after a cwd change: the full agent view, or the lazy shape.Úagentrn   ÚbranchÚprojectÚlazyTÚdesktop_contract)rK   Ú_session_infoÚ	git_proberˆ   Ú_project_info_for_cwdÚDESKTOP_BACKEND_CONTRACT)r   rn   rˆ   r‡   s   &&& r   Ú	_cwd_infor�   e   sZ   € à—‘˜WÓ%Ð%ˆÒ2Ü˜UÓ,Ð,Ø�3˜¸6º>¤)×"2Ñ"2°3Ô"7ÈvØÔ,¨SÓ1°6¸4ØÔ 8ð:ð :r   Útip_rowÚresolved_idr@   c                óJ   € V ^8„  d   QhR\         R\         R,          R\         /# )r   Úrowr‘   Nr
   r   )r   s   "r   r   r   n   s+   € ÷ pñ pœdð p´°tµð pÔbfñ pr   c               ó¶  € T;'       g    T pRV R,          /Vf   / MRV/CRV P                  R4      ;'       g    RRVP                  R4      ;'       g    RRV P                  R4      ;'       g    ^ RVP                  R4      ;'       g    ^ RV P                  R4      ;'       g    RR	V P                  R	4      /CVf   / C# \        Y2f
   V R,          MT4      C# )
z”Compact session.list row; ``tip_row``/``resolved_id`` come from the compression tip.
``db`` adds ``live_message_count`` (see ``_live_count_field``).Úidr’   ÚtitlerD   ÚpreviewÚ
started_atÚmessage_countr]   Ú_lineage_root_id)rK   Ú_live_count_field)r”   r‘   r’   r@   s   &$$$r   Ú_session_row_summaryr�   n   sï   € ð �nˆn˜€GØ�#�d•)ð p kÒ&9¡ÀÈ{Ð?[ð pØ�S—W‘W˜WÓ%×+Ð+¨¨Y¸¿¹ÀIÓ8N×8TÐ8TÐRTØ˜#Ÿ'™' ,Ó/×4Ð4°1°oÀwÇ{Á{ÐSbÓGc×GhÐGhÐghØ�c—g‘g˜hÓ'×-Ð-¨2ð  §¡Ð(:Ó ;ñpð ’Zˆrðpð pô &7°rÒH[¸3¸t¾9ÐalÓ%mðpð pr   )ÚINTERNAL_LISTING_SOURCESc                ó0   € V ^8„  d   QhR\         R\        /# ©r   r”   r
   ©r   r*   )r   s   "r   r   r   „   s   € ÷ Nñ Nœð N¤ñ Nr   c                 ó~   € V P                  R 4      ;'       g    RP                  4       P                  4       \        9   # )r]   rD   ©rK   rL   ÚlowerÚ_LISTING_DENY_SOURCES)r”   s   &r   Ú_denied_sourcer¦   „   s1   € Ø�G‰G�HÓ×#Ð# ×*Ñ*Ó,×2Ñ2Ó4Ô8MÑMÐMr   c                ó0   € V ^8„  d   QhR\         R\        /# r    r¡   )r   s   "r   r   r   ˆ   s   € ÷ Bñ B¤Dð B¬Tñ Br   c                óœ   € V P                  R4      ;'       g    RP                  4       P                  4       pV\        9   ;'       g    VR8H  # )a—  ``_denied_source`` plus ``source='unknown'``: auto-resume must never land on a
token-accounting guard placeholder (#54320). The guard mints those rows when legacy
message rows lack a ``sessions`` row, and such a placeholder can outrank the session
the user actually opened. Human-facing listings keep showing them (they may be a
real session awaiting repair); only the pick-a-session-for-me paths skip them.r]   rD   Úunknownr£   )r”   r]   s   & r   Ú_auto_resume_denied_sourcerª   ˆ   sE   € ð �g‰g�hÓ×%Ð% 2×,Ñ,Ó.×4Ñ4Ó6€FØÔ*Ñ*×AÐA¨f¸	Ñ.AÐAr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úlimitr
   )r5   Úlist)r   s   "r   r   r   ’   s   € ÷ <ñ <œSð <¬tñ <r   c                óŠ   € V P                   ! RRRRVRRRR/VB pV Uu. uF  p\        V4      '       d   K  VNK  	  up# u upi )zPHuman-facing ``list_sessions_rich`` rows (most recent first), deny-list applied.r]   Nr¬   Úorder_by_last_activeTÚcompact_rowsr   )Úlist_sessions_richr¦   )r@   r¬   rs   Úrowsr”   s   &&,  r   Ú_listing_rowsr³   ’   sM   € à× Ò Ñr¨Ðr°EÐrÐPTÐrÐcgÐrÐkqÑr€DÙÓ;™4�C¤~°c×':�CˆC™4Ñ;Ð;ùÒ;s
   ŸA ·A c                óð   €  \         ;_uu_ 4        \        \        P                  4       4      R3uuRRR4       #   + '       g   i     R# ; i  \         d   pR\        T RRT 24      3u Rp?# Rp?ii ; i)u^   ``(list(_sessions.items()), None)`` under the lock, or ``(None, 5036 error)`` â€” fail CLOSED.Né¬  z%could not enumerate active sessions: )Ú_sessions_lockr­   Ú	_sessionsÚitemsrƒ   Ú_err)r   Úes   & r   Ú_snapshot_sessionsr»   ˜   sZ   € ðRßŽ^Üœ	Ÿ™Ó)Ó*¨DÐ0÷ �^�^‹^ûäô RØ”T˜#˜tÐ'LÈQÈCÐ%PÓQÐQÕQûðRús7   ‚A �:¯
A ºA	ÁA ÁA ÁA5ÁA0Á*A5Á0A5c                ó$   € V ^8„  d   QhR\         /# ©r   r
   r   )r   s   "r   r   r   ¡   s   € ÷ ñ œ$ñ r   c                 ó(  €  ^ RI Hp  V ! 4       p\        VP                  R4      \        4      '       d   VP                  R/ 4      M/ p\        VP                  R4      \        4      '       d   VP                  R/ 4      # / #   \
         d    / u # i ; i)z?``display.pet`` config block, ``{}`` when config is unreadable.)Úload_configÚdisplayÚpet)Úhermes_cli.configr¿   Ú
isinstancerK   r   rƒ   )r¿   ÚcfgrÀ   s      r   Ú_pet_display_cfgrÅ   ¡   sy   € ðÝ1Ù‹mˆÜ,6°s·w±w¸yÓ7IÌ4×,PÒ,P�#—'‘'˜) RÔ(ÐVXˆÜ)3°G·K±KÀÓ4FÌ×)MÒ)Mˆw�{‰{˜5 "Ó%ÐUÐSUÐUøÜô ØŠ	ðús   ‚A<B Á?B ÂBÂBc                ó@   € V ^8„  d   QhR\         R\        R\         RR/# )r   ÚeventÚpayloadÚwhatr
   N©r)   r   )r   s   "r   r   r   ¬   s(   € ÷ 6ñ 6”Sð 6¤4ð 6¬sð 6°tñ 6r   c                ó€   €  \        V RV4       R#   \         d"   p\        P                  RY#4        Rp?R# Rp?ii ; i)zJBest-effort progress emit: a transport hiccup must never abort generation.rD   z%s emit failed: %sN)Ú_emitrƒ   ÚloggerÚdebug)rÇ   rÈ   rÉ   Úexcs   &&& r   Ú	_pet_emitrÐ   ¬   s5   € ð6Üˆe�R˜Ö!øÜô 6Ü�‰Ð)¨4×5Ò5ûð6ús   ‚ ‘=œ8¸=c                óH   € V ^8„  d   QhR\         R\        R\         R\        /# )r   Útokenr3   Úmessager
   )r)   r5   r   )r   s   "r   r   r   ´   s(   € ÷ $ñ $œsð $¬#ð $¼ð $Äñ $r   c                ó0   € \        V4       \        WV4      # )z9Release the cancel arm for ``token`` and return ``_err``.)Ú_pet_cancel_releaser¹   )r   rÒ   r3   rÓ   s   &&&&r   Ú_pet_gen_abortrÖ   ´   s   € ä˜ÔÜ�˜7Ó#Ð#r   Ú	fail_openÚslugÚscopedTc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r'   rØ   rÙ   r(   )r   s   "r   r   r   º   s!   € ÷ ñ ”cð ´Dð Ì$ñ r   c               ó    a aaa€ VV VV3R lpV# )zÚ``@method`` (+ ``@_profile_scoped`` unless ``scoped=False``) whose exceptions never break the surface: logged
at debug, then ``fail_open`` (payload or ``params -> payload``) or ``_err(5031)``. ``slug``: 3rd arg (4004).c                 ón   <a € R  VV VV3R llp\        S4      ! S'       d   \        V4      4      # T4      # )c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   Ú/_pet_method.<locals>.deco.<locals>.__annotate__¾   s   € ÷ 		@ñ 		@¤ð 		@¬$ñ 		@r   c                 óz  <€  S'       d"   \        VR 4      ;p'       g   \        V RR4      # S'       d
   S! WX4      # S! W4      #   \         dk   p\        P	                  RST4       Se4   \        T \        S4      '       d	   S! T4      M
\        S4      4      u Rp?# \        T RS RT 24      u Rp?# Rp?ii ; i)rØ   é¤  zmissing slugz%s failed: %sNé§  z	 failed: )rN   r¹   rƒ   rÍ   rÎ   Ú_okÚcallabler   )r   r	   ÚvaluerÏ   r×   r   r'   rØ   s   &&  €€€€r   r   Ú*_pet_method.<locals>.deco.<locals>.handler¾   s«   ø€ ð@ß¬*°V¸VÓ*DÐ!D Ö!DÜ  T¨>Ó:Ð:ß15‘r˜# uÓ-ÐJ¹2¸c»?ÐJøÜô @Ü—‘˜_¨d°CÔ8ØÒ(Ü˜s¼À)×9LÒ9L¡I¨fÔ$5ÔRVÐW`ÓRaÓbÕbÜ˜C ¨$¨¨y¸¸Ð'>Ó?Õ?ûð	@ús>   ƒA ‹ A ¬A ´A ½A ÁB:ÁAB5ÂB:ÂB5Â/B:Â5B:)r-   Ú_profile_scoped)r   r   r×   r'   rÙ   rØ   s   f €€€€r   r   Ú_pet_method.<locals>.deco½   s/   ù€ ÷		@ó 		@ô �dŒ|¿œO¨GÓ4ÓLÐLÀGÓLÐLr   r   )r'   r×   rØ   rÙ   r   s   fddd r   Ú_pet_methodrè   º   s   û€ ÷Mð Mð €Kr   c                 ób   € \        4       w  rpV '       d   Ve   VP                  '       g   R# W3# )zO``(pet, scale)`` when the pet display is enabled and the pet exists, else None.N)Ú_pet_active_selectionÚexists)ÚenabledrÁ   Úscales      r   Ú_active_petrî   Ì   s*   € ä/Ó1Ñ€G�%ß #¢+°S·Z·Z°Zˆ4ÐQÀcÀ\ÐQr   c                ó>   € V ^8„  d   QhR\         R,          R\         /# )r   ÚextraNr
   r   )r   s   "r   r   r   Ò   s"   € ÷ _ñ _¤$¨¥+ð _¼ñ _r   c                ó  € ^ RI Hp  \        W! 4       4      #   T d.   p\        T / \        T4      CT;'       g    / C4      u Rp?# Rp?i\         d2   p\        T RRRRR\        T4      /T;'       g    / C4      u Rp?# Rp?ii ; i)um   Portal call â†’ ok; BillingError â†’ serialized envelope, else generic; ``extra`` rides both ERROR envelopes.)ÚBillingErrorNÚokFÚerrorrÓ   )Úhermes_cli.nous_billingrò   râ   Ú_serialize_billing_errorrƒ   r)   )r   r   rð   rò   rÏ   s   &&&  r   Ú_billing_callr÷   Ò   s†   € å4ð_Ü�3˜›‹~ÐøØô LÜ�3ÐJÔ3°CÓ8ÐJ¸U¿[¸[ÀbÐJÓKÕKûÜô _Ü�3˜˜u g¨w¸	Ä3ÀsÃ8Ð]ÐPU×P[ÐP[ÐY[Ð]Ó^Õ^ûð_ús2   ˆ ˜BŸ"AÁBÁBÁBÁ&BÁ;BÂBÚinvalid_requestc                ó<   € V ^8„  d   QhR\         R\         R\        /# )r   rÓ   rô   r
   rÊ   )r   s   "r   r   r   Ý   s&   € ÷ Gñ G¤3ð G¬sð GÌ4ñ Gr   c           	      ó&   € \        V R RRVRV/4      # )ró   Frô   rÓ   )râ   )r   rÓ   rô   s   &&&r   Ú_billing_invalidrû   Ý   s   € Üˆs�T˜5 '¨5°)¸WÐEÓFÐFr   c                ó0   € V ^8„  d   QhR\         R\         /# ©r   Úresultr
   r   )r   s   "r   r   r   á   s   € ÷ Qñ Qœ$ð Q¬Tñ Qr   c           	     ó|   € RR/VP                  4        UUu/ uF  w  r#W P                  V4      bK  	  uppC# u uppi )zD``{"ok": True, <snake>: result[<camel>], ...}`` in ``fields`` order.ró   T)r¸   rK   )rþ   ÚfieldsrG   Úsrcs   &,  r   Ú_billing_pickr  á   s7   € à�$ÐPÀÇÁÄÔOÁ±H°C˜3§
¡
¨3£Ò/ÁÒOÐPÐPùÓOs   —8c                ó0   € V ^8„  d   QhR\         R\         /# rý   r   )r   s   "r   r   r   æ   s   € ÷ Mñ M¤Dð M¬Tñ Mr   c                 ó0   € R RRV P                  R4      RV /# )ró   TrÓ   rÈ   ©rK   )rþ   s   &r   Ú_billing_pending_changer  æ   s   € Ø�$˜	 6§:¡:¨iÓ#8¸)ÀVÐLÐLr   Úcopy_fieldsÚ
compensateÚtitle_sourceÚuserÚuser_idc                óŠ   € V ^8„  d   QhR\         R\         R\         R\        R\         R\        R\         R\         R	,          R
R	/	# )r   Únew_keyÚ
parent_keyr—   ÚhistoryÚmodelr  r	  r  Nr
   )r)   r­   r*   )r   s   "r   r   r   ë   sT   € ÷ -ñ -¤ð -´#ð -¼cð -ÌDð -Üð-Ü<@ð-ÜX[ð-ä  4�Zð-à37ñ-r   c               óR  € ^ RI Hp ^ RIHp Rp V P	                  V4      ;'       g    / P                  R4      pT P                  YTRV/Y&Y|T;'       g    RR	7	        V UUu. uFR  pR
VP                  R
R4      RVP                  R4      /V	 Uu/ uF  pVVP                  V4      bK  	  upCV! V4      CNKT  	  pppV P                  VVRR7       VR8X  d   V P                  W4       MV P                  WVR7       V! VV4       R#   \         d    \        P                  RTRR7        Lôi ; iu upi u uppi   \         d_   p^ RIHp T
'       dK   T! T4      '       g=    T P                  T4       h   \         d    \        P                  RTRR7        h i ; ih Rp?ii ; i)ui  Branch child row + parent transcript (bounded-chunk transactions) + title. ``_branched_from`` keeps the
row visible in list_sessions_rich() (the live parent never matches the legacy end_reason='branched'
heuristic); NULL ``profile_name`` rows drop out of profile-keyed sidebar matching / deep links. ``compensate``
deletes a committed row whose transcript/title failed (a durable-but-empty row would defeat the INSERT OR
IGNORE first-prompt seed) â€” except on disk-full, where the delete cannot land. ``user_id`` is the creating
login: the child is a Desktop session too, and the row only records identity at insert.)Úmessage_identity)Úsync_flushed_message_markersNÚsystem_promptz/branch: parent system prompt read failed for %sT©Úexc_infoÚ_branched_from)r]   r  Úmodel_configÚparent_session_idrn   Úprofile_namer  r  Úroler
  Úcontentiô  )Ú
chunk_rows)r]   )Úis_disk_full_errorz-branch seed compensation delete failed for %s)Úagent.message_metadatar  Úagent.transcript_repairr  Úget_sessionrK   rƒ   rÍ   rÎ   Úcreate_sessionÚappend_messages_batchÚset_session_titleÚset_auto_titleÚhermes_state_errorsr  Údiscard_unadmitted_session)r@   r  r  r—   r  r]   rn   r  r  r  r  r	  r  r  r  Úparent_promptÚmsgÚfieldr²   rÏ   r  s   &&&&&$$$$$$$$        r   Ú_persist_branchr+  ë   sÍ  € õ 8ÝDð €MðcØŸ™¨
Ó3×9Ð9°r×>Ñ>¸ÓOˆð ×Ñ�g°EÐIYÐ[eÐHfØ(2È,Ø$1×$9Ð$9°Tð ô ;ðñ jqôrÙipÐbeð ˜Ÿ™ ¨Ó0°)¸S¿W¹WÀYÓ=Oð ^Ù7BÓC±{¨e�E˜3Ÿ7™7 5›>Ò)±{ÑCð^ÙGWÐX[ÓG\ó^Ùipð 	ñ rà
× Ñ  ¨$¸3Ð Ô?Ø˜6Ô!Ø× Ñ  Õ0à×Ñ˜g°\ÐÔBÙ$ W¨dÖ3øô) ô cÜ�‰ÐFÈ
Ð]aˆÖbðcüò Dùórøô ô Ý:ßÑ0°×5Ò5ðfØ×-Ñ-¨gÔ6ð 	øô ô fÜ—‘ÐLÈgÐ`d�ÕeØðfúàûðúsw   �D	 ¨D	 ÁD= Á#-D7ÂD2Â+D7Â;AD= Ä	#D/Ä.D/Ä2D7Ä7D= Ä=F&ÅF!Å%E7Å6F!Å7#FÆF!ÆFÆF!Æ!F&c          
      óT   € V ^8„  d   QhR\         R\        R\        R\        R\        /# )r   ÚrecordrG   r  r  r]   )r   r)   r­   )r   s   "r   r   r     s0   € ÷ &ñ &œTð &¬ð &Äð &Ìdð &Ô\_ñ &r   c                óÈ  €  \        V 4      ;_uu_ 4       pVf    RRR4       R# \        YaT\        Wb4      TT\        V 4      '       d   RMV R,          \	        V4      ;'       g    \        4       \        V 4      ^ ,          RR\        V 4      R7       RV R&   RV R&   RRR4       R#   + '       g   i     R# ; i  \         d    \        P                  RTRR	7        R# i ; i)
u(  Persist a seeded desktop branch child NOW (the one session.create exception to lazy rows): the
renderer's post-create resume re-fetches it via REST/defer_history, so an unpersisted child 404s and
the fail-latch spins forever. Best-effort â€” on failure the lazy first-prompt path is the fallback.Nrn   TÚderived)r]   rn   r  r  r  r	  r  Úpending_titleÚ_branch_seed_persistedzJseeded-branch persistence failed for %s; falling back to lazy row creationr  )r=   r+  Ú_branch_titleÚ_is_remote_launch_cwdÚprofile_name_for_homeÚ_current_profile_nameÚ_session_default_routeÚ_session_auth_user_idrƒ   rÍ   Úwarning)r-  rG   r  r  r]   re   r@   s   &&&&&& r   Ú_seed_branch_rowr9    sã   € ð&Ü˜× Ô  BØŠzØ÷ !Ñ ô ˜BÐ%6¼ÀbÓ8\Ð^eØ#)Ô7LÈV×7TÒ7T©tÐZ`ÐafÕZgÜ)>¸|Ó)L×)gÐ)gÔPeÓPgÜ"8¸Ó"@ÀÕ"CÐPTÐclô  wLð  MSó  wTõUð '+ˆF�?Ñ#à/3ˆFÐ+Ñ,÷ !× × Ò ûô ô &Ü�‰ÐcÐehØ $ð 	÷ 	&ð&ús>   ‚B: •B&›B: ¥?B&Á%7B&ÂB: Â&B7	Â1B: Â7B: Â:#C!Ã C!c                ó(   € V ^8„  d   QhR\         RR/# )r   r-  r
   Nr   )r   s   "r   r   r   /  s   € ÷ qñ q”dð q˜tñ qr   c           	     ó  € V P                  R4      p \        V 4      RJ d   R# \        V 4       V P                  R4      '       g_   \        P                  ! \        4      ;_uu_ 4        \        V 4      ;_uu_ 4       pVe   VP                  V4       RRR4       RRR4       R#  V P                  R4      ;p'       d?   \        V 4      ;_uu_ 4       pVe   VP                  W4      '       d   RV R&   RRR4       R# R#   \         d    \        P                  RTRR7        Lôi ; i  + '       g   i     L�; i  + '       g   i     R# ; i  + '       g   i     R# ; i  \         d    \        P                  R	TRR7        R# i ; i)
uô  Persist a parentless seeded session NOW, for the reason ``_seed_branch_row`` gives: seeded content is
intent, not an abandoned draft, and the renderer's post-create hydration reads the DB. The client's title
lands with the row so a restart before the first prompt keeps it. Best-effort â€” the first-prompt path is
the fallback, and it re-copies the WHOLE seed, so a partial copy is rolled back here (the compensation
``_persist_branch`` applies to branch children) rather than left to be duplicated.Úsession_keyFNzKseeded-session persistence failed for %s; falling back to lazy row creationTr  r1  r0  zDseeded-session title write failed for %s; pending_title stays queued)rK   Ú_ensure_session_db_rowÚ_persist_branch_seedrƒ   rÍ   r8  r�   r‚   r=   r'  r$  rÎ   )r-  rG   r@   r—   s   &   r   Ú	_seed_rowr?  /  sD  € ð �*‰*�]Ó
#€CðzÜ! &Ó)¨UÓ2ÙÜ˜VÔ$ð �:‰:Ð.×/Ò/Ü× Ò ¤×+Õ+¬[¸×-@Ô-@ÀBØŠ~Ø×-Ñ-¨cÔ2÷ .A×+ñ 	ðqØ—J‘J˜Ó/Ð/ˆ5Ö/Ü˜V×$Ô$¨Ø’> b×&:Ñ&:¸3×&FÒ&FØ.2�F˜?Ñ+÷ %Ñ$ñ 0øô ô zÜ�‰ÐdÐfiÐtxˆÖyðzú÷ .A×-@ú×+Ö+ñ 	ú÷ %×$Ð$ûô ô qÜ�‰Ð[Ð]`Ðkoˆ×pðqúsp   “C> ¤C> Á(D:Á<D'	ÂD:Â%E" Â>E" Ã!EÃ2E" Ã>#D$Ä#D$Ä'D7Ä2D:Ä:E	ÅE	ÅE" ÅE" Å"#F	ÆF	Úcopy_parent_historyc                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   r	   r@  r
   r¡   )r   s   "r   r   r   J  s,   € ÷ WDñ WD¤ð WD¼tð WDÔPTñ WDr   c               óê  € \        VP                  R4      ;'       g    RP                  4       ;'       g    R;p4      p^RIHp V! V\        V4      4      ;p'       d   \        V RJVP                  R4      V4      # \        VR4      ;'       g    RpVEe»   \        ;_uu_ 4        \        P                  4       p\        P                  4        U	U
Uu. uF  w  p	w  r«W‹,
          \        8”  g   K  V	NK  	  pp
p	pV F  p	\        P                  V	R4       K  	  \        P                  V4      pVEe   Vw  rê\        P                  V4      pVeå   Wè3\        V&   VR,          pVP                  R4      ;'       g    / p\        T R	VR
VR,          R\!        V4      /V'       d   RR/MR\#        VVP                  R4      R7      /CR/ \%        VV4      CR/ R/ RVR,          R\&        P)                  VR,          4      R\+        VR,          4      RRR\,        R\/        V4      /C/C4      uuRRR4       # \        P                  VR4       RRR4       \1        V4      \3        4       uw  ppp\5        VP                  R4      4      p\        VR4      ;'       g    RpV'       dƒ   V'       g   \        V RR4      # \7        V4      ;_uu_ 4       pVf   \9        V RR7      uuRRR4       #  VP;                  V4      w  p
p RRR4       \?        X4      pT'       g   \        T RR!4      # \A        VVV4      w  ppp\C        4        ^R"IH"p  V! V4      w  pppRp T'       dB   \K        TR$4      '       d0   \        T4      ;_uu_ 4        \M        4       w  p!p"RRR4       R%X!R&X"/p \        P                  4       p#\        ;_uu_ 4        / R'RbR(RbR)\N        PQ                  4       bR*. bR+\K        TR+4      bR,RbR-\S        TP                  R-^P4      4      bR.T#bR// bR0TbRTbR1\N        PU                  4       bR2^ bR3^ bR4\W        T4      bRTbR5Rb/ R6T#bRTbR7T bR8TbR9TbRTbR:\        TR;4      ;'       g    RbR<\K        TR=4      bR>\K        TR>4      bR$\K        TR$4      bRTe   \I        T4      MRbR?R@bRTbRA\Y        4       bRBTbRCRbRD\[        4       bCRE/ RF\]        4       ;'       g    \^        RG\a        \]        4       4      /C\        T&   \c        \        T,          4       Te   TT#3\        T&   RRR4       T'       dU   \d        Pg                  RHTTR%,          TP                  R&4      ;'       g    RI\i        \        T,          4      ^ ,          4       T'       d%   T'       d   \k        \        T,          TTTTT4       MET'       d   \m        \        T,          4       M&T'       d   T'       d   \o        \        T,          4       \q        T4       \s        4        \        T,          R,          p$T;'       g    / p\#        TTR7      p%\        T R	TR
TR\!        T%4      /T'       d   RR/MRT%/CR/ \%        \        T,          T4      CR/ R/ RT$R\&        P)                  T$4      R\+        T$4      RRR\,        R\/        T4      /C/C4      # u upp
p	i   + '       g   i     EL…; i  \<         d%   p\        T RR T 24      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     EL; i  \F         d!   p\        T R#\I        T4      4      u Rp?# Rp?ii ; i  + '       g   i     ELÇ; i  + '       g   i     ELD; i)KzŽ``session.create``; ``copy_parent_history`` (``session.branch_stored``) reads the parent's
transcript server-side and omits it from the reply.ÚprofilerD   N)Úmodel_override_conflictrÓ   Úidempotency_keyr  Úmodel_overridero   Ústored_session_idr<  rš   Úmessages_omittedTÚmessagesre   rg   ÚinfoÚtoolsÚskillsrn   rˆ   r‰   rŠ   r‹   r  r  i¨  z9parent_session_id is required when copying parent historyé�  r<   u   nothing to branch â€” zsend a message first)Úcreate_overridesé¢  Úfollow_profile_configr  Úproviderr‡   Úagent_errorÚagent_readyÚattached_imagesÚclose_on_disconnectÚactive_session_leaseÚcolsÚ
created_atÚedit_snapshotsÚexplicit_cwdÚhistory_lockÚhistory_versionÚimage_counterÚseededÚinflight_turnÚlast_activeÚcomposer_override_profileÚcreate_reasoning_overrideÚcreate_service_tier_overrider0  r—   Úpending_hiddenÚhiddenÚroom_plumbingÚrunningFÚshow_reasoningr]   Úslash_workerÚtool_progress_modeÚtool_started_atÚ	transportÚauth_user_idzTsession.create %s: model=%s provider=%s source=client override (profile default: %s)Ú-é¦€ÿÿ):Ú_profile_homerK   rL   Úmethods_session_model_guardrD  rh   r¹   ÚpoprN   r¶   ÚtimeÚ_idempotency_keysr¸   Ú_IDEMPOTENCY_KEY_TTLr·   râ   ÚlenÚ_history_to_messagesÚ_lazy_info_router�   rˆ   rŽ   r�   Ú_response_profile_namerc   Ú_new_session_keyÚ_coerce_seed_historyr>   r?   Úget_resume_conversationsrƒ   Ú_visible_branch_historyÚ_resolve_create_cwdÚ_enable_gateway_promptsrN  rV   r)   rR   Ú_config_model_targetÚ	threadingÚEventr5   ÚLockr*   Ú_load_show_reasoningÚ_load_tool_progress_modeÚcurrent_transportÚ_stdio_transportÚ_transport_auth_user_idÚ_register_session_cwdrÍ   rJ  r6  r9  r?  r=  Ú_schedule_agent_buildÚ!_schedule_session_cap_enforcement)&r   r	   r@  rC  re   rD  ÚconflictÚidem_keyÚ
now_for_gcÚkÚ_ÚtsÚexpiredÚexistingÚexisting_sidr   r  Úoverriderj   r]   rG   r  r@   Údisplay_historyrÏ   rZ  Úsession_cwdÚ
remote_cwdrN  Úsession_model_overriderb  rc  ra  Úprofile_modelÚprofile_providerÚnowrn   rI  s&   &&$                                   r   Ú_create_sessionr�  J  sK  € ô !¨V¯Z©Z¸	Ó-B×-HÐ-HÀb×,OÑ,OÓ,Q×,YÐ,YÐUYÐ!Y ÓZ€Lõ EÙ*¨6Ô3GÈÓ3UÓVÐV€xÖVÜ�C˜ §¡¨iÓ!8¸(ÓCÐCô ˜&Ð"3Ó4×<Ð<¸€HØÓßŽ^äŸ™›ˆJÜ+<×+BÑ+BÔ+DÕoÑ+D™Z˜Q¡ È
ÍÔZnÑHn—q�qÑ+DˆGÒoÛ�Ü!×%Ñ% a¨Ö.ñ ä(×,Ñ,¨XÓ6ˆHØÓ#Ø"*‘�Ü#Ÿ-™-¨Ó5�ØÒ&à3?Ð2LÔ% hÑ/Ø% iÕ0�GØ&Ÿ{™{Ð+;Ó<×BÐBÀ�Hô ˜sØ$ lÐ4GÈÐQ^ÕI_Ø'¬¨W«ð%S÷ :MÐ.°Ñ5Ø!+Ô-AÀ'ÐX_×XcÑXcÐdrÓXsÔ-tÐ uð	%Sð
 ð !RÔ#3°G¸XÓ#Fð !RÈÐQSÐU]Ð_aÐchÐjqÐrwÕjxð  {Cô  EN÷  EUñ  EUð  V]ð  ^cõ  Vdó  EeØ!*Ô,AÀ'È%Å.Ó,QÐSYÐ[_Ø!3Ô5MØ!/Ô1GÈÓ1Pñ!Rñ%Só T÷) Š^ô> "×%Ñ% h°Ô5÷? ô@ *¨&Ó1Ô3CÓ3EÐ�M€Sˆ&�3Ü" 6§:¡:¨jÓ#9Ó:€Gä" 6Ð+>Ó?×GÐGÀ4Ðßß Ü˜˜TÐ#^Ó_Ð_ô ˜× Ô  BØŠzÜ,¨S°tÔ<÷ !Ò ðGØ%'×%@Ñ%@ÐARÓ%SÑ"�‘?÷	 !ô *¨/Ó:ˆßÜ˜˜TÐ#9Ó:Ð:ô -@ÀÈÐP\Ó,]Ñ)€L�+˜zÜÔÝ=ð)ÙZjÐkqÓZrÑWÐÐ 9Ð;Wð !%Ðß¤%¨Ð0G×"HÒ"Hô " ,×/Õ/Ü.BÓ.DÑ+ˆMÐ+÷ 0à%,¨m¸ZÐIYÐ$ZÐ!Ü
�)‰)‹+€Cß	ŽðJØ�TðJØ(¨$ðJØ0=¼y¿¹Ó?PðJØRcÐegðJà!¤5¨Ð1FÓ#GðJð # DðJð ”C˜Ÿ
™
 6¨2Ó.Ó/ð	Jð 2>¸sð	Jð EUÐVXð	Jð
 ˜LðJð �wðJð !/´	·±Ó0@ðJð CTÐUVðJð YhÐijðJð ”d˜7“mðJð �;ðJð !0°ñJð 8EÀcðJð Ð4ðJð (Ð)BðJð (Ð)BðJð +Ð,HðJð  Ð!2ðJð 5DÄZÐPVÐX_ÓE`×EhÐEhÐdhðJð œe F¨HÓ5ðJð 8GÌÈfÐVeÓHfðJð $¤U¨6Ð3JÓ%KðJð  °Ò1IœC Ô-Ètð!Jð" �uð#Jð" ,¨Sð#Jð" 3CÔDXÓDZð#Jð" ]eÐflð#Jð$ ˜Dð%Jð$ #7Ô8PÓ8Rñ%Jð$ UfÐgiØÔ*Ó,×@Ð@Ô0@ØÔ3Ô4EÓ4GÓHñ)JŒ	�#‰ô* 	œi¨�nÔ-ØÒØ+.°¨*Ô˜hÑ'÷1 
÷2 ô 	�‰ÐjØÐ/°Õ8Ð:P×:TÑ:TÐU_Ó:`×:gÐ:gÐdgÜ*¬9°S­>Ó:¸1Õ=ô	?÷& ŸWÜœ 3�¨Ð.?ÀÈ&ÐR^Õ_ß	Ü”)˜C•.Õ!ß	Ÿ*ô 	œy¨�~Ô.ä˜#ÔÜ%Ô'Ü
�C�.˜Õ
€CØ%×+Ð+¨€HÜ# G¸,ÔG€HÜˆsØ�cÐ.°°_ÄcÈ(ÃmðCç)<Ð Ñ%À:ÈxÐBXðCð 	ð BÔ#¤I¨c¥N°HÓ=ð B¸wÈÈHÐVXÐZ_ÐadÐfnÔpy÷  qAñ  qAð  BEó  qFØÔ1°#Ó6¸ÀÐFXÔZrØÔ!7¸Ó!@ñBñCó Dð DùôA p÷ �^ˆ^ûô^ ô GÜ˜C Ð)?À¸uÐ'EÓFÔF÷ !Ò ûð
Gú÷ !× Ð ûô" ô )Ü�C˜œs 3›xÓ(Õ(ûð)ú÷ 0×/Ð/ú÷ 
�ˆúsŸ   Â%-[ÃZ>Ã/Z>Ã5B[Å:B.[È3[Ë
\Ë'[Í\ Î]Î?E']!Ú>[Û[	Û\Û$\Û3\Û4\Ü\Ü\Ü\	Ü]
Ü*]Ü?]
Ý]
Ý]	Ý!]2	zsession.createc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   å  s   € ÷ (ñ (”4ð (œDñ (r   c                 ó   € \        W4      # r   ©r�  ©r   r	   s   &&r   r�  r�  ä  s   € ä˜3Ó'Ð'r   zsession.branch_storedc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ê  s   € ÷ Bñ B”4ð BœDñ Br   c                ó   € \        WRR7      # )z¶Whole-session branch of a stored parent without routing its transcript through the client
(a distinct method so an older gateway answers "unknown method" instead of an empty branch).T)r@  r   r¡  s   &&r   r�  r�  é  s   € ô ˜3¸DÔAÐAr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   ro   r
   r(   )r   s   "r   r   r   ð  s   € ÷ ñ ¬3ð ´4ñ r   c           	     óJ  € \        V RR4      '       g   V P                  V4      # ^ RIHp  V! V P                  4      p TP                  T4      \        P                  ! \
        4      ;_uu_ 4        TP                  4        RRR4       #   \
         d'    \        P                  RT P                  RR7        R# i ; i  + '       g   i     # ; i  \        P                  ! \
        4      ;_uu_ 4        TP                  4        RRR4       i   + '       g   i     i ; i; i)z¹``unarchive_recoverable_session`` that works on a read-only listing handle (foreign profile):
the rare write escalates to a short-lived registry writer instead of writing on the reader.Ú	read_onlyFrw   z5Bot Chat unarchive skipped: writer unavailable for %sTr  N)ÚgetattrÚunarchive_recoverable_sessionry   rx   Údb_pathrƒ   rÍ   r8  r�   r‚   Úclose)r@   ro   rx   Úwdbs   &&  r   Ú_unarchive_recoverabler¬  ð  sÏ   € ô �2�{ E×*Ò*Ø×/Ñ/°
Ó;Ð;Ý-ðÙ�b—j‘jÓ!ˆðØ×0Ñ0°Ó<ä× Ò ¤×+Õ+Ø�I‰IŒK÷ ,Ð+øô ô Ü�‰ÐNÐPR×PZÑPZÐeiˆÔjÚðú÷ ,×+ûŒZ× Ò ¤×+Õ+Ø�I‰IŒK÷ ,×+×+Ð+ýs@   ¬B ¿C Á1B?Â-B<Â;B<Â?CÃ#D"Ã5D	Ä	D"ÄDÄD"c                ó0   € V ^8„  d   QhR\         R\        /# )r   Útitle_lookupr
   rÊ   )r   s   "r   r   r     s   € ÷ hñ h´#ð h¼$ñ hr   c                ó¾  € VP                  V4      pV'       dT   VP                  R4      '       d=   ^ RIHp W$8X  d1   \	        WR,          4      '       d   VP                  VR,          4      pV'       d)   VP                  R4      '       g   \        V4      '       d   \        V R. /4      # VR,          p\        P                  ! \        4      ;_uu_ 4        VP                  VR,          4      ;'       g
    VR,          pRRR4       WSR,          8w  d   VP                  V4      ;'       g    TMTp\        V R\        W6WQR7      ./4      #   + '       g   i     LT; i)a  EXACT-title lookup (title as identity), window-free on purpose (a busy profile's windowed listing can
push the row out). Hidden rows resolve (canonical chats are born hidden); archived / deny-listed do not;
lineages resolve to the live tip (``resolved_id``).Úarchived©ÚBOT_CHAT_TITLEr–   ÚsessionsN)r‘   r’   r@   )Úget_session_by_titlerK   Útools.bot_mode_prober²  r¬  r!  r¦   râ   r�   r‚   rƒ   Úget_compression_tipr�   )r   r@   r®  r”   r²  Útipr‘   s   &&&    r   Ú_session_list_by_titler¸    s
  € ð ×
!Ñ
! ,Ó
/€Cß
ˆs�w‰w�z×"Ò"Ý7ð Ô)Ô.DÀRÈTÍ×.SÒ.Sð —.‘.  T¥Ó+ˆCß�#—'‘'˜*×%Ò%¬¸×)<Ò)<Ü�3˜ RÐ(Ó)Ð)Ø
ˆd�)€CÜ	×	Ò	œY×	'Õ	'à×$Ñ$ S¨¥YÓ/×<Ð<°3°tµ9ˆ÷ 
(ð /2¸µYÔ.>ˆr�~‰~˜cÓ"×)Ð) cøÀC€GÜˆs�ZÔ"6°sÐY\Ô"dÐ!eÐfÓgÐg÷	 
(×	'ús   Ã*EÅE	zsession.listéŽ  )r4   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ 'ñ '”4ð '¤ñ 'r   c           
      ó$  €  \        VR 4      ;p'       d   \        WV4      # \        VP                  R^È4      ;'       g    ^È4      p^ RIHp ^ RIHp \        VRR4      p\        V4      ;'       d    V! V! V4      P                  4      p\        V\        V^,          ^È4      \        VR4      VR7      RV p	\        T RV	 U
u. uF  p
\        V
4      NK  	  up
/4      # u up
i   \          d!   p\#        T R	\%        T4      4      u Rp?# Rp?ii ; i)
r—   r¬   )rz   )Úshow_subagent_sessionsr©  NÚinclude_hidden)r½  Úinclude_subagentsr³  r¹  )rN   r¸  r5   rK   Úpathlibrz   Úhermes_cli.session_listingr¼  r§  r*   Úparentr³   ÚmaxrR   râ   r�   rƒ   r¹   r)   )r   r	   r@   r®  r¬   rz   r¼  r©  r¾  r²   Úsrº   s   &&&         r   r�  r�    sþ   € ð'Ü% f¨gÓ6Ð6ˆ<Ö6Ü)¨#°<Ó@Ð@Ü�F—J‘J˜w¨Ó,×3Ð3°Ó4ˆõ 	!åEô ˜"˜i¨Ó.ˆÜ  ›M×ZÐZÑ.DÁTÈ'Ã]×EYÑEYÓ.ZÐÜ˜R¤ U¨Q¥Y°Ó!4ÄUÈ6ÐScÓEdØ/@ôBØBHÀ5ðJˆô
 �3˜ÁtÓ%LÁtÀ!Ô&:¸1Ö&=ÁtÑ%LÐMÓNÐNùÒ%LøÜô 'Ü�C˜œs 1›vÓ&Õ&ûð'úsA   ‚C$ ¢C$ Á 1C$ Á2AC$ ÃCÃC$ ÃC$ Ã$DÃ/D
ÄDÄ
Dzsession.most_recentc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   9  s   € ÷ .ñ .”4ð .œDñ .r   c                óT  € \        V4      ;_uu_ 4       p Ve0   \        V^È4       Uu. uF  p\        V4      '       d   K  VNK  	  upM. pVR,           F{  p\        T RVP	                  R4      RVP	                  R4      ;'       g    RRVP	                  R4      ;'       g    ^ RVP	                  R4      ;'       g    R/4      u uuRRR4       # 	  \        V RR/4      uuRRR4       # u upi   \
         d    \        P                  R	4        L?i ; i  + '       g   i     R# ; i)
z«Most recent human-facing session, skipping auto-resume-denied rows (deny-list
plus ``source='unknown'`` guard placeholders, #54320); errors fold into ``session_id: null``.N:Né   Nro   r–   r—   rD   r™   r]   zsession.most_recent failed)r>   r³   rª   râ   rK   rƒ   rÍ   Ú	exception)r   r	   r@   r”   r²   s   &&   r   r�  r�  8  s   € ô 
�V×	Ô	 ð		;ð ’~ô %2°"°cÔ$:ó =Ñ$:˜SÜ6°s×;÷ �SÑ$:ò =à+-ð ð ˜B—x�x�Ü˜3 ¨s¯w©w°t«}¸gÀsÇwÁwÈwÓGW×G]ÐG]Ð[]Ø!-¨s¯w©w°|Ó/D×/IÐ/IÈÈ8ÐUX×U\ÑU\Ð]eÓUf×UlÐUlÐjlð!nó oñ o÷ 
Ò	ñ  ô
 �3˜ tÐ,Ó-÷ 
Ò	ùò=øô ô 	;Ü×ÑÐ9Ö:ð	;ú÷ 
×	Ð	ús^   ”D–C0¨C+Á C+ÁA C0ÂC0Â"C0Â=	C0ÃC0ÃDÃ+C0Ã0 DÄDÄDÄDÄD'	zproject.factsc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   K  s   € ÷ )ñ )”4ð )œDñ )r   c           	     ó¾   €  ^ RI Hp \        V RV! VP                  R4      4      /4      #   \         d'    \
        P                  R4       \        T RR/4      u # i ; i)z]The system prompt's coding-context detection for a cwd (UIs don't re-sniff); null = not code.)Úproject_facts_forÚfactsrn   zproject.facts failedN)Úagent.coding_contextrÊ  râ   rK   rƒ   rÍ   rÇ  )r   r	   rÊ  s   && r   r�  r�  J  sZ   € ð)Ý:Ü�3˜Ñ"3°F·J±J¸uÓ4EÓ"FÐGÓHÐHøÜô )Ü×ÑÐ/Ô0Ü�3˜ $˜Ó(Ò(ð)ús   ‚(+ «.AÁAzverification.statusc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   W  s   € ÷ 	Sñ 	S”4ð 	SœDñ 	Sr   c           
     ó  €  ^ RI Hp \        T RT! VP                  R4      ;'       g    VP                  R4      VP                  R4      R7      /4      #   \         d+    \
        P                  R4       \        T RRR	R
R//4      u # i ; i)z”Best known verification evidence for a cwd/session. Read-only: never runs checks,
never upgrades targeted evidence into a repository-wide guarantee.)Úverification_statusÚverificationro   r<  rn   )ro   rn   zverification.status failedÚstatusr©   ÚevidenceN)Úagent.verification_evidencerÏ  râ   rK   rƒ   rÍ   rÇ  )r   r	   rÏ  s   && r   r�  r�  U  s”   € ð
SÝCÜ�3˜Ñ)<Ø—z‘z ,Ó/×LÐL°6·:±:¸mÓ3LÐRX×R\ÑR\Ð]bÓRcô*eð fó gð 	gøäô SÜ×ÑÐ5Ô6Ü�3˜¨(°I¸zÈ4Ð)PÐQÓRÒRðSús   ‚&A ©+A Á2B
Â	B
c                   óØ   a € ] tR tRt o RtRtV 3R lR ltRV 3R lR lltRV 3R	 lR
 lltV 3R lR lt	R t
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )Ú_Resumeid  z¦Per-call ``session.resume`` state. ``owns_db``: the DEDICATED profile handle is ours
to close (handler ``finally``) until handed to the hydration worker or the agent.Tc                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   r	   Útargetr
   NrI   )r   Ú__classdict__s   "€r   r   Ú_Resume.__annotate__j  s'   ø€ ÷ ]ñ ]¡Dð ]±#ð ]¸$ñ ]r   c                óö  € WVuV n         V n        V n        R	w  V n        V n        V n        V n        \        VR^P4      V n        VP                  R4      ;'       g    RP                  4       ;'       g    R V n        \        V P                  4      V n        \        VR4      \        VR4      uV n        V n        \        VR4      \        VR4      uV n        V n        RV9  ;'       g    \        VR4      V n        R # )
NrD   rW  rC  rŠ   Údefer_historyÚomit_messagesÚeager_buildÚinline_images)NFNrD   )r   r	   r×  r@   Úowns_dbÚfoundÚprofile_resume_cwdrW   rW  rK   rL   rC  rp  re   rR   rŠ   rÛ  rÜ  rÝ  rÞ  )Úselfr   r	   r×  s   &&&&r   Ú__init__Ú_Resume.__init__j  sÔ   € Ø-0¸&Ð*ˆŒ�$”+˜tœ{ØEZÑBˆŒ�”˜tœz¨4Ô+BÜ˜v v¨rÓ2ˆŒ	àŸ
™
 9Ó-×3Ð3°×:Ñ:Ó<×DÐDÀˆŒÜ)¨$¯,©,Ó7ˆÔÜ(-¨f°fÓ(=¼uÀVÈ_Ó?]Ð%ˆŒ	�4Ô%ä/4°V¸_Ó/MÌuÐU[Ð]jÓOkÐ,ˆÔ˜DÔ,à,°FÑ:×\Ð\¼eÀFÈOÓ>\ˆÖr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   Úpromptsr
   )r*   rY   )r   rØ  s   "€r   r   rÙ  w  s   ø€ ÷ Gñ G™Dð G©Eñ Gr   c                ó–   € \        V P                  4      pV'       d   \        4        . VOV P                  ;'       g    \	        4       N5# )z```(runtime sid, source, cwd)`` for the live record this resume registers (+ gateway prompts on).)rc   r	   r  rá  Ú_default_session_cwd)râ  ræ  Úidss   && r   ÚmintÚ_Resume.mintw  s;   € ä˜tŸ{™{Ó+ˆßÜ#Ô%ØF�ÐF�T×,Ñ,×FÐFÔ0DÓ0FÑFÐFr   Nc          
      óF   <€ V ^8„  d   QhRS[ RS[ RS[RS[R,          RS[/# )r   r]   rn   r  Ú	overridesNr
   )r)   r­   r   )r   rØ  s   "€r   r   rÙ  ~  s5   ø€ ÷ ñ ™Sð ¡sð ±Tð ÁdÈTÅkð Ñfjñ r   c                óP  € Ves   TP                  VP                  R4      T;'       g    RR7       \        V P                  ;'       g    / P                  R4      RR7      p\	        V P                  4      pM/ Rrv\        V P                  3RV P                  R	VR
VRRRVR\        V P                  R4      RV P                  R\        V P                  4      /VB pV'       dD   TP                  RV'       d)   VP                  R4      '       d   VP                  R4      MRR7       V# )zÄ``_deferred_session_record`` with this resume's common fields (lease claimed lazily on turn 1);
``overrides`` restores the stored model/provider/reasoning/tier so the deferred build matches eager.NrF  )rF  Úresume_runtime_overridesr  T©ÚquietFrW  rn   r  Úleaser]   rU  re   rZ  ra  )rP  ra  )ÚupdaterK   Ú_parse_model_configrà  Ú_row_follows_profileÚ_deferred_session_recordr×  rW  rR   r	   re   r*   rá  )	râ  r]   rn   r  rí  rð   r  Úfollows_profiler-  s	   &&&&&,   r   r-  Ú_Resume.record~  s4  € ð Ò Ø�L‰L¨	¯©Ð6FÓ(GÐbk×bsÐbsÐosˆLÔtÜ.°·
±
×0@Ð0@¸b×/EÑ/EÀnÓ/UÐ]aÔbˆLÜ2°4·:±:Ó>‰Oà,.°˜/Ü)Ø�K‰KñaØ"Ÿi™iðaØ-0ðaØ:AðaØIMðaØV\ðaä % d§k¡kÐ3HÓ Iðað ×*Ñ*ðaô :>¸d×>UÑ>UÓ9Vðað [`ñaˆ÷ Ø�M‰M°ßAJÈyÏ}É}Ð]m×OnÒOn�× Ñ Ð!<Ô=Ðtxð ô {àˆr   c                ó:   <€ V ^8„  d   QhRS[ RS[RS[R,          /# )r   rj   r-  r
   NrÊ   )r   rØ  s   "€r   r   rÙ  �  s+   ø€ ÷ Iñ I™ð I¡dð I©t°d­{ñ Ir   c                óü   € \        WP                  VR4      ;pfP   V P                  '       d>   V P                  '       g,   \	        WP                  V P
                  V P                  4       Vf   R# \        V .VO5!  # )uÓ   Register ``record`` live under the resume lock, or reuse a concurrent winner's session; then repair a
named profile's ROW like the eager build's ``_init_session`` (#87584) â€” listings and later resumes read it.N)Ú_claim_or_reuse_liver×  re   rŠ   Ú_hydrate_session_cwdr@   Ú_resume_reuse_live)râ  rj   r-  r%   s   &&& r   ÚclaimÚ_Resume.claim�  sh   € ô )¨¯k©k¸6À4ÓHÐHˆDÒQÐVZ×Vg×VgÐVgÐpt×py×pyÐpyÜ  §k¡k°4·7±7¸D×<MÑ<MÔNØ’|ˆtÐHÔ);¸DÐ)HÀ4Ó)HÐHr   c                ó@   € V P                  4       w  r\        V4      W!3# )zT``(sanitized model history, display history, raw history)`` for a cold/eager resume.)Úread_historyÚcanonicalize_replay_history)râ  ÚrawrÀ   s   &  r   ÚrestoreÚ_Resume.restore—  s"   € à×(Ñ(Ó*‰ˆÜ*¨3Ó/°Ð=Ð=r   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   rn   rí  r
   rÊ   )r   rØ  s   "€r   r   rÙ  œ  s'   ø€ ÷ jñ j™ð j©ð j±ñ jr   c                óÈ   € \        YP                  R 4      ;'       g    / P                  R4      ;'       g    RVP                  R4      ;'       g    RV P                  R7      # )rF  r  rD   Úprovider_override)r  rQ  rC  )Ú_lazy_resume_inforK   rC  )râ  rn   rí  s   &&&r   rJ  Ú_Resume.infoœ  sZ   € Ü  ¯]©]Ð;KÓ-L×-RÐ-RÐPR×,WÑ,WÐX_Ó,`×,fÐ,fÐdfØ*3¯-©-Ð8KÓ*L×*RÐ*RÐPRÐ\`×\hÑ\hôjð 	jr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   Úrepairr
   )r*   r­   )r   rØ  s   "€r   r   rÙ     s   ø€ ÷ rñ r¡Dð r©Tñ rr   c                óR   € V P                   P                  V P                  VRR7      # )z>The child's OWN conversation (no ancestors), row ids included.T)Úrepair_alternationÚinclude_row_ids)r@   Úget_messages_as_conversationr×  )râ  r  s   &&r   Úchild_historyÚ_Resume.child_history   s$   € à�w‰w×3Ñ3°D·K±KÐTZÐlpÐ3ÓqÐqr   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   rÀ   r
   ©r­   )r   rØ  s   "€r   r   rÙ  ¤  s   ø€ ÷ Tñ T¡ð T©ñ Tr   c                ól   € V P                   '       d   . # \        WP                  V P                  R 7      # ))re   Ú
image_urls)rÜ  rw  re   rÞ  )râ  rÀ   s   &&r   rI  Ú_Resume.messages¤  s6   € Ø×'×'Ð'ˆrð 	TÔ-AØ×"3Ñ"3À×@RÑ@Rô.Tð 	Tr   c                ó    <€ V ^8„  d   QhRS[ /# r½   )rY   )r   rØ  s   "€r   r   rÙ  ¨  s   ø€ ÷ =ñ =™eñ =r   c                ó  € \        V P                  RR4      p\        V4      '       d   V! V P                  4       V P                  '       d   V P                  RR7      . 3# V P                  P                  V P                  4      # )ui  One lineage SELECT, two projections: model-fed copy alternation-repaired (healed once
here instead of every turn's pre-request repair), display copy verbatim.

Read-only mount: an ended row stays ended â€” resume must not clear ``ended_at``/``end_reason``
with no new activity, or the DB-derived liveness paints a finalized session live the moment
it is opened (#85303). The first real turn (``prompt.submit``) reopens it. Still read-only
for the session row, but NOT for stale queue residue: the restart that made this resume
necessary also discarded the busy-queue, so retire never-drained accept rows (#125577)
here â€” with #128508 the reopen no longer runs on this path and the marked row would stay
active and visible until the next send. Best-effort like the resume guard: a handle
without the method (duck-typed doubles) skips the cleanup, a real error still fails.Úretire_undrained_queue_rowsNT©r  )r§  r@   rã   r×  rÜ  r  r|  )râ  Úretires   & r   r  Ú_Resume.read_history¨  sl   € ô ˜Ÿ™Ð"?ÀÓFˆÜ�F×ÒÙ�4—;‘;ÔØ××ÐØ×%Ñ%¨TÐ%Ó2°BÐ6Ð6Ø�w‰w×/Ñ/°·±Ó<Ð<r   c                ó    <€ V ^8„  d   QhRS[ /# r½   r  )r   rØ  s   "€r   r   rÙ  »  s   ø€ ÷ ^ñ ^¡ñ ^r   c                ót   € V P                   '       d   . # V P                  P                  V P                  4      # )u_   Ancestor display rows (model-fed history drops a dangling tool-call tail â€” display keeps it).)rÜ  r@   Úget_ancestor_display_prefixr×  )râ  s   &r   Údisplay_prefixÚ_Resume.display_prefix»  s.   € à×'×'Ð'ˆrÐ]¨T¯W©W×-PÑ-PÐQU×Q\ÑQ\Ó-]Ð]r   )rW  r@   rÛ  rÝ  rà  rÞ  rŠ   rÜ  rß  r	   rC  re   rá  r   r×  )Tr   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rÞ  rã  rê  r-  rþ  r  rJ  r  rI  r  r!  Ú__static_attributes__Ú__classdictcell__)rØ  s   @r   rÕ  rÕ  d  s   ø‡ € ñYð €M÷]ð ]÷Gò G÷ò ÷$Ið Iò>÷
jð j÷rð r÷Tð T÷=ð =÷&^ö ^r   rÕ  c                ó0   € V ^8„  d   QhR\         R\         /# )r   Úneedler
   rk   )r   s   "r   r   r   À  s   € ÷ tñ t¤3ð t´ñ tr   c                óŒ   a a€ Ve   \        V4      MRo\        V V3R l\        \        P	                  4       4       4       R4      # )zXRuntime sid of a live, not-yet-persisted session matched by stored key or pending title.Nc              3   ó6  <"  € T FŽ  w  r\        V\        4      '       g   K  VP                  R 4      ;'       g    RS8X  g   K?  \        VP                  R4      ;'       g    R4      S8X  g#   VP                  R4      ;'       g    RS8X  g   KŠ  Vx € K�  	  R# 5i)re   Nr<  rD   r0  )rÃ   r   rK   r)   )Ú.0Úlive_sidr-  r+  Ú	want_homes   &  €€r   Ú	<genexpr>Ú)_find_live_unpersisted.<locals>.<genexpr>Ã  s„   øé € ð oÙ)@Ñ%�XÜ�fœd×#ô 	Ø)/¯©°NÓ)C×)KÐ)KÀtÐPYÑ(Yô 	ä�—‘˜MÓ*×0Ð0¨bÓ1°VÔ;ÀÇ
Á
È?Ó@[×@aÐ@aÐ_aÐflÑ?l÷ 	ŠÓ)@ùs'   ƒB¢BºBÁBÁ!#BÂBÂ
BrD   )r)   Únextr­   r·   r¸   )r+  Úhomer0  s   f&@r   Ú_find_live_unpersistedr5  À  sD   ù€ à!Ò-”�D”	°4€IÜõ oÜ)-¬i¯o©oÓ.?Ô)@óoð qsótð tr   c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r   Úctxr/  r%   r
   ©rÕ  r)   r   )r   s   "r   r   r   É  s.   € ÷ Bñ B¤'ð B´Sð BÄð BÌñ Br   c                ó˜  € V P                   '       d   \        V P                  4       \        ;_uu_ 4        \	        V P
                  W4      ;pe   VuuRRR4       # \        P                  4       VR&   \        4       ;peC   VP                  R\        P                  4       4      ;_uu_ 4        \        WV4       RRR4       M\        V4       RRR4       T P                  VP                  R4      ;'       g    . 4      p\        V4      w  rg\!        V P
                  \#        RTR\%        VP                  R4      ;'       g    R4      R	\'        V4      R
TRRTRTRRR\(        R\+        VP                  R4      4      ;'       g    \-        V P.                  4      //V4      4      #   + '       g   i     Lç; i  + '       g   i     Lò; i)a  Reattach a LIVE lazy session with no state.db row yet (every fresh Bot Chat; a 404 here killed messaging
for never-spoken bots). Attach the transport and cancel the armed orphan-reap Timer (a WS drop may have
sentinel-parked the record) or it fires against this client.Nr`  r[  r  ro   rG  r<  rD   rš   rI  rJ  r  rQ  rŠ   Tr‹   r  re   )rß  r„   r@   Ú_session_resume_lockÚ_reattach_refusalr   rs  r†  Ú
setdefaultr�  rƒ  Ú_rebind_live_transportÚ_cancel_ws_orphan_reaprI  rK   Ú_live_session_identityrâ   Ú_attach_todo_stater)   rv  r�   r4  ry  rC  )r7  r/  r%   Úrefusalrl  rI  r  rQ  s   &&&     r   Ú_resume_live_unpersistedrB  É  sy  € ð ‡{‡{€{Ü�C—F‘FÔß	Ö	Ü(¨¯©°(ÓAÐAˆGÒNØ÷ 
Ò	ô #Ÿi™i›kˆˆ]ÑÜ*Ó,Ð,ˆIÒ9Ø—‘ ´·±Ó1A×BÕBÜ& x°yÔA÷ CÐBô # 8Ô,÷ 
ð �|‰|˜DŸH™H YÓ/×5Ð5°2Ó6€Hô -¨TÓ2�O€EÜˆs�w‰wÔ*Ø�hÐ 3´S¸¿¹À-Ó9P×9VÐ9VÐTVÓ5WØœ˜X›¨
°HØ�˜% ¨X°v¸tØ#Ô%=ØÔ!6°t·x±xÀÓ7OÓ!P×!wÐ!wÔTjÐkn×kvÑkvÓTwðyð,zð
 |@óAó Bð B÷ C×Bú÷ 
×	ús*   ¶F9ÁAF9Â.F&	Â;F9Æ&F6Æ1F9Æ9G		c                ó(   € V ^8„  d   QhR\         RR/# ©r   r7  r
   N©rÕ  )r   s   "r   r   r   ä  s   € ÷ Pñ P¤ð P¨Dñ Pr   c           
     ó  €  \        4       pVe   VP                  V P                  4      MRpV'       d   VP                  R4      '       d   R# V P                  P                  WR,          4      pVP                  R4      '       dÔ   \        P                  RVR,          \        VP                  R4      ;'       g    . 4      \        VP                  R4      ;'       g    . 4      ,           V P                  ;'       g    R4       V P                  P                  VR,          4      V n
        V P                  '       d   V P                  R,          V n        R# R# R#   \         d%    \        P                  R	T P                  4        R# i ; i)
uÎ   Adopt a lineage stranded in the DEFAULT store (older builds ran a profile bot's turns on the focused
tile's backend; unadopted it 4001s forever). Exact-id ONLY â€” bot titles collide; never a retired donor.Nr°  r–   ÚadoptedzYadopted stranded session %s (lineage of %s segment(s)) from default store into profile %sÚimported_idsÚskipped_idsÚ?z'stranded-session adoption failed for %s)r{   r!  r×  rK   r@   Úadopt_session_lineage_fromrÍ   rJ  rv  rC  rà  rƒ   rÇ  )r7  Ú
default_dbÚ	donor_rowÚadoptions   &   r   Ú_resume_adopt_strandedrO  ä  s)  € ðPô “Yˆ
Ø:DÒ:P�J×*Ñ*¨3¯:©:Ô6ÐVZˆ	ß˜IŸM™M¨*×5Ò5ÙØ—6‘6×4Ñ4°ZÈ4ÅÓQˆØ�<‰<˜	×"Ò"Ü�K‰KÐsØ! $�Ü˜HŸL™L¨Ó8×>Ð>¸BÓ?Ä#ÀhÇlÁlÐS`ÓFa×FgÐFgÐegÓBhÕhØŸ™×*Ð* sô,ð Ÿ™×*Ñ*¨9°T­?Ó;ˆCŒIØ�y�yˆyØ ŸY™Y t�_�–
ñ ñ #øô ô PÜ×ÑÐBÀCÇJÁJ×OðPús5   ‚2E µE ÁA-E Â<"E ÃE Ã>?E Ä>E Å+FÆ
Fc                ó(   € V ^8„  d   QhR\         RR/# rD  rE  )r   s   "r   r   r     s   € ÷ ^ñ ^¤Gð ^°ñ ^r   c           	     ó  €  V P                   P                  V P                  \        \	        V P
                  R4      ;'       g    R4      \        4       \        V P                  4      ;'       g    \        V P                  4      R7       V P                   P                  V P                  4      V n        \        P                  RV P                  4       R#   \         d'    \        P!                  RT P                  RR7        R# i ; i)u  Row for a minted-but-never-persisted key (#96793): adopt the id, not 4007.

``session.create`` mints the stored key but intentionally writes no state.db row
until the first prompt (no "Untitled" litter). If the backend dies in that window,
the key exists client-side (pinned tile, stored id) but has no row anywhere â€” and
after a restart the in-memory live-lazy lookup above can't find it either, so the
resume 4007ed forever. When the target is a well-formed server-minted key, mint
the row here and let the normal resume path continue with empty history. Abandoned
drafts still leave no row: nothing is written until a client explicitly resumes
the exact key. ``create_session`` is an upsert, so a concurrently persisted row is
not clobbered (only its NULL model/source columns would fill in).
r]   N)r]   r  r  zSmaterialized session row for minted-but-unpersisted key %s (resume no longer 4007s)z(failed to materialize session row for %sTr  )r@   r"  r×  ra   rN   r	   Ú_resolve_modelr4  re   ry  rC  r!  rà  rÍ   rJ  rƒ   r8  )r7  s   &r   Ú_resume_materialize_mintedrS    sÇ   € ð^Ø�‰×ÑØ�J‰JÜ*¬:°c·j±jÀ(Ó+K×+SÐ+SÈtÓTÜ Ó"Ü.¨s×/?Ñ/?Ó@×gÐgÔDZÐ[^×[fÑ[fÓDgð	 	ô 	
ð —F‘F×&Ñ& s§z¡zÓ2ˆŒ	Ü�‰ØaØ�J‰Jö	
øô ô ^Ü�‰ÐAÀ3Ç:Á:ÐX\ˆ×]ð^ús   ‚AC Á*C Á/A%C Ã-DÄDc                ó>   € V ^8„  d   QhR\         R\        R,          /# rD  ©rÕ  r   )r   s   "r   r   r     s"   € ÷ Kñ Kœð K¤D¨4¥Kñ Kr   c                ó¤  € V P                   P                  V P                  4      V n        V P                  '       d   R# V P                   P	                  V P                  4      V n        V P                  '       d   V P                  R,          V n        R# V P
                  '       d0   \        V P                  V P                  4      '       d
   / V n        R# \        V P                  V P                  4      pV'       d   \        P                  V4      MR;pe   \        WV4      # V P                  '       d   \        V 4       V P                  '       gT   V P
                  '       gB   \        V P                  4      '       d'   \        V P                  4      '       g   \!        V 4       V P                  '       d   R# \#        V P$                  RR4      # )zTResolve ``ctx.target`` to a stored row (``ctx.found``); a dict is an early response.Nr–   é§  úsession not found)r@   r!  r×  rà  r´  rŠ   Ú_child_run_activere   r5  r·   rK   rB  rß  rO  Ú_is_server_minted_keyÚ_any_live_session_claims_keyrS  r¹   r   )r7  r/  r%   s   &  r   Ú_resume_locater\    s-  € à—‘×"Ñ" 3§:¡:Ó.€C„IØ
‡y‡y€yÙØ—‘×+Ñ+¨C¯J©JÓ7€C„IØ
‡y‡y€yØ—Y‘Y˜t•_ˆŒ
ÙØ
‡x‡x€xÔ% c§j¡j°#×2BÑ2B×CÒCð ˆŒ	ÙÜ% c§j¡j°#×2BÑ2BÓC€Hß+3”	—‘˜hÔ'¸Ð=ˆÒJÜ'¨°tÓ<Ð<Ø
‡{‡{€{Ü˜sÔ#Ø�9�9ˆ9˜SŸXŸX˜XÔ*?ÀÇ
Á
×*KÒ*KÜ0°·±×<Ò<Ü" 3Ô'Ø—9—9�9ˆ4ÐJ¤$ s§w¡w°Ð6IÓ"JÐJr   c                ó(   € V ^8„  d   QhR\         RR/# rD  rE  )r   s   "r   r   r   7  s   € ÷ 9ñ 9œGð 9¨ñ 9r   c                óÌ  € V P                   '       d   V P                  '       d   R# T P                  p\        P                  ! \
        4      ;_uu_ 4        ^ RIHp V P                   P                  R4      ;'       g    RP                  4       V8X  d;   V P                  P                  V P                  4      ;'       g    V P                  pM%V P                  P                  V P                  4      pRRR4       V'       dO   WP                  8w  d=   Wn        V P                  P                  V4      ;'       g    V P                   V n         R# R# R#   + '       g   i     Lh; i)zïRebind a rotated-out parent id to its compression tip (resuming the original reloads the parent
transcript and loses the post-compression reply). Skipped for lazy watch windows (exact child); Bot Chat
follows proven compression edges only.Nr±  r—   rD   )rà  rŠ   r×  r�   r‚   rƒ   rµ  r²  rK   rL   r@   r¶  Úresolve_resume_session_idr!  )r7  r·  r²  s   &  r   Ú_resume_follow_tipr`  7  sá   € ð �9�9ˆ9˜ŸŸ˜ÙØ
�*‰*€CÜ	×	Ò	œY×	'Õ	'Ý7Ø�I‰I�M‰M˜'Ó"×(Ð( b×/Ñ/Ó1°^ÔCØ—&‘&×,Ñ,¨S¯Z©ZÓ8×FÐF¸C¿J¹J‰Cà—&‘&×2Ñ2°3·:±:Ó>ˆC÷ 
(÷ ˆs—j‘jÔ ØŒ
Ø—F‘F×&Ñ& sÓ+×8Ð8¨s¯y©yˆŽ	ñ !�s÷ 
(×	'ús   ÁA*EÃ 3EÅE#	c                ó>   € V ^8„  d   QhR\         R\        R,          /# rD  rU  )r   s   "r   r   r   I  s   € ÷ ñ ”wð ¤4¨$¥;ñ r   c                ó(  € ^ RI Hp V! V P                  V P                  4      ;pe   \	        V P
                  RV4      # ^ RIHpHp V P                  ;'       g:    V P                  ;'       g&    V P                  ;'       d    V P                  '       * p \        \        V P                  RR4      ;p4      '       d"   T! V P                  3/ V'       d   RR/M/ B  R# V! 4       ;p'       d=   \        V P                   P#                  R4      ;'       g    ^ 4      ;q‡8”  d	   V! W‡4      hR#   T d+   p	\	        T P
                  R	\%        T	4      4      u Rp	?	# Rp	?	i\&         d-   p	\(        P+                  R
T P                  T	4        Rp	?	R# Rp	?	ii ; i)uÛ  Refuse a runaway transcript before any history read (sessions.max_resume_messages). Deferred /
omit_messages / lazy paths load the TIP segment only and are guarded tip-only (a lineage count rejected
exactly the well-compressed chats). Metadata fallback for lightweight adaptor DBs; fails OPEN on errors.

Kanban worker transcripts refuse FIRST and fail CLOSED on a positive match (#68779): a
resumed Desktop/TUI session would be a write-capable writer with none of the dispatcher
ownership env, invisible to the board while a re-dispatch can start a competing writer
in the same workspace. One guard for every resume shape below (cold / eager / deferred /
lazy / live-reuse) â€” no slash worker is ever built for a refused session.)Úkanban_resume_refusalNi$  )ÚSessionResumeTooLargeErrorÚresolved_max_resume_messagesÚassert_resume_safeÚtip_onlyTrš   i"  z@resume safety check failed for %s (proceeding without guard): %s)Úhermes_cli.kanban_resume_guardrc  r@   r×  r¹   r   Úhermes_staterd  re  rŠ   rÜ  rÛ  rÝ  rã   r§  r5   rà  rK   r)   rƒ   rÍ   r8  )
r7  rc  Úkanban_refusalrd  re  rg  Úsafety_checkr¬   ÚnrÏ   s
   &         r   Ú_resume_guardrm  I  sH  € õ EÙ/°·±¸¿
¹
ÓCÐCˆÒPÜ�C—G‘G˜T >Ó2Ð2ßUØ�x‰x×[Ð[˜3×,Ñ,×[Ð[°×1BÑ1B×1ZÐ1ZÈ3Ï?É?ÔGZ€HðlÜ¤G¨C¯F©FÐ4HÈ$Ó$OÐO�L×PÒPÙ˜Ÿ™ÑP¿h¨°TÑ(:ÈBÒPñ ñ 4Ó5Ð5ˆeÖ5ÄÀSÇYÁYÇ]Á]ÐSbÓEc×EhÐEhÐghÓAiÐ<i¸AÔ;rÙ,¨QÓ6Ð6ñ
 øð	 &ô -Ü�C—G‘G˜T¤3 s£8Ó,Õ,ûÜô lÜ�‰ÐYÐ[^×[eÑ[eÐgj×kÐkÙûðlúsH   Â>D+ ÃD+ ÃD+ Ã-&D+ ÄD+ Ä+FÄ2EÅFÅFÅ$FÅ%!FÆFc                óH   € V ^8„  d   QhR\         R\        R\        R\        /# ©r   r7  rj   r   r
   r8  )r   s   "r   r   r   d  s(   € ÷ <ñ <œGð <¬#ð <¼ð <Äñ <r   c                ót   € \         ;_uu_ 4        \        WV4      uuRRR4       #   + '       g   i     R# ; i)a  Reattach an already-live session under the resume lock (held across the client-gone check,
transport attach and reap cancel so grace expiry is atomic). _live_session_payload ATTACHES this
caller alongside the client(s) already streaming instead of taking the slot from them.N)r:  Ú_resume_reuse_live_locked)r7  rj   r   s   &&&r   rý  rý  d  s#   € ÷ 
Ö	Ü(¨°7Ó;÷ 
×	×	Ó	ús   �&¦7	c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# ro  r8  )r   s   "r   r   r   l  s(   € ÷ !ñ !¤7ð !´ð !¼tð !Ìñ !r   c           
     óŠ  € \        V P                  W4      ;pe   V# \        V4       \        YV P                  RV P
                  \        4       ;'       g    \        V P                  R7      pV P                  VR&   V P                  '       dV   TP                  . \        VP                  R4      4      \        VP                  R4      ;'       g
    VR,          4      R7       VP                  R4      f:   \        V P                  V P                   4      '       d   VP                  RR	R
7       \#        V P                  V4      # )zPReuse with _session_resume_lock already held (including the eager double-check).T)rW  ÚtouchrÜ  rl  rÞ  ÚresumedÚresume_hydratingÚresume_message_countrš   )rI  Ú	hydratingrš   r‡   Ú	streaming)rg  rÑ  )r;  r   r>  Ú_live_session_payloadrW  rÜ  r†  r‡  rÞ  r×  rÛ  ró  r*   rK   r5   rY  re   râ   )r7  rj   r   rA  rÈ   s   &&&  r   rq  rq  l  s  € ä$ S§W¡W¨cÓ;Ð;ˆÒHØˆÜ˜3ÔÜ# C°s·x±xÀtÐ[^×[lÑ[lÜ.?Ó.A×.UÐ.UÔEUØ25×2CÑ2CôE€Gð Ÿ™€GˆIÑØ
××ÐØ�‰ ¬d°7·;±;Ð?QÓ3RÓ.SÜ%(¨¯©Ð5KÓ)L×)hÐ)hÐPWÐXgÕPhÓ%ið 	ô 	kð ‡{�{�7ÓÒ#Ô(9¸#¿*¹*Àc×FVÑFV×(WÒ(WØ�‰˜t¨KˆÔ8Üˆs�w‰w˜Ó Ð r   rÀ   Úcount_sourcerI  rš   rg  rÑ  Úidlerx  r™   Úauto_continuec                óà   € V ^8„  d   QhR\         R\        R\        R\        R\        R\        R,          R\        R,          R	\        R,          R
\
        R\        R\
        R,          R\        /# )r   r7  rj   r-  rJ  rÀ   r{  NrI  rš   rg  rÑ  rx  r
   )rÕ  r)   r   r­   r5   r*   )r   s   "r   r   r   ~  s„   € ÷ =ñ =Ü	ð=Üð=Ü$(ð=Ü37ð=ÜBFð=Ü[_ÐbfÕ[fð=ä�T�kð=ä14°tµð=äMQð=ô ð=ô &*¨D¥[ð=ô 
ñ	=r   c       
        óp  € Vf   V P                  V4      pVf)   V P                  '       d   \        V4      M
\        V4      pRVRV P                  RVRV/V
f   RV P                  /MRV
/CRTR	RR
TRV P                  RVf
   VR,          MTRV	/CpVe   WÍR&   \	        V P
                  \        WÒ4      4      # )zcCommon resume payload; omit_messages counts ``count_source`` (client still learns the stored size).Nro   ru  rš   rI  rH  rx  rJ  Úinflightrg  r<  r™   rX  rÑ  r}  )rI  rÜ  rv  r×  râ   r   r@  )r7  rj   r-  rJ  rÀ   r{  rI  rš   rg  rÑ  rx  r™   r}  rÈ   s   &&&$$$$$$$$$$ r   Ú_resume_responser�  ~  s×   € ð ÒØ—<‘< Ó(ˆØÒØ-0×->×->Ð->œ˜LÔ)ÄCÈÃMˆØ˜S )¨S¯Z©Z¸È-ÐYcÐemð kØ=FÒ=NÐ% s×'8Ñ'8Ñ9ÐU`ÐbkÐTlðkà�t˜Z¨¨y¸'À=ÐRU×R\ÑR\Ø°ZÒ5G˜V LÖ1ÈZÐYaÐciñk€Gð Ò Ø#0�Ñ Üˆs�w‰wÔ*¨7Ó;Ó<Ð<r   c                ó0   € V ^8„  d   QhR\         R\        /# ©r   r7  r
   rU  )r   s   "r   r   r   ‘  s   € ÷ nñ n”gð n¤$ñ nr   c                óÂ  € V P                  RR7      w  rp \        V P                  RR4      p\        V4      '       d   V! V P                  4       V P                  RR7      pT P                  Y#TR\        T4      R7      pT P                  Y4      ;pe   T# \        T P                  T P                  4      p	Tp
 T P                  RR7      p
\#        YT\%        Y0P&                  R7      T
Y©T	'       d   RR7      # RR7      #   \         d+   p\        T P                  R\        T4      4      u Rp?# Rp?ii ; i  \         d    \        P!                  R	RR
7        L�i ; i)uÇ   Lazy/watch resume (desktop subagent windows): a live session WITHOUT an agent â€” the child runs
inside the parent's turn, so the window needs stored history + a transport; prompt.submit upgrades it.F)ræ  r  NTr  éˆ  )rŠ   Ú
todo_statez*child-watch display projection read failedr  )rC  ry  r|  )rJ  rÀ   r{  rg  rÑ  )rê  r§  r@   rã   r×  r  rƒ   r¹   r   Úresume_failed_messager-  Ú_todo_state_from_historyrþ  rY  re   rÍ   rÎ   r�  r	  rC  )r7  rj   r]   rn   r  r  rº   r-  Úreusedrg  rÀ   s   &          r   Ú_resume_lazyrŠ  ‘  sV  € ð —x‘x¨�xÓ.Ñ€C�ð=ô
 ˜Ÿ™Ð!>ÀÓEˆÜ�F×ÒÙ�3—:‘:Ôà×#Ñ#¨4Ð#Ó0ˆð �Z‰Z˜ W°4ÔD\Ð]dÓDeˆZÓf€FØ—)‘)˜CÓ(Ð(ˆÒ5Øˆä §
¡
¨C×,<Ñ,<Ó=€Gð €GðRØ×#Ñ#¨5Ð#Ó1ˆô ˜C fÔ3DÀS×R]ÑR]Ô3^ÐhoØ)0×Y`È+ônð nØflônð nøô ô =Ü�C—G‘G˜TÔ#8¸Ó#;Ó<Õ<ûð=ûô ô RÜ�‰ÐAÈDˆÖQðRús0   —AD Â;D9 ÄD6ÄD1Ä+D6Ä1D6Ä9"EÅEc                ó0   € V ^8„  d   QhR\         R\        /# rƒ  rU  )r   s   "r   r   r   ±  s   € ÷ mñ mœ'ð m¤dñ mr   c                óö  € V P                  4       w  rp\        V P                  4      ;_uu_ 4        \        V P                  4      pRRR4       V P                  W#. X\        V P                  V P                  4      R7      pTP                  \        P                  4       R\        V P                  P                  R4      ;'       g    ^ 4      R7       V P                  W4      ;pe   V# \        YP                  V P                  V P                   VR8H  ;'       d    V P"                  R7       RV n        \%        4        \'        WWPP)                  W44      . VR	,          R
RR7      #   + '       g   i     EL); i)zbBounded ack; the transcript hydrates in the background (the ONE history read) and pages over REST.N)r†  Trš   )Úresume_history_readyrv  rw  Údesktop)Úclose_dbÚmodel_history_onlyFrw  Úresuming)rJ  rI  rš   rÑ  rx  )rê  rh   re   Ú!_stored_session_runtime_overridesrà  r-  Ú_todo_state_from_dbr@   r×  ró  r�  r‚  r5   rK   rþ  Ú_schedule_resume_hydrationrß  rÜ  r‹  r�  rJ  )r7  rj   r]   rn   rí  r-  r‰  s   &      r   Ú_resume_deferredr•  ±  s0  € à—x‘x“zÑ€C�Ü	˜c×.Ñ.×	/Õ	/Ü5°c·i±iÓ@ˆ	÷ 
0à�Z‰Z˜ R¨Ü#6°s·v±v¸s¿z¹zÓ#Jð ó L€Fà
‡M�M¤y§¡Ó'8È4Ü'*¨3¯9©9¯=©=¸Ó+I×+NÐ+NÈQÓ'Oð ô Qà—)‘)˜CÓ(Ð(ˆÒ5ØˆäØ�Z‰Z˜Ÿ™¨#¯+©+Ø! YÑ.×DÐD°3×3DÑ3DõFð €C„KÜ%Ô'Ü˜C f·8±8¸CÓ3KÐVXØ*0Ð1GÕ*HÐQ[Ðgkômð m÷ 
0×	/Ð	/ús   ±E'Å'E8	c                ó0   € V ^8„  d   QhR\         R\        /# rƒ  rU  )r   s   "r   r   r   Æ  s   € ÷ bñ b”gð b¤$ñ br   c                ót  € V P                  4       w  rp V P                  4       w  rEp\        T P                  4      ;_uu_ 4        \        T P                  4      pRRR4       T P                  Y#TXT P                  4       \        T4      R7      p	T P                  Y4      ;p
e   T
# \        T4       \        4        \!        YY�P#                  Y84      TT\%        YT P&                  4      R7      #   \         d+   p\        T P                  R\        T4      4      u Rp?# Rp?ii ; i  + '       g   i     LÔ; i)u(  Default cold resume: transcript now, agent OFF the response path (_make_agent can block for seconds;
callers await this RPC before painting) â€” pre-warmed on a timer, _sess() builds on demand if the first
prompt beats it. Unlike lazy, restores full ancestor history + persisted runtime identity.r…  N)Údisplay_history_prefixr†  )rJ  rÀ   r{  r}  )rê  r  rƒ   r¹   r   r‡  rh   re   r’  rà  r-  r!  rˆ  rþ  rŠ  r‹  r�  rJ  Ú_maybe_schedule_auto_continuer×  )r7  rj   r]   rn   r  r–  Úraw_historyrº   rí  r-  r‰  s   &          r   Ú_resume_coldr›  Æ  s	  € ð —x‘x“zÑ€C�ð=Ø03·±³Ñ-ˆ +ô 
˜c×.Ñ.×	/Õ	/Ü5°c·i±iÓ@ˆ	÷ 
0à�Z‰Z˜ W¨iÐPS×PbÑPbÓPdÜ#;¸GÓ#Dð ó F€Fà—)‘)˜CÓ(Ð(ˆÒ5ØˆÜ˜#ÔÜ%Ô'Ü˜C f·8±8¸CÓ3KÐUdØ)4Ü*GÈÐUX×U_ÑU_Ó*`ôbð bøô ô =Ü�C—G‘G˜TÔ#8¸Ó#;Ó<Õ<ûð=úç	/×	/ús)   •C/ ÁD'Ã/D$Ã:DÄD$ÄD$Ä'D7	c                ó0   € V ^8„  d   QhR\         R\        /# rƒ  rU  )r   s   "r   r   r   Ü  s   € ÷ :dñ :d”wð :d¤4ñ :dr   c                ót	  € V P                  4       w  rp\        V P                  4      ;_uu_ 4         V P                  4       w  rEpV P	                  4       p\        V P                  4      p\        WP                  3RV P                  RTRV P                  ;'       g    RRV\        9   ;'       d    V P                  '       * R\        \        4       4      /VB p	 RRR4       \$        ;_uu_ 4        \'        T P                  T P                  4      pTeS   \(        P*                  ! \        4      ;_uu_ 4        X	P-                  4        RRR4       \/        T .TO5!  uuRRR4       #  \        T P                  4      ;_uu_ 4        \1        YP                  X	XT P2                  T P                  T P                  Y P                  \5        T P                  4      R7
       T P6                  '       d   \9        Y�P                  4       R	T n        RRR4       \:        P=                  T4      ;peÌ   XP=                  R
4      e   TR
,          TR
&   \?        T P                  P=                  R4      RR7      p\A        T P                  4      '       d3   RTR&   TP=                  R
4      '       d   TP=                  R4      MRTR&   T P                  e   \C        T P                  4      TR&   TPE                  XRR7       \:        P=                  T4      ;'       g    / pRRR4       \K        YX\M        X	T4      XX\O        TP=                  R4      ;'       g    \P        PQ                  4       4      T'       d   \S        YT P                  4      R7      # RR7      #   \         d5   p
\        T P                   R\#        T
4      4      u Rp
?
uuRRR4       # Rp
?
ii ; i  + '       g   i     EL; i  + '       g   i     EL©; i  + '       g   i     ELù; i  \         dˆ   p
T P6                  '       dB   \F        ;_uu_ 4        \:        PI                  TR4       RRR4       M  + '       g   i     M; i\        T P                   R\#        T
4      4      u Rp
?
uuRRR4       # Rp
?
ii ; i  + '       g   i     EL—; i)zcSynchronous build OUTSIDE _session_resume_lock (it would stall session.close), then double-checked.Ú
session_dbÚplatform_overriderm   NÚcontext_cwd_is_launch_artifactrm  r…  )rW  rn   rž  r]   re   rZ  FrF  r  Trð  rP  ra  re   )r˜  rV  rX  )rJ  rÀ   r{  r™   r}  )*rê  rh   re   r  r!  r’  rà  ru   r×  r@   rá  Ú_LAUNCH_CWD_NOT_A_WORKSPACErˆ  r†  rƒ   r¹   r   r‡  r:  Ú_find_live_session_by_keyr�   r‚   rª  rq  Ú_init_sessionrW  r*   rß  Ú_transfer_db_to_agentr·   rK   rô  rõ  r)   ró  r¶   rr  r�  rŒ   Úfloatrs  r™  )r7  rj   r]   Ú_cwdr  r–  rš  r˜  Ústored_runtime_overridesr‡   rº   r%   r   r  s   &             r   Ú_resume_eagerr¨  Ü  s×  € àŸ™›
Ñ€C�Ü	˜c×.Ñ.×	/Õ	/ð	AØ47·K±K³MÑ1ˆG kØ%(×%7Ñ%7Ó%9Ð"ô (IÈÏÉÓ'SÐ$Ü*Ø—Z‘ZñgØ,/¯F©FðgØFLðgà ×3Ñ3×;Ð;°tðgð 17Ô:UÑ0U×0tÐ0tÐ^a×^tÑ^tÔZtðgô 5Ô5FÓ5HÓIð	gð Nfñ	g‰E÷ 
0÷ 
Ö	Ü(¨¯©°S×5EÑ5EÓFˆØÒÜ×$Ò$¤Y×/Õ/Ø—‘”÷ 0ä,¨SÐ8°4Ó8÷ 
Ò	ð	AÜ% c×&6Ñ&6×7Õ7Ü˜c§:¡:¨u°gÀCÇHÁHÐRU×RhÑRhÐux×u{Ñu{Ø%+×:JÑ:JÔY]Ð^a×^tÑ^tÓYuõwð —;—;�;Ü)¨%·±Ô8Ø#�”÷ 8ô %Ÿ=™=¨Ó-Ð-�Ò:Ø+×/Ñ/Ð0@ÓAÒMØ0HÐIYÕ0Z�GÐ,Ñ-Ü2°3·9±9·=±=ÀÓ3PÐX\Ô]�Ü'¨¯	©	×2Ò2Ø7;�GÐ3Ñ4ð 4×7Ñ7Ð8H×IÒIð %×(Ñ(Ð)DÔEØOSð Ð7Ñ8ð ×#Ñ#Ò/Ü.1°#×2BÑ2BÓ.C�G˜NÑ+Ø—‘Ð6LÐcg�Ôhô —-‘- Ó$×*Ð*¨ˆ÷K 
ôL Ø�'¤¨e°WÓ =ÀÐepÜ˜Ÿ™ \Ó2×AÐA´d·i±i³kÓBßQXÔ3°CÀ#Ç*Á*ÓMôdð dð _côdð døôQ ô 	AÜ˜Ÿ™ Ô'<¸QÓ'?Ó@Ô@÷ 
0Ò	/ûð	Aú÷ 
0×	/Ð	/ú÷" 0×/Ð/ú÷ 8×7Ð7ûô. ô 	Að �{�{ˆ{ß#–^Ü—M‘M # tÔ,÷ $—^—^�^úä˜Ÿ™ Ô'<¸QÓ'?Ó@Ô@÷I 
Ò	ûð<	Aú÷= 
×	Ð	úsÏ   ±O³A=NÂ1)NÃ1AR&Ä8O)	Å	R&Å)PÆBO=	ÈBPÊ*APË9R&ÌR&ÎOÎOÎ=OÎ>OÏOÏOÏO&	Ï)O:Ï4	R&Ï=PÐ	PÐR#Ð RÐ<QÑ	RÑQ,Ñ''RÒR#ÒR&ÒR#Ò#R&Ò&R7	zsession.resumec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷  ñ  ”4ð  œDñ  r   c           	      óz
  € VP                  R R4      ;p'       g   \        V RR4      # \        WV4      p\        VP                  4      w  Vn        Vn         VP
                  fu   \        V RR7      VP                  '       dV   VP
                  eG   \        P                  ! \        4      ;_uu_ 4        VP
                  P                  4        RRR4       # # # \        V4      ;pej   TVP                  '       dV   VP
                  eG   \        P                  ! \        4      ;_uu_ 4        VP
                  P                  4        RRR4       # # # \        V4       \        V4      ;pej   TVP                  '       dV   VP
                  eG   \        P                  ! \        4      ;_uu_ 4        VP
                  P                  4        RRR4       # # # \        \!        VP"                  R4      VP                  4      ;'       g    \%        VP                  4      Vn        \(        ;_uu_ 4        \+        VP,                  VP                  4      pRRR4       Xeu   \/        V.VO5!  VP                  '       dV   VP
                  eG   \        P                  ! \        4      ;_uu_ 4        VP
                  P                  4        RRR4       # # # ^ RIHp ^ R	IHp V! VP,                  VP9                  VP"                  4      4       VP:                  '       ds   \=        V4      VP                  '       dV   VP
                  eG   \        P                  ! \        4      ;_uu_ 4        VP
                  P                  4        RRR4       # # # VP>                  '       d   \A        V4      M'VPB                  '       d   \E        V4      M
\G        V4       VP                  '       dV   VP
                  eG   \        P                  ! \        4      ;_uu_ 4        VP
                  P                  4        RRR4       # # #   + '       g   i     # ; i  + '       g   i     # ; i  + '       g   i     # ; i  + '       g   i     EL+; i  + '       g   i     # ; i  + '       g   i     # ; i  + '       g   i     # ; i  TP                  '       di   TP
                  eZ   \        P                  ! \        4      ;_uu_ 4        TP
                  P                  4        RRR4       i   + '       g   i     i ; ii i ; i)
ro   rD   é¦  úsession_id requiredNr…  r<   rn   )Ú	SessionDB)Úrestore_session_yolo)$rK   r¹   rÕ  r|   re   r@   rß  r?   r�   r‚   rƒ   rª  r\  r`  rm  Ú_resumable_stored_cwdrN   rà  Ú_profile_default_cwdrá  r:  r¢  r×  rý  ri  r­  Útools.approval_yolor®  Úsession_yolo_enabledrŠ   rŠ  rÝ  r¨  rÛ  r•  r›  )r   r	   r×  r7  Úrespr%   r­  r®  s   &&      r   r�  r�    s{  € à—j‘j ¨rÓ2Ð2ˆFÖ2Ü�C˜Ð4Ó5Ð5Ü
�#˜vÓ
&€Cä-¨c×.>Ñ.>Ó?Ñ€C„FˆCŒKðØ�6‰6Š>Ü(¨°4Ô8ð, �;�;ˆ;˜3Ÿ6™6Ò-Ü×$Ò$¤Y×/Õ/Ø—‘—‘”÷ 0Ð/ð .ˆ;ô+ # 3Ó'Ð'ˆDÒ4Øð( �;�;ˆ;˜3Ÿ6™6Ò-Ü×$Ò$¤Y×/Õ/Ø—‘—‘”÷ 0Ð/ð .ˆ;ô' 	˜3ÔÜ! #Ó&Ð&ˆDÒ3Øð" �;�;ˆ;˜3Ÿ6™6Ò-Ü×$Ò$¤Y×/Õ/Ø—‘—‘”÷ 0Ð/ð .ˆ;ô! #8¼
À3Ç9Á9ÈeÓ8TÐVY×VfÑVfÓ"g÷ #Lð #LÜ%9¸#×:JÑ:JÓ%Kð 	Ôç!Ö!Ü,¨S¯Z©Z¸×9IÑ9IÓJˆD÷ "àÒÜ% cÐ1¨DÓ1ð �;�;ˆ;˜3Ÿ6™6Ò-Ü×$Ò$¤Y×/Õ/Ø—‘—‘”÷ 0Ð/ð .ˆ;õ 	+Ý<Ù˜SŸZ™Z¨×)GÑ)GÈÏ	É	Ó)RÔSØ�8�8ˆ8Ü Ó$ð �;�;ˆ;˜3Ÿ6™6Ò-Ü×$Ò$¤Y×/Õ/Ø—‘—‘”÷ 0Ð/ð .ˆ;ð &)§_§_ _Œ}˜SÔ!Ø%(×%6×%6Ð%6Ô˜SÔ!¼LÈÓ<Mð	Oð
 �;�;ˆ;˜3Ÿ6™6Ò-Ü×$Ò$¤Y×/Õ/Ø—‘—‘”÷ 0Ð/ð .ˆ;ß/×/ú×/×/ú×/×/ú÷ "×!Ð!ú÷ 0×/ú×/×/ú×/×/ûð �;�;ˆ;˜3Ÿ6™6Ò-Ü×$Ò$¤Y×/Õ/Ø—‘—‘”÷ 0×/×/Ð/úð .ˆ;ús¼   ÁR> Â3P8ÃR> Ä+QÅR> Æ.QÇ0R> È)R> È.!Q1ÉR> Ê)RËA	R> Ì
R> Í%RÎR> ÎR> Î:R> ÐR+Ð8QÑQÑQ.Ñ1R	Ñ<	R> ÒRÒR(Ò+R;Ò>AT:ÔT%	Ô	T:Ô%T5Ô0
T:zsession.cwd.setc                ó<   € V ^8„  d   QhR\         R\         R\         /# ©r   r	   r   r
   r   )r   s   "r   r   r   ?  s!   € ÷ ñ ”4ð ¤$ð ¬4ñ r   c                 óf  € VP                  R 4      '       d   \        V RR4      # \        VR4      ;p'       g   \        V RR4      #  \        W#4      p\        Y$4      p\        RTP                  R	R
4      T4       \        Y4      #   \         d!   p\        T R\        T4      4      u Rp?# Rp?ii ; i)rg  é©  zsession busyrn   é°  úcwd requiredé±  Núsession.inforo   rD   )	rK   r¹   rN   Ú_set_session_cwdrV   r)   r�   rÌ   râ   )r   r	   r   r  rn   rº   rJ  s   &&&    r   r�  r�  >  s¢   € à‡{�{�9×ÒÜ�C˜˜~Ó.Ð.Ü˜f eÓ,Ð,ˆCÖ,Ü�C˜˜~Ó.Ð.ð'Ü˜wÓ,ˆô �WÓ"€DÜ	ˆ.˜&Ÿ*™* \°2Ó6¸Ô=Üˆs‹>Ðøô	 ô 'Ü�C˜œs 1›vÓ&Õ&ûð'ús   ÁB ÂB0ÂB+Â%B0Â+B0zsession.workspace.movec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   N  s   € ÷ &Rñ &R”4ð &RœDñ &Rr   c           
     óÄ  a€ \        VR4      ;o'       g   \        V RR4      # \        VR4      ;p'       g   \        V RR4      # ^ RIHp \        ;_uu_ 4        \        V3R l\        \        P                  4       4       4       R4      w  rER	R	R	4       Xe   VP                  R
4      M\        VP                  R4      4      p \        Wc! V4      4      p\        P                  T4      \        P                  T4      r˜\!        TRR7      ;_uu_ 4       p
T
f   \#        T RR7      uuR	R	R	4       # T
P%                  S4      '       g   Tf   \        T RR4      uuR	R	R	4       # M T
P'                  SYxT	RR7       R	R	R	4       Te%    \+        YW4       \/        RX\1        YWTR7      4       \3        T RTRTRT	/4      #   + '       g   i     EL7; i  \         d    \        T RRT 24      u # i ; i  \(         d%   p\        T RRT 24      u R	p?uuR	R	R	4       # R	p?ii ; i  + '       g   i     L±; i  \         d!   p\        T R\-        T4      4      u R	p?# R	p?ii ; i)a   Re-home a STORED session's workspace (by ``session_key``; no live agent required). git branch/root are
REPLACED (a stale ``git_repo_root`` kept the session under the project it left); a live agent follows even
mid-turn (refusing made the UI claim success while state.db kept the old cwd).r<  rW  zsession_key requiredrn   r¸  r¹  )Útranslate_cwd_for_wsl_backendc              3   ó^   <"  € T F"  w  rVP                  R 4      S8X  g   K  W3x € K$  	  R# 5i©r<  Nr  )r.  rj   Úsessr×  s   &  €r   r1  Ú_.<locals>.<genexpr>Z  s*   øé € ÐgÑ*A™Y˜SÀTÇXÁXÈmÓE\Ð`fÑEfŒ[ˆc�[Ó*Aùs   ƒ-¢-Nre   rC  rº  z"working directory does not exist: T©Úwriteré�  r<   rX  )Úreplace_git_metazmove failed: r»  )rˆ   rˆ   Úgit_repo_root)rD   N)rN   r¹   Úhermes_constantsr¿  r¶   r3  r­   r·   r¸   rK   rp  Ú_workspace_cwdrV   r�   rˆ   Úcommon_repo_rootr>   r?   r!  Úupdate_session_cwdrƒ   r¼  r)   rÌ   r�   râ   )r   r	   r  r¿  r/  r%   r4  Ú
target_cwdrˆ   Úrootr@   rº   r×  s   &&          @r   r�  r�  M  s!  ø€ ô
 ! ¨Ó7Ð7ˆFÖ7Ü�C˜Ð5Ó6Ð6Ü˜f eÓ,Ð,ˆCÖ,Ü�C˜˜~Ó.Ð.Ý>ç	ŽÜÜg¬$¬y¯©Ó/@Ô*AÓgÐisóu‰ˆ÷ 
ð (,Ò'7ˆ4�8‰8�NÔ#¼]È6Ï:É:ÐV_ÓK`Ó=a€DðKÜ# DÐ*GÈÓ*LÓMˆ
ô ×#Ñ# JÓ/´×1KÑ1KÈJÓ1WˆDÜ	�V D×	)Õ	)¨RØŠ:Ü(¨°4Ô8÷ 
*Ò	)ð �~‰~˜f×%Ò%ØŠ|Ü˜C Ð':Ó;÷ 
*Ò	)ð
 ð<Ø×%Ñ% f¨jÀ$ÐY]Ð%Ô^÷ 
*ð Òð	+Ü˜TÔ.ô 	ˆn˜h¬	°$È6Ô(RÔSÜˆs�U˜J¨°&¸/È4ÐPÓQÐQ÷9 
�ˆûô ô KÜ�C˜Ð!CÀCÀ5ÐIÓJÒJðKûô ô <Ü˜C ¨°q°cÐ':Ó;Ô;÷ 
*Ò	)ûð<ú÷ 
*×	)ûô ô 	+Ü˜˜T¤3 q£6Ó*Õ*ûð	+ús„   Á4F:ÃG ÄH!Ä/H!ÅH!Å!H!Å#G/ÆH4 Æ:G	ÇG,Ç+G,Ç/HÇ:HÈ	HÈ
H!ÈHÈH!È!H1	È4IÈ?IÉIÉIzsession.active_listc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   x  s   € ÷ 
(ñ 
(”4ð 
(œDñ 
(r   c           	     ó  € \        V 4      w  r#V'       d   V# \        VP                  R4      ;'       g    R4      pV UUu. uF*  w  rVVP                  R4      '       d   K  \        WVV4      NK,  	  ppp\	        V RV/4      # u uppi )z5Live TUI sessions in this process (not a DB browser).Úcurrent_session_idrD   Ú
_finalizedr³  )r»   r)   rK   Ú_session_live_itemrâ   )r   r	   Úsnapshotr   Úcurrentrj   r   r²   s   &&      r   r�  r�  w  s€   € ô ' sÓ+�M€Hß
Øˆ
Ü�&—*‘*Ð1Ó2×8Ð8°bÓ9€Gñ KSÔtÉ(¹,¸#ÐZa×ZeÑZeÐfr×ZsÔ5Ô˜s¨WÖ5É(€DÑtÜˆs�Z Ð&Ó'Ð'ùó us   ÁBÁ!Bzsession.activatec                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   †  s&   € ÷ fñ f”4ð f¤$ð f¬4ñ fr   c                óÖ  € \        VP                  R4      ;'       g    R4      p\        ;_uu_ 4        \        WV4      ;pe   VuuRRR4       # VR,          ;_uu_ 4        \	        Y2\        4       ;'       g    \        4       RRR4       RRR4       \        V \        W2R\        VP                  RR4      4      R7      4      #   + '       g   i     LI; i  + '       g   i     LT; i)	zUAttach the frontend to a live TUI session without closing the previously focused one.ro   rD   Nr[  TrÜ  F)rt  rÜ  )
r)   rK   r:  r;  r=  r†  r‡  râ   rz  rQ   )r   r	   r   rj   rA  s   &&&  r   r�  r�  …  s¸   € ô ˆf�j‰j˜Ó&×,Ð,¨"Ó
-€C÷ 
Ö	Ü(¨°7Ó;Ð;ˆGÒHØ÷ 
Ò	ð �^×$×$Ü" 3Ô1BÓ1D×1XÐ1XÔHXÔY÷ %÷ 
ô
 ˆsÔ)Ø˜D´ÀÇ
Á
È?Ð\aÓ@bÓ0côeó fð f÷ %×$ú÷ 
×	ús)   ³CÁCÁ!#C	ÂCÃCÃCÃC(	zsession.deletec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   •  s   € ÷ ^ñ ^”4ð ^œDñ ^r   c           	     ó„  a	a
a€ ^ RI Hp ^ RIHp VP	                  RR4      ;o'       g   \        V RR4      # \        V 4      w  rEV'       d   V# \        ;QJ d    V3R lV 4       F  '       g   K   RM	  R	M! V3R lV 4       4      '       d   \        V R
R4      # \        VP	                  R4      ;'       g    RP                  4       ;'       g    R4      p\        VRR7      ;_uu_ 4       o	S	f   \        V RR7      uuRRR4       #  Ve   \        V4      M	\        4       o
V! S	SV	V
V3R l4      p RRR4       X'       d   \        T RS/4      # \        T RR4      #   T d    \        T R
R4      u uuRRR4       # \         d%   p\        T RRT 24      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     L„; i)zdDelete a stored session + transcripts; refused while live here (FK trips on the agent's next flush).)Údelete_chat)ÚSessionActiveWriteGuardErrorro   rD   r«  r¬  c              3   óP   <"  € T F  w  rVP                  R 4      S8H  x € K  	  R# 5irÁ  r  )r.  Ú_sidrÃ  r×  s   &  €r   r1  rÃ  Ÿ  s!   øé € Ð
B¹©g¨dˆ1�5‰5�Ó 6Ö)»ùs   ƒ#&TFé·  zcannot delete an active sessionrC  NrÄ  rµ   r<   c                  ó:   <€ S P                  SSR ,          RR7      # )r³  T)Úsessions_dirÚexclude_active_write_guards)Údelete_session)r@   r4  r×  s   €€€r   r"   Ú_.<locals>.<lambda>§  s$   ø€ °b×6GÑ6GØ T¨JÕ%6ÐTXð 7Hô 7Zr   zdelete failed: ÚdeletedrW  rX  )Úagent.onboarding_recordrÚ  r&  rÛ  rK   r¹   r»   Úanyrp  rL   r>   r?   rz   Úget_hermes_homerƒ   râ   )r   r	   rÚ  rÛ  rÔ  r   re   rä  rº   r@   r4  r×  s   &&       @@@r   r�  r�  ”  s|  ú€ õ 4Ý@à—j‘j ¨rÓ2Ð2ˆFÖ2Ü�C˜Ð4Ó5Ð5Ü& sÓ+�M€Hß
Øˆ
ß
ƒsÔ
B¹Ó
B‡s‡s‚sÔ
B¹Ó
B×BÒBÜ�C˜Ð@ÓAÐAÜ  &§*¡*¨YÓ"7×"=Ð"=¸2×!DÑ!DÓ!F×!NÐ!NÈ$ÓO€LÜ	�V D×	)Õ	)¨RØŠ:Ü(¨°4Ô8÷ 
*Ò	)ð	:Ø)5Ò)A”4˜Ô%ÄÓGXˆDÙ! " fö /Zó [‰G÷ 
*÷ -4Œ3ˆs�Y Ð'Ó(Ð]¼¸cÀ4ÐI\Ó9]Ð]øð	 ,ô 	FÜ˜˜TÐ#DÓEÑE÷ 
*Ò	)ô ô 	:Ü˜˜T _°Q°CÐ#8Ó9Ô9÷ 
*Ò	)ûð	:ú÷ 
*×	)úsH   Ã,F/Ä	)EÅF,Å2F/Å>F,ÆF,ÆF'ÆF,ÆF/Æ'F,Æ,F/Æ/F?	c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r   rG   r
   rI   )r   s   "r   r   r   °  s!   € ÷ ñ œð ¬ð ´ñ r   c                ó¬  € V P                  R4      ;'       g    Rp VP                  V4      ;'       g    RpV'       g   V'       d   RV R&   V# VP                  W#4      '       gH   VP                  V4      ;'       g    / P                  R4      ;'       g    RP	                  4       V8X  d
   RV R&   TpV# V'       g   TpV#   \
         d    Tp T# i ; i)zZ``session.title`` without ``title``: read it, applying a queued pending_title if possible.r0  rD   Nr—   )rK   Úget_session_titler$  r!  rL   rƒ   )r   r@   rG   ÚfallbackÚresolved_titles   &&&  r   Ú_title_readrí  °  sÚ   € à�{‰{˜?Ó+×1Ð1¨r€Hð"Ø×-Ñ-¨cÓ2×8Ð8°bˆßßØ+/�˜Ñ(ð Ðð ×"Ñ" 3×1Ò1Ø—>‘> #Ó&×,Ð,¨"×1Ñ1°'Ó:×@Ð@¸b×GÑGÓIÈXÔUØ'+ˆG�OÑ$Ø%ˆNð
 Ð÷	  Ø%ˆNð Ðøô ô "Ø!‰ØÐð"ús@   �C µ
C Á C ÁC Á.C Á>C ÂC Â6C Â>C ÃCÃCzsession.titlerÆ  c                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   Å  s!   € ÷ ñ ”4ð ¤$ð ¬tñ r   c                 óF  € VR ,          pRV9  d   R\        W#V4      R V/pMðVP                  RR4      ;'       g    RP                  4       ;p'       g   \        V RR4      #  VP	                  WF4      '       d   RTr‡M€VP                  V4      ;p	'       d   RV	P                  R4      ;'       g    Tr‡MJ\        V4       \        V4      ;_uu_ 4       p
V
RJ;'       d    V
P	                  WF4      '       * Tr‡RRR4       X'       d   XMRVR	&   R
VRX/p\        VP                  RR4      V4       \        W4      #   + '       g   i     LL; i  \         d!   p\        T R\        T4      4      u Rp?# Rp?i\         d!   p\        T R\        T4      4      u Rp?# Rp?ii ; i)r<  r—   rD   éµ  ztitle requiredFNi¶  rÆ  r0  Úpendingro   )rí  rK   rL   r¹   r$  r!  r=  r=   rV   r)   rƒ   Ú_emit_session_info_for_sessionrâ   )r   r	   r   r@   rG   rþ   r—   rñ  rä   Úexisting_rowÚ	scoped_dbrº   s   &&&&        r   r�  r�  Ã  sr  € ð �-Õ
 €CØ�fÔØœ; w°CÓ8¸-ÈÐM‰ØŸ
™
 7¨BÓ/×5Ð5°2×<Ñ<Ó>Ð>ˆeÖ>Ü�C˜Ð/Ó0Ð0ð	+Ø×#Ñ# C×/Ò/Ø!&¨™à!#§¡°Ó!4Ð4�Ö4Ø!&¨×(8Ñ(8¸Ó(A×(JÐ(JÀU™ô
 ' wÔ/Ü  ×)Ô)¨YØ*3¸4Ð*?×*kÐ*kÀI×D_ÑD_Ð`cÓDkÔ%lÐns˜U÷ *÷ -4¡5¸ˆ�Ñ Ø˜W g¨uÐ5ˆÜ" 6§:¡:¨l¸BÓ#?ÀÔIÜˆsÓÐ÷ *×)ûäô 	+Ü˜˜T¤3 q£6Ó*Õ*ûÜô 	+Ü˜˜T¤3 q£6Ó*Õ*ûð	+úsl   Á"E Á=E ÂE Â/E Â3E Ã$D9Ã5E Ä9E		ÅE Å	E ÅF ÅE2Å,F Å2F Å?F Æ FÆF ÆF zsession.archivec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ä  s   € ÷ +ñ +”4ð +œDñ +r   c           
     óP  € \        VP                  RR4      4      p\        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      pV'       g   \        V RR4      # \        P                  V4      pVf   \        VRR	7      M
\        V4      ;_uu_ 4       pVf   \        V R
R7      uuRRR4       #  Ve&   VR,          pVP                  Wb4      '       g   W$R&   MU\        VR4      '       d   VP                  V4      MT;p'       g   \        V RR4      uuRRR4       # VP                  Wb4       \        V RVRV/4      uuRRR4       #   \         d+   p\        T R
\        T4      4      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     R# ; i)u  Set/clear ``archived`` (out of the default list, messages kept â€” the Desktop PATCH parity flag)
on a session + lineage: LIVE runtime id first (unpersisted drafts via ``pending_archived``),
then a stored id/key in the profile db, like ``session.set_hidden``.r°  Tro   r<  rD   r«  r¬  NrÄ  rÆ  r<   Úpending_archivedÚresolve_session_idé¡  rX  )rQ   rK   r)   r¹   r·   r>   r=   r?   Úset_session_archivedÚhasattrrø  râ   rƒ   )r   r	   r°  r×  r   r@   rG   rº   s   &&      r   r�  r�  ã  su  € ô
 ˜vŸz™z¨*°dÓ;Ó<€HÜ�—‘˜LÓ)×LÐL¨V¯Z©Z¸Ó-F×LÐLÈ"ÓM€FßÜ�C˜Ð4Ó5Ð5ô �m‰m˜FÓ#€GØ.5ªoŒ+�f TÕ
*Ä;ÈwÓCW×
WÐ
WÐ\^ØŠ:Ü(¨°4Ô8÷ XÒ
Wð	+ØÒ"Ø˜mÕ,�Ø×.Ñ.¨s×=Ò=Ø2:Ð.Ñ/øô AHÈÐL`×@aÒ@a˜r×4Ñ4°VÔ<ÐgmÐm˜ÖmÜ  TÐ+>Ó?÷ XÒ
Wð ×'Ñ'¨Ô6Ü�s˜Z¨°=À#ÐFÓG÷ XÒ
Wøô ô 	+Ü˜˜T¤3 q£6Ó*Ô*÷ XÒ
Wûð	+ú÷ X×
WÐ
WúsC   Â'FÃAEÄEÄ1 EÅFÅ'FÅ<FÅ=FÆFÆFÆF%	zsession.set_hiddenc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ +ñ +”4ð +œDñ +r   c           
     ó  € RV9  d   \        V RR4      # \        VR,          4      p\        P                  \	        VP                  R4      ;'       g    R4      4      pVf   \        VRR7      M
\        V4      ;_uu_ 4       pVf   \        V R	R
7      uuRRR4       #  Ve&   VR,          pVP                  WR4      '       g   W#R&   Ma\        VR4      p\        VR4      '       d   VP                  V4      MT;p'       g   \        V RR4      uuRRR4       # VP                  WR4       \        V RVRV/4      uuRRR4       #   \         d+   p\        T R	\	        T4      4      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     R# ; i)a?  Set/clear ``hidden`` (leaves the default list, stays resumable by its owner) on a session + lineage:
LIVE runtime id first (unpersisted drafts via ``pending_hidden``), then a stored id/key in the profile db.
``hidden`` is required: a default of True hid the whole lineage for any caller that dropped the flag (#122190).re  rð  zhidden requiredro   rD   NTrÄ  rÆ  r<   r<  rd  rø  rù  rX  )r¹   rQ   r·   rK   r)   r>   r=   r?   Úset_session_hiddenrN   rû  rø  râ   rƒ   )r   r	   re  r   r@   rG   r×  rº   s   &&      r   r�  r�    sh  € ð
 �vÔÜ�C˜Ð0Ó1Ð1Ü˜V HÕ-Ó.€Fô �m‰mœC §
¡
¨<Ó 8× >Ð >¸BÓ?Ó@€GØ.5ªoŒ+�f TÕ
*Ä;ÈwÓCW×
WÐ
WÐ\^ØŠ:Ü(¨°4Ô8÷ XÒ
Wð	+ØÒ"Ø˜mÕ,�Ø×,Ñ,¨S×9Ò9Ø06Ð,Ñ-øô $ F¨LÓ9�Ü@GÈÐL`×@aÒ@a˜r×4Ñ4°VÔ<ÐgmÐm˜ÖmÜ  TÐ+>Ó?÷ XÒ
Wð ×%Ñ% cÔ2Ü�s˜X v¨}¸cÐBÓC÷ XÒ
Wøô ô 	+Ü˜˜T¤3 q£6Ó*Ô*÷! XÒ
Wûð	+ú÷ X×
WÐ
WúsC   ÂE;ÂA!EÄEÄ EÅE8ÅE3Å#E8Å$E;Å3E8Å8E;Å;F	zmessage.reactc                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   !  s&   € ÷ Eñ E”4ð E¤$ð E¬4ñ Er   c           
     óŒ  € \        VR4      pVP                  R4      pVf   VR9  d   \        V RR4      # VP                  R4      ;pe/   \        V4      P	                  4       ;p'       g   \        V RR	4      # \        VP                  R
4      ;'       g    R4      P	                  4       ;pR9  d   \        V RR4      # \        V4      ;_uu_ 4       pVf   \        V RR7      uuRRR4       # \        V4      p Vf.   VP                  WƒR7      pVf   \        V RR4      uuRRR4       # VP                  V\        V4      WVR7      p	 RRR4       X	f   \        T RR4      # \        T R\        T4      RT	/4      #   \         d+   p
\        T R\        T
4      4      u Rp
?
uuRRR4       # Rp
?
ii ; i  + '       g   i     Lr; i)zËSet/clear one author's emoji reaction (Tapback semantics: one per author, same emoji retracts, null
clears). ``row_id`` is ``messages.id``; a not-yet-persisted live message names ``newest_role`` instead.Únewest_roleÚrow_idNr
  rÞ  zrow_id or newest_role requiredÚemojié¸  z(emoji must be a non-empty string or nullÚauthoré¹  z author must be 'user' or 'agent'rÆ  r<   )r  iÈ  zno message to react to yet)r  z!message not found in this sessionÚ	reactions>   r
  Ú	assistant>   r
  r‡   )rN   rK   r¹   r)   rL   r=   r?   Ú_submit_row_target_keyÚlatest_message_row_idÚset_message_reactionr5   rƒ   râ   )r   r	   r   r  r  r  r  r@   Úrow_sessionr  rº   s   &&&        r   r�  r�     s¤  € ô ˜V ]Ó3€KØ�Z‰Z˜Ó!€FØ‚~˜+Ð-BÔBÜ�C˜Ð?Ó@Ð@Ø—‘˜GÓ$Ð$ˆÒ1ÄCÈÃJ×DTÑDTÓDVÐ;V¸5Ö;VÜ�C˜ÐIÓJÐJÜ�f—j‘j Ó*×4Ð4¨fÓ5×;Ñ;Ó=Ð=ˆÐFWÔWÜ�C˜ÐAÓBÐBÜ	�W×	Ô	 ØŠ:Ü(¨°4Ô8÷ 
Ò	ô -¨WÓ5ˆð	+ØŠ~Ø×1Ñ1°+Ð1ÓP�Ø’>Ü  TÐ+GÓH÷ 
Ò	ð ×/Ñ/°¼SÀ»[È%Ð/Ó_‰I÷ 
ð ÒÜ�C˜ÐBÓCÐCÜˆs�Xœs 6›{¨K¸ÐCÓDÐDøô	 ô 	+Ü˜˜T¤3 q£6Ó*Ô*÷ 
Ò	ûð	+ú÷ 
×	úsB   ÃF3Ã.F3Ã:&E;Ä+E;Å;F0ÆF+ÆF0ÆF3Æ+F0Æ0F3Æ3G	zllm.oneshotc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   B  s   € ÷ Cñ C”4ð CœDñ Cr   c                ó„  € VP                  R4      ;'       g    RP                  4       ;'       g    RpVP                  R4      ;'       g    RpVP                  R4      ;'       g    Rp\        VP                  R4      \        4      '       d   VP                  R4      M/ p VP                  R4      e   \	        VR,          4      MRpV'       gL   \        V4      P                  4       '       g-   \        V4      P                  4       '       g   \        V R	R
4      # \        P                  VP                  R4      ;'       g    R4      p ^ RI
Hp V'       d   \        V4      M\        P                  ! 4       ;_uu_ 4        \        T RT! Y4Y%VP                  R4      ;'       g    RP                  4       ;'       g    R\!        VRR4      ;'       g    RTV'       d   \#        VP                  R4      4      MRR7      /4      uuRRR4       #   \
        \        3 d    Rp EL[i ; i  + '       g   i     R# ; i  \$        \        3 d9   p	\        T \        T	\$        4      '       d   RMR\        T	4      4      u Rp	?	# Rp	?	i\&         d1   p	\(        P+                  RT	4       \        T RRT	 24      u Rp	?	# Rp	?	ii ; i)ul  Stateless one-shot LLM request; a live ``session_id`` lends its model, else the ``task`` backend.
Runs under the session's profile scope (else ``params.profile`` / the launch scope): the aux
task config and its API key otherwise resolved from the LAUNCH profile â€” a secondary's titles /
project ideas ran on, and billed, the default profile's auxiliary provider.ÚtemplaterD   NÚinstructionsÚinputÚ	variablesÚtemperatureg333333Ó?é¾  z5llm.oneshot requires a template or instructions/inputro   )Úrun_oneshotÚtextÚtaskÚtitle_generationÚ
max_tokensi   r‡   )r  Ú
user_inputr  r  r  r  r  Úmain_runtimei¿  iÀ  zllm.oneshot failed: %si¦  zone-shot generation failed: )rK   rL   rÃ   r   r¥  rU   rV   r)   r¹   r·   Úagent.oneshotr  rf   r�   Únullcontextrâ   rW   Ú_main_runtime_from_agentÚKeyErrorrƒ   rÍ   r8  )
r   r	   r  r  r  r  r  r   r  rº   s
   &&        r   r�  r�  @  s/  € ð —
‘
˜:Ó&×,Ð,¨"×3Ñ3Ó5×=Ð=¸€HØ—:‘:˜nÓ-×3Ð3°€LØ—‘˜GÓ$×*Ð*¨€JÜ+5°f·j±jÀÓ6MÌt×+TÒ+T�—
‘
˜;Ô'ÐZ\€IðØ6<·j±jÀÓ6OÒ6[”e˜F =Õ1Ô2Ðadˆ÷ œC Ó-×3Ñ3×5Ò5¼cÀ*»o×>SÑ>S×>UÒ>UÜ�C˜ÐVÓWÐWÜ�m‰m˜FŸJ™J |Ó4×:Ð:¸Ó;€GðCÝ-ß9@Ô,¨WÔ5Äj×F\ÒF\ÓF^×^Ñ^Ü�s˜V¡[Ø)È8Ø—j‘j Ó(×>Ð>Ð,>×EÑEÓG×]Ð]ÐK]Ü% f¨l¸DÓA×IÐIÀTÐWbßOVÔ5°g·k±kÀ'Ó6JÔKÐ\`ô	&bð có d÷ _Ò^øô ”zÐ"ô Ø‹ðú÷ _×^Ð^ûô ”jÐ!ô LÜ�C¤¨A¬x×!8Ò!8™¸dÄCÈÃFÓKÕKûÜô CÜ�‰Ð/°Ô3Ü�C˜Ð!=¸a¸SÐAÓBÕBûðCús~   Â#'H ÅH= Å(H= Æ;H)Æ>H)Ç
H)Ç%H)È
H= ÈH&È%H&È)H:	È4H= È:H= È=J?É-JÉ;J?ÊJ?ÊJ?Ê%J:Ê4J?Ê:J?zhandoff.requestc                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   c  s&   € ÷ #mñ #m”4ð #m¤$ð #m¬4ñ #mr   c                ó6  € VP                  R4      '       d   \        V RR4      # VP                  RR4      ;'       g    RP                  4       P                  4       ;p'       g   \        V RR4      # ^ RIHpHp  V! V4      p \        T4      ;_uu_ 4        T! 4       pRRR4       \        XP                  P                  T4      RR4      '       g   \        T RRT R24      # TP                  T4      ;p	'       d   T	P                  '       g   \        T RRT R24      # \        T4       TR,          p
\!        T4      ;_uu_ 4       pTf   \#        T RR7      uuRRR4       #  TP%                  T
4      '       g   TP'                  T
RT
R,           24       TP)                  Y£4      '       g   \        T RR4      uuRRR4       #  RRR4       \-        T RRRT
RTR T	P.                  /4      #   \        \        3 d    \        T R	R
T R24      u # i ; i  + '       g   i     EL~; i  \         d   p\        T RRT 24      u Rp?# Rp?ii ; i  \         d+   p\        T R\+        T4      4      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     LÊ; i)!zeQueue a handoff (desktop /handoff): only writes ``pending``; the gateway watcher claims and re-binds.rg  r·  uL   session busy â€” wait for the current turn to finish, then retry the handoffÚplatformrD   rÞ  zplatform required)ÚPlatformÚload_gateway_configr  zunknown platform 'Ú'Ni�  zcould not load gateway config: rì   Fr  z
platform 'z*' is not configured/enabled in the gatewayiº  zno home channel configured for u8    â€” set one with /sethome on the destination chat firstr<  rÆ  r<   zhandoff-r[   i»  uN   session is already in flight for handoff â€” wait for it to settle, then retryÚqueuedTÚ	home_name)rK   r¹   rL   r¤   Úgateway.configr#  r$  rV   r  rf   rƒ   r§  Ú	platformsÚget_home_channelÚchat_idr=  r=   r?   r!  r$  Úrequest_handoffr)   râ   r'   )r   r	   r   Úplatform_namer#  r$  r"  Ú	gw_configrº   r4  rG   r@   s   &&&         r   r�  r�  b  si  € ð ‡{�{�9×ÒÜ�C˜ÐmÓnÐnØ$Ÿj™j¨°RÓ8×>Ð>¸B×EÑEÓG×MÑMÓOÐOˆMÖOÜ�C˜Ð2Ó3Ð3ç<ðFÙ˜MÓ*ˆðFÜ+¨G×4Õ4Ù+Ó-ˆI÷ 5ô �9×&Ñ&×*Ñ*¨8Ó4°iÀ×GÒGÜ�C˜ ¨M¨?Ð:dÐeÓfÐfØ×.Ñ.¨xÓ8Ð8ˆDÖ8ÀÇÇÀÜ�C˜Ð!@ÀÀð P=ð  =ó >ð 	>ô ˜7Ô#Ø
�-Õ
 €CÜ	�W×	Ô	 ØŠ:Ü(¨°4Ô8÷ 
Ò	ð	+Ø—>‘> #×&Ò&Ø×$Ñ$ S¨H°S¸µW°IÐ*>Ô?Ø×%Ñ% c×9Ò9Ü˜C Ð'wÓx÷ 
Ò	ð :÷ 
ô ˆs�X˜t ]°C¸À]ÐT_Ðae×ajÑajÐkÓlÐløô3 œÐ!ô FÜ�C˜Ð!3°M°?À!ÐDÓEÒEðFú÷ 5×4Ð4ûäô FÜ�C˜Ð!@ÀÀÐDÓEÕEûðFûô$ ô 	+Ü˜˜T¤3 q£6Ó*Ô*÷ 
Ò	ûð	+ú÷ 
×	úsŠ   Á;G, ÂH( ÂHÂH( ÅJÅ$IÅ;?IÇ,"HÈHÈH%	ÈH( È%H( È(IÈ3IÉIÉIÉJÉJ É0JÉ1JÊ JÊJÊJ	zhandoff.statec                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   ‹  s&   € ÷ bñ b”4ð b¤$ð b¬tñ br   c           
     óº   € VP                  VR,          4      ;'       g    / p\        T R Uu/ uF  qUVP                  V4      ;'       g    RbK   	  up4      # u upi )zZPoll ``{state, platform, error}``; ``state`` is pending|running|completed|failed or empty.r<  rD   )Ústater"  rô   )Úget_handoff_staterâ   rK   )r   r	   r   r@   r-  r*  s   &&&&  r   r�  r�  ‰  sW   € ð ×!Ñ! '¨-Õ"8Ó9×?Ð?¸R€FÜˆsÑA_Ó`ÑA_¸˜FŸJ™J uÓ-×3Ð3°Ò3ÑA_Ñ`ÓaÐaùÒ`s   ­A
Á
A
zhandoff.failc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ’  s   € ÷ >ñ >”4ð >œDñ >r   c                óà  € \        W4      w  r#V'       d   V# \        VP                  R4      ;'       g    R4      P                  4       R,          p\	        V4      ;_uu_ 4       pVf   \        V RR7      uuRRR4       # VR,          p VP                  WdRR	7      pV'       d   RM3VP                  V4      ;'       g    / P                  R
4      ;'       g    RpRRR4       \        V R\        X4      R
X/4      #   \         dT    TP                  T4      ;'       g    / P                  R
4      ;'       g    RR8H  ;p'       d   TP                  Yd4        L¼i ; i  + '       g   i     LŠ; i)z`Fail a not-yet-claimed handoff (poll timeout); a claimed ``running`` row is the watcher's (CAS).rô   zhandoff failed:Niô  NNrÆ  r<   r<  rñ  )Úonly_statesr1  rD   Úfailed)rñ  )r    r)   rK   rL   r=   r?   Úfail_handoffrU   r2  râ   r*   )	r   r	   r   r   Úreasonr@   rG   r6  r1  s	   &&       r   r�  r�  ‘  s:  € ô   Ó,�L€Gß
Øˆ
Ü�—‘˜GÓ$×8Ð8Ð(8Ó9×?Ñ?ÓAÀ$ÕG€FÜ	�W×	Ô	 ØŠ:Ü(¨°4Ô8÷ 
Ò	ð �mÕ$ˆð	-Ø—_‘_ S¸l�_ÓKˆF÷
 #‘¨×)=Ñ)=¸cÓ)B×)HÐ)HÀb×(MÑ(MÈgÓ(V×(\Ð(\ÐZ\ˆ÷ 
ô ˆs�Xœt F›|¨W°eÐ<Ó=Ð=øô ô 	-à×/Ñ/°Ó4×:Ð:¸×?Ñ?ÀÓH×NÐNÈBÐS\Ñ\Ð\ˆvÖ\Ø—‘ Ô,ùð	-ú÷ 
×	úsZ   Á$EÂ 	EÂ
C<ÂEÂ%EÂ?EÃEÃ<"EÄEÄ8EÅEÅEÅEÅEÅE-	zsession.usagec                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   ©  s!   € ÷ ñ ”4ð ¤$ð ¬4ñ r   c                 óÐ   € \        V4      pVP                  R 4      f   V'       g   R^ R^ R^ R^ /p^ RIHp VP	                  V! VP                  R 4      4      4       \        W4      # )r‡   Úcallsr  ÚoutputÚtotal)Únous_credits_usage_fields)Ú_session_usage_snapshotrK   Úagent.account_usager>  ró  râ   )r   r	   r   Úusager>  s   &&&  r   r�  r�  ¨  s[   € ä)¨'Ó2€EØ‡{�{�7ÓÒ#¯EØ˜!˜W a¨°1°g¸qÐAˆå=Ø	‡L�LÑ*¨7¯;©;°wÓ+?Ó@ÔAÜˆs‹?Ðr   zsession.context_breakdownc                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   ´  s!   € ÷ 'ñ '”4ð '¤$ð '¬4ñ 'r   c                 ó¶  € VP                  R 4      ;pfÂ   \        V4      ;'       g    \        R4      p\        T R. RVP                  R^ 4      ;'       g    ^ RVP                  R^ 4      ;'       g    ^ RVP                  R^ 4      ;'       g    ^ R^ RVP                  RR4      R	VP                  R	R
4      R\	        V4      P                  RR4      /4      # VR,          ;_uu_ 4        \        VP                  R. 4      4      pRRR4       \        VR,          4      p ^ RIHp ^ RI	H
p \        V4      ;_uu_ 4        V! VX4      p	V! V4      V	R&   RRR4       \        V X	4      \        V4       #   + '       g   i     Lv; i  + '       g   i     L:; i  \         d&   p
\        T RRT
 24      u Rp
?
\        T4       # Rp
?
ii ; i  \        T4       i ; i)r‡   NÚ
categoriesÚcontext_maxÚcontext_percentÚcontext_usedÚestimated_totalÚcontext_estimatedFÚcontext_sourceÚprovider_usager  rD   r[  r  r<  )Ú!compute_session_context_breakdown)Úcontext_file_sources_for_agentÚcontext_filesr…  z%Could not compute context breakdown: )rK   r?  Ú
_get_usagerâ   Ú_metadata_mirrorr­   rp   Úagent.context_breakdownrL  Úagent.context_file_sourcesrM  rf   rr   rƒ   r¹   )r   r	   r   r‡   rA  r  rt   rL  rM  rÈ   rÏ   s   &&&        r   r�  r�  ³  s¤  € à—‘˜WÓ%Ð%ˆÒ.Ü'¨Ó0×DÐD´J¸tÓ4DˆÜ�3Ø˜"˜m¨U¯Y©Y°}ÀaÓ-H×-MÐ-MÈAØ˜uŸy™yÐ):¸AÓ>×CÐCÀ!Ø˜EŸI™I n°aÓ8×=Ð=¸AØ˜qØ §¡Ð+>ÀÓ!FØ˜eŸi™iÐ(8Ð:JÓKØÔ% gÓ.×2Ñ2°7¸BÓ?ðAó Bð 	Bð 
�×	 ×	 Ü�w—{‘{ 9¨bÓ1Ó2ˆ÷ 
!ô " '¨-Õ"8Ó9€Fð'ÝMÝMÜ+¨G×4Õ4Ù7¸¸wÓGˆGá'EÀeÓ'LˆG�OÑ$÷ 5ô �3˜Ó ô 	˜vÕ&÷% 
!×	 ú÷ 5×4ûô
 ô NÜ�C˜Ð!FÀsÀeÐLÓMÔMä˜vÕ&ûðNûô 	˜vÕ&úsT   Ã(E2ÄF Ä>FÅF Å2F	ÆF	ÆF ÆGÆ#GÆ2GÆ3G ÇGÇG ÇGrì   zpet.info)r×   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Ù  ó   € ÷ ñ ”4ð œDñ r   c                ó*  € \        4       ;pf   \        V RR/4      # Vw  r4RR/\        W4R7      Cp\        VP	                  RR4      ;'       g    R4      ;p'       d-   WeP	                  R4      8X  d   VP                  R	R4       RVR
&   \        W4      # )z\Active pet for sprite renderers: spritesheet (base64) + frame geometry + state-row taxonomy.Nrì   FT©rí   ÚknownRevisionrD   ÚspritesheetRevisionÚspritesheetBase64ÚspritesheetUnchanged)rî   râ   Ú_pet_sprite_payloadr)   rK   rr  )r   r	   ÚactiverÁ   rí   rÈ   Úknowns   &&     r   r�  r�  Ø  s˜   € ô “-ÐˆÒ(Ü�3˜ EÐ*Ó+Ð+Ø�J€CØ˜$ÐHÔ"5°cÔ"GÐH€Gä�V—Z‘Z °Ó4×:Ð:¸Ó;Ð;ˆÖ;ÀÏ+É+ÐVkÓJlÔAlð 	�‰Ð'¨Ô.Ø*.ˆÐ&Ñ'ÜˆsÓÐr   zpet.info.metac                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ê  s   € ÷ Sñ S”4ð SœDñ Sr   c                ó¼   € \        4       ;pf   \        V RR/4      # Vw  r4\        V RRRVP                  RVP                  RVR\	        VP
                  4      /4      # )z?Cheap active-pet metadata used to avoid full payload refreshes.rì   FTrØ   ÚdisplayNamerí   rX  )rî   râ   rØ   Údisplay_nameÚ_pet_sheet_revisionÚspritesheet)r   r	   r\  rÁ   rí   s   &&   r   r�  r�  é  sl   € ô “-ÐˆÒ(Ü�3˜ EÐ*Ó+Ð+Ø�J€CÜˆs�Y  f¨c¯h©h¸Às×GWÑGWÐY`ÐbgØ*Ô,?ÀÇÁÓ,PðRó Sð Sr   c          	      óV   € V ^8„  d   QhR\         R\        R\        R\         R,          /# )r   Úpet_cfgr1  rí   r
   N)r   r)   r¥  )r   s   "r   r   r   ó  s,   € ÷ ñ ¤4ð ´ð ¼Eð ÄdÈTÅkñ r   c                óR  € ^ RI HpHp ^ RIHp \        VP                  RR4      ;'       g    R4      P                  4       pVR9   d   VP                  4       MTR8w  d   R# VP                  V P                  4      pV! \        V P                  4      RVR7      P                  W(R7      p	V	'       g   R# R	RR
TRVP                  V4      RV	R,          RV	R,          RV	R,          RV	R,          RVP                  \        ^\!        V	R,          4      ;'       g    ^4      ,          RV/	# )zekitty payload for a TTY that speaks it (dashboard PTY falls through); only kitty is grid-safe in Ink.)Ú	constantsÚrender©ÚPetRendererÚrender_modeÚautoÚkittyN)Úmoderí   )Úimage_idÚgraphicsÚimageIdÚcolorrW  r²   ÚplaceholderÚframesÚframeMsrí   )rD   rl  )Ú	agent.petrg  rh  Úagent.pet.renderrj  r)   rK   r¤   Údetect_terminal_graphicsÚkitty_image_idrØ   rc  Úkitty_payloadÚkitty_color_hexÚLOOP_MSrÂ  rv  )
rÁ   re  r1  rí   rg  rh  rj  Ú
configuredro  rÈ   s
   &&&&      r   Ú_pet_kitty_cellsr~  ó  s  € ç+Ý,Ü�W—[‘[ °Ó7×AÐA¸6ÓB×HÑHÓJ€JØ-7¸<Ô-Gˆ×'Ñ'Ô)ÈZÐ\cÔcÙØ×$Ñ$ S§X¡XÓ.€Háœ#˜cŸo™oÓ.°WÀEÔJ×XÑXÐY^ÐXÓr€GßÙØ˜ ¨H°g¸v×?UÑ?UÐV^Ó?_Ø�G˜F•O V¨W°V­_¸mÈWÐUbÕMcØ�g˜hÕ'¨°I×4EÑ4EÌÈAÌsÐSZÐ[cÕSdÓOe×OjÐOjÐijÓHkÕ4kØ�Uðð r   z	pet.cellsc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ &ñ &”4ð &œDñ &r   c                ó(  € ^ RI HpHp ^ RIHp \        4       pRp\        VP                  R4      RR7      '       d5   TP                  \        VP                  RR4      ;'       g    R4      4      pVe   VP                  '       g   \        V RR/4      # \        VP                  R	4      ;'       g!    VP                  P                  P                  4      p\        VP                  R
VP                   4      ;'       g    VP                   4      p\#        VP                  R4      ;'       g    ^ 4      ;'       g"    VP%                  W…P                  R^ 4      4      p	RRRVP&                  RVP(                  R	V/p
VP                  R4      '       d%   \+        WeWx4      ;p'       d   \        V / V
CVC4      # V! \        VP,                  4      RW‰R7      pVP/                  V4      ;'       g    ^p\1        V4       UUUUu. uFB  pVP3                  W~V	R7       UUUu. uF  qÿ UUu. uF  w  pp. VOVONK  	  uppNK  	  upppNKD  	  ppppp\        V / V
CRV	RVP4                  \7        ^V4      ,          RVR
V/C4      # u uppi u upppi u uppppi )zfHalf-block cell frames (``[tr,tg,tb,ta, br,bg,bb,ba]``) for one pet ``state``; ``cols``, ``graphics``.)rg  Ústoreri  Nrì   F©rH   rØ   rD   r1  rí   rW  Úunicode_colsTr`  rp  Úunicode)rn  rí   rƒ  ©rW  ru  rt  )rv  rg  r�  rw  rj  rÅ   rQ   rK   Úresolve_active_petr)   rë   râ   ÚPetStateÚIDLErä   r¥  ÚDEFAULT_SCALEr5   Úresolve_colsrØ   ra  r~  rc  Úframe_countÚrangeÚcellsr|  rÂ  )r   r	   rg  r�  rj  re  rÁ   r1  rí   rW  Úbaserm  ÚrendererÚcountÚir”   ÚtopÚbottomrt  s   &&                 r   r�  r�    sB  € ÷ +Ý,ÜÓ €GØ
€CÜ�w—{‘{ 9Ó-°u×=Ó=Ø×&Ñ&¤s¨7¯;©;°v¸rÓ+B×+HÐ+HÀbÓ'IÓJˆØ
‚{˜#Ÿ*Ÿ*˜*Ü�3˜ EÐ*Ó+Ð+Ü�—
‘
˜7Ó#×DÐD y×'9Ñ'9×'>Ñ'>×'DÑ'DÓE€EÜ�'—+‘+˜g y×'>Ñ'>Ó?×ZÐZÀ9×CZÑCZÓ[€EÜˆv�z‰z˜&Ó!×&Ð& QÓ'×hÐh¨9×+AÑ+AÀ%ÏÉÐUcÐefÓIgÓ+h€DØ�t˜V S§X¡X¨}¸c×>NÑ>NÐPWÐY^Ð_€DØ‡z�z�*×ÒÔ,<¸SÈ5Ó,XÐ#X 5Ö#XÜ�3Ð)˜4Ð) 5Ð)Ó*Ð*Ùœ3˜sŸ™Ó/°iÀuÔ`€HØ× Ñ  Ó'×,Ð,¨1€Eä˜U”|ö%Ù#�!ð FNÇ^Á^ÐTYÐcgÀ^ÔEhÕiÑEh¸c°SÔ9±S¡M S¨&��#�˜“±SÕ9ÑEhÖiÙ#ð ó %äˆsð %�tð %˜V T¨9°i×6GÑ6GÌ#ÈaÐQVË-Õ6WÐYaÐciØ˜eñ%ó &ð &ùó :ùÔiùõ %s*   Ç?J
È	JÈ$I?È6JÈ>	J
É?JÊJ
zpet.galleryr\  Úpetsc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ Uñ U”4ð UœDñ Ur   c                óª  a€ \        VP                  R4      4      p^ RIHp \	        4       pVP                  4        Uu/ uF  qUP                  VbK  	  pp. p ^ RIHpH	p	 V'       d   V	! 4        V'       d   . MV! 4        F‰  p
TP                  RV
P                  RV
P                  RV
P                  V9   RV
P                  RR	V
P                  9   R
V
P                  V9   ;'       d    WjP                  ,          P                  /4       K‹  	  V Uu0 uF  qÌR,          kK  	  upoVP#                  V3R lVP%                  4        4       4       \'        T R\)        VP                  R4      RR7      R\+        VP                  RR4      ;'       g    R4      RV/4      # u upi   \         d!   p\        P!                  RT4        Rp?L»Rp?ii ; iu upi )zgPetdex gallery + local install state (installed-only offline); ``localOnly`` skips the remote manifest.Ú	localOnly©r�  )Úfetch_manifestÚprefetchrØ   r`  Ú	installedÚspritesheetUrlÚcuratedz	/curated/Ú	generatedz%pet.gallery manifest fetch failed: %sNc              3   óz   <"  € T F0  w  rVS9  g   K  R VRVP                   RRRRRVP                  /x € K2  	  R# 5i)rØ   r`  r›  Trœ  rD   rž  N)ra  rž  )r.  rØ   rÁ   Úseens   &  €r   r1  rÃ  5  sJ   øé € ð @ñ +‰IˆD¨d¸$Ñ.>ô	%ˆ��} c×&6Ñ&6¸ÀTÐK[Ð]_Ø	�c—m‘mõ	%ã*ùs   ƒ;“(;rì   Fr‚  r\  rD   r”  )r*   rK   rv  r�  rÅ   Úinstalled_petsrØ   Úagent.pet.manifestr™  rš  Úappendra  Úspritesheet_urlrž  rƒ   rÍ   rÎ   Úextendr¸   râ   rQ   r)   )r   r	   Ú
local_onlyr�  re  Úpr›  Úgalleryr™  rš  ÚentryrÏ   Úitemr   s   &&           @r   r�  r�    s¢  ø€ ô �f—j‘j Ó-Ó.€JÝÜÓ €GØ$)×$8Ñ$8Ô$:Ó;Ñ$:˜q—‘˜’Ñ$:€IÐ;Ø€GðCß?çÙŒJß%‘R©>Ó+;Ò;ˆEØ�N‰NØ˜Ÿ
™
 M°5×3EÑ3EÀ{ÐTY×T^ÑT^ÐbkÑTkØ  %×"7Ñ"7à˜;¨%×*?Ñ*?Ñ?Ø˜UŸZ™Z¨9Ñ4×XÐX¸Ç:Á:Õ9N×9XÑ9XðZö [ñ <ñ &-Ó-¡W˜T��LˆL¡WÑ-€DØ‡N�Nô @ð #Ÿ™Ô*ó@ô @ô ˆs�Y¤°·±¸IÓ0FÐPUÔ VØœs 7§;¡;¨v°rÓ#:×#@Ð#@¸bÓAÀ6È7ðTó Uð Uùò+ <øô ô CÜ�‰Ð<¸c×BÑBûðCüâ-s0   ¾FÁF" Á7A/F" Ã'&F" ÄGÆ"GÆ-GÇGz
pet.select)rØ   c                ó<   € V ^8„  d   QhR\         R\        R\         /# ©r   r	   rØ   r
   rI   )r   s   "r   r   r   >  s&   € ÷ 
Qñ 
Q”4ð 
Qœsð 
Q¤tñ 
Qr   c           	     óø   € ^ RI Hp ^ RIHp ^ RIHp  VP                  V4      pT! T4       \        T RR	R
TRTP                  /4      #   TP                  T3 d   p\        T RRT RT 24      u Rp?# Rp?ii ; i)zPAdopt a pet: install (if needed) + activate; writes ``display.pet.*`` to config.r˜  )ÚManifestError)Ú_set_activerá   zcould not adopt 'z': Nró   TrØ   r`  )rv  r�  r¢  r®  Úhermes_cli.petsr¯  Úinstall_petÚPetStoreErrorr¹   râ   ra  )r   r	   rØ   r�  r®  r¯  rÁ   rÏ   s   &&&     r   r�  r�  =  s‰   € õ  Ý0Ý+ðCØ×Ñ Ó%ˆñ �ÔÜˆs�T˜4 ¨¨}¸c×>NÑ>NÐOÓPÐPøð ×Ñ Ð/ô CÜ�C˜Ð!2°4°&¸¸C¸5ÐAÓBÕBûðCús   ”A	 Á	A9ÁA4Á.A9Á4A9ú
pet.removec                ó<   € V ^8„  d   QhR\         R\        R\         /# r¬  rI   )r   s   "r   r   r   L  s!   € ÷ 3ñ 3”4ð 3œsð 3¤tñ 3r   c                ót   € ^ RI Hp ^ RIHp VP	                  V4      p\        RWB4       \        V RVRV/4      # )zOUninstall a pet (delete its directory); if it was active, turn the display off.r˜  )Ú_clear_active_ifr³  ró   rØ   )rv  r�  r°  r¶  Ú
remove_petÚ_pet_config_followuprâ   )r   r	   rØ   r�  r¶  Úremoveds   &&&   r   r�  r�  K  s;   € õ  Ý0Ø×Ñ˜tÓ$€GÜ˜Ð'7Ô>Üˆs�T˜7 F¨DÐ1Ó2Ð2r   c                ó(   € V ^8„  d   QhR\         RR/# )r   rÉ   r
   Nrk   )r   s   "r   r   r   U  s   € ÷ ?ñ ?œsð ?°$ñ ?r   c                ór   €  V! V!   R#   \          d"   p\        P                  RY4        Rp?R# Rp?ii ; i)z[Best-effort ``hermes_cli.pets`` active-slug update after a store op that already succeeded.z%s config update failed: %sN)rƒ   rÍ   rÎ   )rÉ   r   ÚargsrÏ   s   &&* r   r¸  r¸  U  s0   € ð?Ù
ˆDŒ	øÜô ?Ü�‰Ð2°D×>Ò>ûð?ús   ‚
 Š6•1±6c                ó0   € V ^8„  d   QhR\         R\        /# )r   Údatar
   )Úbytesr)   )r   s   "r   r   r   ]  s   € ÷ ;ñ ;Œuð ;œñ ;r   c                 óJ   € ^ RI pVP                  V 4      P                  R4      # )r;   NÚascii)Úbase64Ústandard_b64encodeÚdecode)r¾  rÂ  s   & r   Ú_b64rÅ  ]  s!   € ÛØ×$Ñ$ TÓ*×1Ñ1°'Ó:Ð:r   z
pet.exportc                ó<   € V ^8„  d   QhR\         R\        R\         /# r¬  rI   )r   s   "r   r   r   c  s&   € ÷ Qñ Q”4ð Qœsð Q¤tñ Qr   c                ój   € ^ RI Hp VP                  V4      w  rE\        V RRRVR\	        V4      /4      # )uV   Export an installed pet as a re-importable ``.zip`` â†’ ``{ok, filename, zipBase64}``.r˜  ró   TÚfilenameÚ	zipBase64)rv  r�  Ú
export_petrâ   rÅ  )r   r	   rØ   r�  rÈ  r¾  s   &&&   r   r�  r�  b  s7   € õ  Ø×%Ñ% dÓ+�N€HÜˆs�T˜4 ¨X°{ÄDÈÃJÐOÓPÐPr   ú
pet.renamec                ó<   € V ^8„  d   QhR\         R\        R\         /# r¬  rI   )r   s   "r   r   r   k  s&   € ÷ 
Iñ 
I”4ð 
Iœsð 
I¤tñ 
Ir   c           	     óò   € \        VR4      ;p'       g   \        V RR4      # ^ RIHp VP	                  W#4      ;p'       g   \        V RR4      # WR8w  d   ^ RIHp \        RWbV4       \        V R	R
RVRV/4      # )zVRename a pet's display name + realign its slug/dir; follows the active slug in config.r'   rà   úmissing namer˜  rá   zpet.rename failed)Ú_rename_active_ifrË  ró   TrØ   r`  )	rN   r¹   rv  r�  Ú
rename_petr°  rÏ  r¸  râ   )r   r	   rØ   r'   r�  Únew_slugrÏ  s   &&&    r   r�  r�  j  s~   € ô ˜v vÓ.Ð.ˆDÖ.Ü�C˜˜~Ó.Ð.ÝØ×(Ñ(¨Ó4Ð4ˆHÖ4Ü�C˜Ð2Ó3Ð3ØÔÝ5Ü˜\Ð+<ÀHÔMÜˆs�T˜4 ¨°=À$ÐGÓHÐHr   z	pet.thumbc                 ó"   € R RR\        V R4      /# )ró   FrØ   )rN   rb   s   &r   r"   r"   x  s   € ¸tÀUÈFÔT^Ð_eÐgmÓTnÑ>or   )rØ   r×   c                ó<   € V ^8„  d   QhR\         R\        R\         /# r¬  rI   )r   s   "r   r   r   y  s&   € ÷ bñ b”4ð bœsð b¤tñ br   c                óì   € ^ RI Hp TP                  T\        VP	                  R4      ;'       g    R4      R7      ;p'       g   \        V RRRV/4      # \        V RRRVR	R
\        V4      ,           /4      # )zfIdle-frame PNG data URI for the picker (desktop CSP breaks CDN ``<img>``); ``url``: not-yet-installed.r˜  ÚurlrD   )Ú
source_urlró   FrØ   TÚdataUrizdata:image/png;base64,)rv  r�  Úthumbnail_pngr)   rK   râ   rÅ  )r   r	   rØ   r�  r¾  s   &&&  r   r�  r�  x  sv   € õ  Ø×'Ñ'¨¼¸V¿Z¹ZÈÓ=N×=TÐ=TÐRTÓ9UÐ'ÓVÐVˆDÖVÜ�3˜˜u f¨dÐ3Ó4Ð4Üˆs�T˜4 ¨¨yÐ:RÔUYÐZ^ÓU_Õ:_Ð`ÓaÐar   zpet.disablec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ‚  ó   € ÷ "ñ "”4ð "œDñ "r   c                ó:   € ^ RI Hp V! R4       \        V RR/4      # )z6``display.pet.enabled=false`` from the desktop picker.)Ú_set_enabledFró   T)r°  rÜ  râ   )r   r	   rÜ  s   && r   r�  r�  �  s    € õ -Ù�ÔÜˆs�T˜4�LÓ!Ð!r   z	pet.scalec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Š  s   € ÷ Sñ S”4ð SœDñ Sr   c                óŠ   € ^ RI Hp V! VP                  R4      4      w  r4V'       d   \        V RV4      # \	        V RRRV/4      # )zQPersist ``display.pet.scale`` (clamped to engine bounds) from the desktop slider.)Úset_pet_scalerí   rà   ró   T)r°  rß  rK   r¹   râ   )r   r	   rß  rí   r   s   &&   r   r�  r�  ‰  sB   € õ .Ù˜vŸz™z¨'Ó2Ó3�J€Eß#&Œ4��T˜3ÓÐR¬C°°d¸DÀ'È5Ð5QÓ,RÐRr   z
pet.cancelc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ’  rÚ  r   c                ó\   € \        VR4      ;p'       d   \        V4       \        V RR/4      # )z`Stop an in-flight generate/hatch by token (idempotent; off the pool so it lands mid-generation).rÒ   ró   T)rN   Ú_pet_cancel_requestrâ   )r   r	   rÒ   s   && r   r�  r�  ‘  s/   € ô ˜6 7Ó+Ð+€uÖ+Ü˜EÔ"Üˆs�T˜4�LÓ!Ð!r   zpet.generate.statusÚ	availableÚ	providers)rÙ   r×   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   š  s   € ÷ Fñ F”4ð FœDñ Fr   c                óÚ   € ^ RI HpHpHp R. re V! RR7        V! 4       p\        V RVRV/4      #   T d    Rp L#i ; i  \         d!   p\
        P                  RT4        Rp?LERp?ii ; i)	zTWhether pet generation is possible: a reference-capable image backend is configured.)ÚGenerationErrorÚlist_sprite_providersÚresolve_providerT©Úrequire_referencesFzpet provider list failed: %sNrã  rä  )Úagent.pet.generate.imagegenrç  rè  ré  rƒ   rÍ   rÎ   râ   )r   r	   rç  rè  ré  rã  rä  rÏ   s   &&      r   r�  r�  ™  s}   € ÷ eÑdØ ˆyðÙ¨DÕ1ð:Ù)Ó+ˆ	ô ˆs�[ )¨[¸)ÐDÓEÐEøð ô ØŠ	ðûô ô :Ü�‰Ð3°S×9Ñ9ûð:ús!   �	0 ™? °	<»<¿A*Á
A%Á%A*c                ó0   € V ^8„  d   QhR\         R\        /# )r   r	   rë  r¡   )r   s   "r   r   r   ©  s   € ÷ bñ bœtð b¼Dñ br   c               óL   € ^ RI Hp \        V R4      pV'       d
   V! WR7      # R# )z]Picker-chosen ``params.provider`` resolved up front (a bad pick fails fast, not mid-fan-out).)ré  rQ  )rë  ÚpreferN)rì  ré  rN   )r	   rë  ré  r'   s   &$  r   Ú_pet_pick_providerrð  ©  s&   € å<Ü�f˜jÓ)€DßSWÑÐ/AÔOÐaÐ]aÐar   zpet.generate)rÙ   c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ±  s   € ÷ 5cñ 5c”4ð 5cœDñ 5cr   c                ób  aaaaa€ \        VR4      p\        VR4      pV'       g   V'       g   \        V RR4      # \        ^\        ^\	        VR^4      ;'       g    ^4      4      o^ RIo^ RIHp ^ RIH	p \        4       p\        V4       \        P                  4       P                  R	,          o\        S4       VS,          oSP!                  R
R
R7       RpV'       d    \#        VS4      p \+        V\-        V4      R7      p	. o\/        RRSRS/R4       R TTTTT3R llp
 T! T;'       g    RS\        TRR4      TYšT3R lR7       \1        S4      p\3        S4       T'       g	   S'       g   \        T RT'       d   R4      # R4      # \5        T RR
RSR\7        SR R7      /4      #   \$         d"   p\'        T SR\)        T4      4      u Rp?# Rp?ii ; i  T d"   p\'        T SR\)        T4      4      u Rp?# Rp?ii ; i  T d"   p\'        T SR\)        T4      4      u Rp?# Rp?ii ; i)uÆ   Candidate base looks for a new pet (draft step; worker pool): ``prompt`` (or a ``referenceImage``
data URL), ``count`` (â‰¤4), ``style``, ``provider`` â†’ ``{ok, token, drafts:[{index, dataUri}]}``.ÚpromptÚreferenceImagerà   zmissing promptr�  N)Úgenerate_base_drafts©rç  :Né   NT©ÚparentsÚexist_okrê  rá   úpet.generate.progressrÒ   zpet.generate initc                ó(   € V ^8„  d   QhR\         RR/# )r   Úindexr
   N©r5   )r   s   "r   r   Ú_.<locals>.__annotate__Ñ  s   € ÷ 
+ñ 
+œð 
+ dñ 
+r   c                 ó  <€ SR V  R2,          p SP                  W4       \        V4      pSP                  RT RT/4       \        RRS	RT RTRS/R	4       R#   \         d"   p\        P	                  RY4        Rp?R# Rp?ii ; i)
údraft-ú.pngz pet.generate draft %d failed: %sNrý  r×  rû  rÒ   r�  zpet.generate progress)ÚcopyfileÚ_pet_png_data_urirƒ   rÍ   rÎ   r£  rÐ   )
rý  r  ÚdestÚdata_urirÏ   r�  ÚoutÚshutilÚstagerÒ   s
   &&   €€€€€r   Ú	_on_draftÚ_.<locals>._on_draftÑ  s�   ø€ Ø˜ ˜w dÐ+Õ+ˆð	Ø�O‰O˜CÔ&Ü(¨Ó.ˆHð 	�
‰
�G˜U I¨xÐ8Ô9ÜÐ)¨G°U¸GÀUÈIÐW_ÐahÐjoÐ+pØ)ö	+øô	 ô 	Ü�L‰LÐ;¸UÔHÝûð	ús   �A ÁBÁ#A?Á?Bz"a pet based on the reference imageÚstylerl  c                  ó   <€ \        S 4      # r   ©Ú_pet_is_cancelled)rÒ   s   €r   r"   rã  ß  s   ø€ ÔWhÐinÔWor   )rl  r  Úreference_imagesrQ  Úon_draftÚis_cancelledzgeneration cancelledz$generation produced no usable draftsró   Údraftsc                 ó   € V R ,          # )rý  r   )Úds   &r   r"   rã  æ  s   € ÐUVÐW^ÖU_r   )rG   )rN   r¹   rÂ  ÚminrW   r  Úagent.pet.generaterõ  rì  rç  Ú_pet_gen_rootÚ_pet_gen_sweepr^   r_   r`   Ú_pet_cancel_armÚmkdirÚ#_pet_reference_images_from_data_urlrV   rÖ   r)   rð  r*   rÐ   r  rÕ   râ   Úsorted)r   r	   ró  Úref_rawrõ  rç  rÎ  r  rÏ   Úspriter
  Ú	cancelledr�  r  r  r	  rÒ   s   &&          @@@@@r   r�  r�  °  sù  ü€ ô ˜ Ó)€FÜ˜Ð!1Ó2€GßŸ'Ü�C˜Ð/Ó0Ð0Ü�”3�qœ* V¨W°aÓ8×=Ð=¸AÓ>Ó?€EÛÝ7Ý;Ü‹?€DÜ�4Ôä�J‰J‹L×Ñ˜SÕ!€EÜ�EÔØ�5�L€EØ	‡K�K˜ t€KÔ,ØÐßð	>ÜBÀ7ÈEÓRÐð:Ü# F¼tÐDTÓ?UÔVˆð €CäÐ%¨°¸ÀÐ'GÐI\Ô]÷
+ô 
+ð:Ù˜V×KÐKÐ'KÈuÜ#-¨f°g¸vÓ#FÐYiØ&,ÔOoõ	qô
 " %Ó(€IÜ˜ÔßŸÜ�C˜¿Ð5ÓoÐoÐHnÓoÐoÜˆs�T˜4 ¨%°¼6À#ÑK_Ô;`ÐaÓbÐbøô? ô 	>Ü! # u¨d´C¸³HÓ=Õ=ûð	>ûð ô :Ü˜c 5¨$´°C³Ó9Õ9ûð:ûð* ô :Ü˜c 5¨$´°C³Ó9Õ9ûð:ús`   Ã"F, Ã/G Ä&
H Ä1H Æ,GÆ7GÇGÇGÇHÇ"G>Ç8HÇ>HÈH.ÈH)È#H.È)H.z	pet.hatchc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ê  s   € ÷ (añ (a”4ð (aœDñ (ar   c                óŒ  a€ \        VR4      \        VR4      r2V'       d	   V'       g   \        T RV'       g   R4      # R4      # \        VR4      ;'       g    To^ RIHp ^ RIHp ^ R	IHp \        4       V,          R
\        VR^ 4       R2,          pVP                  4       '       g   \        V RR4      #  \        VRR7      p\        S4       TP                  T4      p
R R lp T! YzT\        TP                  R4      ;'       g    R4      \        TP                  R4      ;'       g    T4      \        TRR4      TTT3R lR7	      p \!        S4       TP#                  TP$                  4      p\'        T RRRTP$                  RTP(                  RTP*                  P                  R. 4      RT'       d   \-        T\/        4       R 7      /4      # / /4      #   T d!   p	\        T R\        T	4      4      u Rp	?	# Rp	?	ii ; i  T d,   p	\        T R\        T	4      4      u Rp	?	\!        S4       # Rp	?	ii ; i  \!        S4       i ; i)!u·   Turn a base draft (``token`` + ``index``) into a full pet â€” installed but NOT active (``pet.select``
adopts, ``pet.remove`` discards) â†’ ``{ok, slug, displayName, warnings, pet}``.rÒ   r'   rà   zmissing tokenrÎ  ÚcancelTokenr˜  )Ú	hatch_petrö  r  rý  r  u    draft expired â€” generate againTrê  rá   Nc                ó4   € V ^8„  d   QhR\         R\         RR/# )r   rÇ   Údetailr
   Nrk   )r   s   "r   r   rÿ  ÿ  s&   € ÷ Gñ GœCð G¬ð G°ñ Gr   c                 ó¢   € R V RV/pV R8X  d5   VP                  R4      ^8X  d   VP                  R4      w  r4pR RRVRVRV/p\        RVR4       R	# )
rÇ   r&  r”   Ú:r1  Údoner=  zpet.hatch.progresszpet.hatch progressN)r�  ÚsplitrÐ   )rÇ   r&  rÈ   r1  r)  r=  s   &&    r   Ú_on_progressÚ_.<locals>._on_progressÿ  s^   € à  %¨°6Ð:ˆØ�EŒ>˜fŸl™l¨3Ó/°1Ô4Ø!'§¡¨cÓ!2ÑˆE˜Ø  w°°v¸tÀWÈeÐTˆGÜÐ&¨Ð1EÖFr   ÚdescriptionrD   ró  r  rl  c                  ó   <€ \        S 4      # r   r  )Úcancel_tokens   €r   r"   rã  
  s   ø€ Ô;LÈ\Ô;Zr   )	Ú
base_imagerØ   ra  r-  Úconceptr  rQ  Úon_progressr  ró   rØ   r`  ÚwarningsrÁ   rV  )rN   r¹   rv  r�  r  r$  rì  rç  r  rW   Úis_filerð  r)   r  Úunique_slugrK   rÕ   Úload_petrØ   râ   ra  Ú
validationr[  Ú_pet_config_scale)r   r	   rÒ   r'   r�  r$  rç  rŽ  r  rÏ   rØ   r+  rþ   rÁ   r/  s   &&            @r   r�  r�  é  s	  ø€ ô ˜V WÓ-¬z¸&À&Ó/Iˆ4ßŸÜ�C˜·e˜ÓPÐPÀÓPÐPä˜f mÓ4×=Ð=¸€LÝÝ,Ý;Ü‹?˜UÕ" v¬j¸ÀÈ!Ó.LÐ-MÈTÐ%RÕR€DØ�<‰<�>Š>Ü�C˜ÐAÓBÐBð)Ü# F¸tÔDˆô �LÔ!Ø×Ñ˜TÓ"€DõGð*ÙØ°TÄsÈ6Ï:É:ÐVcÓKd×KjÐKjÐhjÓGkÜ˜Ÿ
™
 8Ó,×4Ð4°Ó5¼ZÈÐPWÐY_Ó=`ÐkqØ$Ô3Zô\‰ô 	˜LÔ)Ø
�.‰.˜Ÿ™Ó
%€CÜˆs�T˜4 ¨¯©°mÀV×EXÑEXØ ×!2Ñ!2×!6Ñ!6°zÀ2Ó!FØ×SVÔ/°Ô;LÓ;NÔOð`ó að aà\^ð`ó að aøð- ô )Ü�C˜œs 3›xÓ(Õ(ûð)ûð" ô )Ü�C˜œs 3›xÓ(Ô(ä˜LÕ)ûð)ûô 	˜LÕ)úsU   Â7G Ã'AH Ä+H ÇG>ÇG9Ç3G>Ç9G>ÈH3ÈH.ÈH3ÈH6 È.H3È3H6 È6Ic                óX   € V ^8„  d   QhR\         R\         R\         R\         R\        RR/# )r   r'   ÚmoduleÚbuilderÚ
serializerrë  r
   NrÊ   )r   s   "r   r   r     s8   € ÷ 	,ñ 	,œð 	,¤Sð 	,´3ð 	,ÄCð 	,ÔSWð 	,Ð\`ñ 	,r   c                óB   aaaa€ \        V 4      R VVVV3R ll4       pR# )z½Read-only view RPC (no scope required): ``serializer(module.builder())``, ``fallback`` on any error.
The view module stays a lazy import (startup budget); the serializer is a server global.c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   Ú#_billing_view.<locals>.__annotate__  s   € ÷ ,ñ ,”tð ,¤ñ ,r   c           
      óÊ   <€  ^ RI Hp \        V \        4       S,          ! \	        V! S4      S4      ! 4       4      4      #   \
         d    \        T \        S4      4      u # i ; i)r;   )Úimport_module)Ú	importlibrA  râ   Úglobalsr§  rƒ   r   )r   r	   rA  r;  rë  r:  r<  s   && €€€€r   r�  Ú_billing_view.<locals>._  sT   ø€ ð	,Ý/Ü�sœG›I jÖ1´'¹-ÈÓ:OÐQXÔ2YÓ2[Ó\Ó]Ð]øÜô 	,Ü�sœD ›NÓ+Ò+ð	,ús   ƒ;? ¿ A"Á!A"N©r-   )r'   r:  r;  r<  rë  r�  s   &ffff r   Ú_billing_viewrF    s    û€ ô ˆDƒ\÷,ò ,ó ò,r   zbilling.statec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   &  s   € ÷ ñ ”4ð œDñ r   c                óô   €  ^ RI HpHp ^ RIHp V! 4       '       d   \        V \        V! RR7      RR7      4      # \        V \        V! 4       4      4      #   \         d    \        T RRRRR	RR
R/4      u # i ; i)zåRead-only billing view (no scope required); fail-open. The Nous free tier has no account to
bill, so its state is answered locally (``free_tier_account`` set, ``logged_in`` false) without a portal
round-trip that could only fail.)ÚBillingStateÚbuild_billing_state)Úhas_free_tier_accountF)Ú	logged_inT)Úfree_tier_accountró   rL  rM  rô   zcould not load billing state)Úagent.billing_viewrI  rJ  Úhermes_cli.anon_authrK  râ   Ú_serialize_billing_staterƒ   )r   r	   rI  rJ  rK  s   &&   r   r�  r�  %  s{   € ð
ßHÝ>Ù ×"Ò"Ü�sÔ4±\ÈEÔ5RÐfjÔkÓlÐlÜ�3Ô0Ñ1DÓ1FÓGÓHÐHøÜô Ü�3˜˜t [°%Ð9LÈeÐU\Ð^|Ð}Ó~Ò~ðús   ‚A �A »A ÁA7Á6A7z
usage.barszagent.billing_usageÚbuild_usage_modelÚ_serialize_usage_modelró   zsubscription.statezagent.subscription_viewÚbuild_subscription_stateÚ_serialize_subscription_staterL  rô   z!could not load subscription statezsubscription.previewc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   <  s   € ÷ lñ l”4ð lœDñ lr   c                óŽ   aaa€ ^ RI Ho ^ RIHo VP	                  R4      ;o'       g   \        V R4      # \        V VVV3R l4      # )uS   POST /api/billing/subscription/preview â†’ chargeless effect quote. billing:manage.)Ú(subscription_change_preview_from_payload)Úpost_subscription_previewÚsubscription_type_idú subscription_type_id is requiredc                  ó4   <€ \        S! S ! SR 7      4      4      # )©rY  )Ú_serialize_subscription_preview)rX  rW  Útier_ids   €€€r   r"   rã  B  s   ø€ Ô&EÙ0Ñ1JÐ`gÔ1hÓiô'kr   )Úagent.subscription_viewrW  rõ   rX  rK   rû   r÷   )r   r	   rX  rW  r^  s   &&@@@r   r�  r�  ;  sF   ú€ õ QÝAØ—z‘zÐ"8Ó9Ð9ˆGÖ9Ü Ð%GÓHÐHÜ˜ö kó lð lr   ÚinvalidrÓ   Ú
idempotentc                óH   € V ^8„  d   QhR\         R\         R\         R\        /# )r   r'   rÓ   rô   ra  r(   )r   s   "r   r   r   F  s/   € ÷ ^ñ ^œð ^¼cð ^Ìsð ^Ü#ñ^r   c               óF   aaaaa€ \        V 4      R VVVVV3R ll4       pR# )u:  Portal write route on ``hermes_cli.nous_billing`` (lazy; tests patch its functions): ``invalid(params)``
â†’ ``_billing_invalid(message, error)``; ``call(nb, params, key)`` performs the request. ``idempotent``
mints ``idempotency_key`` if absent and echoes it (also on error) so the TUI retries the SAME operation.c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   Ú$_billing_route.<locals>.__annotate__L  s   € ÷ 	^ñ 	^”tð 	^¤ñ 	^r   c                 óð   <aaaa€ ^ RI Ho S	e   S	! S4      '       d   \        V S
SR7      # R;ooS'       d+   ^ RIHp SP                  R4      ;'       g    V! 4       oRS/o\        V VVVVV3R lSR7      # )r;   N)rô   )Únew_idempotency_keyrE  c                  ó:   <€ S ! SSS4      S;'       g    / ,          # r   r   )Úcallrð   rG   Únbr	   s   €€€€€r   r"   Ú+_billing_route.<locals>._.<locals>.<lambda>U  s   ø€ ©$¨r°6¸3Ó*?À5Ç;À;ÈBÖ*Or   ©rð   )rõ   Únous_billingrû   rN  rg  rK   r÷   )r   r	   rg  rð   rG   rj  ri  rô   ra  r`  rÓ   s   &f @@@€€€€€r   r�  Ú_billing_route.<locals>._K  sl   ü€ å,ØÒ¡7¨6§?¢?Ü# C¨¸Ô>Ð>ØÐˆˆeßÝ>Ø—*‘*Ð.Ó/×HÐHÑ3FÓ3HˆCØ&¨Ð,ˆEÜ˜S×"OÐ"OÐW\Ô]Ð]r   NrE  )r'   ri  r`  rÓ   rô   ra  r�  s   &fdddd r   Ú_billing_routero  F  s#   ü€ ô
 ˆDƒ\÷	^ó 	^ó ò	^r   zsubscription.changec           
      óˆ   € \        V P                  VP                  R 4      \        VP                  R4      4      R7      4      # )rY  Úcancel)rY  rq  )r  Úput_subscription_pending_changerK   r*   ©rj  r§  Ú_ks   &&&r   r"   r"   Y  s>   € Ô8OÐPR×PrÑPrØŸ™Ð5Ó6¼tÀAÇEÁEÈ(ÃOÓ?Tð Qsó QVô 9Wr   c                 ój   € V P                  R 4      '       * ;'       d    V P                  R4      '       * # )rq  rY  r  ©r§  s   &r   r"   r"   [  s'   € ˜!Ÿ%™% ›/Ô)×OÐO°!·%±%Ð8NÓ2OÔ.OÐOr   z*subscription_type_id or cancel is required)r`  rÓ   zsubscription.resumec                 ó4   € \        V P                  4       4      # r   )r  Ú"delete_subscription_pending_changers  s   &&&r   r"   r"   _  s   € Ô!8¸×9^Ñ9^Ó9`Ô!ar   zsubscription.upgradec                 ób   € \        V P                  VP                  R 4      VR7      RRRRR7      # )rY  )rY  rE  rÑ  ÚtargetTierNameÚrecoveryUrlr8  )rÑ  Útarget_tier_nameÚrecovery_urlr8  )r  Úpost_subscription_upgraderK   ©rj  r§  rG   s   &&&r   r"   r"   b  s3   € ¼-Ø× Ñ °a·e±eÐ<RÓ6SÐehÐ ÓiØÐ&6À]Ð[cõ;er   c                 ó.   € V P                  R 4      '       * # r\  r  rv  s   &r   r"   r"   e  s   € ˜!Ÿ%™%Ð 6Ó7Õ7r   rZ  )r`  rÓ   ra  zbilling.chargec                 ó\   € \        V P                  VP                  R 4      VR7      RR7      # )Ú
amount_usd)r‚  rE  ÚchargeId©Ú	charge_id)r  Úpost_chargerK   r  s   &&&r   r"   r"   g  s&   € ´MØ‡N�N˜aŸe™e LÓ1À3€NÓGÐS]õ5_r   c                 ó(   € V P                  R 4      RJ # )r‚  Nr  rv  s   &r   r"   r"   i  s   € �a—e‘e˜LÓ)¨TÑ1r   zamount_usd is requiredzbilling.charge_statusc                 ó^   € \        V P                  VP                  R 4      4      RRRRR7      # )r…  rÑ  Ú	amountUsdÚ	settledAtr8  )rÑ  r‚  Ú
settled_atr8  )r  Úget_charge_statusrK   rs  s   &&&r   r"   r"   k  s*   € ¼-Ø×Ñ˜Ÿ™˜{Ó+Ó,°XÈ+ÐbmØõ;r   c                 ó.   € V P                  R 4      '       * # r„  r  rv  s   &r   r"   r"   m  s   € ¨A¯E©E°+Ó,>Õ(>r   zcharge_id is requiredÚinvalid_charge_id)r`  rÓ   rô   c                ó0   € V ^8„  d   QhR\         R\         /# )r   r§  r
   r   )r   s   "r   r   r   q  s   € ÷ ñ œð ¤tñ r   c                óž   € V P                  \        VP                  R4      4      VP                  R4      VP                  R4      R7       RR/# )zLPATCH /api/billing/auto-top-up. params: {enabled, threshold, top_up_amount}.rì   Ú	thresholdÚtop_up_amount)rì   r‘  r’  ró   T)Úpatch_auto_top_upr*   rK   )rj  r§  Ú_keys   &&&r   Ú_auto_reloadr•  q  sF   € à×Ñ¤ a§e¡e¨IÓ&6Ó!7À1Ç5Á5ÈÓCUØ'(§u¡u¨_Ó'=ð ô ?à�$ˆ<Ðr   zbilling.auto_reloadz(threshold and top_up_amount are requiredc                 ó^   € V P                  R 4      RJ ;'       g    V P                  R4      RJ # )r‘  Nr’  r  rv  s   &r   r"   r"   y  s,   €  §¡ {Ó!3°tÐ!;×!]Ð!]¸q¿u¹uÀ_Ó?UÐY]Ð?]Ð!]r   )rÓ   r`  zbilling.keep_going_on_creditsc                 óF   € \        V P                  VR ,          R7      4      # )rì   ©rì   )r  Úpatch_keep_going_on_creditsrs  s   &&&r   r"   r"   z  s/   € Ä-ÐPR×PnÑPnÐwxð  zCõ  xDÐPnó  QEô  CFr   c                 óJ   € \        V P                  R 4      \        4      '       * # r˜  )rÃ   rK   r*   rv  s   &r   r"   r"   {  s   € ¤Z°·±°iÓ0@Ä$Ó%GÕ!Gr   zenabled (bool) is requiredzbilling.step_upc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r     s   € ÷ >ñ >”4ð >œDñ >r   c                ód   a€ VP                  R4      ;'       g    RoV3R lp\        WRR/R7      # )u  billing:manage step-up device flow â†’ {ok, granted} (false when the server downscopes). Pooled (blocks
for minutes); URL/code reach the TUI via ``billing.step_up.verification`` (stdout is the RPC pipe) and the
browser opens TUI-side, never via the gateway's headless webbrowser.open.ro   rD   c                  óJ   <€ ^ RI Hp  V ! RV3R lR7      pRRR\        V4      /# )r;   )Ústep_up_nous_billing_scopeFc                 ó&   <€ \        R SRV RV/4      # )zbilling.step_up.verificationÚverification_urlÚ	user_code)rÌ   )rÕ  r3   rj   s   &&€r   r"   Ú!_.<locals>.call.<locals>.<lambda>‰  s   ø€ ¬eØ.°Ð6HÈ#È{Ð\`Ð5aô/cr   )Úopen_browserÚon_verificationró   TÚgranted)Úhermes_cli.authrž  r*   )rž  r¥  rj   s     €r   ri  Ú_.<locals>.call…  s/   ø€ Ý>Ù,Øôcôdˆð �d˜I¤t¨G£}Ð5Ð5r   r¥  Frl  )rK   r÷   )r   r	   ri  rj   s   && @r   r�  r�  ~  s4   ø€ ð
 �*‰*�\Ó
"×
(Ð
( b€Cõ6ô ˜¨9°eÐ*<Ô=Ð=r   c                óH   € V ^8„  d   QhR\         R\         R\        R\         /# )r   r   r	   rG   r
   rI   )r   s   "r   r   r   �  s(   € ÷ =ñ =œð =¤tð =´#ð =¼$ñ =r   c           	     óN  € V'       g   / # \        V 4      ;_uu_ 4       pVe   \        W24      uuRRR4       # \        V4      ;_uu_ 4       pV'       d   \        WB4      M/ uuRRR4       uuRRR4       #   + '       g   i     M; i RRR4       R#   + '       g   i     R# ; i)z`Stored row for ``key``: the live session's bound profile db first, else params.profile / launch.N)r=   Ú_try_get_sessionr>   )r   r	   rG   r@   Údb2s   &&&  r   Ú_status_rowr¬  �  ss   € çØˆ	Ü	�W×	Ô	 ØŠ>Ü# BÓ,÷ 
Ò	ô ˜× Ô  Cß14Ô# CÔ-¸"÷ !Ñ ÷ 
Ò	÷ !× úÐ ÷ 
×	×	Ò	ús(   žB¸BÁA5	Á 
BÁ5BÂ BÂB$	c                ó0   € V ^8„  d   QhR\         R\        /# )r   rG   r
   rÊ   )r   s   "r   r   r   ›  s   € ÷ ñ œcð ¤dñ r   c                 óº   € \         P                  ! \        4      ;_uu_ 4        V P                  V4      ;'       g    / uuR R R 4       #   + '       g   i     / # ; ir   )r�   r‚   rƒ   r!  )r@   rG   s   &&r   rª  rª  ›  s;   € Ü	×	Ò	œY×	'Õ	'Ø�~‰~˜cÓ"×(Ð( b÷ 
(×	'×	'Ñ	'à€Iús   £A	Á	A	zsession.statusc                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   ¢  s!   € ÷ 2ñ 2”4ð 2¤$ð 2¬4ñ 2r   c                 óð  € ^ RI HpHp VP                  R4      ;'       g    VP                  R4      ;'       g    Rp\	        V4      pVP                  R4      pVP                  R4      '       d   RMTpT! YX\        W!V4      VP                  R4      ;'       g    \        VRR4      VP                  R	4      ;'       g    \        VR	R4      \        V4      P                  R
4      \        VP                  R4      4      VP                  R4      R7      p	\        \        V4      4      p
RR.V! V	RR4      OV
'       d   RV
R,           2.M. OV! V	RRRRRR4      Op\        V RRP                  V4      /4      # )r;   )Úbuild_status_fieldsÚstatus_linesr<  ro   rD   r‡   Ú_compute_host_activeNr  rQ  r=  rg  re   )r  rQ  rt   Úagent_runningr4  zHermes TUI StatusÚpathz	Project: r'   r—   ÚcreatedÚlast_activityrt   r´  r<  Ú
)Úhermes_cli.status_reportr±  r²  rK   rP  r¬  r§  r?  r*   rŽ   Ú_display_session_cwdrâ   Újoin)r   r	   r   r±  r²  rG   ÚmirrorÚ
live_agentr‡   r   r‰   Úliness   &&&         r   r�  r�  ¡  sf  € çJØ
�+‰+�mÓ
$×
FÐ
F¨¯
©
°<Ó(@×
FÐ
FÀB€CÜ˜gÓ&€Fð —‘˜WÓ%€JØ—K‘KÐ 6×7Ò7‰D¸Z€EÙ Ø”K °Ó5Ø�j‰j˜Ó!×GÐG¤W¨Z¸À$Ó%GØ—‘˜JÓ'×PÐP¬7°:¸zÈ4Ó+PÜ& wÓ/×3Ñ3°GÓ<ÌDÐQX×Q\ÑQ\Ð]fÓQgÓLhØ�[‰[˜Ó(ô€Fô $Ô$8¸Ó$AÓB€Gà˜RðhÙ".¨v°|ÀVÓ"Lðhç-4ˆY�w˜v•Ð'Ð(Ñ
)¸"ðhñ 
�f˜g w°	¸?ÈHÐVeÓ	fðh€Eô ˆs�X˜tŸy™y¨Ó/Ð0Ó1Ð1r   zsession.historyc                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   »  s&   € ÷ Bñ B”4ð B¤$ð B¬4ñ Br   c                 óÌ  € \        VP                  R . 4      4      p\        V4      pV'       d`   \        V4      ;_uu_ 4       pVe@   \        P
                  ! \        4      ;_uu_ 4        VP                  VRRR7      pRRR4       RRR4       \        V R\        V4      R\        W2P                  R4      R7      /4      #   + '       g   i     LJ; i  + '       g   i     LU; i)r  NT)Úinclude_ancestorsr  r�  rI  re   rg   )r­   rK   r	  r=   r�   r‚   rƒ   r  râ   rv  rw  )r   r	   r   r  r  r@   s   &&&   r   r�  r�  º  s½   € ä�7—;‘;˜y¨"Ó-Ó.€Gô
 )¨Ó1€KßÜ˜×!Ô! RØŠ~ô  ×(Ò(¬×3Õ3ð !×=Ñ=Ø#°tÈTð >ó S�G÷	 4÷	 "ô ˆs�Wœc '›l¨JÔ8LÈW×cnÑcnÐo}Óc~Ô8ð  Aó  Bð  B÷ 4×3ú÷	 "×!ús$   Á'CÁ)C 	Á>CÃ CÃCÃC#	zsession.undo)r%   c                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   Ñ  s!   € ÷ *ñ *”4ð *¤$ð *¬4ñ *r   c                 óÀ  a€ \        V R \        R\        VP                  R4      4      4      4      pVP                  R4      '       d   V# ^ pVR,          ;_uu_ 4        VP                  R4      '       d   VuuRRR4       # \	        VP                  R. 4      4      p^ RIHo \        V3R lV 4       4      ;p'       d    \        W&^,
          4      ^,          pRRR4       V'       d%   \        VP                  R4      R8X  d   RMRV4       \        V RV/4      #   \         d%   p\        T R	R
T 24      u Rp?uuRRR4       # Rp?ii ; i  + '       g   i     L|; i)r·  ÚundoÚ_manual_compress_activerg  r[  Nr  )Úuser_originated_turn_viewc              3   ó@   <"  € T F  pS! V4      f   K  ^x € K  	  R # 5ir   r   )r.  rÓ   rÆ  s   & €r   r1  rÃ  Ý  s   øé € Ðh©g 7Ñ9RÐSZÓ9[ŸQšQ«gùs   ƒ”
rM  zundo: ÚintentÚretryr¹  )r¹   Úbusy_messager*   rK   Ú&_history_without_ephemeral_scaffoldingÚagent.context_compressorrÆ  ÚsumÚ_rewind_active_session_historyrƒ   Ú_tui_model_frictionrâ   )	r   r	   r   Úbusyr¹  r  Ú
user_turnsrÏ   rÆ  s	   &&&     @r   r�  r�  Ð  s"  ø€ ô ��Tœ<¨´°W·[±[ÐAZÓ5[Ó0\Ó]Ó^€DØ‡{�{�9×ÒØˆØ€GØ	�×	 ×	 Ø�;‰;�y×!Ò!Ø÷ 
!Ò	 ô 9¸¿¹ÀYÐPRÓ9SÓTˆåFÜÔh©gÓhÓhÐhˆ:Öhð7Ü8¸ÈqÅ.ÓQÐRSÕT�÷ 
!÷ Ü v§z¡z°(Ó';¸wÔ'F™GÈFÐT[Ô\Üˆs�Y Ð(Ó)Ð)øô	 ô 7Ü˜C ¨°¨u ~Ó6Ô6÷ 
!Ò	 ûð7ú÷ 
!×	 ús<   ÁEÂ>EÃ DÄE
Ä&EÄ5E
Ä6EÅE
Å
EÅE	c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ç  s   € ÷ 
ñ 
¬ð 
´ñ 
r   c                óŠ  €  \        \        VP                  R4      ;'       g    R4      RRR7      p\        YTP                  R	4      ;'       g    RR
4      ;pe   T# \        TP                  R4      ;p\        4      '       g   \	        T RR4      # \        Y4      #   \         d   p\	        T RRT 24      u Rp?# Rp?ii ; i)zP``session.save`` for a turn-isolated session: the host owns the transcript file.ro   rD   úsession.saveT)Ú
route_nameÚwaité“  z"compute-host session save failed: Nr3   z compute-host session save failedrþ   z6compute-host session save returned an invalid response)	Ú_send_compute_host_controlr)   rK   rƒ   r¹   Ú_compute_host_ack_errorrÃ   r   râ   )r   r	   ÚackrÏ   r³  rþ   s   &&    r   Ú_save_via_compute_hostrÛ  ç  s»   € ðKÜ(¬¨V¯Z©Z¸Ó-E×-KÐ-KÈÓ)LÐYgÐnrÔsˆô (¨°#·'±'¸&³/×2IÐ2IÀTÐKmÓnÐnˆÒ{ØˆÜ §¡¨Ó 1Ð1�f´4×8Ò8Ü�C˜ÐWÓXÐXÜˆsÓÐøô ô KÜ�C˜Ð!CÀCÀ5ÐIÓJÕJûðKús"   ‚!B ¤B ÂCÂ(B=Â7CÂ=Cc                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   ô  s&   € ÷  ^ñ  ^¬Dð  ^¼4ð  ^ÄDñ  ^r   c                ó@  a€ \        VP                  R4      ;'       g    R4      p\        VR4      pV3R V3R lllp \        TRRV'       d   RV 2MR,           R	\	        4       VR
7      p\        YRR4      ;pe   T# \        ST4       \        TP                  R4      ;p	\        4      '       d   \        T / T	CRR	/C4      # \        TP                  R4      \        4      '       d   TP                  R4      M/ p
\        T RRRR	RTP                  4        UUu/ uF  w  r¼TR8w  g   K  Y¼bK  	  uppRT
R\        TP                  R4      \        4      '       d,   \!        TP                  R4      SP                  R4      R7      M. R\        T
P                  R4      \        4      '       d   T
P                  R4      /4      # / /4      #   \
        P                   d    \        T RRRR	RR/4      u # \         d   p\        T RRT 24      u Rp?# Rp?ii ; iu uppi )zT``session.compress`` for a turn-isolated session: forward ``/compress`` to the host.ro   rD   Úfocus_topicc                ó(   € V ^8„  d   QhR\         RR/# )r   Úlater
   Nr   )r   s   "r   r   Ú0_compress_via_compute_host.<locals>.__annotate__ù  s   € ÷ bñ bœ4ð b¨dñ br   c                 ó&   <€ \        VSV R R7       R# )úsession.compress)rÕ  N)Ú%_adopt_late_compute_host_compress_ack)rà  rÝ  r   s   &&€r   Ú_on_late_ackÚ0_compress_via_compute_host.<locals>._on_late_ackù  s   ø€ Ü-¨d°G¸TÐN`×ar   rã  z	/compressÚ T)rÕ  ÚcommandrÖ  ÚtimeoutÚon_late_ackrÑ  rñ  Úturn_isolationrÓ   zYcompression still running in the background; the transcript will refresh when it finishesi›  zcompute-host compress failed: Nr·  zcompute-host compress failedrþ   Úsession_infoÚ
compressedÚhost_ackrI  rJ  re   rg   rA  )r)   rK   rN   rØ  Ú#_compute_host_compress_wait_secondsÚqueueÚEmptyrâ   rƒ   r¹   rÙ  Ú#_apply_compute_host_metadata_mirrorrÃ   r   r¸   r­   rw  )r   r	   r   rj   rÞ  rå  rÚ  rÏ   r³  Úhost_resultÚ	host_inforG   rä   s   &&f          r   Ú_compress_via_compute_hostrõ  ô  s<  ø€ ä
ˆf�j‰j˜Ó&×,Ð,¨"Ó
-€CÜ˜V ]Ó3€Kà&)÷ bò bðGÜ(ØÐ.¸×\gÈÈ;È-ÑGXÐmoÕ8pàÔBÓDÐR^ô`ˆô (¨°$Ð8VÓWÐWˆÒdØˆÜ'¨°Ô5Ü §¡¨Ó!2Ð2�+´D×9Ò9ä�3Ð?˜;Ð?Ð(8¸$Ñ?Ó@Ð@Ü+5°c·g±g¸nÓ6MÌt×+TÒ+T�—‘˜Ô'ÐZ\€IÜˆsØ�,Ð 0°$à°#·)±)´+ÔS±+¡J CÀÈ
ÑAR”Z�S’Z±+ÒSÐU[Ð]fØÔkuÐvy×v}Ñv}ð  Ió  wJô  LP÷  lQò  lQÔ(¨¯©°Ó)<È7Ï;É;ÐWeÓKfÕgð  WYØ¬:°i·m±mÀGÓ6LÌd×+SÒ+S�—‘˜wÓ'ð]ó ^ð ^ð
 Z\ð]ó ^ð ^øô �;‰;ô Wô �3˜ 9Ð.>ÀØ"ð &TðVó Wò 	Wô ô GÜ�C˜Ð!?À¸uÐEÓFÕFûðGüó Ts5   ¿-G
 ÄHÄ*HÇ
'HÇ3HÇ<HÇ=HÈHÈHc                óH   € V ^8„  d   QhR\         R\        R\         R\        /# )r   rj   r   rÞ  r
   rÊ   )r   s   "r   r   r     s(   € ÷ ,%ñ ,%œSð ,%¬4ð ,%¼cð ,%Ädñ ,%r   c                ó<  aaaa€ ^ RI Hp ^ RIHp ^ RIHo VR,          ;_uu_ 4        \        VP                  R. 4      4      p\        VP                  R^ 4      4      pRRR4       \        X4      pVR,          o\        SR	R
4      ;'       g    R
o\        SRR4      ;'       g    RoR VVVV3R llp	V	! V4      p
V^8¼  d)   V'       d   RV R2MR
p\        VRRV RV
R RV R24        \        W#W¦XR7      w  rÍVR,          ;_uu_ 4        \        VP                  R. 4      4      pRRR4       V	! X4      pVR,          p\        W4       V! WnW¯\        VRR4      R7      p\        VV4      p\        RVV4       V! VRR7       \!        T RVR,          '       d   RMRRVR VR!\        V4      R"V
R#VR$VR%VR&VR'\#        WâP                  R(4      R)7      /
4      \        VR*4       #   + '       g   i     EL�; i  + '       g   i     LØ; i  \        TR*4       i ; i)+zgIn-process ``session.compress``: status pinned "compressing", then the before/after summary + messages.©Ú0finalize_context_engine_compression_notification)Úsummarize_manual_compression)Úestimate_request_tokens_roughr[  r  r\  Nr‡   Ú_cached_system_promptrD   rK  c                ó$   € V ^8„  d   QhR\         /# r½   rþ  )r   s   "r   r   Ú$_compress_live.<locals>.__annotate__$  s   € ÷ iñ iœñ ir   c                 óˆ   <€ \        SR R4      ;'       g    Sp\        SRR4      ;'       g    SpV '       d   S! WVR7      # ^ # )rü  rD   rK  N)r  rK  )r§  )ÚmsgsÚ
sys_promptrK  Ú_agentÚ_sys_promptÚ_toolsrû  s   &  €€€€r   Ú_tokensÚ_compress_live.<locals>._tokens$  sG   ø€ ä˜VÐ%<¸bÓA×PÐPÀ[ˆ
Ü˜ ¨Ó.×8Ð8°&ˆß]aÑ,¨TÐSXÔYÐhÐghÐhr   z
, focus: "Ú"Úcompressingu   â ‹ compressing z messages (~Ú,z tok)u   â€¦)Úapprox_tokensÚbefore_messagesr\  Úcontext_compressor)Úcompression_stater»  T©Ú	committedrÑ  Úabortedrí  r¹  r  Úafter_messagesÚbefore_tokensÚafter_tokensÚsummaryrA  rJ  rI  re   rg   Úready)Úagent.conversation_compressionrù  Ú!agent.manual_compression_feedbackrú  Úagent.model_metadatarû  r­   rK   r5   rv  r§  Ú_status_updateÚ_compress_session_historyÚ _sync_session_key_after_compressrŒ   rÌ   râ   rw  )r   rj   r   rÞ  rù  rú  r  r\  Úbefore_countr  r  Úfocus_suffixr¹  rA  rI  r  r‡   r  rJ  r  r  r  rû  s   &&&&               @@@@r   Ú_compress_liver    s  û€ å_ÝNÝBØ	�×	 ×	 Ü˜wŸ{™{¨9°bÓ9Ó:ˆÜ˜gŸk™kÐ*;¸QÓ?Ó@ˆ÷ 
!ô �Ó'€LØ�WÕ€FÜ˜&Ð"9¸2Ó>×DÐDÀ"€KÜ�V˜W dÓ+×3Ð3¨t€F÷ió iñ
 ˜OÓ,€MØ�qÔß6A˜ K =°Ñ2ÀrˆÜ�s˜MØ)¨,¨°|ÀMÐRSÐCTÐTYÐZfÐYgÐgjÐkô	mð%Ü2Ø°Ø+ô-‰ˆð �^×$×$Ü˜GŸK™K¨	°2Ó6Ó7ˆH÷ %á˜xÓ(ˆØ˜Õ ˆÜ(¨Ô6Ù.¨È-ÜAHÈÐPdÐfjÓAkômˆä˜U GÓ,ˆÜˆn˜c 4Ô(Ù8¸È$ÕOÜ�3Ø 7¨9×#5Ô#5‘i¸<ÈÐT[Ø˜|Ð-=¼sÀ8»}Ø˜]¨N¸LÈ)ÐU\Ø�U˜F D¨*Ô6JÈ8×bmÑbmÐn|Ób}Ô6~ð	@ó Aô 	�s˜GÕ$÷O 
!×	 Ð	 ú÷, %×$ûô" 	�s˜GÕ$ús0   ¨7G&Ã-!H ÄG:Ä*B/H Ç&G7	Ç:H
	ÈH ÈHrã  c                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   H  s   € ÷ 'ñ '”4ð 'œDñ 'r   c                 óº  € \        W4      w  r#V'       d   V# \        V4      '       d   \        WV4      # \        W4      w  r#V'       d   V# VP	                  R R4      p \        WB4      ;_uu_ 4        \        WV\        VR4      4      uuRRR4       #   + '       g   i     R# ; i  \         d!   p\        T R\        T4      4      u Rp?# Rp?i\         d?   p\        TR4       ^ RIHp \        T RRR	R
RT! TP                   4      /4      u Rp?# Rp?i\"         d8   p^ RIHp T! TR,          RR7       \        T R\        T4      4      u Rp?# Rp?ii ; i)ro   rD   rÞ  Nr·  r  )Údescribe_compression_lock_skiprí  FÚ	lock_heldTrÓ   rø  r‡   r  i�  )r    Ú_session_uses_compute_hostrõ  r$   rK   Ú_manual_compress_turnr  rN   ÚCompressionBusyr¹   r)   ÚCompressionLockHeldr  r  r!  râ   Úholderrƒ   r  rù  )r   r	   r   r   rj   rº   r!  rù  s   &&      r   r�  r�  F  s  € ô   Ó,�L€Gß
Øˆ
Ü! '×*Ò*Ü)¨#°wÓ?Ð?Ü˜Ó%�L€Gß
Øˆ
Ø
�*‰*�\ 2Ó
&€Cð'Ü" 3×0Õ0Ü! #¨G´ZÀÈÓ5VÓW÷ 1×0×0Ó0ûäô 'Ü�C˜œs 1›vÓ&Õ&ûÜô wÜ�s˜GÔ$ÝTÜ�3˜ u¨k¸4ÀÑLjÐkl×ksÑksÓLtÐuÓvÕvûÜô 'ÝcÙ8¸ÀÕ9IÐUZÕ[Ü�C˜œs 1›vÓ&Õ&ûð'úsl   ÁB( Á2BÂ	
B( ÂB%	ÂB( Â%B( Â(EÂ3CÃEÃEÃEÃ3DÄEÄEÄ"EÄ#,EÅEÅErÔ  c                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   b  s!   € ÷ )ñ )”4ð )¤$ð )¬4ñ )r   c                 óh  € \        V4      '       d   \        W4      # ^ RIHpHp ^ RIHp  \        VRR7      ;_uu_ 4        \        V4      ;_uu_ 4       pT;'       d    V! V\        V4      R4      pRRR4       RRR4       \        TP!                  R4      ;'       g    \#        4       4      R,          R\$        P'                  4       R R2,          p	X'       gÔ   \)        TR,          ;p
RR4      p\+        T\$        4      '       d   TP-                  4       MTP!                  R4      pTR,          ;_uu_ 4        R\        T4      R\)        T
RR4      R\+        T\.        \0        34      '       d   TMRR\)        T
RR4      ;'       g    RR\3        TP!                  R. 4      4      /pRRR4        T	P4                  P7                  R	R	R7       T	P9                  T! TR4      RR7       \;        T R"\        T	4      /4      #   + '       g   i     EL”; i  + '       g   i     EL ; i  T d!   p\        T R\        T4      4      u Rp?# Rp?i\         d    \        P                  RR	R
7       Rp ELïi ; i  + '       g   i     L×; i  \         d   p\        T RR T	 R!T 24      u Rp?# Rp?ii ; i)#r;   )Úload_save_snapshotÚrender_session_for_save)ÚSessionExportTooLargeErrorF)Úhydrate_secretsÚjsonNi#  zFsession.save: stored-session read failed; saving the in-memory historyTr  re   zsessions/savedÚhermes_conversation_z%Y%m%d_%H%M%Sú.jsonr‡   Úsession_startrX  r[  r–   r  rD   r™   r  rü  rI  r  rø  úutf-8©Úencodingr×  zfailed to save z: Úfile)r#  rÛ  Úhermes_cli.session_exportr*  r+  ri  r,  rf   r=   r	  r¹   r)   rƒ   rÍ   r8  rz   rK   rç  Údatetimerœ  r§  rÃ   Ú	timestampr5   r¥  r­   rÁ  r  Ú
write_textrâ   )r   r	   r   r*  r+  r,  r@   r¾  rº   rµ  r‡   Ústarteds   &&&         r   r�  r�  a  sP  € ä! '×*Ò*Ü% cÓ2Ð2ßUÝ7ðÜ+¨GÀU×KÖKÌ[ÐY`×MaÔMaÐegØ×YÐYÑ,¨RÔ1GÈÓ1PÐRXÓYˆD÷ Nb×Kô �—‘˜NÓ+×@Ð@¬Ó/@ÓAÐDTÕTÐYmÔnv×nzÑnzÓn|ð  ~Kð  nLð  LQð  XRõ  R€DßÜ 7¨7Õ#3Ð3˜%°_ÀdÓKˆÜ)3°G¼X×)FÒ)F�'×#Ñ#Ô%ÈGÏKÉKÐXdÓLeˆØ�^×$×$ØÔ0°Ó9¸7ÄGÈEÐSZÐ\^ÓD_Ø ¬Z¸Ä#ÄuÀ×-NÒ-N¡'ÐTXØ#¤W¨UÐ4KÈRÓ%P×%VÐ%VÐTVØ¤ W§[¡[°¸BÓ%?Ó @ðBˆD÷ %ð
>Ø�‰×Ñ $°ÐÔ6Ø�‰Ñ/°°fÓ=ÈˆÔPô ˆs�VœS ›YÐ'Ó(Ð(÷+ Nb×MaÐMaú×K×KÐKûà%ô 'Ü�C˜œs 1›vÓ&Õ&ûÜô Ü�‰Ð_ÐjnˆÔoØ‹ðú÷ %×$ûô ô >Ü�C˜ °°°b¸¸Ð<Ó=Õ=ûð>ús�   ¬H& ÁHÁG>	Á3HÁ;H& Ä:AI6ÆI6Æ07J	 Ç>HÈ		HÈH#	ÈH& È#H& È&I3È-IÉI3ÉI3ÉI3É2I3É6J	Ê	J1ÊJ,Ê&J1Ê,J1zsession.closec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   ‚  s   € ÷ Uñ U”4ð UœDñ Ur   c                 ó  € \         ;_uu_ 4        \        VP                  R R4      4      pRRR4       \        T R\	        XRR7      R\        T;'       g    / P                  R4      ;'       g    . 4      /4      #   + '       g   i     LW; i)ro   rD   NÚclosedÚ	tui_close)Ú
end_reasonrI  Ú	_end_msgs)r:  Ú_pop_session_by_idrK   râ   Ú_teardown_popped_sessionr­   ©r   r	   r   s   && r   r�  r�  �  s�   € ç	Ö	Ü$ V§Z¡Z°¸bÓ%AÓBˆ÷ 
äˆs�XÔ7¸ÈKÔXÐZdÔfjÐls×lyÐlyÐwy×k~Ñk~ð  @Kó  lL÷  lRð  lRð  PRó  gSð  Tó  Uð  U÷ 
×	ús   �A:Á:B
	zsession.branchc                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   ‰  s!   € ÷ .ñ .”4ð .¤$ð .¬4ñ .r   c                 ó   € \        WV4      # r   ©Ú_branch_liverC  s   &&&r   r�  r�  ˆ  s   € ä˜ WÓ-Ð-r   zsession.branch_wholec                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r   Ž  s&   € ÷ Bñ B”4ð B¤$ð B¬4ñ Br   c                ó   € \        WVRR7      # )zNWhole-history ``session.branch`` that doesn't echo the copied transcript back.T)rÜ  rF  rC  s   &&&r   r�  r�  �  s   € ô ˜ W¸DÔAÐAr   zdelegation.statusc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   •  s   € ÷ Tñ T”4ð TœDñ Tr   c                 ó¦   € ^ RI Hp \        V RVP                  4       RVP	                  4       RVP                  4       RVP                  4       /4      # )r;   )Údelegate_toolr\  ÚpausedÚmax_spawn_depthÚmax_concurrent_children)rK  rL  râ   Úlist_active_subagentsÚis_spawn_pausedÚ_get_max_spawn_depthÚ_get_max_concurrent_children)r   r	   Údts   && r   r�  r�  ”  sR   € å)Üˆs�X˜r×7Ñ7Ó9¸8ÀR×EWÑEWÓEYØ&¨×(?Ñ(?Ó(AØ.°×0OÑ0OÓ0QðSó Tð Tr   zdelegation.pausec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   �  s   € ÷ Tñ T”4ð TœDñ Tr   c                 óh   € ^ RI Hp \        V RV! \        VP	                  RR4      4      4      /4      # )r;   )Úset_spawn_pausedrM  T)Útools.delegate_toolrW  râ   r*   rK   )r   r	   rW  s   && r   r�  r�  œ  s-   € å4Üˆs�XÑ/´°V·Z±ZÀÈ$Ó5OÓ0PÓQÐRÓSÐSr   zsubagent.steerc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   £  s   € ÷ nñ n”4ð nœDñ nr   c           	     ó¬  € ^ RI Hp \        VR4      ;p'       g   \        V RR4      # VP	                  R4      ;'       g    RP                  4       ;p'       g   \        V RR4      # \        W4      ^,          ;pe   V# \        VR
4      p\        V4      w  rxVR	J;'       d    VR	J;'       d    V! W4WgVR7      p	\        T RV	'       d   RMRRVRV/4      # )zÅQueue steering text into a live delegated child (the in-flight tool call is never cut). "queued"
is not "delivered": a child past its final tool batch surfaces ``missed_steer`` on the parent entry.)Ústeer_subagentÚsubagent_idé   zsubagent_id requiredr  rD   rO  ztext is requiredNro   )Úowner_session_idÚowner_transportÚowner_session_recordrÑ  r&  Úrejected)	rX  r[  rN   r¹   rK   rL   r    Ú _current_session_steer_authorityrâ   )
r   r	   r[  r\  r  r   Úowner_idrl  Úownerr&  s
   &&        r   r�  r�  ¢  së   € õ 3Ü% f¨mÓ<Ð<ˆKÖ<Ü�C˜Ð5Ó6Ð6Ø—Z‘Z Ó'×-Ð-¨2×4Ñ4Ó6Ð6ˆDÖ6Ü�C˜Ð1Ó2Ð2Ü˜FÓ(¨Õ+Ð+ˆÒ8Øˆ
Ü˜& ,Ó/€HÜ7¸ÓAÑ€IØ˜dÐ"÷ mð m u°DÐ'8÷ mð m¹^Ø¨HÐfkô>m€Fäˆs�X¯6™x°zÀ=ÐR]Ð_eÐgkÐlÓmÐmr   zspawn_tree.savec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   µ  s   € ÷ Cñ C”4ð CœDñ Cr   c                 ó„  € \        VR 4      pVP                  R4      ;'       g    . p\        V\        4      '       d	   V'       g   \	        V RR4      # VP                  R4      \        VP                  R4      ;'       g    R4      rT\        VP                  R4      ;'       g    \        P                  4       4      p\        T;'       g    R4      pV\        P                  V\        P                  4      P                  R	4       R
2,          pR TRV'       d   \        V4      MRRVRV/p	 VP                  \        P!                  / V	CRV/CRR7      RR7       \%        TR\        T4      /T	CR\'        T4      /C4       \)        T R\        T4      R T/4      #   \"         d   p
\	        T RRT
 24      u Rp
?
# Rp
?
ii ; i)ro   Ú	subagentsr]  zsubagents list requiredr™   ÚlabelrD   Úfinished_atrH   z%Y%m%dT%H%M%Sr0  NF)Úensure_asciir2  r3  r…  zspawn_tree.save failed: rµ  r�  )rN   rK   rÃ   r­   r¹   r)   r¥  rs  Ú_spawn_tree_session_dirr7  ÚfromtimestampÚtimezoneÚutcÚstrftimer9  r.  ÚdumpsÚOSErrorÚ_append_spawn_tree_indexrv  râ   )r   r	   ro   rg  r™   rh  ri  r  rµ  ÚmetarÏ   s   &&         r   r�  r�  ´  sŠ  € ä˜F LÓ1€JØ—
‘
˜;Ó'×-Ð-¨2€IÜ�i¤×&Ò&¯iÜ�C˜Ð8Ó9Ð9ØŸ
™
 <Ó0´#°f·j±jÀÓ6I×6OÐ6OÈRÓ2P�Ü˜Ÿ
™
 =Ó1×@Ð@´T·Y±Y³[ÓA€KÜ 
× 7Ð 7¨iÓ8€AØ”(×(Ñ(¨´h·l±lÓC×LÑLÈ_Ó]Ð^Ð^cÐdÕd€DØ˜* lÏ´E¸*Ô4EÐY]Ø˜;¨°ð8€DðAØ�‰œŸ
™
Ð#C dÐ#C¨K¸Ñ#CÐRW˜
ÓXÐcjˆÔkô ˜Q ¬¨T«Ð T°dÐ T¸GÄSÈÃ^Ñ TÔUÜˆs�VœS ›Y¨°jÐAÓBÐBøô ô AÜ�C˜Ð!9¸#¸Ð?Ó@Õ@ûðAús   Ä-.F ÆF?Æ%F:Æ4F?Æ:F?c                ó>   € V ^8„  d   QhR\         R\        R,          /# )r   Úsession_dir_namer
   NrÊ   )r   s   "r   r   r   È  s"   € ÷ lñ l´#ð l¼$À½+ñ lr   c                ó²  €  V P                  4       p/ p\        P                  ! \        4      ;_uu_ 4        \
        P                  T P                  RR7      4      pRRR4       \        T\        4      '       g   / pTP                  R4      ;'       g    . pR\        T 4      RTP                  R4      ;'       g    TRTP                  R4      ;'       g    TP                  RTP                  R4      R	TP                  R	4      ;'       g    R
R\        T\        4      '       d   \        T4      /# ^ /#   \         d     R# i ; i  + '       g   i     Lò; i)zHIndex-shaped entry for a pre-index snapshot file (None when unreadable).Nr2  r3  rg  rµ  ro   ri  r™   rh  rD   r�  )Ústatrq  r�   r‚   rƒ   r.  ÚloadsÚ	read_textrÃ   r   rK   r)   Úst_mtimer­   rv  )r§  ru  rw  r  rg  s   &&   r   Ú_legacy_spawn_tree_entryr{  È  s  € ðØ�v‰v‹xˆð €CÜ	×	Ò	œY×	'Õ	'Ü�j‰j˜Ÿ™¨g˜Ó6Ó7ˆ÷ 
(ä�cœ4× Ò ØˆØ—‘˜Ó$×*Ð*¨€IØ”C˜“F˜L¨#¯'©'°,Ó*?×*SÐ*SÐCSØ˜3Ÿ7™7 =Ó1×BÐB°T·]±]ÀLÐRU×RYÑRYÐZfÓRgØ�S—W‘W˜WÓ%×+Ð+¨¨WÌ
ÐS\Ô^b×HcÒHc´c¸)³nðlð làijðlð løô ô Úðú÷ 
(×	'ús   ‚D4 ¶&EÄ4EÅEÅE	zspawn_tree.listc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   Ú  s   € ÷ Kñ K”4ð KœDñ Kr   c                 ón  aaa€ \        VR 4      p\        VP                  R4      4      '       d@   \        4       P	                  4        Uu. uF  q3P                  4       '       g   K  VNK  	  ppM\        T;'       g    R4      .p. pV F^  o\        S4      ;p'       d   VP                  V3R lV 4       4       K3  VP                  VV3R lSP                  R4       4       4       K`  	  VP                  R RR7       \        T R	TR
\        VP                  R4      ;'       g    ^24       /4      # u upi )ro   Úcross_sessionrH   c              3   óž   <"  € T FB  qP                  R 4      ;o'       g   K  \        S4      P                  4       '       g   K>  Vx € KD  	  R# 5i)rµ  N)rK   rz   rë   )r.  rº   r§  s   & €r   r1  rÃ  ä  s2   øé € Ð[¡g ·u±u¸V³}Ð2D°!Ó2Dœ1Ì$ÈqË'Ï.É.×JZŸ1š1£gùs   ƒA¢AÁ
Ac              3   óŽ   <"  € T F:  pVP                   \        8w  g   K  \        VSP                   4      ;of   K6  Sx € K<  	  R # 5ir   )r'   Ú_SPAWN_TREE_INDEXr{  )r.  r§  r  r©  s   & €€r   r1  rÃ  æ  sD   øé € ð oÙ/˜!Ø—6‘6Ô.Ñ.ô Ü=UÐVWÐYZ×Y_ÑY_Ó=`Ð4`°E÷ ’Ó/ùs   ƒAŸA»
Az*.jsonc                 ó8   € V P                  R 4      ;'       g    ^ # )ri  r  )rº   s   &r   r"   rã  é  s   € ˜qŸu™u ]Ó3×8Ð8°qÐ8r   T)rG   ÚreverseÚentriesNr¬   )rN   r*   rK   Ú_spawn_trees_rootÚiterdirÚis_dirrk  Ú_read_spawn_tree_indexr¥  ÚglobÚsortrâ   r5   )	r   r	   ro   r§  Úrootsr„  Úindexedr  r©  s	   && `   @@r   r�  r�  Ù  s  ú€ ä˜F LÓ1€JÜˆF�J‰J�Ó'×(Ò(Ü-Ó/×7Ñ7Ô9ÓHÑ9�q¿X¹X¿Z—�Ñ9ˆÐHˆä(¨×)@Ð)@°yÓAÐBˆØ€GÛˆÜ,¨QÓ/Ð/ˆ7Ö/à�N‰NÔ[¡gÓ[Ö[à�N‰Nõ oØ Ÿv™v hÔ/óoö oñ ð ‡L�LÑ8À$€LÔGÜˆs�Y Ð(G¬¨V¯Z©Z¸Ó-@×-FÐ-FÀBÓ)GÐ HÐIÓJÐJùò Is   Á
D2Á&D2zspawn_tree.loadc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   î  rT  r   c                 ó:  € \        VR 4      ;p'       g   \        V RR4      #  \        V4      P                  4       ;pP	                  \        4       P                  4       4        \        P                  TP                  RR7      4      p\        T\        4      '       g   \        T RR
4      # \        Y4      #   \        \        3 d   p\        T RRT 24      u Rp?# Rp?ii ; i  \        \        P                  3 d   p\        T RR	T 24      u Rp?# Rp?ii ; i)rµ  r]  zpath requiredr  zpath outside spawn-trees root: Nr2  r3  r…  zspawn_tree.load failed: z5spawn_tree.load failed: snapshot is not a JSON object)rN   r¹   rz   r   Úrelative_tor…  rV   rq  r.  rx  ry  ÚJSONDecodeErrorrÃ   r   râ   )r   r	   Úraw_pathÚresolvedrÏ   rÈ   s   &&    r   r�  r�  í  s  € ä" 6¨6Ó2Ð2ˆHÖ2Ü�C˜˜Ó/Ð/ðHÜ˜(“^×+Ñ+Ó-Ð	-ˆ×:Ñ:Ô;LÓ;N×;VÑ;VÓ;XÔYðAÜ—*‘*˜X×/Ñ/¸Ð/ÓAÓBˆô �gœt×$Ò$Ü�C˜ÐVÓWÐWÜˆsÓÐøô œÐ ô HÜ�C˜Ð!@ÀÀÐFÓGÕGûðHûô ”T×)Ñ)Ð*ô AÜ�C˜Ð!9¸#¸Ð?Ó@Õ@ûðAús<   £A B7 Á$%C% Â7C"ÃCÃC"ÃC"Ã%DÄ DÄDÄDzterminal.resizec                ó<   € V ^8„  d   QhR\         R\         R\         /# rµ  r   )r   s   "r   r   r    	  s!   € ÷ $ñ $”4ð $¤$ð $¬4ñ $r   c                 ó^   € \        VP                  R ^P4      4      ;VR &   p\        V R V/4      # r…  )r5   rK   râ   )r   r	   r   rW  s   &&& r   r�  r�  ÿ  s1   € ä  §¡¨F°BÓ!7Ó8Ð8€GˆF�O�dÜˆs�V˜T�NÓ#Ð#r   zsession.events.sincec                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   	  s   € ÷ nñ n”4ð nœDñ nr   c                ó¤  € \        VP                  R4      ;'       g    R4      p \        VP                  R^ 4      4      p^ RIHp TP                  Y#4      p\        T RTRTP                  T4      RTP                  Y#4      R	\        T4      R
TP                  4       R\        T4      /4      #   \        \        3 d    \        T RR4      u # i ; i)uj   Replay events after ``last_seen`` (WS reconnect); ``truncated`` past the ring window â†’ client refetches.ro   rD   Ú	last_seenz,invalid params: last_seen must be an integer©Úevent_replayÚeventsÚ
latest_seqÚ	truncatedr�  ÚepochÚopen_requestsro  )r)   rK   r5   rU   rV   r¹   Útui_gatewayr™  Úevents_sincerâ   r›  Úis_truncatedrv  Úreplay_epochÚ_open_requests)r   r	   rj   r—  Úerrt  s   &&    r   r�  r�  	  sÏ   € ô ˆf�j‰j˜Ó&×,Ð,¨"Ó
-€CðQÜ˜Ÿ
™
 ;°Ó2Ó3ˆ	õ /Ø�_‰_˜SÓ,€Fô ˆs�X˜v |°R·]±]À3Ó5GÈÐVX×VeÑVeÐfiÓVuØœc &›k¨7°B·O±OÓ4EÀÔXfÐgjÓXkðmó nð nøô ”zÐ"ô QÜ�C˜Ð!OÓPÒPðQús   ¦B. Â.CÃCzsession.events.statsc                ó0   € V ^8„  d   QhR\         R\         /# r   r   )r   s   "r   r   r   	  s   € ÷ 1ñ 1”4ð 1œDñ 1r   c                ó@   € ^ RI Hp \        WP                  4       4      # )z$Replay-buffer telemetry (ops/debug).r˜  )rŸ  r™  râ   Úreplay_stats)r   r	   r™  s   && r   r�  r�  	  s   € õ )Üˆs×-Ñ-Ó/Ó0Ð0r   c                ó   € V ^8„  d   QhRR/# r~   r   )r   s   "r   r   r   	  s   € ÷ /ñ /˜ñ /r   c                óŽ   € \        \        4       V RR7       ^RIHp VP	                  V 4       ^RIHp VP	                  V 4       R# )z\Publish this module's helpers onto ``server`` (rebound to its globals) and install handlers.)Úskip)Úmethods_session_branch)Úmethods_session_interruptN)r�  )r   rC  rD   r«  Úregisterr¬  )Úserverr«  r¬  s   &  r   r­  r­  	  s2   € ä”“	˜6¨Õ/Ý(Ø×#Ñ# FÔ+Ý+Ø×&Ñ& vÖ.r   )rD   r   )rø   r   )Or'  r�   Ú
method_ctxr   r   Ú	_registryr-   Úprofile_scopedræ   r   r/   r.   r1   rC   rN   rR   rW   rc   rh   ru   r|   r„   r�   r�   Úhermes_state_sessionsrž   Ú	frozensetr¥   r¦   rª   r³   r»   rÅ   rÐ   rÖ   rè   rî   r÷   rû   r  r  r+  r9  r?  r�  r�  r¬  r¸  rÕ  r5  rB  rO  rS  r\  r`  rm  rý  rq  r�  rŠ  r•  r›  r¨  rí  Ú_PET_OFFr~  r¸  rÅ  rð  rF  ro  r•  r¬  rª  rÛ  rõ  r  r{  r­  r   r   r   Ú<module>rµ     s2
  ðñOó ç 4áÓ€	Ø	×	Ñ	€Ø×*Ñ*€òñ ÑJÓK€Ù!Ñ"HÓIÐ ðX¨u÷ Xõ
	÷9ð 9õ
4õõ_ò
iõ'òõ÷:ð :ðp¸dð pÐPTð pÐY]÷ põ ;ñ "Ð":Ó;Ð õNõBõ<òRõõ6õ$ð¨ð ¸5ð ÐQU÷ ò$R÷_ð _÷Gð GõQõ
Mð
-Ù,.ð-ØCHð-Ø^dð-à*.÷-õ`&õ(qð6WDÀe÷ WDñt ÐÓô(ó ð(ñ ÐÓ ôBó !ðBõõ$hñ6 ˆÓÙ	ˆ$˜uÔ%ô'ó &ó ð'ñ2 ÐÓô.ó ð.ñ" ˆÓô)ó ð)ñ ÐÓØô	Só ó ð	S÷Y^ñ Y^õxtõBõ6Põ:^õ:Kõ29õ$õ6<õ!ð$=ÙIKð=Øimð=à ð=à>Bð=àTYð=ð ð=ð 48ð=ð EIð=ð Y]÷=õ&nõ@mõ*bõ,:dñz ÐÓô ó ð ñH Ð"Ó#ôó $ðñ Ð Ó!ô&Ró "ð&RñR ÐÓô
(ó ð
(ñ Ð#Ó$ôfó %ðfñ ÐÓô^ó ð^õ6ñ& ˆÓÙ	ˆ$˜tÔ$ôó %ó ðñ< ÐÓô+ó ð+ñ: ÐÓô+ó ð+ñ< �Ó!ôEó "ðEñ> ˆÓØôCó ó ðCñ@ Ð"Ó#ô#mó $ð#mñL ˆÓÙ	ˆ$˜tÔ$ôbó %ó ðbñ ˆÓô>ó ð>ñ, �Ó!ôó "ðñ Ð,Ó-ô'ó .ð'ðB �uÐ€ñ ˆZ 8Ô,ôó -ðñ  ˆ_¨Ô1ôSó 2ðSõñ$ ˆ[ HÔ-ô&ó .ð&ñ0 ˆ] y°%¸À2ÀvÈrÐ&RÔSôUó TðUñ< ˆ\ Ô%ô
Qó &ð
Qñ ˆ\ Ô%ô3ó &ð3õ?õ;ñ
 ˆ\ Ô%ôQó &ðQñ ˆ\ Ô%ô
Ió &ð
Iñ ˆ[˜tÑ/oÔpôbó qðbñ ˆ]Óô"ó ð"ñ ˆ[ÓôSó ðSñ ˆÓô"ó ð"ñ Ð"¨5¸[È%ÐQ\Ð^`Ð<aÔbôFó cðFõbñ ˆ^ EÔ*ô5có +ð5cñp ˆ[ Ô'õ(aó (ð(a÷^	,ñ ‰Óöó ðñ ‰lÑ1Ñ3FÑH`Ù�T˜;¨Ð.ô0á Ñ"Ñ$=Ñ?YÙ-Ù�T™;¨©wÑ8[Ð\ô^ñ
 ÑÓöló  ðlñ^¨tñ ^ÀBñ ^ÐUfñ ^Ø&+÷^ñ ^ñ& Ñ$ò 'WâOÙ8ö:ñ
 Ñ$Úaôcñ Ñ%ò (eò 8ÑAcÐptövñ
 Ñò "_â1Ñ;SÐ`döfñ Ñ&ò )â>ÑH_Ù
ö÷ñ Ñ$ lÑ<fÚ]ö_á Ñ.ò  1FÚGÑQmöoñ ÑÓö>ó ð>÷"=÷ñ Ñ!Ó"ö2ó #ð2ñ0 Ñ"Ó#öBó $ðBñ* ‘ dÕ+ö*ó ,ð*÷,
÷ ^÷F,%ñ^ ÑÓØö'ó ó ð'ñ2 ‘ dÕ+ö)ó ,ð)ñ> ‰ÓöUó ðUñ Ñ!¨Õ-ö.ó .ð.ñ Ñ'¨dÕ3öBó 4ðBñ ÑÓöTó ðTñ ÑÓöTó ðTñ
 ÑÓönó ðnñ" ÑÓöCó ðC÷&lñ" ÑÓöKó ðKñ& ÑÓöó ðñ" Ñ"Ó#ö$ó $ð$ñ
 ÑÓönó  ðnñ  ÑÓö1ó  ð1÷/ñ /r   