
    yj,                        d dl Z d dlZd dlZd dlmZ d dlmZ  ej        e          Z	de
de
fdZde
de
dz  fdZde
dee
         fd	Zde
de
dz  fd
Zde
deee
ef                  fdZde
deee
ef                  de
dz  fdZde
deee
ef                  de
dz  fdZde
de
dz  fdZde
de
dz  fdZde
de
fdZde
de
fdZdS )    N)Any)repair_jsonjson_strreturnc                     t          |           }|r|S t          |           }|r|S t          |           }|r|S t          |           }|r|S t	          |           S )z>Comprehensively repair malformed JSON with multiple strategies)try_partial_parse_repairtry_contextual_closure_repairtry_line_reconstruction_repairtry_regex_pattern_repairsimple_bracket_repair)r   repaireds     =/DATA/AppData/hermes/projects/honcho/src/utils/json_parser.pycomprehensive_json_repairr      s     (11H  -X66H  .h77H  (11H  !***    c                 R   	 |                      d          }t          t          |          dd          D ]`}d                    |d|                   }t	          |          D ]1}	 t          j        |           |c c S # t
          j        $ r Y .w xY wadS # t          $ r Y dS w xY w)z@Try to parse JSON incrementally and reconstruct from valid parts
r   N)	splitrangelenjoingenerate_closure_attemptsjsonloadsJSONDecodeError	Exception)r   linesipartialclosure_attempts        r   r   r   '   s    t$$s5zz1b)) 		 		Aiibqb	**G $=W#E#E  J///******+   H	 t   tts6   A#B &B ;B  BB BB 
B&%B&partial_jsonc                    g }g }d}d}t          |           D ]\  }}|rd}
|dk    rd}|dk    r|s| }|r"|dv r|                    ||f           >|dv r?|r=|                                \  }}|dk    r|dk    s|d	k    r|d
k    s|dk    r|dk    s n|                                 }	|	                                                    d          r|	dd         }	|                    |	           g }
t          |          D ]X\  }}|d
k    r|
                    d	           !|dk    r|
                    d           =|dk    r|
                    d           Y|                    |	d                    |
          z              d |
D             }|                    |	d                    |          z              |r.|                    |	dz   d                    |
          z              |S )z3Generate different ways to close the JSON structureF\T"z({[z)}])(}{][,Nr    c                     g | ]}|d v |	S )z]} ).0cs     r   
<listcomp>z-generate_closure_attempts.<locals>.<listcomp>y   s    555!199A999r   )	enumerateappendpoprstripendswithreversedr   )r!   attemptsstack	in_stringescape_nextr   charopener_baseclosuresobj_closuress               r   r   r   =   sP   H $&EIK\**  4 	K4<<K3;;{;%I 	5==LL$####U]]u]		IFA 3CKKFcMMCKKFcMM    D {{}}c"" CRCy He__ ! !	S==OOC    s]]OOC    s]]OOC    OOD2778,,,--- 65x555LOOD277<000111  8s
RWWX%6%66777Or   c                     	 t          |           }|sdS |d         }|d         dv rt          | |          S |d         dv rt          | |          S dS # t          $ r Y dS w xY w)z*Smart closure repair based on JSON contextNr   type)stringnumberbooleannull)commacolon)tokenize_jsontry_close_after_valuetry_complete_structurer   )r   tokens
last_tokens      r   r	   r	      s    '4X'>'>  	4%+BZ
 f!HHH(6::: #555)(F;;;t   tts   A !A A 
A! A!c                    g }d}|t          |           k     r9| |         }|                                r|dz  }6|dk    ru|}|dz  }|t          |           k     r4| |         dk    r| |dz
           dk    rn|dz  }|t          |           k     4|                    d| ||dz            ||d           n|                                s|dk    r|}|t          |           k     r`| |                                         s
| |         dv r<|dz  }|t          |           k     r$| |                                         2| |         dv <|                    d	| ||         ||dz
  d           g|d
v r*ddddddd|         }|                    ||||d           n|dv r| ||dz            dk    r#|                    dd||dz   d           |dz  }ng| ||dz            dk    r#|                    dd||dz   d           |dz  }n3| ||dz            dk    r"|                    dd||dz   d           |dz  }|dz  }|t          |           k     9|S )z/Tokenize JSON string into meaningful componentsr      r$   r#   rD   )rC   valuestartend-z.-eErE   z{}[],:object_start
object_endarray_start	array_endrH   rI   )r(   r'   r*   r)   r+   :tfn   truerF         falserG   )r   isspacer3   isdigit)r   rM   r   r<   rR   
token_types         r   rJ   rJ      s;   #%F	A
c(mm

{ <<>> 	FA 3;;EFAc(mm##A;#%%(1q5/T*A*AQ c(mm## MM$%ea!em4"	     \\^^ -	ts{{Ec(mm####%% $)1!)>)>Q c(mm####%% $)1!)>)> MM$%eAg."q5	     X#!"   J MM:qQRSSTTTT U]]AE	"f,,&!APQERR   Q!a!e)$//&1QQRUSS   Q!a!e)$..#fqQOO   Q	QS c(mm

V Mr   rM   c                    g }|dd         D ]x}|d         dk    r|                     d           $|d         dk    r|                     d           F|d         dv r(|r&|d         |d	         k    r|                                 yd
                    t          |                    }| |z   }	 t	          j        |           |S # t          j        $ r Y dS w xY w)z%Try to close JSON after a value tokenNr   rC   rU   r'   rW   r)   )rV   rX   rQ   r,   )r3   r4   r   r7   r   r   r   )r   rM   nesting_stacktokenclosure	candidates         r   rK   rK      s     "M 
  
 =N**  %%%%6]m++  %%%%&M888 9b!U7^33 ggh}--..G7"I
9   tts   .C CCc                 P   |d         }|d         dk    r6|                                                       d          }t          |          S |d         dk    rO| dz   | dz   | dz   | d	z   g}|D ]:}	 t          |          }|r|c S # t          j        t          t
          f$ r Y 7w xY wd
S )zFTry to complete JSON ending with structural tokens like comma or colonr   rC   rH   r+   rI   rG   z""z[]z{}N)r5   r	   r   r   	TypeError
ValueError)r   rM   rN   trimmed
candidatesrg   r   s          r   rL   rL     s    J&W$$ //##**3//,W555	F	w	&	& vtOtOtO	

 $ 	 	I8CC $#OOO$()Z@    4s   .BB#"B#c                     |                      d          }t          t          |          dd          D ]6}|d|         }d                    |          }t	          |          }|r|c S 7dS )z$Try to reconstruct JSON line by liner   r   r   N)r   r   r   r   r	   )r   r   r   partial_linesr!   r   s         r   r
   r
   )  s    NN4  E 3u::q"%%  bqb	yy// 1>> 	OOO	 4r   c                     | }t          j        dd|          }t          j        dd|          }t          j        dd|          }	 t          j        |           |S # t          j        $ r Y nw xY wt          |          S )z.Use regex to fix common JSON formatting issuesz,(\s*[}\]])z\1z(?<!\\)"(?![,\]\}:\s]|$)z\\"z,\s*"[^"]*"?\s*:?\s*$r,   )resubr   r   r   r	   )r   fixeds     r   r   r   :  s    E F>5%00E F.>>E F+R77E
5    )///s   A A.-A.c                    |                      d          }|                      d          }|                      d          }|                      d          }||z
  }||z
  }| }|dt          d|          z  z  }|dt          d|          z  z  }|S )z1Fallback: Original simple bracket counting methodr(   r'   r*   r)   r   )countmax)r   open_bracesclose_bracesopen_bracketsclose_bracketsmissing_bracketsmissing_bracesr   s           r   r   r   R  s    ..%%K>>#&&LNN3''M^^C((N$~5 </NHc!-....Hc!^,,,,HOr   c                    |                                  } t          |           }|r|S 	 t          |           }t          j        |           t
                              d           |S # t          j        $ rF}t
                              d|            t          d|j
         dd|j
         z             |d}~ww xY w)z2Main function with comprehensive repair strategiesu   ✅ JSON successfully repaired!u   ❌ Repair failed: z'Could not repair JSON. Original error: z, zRepair error: N)stripr   r   r   r   loggerinfor   errorrj   msg)r   	good_jsonr   repair_errors       r   validate_and_repair_jsonr   c  s    ~~H H%%I ,X66 	
85666   9<99:::Jl6FJJJ1|/112
 
 	s   >A( (B=7AB88B=)r   loggingrp   typingr   json_repairr   	getLogger__name__r~   strr   r   listr   r	   dictrJ   rK   rL   r
   r   r   r   r.   r   r   <module>r      s7     				       # # # # # #		8	$	$+ + + + + +6s sTz    ,CC CDI C C C CLC C$J    2PC PDc3h$8 P P P PfC d38n1E #PT*    8S $tCH~2F 3QU:    <S S4Z    "0s 0sTz 0 0 0 00C C    "s s      r   