+
    lHàjú  ã                  óÆ   € R t ^ RIHt ^ RIt^ RIHtHt ^ RIHtH	t	 ^ RI
Ht ]P                  ! R4      t]! . RO4      t. ROtR R ltR	 R
 ltR R ltR R ltR R ltR# )zOChild toolset resolution for delegate_task: what a child may and may never use.)ÚannotationsN)ÚListÚOptional)ÚTOOLSETSÚresolve_toolset)Ú_get_inherit_mcp_toolsetsztools.delegate_toolc               ó    € V ^8„  d   QhRRRR/# )é   ÚnameÚstrÚreturnÚbool© )Úformats   "ÚA/home/ubuntu/.hermes/hermes-agent/tools/delegate_tool_toolsets.pyÚ__annotate__r      s   € ÷ ;ñ ;˜sð ; tñ ;ó    c                ó  € V '       g   R# \        V 4      P                  R4      '       d   R#  ^ RIHp VP	                  \        V 4      4      p\        T;'       d    \        V4      P                  R4      4      #   \
         d    Rp L<i ; i)zDReturn True for canonical MCP toolsets and their registered aliases.Fzmcp-T)ÚregistryN)r   Ú
startswithÚtools.registryr   Úget_toolset_alias_targetÚ	Exceptionr   )r
   r   Útargets   &  r   Ú_is_mcp_toolset_namer      sv   € çÙÜ
ˆ4ƒy×Ñ˜F×#Ò#ÙðÝ+Ø×2Ñ2´3°t³9Ó=ˆô �×9Ð9œ3˜v›;×1Ñ1°&Ó9Ó:Ð:øô ô ØŠðús   ® A; Á;BÂ
Bc               ó    € V ^8„  d   QhRRRR/# )r	   Úparent_toolsetsÚsetr   r   )r   s   "r   r   r   &   s   € ÷ ñ ¨Sð °Sñ r   c           	     óæ   aaa€ V  UUu0 uF$  q\         9   g   K  \        VRR7       F  q"kK  	  K&  	  uppo\        V 4      oS'       d"   SP                  VVV3R l\          4       4       S# u uppi )aš  Add every toolset whose tools are a subset of the parent's tools: a parent on a composite like ``hermes-cli``
must still let a child request ``web``/``terminal``; bare name intersection would reject them. Both sides use
the RESOLVED static surface: a composite's ``includes`` (``debugging`` -> ``web``/``file``, ``safe``) are tools
the parent genuinely holds, and the child never gains a tool the parent lacks.F©Úinclude_registryc              3  ó¬   <"  € T FI  pVS9  g   K  \        VR R7      ;o'       g   K#  \        S4      P                  S4      '       g   KE  Vx € KK  	  R# 5i)Fr   N)r   r   Úissubset)Ú.0Úts_nameÚexpandedÚparent_tool_namesÚresolveds   & €€€r   Ú	<genexpr>Ú*_expand_parent_toolsets.<locals>.<genexpr>0   sR   øé € ð 
Ù#+˜Ø˜hÑ&ô ä,¨WÀuÔMÐM�ÓMô ô �H“×&Ñ&Ð'8×9÷ ŠG£8ùs   ƒ	A‘A¨AÁ

A)r   r   r   Úupdate)r   r$   Útr%   r&   r'   s   &  @@@r   Ú_expand_parent_toolsetsr,   &   sl   ú€ ñ )ôÙ(ˆg´xÑ,?ŒÌÐY`Ðsx×IyÀAŠÑIy‰™òÐô �?Ó#€HßØ�‰ö 
Ý#+ó
ô 	
ð €Oùós
   ‰A-šA-c               ó    € V ^8„  d   QhRRRR/# )r	   Útoolsetsú	list[str]r   r   )r   s   "r   r   r   8   s   € ÷ 	Cñ 	C 9ð 	C°ñ 	Cr   c           	     ó.  € RR0\          Uu0 uFX  p\        VRR7      ;p'       g   K  \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   KV  VkKZ  	  up,          pV  Uu. uF  qDV9  g   K  VNK  	  up# u upi u upi )z¶Remove toolsets whose tools are ALL blocked (derived from DELEGATE_BLOCKED_TOOLS so the two can't drift) plus
composite toolsets children must never get (``delegation``, ``kanban``).Ú
delegationÚkanbanFr   c              3  ó2   "  € T F  q\         9   x € K  	  R # 5i)N)ÚDELEGATE_BLOCKED_TOOLS)r#   Útools   & r   r(   Ú'_strip_blocked_tools.<locals>.<genexpr>?   s   é € ÐJ¹>°4Ô.Ö.»>ùs   ‚T)r   r   Úall)r.   r
   Úresolved_toolsÚblocked_toolset_namesr+   s   &    r   Ú_strip_blocked_toolsr:   8   s’   € ð *¨8Ð4åó8áˆDÜ-¨dÀUÔKÐKˆNÓKô 	÷ ‹CÑJ¹>ÓJ�C�CŠCÑJ¹>ÓJ×J÷ 	ˆÙñ8õ Ðñ  ÓB‘x�!Ð,AÑ#A�AˆA‘xÑBÐBùò8ùò Cs'   ŒB¨
B³BÁBÁ$BÁ7BÂBc               ó    € V ^8„  d   QhRRRR/# )r	   Úroler   r   r/   r   )r   s   "r   r   r   C   s   € ÷ ñ  Sð ¨Yñ r   c                ó¢   a€ \        \        4      oV R8X  d   SP                  R4       \        V3R l\        P
                  ! 4        4       4      # )z”One-tool deny toolsets for the role; passed as ``disabled_toolsets`` so
blocked names inside mixed bundles are subtracted AFTER composite expansion.ÚorchestratorÚdelegate_taskc              3  óÂ   <"  € T FT  w  rVP                  R 4      '       g   K  \        VP                  R R4      4      P                  S4      '       g   KP  Vx € KV  	  R# 5i)ÚtoolsNr   )Úgetr   r"   )r#   r
   ÚdefnÚblocked_namess   &  €r   r(   Ú-_blocked_toolsets_for_role.<locals>.<genexpr>I   sF   øé € ð Ù/‘�°4·8±8¸G×3DŒÌÈTÏXÉXÐV]Ð_aÓMbÓIc×IlÑIlÐmz×I{�ŠÓ/ùs   ƒA£-AÁ
A)r   r4   ÚdiscardÚsortedr   Úitems)r<   rD   s   &@r   Ú_blocked_toolsets_for_rolerI   C   sG   ø€ ô Ô.Ó/€MØˆ~ÔØ×Ñ˜oÔ.Üô Ü'Ÿ~š~Ô/óó ð r   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r.   zOptional[list[str]]Úeffective_roler   r   ztuple[list[str], list[str]]r   )r   s   "r   r   r   M   s$   € ÷ .3ñ .3Ø/ð.3ØADð.3à ñ.3r   c                óþ  € \        V RR4      pVe   \        V4      pM_V '       dI   \        V R4      '       d7   ^ RIpV P                   Uu0 uF  qeP                  V4      ;pf   K  VkK  	  ppM\        \        4      pV'       ds   \        V4      pV U	u. uF  q™V9   g   K  V	NK  	  p
p	\        4       '       d>   T
\        V4       Uu. uF   p\        V4      '       g   K  Wj9  g   K  VNK"  	  up,          p
M(V '       d   Ve   Tp
M\        V4      ;'       g    \        p
\        V
4      p
\        V RR4      p\        V\        \        \        34      '       d   V Uu. uF  p\        V4      NK  	  upM. pVR8X  d2   V Uu. uF  qfR8w  g   K  VNK  	  ppRV
9  d   V
P!                  R4       \        \"        P%                  V\'        V4      ,           R.,           4      4      pW­3# u upi u up	i u upi u upi u upi )u2  ``(enabled_toolsets, disabled_toolsets)`` for a child. Children never gain tools the parent lacks: explicit
``toolsets`` are intersected with the parent's (composite-expanded) set, else the parent's enabled set is
inherited. Blocked tools are stripped twice â€” whole blocked toolsets here, and exact one-tool deny toolsets via
``disabled_toolsets`` so blocked names inside mixed bundles (hermes-cli) are subtracted AFTER composite
expansion and survive registry refreshes. Orchestrators get ``delegation`` re-added unconditionally
(role-granted, not inherited).Úenabled_toolsetsNÚvalid_tool_namesÚdisabled_toolsetsr>   r1   r2   )Úgetattrr   ÚhasattrÚmodel_toolsrN   Úget_toolset_for_toolÚDEFAULT_TOOLSETSr,   r   rG   r   r:   Ú
isinstanceÚlistÚtupler   ÚappendÚdictÚfromkeysrI   )Úparent_agentr.   rK   Úparent_enabledr   rR   r
   ÚtsÚexpanded_parentr+   Úchild_toolsetsÚraw_parent_disabledÚinherited_disabledÚchild_disabled_toolsetss   &&&           r   Ú_resolve_child_toolsetsrc   M   së  € ô ˜\Ð+=¸tÓD€NØÒ!Ü˜nÓ-‰ß	œ' ,Ð0B×CÒCÛà'×8Ò8ó
Ù8�4×CcÑCcÐdhÓCiÐ=i¸R�BˆBÑ8ð 	ð 
ˆô Ô.Ó/ˆçÜ1°/ÓBˆÙ%-ÓF¡X °oÑ1EŸ!˜!¡XˆÐFÜ$×&Ò&àÜ!'¨Ô!8óÙ!8˜Ô<PÐQU×<V”Ð[_Ñ[u—�Ñ!8ñõ ˆNø÷ 
˜.Ò4Ø'‰ä Ó0×DÐDÔ4DˆÜ)¨.Ó9€Nä! ,Ð0CÀTÓJÐä7AÐBUÔX\Ô^cÔehÐWi×7jÒ7jÑ2Ó3Ñ2�tŒˆTŽÑ2Ò3Ðprð ð ˜Ô'Ù/AÓZÑ/A tÈ\ÑEYŸd˜dÑ/AÐÐZØ˜~Ô-Ø×!Ñ! ,Ô/Ü"Ü�‰Ð(Ô+EÀnÓ+UÕUÐYaÐXbÕbÓcóÐð Ð2Ð2ùò?
ùò Gùòùò 	4ùò [s<   Á
G&Á%G&ÂG+Â!G+ÃG0ÃG0Ã'G0ÅG5Æ G:ÆG:)r?   ÚclarifyÚmemoryÚsend_messageÚcronjob_manage)ÚterminalÚfileÚweb)Ú__doc__Ú
__future__r   ÚloggingÚtypingr   r   r.   r   r   Útools.delegate_tool_configr   Ú	getLoggerÚloggerÚ	frozensetr4   rT   r   r,   r:   rI   rc   r   r   r   Ú<module>rs      s\   ðÙ Uå "ã ß !ç .Ý @à	×	Ò	Ð0Ó	1€ñ #òóÐ ò /Ð õ;õõ$	Cõ÷.3r   