§
    ÚŽ’jÜ4  ã                   ó  — d Z ddlmZmZ ddlmZmZmZmZ ddl	Z
ddlmZ ddlmZ dd	lmZmZmZmZmZmZmZ dd
lmZ  G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )zThe agent state class.é    )ÚAnyÚType)Ú	BaseModelÚFieldÚfield_serializerÚmodel_validatorNé   )Ú_generate_idé   )ÚTask)Ú	TextBlockÚ	DataBlockÚMsgÚToolCallBlockÚToolCallStateÚToolResultBlockÚ	HintBlock)ÚPermissionContextc                   óH   — e Zd ZU dZee         ed<   eed<   eed<   eed<   dS )ÚReadCacheEntryzThe read file cache.ÚlinesÚ
updated_atÚbytesÚ	file_pathN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚlistÚstrÚ__annotations__Úfloat© ó    úEC:\Projects\DSCons\.venv\Lib\site-packages\agentscope\state\_state.pyr   r      sD   € € € € € € ØÐà�Œ9ÐÐÑØÐÐÑØ€L€L�LØ€N€N�N€N€Nr$   r   c                   ó  — e Zd ZU dZ edd¬¦  «        Zeed<   	  edd¬¦  «        Ze	ed<   	  ee
¬	¦  «        Ze
e         ed
<   	  ee
¬	¦  «        Ze
e         ed<   	 dededz  fd„Zdede
e         ddfd„Z	 ddee         dz  ddfd„ZdS )ÚToolContextz!The tool context, e.g. tool cacheéd   r   )ÚdefaultÚgtÚmax_cache_filesi¨a  i'  Úmax_cache_bytes©Údefault_factoryÚread_file_cacheÚactivated_groupsr   ÚreturnNc              ƒ   ó:  K  — | j         D ]�}|j        |k    rƒ	 t          j        j                             |¦  «        ƒ d{V —†}||j        k    r|c S | j                              |¦  «          dS # t          $ r | j                              |¦  «         Y  dS w xY wŒ‘dS )z¾Get cached file content if still valid.

        Args:
            file_path: The absolute path of the file.

        Returns:
            The cached entry if valid, otherwise None.
        N)	r/   r   ÚaiofilesÚosÚpathÚgetmtimer   ÚremoveÚ	Exception)Úselfr   Úentryr   s       r%   Ú	get_cachezToolContext.get_cache.   sÔ   è è € ð Ô)ð 	 ð 	 ˆEØŒ )Ò+Ð+ð Ý'/¤{Ô'7×'@Ò'@ÀÑ'KÔ'KÐ!KÐ!KÐ!KÐ!KÐ!KÐ!K�JØ! UÔ%5Ò5Ð5Ø$˜˜˜ð Ô,×3Ò3°EÑ:Ô:Ð:Ø#˜t˜tøÝ ð  ð  ð  àÔ(×/Ò/°Ñ6Ô6Ð6Ø˜4˜4˜4ð øøøð ,ð ˆts   ˜6A.ÁA.Á.$BÂBr   c              ƒ   óÄ  ‡K  — 	 t           j        j                             ‰¦  «        ƒ d{V —†}n# t          $ r Y dS w xY wt          d„ |D ¦   «         ¦  «        dz  }ˆfd„| j        D ¦   «         | _        t          | j        ¦  «        | j        k    r7| j         	                    d¦  «         t          | j        ¦  «        | j        k    °7t          d„ | j        D ¦   «         ¦  «        }| j        rG||z   | j
        k    r9| j         	                    d¦  «        }||j        z  }| j        r||z   | j
        k    °9| j                             t          |||‰¬¦  «        ¦  «         dS )z¥Cache file content with LRU eviction.

        Args:
            file_path: The absolute path of the file.
            lines: The lines of the file content.
        Nc              3   óZ   K  — | ]&}t          |                     d ¦  «        ¦  «        V — Œ'dS )zutf-8N)ÚlenÚencode)Ú.0Úlines     r%   ú	<genexpr>z)ToolContext.cache_file.<locals>.<genexpr>Y   s6   è è € Ð<Ð<¨d•�D—K’K Ñ(Ô(Ñ)Ô)Ð<Ð<Ð<Ð<Ð<Ð<r$   i   c                 ó*   •— g | ]}|j         ‰k    ¯|‘ŒS r#   ©r   )r@   r:   r   s     €r%   ú
<listcomp>z*ToolContext.cache_file.<locals>.<listcomp>]   s0   ø€ ð  
ð  
ð  
àØŒ )Ò+Ð+ð à+Ð+Ð+r$   r   c              3   ó$   K  — | ]}|j         V — Œd S ©N)r   )r@   r:   s     r%   rB   z)ToolContext.cache_file.<locals>.<genexpr>h   s$   è è € ÐIÐI¨5˜5œ;ÐIÐIÐIÐIÐIÐIr$   )r   r   r   r   )r3   r4   r5   r6   r8   Úsumr/   r>   r+   Úpopr,   r   Úappendr   )r9   r   r   r   Únew_entry_bytesÚcurrent_sizeÚremoveds    `     r%   Ú
cache_filezToolContext.cache_fileJ   sÁ  øè è € ð	Ý'œ{Ô/×8Ò8¸ÑCÔCÐCÐCÐCÐCÐCÐCˆJˆJøÝð 	ð 	ð 	àˆFˆFð	øøøõ Ð<Ð<°eÐ<Ñ<Ô<Ñ<Ô<¸tÑCð 	ð
 
ð  
ð  
ð  
àÔ-ð 
ñ  
ô  
ˆÔõ �$Ô&Ñ'Ô'¨4Ô+?Ò?Ð?ØÔ ×$Ò$ QÑ'Ô'Ð'õ �$Ô&Ñ'Ô'¨4Ô+?Ò?Ð?õ ÐIÐI°DÔ4HÐIÑIÔIÑIÔIˆàÔ ð	*à˜Ñ.°Ô1EÒEÐEàÔ*×.Ò.¨qÑ1Ô1ˆGØ˜GœMÑ)ˆLð	 Ô ð	*à˜Ñ.°Ô1EÒEÐEð 	Ô×#Ò#ÝØØ%Ø%Ø#ð	ñ ô ñ	
ô 	
ð 	
ð 	
ð 	
s   …*0 °
>½>Úreserved_file_pathsc              ƒ   ó\   ‡K  — ‰pt          ¦   «         Šˆfd„| j        D ¦   «         | _        dS )a	  Drop read caches whose paths are not in ``reserved_file_paths``.

        Args:
            reserved_file_paths: File paths from Read calls that remain in the
                context. Caches for these files are kept; all others are
                evicted.
        c                 ó&   •— g | ]}|j         ‰v ¯|‘ŒS r#   rD   )r@   r:   rO   s     €r%   rE   z0ToolContext.clean_file_cache.<locals>.<listcomp>‡   s1   ø€ ð  
ð  
ð  
àØŒÐ"5Ð5Ð5ð à5Ð5Ð5r$   N)Úsetr/   )r9   rO   s    `r%   Úclean_file_cachezToolContext.clean_file_cachez   sL   øè è € ð 2Ð:µS±U´UÐð 
ð  
ð  
ð  
àÔ-ð 
ñ  
ô  
ˆÔÐÐr$   rG   )r   r   r   r   r   r+   Úintr!   r,   r"   r   r/   r   r0   r    r;   rN   rR   rS   r#   r$   r%   r'   r'       s9  € € € € € € Ø+Ð+à ˜5¨°Ð3Ñ3Ô3€O�SÐ3Ð3Ñ3Ø-Ø"˜U¨5°UÐ;Ñ;Ô;€O�UÐ;Ð;Ñ;Ø>Ø,1¨EÀ$Ð,GÑ,GÔ,G€O�T˜.Ô)ÐGÐGÑGØ3à"' %¸Ð"=Ñ"=Ô"=Ð�d˜3”iÐ=Ð=Ñ=ðð¨ð °À$Ñ1Fð ð ð ð ð8.
¨#ð .
°d¸3´ið .
ÀDð .
ð .
ð .
ð .
ðd 04ð
ð 
à  œX¨™_ð
ð 
ð
ð 
ð 
ð 
ð 
ð 
r$   r'   c                   óD   — e Zd ZU dZ ed„ ¬¦  «        Zee         ed<   dS )ÚTaskContextzThe task context.c                  ó   — g S rG   r#   r#   r$   r%   ú<lambda>zTaskContext.<lambda>‘   s   € °b€ r$   r-   ÚtasksN)	r   r   r   r   r   rY   r   r   r!   r#   r$   r%   rV   rV   Ž   s;   € € € € € € ØÐà˜¨j¨jÐ9Ñ9Ô9€Eˆ4�Œ:Ð9Ð9Ñ9ØÐr$   rV   c                   óÔ   — e Zd ZU dZ ee¬¦  «        Zeed<   	 dZ	e
ed<   	 dZee         ez  dz  ed<   	  ed¦  «        dee         ez  dz  d	edz  fd
„¦   «         ZdZedz  ed<   dS )ÚReplyContextz'The context of the current agent reply.r-   Úreply_idr   Úcur_iterNÚstructured_schemaÚvaluer1   c                 óX   — t          |t          ¦  «        r|                     ¦   «         n|S )z3Serialize a schema class into its JSON schema dict.)Ú
isinstanceÚtypeÚmodel_json_schema©r9   r_   s     r%   Ú_serialize_structured_schemaz)ReplyContext._serialize_structured_schema¤   s*   € õ -7°u½dÑ,CÔ,CÐNˆu×&Ò&Ñ(Ô(Ð(ÈÐNr$   Ústructured_output)r   r   r   r   r   r
   r\   r    r!   r]   rT   r^   r   r   Údictr   re   rf   r#   r$   r%   r[   r[   •   så   € € € € € € Ø1Ð1à�E¨,Ð7Ñ7Ô7€HˆcÐ7Ð7Ñ7ð#ð €HˆcÐÐÑðð 8<Ð�t˜I”¨Ñ-°Ñ4Ð;Ð;Ñ;ð7ð ÐÐ)Ñ*Ô*ðOà�IŒ Ñ%¨Ñ,ðOð 
�‰ðOð Oð Oñ +Ô*ðOð &*Ð�t˜d‘{Ð)Ð)Ñ)Ø<Ð<r$   r[   c                   ó¢  — e Zd ZU dZ ee¬¦  «        Zeed<   	 dZ	ee
eez           z  ed<   	  ee
¬¦  «        Ze
e         ed<   	  ed¬¦  «        ed	ed
efd„¦   «         ¦   «         Zed
efd„¦   «         Zej        ded
dfd„¦   «         Zed
efd„¦   «         Zej        ded
dfd„¦   «         Z ee¬¦  «        Zeed<   	  ee¬¦  «        Zeed<   	  ee¬¦  «        Zeed<    ee¬¦  «        Zeed<   	  ee ¬¦  «        Z!e eef         ed<   	 dede
eez  e"z  e#z  e$z           d
dfd„Z%ded
e&fd„Z'ded
e
e#         fd„Z(ded
e
e#         fd„Z)dS )Ú
AgentStatez=The agent state that should be saved and loaded from storage.r-   Ú
session_idÚ ÚsummaryÚcontextÚbefore)ÚmodeÚdatar1   c                 óú   — t          |t          ¦  «        red|v sd|v r]t          |¦  «        }t          |                     d¦  «        pi ¦  «        }dD ]"}||v r||vr|                     |¦  «        ||<   Œ#||d<   |S )zÇMigrate the top-level ``reply_id``/``cur_iter`` fields (the
        pre-``reply_context`` storage format) into ``reply_context``, so
        that the states saved by previous versions load correctly.r\   r]   Úreply_context)r\   r]   )ra   rg   ÚgetrI   )Úclsrp   rr   Úkeys       r%   Ú_migrate_legacy_reply_fieldsz'AgentState._migrate_legacy_reply_fieldsÁ   sš   € õ �d�DÑ!Ô!ð 	2Ø˜$ÐÐ *°Ð"4Ð"4å˜‘:”:ˆDÝ  §¢¨/Ñ!:Ô!:Ð!@¸bÑAÔAˆMØ/ð 7ð 7�Ø˜$�;�; 3¨mÐ#;Ð#;Ø)-¯ª°#©¬�M #Ñ&øØ$1ˆD�Ñ!Øˆr$   c                 ó   — | j         j        S )z"The reply id of the current reply.©rr   r\   ©r9   s    r%   r\   zAgentState.reply_idÒ   s   € ð Ô!Ô*Ð*r$   r_   Nc                 ó   — || j         _        dS )z&Set the reply id of the current reply.Nrx   rd   s     r%   r\   zAgentState.reply_id×   s   € ð ',ˆÔÔ#Ð#Ð#r$   c                 ó   — | j         j        S )zQThe current iteration of the agent's reasoning-acting loop in
        this reply.©rr   r]   ry   s    r%   r]   zAgentState.cur_iterÜ   s   € ð Ô!Ô*Ð*r$   c                 ó   — || j         _        dS )zUSet the current iteration of the agent's reasoning-acting loop in
        this reply.Nr|   rd   s     r%   r]   zAgentState.cur_iterâ   s   € ð ',ˆÔÔ#Ð#Ð#r$   rr   Úpermission_contextÚtool_contextÚtasks_contextÚmiddle_contextÚnameÚblocksc                 óP  — | j         rn| j         d         j        dk    rX| j         d         j        |k    rB| j         d         j        | j        k    r'| j         d         j                             |¦  «         dS | j                              t          | j        d||¬¦  «        ¦  «         dS )z×Append the given blocks to the agent's own message with the current
        `reply_id`. If such message doesn't exist, a new assistant message
        with agent's name and current reply ID will be created.
        éÿÿÿÿÚ	assistant)ÚidÚroler‚   ÚcontentN)	rm   rˆ   r‚   r‡   r\   r‰   ÚextendrJ   r   )r9   r‚   rƒ   s      r%   Úappend_contextzAgentState.append_context	  s¹   € ð ŒLð	à”˜RÔ Ô%¨Ò4Ð4Ø”˜RÔ Ô%¨Ò-Ð-Ø”˜RÔ Ô# t¤}Ò4Ð4àŒL˜ÔÔ$×+Ò+¨FÑ3Ô3Ð3Ð3Ð3ð ŒL×ÒÝØ”}Ø$ØØ"ð	ñ ô ñô ð ð ð r$   c                 óF   — t          |                      |¦  «        ¦  «        S )u  Whether the tail assistant message written by ``name`` has
        any tool call still awaiting an outside response â€” an
        ``ASKING`` user confirmation or a ``SUBMITTED`` external
        execution with no matching tool result yet.

        Args:
            name (`str`):
                Only messages authored by this agent name are inspected;
                observed messages from other agents are ignored.

        Returns:
            `bool`:
                ``True`` when at least one such tool call is pending.
        )ÚboolÚget_awaiting_tool_calls)r9   r‚   s     r%   Úhas_awaiting_tool_callsz"AgentState.has_awaiting_tool_calls'  s    € õ �D×0Ò0°Ñ6Ô6Ñ7Ô7Ð7r$   c                 óà   ‡— | j         sg S | j         d         }|j        dk    s|j        |k    rg S d„ |                     d¦  «        D ¦   «         Šˆfd„|                     d¦  «        D ¦   «         S )uù  Get the tail assistant message's tool calls still awaiting an
        outside response â€” an ``ASKING`` user confirmation or a
        ``SUBMITTED`` external execution with no matching tool result yet.

        Args:
            name (`str`):
                Only messages authored by this agent name are inspected;
                observed messages from other agents are ignored.

        Returns:
            `list[ToolCallBlock]`:
                The awaiting tool call blocks, empty if none.
        r…   r†   c                 ó   — h | ]	}|j         ’Œ
S r#   ©r‡   ©r@   Úbs     r%   ú	<setcomp>z5AgentState.get_awaiting_tool_calls.<locals>.<setcomp>K  ó   € ÐOÐOÐO˜q�a”dÐOÐOÐOr$   Útool_resultc                 óz   •— g | ]7}|j         t          j        k    s|j         t          j        k    ¯,|j        ‰v¯5|‘Œ8S r#   )Ústater   ÚASKINGÚ	SUBMITTEDr‡   ©r@   ÚtcÚ
result_idss     €r%   rE   z6AgentState.get_awaiting_tool_calls.<locals>.<listcomp>L  sR   ø€ ð 
ð 
ð 
àØŒx�=Ô/Ò/Ð/à”�MÔ3Ò3Ð3¸¼ÀZÐ8OÐ8Oð	 ð 9PÐ8OÐ8Or$   Ú	tool_call)rm   rˆ   r‚   Úget_content_blocks©r9   r‚   Úlast_msgrž   s      @r%   rŽ   z"AgentState.get_awaiting_tool_calls8  s˜   ø€ ð Œ|ð 	ØˆIØ”< Ô#ˆØŒ=˜KÒ'Ð'¨8¬=¸DÒ+@Ð+@ØˆIØOÐO H×$?Ò$?ÀÑ$NÔ$NÐOÑOÔOˆ
ð
ð 
ð 
ð 
à×1Ò1°+Ñ>Ô>ð
ñ 
ô 
ð 	
r$   c                 ó   ‡— | j         sg S | j         d         }|j        dk    s|j        |k    s|j        | j        k    rg S d„ |                     d¦  «        D ¦   «         Šˆfd„|                     d¦  «        D ¦   «         S )aB  Get the current reply's tool calls with no matching tool result
        yet, whatever their state. A reply accumulates into a single message,
        so the calls of the finished reasoning-acting rounds are excluded
        while the ones of the ongoing round are returned.

        Args:
            name (`str`):
                Only messages authored by this agent name are inspected;
                observed messages from other agents are ignored.

        Returns:
            `list[ToolCallBlock]`:
                The unfinished tool call blocks, empty if none.
        r…   r†   c                 ó   — h | ]	}|j         ’Œ
S r#   r’   r“   s     r%   r•   z7AgentState.get_unfinished_tool_calls.<locals>.<setcomp>m  r–   r$   r—   c                 ó&   •— g | ]}|j         ‰v¯|‘ŒS r#   r’   rœ   s     €r%   rE   z8AgentState.get_unfinished_tool_calls.<locals>.<listcomp>n  s0   ø€ ð 
ð 
ð 
àØŒu˜JÐ&Ð&ð à&Ð&Ð&r$   rŸ   )rm   rˆ   r‚   r‡   r\   r    r¡   s      @r%   Úget_unfinished_tool_callsz$AgentState.get_unfinished_tool_callsU  s¨   ø€ ð Œ|ð 	ØˆIØ”< Ô#ˆàŒM˜[Ò(Ð(ØŒ} Ò$Ð$ØŒ{˜dœmÒ+Ð+àˆIØOÐO H×$?Ò$?ÀÑ$NÔ$NÐOÑOÔOˆ
ð
ð 
ð 
ð 
à×1Ò1°+Ñ>Ô>ð
ñ 
ô 
ð 	
r$   )*r   r   r   r   r   r
   rj   r    r!   rl   r   r   r   rm   r   r   Úclassmethodr   rv   Úpropertyr\   ÚsetterrT   r]   r[   rr   r   r~   r'   r   rV   r€   rg   r�   r   r   r   r‹   r�   r�   rŽ   r¦   r#   r$   r%   ri   ri   °   sü  € € € € € € ØGÐGà�e¨LÐ9Ñ9Ô9€J�Ð9Ð9Ñ9ð/ð 24€GˆS�4˜	 IÑ-Ô.Ñ.Ð3Ð3Ñ3ð&ð ˜¨tÐ4Ñ4Ô4€GˆT�#ŒYÐ4Ð4Ñ4ØOð
 €_˜(Ð#Ñ#Ô#Øð°ð ¸ð ð ð ñ „[ñ $Ô#ðð ð+˜#ð +ð +ð +ñ „Xð+ð „_ð,˜cð , dð ,ð ,ð ,ñ „_ð,ð ð+˜#ð +ð +ð +ñ „Xð+ð
 „_ð,˜cð , dð ,ð ,ð ,ñ „_ð,ð #( %¸Ð"EÑ"EÔ"E€M�<ÐEÐEÑEØ$ð
 -2¨EØ)ð-ñ -ô -ÐÐ)ð ð ñ ðð !& °kÐ BÑ BÔ B€L�+ÐBÐBÑBð
 "' °{Ð!CÑ!CÔ!C€M�;ÐCÐCÑCØ8ð
 &+ U¸4Ð%@Ñ%@Ô%@€N�D˜˜c˜”NÐ@Ð@Ñ@ððàðð Ø˜	Ñ! IÑ-°Ñ=ÀÑOô
ðð 
ðð ð ð ð<8¨Cð 8°Dð 8ð 8ð 8ð 8ð"
¨Cð 
°D¸Ô4Gð 
ð 
ð 
ð 
ð:
¨cð 
°d¸=Ô6Ið 
ð 
ð 
ð 
ð 
ð 
r$   ri   )r   Útypingr   r   Úpydanticr   r   r   r   Úaiofiles.osr3   Ú_utils._commonr
   Ú_taskr   Úmessager   r   r   r   r   r   r   Ú
permissionr   r   r'   rV   r[   ri   r#   r$   r%   ú<module>r±      sÔ  ðà Ð Ø Ð Ð Ð Ð Ð Ð Ð à HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hà Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *ðð ð ð ð �Yñ ô ð ðk
ð k
ð k
ð k
ð k
�)ñ k
ô k
ð k
ð\ð ð ð ð �)ñ ô ð ð=ð =ð =ð =ð =�9ñ =ô =ð =ð6B
ð B
ð B
ð B
ð B
�ñ B
ô B
ð B
ð B
ð B
r$   