+
    Pj                         R t ^ RIt^ RIt^ RIt ! R R]P                  4      tR tR tR tR t	R t
R	 tR
 t ! R R4      tRR ltR tR tR tR tR tR tR# )u   Two-lane router: fast-lane sentinel detection, history consistency across
lanes, and the FAST_CHAT=0 path. All LLM I/O is a scripted FakeAdapter — no
network, no real model, no TTS (tests run in chat mode).Nc                   0   a  ] tR t^
t o RtR tR tRtV tR# )FakeAdapterzDReplays one scripted event list per stream() call and records usage.c                P    \        V4      V n        ^ V n        RV n        RV n        R# )    Nunset)list_eventscallslast_messages
last_tools)selfeventss   &&tests/test_lanes.py__init__FakeAdapter.__init__   s#    F|
!!    c                  "   V ;P                   ^,          un         V Uu. uF  p\        V4      NK  	  upV n        W n        V P                   F  pV5x  K
  	  R# u upi 5i)   N)r	   dictr
   r   r   )r   messagestoolsmevs   &&&  r   streamFakeAdapter.stream   sJ     

a
/78x!d1gx8,,BH  9s   A!A-A!)r   r	   r
   r   N)	__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes____classdictcell____classdict__s   @r   r   r   
   s     N" r   r   c                     R RRV /# )typetext )ss   &r   _textr)      s    FFA&&r   c                      R RRR/# )r%   finishreasonstopr'   r'   r   r   _finishr.      s    Hh//r   c                     "   \         P                  ! \        \        \         P                  4      \        4       .4      R 4      p V P                  . R4       Uu. u Rj  xL
 qNK   LDMu upi ppTR.8X  g   Q hR# 5i)fast-syswhen is my meetingNhandoffN)brainFastLaner   r)   FAST_HANDOFFr.   runlaneitemouts      r   %test_fastlane_bare_sentinel_hands_offr<   &   sf     >>+uU-?-?'@')&LM$&D"&((2/C"D
E
E$4
E
EC
E$%%%%s6   AA=A*A(A&
A("A*&A((A*)A=c            	      
  "   \         P                  ! \        \        R 4      \        R4      \        R4      \	        4       .4      R4      p V P                  . R4       Uu. u Rj  xL
 qNK   LDMu upi ppTR.8X  g   Q hR# 5i)z<<ACTz>>r0   zrecall somethingNr2   r4   r5   r   r)   r.   r7   r8   s      r   4test_fastlane_sentinel_split_across_deltas_hands_offr@   -   sn     >>U4[%,dWYGHD #'((2/A"B
C
C$4
C
CC
C$%%%%s6   ABA0 A.$A,
%A.(A0,A..A0/Bc                     "   \         P                  ! \        \        R 4      \	        4       .4      R4      p V P                  . R4       Uu. u Rj  xL
 qNK   LDMu upi ppTR.8X  g   Q hR# 5i)   r0   hiNr2   r?   r8   s      r   #test_fastlane_empty_reply_hands_offrD   5   s[     >>+uU|WY&?@*MD"&((2t"4
5
5$4
5
5C
5$%%%%s6   AA/
AAA
AAAAA/c                    "   \         P                  ! \        \        R 4      \        R4      \	        4       .4      R4      p V P                  . R4       Uu. u Rj  xL
 qNK   LDMu upi ppT UUu. uF  w  r4TNK	  	  Mu uppi pppT UUu. uF  w  r6TR8X  g   K  TNK  	  Mu uppi pppT UUu. uF  w  r6TR8X  g   K  TNK  	  Mu uppi pppTR,          R8X  g   Q hRT9  g   Q hT^ ,          P                  R4      '       g   Q h\        ;QJ d    R	 T 4       F  '       g   K   R
M	  RM! R	 T 4       4      '       g   Q hT'       d   RT^ ,          9   g   Q h\         P                  T^ ,          9  g   Q hR# 5i)z[dry] Right away, sir. It is done.r0   zsort itNsayfinalr3   z[dry] Right away, sir.c              3   ,   "   T F
  pR V9   x  K  	  R# 5i)rF   Nr'   ).0r(   s   & r   	<genexpr>Dtest_fastlane_normal_reply_streams_then_finalises.<locals>.<genexpr>G   s     04a}!4   TF)	r4   r5   r   r)   r.   r7   
startswithanyr6   )	r9   r:   r;   k_kindspsaysfinalss	            r   1test_fastlane_normal_reply_streams_then_finalisesrW   ;   sG    >>U45=)796 	7D #'((2y"9
:
:$4
:
:C
:341Q3E,#$!eAA#,D,0CDA1<aaC0F09E!!!76777730403330400000mvay000VAY...s   AF A&A$A"
A$A&"A$$A&%F 2B ?F B%B%$F 3C
C
	A F 
F F +F 	F 0F c                    "   R RRR/R RRRRRRR	R
R
RRRR//./R RRRRR/R RRR/.p \         P                  ! \        . 4      R4      pVP                  V R4      pV Uu. uF  q3R ,          NK  	  up. RO8X  g   Q h\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   Q hR# u upi 5i)roleusercontentrC   	assistantN
tool_callsidc1r%   functionnamex	argumentsz{}tooltool_call_idresultzAnswer, sir.r0   nextc              3   P   "   T F  p\        VR ,          \        4      x  K  	  R# 5i)r[   N)
isinstancestr)rJ   r   s   & r   rK   Etest_fastlane_history_view_strips_tool_scaffolding.<locals>.<genexpr>Y   s     ;dz!I,,,ds   $&FTsystemrZ   r\   rZ   )r4   r5   r   build_messagesall)histr9   msgsr   s       r   2test_fastlane_history_view_strips_tool_scaffoldingrr   M   s     	D)	i	tVZ#fc;%EG H	I 
y(C	i8D >>+b/:6DtV,D#$t!fIIt$(OOOO3;d;333;d;;;;; %s$   AB>B9/B>B>B>5	B>c                   2   a  ] tR t^_t o R tR tR tRtV tR# )FakeWSc                "    . V n         . V n        R # N)sentbinary)r   s   &r   r   FakeWS.__init__`   s    	r   c                D   "   V P                   P                  V4       R # 5irv   )rw   append)r   frames   &&r   	send_jsonFakeWS.send_jsond   s     		    c                D   "   V P                   P                  V4       R # 5irv   )rx   r{   )r   datas   &&r   
send_bytesFakeWS.send_bytesg   s     4 r   )rx   rw   N)	r   r   r   r   r   r}   r   r    r!   r"   s   @r   rt   rt   _   s      ! !r   rt   c                    \         P                  ! \        4       R 7      pRVn        RRRR/Vn        RRRR/Vn        \        T ;'       g    . 4      Vn        \        P                  ! \        T;'       g    . 4      RRR7      Vn        V# )	)wschatrY   rm   r[   zfull-sysr0   N)
tool_specs	tool_exec)
mainSessionrt   mode
system_msgfast_system_msgr   fast_adapterr4   Brain)fast_eventsfull_eventssesss   && r   _sessionr   k   sx    <<68$DDIxJ?DO"HiDD#K$5$526D[):):;(,>DJKr   c                 N    R  pV P                  \        P                  RV4       R# )c                     "   R # 5irv   r'   )_a_ks   *,r   _noop_no_passive.<locals>._noopw   s     s   passive_rememberN)setattrr   r   )monkeypatchr   s   & r   _no_passiver   v   s    

$6>r   c                   "   V P                  R R4       \        V 4       \        \        R4      \	        4       .R7      pVP                  RR/4      G Rj  xL
  \        P                  ! ^ 4      G Rj  xL
  VP                  P                   Uu. uF  q"R,          NK  	  ppRV9   d   VR,          R	8X  g   Q hVP                   Uu. uF  qDR
,          NK  	  upRR.8X  g   Q hVP                  ^ ,          R,          R8X  g   Q hRVP                  ^,          R,          9   g   Q hVP                  P                  P                  ^ 8X  g   Q hVP                  P                  ^8X  g   Q hR#  EL Lu upi u upi 5i)	FAST_CHAT1zEvening, sir.r   r&   eveningNr%   sentenceturn_endrY   rZ   r\   r[   rN   )setenvr   r   r)   r.   	_run_turnasynciosleepr   rw   historyr4   adapterr	   r   )r   r   ftypesr   s   &    r   0test_router_fast_lane_serves_and_commits_historyr   |   s=    {C(!7 CDD
..&),
---
--
 $-1vYYE-59
#:::#||,|!fII|,0EEEE<<?9%222dll1oi8888::##q(((""a''' .- -sC   AE<E-E<3E04E<E2!'E<E7BE<0E<2
E<c                   "   V P                  R R4       \        V 4       \        \        \        P
                  4      \        4       .\        R4      \        4       .R7      pVP                  RR/4      G Rj  xL
  \        P                  ! ^ 4      G Rj  xL
  VP                  P                   Uu. uF#  q"R,          R8X  g   K  VP                  R4      NK%  	  pp\        ;QJ d    R	 V 4       F  '       g   K   R
M	  RM! R	 V 4       4      '       g   Q hVP                  P                  ^8X  g   Q hVP                  P                   P                  ^8X  g   Q hVP"                   Uu. uF  qDR,          NK  	  upRR.8X  g   Q h\        P
                  VP"                  ^,          R,          9  g   Q hRVP"                  ^,          R,          9   g   Q hR#  ELc ELHu upi u upi 5i)r   r   zYour meeting is at nine, sir.r   r   r&   r1   Nr%   r   c              3   ,   "   T F
  pR V9   x  K  	  R# 5i)nineNr'   )rJ   ts   & r   rK   Ktest_router_escalates_on_sentinel_then_full_brain_serves.<locals>.<genexpr>   s     *Eqv{ErM   TFrY   rZ   r\   r[   r   )r   r   r   r)   r4   r6   r.   r   r   r   r   rw   getrP   r   r	   r   r   )r   r   r   textsr   s   &    r   8test_router_escalates_on_sentinel_then_full_brain_servesr      s}    {C(5--.	::;WYGID ..&"67
888
--
$(GGLLLLqfI4K]QUU6]LEL3*E*333*E*****""a'''::##q(((#||,|!fII|,0EEEET\\!_Y%????T\\!_Y//// 9L -sV   A5G*7G8G*GG*2G G G*<G*AG*+G%<AG*G* 
G*c                 R  "   V P                  R R4       \        V 4       \        \        R4      \	        4       .\        R4      \	        4       .R7      pVP                  RR/4      G Rj  xL
  \        P                  ! ^ 4      G Rj  xL
  VP                  P                  ^ 8X  g   Q hVP                  P                  P                  ^8X  g   Q hVP                   Uu. uF  q"R,          NK  	  upR	R
.8X  g   Q hRVP                  ^,          R,          9   g   Q hR#  L Lu upi 5i)r   0zmust not be usedzFull brain here, sir.r   r&   helloNrY   rZ   r\   z
Full brainr[   )r   r   r   r)   r.   r   r   r   r   r	   r4   r   r   )r   r   r   s   &  r   .test_router_fast_chat_disabled_skips_fast_laner      s     {C(-.	:23WY?AD ..&'*
+++
--
""a'''::##q(((#||,|!fII|,0EEEE4<<?95555 , -s7   A'D')D*D'D AD'D"/0D' D'"D'c                 h  "   V P                  R R4       \        V 4       \        \        R4      \	        4       .R7      pVP                  RR/4      G Rj  xL
  \        P                  ! ^ 4      G Rj  xL
  \        \        R4      \	        4       .4      Vn	        VP                  RR/4      G Rj  xL
  \        P                  ! ^ 4      G Rj  xL
  VP                  P                  pV Uu. uF  q3R	,          NK  	  ppV. RO8X  g   Q hV^,          R
,          R8X  g   Q hR#  L L Lw L[u upi 5i)r   r   zNoted, sir.r   r&   zmy car is a SupraNzA Supra, sir.zwhat did I sayrY   r[   rl   )r   r   r   r)   r.   r   r   r   r   r   r
   )r   r   seenr   roless   &    r   9test_router_second_turn_sees_first_turn_in_shared_historyr      s    {C(}!5wy ABD
..&"56
777
--
#U?%;WY$GHD
..&"23
444
--
**D $%1vYYE%;;;;79!4444 8 5%sZ   AD2D%D23D'4=D21D)2D2D+D2.D-?'D2'D2)D2+D2-D2c                 v  "   \        V 4       \        4       pVP                  R R/4      G Rj  xL
  VP                  P                  R,          R,          R8X  g   Q hVP
                  . 8X  g   Q hVP                  P                  ^ 8X  g   Q hVP                  P                  P                  ^ 8X  g   Q hR#  L5i)r&   rB   Nr%   r   rN   )
r   r   r   r   rw   r   r   r	   r4   r   )r   r   s   & r   *test_router_empty_utterance_just_ends_turnr      s     :D
..&%
)))77<<F#z111<<2""a'''::##q(((	 *s   ,B9B7B	B9)NN)r   r   r4   r   
LLMAdapterr   r)   r.   r<   r@   rD   rW   rr   rt   r   r   r   r   r   r   r   r'   r   r   <module>r      sw   <   %"" "'0&&&/$<$	! 	!?($0(65")r   