+
    „WÝjO  ã                  ó>   € R t ^ RIHt ^ RIt^ RIHt  ! R R4      tR# )zúThe newest Todo result a resume restores: an indexed, bounded search of the resume display scope.
Split out of ``hermes_state_messages`` and bound onto SessionDB through ``SessionMessagesMixin``; built
on its _resume_lineage_ids/_read_ctx primitives.)ÚannotationsN)ÚOptionalc                  ó.   € ] tR t^tRtRR/R R lltRtR# )ÚSessionTodoResultMixinzILatest visible, paired and valid Todo tool result of a session's lineage.Ú	max_charsNc               ó$   € V ^8„  d   QhRRRRRR/# )é   Ú
session_idÚstrr   zOptional[int]ÚreturnzOptional[str]© )Úformats   "ÚEC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_state_todo.pyÚ__annotate__Ú#SessionTodoResultMixin.__annotate__   s'   € ÷ Gñ G°ð GÀMð GÐ]jñ Gó    c          
     ó–  aa€ V'       g   R# Vf	   ^ RI Hp TpV P                  V4      pV P                  4       ;_uu_ 4       p\	        V4       EFÁ  pRp VP                  RWgV34      P                  4       pV'       g   K3  V EFw  p	V	R,          oS'       g   K  VP                  RWiR,          34      P                  4       p
V
e   V
R,          R	8w  d   KS   V
R
,          '       d   \        P                  ! V
R
,          4      M. pV3R lo\        V\        4      ;'       d;    \        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      pV'       g   Kä  \        P                  ! V	R,          4      p\        V\        4      '       d&   \        VP                  R4      \        4      '       g   EK?  \        VP                  R4      ;'       g    ^ 4       T	R,          u u uuRRR4       # 	  VR,          R,          pEK¾  	  RRR4       R#   \         \"        3 d     EK°  i ; i  + '       g   i     R# ; i)ap  Newest visible, paired and valid Todo result in the resume display scope.

Search indexed, bounded pages rather than loading a potentially long transcript. A branch owns its
copied history; compression continuations also show their ancestors' archived rows. Invalid results
are skipped just as the model's Todo hydration does, and explicit empty results are retained.
N)ÚMAX_TODO_RESULT_CHARSTa   SELECT id, content, tool_call_id FROM messages INDEXED BY idx_messages_session_id WHERE session_id = ? AND id < ? AND role = 'tool' AND tool_name IN ('todo_list', 'todo') AND (active = 1 OR compacted = 1) AND length(content) <= ? ORDER BY id DESC LIMIT 100Útool_call_idzÏSELECT role, tool_calls FROM messages INDEXED BY idx_messages_session_id WHERE session_id = ? AND id < ? AND role IN ('assistant', 'user', 'system') AND (active = 1 OR compacted = 1) ORDER BY id DESC LIMIT 1ÚidÚroleÚ	assistantÚ
tool_callsc                óv  <€ \        V \        4      '       d   V P                  R 4      S8w  d   R# V P                  R4      p\        V\        4      '       g   R# VP                  R4      R	9   d   R# VP                  R4      R8w  d   R# VP                  R4      p\        V\        4      '       d   \        P
                  ! V4      p\        V\        4      '       g   R# VP                  R4      p\        V\        4      ;'       d5    \        ;QJ d    R V 4       F  '       g   K   R# 	  R# ! R V 4       4      # )
r   FÚfunctionÚnameTÚ	tool_callÚ	argumentsÚcallsc              3  óz   "  € T F1  p\        V\        4      ;'       d    VP                  R 4      R9   x € K3  	  R# 5i)r   N©Ú	todo_listÚtodo)Ú
isinstanceÚdictÚget)Ú.0Úinners   & r   Ú	<genexpr>ÚVSessionTodoResultMixin.get_latest_todo_result.<locals>.is_todo_call.<locals>.<genexpr>F   s9   é € ð M>á1<¨ô %/¨u´dÓ$;×$jÐ$jÀÇ	Á	È&Ó@QÐUjÑ@jÔ$jÛ1<ùs   ‚;ž;r    )r#   r$   r%   r
   ÚjsonÚloadsÚlistÚany)Úcallr   r   Úinner_callsÚcall_ids   &   €r   Úis_todo_callÚCSessionTodoResultMixin.get_latest_todo_result.<locals>.is_todo_call6   s  ø€ Ü'1°$¼×'=Ò'=ÀÇÁÈ$ÃÐSZÔAZÙ+0Ø+/¯8©8°JÓ+? Ü'1°(¼D×'AÒ'AÙ+0Ø#+§<¡<°Ó#7Ð;PÔ#PÙ+/Ø#+§<¡<°Ó#7¸;Ô#FÙ+0Ø,4¯L©L¸Ó,E 	Ü#-¨i¼×#=Ò#=Ü04·
²
¸9Ó0E IÜ'1°)¼T×'BÒ'BÙ+0Ø.7¯m©m¸GÓ.D Ü'1°+¼tÓ'D÷ (>ð (>ÏËñ M>á1<óM>ÏÌð !>Êð !>Èñ M>á1<óM>ó J>ð !>r   c              3  ó4   <"  € T F  pS! V4      x € K  	  R # 5i)Nr   )r&   r.   r1   s   & €r   r(   Ú@SessionTodoResultMixin.get_latest_todo_result.<locals>.<genexpr>J   s   øé € ÐDjÑdiÐ\`Á\ÐRV×EWÐEWÓdiùs   ƒFÚcontentÚtodosÚrevisionl   ÿÿÿÿ éÿÿÿÿ)Útools.todo_toolr   Ú_resume_lineage_idsÚ	_read_ctxÚreversedÚexecuteÚfetchallÚfetchoner*   r+   r#   r,   r-   r$   r%   ÚintÚ
ValueErrorÚ	TypeError)Úselfr	   r   r   Úsession_idsÚconnÚsidÚ	before_idÚrowsÚrowÚpriorr   ÚpairedÚdatar0   r1   s   &&$           @@r   Úget_latest_todo_resultÚ-SessionTodoResultMixin.get_latest_todo_result   së  ù€ ÷ ÙØÒÝ=Ø-ˆIØ×.Ñ.¨zÓ:ˆØ�^‰^×Ô Ü ×,�Ø%�	ØØŸ<™<ðNð ¨Ð3ó÷ ‘h“jð ÷  ÙÜ#˜Ø"% nÕ"5˜ß&Ù$Ø $§¡ðYð ! d¥)Ð,ó	!÷
 #™(›*ð ð !š=¨E°&­M¸[Ô,HÙ$ð%ØGLÈ\×GZÔGZ¤D§J¢J¨u°\Õ/BÔ$CÐ`b˜Eõ>ô( &0°´tÓ%<×%jÐ%jÇÃÔDjÑdiÓDjÇÇÂÔDjÑdiÓDjÓAj˜Fß#)Ù (Ü#'§:¢:¨c°)­nÓ#=˜DÜ#-¨d´D×#9Ò#9ÄÈDÏHÉHÐU\ÓL]Ô_c×AdÒAdÚ (Ü §¡¨Ó 4× 9Ð 9¸Ô:ð  # 9�~Ó-÷q Òñ  $ðX !% R¥¨¥“Iñq -÷ ñt øô	 !+¬IÐ6ô %Û$ð%ú÷m Öñt úsn   ÁBH7ÃHÃ&;HÄ"HÄ.HÅHÅ%H7Å'AHÆ?H7ÇHÇHÇ&H7Ç=H7ÈH4È/H7È3H4È4H7È7I	r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rM   Ú__static_attributes__r   r   r   r   r      s   † ÙSðGÐTX÷ Gó Gr   r   )rS   Ú
__future__r   r*   Útypingr   r   r   r   r   Ú<module>rW      s!   ðñ4õ #ã Ý ÷Jó Jr   