
    8Gj{              
       V   d Z ddlZddlZddlZddlmZ ej                  j                  dej                  j                  ej                  j                  ej                  j                  e
                         ddlmZmZ ddededefdZdd	ed
eddfdZd Zedk(  r e        yy)a  Inspect local Kimi Code CLI sessions and verify captured data quality.

Run this to see whether session_capture.py can correctly reconstruct:
- user inputs
- Kimi's thinking traces
- Kimi's final answers
- tool calls

Examples:
    python3 tests/inspect_sessions.py
    python3 tests/inspect_sessions.py --latest
    python3 tests/inspect_sessions.py --session-dir /Users/admin/.kimi-code/sessions/wd_xxx/session_yyy
    N)Path)list_all_sessionsload_sessiontext	max_charsreturnc                 R    t        |       |k  r| S | d | dt        |       |z
   dz   S )Nz
... (z more chars))len)r   r   s     tests/inspect_sessions.py_format_textr      s8    
4yI
D	I(='>lKKK    session_dirverbosec                 ~   t        |       }t        dd        t        d|j                          t        d|j                          t        d|j                          t        dt        |j                                t        d|j                          t        d       |j                  st        d       y t        |j                  d	      D ]f  \  }}t        |j                        }t        |j                        }t        |j                        }|j                  }|j                  }	t        d
| d|j                   d| d| d| d       t        d       t        t!        |	             |	|k7  r;t        |      t        |	      kD  r$t        dt        |       dt        |	       d       |r)t        d       t        t!        |j                               |r+t        d       t        t!        |j                  d             |s>t        d       t        t!        |j                               i y )N
z<============================================================zSession ID: zWork dir:   zCreated:    zTurns:      zWire file:  zNo turns parsed.   z

--- Turn z (id=z) [thinking=z	, answer=z, tools=z] ---zUSER INPUT (cleaned):z[raw input was z chars, cleaned to z chars]z
KIMI THINKING:z
TOOL SUMMARY:   )r   z
KIMI ANSWER:)r   print
session_idwork_dir
created_atr
   turns	wire_path	enumerateboolclean_thinkingclean_answertool_summary
user_inputclean_user_inputturn_idr   )
r   r   sessionidxturnhas_thinking
has_answer	has_toolsraw_user
clean_users
             r   inspect_sessionr*       s   ;'G	Bxj/	L++,
-.	L))*
+,	L++,
-.	LW]]+,
-.	L**+
,-	(O== !w}}a0 3	TD//0$++,
**+	??**
#eDLL> 2%i
|8I;eU	
 	%&l:&'!c(mc*o&EOCM?2Ec*oEVV]^_$%,t2234#$,t00C@A"#,t0012-3r   c                     t        j                  d      } | j                  dt        d d       | j                  ddd	       | j                  d
dd	       | j                  dt        d d       | j	                         }|j
                  rut        d       t        |j                  r|j                  gnd       D ]B  }t        d|j                   d|j                   d|j                   d|j                   d	       D y |j                  rt        |j                  d       y |j                  rXt        |j                  r|j                  gnd       }|st        d       y t        |d       }t        |j                  d       y t        d       t        |j                  r|j                  gnd       }|st        d       y d}d}d}d}	d}
d}|D ]  }t!        |j                        }t        |j                   dt#        |j$                         d|j                  xs |j                   d|j&                  j)                                 |t#        |j$                        z  }|j$                  D ]f  }|
t#        |j*                        z  }
|t#        |j,                        z  }|j.                  r|dz  }|j0                  r|dz  }|j2                  sb|	dz  }	h  t        d       t        d t#        |              t        d!|        t        d"|        t        d#|        t        d$|	        |
r||
z  d%z  }t        d&|
 d'| d(|d)d*       y y )+Nz$Inspect local Kimi Code CLI sessions)descriptionz--session-dirz$Inspect a specific session directory)typedefaulthelpz--latest
store_truez/Inspect the latest session by modification time)actionr/   z--listz List all known sessions and exitz
--base-dirzAOverride the Kimi Code CLI data directory (default: ~/.kimi-code)zAll discovered sessions:z  [z] z  ->  z	  (work: )T)r   zNo sessions found.c                 J    | j                   j                         j                  S )N)r   statst_mtime)ms    r   <lambda>zmain.<locals>.<lambda>s   s    amm.@.@.B.K.K r   )keyzInspecting all sessions...r   z: z turns  work=z  wire_exists=r   z
--- Summary ---zSessions loaded: zTotal turns:     zWith thinking:   zWith answer:     zWith tools:      d   zUser input chars: z raw -> z clean (z.1fz%))argparseArgumentParseradd_argumentr   
parse_argslistr   r   base_dirsourcer   r   r   r*   latestmaxr   r
   r   r   existsr   r    r   r   r   )parserargsmeta	all_metasrA   sessionstotal_turnstotal_with_thinkingtotal_with_answertotal_with_toolstotal_raw_user_charstotal_clean_user_charsr"   r$   ratios                  r   mainrP   G   s   $$1WXF
3	   >  
 /  
 P	   Dyy()%t}}oDQ 	Ddkk]"T__$5VD<L<L;M N--+	
 	(($7{{%t}}oDQ	&'Y$KL**D9 

&' DMM$--tLH"#K &t//0!!""S%7$8 9$$56 7",,33568	

 	s7==))MM 	&D C$88 "c$*?*?&@@"""#q(#  !Q&!   A% 	&&$ 

	c(m_
-.	k]
+,	12
34	/0
12	./
01&)==C !5 6h%&huSk=	
 r   __main__)i  )F)__doc__r:   ossyspathlibr   pathinsertdirnameabspath__file__session_capturer   r   strintr   r   r*   rP   __name__ r   r   <module>r`      s     	 
  277??277??277??83L#MN O ;Ls Ls LS L$3 $3 $3 $3N[
| zF r   