
    `gj^              	          d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
mZ  ej                  dej                        Z edh      Zddd	d
dddddZddZddZddZddZddZddZ	 d	 	 	 	 	 ddZy)uV  Live session context-window breakdown for UI surfaces.

Estimates how the next provider request is composed: system prompt tiers,
tool schemas, and conversation history. Uses the same rough char/4 heuristic
as ``agent.model_metadata.estimate_request_tokens_rough`` so numbers align
with compression thresholds — not exact tokenizer counts.
    )annotationsN)AnyDictListOptionalSequenceTuplez(<available_skills>.*?</available_skills>delegate_taskzvar(--context-usage-system)zvar(--context-usage-tools)zvar(--context-usage-rules)zvar(--context-usage-skills)zvar(--context-usage-mcp)zvar(--context-usage-subagents)zvar(--context-usage-memory)z!var(--context-usage-conversation))system_prompttool_definitionsrulesskillsmcpsubagent_definitionsmemoryconversationc                *    | syt        |       dz   dz  S )Nr         )len)texts    J/root/.hermes/venv/lib/python3.12/site-packages/agent/context_breakdown.py_chars_to_tokensr      s    IMa    c                H    | syt        t        j                  | d            S )Nr   F)ensure_ascii)r   jsondumps)values    r   _json_tokensr    %   s    DJJu5ABBr   c                    t        | t              r| j                  d      nd }t        |t              rt        |j                  d      xs d      S t        | j                  d      xs d      S )Nfunctionname )
isinstancedictgetstr)toolfns     r   
_tool_namer+   +   sV    !+D$!7*	TB"d266&>'R((txx%2&&r   c                    g }g }g }| D ][  }t        |      }|j                  d      r|j                  |       1|t        v r|j                  |       K|j                  |       ] |||fS )Nmcp_)r+   
startswithappend_SUBAGENT_TOOL_NAMES)toolsbuiltinr   subagentr)   r#   s         r   _split_toolsr4   2   sr    GCH !$??6"JJt))OOD!NN4 ! C!!r   c                    d}d}t        | dd       }|||fS 	 t        | dd      r|j                  d      xs d}t        | dd      r|j                  d      xs d}||fS # t        $ r Y ||fS w xY w)Nr$   _memory_store_memory_enabledTr   _user_profile_enableduser)getattrformat_for_system_prompt	Exception)agentmemory_block
user_blockstores       r   _memory_blocksrA   A   s    LJE?D1E}Z''5+T2 99(CIrL514877?E2J ##  ##s   AA! !	A0/A0c                ^    | }|D ]  }|s|j                  |d      } |j                         S )Nr$   )replacestrip)r   blocksoutblocks       r   _strip_blocksrH   Q   s7    
C )++eR(C) 99;r   c                   ddl m} ddlm}  ||       }|j	                  dd      xs d}|j	                  dd      xs d}|j	                  dd      xs d}t
        j                  |      }|r|j                  d      nd}	t        |       \  }
}dj                  d	 |
|fD              j                         }t        ||	      }t        ||
|      }dj                  d
 ||fD              j                         }t        t        | dd      xs g       }t        |      \  }}} ||xs g       }ddt        |      fddt!        |      fddt        |      fddt        |	      fddt!        |      fddt!        |      fddt        |      fdd|fg}t#        d |D              }t        | dd      }|rt%        t        |dd      xs d      nd}|rt%        t        |d d      xs d      nd}|dkD  r|n|}|r%t'        dt)        d!t+        ||z  d!z                    nd}|D cg c]&  \  }}}|dkD  rt,        j	                  |d"      |||d#( c}}}||||t        | d$d      xs dd%S c c}}}w )&zAReturn a Cursor-style context usage breakdown for one live agent.r   )estimate_messages_tokens_rough)build_system_prompt_partsstabler$   contextvolatilez

c              3  &   K   | ]	  }|s|  y wN .0parts     r   	<genexpr>z4compute_session_context_breakdown.<locals>.<genexpr>j   s     RtTdR   c              3  &   K   | ]	  }|s|  y wrP   rQ   rR   s     r   rU   z4compute_session_context_breakdown.<locals>.<genexpr>n   s     $YdTXT$YrV   r1   Nr   zSystem promptr   zTool definitionsr   Rulesr   Skillsr   MCPr   zSubagent definitionsr   Memoryr   Conversationc              3  (   K   | ]
  \  }}}|  y wrP   rQ   )rS   _tokenss      r   rU   z4compute_session_context_breakdown.<locals>.<genexpr>   s     @\Q6&@s   context_compressorcontext_lengthlast_prompt_tokensd   zvar(--ui-text-tertiary))coloridlabelr_   model)
categoriescontext_maxcontext_percentcontext_usedestimated_totalrg   )agent.model_metadatarJ   agent.system_promptrK   r'   _SKILLS_BLOCK_REsearchgrouprA   joinrD   rH   listr:   r4   r   r    sumintmaxminround_CATEGORY_COLORS)r=   messagesrJ   rK   partsrL   rM   rN   skills_matchskills_indexr>   r?   memory_textsystem_coresystem_tailsystem_prompt_textr1   builtin_tools	mcp_toolssubagent_toolsconversation_tokensrh   rl   compri   measured_usedrk   rj   category_idrf   r_   s                                  r   !compute_session_context_breakdownr   Y   s   
 D=%e,EYYx$*Fii	2&,"GyyR(.BH#**62L,8<%%a(bL-e4L*++Rj/IRRXXZK5K,
CK$Y{K6P$YY__a.4"5E/;E/B,M9n8RH 
/+;<N+OP	/m1LM	'+G45	8-l;<	|I./	!7n9UV	8-k:;	)<=	J @Z@@O5.5DBF#gd$4a8=A>AKHLC&:A>C!DRSM$1A$5=?L  	As3l[83>?@A  /9	
 	
 +UFz *--k;TU! 		
 #*$*,2 	
s   !+I')r   r(   returnru   )r   r   r   ru   )r)   r&   r   r(   )r1   zSequence[dict]r   z)Tuple[List[dict], List[dict], List[dict]])r=   r   r   zTuple[str, str])r   r(   rE   r(   r   r(   rP   )r=   r   rz   zOptional[List[dict]]r   zDict[str, Any])__doc__
__future__r   r   retypingr   r   r   r   r   r	   compileDOTALLro   	frozensetr0   ry   r   r    r+   r4   rA   rH   r   rQ   r   r   <module>r      s    #  	 = =2::I299U  /!23  34)+%<+7	  C'"$  &*CC"C Cr   