§
    ÷žyjéN  ã                  ó  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZ ddlmZmZmZmZ ddlmZ dZd	Zd
ZdZd
ZdZ G d„ de¦  «        Z  G d„ de!ej"        ¦  «        Z# ej$        d¬¦  «         G d„ d¦  «        ¦   «         Z% ej$        d¬¦  «         G d„ d¦  «        ¦   «         Z& ej$        d¬¦  «         G d„ d¦  «        ¦   «         Z' ej$        d¬¦  «         G d„ d¦  «        ¦   «         Z( ej$        d¬¦  «         G d„ d¦  «        ¦   «         Z) ej$        d¬¦  «         G d„ d¦  «        ¦   «         Z* ej$        d¬¦  «         G d„ d ¦  «        ¦   «         Z+ej$         G d!„ d"¦  «        ¦   «         Z, G d#„ d$¦  «        Z- e-¦   «         Z.dd%l/m0Z1  e1d&d'¬(¦  «        Z2 e
j3        d)¦  «        Z4 ej5        d*d¬+¦  «        Z6d,e7d-<   ed5d0„¦   «         Z8d6d2„Z9 G d3„ d4¦  «        Z:dS )7a*  Public, plugin-safe lifecycle API for delegated Hermes subagents.

This module deliberately exposes immutable contracts, not ``AIAgent`` objects.
It is the supported boundary for plugins that need to supervise fresh child
sessions; plugins must obtain it from ``PluginContext.subagent_lifecycle``.
é    )ÚannotationsN)Úcontextmanager)ÚFutureÚTimeoutError)ÚAnyÚCallableÚMappingÚOptional)Úrequest_hard_interrupté   i€>  i }  i    i  c                  ó   — e Zd ZdZdS )ÚSubagentLifecycleErrorz@A request cannot be safely accepted by the public lifecycle API.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú>/home/ragecks/.hermes/hermes-agent/agent/subagent_lifecycle.pyr   r   "   s   € € € € € ØJÐJÐJÐJr   r   c                  ó2   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )ÚSubagentStateÚPENDINGÚSTARTINGÚRUNNINGÚ	SUCCEEDEDÚFAILEDÚINTERRUPTEDÚCANCEL_REQUESTEDÚ	CANCELLEDÚUNKNOWNN)r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r   &   s<   € € € € € Ø€GØ€HØ€GØ€IØ€FØ€KØ)ÐØ€IØ€G€G€Gr   r   T)Úfrozenc                  óÄ   — e Zd ZU ded<   dZded<   dZded<   dZded<   dZd	ed
<   dZded<   dZ	ded<   dZ
ded<   dZded<    ej        e¬¦  «        Zded<   dZded<   dS )ÚSubagentLaunchRequestÚstrÚgoalNúOptional[str]ÚcontextÚleafÚroleÚmodelzOptional[tuple[str, ...]]Úallowed_toolsetsr   ztuple[str, ...]Úblocked_toolsÚworking_directoryÚparent_session_idÚcorrelation_id©Údefault_factoryúMapping[str, Any]ÚmetadataúOptional[float]Útimeout_seconds)r   r   r   Ú__annotations__r'   r)   r*   r+   r,   r-   r.   r/   ÚdataclassesÚfieldÚdictr3   r5   r   r   r   r#   r#   2   sØ   € € € € € € à€I€I�IØ!€GÐ!Ð!Ð!Ñ!Ø€DÐÐÐÑØ€EÐÐÐÑØ26ÐÐ6Ð6Ð6Ñ6Ø%'€MÐ'Ð'Ð'Ñ'Ø'+ÐÐ+Ð+Ð+Ñ+Ø'+ÐÐ+Ð+Ð+Ñ+Ø$(€NÐ(Ð(Ð(Ñ(Ø"3 +Ô"3ÀDÐ"IÑ"IÔ"I€HÐIÐIÐIÑIØ'+€OÐ+Ð+Ð+Ñ+Ð+Ð+r   r#   c                  ó”   — e Zd ZU ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   dd„Zedd„¦   «         ZdS )ÚSubagentHandleÚintÚcontract_versionr$   Úsubagent_idr&   r.   r/   ÚfloatÚ
created_atÚproviderr*   r)   ÚdepthÚ
capabilityÚreturnúdict[str, Any]c                ó*   — t          j        | ¦  «        S ©N)r7   Úasdict©Úselfs    r   Úto_dictzSubagentHandle.to_dictN   s   € ÝÔ! $Ñ'Ô'Ð'r   Úvaluer2   ú'SubagentHandle'c                ó€   — 	  | di t          |¦  «        ¤ŽS # t          t          f$ r}t          d¦  «        |‚d }~ww xY w)NzMalformed subagent handle.r   )r9   Ú	TypeErrorÚ
ValueErrorr   )ÚclsrL   Úexcs      r   Ú	from_dictzSubagentHandle.from_dictQ   s]   € ð	PØ�3Ð%Ð%�˜e™œÐ%Ð%Ð%øÝ�:Ð&ð 	Pð 	Pð 	PÝ(Ð)EÑFÔFÈCÐOøøøøð	Pøøøs   ‚ —=¨8¸=N)rD   rE   )rL   r2   rD   rM   )r   r   r   r6   rK   ÚclassmethodrS   r   r   r   r;   r;   A   s¿   € € € € € € àÐÐÑØÐÐÑØ$Ð$Ð$Ñ$Ø!Ð!Ð!Ñ!ØÐÐÑØÐÐÑØÐÐÑØ€I€I�IØ€J€J�JØ€O€O�Oð(ð (ð (ð (ð ðPð Pð Pñ „[ðPð Pð Pr   r;   c                  ó<   — e Zd ZU ded<   ded<   ded<   dZded	<   dS )
ÚSubagentStatusr;   Úhandler   Ústater?   Ú
updated_atNr&   Ú
diagnostic©r   r   r   r6   rZ   r   r   r   rV   rV   Y   sG   € € € € € € àÐÐÑØÐÐÑØÐÐÑØ $€JÐ$Ð$Ð$Ñ$Ð$Ð$r   rV   c                  óJ   — e Zd ZU ded<   ded<   ded<   dZded<   d	Zd
ed<   d	S )ÚSubagentTerminalStater;   rW   r   rX   ÚboolÚ	completedFÚ	timed_outNr&   rZ   )r   r   r   r6   r`   rZ   r   r   r   r]   r]   a   sU   € € € € € € àÐÐÑØÐÐÑØ€O€O�OØ€IÐÐÐÑØ $€JÐ$Ð$Ð$Ñ$Ð$Ð$r   r]   c                  ó\   — e Zd ZU ded<   dZded<   dZded<   dZded<   ej        Z	ded<   d	S )
ÚSubagentCancelResultr^   ÚacceptedFÚalready_terminalÚunknown_handleÚunsupportedr   rX   N)
r   r   r   r6   rd   re   rf   r   r    rX   r   r   r   rb   rb   j   sc   € € € € € € à€N€N�NØ"ÐÐ"Ð"Ð"Ñ"Ø €NÐ Ð Ð Ñ Ø€KÐÐÐÑØ(Ô0€EÐ0Ð0Ð0Ñ0Ð0Ð0r   rb   c                  óè   — e Zd ZU ded<   ded<   ded<   dZded	<   dZd
ed<   dZded<   dZded<   dZded<   dZ	ded<    e
j        e¬¦  «        Zded<    e
j        e¬¦  «        Zded<   dZded<   dS )ÚSubagentResultr;   rW   r   Úterminal_stater^   ÚreadyNr&   ÚsummaryzOptional[Mapping[str, Any]]Ústructured_payloadr4   Ú
started_atÚcompleted_atÚerror_classificationÚerror_messager0   r2   Úusage_metadataÚtool_execution_summaryÚresult_hash)r   r   r   r6   rk   rl   rm   rn   ro   rp   r7   r8   r9   rq   rr   rs   r   r   r   rh   rh   s   sð   € € € € € € àÐÐÑØ!Ð!Ð!Ñ!Ø€K€K�KØ!€GÐ!Ð!Ð!Ñ!Ø6:ÐÐ:Ð:Ð:Ñ:Ø"&€JÐ&Ð&Ð&Ñ&Ø$(€LÐ(Ð(Ð(Ñ(Ø*.ÐÐ.Ð.Ð.Ñ.Ø#'€MÐ'Ð'Ð'Ñ'Ø(9¨Ô(9È$Ð(OÑ(OÔ(O€NÐOÐOÐOÑOØ0A°Ô0AÐRVÐ0WÑ0WÔ0WÐÐWÐWÐWÑWØ!%€KÐ%Ð%Ð%Ñ%Ð%Ð%r   rh   c                  ó2   — e Zd ZU ded<   ded<   dZded<   dS )ÚSubagentReconnectResultr^   Ú	connectedr   rX   Nr&   rZ   r[   r   r   r   ru   ru   ƒ   s8   € € € € € € à€O€O�OØÐÐÑØ $€JÐ$Ð$Ð$Ñ$Ð$Ð$r   ru   c                  ót   — e Zd ZU ded<   ded<   ded<   dZded	<   dZd
ed<   dZded<   dZded<   dZded<   dS )Ú_Recordr;   rW   r   rX   r?   rY   Nr   ÚagentzOptional[Future]Úfuturer4   rm   rn   zOptional[SubagentResult]Úresult)	r   r   r   r6   ry   rz   rm   rn   r{   r   r   r   rx   rx   Š   s‹   € € € € € € àÐÐÑØÐÐÑØÐÐÑØ€EÐÐÐÑØ#€FÐ#Ð#Ð#Ñ#Ø"&€JÐ&Ð&Ð&Ñ&Ø$(€LÐ(Ð(Ð(Ñ(Ø'+€FÐ+Ð+Ð+Ñ+Ð+Ð+r   rx   c                  ó   — e Zd ZdZdd„ZdS )Ú	_RegistryzDThread-safe terminal-retention registry; never returns live records.rD   ÚNonec                óR   — t          j        ¦   «         | _        i | _        i | _        d S rG   )Ú	threadingÚRLockÚlockÚrecordsÚcorrelationsrI   s    r   Ú__init__z_Registry.__init__™   s&   € Ý”OÑ%Ô%ˆŒ	Ø+-ˆŒØBDˆÔÐÐr   N©rD   r~   )r   r   r   r   r…   r   r   r   r}   r}   –   s4   € € € € € ØNÐNðEð Eð Eð Eð Eð Er   r}   )ÚDaemonThreadPoolExecutoré   zhermes-lifecycle)Úmax_workersÚthread_name_prefixé    Ú hermes_subagent_lifecycle_parent)Údefaultzcontextvars.ContextVar[Any]Ú_ACTIVE_PARENT_AGENTÚparent_agentr   c              #  óº   K  — t                                | ¦  «        }	 dV — t                                |¦  «         dS # t                                |¦  «         w xY w)z6Bind the host-owned parent for the current agent turn.N)rŽ   ÚsetÚreset)r�   Útokens     r   Úbind_subagent_parentr”   ¬   s^   è è € õ !×$Ò$ \Ñ2Ô2€Eð*Øˆˆˆå×"Ò" 5Ñ)Ô)Ð)Ð)Ð)øÕ×"Ò" 5Ñ)Ô)Ð)Ð)øøøs	   ž> ¾ArD   c                 ó4   — t                                ¦   «         S )z:Return the parent bound to this execution context, if any.)rŽ   Úgetr   r   r   Úget_active_subagent_parentr—   ¶   s   € å×#Ò#Ñ%Ô%Ð%r   c                  ó¨   — e Zd ZdZd,d„Zd-d
„Zd.d„Zddœd/d„Zd0d„Zd1d„Z	d2d„Z
d3d„Zed4d„¦   «         Zd5d$„Zed6d*„¦   «         Zed7d+„¦   «         ZdS )8ÚSubagentLifecycleServicea7  Stable public service returned by :attr:`PluginContext.subagent_lifecycle`.

    Running children are in-process only.  Completed results remain available
    until process exit; ``reconnect`` accurately reports that a serialized
    handle cannot reconnect after a restart instead of launching work again.
    Úparent_agent_resolverúCallable[[], Any]rD   r~   c                ó   — || _         d S rG   )Ú_parent_agent_resolver)rJ   rš   s     r   r…   z!SubagentLifecycleService.__init__Ã   s   € Ø&;ˆÔ#Ð#Ð#r   Úrequestr#   r;   c                ó   — |                       ¦   «         }|€t          d¦  «        ‚|                      ||¦  «         t          t	          |dd¦  «        pd¦  «        pd }|j        r|j        |k    rt          d¦  «        ‚||j        pdf}t          j        5  |  	                    ¦   «          |j        r|t          j
        v rt          d¦  «        ‚d d d ¦  «         n# 1 swxY w Y   ddlm}m}  |d|j        |j        |j        rt#          |j        ¦  «        nd |j        |d||j        ¬	¦	  «	        }t          t	          |d
d¦  «        pd¦  «        }|st          d¦  «        ‚t)          j        ¦   «         }	t+          t,          |||j        |	t	          |dd ¦  «        t	          |dd ¦  «        t	          |d|j        ¦  «        t/          t	          |dd¦  «        pd¦  «        |                      |||	¦  «        ¦
  «
        }
t3          |
t4          j        |	|¬¦  «        }t          j        5  |t          j        |<   |j        r|t          j
        |<   d d d ¦  «         n# 1 swxY w Y   t:                               | j        ||j        |¦  «        |_         |
S )Nz-No active Hermes parent session is available.Ú
session_idÚ z4parent_session_id does not match the active session.z1Duplicate correlation_id for this parent session.r   )Ú$_build_child_preserving_parent_toolsÚDEFAULT_MAX_ITERATIONSr   )	Ú
task_indexr%   r'   Útoolsetsr*   Úmax_iterationsÚ
task_countr�   r)   Ú_subagent_idz)Hermes failed to assign a child identity.rA   r*   Ú_delegate_roleÚ_delegate_depth)ry   )!r�   r   Ú_validate_requestr$   Úgetattrr.   r/   Ú	_REGISTRYr‚   Ú_cleanup_lockedr„   Útools.delegate_toolr¢   r£   r%   r'   r+   Úlistr*   r)   Útimer;   ÚPUBLIC_CONTRACT_VERSIONr<   Ú_capabilityrx   r   r   rƒ   Ú	_EXECUTORÚsubmitÚ_runrz   )rJ   rž   Úparentr.   Úcorrelation_keyr¢   r£   Úchildr>   ÚcreatedrW   Úrecords               r   ÚlaunchzSubagentLifecycleService.launchÆ   sb  € Ø×,Ò,Ñ.Ô.ˆØˆ>Ý(Ø?ñô ð ð 	×Ò˜w¨Ñ/Ô/Ð/Ý¥¨°¸bÑ AÔ AÐ GÀRÑHÔHÐPÈDÐØÔ$ð 	¨Ô)BÐFWÒ)WÐ)WÝ(ØFñô ð ð -¨gÔ.DÐ.JÈÐKˆÝŒ^ð 	ð 	Ø× Ò Ñ"Ô"Ð"ØÔ%ð ¨/½YÔ=SÐ*SÐ*SÝ,ØGñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 5Ð4ØØ”Ø”OàÔ'ð•T˜'Ô2Ñ3Ô3Ð3àØ”-Ø1ØØØ”ð
ñ 
ô 
ˆõ �' %¨¸Ñ<Ô<ÐBÀÑCÔCˆØð 	VÝ(Ð)TÑUÔUÐUÝ”)‘+”+ˆÝÝ#ØØØÔ"ØÝ�E˜: tÑ,Ô,Ý�E˜7 DÑ)Ô)Ý�EÐ+¨W¬\Ñ:Ô:Ý•˜Ð0°!Ñ4Ô4Ð9¸Ñ:Ô:Ø×Ò˜[Ð*;¸WÑEÔEñ
ô 
ˆõ ˜¥Ô!6¸ÀuÐMÑMÔMˆÝŒ^ð 	Fð 	FØ-3�IÔ˜kÑ*ØÔ%ð FØ:E•	Ô& Ñ7ð	Fð 	Fð 	Fñ 	Fô 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Fõ "×(Ò(¨¬°F¸G¼LÈ&ÑQÔQˆŒØˆs$   Â9CÃCÃ"CÈ%&IÉIÉIrW   rV   c                ó  — |                       |¦  «        }|€-t          |t          j        t	          j        ¦   «         d¦  «        S t
          j        5  t          |j        |j        |j	        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NÚUNKNOWN_HANDLE)
Ú_recordrV   r   r    r±   r­   r‚   rW   rX   rY   ©rJ   rW   r»   s      r   ÚstatuszSubagentLifecycleService.status  sÕ   € Ø—’˜fÑ%Ô%ˆØˆ>Ý!Ø�Ô-­t¬y©{¬{Ð<Lñô ð õ Œ^ð 	Rð 	RÝ! &¤-°´¸vÔ?PÑQÔQð	Rð 	Rð 	Rð 	Rñ 	Rô 	Rð 	Rð 	Rð 	Rð 	Rð 	Rð 	Røøøð 	Rð 	Rð 	Rð 	Rð 	Rð 	Rs   Á A>Á>BÂBN)r5   r5   r4   r]   c               óª  — |                       |¦  «        }|€t          |t          j        dd¬¦  «        S |j        }|�O	 |                     |¬¦  «         n7# t          $ r t          |j        |j        dd¦  «        cY S t          $ r Y nw xY wt          j        5  t          |j        |j        |j        d u¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NTr¾   )rZ   )ÚtimeoutF)r¿   r]   r   r    rz   r{   r   rW   rX   Ú	Exceptionr­   r‚   )rJ   rW   r5   r»   rz   s        r   ÚwaitzSubagentLifecycleService.wait  sH  € ð —’˜fÑ%Ô%ˆØˆ>Ý(Ø�Ô-¨tÐ@Pðñ ô ð ð ”ˆØÐðØ—’ o�Ñ6Ô6Ð6Ð6øÝð Wð Wð WÝ,¨V¬]¸F¼LÈ%ÐQUÑVÔVÐVÐVÐVÝð ð ð Ø�ðøøøåŒ^ð 	ð 	Ý(Ø”˜vœ|¨V¬]À$Ð-Fñô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s)   ¿A Á&B
Á>	B
Â	B
Â"CÃCÃCÚreasonr$   rb   c               óŽ  — |                       |¦  «        }|€t          dd¬¦  «        S t          j        5  |j        �#t          dd|j        ¬¦  «        cd d d ¦  «         S |j        }t          j        |_        t          j	        ¦   «         |_
        d d d ¦  «         n# 1 swxY w Y   |€t          ddt          j        ¬¦  «        S 	 t          |d|d d…         › �¦  «        }n,# t          $ r t          ddt          j        ¬¦  «        cY S w xY w|st          ddt          j        ¬¦  «        S t          dt          j        ¬¦  «        S )	NFT)re   )rd   rX   )rf   rX   z"Lifecycle cancellation requested: iô  )rX   )r¿   rb   r­   r‚   r{   rX   ry   r   r   r±   rY   r   rÄ   )rJ   rW   rÆ   r»   ry   rc   s         r   ÚcancelzSubagentLifecycleService.cancel$  sÓ  € Ø—’˜fÑ%Ô%ˆØˆ>Ý'¨¸dÐCÑCÔCÐCÝŒ^ð 	,ð 	,ØŒ}Ð(Ý+Ø¨D¸¼ðñ ô ð	,ð 	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð
 ”LˆEÝ(Ô9ˆFŒLÝ $¤	¡¤ˆFÔð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð ˆ=Ý'Ø 4­}Ô/Mðñ ô ð ð	Ý-ØÐJ¸FÀ4ÀCÀ4¼LÐJÐJñô ˆHˆHøõ ð 	ð 	ð 	Ý'Ø 4­}Ô/Mðñ ô ð ð ð ð	øøøð ð 	Ý'Ø 4­}Ô/Mðñ ô ð õ $ DµÔ0NÐOÑOÔOÐOs)   µBÁ 0BÂB Â#B ÃC" Ã"&DÄ
Drh   c                ó$  — |                       |¦  «        }|€t          |t          j        dd¬¦  «        S t          j        5  |j        �|j        cd d d ¦  «         S t          |j        |j        dd¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NFr¾   )ro   Ú	NOT_READY)	r¿   rh   r   r    r­   r‚   r{   rW   rX   rÀ   s      r   r{   zSubagentLifecycleService.resultB  s  € Ø—’˜fÑ%Ô%ˆØˆ>Ý!ØÝÔ%ØØ%5ð	ñ ô ð õ Œ^ð 	ð 	ØŒ}Ð(Ø”}ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	õ "Ø”˜vœ|¨UÈðñ ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÁBÁBÂB	ÂB	ru   c                óÜ   — |                       |¦  «        }|€t          dt          j        d¦  «        S t          j        5  t          d|j        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NFÚRECONNECT_UNAVAILABLET)r¿   ru   r   r    r­   r‚   rX   rÀ   s      r   Ú	reconnectz"SubagentLifecycleService.reconnectR  s²   € Ø—’˜fÑ%Ô%ˆØˆ>Ý*Ø•}Ô,Ð.Eñô ð õ Œ^ð 	?ð 	?Ý*¨4°´Ñ>Ô>ð	?ð 	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?s   ¿A!Á!A%Á(A%úOptional[_Record]c                óº  — t          |t          ¦  «        r+t          |j        ¦  «        t          us|j        t
          k    rd S t          |j        t          ¦  «        �r0|j        �r(|j        �t          |j        t          ¦  «        �r|j	        �t          |j	        t          ¦  «        råt          |j
        t          ¦  «        sËt          |j
        t          t          f¦  «        rªt          j        |j
        ¦  «        r‘|j        �t          |j        t          ¦  «        rp|j        �t          |j        t          ¦  «        rOt          |j        t          ¦  «        r5t          |j        ¦  «        t          ust          |j        t          ¦  «        sd S t)          j        |j        |                      |j        |j        |j
        ¦  «        ¦  «        sd S |                      ¦   «         }t          t1          |dd¦  «        pd¦  «        pd }||j        k    rd S t2          j        5  t2          j                             |j        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr    r¡   )Ú
isinstancer;   Útyper=   r<   r²   r>   r$   r.   r/   r@   r^   r?   ÚmathÚisfiniterA   r*   r)   rB   rC   ÚhmacÚcompare_digestr³   r�   r¬   r­   r‚   rƒ   r–   )rJ   rW   r·   Úactive_parent_ids       r   r¿   z SubagentLifecycleService._record[  sq  € å˜6¥>Ñ2Ô2ð	å�FÔ+Ñ,Ô,µCÐ7Ð7ØÔ&Õ*AÒAÐAà�4å˜6Ô-­sÑ3Ô3ñ	àÔ%ñ	ð Ô(Ð4Ý" 6Ô#;½SÑAÔAñ 5ð Ô%Ð1Ý" 6Ô#8½#Ñ>Ô>ð 2õ ˜&Ô+­TÑ2Ô2ð 2õ ˜fÔ/µ#µu°Ñ>Ô>ð	 2õ
 ”= Ô!2Ñ3Ô3ð 2ð ”Ð+µJ¸v¼ÕPSÑ4TÔ4TÐ+Ø”Ð(µ¸F¼LÍ#Ñ1NÔ1NÐ(Ý˜fœk­3Ñ/Ô/ð )å�F”LÑ!Ô!­Ð,Ð,Ý˜fÔ/µÑ5Ô5ð -ð �4ÝÔ"ØÔØ×ÒØÔ" FÔ$<¸fÔ>Oñô ñ
ô 
ð 	ð �4Ø×,Ò,Ñ.Ô.ˆÝ�w v¨|¸RÑ@Ô@ÐFÀBÑGÔGÐOÈ4ÐØ˜vÔ7Ò7Ð7Ø�4ÝŒ^ð 	=ð 	=ÝÔ$×(Ò(¨Ô);Ñ<Ô<ð	=ð 	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=s   È$IÉIÉIc                 ó^  ‡— t          j         ¦   «         t          z
  Šˆfd„t          j                             ¦   «         D ¦   «         } | D ]c}t          j                             |¦  «        }|j        j        r6t          j                             |j        j	        |j        j        fd¦  «         ŒddS )z@Retain terminal snapshots for a bounded period, never live work.c                óL   •— g | ] \  }}|j         �|j        �|j        ‰k     ¯|‘Œ!S rG   )r{   rn   )Ú.0r>   r»   Úcutoffs      €r   ú
<listcomp>z<SubagentLifecycleService._cleanup_locked.<locals>.<listcomp>‰  sH   ø€ ð 
ð 
ð 
á#�˜VØŒ}Ð(ØÔ#Ð/ØÔ# fÒ,Ð,ð	 ð -Ð,Ð,r   N)
r±   Ú_TERMINAL_RETENTION_SECONDSr­   rƒ   ÚitemsÚpoprW   r/   r„   r.   )Úexpiredr>   r»   rÚ   s      @r   r®   z(SubagentLifecycleService._cleanup_locked…  s¼   ø€ õ ”‘”Õ:Ñ:ˆð
ð 
ð 
ð 
å'0Ô'8×'>Ò'>Ñ'@Ô'@ð
ñ 
ô 
ˆð #ð 	ð 	ˆKÝÔ&×*Ò*¨;Ñ7Ô7ˆFØŒ}Ô+ð ÝÔ&×*Ò*Ø”]Ô4°f´mÔ6RÐSØñô ð øð	ð 	r   r»   rx   r%   r·   r   c                ó®  — t           j        5  |j        t          j        urt          j        |_        t          j        ¦   «         |_        |j        |_        d d d ¦  «         n# 1 swxY w Y   	 ddl	m
}  |d||j        |¦  «        }t          |t          ¦  «        r#t          |                     dd¦  «        ¦  «        nd}|dk    rt          j        }n@|dk    r.|j        t          j        k    rt          j        nt          j        }nt          j        }t          |t          ¦  «        r|                     d¦  «        nd }|�t          |¦  «        d t(          …         nd }t          |t          ¦  «        r|                     d¦  «        nd }	t+          |j        |d|t          j        ¦   «         |j        |t          j        k    rd n|                     ¦   «         |	rt          |	¦  «        d t(          …         nd t          |t          ¦  «        rd	|                     d	d¦  «        ini t          |t          ¦  «        rd
|                     d
d¦  «        ini ¬¦
  «
        }
n~# t0          $ rq}t+          |j        t          j        d|j        t          j        ¦   «         t3          |¦  «        j        t          |¦  «        d t(          …         ¬¦  «        }
Y d }~nd }~ww xY wt7          j        |
¦  «        }|                     dd ¦  «         t7          j        |
t?          j         tC          j"        |dt          ¬¦  «         #                    ¦   «         ¦  «         $                    ¦   «         ¬¦  «        }
t           j        5  d |_        |
|_%        |
j&        |_        |
j'        |_'        |
j'        pt          j        ¦   «         |_        d d d ¦  «         d S # 1 swxY w Y   d S )Nr   )Ú_run_child_lifecyclerÁ   Úerrorr_   Úinterruptedrk   TÚ	api_callsÚduration_seconds)rk   rn   rm   ro   rp   rq   rr   )rm   rn   ro   rp   rs   )Ú	sort_keysr�   )rs   )(r­   r‚   rX   r   r   r   r±   rm   rY   r¯   rá   ry   rÐ   r9   r$   r–   r   r   r   r   Ú_MAX_RESULT_CHARSrh   rW   ÚupperrÄ   rÑ   r   r7   rH   rÞ   ÚreplaceÚhashlibÚsha256ÚjsonÚdumpsÚencodeÚ	hexdigestr{   ri   rn   )rJ   r»   r%   r·   rá   ÚrawrÁ   rX   rk   râ   r{   rR   Úpayloads                r   r¶   zSubagentLifecycleService._run˜  s;  € ÝŒ^ð 	2ð 	2ØŒ|¥=Ô#AÐAÐAÝ,Ô4�”Ý $¤	¡¤ˆFÔØ &Ô 1ˆFÔð		2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð
1	Ø@Ð@Ð@Ð@Ð@Ð@à&Ð& q¨$°´¸fÑEÔEˆCå3=¸cÅ4Ñ3HÔ3HÐU•�C—G’G˜H gÑ.Ô.Ñ/Ô/Ð/Ègð ð ˜Ò$Ð$Ý%Ô/��Ø˜=Ò(Ð(ð ”|¥}Ô'EÒEÐEõ "Ô+Ð+å&Ô2ð �õ &Ô,�Ý,6°s½DÑ,AÔ,AÐK�c—g’g˜iÑ(Ô(Ð(ÀtˆGØ:AÐ:M•c˜'‘l”lÐ#5Õ$5Ð#5Ô6Ð6ÐSWˆGÝ(2°3½Ñ(=Ô(=ÐG�C—G’G˜GÑ$Ô$Ð$À4ˆEÝ#Ø”ØØØÝ!œY™[œ[Ø!Ô,à�MÔ3Ò3Ð3ð &* Tà—\’\‘^”^Ø@EÐO�c %™jœjÐ);Õ*;Ð);Ô<Ð<È4å˜c¥4Ñ(Ô(ð  ¨S¯WªW°[À!Ñ-DÔ-DÐEÐEàõ ˜c¥4Ñ(Ô(ð(Ø&¨¯ªÐ0BÀAÑ(FÔ(Fð(ð (ð ð%ñ ô ˆFˆFøõ( ð 		ð 		ð 		Ý#Ø”ÝÔ$ØØ!Ô,Ý!œY™[œ[Ý%)¨#¡Y¤YÔ%7Ý! #™hœhÐ'9Õ(9Ð'9Ô:ðñ ô ˆFˆFˆFˆFˆFˆFøøøøð		øøøõ Ô$ VÑ,Ô,ˆØ�Š�M 4Ñ(Ô(Ð(ÝÔ$ØÝœÝ”
˜7¨d½CÐ@Ñ@Ô@×GÒGÑIÔIñô çŠi‰kŒkð	
ñ 
ô 
ˆõ Œ^ð 	Cð 	CØˆFŒLØ"ˆFŒMØ!Ô0ˆFŒLØ"(Ô"5ˆFÔØ &Ô 3Ð Bµt´y±{´{ˆFÔð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cs?   �A	A"Á"A&Á)A&Á.G.I É
KÉ'A'KËKÍ7AO
Ï
OÏOr>   r.   r&   r@   r?   c                ó®   — | › d|pd› d|d›�                      ¦   «         }t          j        t          |t          j        ¦  «                             ¦   «         S )NÚ|r¡   z.6f)rî   rÔ   ÚnewÚ_SECRETrê   rë   rï   )r>   r.   r@   rL   s       r   r³   z$SubagentLifecycleService._capabilityß  sV   € ð ÐKÐKÐ!2Ð!8°bÐKÐK¸:ÐKÐKÐK×RÒRÑTÔTˆÝŒx� ­¬Ñ7Ô7×AÒAÑCÔCÐCr   c                óÔ  — t          | t          ¦  «        rPt          | j        t          ¦  «        r6| j                             ¦   «         rt          | j        ¦  «        t          k    rt          d¦  «        ‚| j        �Ft          | j        t          ¦  «        rt          | j        ¦  «        t          k    rt          d¦  «        ‚| j
        dvrt          d¦  «        ‚| j        �t          d¦  «        ‚| j        �t          d¦  «        ‚| j        rt          d¦  «        ‚	 t          t          j        t!          | j        ¦  «        d¬	¦  «                             ¦   «         ¦  «        }n)# t&          t(          f$ r}t          d
¦  «        |‚d }~ww xY w|t*          k    rt          d¦  «        ‚| j        rµddlm} t3          | j        ¦  «        t3          |¦  «        z
  }|r3t          dd                     t7          |¦  «        ¦  «        › d�¦  «        ‚t9          |dd ¦  «        }|�Et3          | j        ¦  «                             t3          |¦  «        ¦  «        st          d¦  «        ‚d S d S d S )Nz<goal must be a non-empty string of at most 16000 characters.z5context must be a string of at most 32000 characters.>   r(   Úorchestratorz&role must be 'leaf' or 'orchestrator'.zMPer-launch timeout is not supported; configure delegation timeout explicitly.z[working_directory is not supported because Hermes delegates use isolated task environments.zbPer-tool blocking is not supported; use allowed_toolsets. Hermes always blocks unsafe child tools.T)ræ   z#metadata must be JSON-serializable.zmetadata exceeds 8192 bytes.r   )ÚTOOLSETSzUnknown toolsets: z, ú.Úenabled_toolsetsz4Requested toolsets would broaden parent permissions.)rÐ   r#   r%   r$   ÚstripÚlenÚ_MAX_GOAL_CHARSr   r'   Ú_MAX_CONTEXT_CHARSr)   r5   r-   r,   rì   rí   r9   r3   rî   rO   rP   Ú_MAX_METADATA_BYTESr+   r¥   rø   r‘   ÚjoinÚsortedr¬   Úissubset)rž   r·   Úmetadata_bytesrR   rø   ÚunknownÚenableds          r   r«   z*SubagentLifecycleService._validate_requestæ  s²  € õ ˜7Õ$9Ñ:Ô:ð	å˜gœl­CÑ0Ô0ð	ð ”<×%Ò%Ñ'Ô'ð	õ �7”<Ñ Ô ¥?Ò2Ð2å(ØNñô ð ð Œ?Ð&Ý˜7œ?­CÑ0Ô0ð 'å�7”?Ñ#Ô#Õ&8Ò8Ð8å(ØGñô ð ð Œ<Ð7Ð7Ð7Ý(Ð)QÑRÔRÐRØÔ"Ð.Ý(Ø_ñô ð ð Ô$Ð0Ý(Ømñô ð ð Ô ð 	Ý(Øtñô ð ð	YÝ Ý”
�4 Ô 0Ñ1Ô1¸TÐBÑBÔB×IÒIÑKÔKñô ˆNˆNøõ �:Ð&ð 	Yð 	Yð 	YÝ(Ð)NÑOÔOÐUXÐXøøøøð	YøøøàÕ/Ò/Ð/Ý(Ð)GÑHÔHÐHØÔ#ð 	Ø)Ð)Ð)Ð)Ð)Ð)å˜'Ô2Ñ3Ô3µc¸(±m´mÑCˆGØð Ý,ØF¨¯ªµ6¸'±?´?Ñ)CÔ)CÐFÐFÐFñô ð õ ˜fÐ&8¸$Ñ?Ô?ˆGØÐ"­3¨wÔ/GÑ+HÔ+H×+QÒ+QÝ�G‘”ñ,ô ,Ð"õ -ØJñô ð ð	ð 	ð #Ð"Ð"Ð"s   ÄAE% Å%FÅ6FÆF)rš   r›   rD   r~   )rž   r#   rD   r;   )rW   r;   rD   rV   )rW   r;   r5   r4   rD   r]   )rW   r;   rÆ   r$   rD   rb   )rW   r;   rD   rh   )rW   r;   rD   ru   )rW   r;   rD   rÎ   r†   )r»   rx   r%   r$   r·   r   rD   r~   )r>   r$   r.   r&   r@   r?   rD   r$   )rž   r#   r·   r   rD   r~   )r   r   r   r   r…   r¼   rÁ   rÅ   rÈ   r{   rÍ   r¿   Ústaticmethodr®   r¶   r³   r«   r   r   r   r™   r™   »   sZ  € € € € € ðð ð<ð <ð <ð <ð>ð >ð >ð >ð@Rð Rð Rð Rð MQðð ð ð ð ð ð*Pð Pð Pð Pð<ð ð ð ð ?ð ?ð ?ð ?ð(=ð (=ð (=ð (=ðT ðð ð ñ „\ðð$ECð ECð ECð ECðN ðDð Dð Dñ „\ðDð ð5ð 5ð 5ñ „\ð5ð 5ð 5r   r™   )r�   r   )rD   r   );r   Ú
__future__r   Úcontextvarsr7   Úenumrê   rÔ   rì   rÒ   Úsecretsr€   r±   Ú
contextlibr   Úconcurrent.futuresr   r   Útypingr   r   r	   r
   Úagent.interrupt_compatr   r²   rý   rþ   rÿ   rç   rÜ   rP   r   r$   ÚEnumr   Ú	dataclassr#   r;   rV   r]   rb   rh   ru   rx   r}   r­   Útools.daemon_poolr‡   Ú_DaemonExecutorr´   Útoken_bytesrõ   Ú
ContextVarrŽ   r6   r”   r—   r™   r   r   r   ú<module>r     s­  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à 9Ð 9Ð 9Ð 9Ð 9Ð 9àÐ Ø€ØÐ ØÐ ØÐ Ø#Ð ðKð Kð Kð Kð K˜Zñ Kô Kð Kð	ð 	ð 	ð 	ð 	�C˜œñ 	ô 	ð 	ð €Ô˜dÐ#Ñ#Ô#ð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ $Ô#ð,ð €Ô˜dÐ#Ñ#Ô#ðPð Pð Pð Pð Pñ Pô Pñ $Ô#ðPð. €Ô˜dÐ#Ñ#Ô#ð%ð %ð %ð %ð %ñ %ô %ñ $Ô#ð%ð €Ô˜dÐ#Ñ#Ô#ð%ð %ð %ð %ð %ñ %ô %ñ $Ô#ð%ð €Ô˜dÐ#Ñ#Ô#ð1ð 1ð 1ð 1ð 1ñ 1ô 1ñ $Ô#ð1ð €Ô˜dÐ#Ñ#Ô#ð&ð &ð &ð &ð &ñ &ô &ñ $Ô#ð&ð €Ô˜dÐ#Ñ#Ô#ð%ð %ð %ð %ð %ñ %ô %ñ $Ô#ð%ð Ôð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ Ôð,ðEð Eð Eð Eð Eñ Eô Eð Eð ˆI‰KŒK€	ð JÐ IÐ IÐ IÐ IÐ IàˆO¨Ð>PÐQÑQÔQ€	Ø
ˆ'Ô
˜bÑ
!Ô
!€Ø4J°KÔ4JØ&°ð5ñ 5ô 5Ð ð ð ð ñ ð
 ð*ð *ð *ñ „ð*ð&ð &ð &ð &ð
að að að að añ aô að að að ar   