
    Cj*                       S r SSKJr  SSKrSSKJrJr  SSKJr  SSK	J
r
  \
S   r\ " S S	5      5       r\ " S
 S5      5       r\ " S S5      5       r\ " S S5      5       rSrSr\SSS/r/ \Q\PrS'S(S jjrS)S jrS*S jrS(S jrS*S jrS+S jrS,S jrS-S jrS.S jr          S/S jrS0S jr\ " S  S!5      5       rS1S" jr S2S# jr!          S3S$ jr"S4S% jr#S&/r$g)5z3Utility for applying V4A diffs against text inputs.    )annotationsN)CallableSequence)	dataclass)Literal)defaultcreatec                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)	Chunk   int
orig_index	list[str]	del_lines	ins_lines N__name__
__module____qualname____firstlineno____annotations____static_attributes__r       c/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/agents/apply_diff.pyr   r      s    Or   r   c                  <    \ rS rSr% S\S'   SrS\S'   SrS\S'   Srg	)
ParserState   r   linesr   r   indexfuzzr   N)r   r   r   r   r   r    r!   r   r   r   r   r   r      s    E3ND#Mr   r   c                  *    \ rS rSr% S\S'   S\S'   Srg)ParsedUpdateDiff   list[Chunk]chunksr   r!   r   Nr   r   r   r   r#   r#      s    
Ir   r#   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
rg)ReadSectionResult!   r   next_contextr%   section_chunksr   	end_indexbooleofr   Nr   r   r   r   r(   r(   !   s    N	Ir   r(   z*** End Patchz*** End of File*** Update File:*** Delete File:*** Add File:c                    [        XU5      n[        U5      nUS:X  a	  [        XCS9$ [        U 5      n[	        XE5      n[        XVR                  US9$ )zApply a V4A diff to the provided text.

This parser understands both the create-file syntax (only "+" prefixed
lines) and the default update syntax that includes context hunks.
r	   )newline)_detect_newline_normalize_diff_lines_parse_create_diff_normalize_text_newlines_parse_update_diff_apply_chunksr&   )inputdiffmoder3   
diff_linesnormalized_inputparseds          r   
apply_diffr@   4   sT     e40G&t,Jx!*>>/6
=F)=='JJr   c                    [         R                  " SU 5       Vs/ s H  oR                  S5      PM     nnU(       a  US   S:X  a  UR                  5         U$ s  snf )Nz\r?\n )resplitrstrippop)r;   liner   s      r   r5   r5   D   sK    +-88Hd+CD+C4[[+CEDrb		L Es   Ac                    SU ;   a  S$ S$ Nz

r   texts    r   _detect_newline_from_textrO   K   s    t^6--r   c                F    US:w  a  SU ;   a  [        U 5      $ [        U5      $ )Nr	   rL   )rO   )r:   r;   r<   s      r   r4   r4   O   s(     xDEM(//$T**r   c                &    U R                  SS5      $ rK   )replacerM   s    r   r7   r7   W   s    <<%%r   c                   ^  T R                   [        T R                  5      :  a  g[        U 4S jU 5       5      (       a  gg)NTc              3  t   >#    U  H-  nTR                   TR                     R                  U5      v   M/     g 7fN)r   r    
startswith).0prefixstates     r   	<genexpr>_is_done.<locals>.<genexpr>_   s,     
NX65;;u{{#..v66Xs   58F)r    lenr   any)rY   prefixess   ` r   _is_doner_   \   s2    {{c%++&&

NX
NNNr   c                    U R                   [        U R                  5      :  a  gU R                  U R                      nUR                  U5      (       a#  U =R                   S-  sl         U[        U5      S  $ g)NrD      )r    r\   r   rV   )rY   rX   currents      r   	_read_strrc   d   s_    {{c%++&&kk%++&G&!!qs6{}%%r   c                   [        / U Q[        PS9n/ n[        U[        5      (       d  UR                  [        UR                  5      :  a  O}UR                  UR                     nU=R                  S-  sl        UR                  S5      (       d  [        SU 35      eUR                  USS  5        [        U[        5      (       d  M  UR                  U5      $ )Nr   ra   +zInvalid Add File Line: )r   	END_PATCHr_   SECTION_TERMINATORSr    r\   r   rV   
ValueErrorappendjoin)r   r3   parseroutputrI   s        r   r6   r6   n   s    22	23FFv233<<3v||,,||FLL)s##6tf=>>d12h v233 <<r   c           
     x   [        / U Q[        PS9nUR                  S5      n/ nSn[        U[        5      (       Gdl  [        US5      nUS:H  =(       aE    UR                  [        UR                  5      :  =(       a    UR                  UR                     S:H  nU(       a  U=R                  S-  sl        U(       dY  U(       dR  US:X  dL  UR                  [        UR                  5      :  a  UR                  UR                     OSn[        SU 35      eUR                  5       (       a  [        XcXR5      n[        UR                  UR                  5      n	[        X9R                  XYR                  5      n
U
R                   S	:X  aN  SR#                  U	R                  5      nU	R                  (       a  [        S
U SU 35      e[        SU SU 35      eU
R                   [        U	R                  5      -   nU=R$                  U
R$                  -  sl        U	R&                  Ul        U	R(                   HZ  nUR+                  [-        UR.                  U
R                   -   [1        UR2                  5      [1        UR4                  5      S95        M\     [        U[        5      (       d  GMl  [7        XBR$                  S9$ )Nre   rL   r   z@@ rD   @@ra   zInvalid Line:
rC   zInvalid EOF Context z:
zInvalid Context r   r   r   )r&   r!   )r   rg   rF   r_   END_SECTION_MARKERSrc   r    r\   r   ri   strip_advance_cursor_to_anchor_read_section_find_contextr*   r.   	new_indexrk   r!   r,   r+   rj   r   r   listr   r   r#   )r   r:   rl   input_linesr&   cursoranchorhas_bare_anchorcurrent_linesectionfind_resultctx_textchs                r   r8   r8   ~   s%   22	23F++d#KFFv23365)bLdV\\C,==d&,,v||B\`dBd 	 LLAL/Vq[9?FLLHY9Y6<<5_aL|n=>><<>>.vFSFfll;#K1E1Ev{{[  B&yy!5!56H{{ #7xs8*!MNN/xs8*EFF&&W-A-A)BB{'''((((BMM!}}{/D/DD"2<<0"2<<0 )7 v233H 6<<r   c                  ^  Sn[        U 4S jUS U  5       5      (       d-  [        U[        U5      5       H  nX   T :X  d  M  US-   nSn  O   U(       d|  [        U 4S jUS U  5       5      (       d_  [        U[        U5      5       HF  nX   R                  5       T R                  5       :X  d  M)  US-   nU=R                  S-  sl        Sn  U$    U$ )NFc              3  ,   >#    U  H	  oT:H  v   M     g 7frU   r   rW   rI   rz   s     r   rZ   ,_advance_cursor_to_anchor.<locals>.<genexpr>   s     ?*>$v~*>s   ra   Tc              3  d   >#    U  H%  oR                  5       TR                  5       :H  v   M'     g 7frU   rr   r   s     r   rZ   r      s"     ]H\ZZ\V\\^;H\s   -0)r]   ranger\   rr   r!   )rz   rx   ry   rl   foundis   `     r   rs   rs      s     E?+gv*>???vs;/0A~'Q	 1 ]T[U[H\]]]vs;/0A~##%7Qq M 1 Mr   c           	     D   / n/ n/ n/ nSnUnUnU[        U 5      :  Ga  X   n	U	R                  S5      (       dv  U	R                  [        5      (       d\  U	R                  S5      (       dF  U	R                  S5      (       d0  U	R                  S5      (       d  U	R                  [        5      (       a  GO?U	S:X  a  GO7U	R                  S5      (       a  [	        SU	 35      eUS-  nUn
U	(       a  U	OS	nUS
   nUS:X  a  SnO US:X  a  SnOUS	:X  a  SnO[	        SU 35      eUSS  nUS:H  =(       a    X:g  nU(       aS  U(       d  U(       aE  UR                  [        [        U5      [        U5      -
  [        U5      [        U5      S95        / n/ nUS:X  a#  UR                  U5        UR                  U5        O)US:X  a  UR                  U5        OUR                  U5        U[        U 5      :  a  GM  U(       d  U(       aA  UR                  [        [        U5      [        U5      -
  [        U5      [        U5      S95        U[        U 5      :  a  X   [        :X  a  [        X%US-   S5      $ Xx:X  a&  U[        U 5      :  a  X   OSn[	        SU S	U 35      e[        X%US5      $ )Nkeepro   r/   r0   r1   z***zInvalid Line: ra    r   rf   add-deleterp   TrD   z Nothing in this section - index=F)	r\   rV   rg   END_FILEri   rj   r   rw   r(   )r   start_indexcontextr   r   r+   r<   r    r   raw	last_moderI   rX   line_contentswitching_to_context	next_lines                   r   rt   rt      sv   GII"$N-3DEJ
#e*
lNN4  ~~i((~~011~~011~~o..~~h''%<>>%  ~cU344
	ssaS=Ds]Ds]D~dV455ABx#v~C)2CY)!!"7|c)n<"9o"9o II8\*NN<(U]\*NN<(a #e*
d Iw<#i.8y/y/	
 s5zelh6 %!)TJJ$)CJ$6ELB	;E7!I;OPPWeUCCr   c                  *    \ rS rSr% S\S'   S\S'   Srg)ContextMatchi  r   rv   r!   r   Nr   r   r   r   r   r     s    N
Ir   r   c                    U(       al  [        S[        U 5      [        U5      -
  5      n[        XU5      nUR                  S:w  a  U$ [        XU5      n[	        UR                  UR
                  S-   S9$ [        XU5      $ )Nr   rC   i'  rv   r!   )maxr\   _find_context_corerv   r   r!   )r   r   startr.   	end_start	end_matchfallbacks          r   ru   ru     ss    
3u:G45	&uyA	"$%ee<h&8&8x}}u?TUUee44r   c                   U(       d
  [        USS9$ [        U[        U 5      5       H"  n[        XUS 5      (       d  M  [        USS9s  $    [        U[        U 5      5       H"  n[        XUS 5      (       d  M  [        USS9s  $    [        U[        U 5      5       H"  n[        XUS 5      (       d  M  [        USS9s  $    [        SSS9$ )	Nr   r   c                    U $ rU   r   values    r   <lambda>$_find_context_core.<locals>.<lambda>)  s    %r   c                "    U R                  5       $ rU   )rG   r   s    r   r   r   ,  s
    %,,.r   ra   c                "    U R                  5       $ rU   r   r   s    r   r   r   /  s
    %++-r   d   rC   )r   r   r\   _equals_slice)r   r   r   r   s       r   r   r   $  s    e!445#e*%,?@@!!44 & 5#e*%,HII!!44 & 5#e*%,GHH!#66 & "1--r   c                    U[        U5      -   [        U 5      :  a  g[        U5       H  u  pEU" XU-      5      U" U5      :w  d  M    g   g)NFT)r\   	enumerate)sourcetargetr   map_fnoffsettarget_values         r   r   r   5  sO     s6{S[( )& 1&()VL-AA !2 r   c           	     0   U R                  S5      n/ nSnU H  nUR                  [        U5      :  a$  [        SUR                   S[        U5       35      eXVR                  :  a  [        SUR                   SU S35      eUR	                  X5UR                   5        UR                  nUR
                  (       a  UR	                  UR
                  5        U[        UR                  5      -  nM     UR	                  X5S  5        UR                  U5      $ )NrL   r   zapplyDiff: chunk.origIndex z > input length z applyDiff: overlapping chunk at z	 (cursor ))rF   r   r\   ri   extendr   r   rk   )r:   r&   r3   
orig_lines
dest_linesry   chunks          r   r9   r9   @  s   T"JJFc*o--e.>.>-??OPST^P_O`a  $$$253C3C2DIfXUVW  	*e.>.>?@!!??eoo.#eoo&&! $ j)*<<
##r   r@   )r   )r:   strr;   r   r<   ApplyDiffModereturnr   )r;   r   r   r   )rN   r   r   r   )rY   r   r^   zSequence[str]r   r-   )rY   r   rX   r   r   r   )r   r   r3   r   r   r   )r   r   r:   r   r   r#   )
rz   r   rx   r   ry   r   rl   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   r   r   r   r   r   r   zCallable[[str], str]r   r-   )r:   r   r&   r%   r3   r   r   r   )%__doc__
__future__r   rE   collections.abcr   r   dataclassesr   typingr   r   r   r   r#   r(   rg   r   rh   rq   r@   r5   rO   r4   r7   r_   rc   r6   r8   rs   rt   r   ru   r   r   r9   __all__r   r   r   <module>r      s   9 " 	 . ! +,         
    		  7+6X6 K .+&
  *=Z  	
 	4KD\   
5."(14>R	$6 .r   