
    	D,j                     r   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 	 d dlZn# e$ r dZY nw xY wd dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z? ddl@m@Z@ d ZAd ZBd ZCd ZDd ZEd1d ZFd! ZGd" ZHd# ZId$ ZJd% ZKd2d'ZLd3d)ZMd2d*ZNd+ ZOd4d,ZPd2d-ZQd2d.ZRd1d/ZSeTd0k    r eP            ZU ejV        eU           dS dS )5    N)fields)Path)load_dotenv)EditingMode)__version__modelsurlsutils)	Analytics)
get_parser)Coder)UnknownEditFormat)CommandsSwitchCoder)ClipboardWatcher)handle_deprecated_model_args)format_settingsscrub_sensitive_info)ChatSummary)InputOutput)litellm)ModelSettings)offer_openrouter_oauthselect_default_model)ANY_GIT_ERRORGitRepo)report_uncaught_exceptions)check_versioninstall_from_main_branchinstall_upgrade)FileWatcher   )dumpc                    d}| D ]}t          |                                          r	 t          |d          5 }|D ]\}|                                                    d          r3t          d           t          d| d           t          d           d}]	 d d d            n# 1 swxY w Y   # t          $ r Y w xY w|S )	NFrzyes:zConfiguration error detected.z	The file z% contains a line starting with 'yes:'z6Please replace 'yes:' with 'yes-always:' in this file.T)r   existsopenstrip
startswithprint	Exception)config_filesfoundconfig_fileflines        Y/home/rurouni/.local/share/uv/tools/aider-chat/lib/python3.11/site-packages/aider/main.pycheck_config_files_for_yesr2   +   s8   E#  ##%% 
		+s++ )q ! ) )::<<226:: )!"ABBB!"`k"`"`"`aaa!"Z[[[$(E)) ) ) ) ) ) ) ) ) ) ) ) ) ) )    
	 Ls5   B2A B&B2&B*	*B2-B*	.B22
B?>B?c                  v    	 t          j        d          } | j        S # t           j        t          f$ r Y dS w xY w)zFTry and guess the git repo, since the conf.yml can be at the repo rootT)search_parent_directoriesN)gitRepoworking_tree_dirInvalidGitRepositoryErrorFileNotFoundError)repos    r1   get_git_rootr;   <   sM    x$777$$)+<=   tts    88c                 6   	 t          t          | ||          j                                                  }n# t          ft
          z   $ r Y dS w xY w|st          |          S t          |                                          }||k    rdS t          |          S )zLAfter we parse the args, we can determine the real repo. Did we guess wrong?N)r   r   rootresolveOSErrorr   str)iogit_rootfnames	git_dname
check_repos        r1   guessed_wrong_reporF   E   s    '"fi88=>>FFHH

:%     :H~~%%''HXz??s   58 AAc                 >   	 t           j                            |           }t          | |d           nR# t          $ rE}|                    d|             |                    t          |                     Y d }~d S d }~ww xY w|                    d|             |S )NFzUnable to create git repo in zGit repository created in )r5   r6   initcheck_gitignorer   
tool_errortool_outputr@   )rB   rA   r:   errs       r1   make_new_reporM   X   s    x}}X&&"e,,,,   
@h@@AAA
s3xx   
 NN:::;;;Ks   03 
B:A==Bc                    t           d S 	 t          j                    }n# t          $ r d }Y nw xY wd }| r&	 t          j        |           }n# t
          $ r Y nzw xY w|t          j                    k    r|                    d           d S |rF|                    d          r1t          |
                                          } t          | |          }|sd S 	 |j                             dd          pd }n# t           j        j        $ r d }Y nw xY w	 |j                             dd          pd }n# t           j        j        $ r d }Y nw xY w|r	|r|j        S |                                5 }|s,|                    ddd           |                    d	           |s,|                    dd
d           |                    d           d d d            n# 1 swxY w Y   |j        S )NzMYou should probably run aider in your project's directory, not your home dir.zENo git repo found, create one to track aider's changes (recommended)?z--getz	user.namez
user.emailusernamez	Your Namez6Update git name with: git config user.name "Your Name"emailzyou@example.comz>Update git email with: git config user.email "you@example.com")r5   r   cwdr?   r6   r   hometool_warningconfirm_askr@   r>   rM   configexcGitCommandErrorr7   config_writer	set_value)rB   rA   rR   r:   	user_name
user_email
git_configs          r1   	setup_gitr^   e   s   
{hjj    D +	8H%%DD 	 	 	D					
[	
 	
 	
 		 +O  + s{{}}%%Xr** HOOG[99AT		7"   			X__Wl;;Ct

7"   


  %Z %$$					 ^ 	V  ===OOTUUU 	^  2CDDDOO\]]]^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^   sT    ..A 
AAC4 4DDD/ /EE*AGGGTc                    | sd S 	 t          j        |           }g }|                    d          s|                    d           t	          |           dz  }|                                r*|                    d          s|                    d           |sd S t	          |           dz  }|                                rh	 |                    |          }|d S |                    d          s|dz  }n5# t          $ r&}|	                    d| d|            Y d }~d S d }~ww xY wd}n# t          $ r Y d S w xY w|rC|                    d	           |                    d
d                    |           d          sd S |d                    |          dz   z  }	 |                    ||           |                    dd                    |           d           d S # t          $ rX}|	                    d| d|            |                    d           |D ]}	|                    d|	            Y d }~d S d }~ww xY w)N.aiderz.aider*.env
.gitignore
zError when trying to read :  z+You can skip this check with --no-gitignorezAdd z, z to .gitignore (recommended)?zAdded z to .gitignorezError when trying to write to zVTry running with appropriate permissions or manually add these patterns to .gitignore:z  )r5   r6   ignoredappendr   r&   	read_textendswithr?   rJ   r   rK   rU   join
write_text)
rB   rA   askr:   patterns_to_addenv_pathgitignore_filecontentepatterns
             r1   rI   rI      s    x!!||H%% 	.""9--->>F*?? 	+T\\&%9%9 	+""6*** 	Fh,6  "" 	,,~66?F''-- $tOG   P>PPQPPQQQ G     
DEEE~~^TYY%?%?^^^__ 	Ftyy))D00G	+
ng...
J		/ : :JJJKKKKK + + +
L~LLLLMMM
d	
 	
 	
 ' 	+ 	+GNN>>>****	+ 	+ 	+ 	+ 	+ 	++sb   BD+ &D+ C5 C5 4D+ 5
D%?D D+  D%%D+ +
D98D9AG! !
I+AH>>Ic                 2    t          j        | dddg          S )N	streamlitz-You need to install the aider browser featurezaider-chat[browser])r
   check_pip_install_extra)rA   s    r1   check_streamlit_installrv      s&    (
7		      c                     ddl m}  t           |                       dz  }t          j                            |          sud}t          j        t          j                            |          d           t          |d          5 }|	                    |           d d d            d S # 1 swxY w Y   d S t          d           d S )	Nr   )get_streamlit_file_pathzcredentials.tomlz[general]
email = ""
T)exist_okwz$Streamlit credentials already exist.)streamlit.file_utilry   r   ospathr&   makedirsdirnamer'   writer*   )ry   credential_pathempty_credsr/   s       r1   write_streamlit_credentialsr      s   ;;;;;; 2244558JJO7>>/** 6/
BGOOO44tDDDD/3'' 	!1GGK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	455555s   B((B,/B,c                 2   ddl m} ddlm} t	                       t	          d           t                       |j        }d|g}|g dz  }dt          t                    v }|rt	          d           n|g d	z  }|d
g| z   z  }|	                    |           d S )Nr   )cli)guizCONTROL-C to exit...run)z --browser.gatherUsageStats=falsez--runner.magicEnabled=falsez--server.runOnSave=falsez-devzWatching for file changes.)z--global.developmentMode=falsez--server.fileWatcherType=nonez--client.toolbarMode=viewerz--)
streamlit.webr   aiderr   r*   r   __file__r@   r   main)argsr   r   targetst_argsis_devs         r1   
launch_guir      s    !!!!!!	GGG	
 !!!  !!!\FfoG    G s;'''F 
*++++ 
 
 
 	
 v}GHHWrw   c                    d}t                      }| D ]}t          j        d|          rL|                    d          }|d         }|t	          |          dz   d          }|                                }nd }|}|                                }|r|||<   |                    d| d           |                    d           |                    d	           d
}|rd S |S )NFz
^[a-z]+:.*:r   r"   zUnable to parse --lint-cmd ""z,The arg should be "language: cmd --args ..."z4For example: --lint-cmd "python: flake8 --select=E9"T)dictrematchsplitlenr(   rJ   rK   )	lint_cmdsrA   rL   reslint_cmdpieceslangcmds           r1   parse_lint_cmdsr     s    
C
&&C  8M8,, 	^^C((F!9D3t99q=??+C::<<DDDCiikk 	CIIMMDDDDEEENNIJJJNNQRRRCC
 Jrw   c                    g }|                     t          j                    | z             |r%|                     t          |          | z             |                     |            |r|                     |           g }|D ]G}	 |                     t          |                                                     8# t          $ r Y Dw xY w|}|                                 g }|D ]}||vr|                     |           |                                 |}t          t          t          |                    }t          t          
                    |                    }|S N)rg   r   rS   r>   r?   reverselistmapr@   r   fromkeys)default_filerB   command_line_filefilesresolved_filesfnuniqs          r1   generate_search_path_listr   1  s^   E	LL|+,,, 4T(^^l2333	LL (&'''N  	!!$r(("2"2"4"45555 	 	 	D	 E	MMOOOD  T>>KKOOOLLNNNES%!!Eu%%&&ELs   4B;;
CCFc                    t          d| |          }	 t          j        |          }t          |          dk    r5|r2|                    d           |D ]}|                    d|            n|r|                    d           n0# t
          $ r#}|                    d|            Y d }~dS d }~ww xY w|r2|                    d           |D ]}|                    d|            d S )	Nz.aider.model.settings.ymlr   zLoaded model settings from:  - zNo model settings files loadedz$Error loading aider model settings: r"   z"Searched for model settings files:)r   r   register_modelsr   rK   r+   rJ   )	rB   model_settings_fnamerA   verbosemodel_settings_filesfiles_loadedfile_loadedrq   files	            r1   r   r   O  s;   4#X/C -.BCC|q   9<===#/ 9 9KNN#7+#7#78888 	=NN;<<<   
@Q@@AAAqqqqq  *
;<<<( 	* 	*DNN=$==))))4s   A3B 
B4B//B4utf-8c                    t          d| |          }t          j                    dz  dz  }|                                r\|                    dt          |                                                     t          t          	                    |                    }g }|D ]}	 t          |                                          r't          |d|           |                    |           L# t          $ r}t          d| d|            Y d }~pd }~wt          $ r}t          d	| d|            Y d }~d }~ww xY w|S )
Nra   r`   zoauth-keys.envr   T)overrideencodingzOSError loading rd   zError loading )r   r   rS   r&   insertr@   r>   r   r   r   r   rg   r?   r*   r+   )rB   dotenv_fnamer   dotenv_filesoauth_keys_fileloadedfnamerq   s           r1   load_dotenv_filesr   i  sz   , L ikkH,/??O 9As?#:#:#<#<==>>>DMM,7788F 1 1	1E{{!!## %ED8DDDDe$$$ 	3 	3 	31U11a1122222222 	1 	1 	1/5//A//00000000	1Ms%   "AC++
D;5DD;D66D;c                    g }t          j        d                              d          }|                    t	          |                     |t          d| |          z  }	 t          j        |          }t          |          dk    r4|r4|	                    d           |D ]}|	                    d|            d S d S d S # t          $ r#}|                    d|            Y d }~dS d }~ww xY w)	Nzaider.resourceszmodel-metadata.jsonz.aider.model.metadata.jsonr   zLoaded model metadata from:r   z%Error loading model metadata models: r"   )importlib_resourcesr   joinpathrg   r@   r   r   register_litellm_modelsr   rK   r+   rJ   )	rB   model_metadata_fnamerA   r   model_metadata_filesresource_metadatamodel_metadata_files_loadedmodel_metadata_filerq   s	            r1   r   r     s9    ,12CDDMMNcdd$5 6 67775$h0D  &,&DEY&Z&Z#*++a//G/NN8999'B = =#;&9;;<<<< 0///= =   
AaAABBBqqqqqs   !AC 
C/C**C/c                    | sdS | j         j        s|                    d           dS d}	 |                                  | j        sdS t          | j                  }n# t          $ r0}dt          j                     dt          |           }Y d }~nPd }~wt          $ r}t          |          }d|v }Y d }~n+d }~wt          $ r}t          |          }d}Y d }~nd }~ww xY w|ra|                    d           |                    d           |                    d	           |                    t          j        d
           dS |                    d           |                    |           dS )NTz2The git repo does not seem to have a working tree?FzFailed to read the Git repository. This issue is likely caused by a path encoded in a format different from the expected encoding "z".
Internal error: zversion in (1, 2)z;Aider only works with git repos with version number 1 or 2.zHYou may be able to convert your repo: git update-index --index-version=2z3Or run aider --no-git to proceed without using git.%Open documentation url for more info?z1Unable to read git repository, it may be corrupt?)r:   r7   rJ   get_tracked_filesgit_repo_errorr@   UnicodeDecodeErrorsysgetfilesystemencodingr   AssertionErrorrK   	offer_urlr	   git_index_version)r:   rA   bad_ver	error_msgrW   s        r1   sanity_check_repor     s    t9% 
JKKKuG   " 	4+,,		 
 
 
*ADAZA\A\* *"3xx* * 						
  3 3 3HH	%2   HH	  
STTT
abbb
LMMM
T+-TUUUuMMEFFFNN95s5   A A 
C'&BCB77CCCc                 9  CDE t                       | t          j        dd          } t          d }n|r|}nt	                      }t          d          }g }	 ||                                gz  }n# t          $ r Y nw xY w|r+t          |          |z  }||vr|                    |           |                    t          j	                    |z             t          t          t          |                    }t          ||          }		 |	                    |           \  C}
nD# t          $ r7Dt!          DfddD                       rt#          |          rY d DDdS Dd DDww xY wCj        rNt'          d           |D ]<}t          |                                          rdnd}t'          d| d	|            =|                                 t          ||          }	|	                    |           \  C}
t-          |Cj        Cj                  }|	                    |           CCj        rCd
|	_        t'          t9          j        |	Cj                             t          j        d           t          dC_        Cj        rtA          d          }t'          d           Cj!        sdd l"}dtF          j$        d<   tK          j&                     |'                    d          tJ          j(        _)        |*                    d          tJ          j(        _+        tX          j-        .                    d           Cj/        rCj/        tX          _0        Cj1        r#dC_2        dC_3        dC_4        dC_5        dC_6        Cj7        r#dC_2        dC_3        dC_4        dC_5        dC_6        |rCj8        dC_8        Cj9        rtt          j;        ntt          j<        ECEfd} |Cj=                  }	 |>                                 n@# t~          $ r3}|j=        s| |d          }|@                    d           Y d }~nd }~ww xY wCjA        rCjA        D ]}	 |B                    dd          \  }}|C                                tF          j$        |C                                <   P# t          $ r2 |E                    d |            |F                    d!           Y  dS w xY wCjG        rCjG        D ]}	 |B                    dd          \  }}|C                                H                                 d"}|C                                tF          j$        |<   g# t          $ r2 |E                    d#|            |F                    d$           Y  dS w xY wCjI        rCjI        tF          j$        d%<   CjJ        rCjJ        tF          j$        d&<   t          C|           CjL        rCjL        tF          j$        d'<   CjM        r)|@                    d(           CjM        tF          j$        d)<   CjN        r)|@                    d*           CjN        tF          j$        d+<   CjO        r)|@                    d,           CjO        tF          j$        d-<   tA          CjP        Cj        CjQ        CjR        .          }CjS        dur|T                    CjS                  r|F                    d/           |F                    d0t          jS                    |V                    d1           }d|_W        |r+|X                    d2           |F                    d           |Y                                 |F                                 |Z                                 |[                    d3           Cj\        rg|set          |          s|[                    d4d56           d S |[                    d7           t          |            |[                    d4d86           d S Cj        r|D ]}|F                    d9|            Cj_        Cj`        pg z   }d: |D             }g }Cja        pg D ]}t          |          b                                                                } | c                                r3|d                    d; | e                    d<          D                        ||                    t          |                      t          |          dk    rrd}!|D ]=}t          |          c                                r|E                    | d=           d}!>|!s.|F                    d>           |[                    d4d?6           dS d }"t          |          dk    rt          |d                   c                                ruCj        r7t          t          |d                                                             }"g }n7|E                    |d          d@           |[                    d4dA6           dS Cj        rH|sFt          ?t          ||||"          }#|#r+|[                    d4dB6           t          | |#|C          S Cji        r4t          |dCj        D          }$|[                    d4dE6           |$sdndS Cjk        r,t          |          }%|[                    d4dF6           |%rdndS Cjm        r,t          |          }%|[                    d4dG6           |%rdndS Cjo        rt          |Cj        H           Cj        r't          ||          }Cjq        rt          ||           Cj        r%t          |	C          }&|F                    |&           d	t                    t          j                  }'t          C|'          }'|F                    |'dI           t          |Cj        H          }(t          ||(Cj        H           t          |Cjy        |Cj        H           t          |Cj{        |Cj        H           Cj|        r3tY          j}        |Cj|                   |[                    d4dJ6           dS Cj~        rCj~        D ]})|)B                    dKd          }*t          |*          dLk    rG|E                    dM|)            |F                    dN           |[                    d4dO6            dS |*\  }+},|,C                                tX          j        |+C                                <   t          C||          }-|-sdS |-C_        Cj                            dP          rtF          j$                            dQ          s|@                    dRCj         dS           t	          ||          rctF          j$                            dQ          r|F                    dT           n|E                    dU           |[                    d4dV6           dS |E                    dWCj         dX           |                    t          j        dY           |[                    d4dZ6           dS tY          j        Cj        Cj        Cj        Cj        Cj        [          }.|.j        |@                    d\           Cj        1Cj        r|.j        r#d]|.j        v r|.                    Cj                   Cj        1Cj        r|.j        r#d^|.j        v r|.                    Cj                   Cj        r}Cj        d]d_Cj        d^d_g}/|/D ]f}0|0d`         \|.j        r|0da         |.j        vrF|@                    db|.j         dc|0da          dd           |F                    de|0da          df           gCj        rCj        |.j        dgv rdh|.j        z   |._        Cj        r|F                    di           |F                    t+          j        |.j        djk                     |F                    dl           t1          t3          t4                    dm n          D ]N}1t7          |.|1j                  }2t+          j        |2djk          }2|F                    |1j         do|2            Ot9          Cj        |          }3|3|[                    d4dp6           dS Cj        rtY          j        ||.          }4|4r|[                    dq|.r           |F                    ds           	 |                    t          j        dt           |F                                 n)# tB          $ r |[                    d4du6           Y dS w xY wd }5Cj        ro	 tE          |||"Cj        |.                                Cj        Cj        Cj        Cj        Cj        Cj        Cj        Cj        v          }5n# tZ          $ r Y nw xY wCj        s*t_          |5|          s|[                    d4dw6           dS |5r@Cj        s9t          |5                                          }6|[                    dx|6y           n|[                    dz           tc          |d Cj        Cj        Cj        Cj!        C|	Cj        Cj        |{          }7tm          |.j        |.gCj        p|.j                  }8Cj        rCj        d|k    rd}C_        |.j        s,Cj        r|@                    d~|.j         d           dC_        Cj        |.                                }9nCj        }9|[                    dt}          Cj                             	 t          j        di d|.dCj        d|dx|5d|d|dCj        dCj        dCj        dCj        d|9dCj        dCj        dCj        dCj        dCj        dCj        d|3dCj        d|7d|8d|dCj        dCj        dCj        dCj        dCj        dCj        dCj        dCj        dCj        dCj        dCj        }:n# t          $ rd}|E                    t          |                     |                    t          j        d           |[                    d4d6           Y d }~dS d }~wt          $ rD}|E                    t          |                     |[                    d4d6           Y d }~dS d }~ww xY w|r|[                    d4d6           |:S g };|r2|;                    t          t          |          dz                       Cj        r|;                    Cj                   Cj        rHt          |:|;Cj        |Cj        r t          t          j                              nd           }<|<|:_        Cj        r1|[                    d           t          |:j        Cj        H           |:                                 Cj        ru|:xj        t          dd          gz  c_        |:                                                                }=t          j        |=           |[                    d4d6           d S Cj        r|:j                            |           Cj        ruCj        s.|E                    d           |[                    d4d6           dS |:j                            Cj                   |j        r|:                    |j                   Cj        r6Cj        r|F                    d           n|:j                                         Cj        sCj        sCj        r|[                    d4d6           d S Cj        rD|:                                }>|>r|F                    |>           |[                    d4d6           d S Cj        ri|                    Cj                  }?|?|[                    d4d6           d S |?|:_        |:                                 |[                    d4d6           d S Cj        r|.j        C_        dC_        Cj        du rV|F                    dt          j                    |F                                 t          j        t          j                   n?Cj        8|(r6|F                                 |                    t          j        dd           |rt          j                                                    t          |                                          k    rV|@                    d           |F                    dt          j                                |F                    d|            Cj        rCj        r|@                    d           Cj        r|7                    Cj                   Cj        ru|                    Cj                   |F                                 	 |:                    Cj                   n# t          $ r Y nw xY w|[                    d4d6           d S Cj        r	 |                    Cj                  }@|F                                 |:                    |@           n# tZ          $ r8 |E                    dCj                    |[                    d4d6           Y dS t          $ r:D|E                    dD            |[                    d4d6           Y d DDdS d DDww xY w|[                    d4d¬6           d S Cj        r|[                    d4dì6           d S |[                    d|.|.j        Ŧ           	 	 t}          Cj                  |:_        |:                                 |[                    d4dƬ6           d S # t          $ r}Ad|:_        t          |AdǦ          r|Aj        |Aj        |_        t          ||:Ȧ          }B|B                    |Aj                   d|Bv r|Bd= t          j        di |B}:|Aj                            dɦ          dur|:                                 Y d }A~And }A~Aww xY w)Nr"   z.aider.conf.ymlc              3   :   K   | ]}|t                    v V  d S r   )r@   ).0wordrq   s     r1   	<genexpr>zmain.<locals>.<genexpr>  s-      ``$ts1vv~``````rw   )boolobjecthasno	attributer(   z*Config files search order, if no --config:z(exists)re   r    r   )shellr   FT)permanently_disablez)Analytics have been permanently disabled.
SSL_VERIFY)verifyz#32FF32z#FF3333z#FFFF00z#00FFFFmonokaigreenredz#FFA500bluedefaultc                 p   t          | j        j        j        fi dddj        dj        dj        dj        dj        dj	        d	j
        d
j        dj        dj        dj        dj        dj        dj        ddj        dj        dj        dj        S )Ninputoutputuser_input_colortool_output_colortool_warning_colortool_error_colorcompletion_menu_colorcompletion_menu_bg_colorcompletion_menu_current_color completion_menu_current_bg_colorassistant_output_color
code_themedry_runr   line_endingsllm_history_fileeditingmodefancy_inputmultiline_modenotificationsnotifications_command)r   
yes_alwaysinput_history_filechat_history_filer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	multiliner   r   )prettyr   editing_moder   r   s    r1   get_iozmain.<locals>.get_io'  sj   O#"	
 
 

 %
 6
 "22
 #44
  $66
 "22
 #'"<"<
 &*%B%B
 +/*L*L
 .2-R-R
 $(#>#>
  !
" LL#
$ ]]%
& **'
( "22)
* %+
, ((-
.  >>/
0 ,,1
2 #'"<"<3
 	
rw   z<Terminal does not support pretty output (UnicodeDecodeError)=zInvalid --set-env format: z$Format should be: ENV_VAR_NAME=value_API_KEYzInvalid --api-key format: zFormat should be: provider=keyANTHROPIC_API_KEYOPENAI_API_KEYOPENAI_API_BASEzL--openai-api-version is deprecated, use --set-env OPENAI_API_VERSION=<value>OPENAI_API_VERSIONzF--openai-api-type is deprecated, use --set-env OPENAI_API_TYPE=<value>OPENAI_API_TYPEzQ--openai-organization-id is deprecated, use --set-env OPENAI_ORGANIZATION=<value>OPENAI_ORGANIZATION)logfiler   posthog_hostposthog_project_api_keyz_Aider respects your privacy and never collects your code, chat messages, keys or personal info.zFor more info: z>Allow collection of anonymous analytics to help improve aider?)permanentlylaunchedexitzStreamlit not installed)reasonzgui sessionzGUI session endedzLoaded c                 j    g | ]0}t          t          |                                                    1S  )r@   r   r>   )r   r   s     r1   
<listcomp>zmain.<locals>.<listcomp>  s2    :::"c$r((""$$%%:::rw   c              3   \   K   | ]'}|                                 t          |          V  (d S r   )is_filer@   )r   r/   s     r1   r   zmain.<locals>.<genexpr>  s5      #S#Sqqyy{{#SCFF#S#S#S#S#S#Srw   *z$ is a directory, not provided alone.zPProvide either a single directory of a git repo, or a list of one or more files.zInvalid directory inputz' is a directory, but --no-git selected.zDirectory with --no-gitzRecursing with correct repo)return_coder)
just_checkr   zJust checking updatezInstalled main branchzUpgrade completed)r   )log_onlyzListed modelsr      zInvalid alias format: z"Format should be: alias:model-namezInvalid alias format errorzopenrouter/OPENROUTER_API_KEYzThe specified model 'z6' requires an OpenRouter API key, which was not found.z"OpenRouter successfully connected.zJOpenRouter authentication seemed successful, but the key is still missing.zAOpenRouter key missing after successful OAuth for specified modelz;Unable to proceed without an OpenRouter API key for model 'z'.z%Open documentation URL for more info?zDOpenRouter key missing for specified model and OAuth failed/declined)
weak_modeleditor_modeleditor_edit_formatr   zSModel setting 'remove_reasoning' is deprecated, please use 'reasoning_tag' instead.reasoning_effortthinking_tokens)argrP   r'  rP   z	Warning: z does not support 'z', ignoring.z4Use --no-check-model-accepts-settings to force the 'z
' setting.)diffwholezdiff-fencedzeditor-zModel metadata:   indentzModel settings:c                     | j         S r   )rP   )xs    r1   <lambda>zmain.<locals>.<lambda>p  s     rw   )keyrd   zInvalid lint command formatzmodel warning)
main_modelz5You can skip this check with --no-show-model-warningsr   z(Keyboard interrupt during model warnings)	r   attribute_authorattribute_committerattribute_commit_message_author"attribute_commit_message_committercommit_promptsubtree_onlygit_commit_verifyattribute_co_authored_byzRepository sanity check failedr:   )	num_fileszno-repo)	voice_languagevoice_input_devicevoice_format
verify_sslr   parserr   editororiginal_read_only_fnamesautor   z'Warning: Streaming is not supported by z. Disabling streaming.auto_commits)enabledr1  edit_formatrA   rC   read_only_fnames
show_diffsdirty_commitsr   
map_tokensr   streamuse_gitrestore_chat_history	auto_lint	auto_testr   test_cmdcommands
summarizer	analyticsmap_refreshcache_promptsmap_mul_no_filesnum_cache_warming_pingssuggest_shell_commandschat_languagecommit_languagedetect_urlsauto_copy_contextauto_accept_architectadd_gitignore_filesz&Open documentation about edit formats?zUnknown edit formatz ValueError during coder creationzReturning coder objectrb   )
gitignoresr   rR  r=   zcopy-paste moderO   zHello!)rolerp   zShowed prompts)rC   zNo --test-cmd provided.zNo test command providedz!Dry run enabled, skipping commit.zCompleted lint/test/commitzShowed repo mapzFailed to read apply contentzApplied updatesz/pastezOpening release notes: z1Would you like to see what's new in this version?)allow_neverz`Note: in-chat filenames are always relative to the git working dir, not the current working dir.zCur working dir: zGit working dir: zBCost estimates may be inaccurate when using streaming and caching.)with_messagezCompleted --messagezMessage file not found: zMessage file not foundzError reading message file: zMessage file IO errorzCompleted --message-filezExit flag setzcli session)r1  rE  zCompleted main CLI coder.runplaceholder)rA   
from_codershow_announcementsr  (   r   r   argvr5   r;   r   r>   r?   rg   rS   r   r   r@   r   parse_known_argsAttributeErrorallr2   r   r*   r&   r   r   env_filer   
parse_argsshell_completionsprogshtabcompleter  analytics_disabler   r>  httpxr}   environr   _load_litellmClient_lazy_moduleclient_sessionAsyncClientaclient_sessionr   model_info_managerset_verify_ssltimeoutrequest_timeout	dark_moder   r   r   r   r   
light_moder  vimr   VIEMACSr  ruleUnicodeEncodeErrorrT   set_envr   r(   
ValueErrorrJ   rK   api_keyupperanthropic_api_keyopenai_api_keyr   openai_api_baseopenai_api_versionopenai_api_typeopenai_organization_idanalytics_loganalytics_posthog_host!analytics_posthog_project_api_keyrR  need_to_askr	   rU   asked_opt_indisable	save_dataenableeventr   rv   r   r   r   read
expanduseris_dirextendrglobr   rF   r   just_check_updater   install_main_branchr   upgrader    check_updater^   	gitignorerI   r   rj   r   is_first_run_of_new_versioncheck_and_load_importsr   model_settings_filer   r   list_modelsprint_matching_modelsaliasMODEL_ALIASESr   modelr)   getr   r   models_and_keysModelr"  r#  r$  remove_reasoningr%  check_model_accepts_settingsaccepts_settingsset_reasoning_effortr&  set_thinking_tokensrP   
copy_pasterE  jsondumpsinfosortedr   r   getattrr   r   show_model_warningssanity_check_modelsmodel_warningsKeyboardInterruptr   aiderignorecommit_message_modelsr2  r3  r4  r5  r6  r7  r8  r9  r9   skip_sanity_check_repor   r   r   r;  r<  r=  r@  r   max_chat_history_tokensrT  rS  	streamingrJ  rI  get_repo_map_tokensr   rC  r   createrG  rH  r   rL  rM  rN  rO  map_multiplier_no_filescache_keepalive_pingsrW  rX  rY  rZ  r\  r]  r   edit_formatswatch_filesr!   rR   file_watcherr   rA   rd  show_promptscur_messagesr   format_messagesall_messagesr
   show_messageslintrP  cmd_linttestcmd_testrb  r   commit
cmd_commitshow_repo_mapget_repo_mapapplyrh   partial_response_contentapply_updatesapply_clipboard_editsmessageshow_release_notesrelease_notes
webbrowserr'   loadcmd_loadadd_to_input_historyr   message_fileIOErrorok_to_warm_cachehasattrupdatekwargs)Fre  r   r   force_git_rootr  rB   
conf_fnamedefault_config_filesgit_confr?  unknownr   r&   loaded_dotenvsrR  rp  r  rA   rL   env_settingrP   valueapi_settingproviderr0  env_varr  r   	all_filesrC   rF  r   r~   goodrD   right_repo_rootupdate_availablesuccessshowcmd_lineis_first_run	alias_defpartsr  r  selected_model_namer1  settings_to_checksettingattrvalr   problemr:   r:  rP  rQ  rI  coderignoresr  messagesrepo_maprp   message_from_fileswitchr  r   rq   r  sF    ``                                                                @@@r1   r   r     sT       |x|
{	 "!>>'((J!3!3!5!5 66     2>>J./// ''111	j 8999C)= > >??,h77F//55gg   ````*_````` 	)*>?? qqqqq	 | *:;;;( 	* 	*D#'::#4#4#6#6>ZZBF((((())))  """,h77F++D11MD' 'xNNN T""D enV4+ABBBCCC
{ ;$777	9:::? 8#%
< .3ll%l.H.H+/4/@/@/@/N/N,!00777| .!%~ $ ) )"+&/## $ ' %"+&,## /%)XD;>>;3DL
 
 
 
 
 
 
 
: 
		BX
				 X X Xy 	IVE]]
VWWWWWWWW	X | < 	 	K)//Q77e+0;;==
4::<<((   H;HHIIIEFFFqqq | 	< 	 	K + 1 1#q 9 9#%^^--3355???&)iikk
7##   H;HHIII?@@@qqq
  A*.*@
&' ;'+':
#$ !r*** =(,(<
$% C
Z	
 	
 	
 ,0+B
'( =
`aaa(,(<
$%" H
_	
 	
 	
 -1,G
()" 20 $ F	  I ~U""  00 	NN"   NN=T^==>>>..P  G &*I" L!!d!333JKKK!!!NN 	OOJx  &r** 	OOF+DOEEEF&&&4':;;;| .# 	. 	.ENN,U,,----
dio2.I::	:::Fio2 / /Bxx""$$,,..;;== 	/###S#SDJJsOO#S#S#SSSSS##CII....
9~~ 	 	EE{{!!## LLLMMM 	NNb   OOF+DOEEE1I
9~~	!$$&& 	x Yq\ 2 2 : : < <==	1VVVWWW/HIIIq
 x Y Y3?,R69MM 	YOOF+HOIIIeV_<XXXX 0(dlSSS'=>>>(/qqa/ #*2..'>???"qq"| #!"%%':;;;"qq" 0b$,////x *Xr**> 	*Hb)))| vt,,
txx!!H#D(33HNN8dN+++.r4<HHHL2|T\BBBBHd6DLQQQQHd&>DLYYYY $R)9:::777q z 
@ 		@ 		@IOOC++E5zzQByBBCCCCDDD/KLLLqq LE527++--F //.tRCC  q$DJ z]++ "BJNNCW4X4X "
DJ   	
 	
 	

 ""i00 	 z~~233 8    `   ^      q MM\dj\\\   LL-/VWWWOO]     1
?&2  J ".
a	
 	
 	

 (0 	C'	C,>*B],],]++D,ABBB'0 	A'	A,=A\,\,\**4+?@@@ ( )3EFF(2CDD

 ) 	 	Gu~)/ *6?**EEEa
aaGFOaaa    7SY?        
  H4+3!%EEE%.1G%GJ"| 2
()))
tz*/!<<<===
()))6-006F6FGGG 	2 	2D*di00C*S+++CNNdi003001111r22I'DEEEq ,R<< 		OOO
OCCCNNRSSST02YZZZ    $   /YZZZqq Dx 	 !7799!%!6$($<040T373Z"0!."&"8)-)F  DD ! 	 	 	D	 &  r** 	OOF+KOLLL1 #D/ #..0011	)4444	"""
*2&?{"2  H 		
+$J
(J J
  #d.&88" ; 	OOa*/aaa   3355

_
 OOND1B,C,CODDD, "
 "
 "
!z"
(("
 r"
 	"

 6"
 .-"
 "
 **"
 ,,"
 LL"
 "z"
 LL"
 ;;"
 HH"
 "&!:!:"
  nn!"
" nn#"
$  i%"
& ]]'"
( X)"
* "z+"
,  i-"
. ((/"
0 ,,1"
2 "993"
4 %)$>$>5"
6 $(#>#>7"
8 ,,9"
: !00;"
< ((="
> #oo?"
@ #'"<"<A"
B !% 8 8C"
F    
c#hh
T&(PQQQ'<===qqqqq   
c#hh'IJJJqqqqq
  '?@@@G ;s4>>L899::: )t'((( *"L$($5?TXZZ4
 
 
 * 9)***4<8888	 fh///
 	
 ((**7799H%%%'7888y /v...y &} 	MM3444OOF+EOFFF1...> 	&IIbn%%%{ (< 	(NN>????N%%'''y DI  'CDDD %%'' 	%NN8$$$'8999z ,,tz**?OOF+IOJJJF)0& 	'8999!  %8$&&
E1CEEFFF
*++++		 	(\	(

? 	 	
 	
 	
  7DHJJ&&((DNN,B,B,D,DDD
	
 	
 	

 	748::77888
5855666{ ^t) ^
\]]]y %$)$$$| 
---
	II4<I0000 	 	 	D	'<=== 	 "T-> ? ?NNII#4I5555  	 	 	MMHT5FHHIIIOOF+CODDD11 	 	 	MM<<<===OOF+BOCCC11111	
 	'ABBBy 777OOMjjF\O]]]+	+%)$*D%E%EE"IIKKKOOF+IOJJJF 	+ 	+ 	+%*E" v}-- 4&2D2P!'!3RE222FMM&-(((#v--/0L**6**E}  !566eCC((***	++s4  A2 2
A?>A?D$ $
E%.*E E  E%1P 
Q)P>>QAR$$7S S 4A#U7VVD44AE) E)"AFFAFFAAG9 G9AHHAHN	C&AQ0 Q0AT+Q;AASSAT+S'9AT&T&AT+iAi) i)Ai7i6Ai7jAAk  k ?Am&l"
Am&l,/Am!m!Am&oAAp pAr=pB Ar8r8Ar=c                    t          j                    dz  dz  }t          t          j        f}dt          v rdS |rB|                     dt           dt          j                    |                     d|            	 |                                rTt          |d          5 }t          j	        |          }d	d	d	           n# 1 swxY w Y   |r|                     d
           ni }|r|                     d           t          |          |v}|rmd|t          |          <   |j                            dd           t          |d          5 }t          j        ||d           d	d	d	           n# 1 swxY w Y   |S # t          $ rN}|                     d|            |r)|                     dt!          j                                Y d	}~dS d	}~ww xY w)zFCheck if this is the first run of a new version/executable combinationr`   zinstalls.jsonz.devFzChecking imports for version z and executable zInstalls file: r%   NzInstalls file exists and loadedz5Installs file does not exist, creating new dictionaryT)parentsrz   r{   r*  r+  zError checking version: Full exception details: )r   rS   r   r   
executablerK   r&   r'   r  r  r@   parentmkdirr#   r+   rT   	traceback
format_exc)rA   r   installs_filer0  r/   installsr  rq   s           r1   r  r    s   IKK(*_<M
'C u :
YKYYYY	
 	
 	
 	888999!! 	XmS)) (Q9Q<<( ( ( ( ( ( ( ( ( ( ( ( ( ( ( B@AAAH XVWWW3xxx/ 	1!%HSXX &&td&CCCmS)) 1Q	(Aa00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1    
6166777 	PNNNi6J6L6LNNOOOttttt	sb   =$F  !C6F  CF  	C
BF  E3'F  3E77F  :E7;F   
G
AGGc                    	 |r|r|                      d           	 t          d           n# t          $ ru}|                     t	          |                     |                      d           |                     t          j        d           t          j	        d           Y d }~nd }~ww xY w|r|                      d           d S d S |r|                      d           t          j        t          	          }d
|_        |                                 d S # t          $ rT}|                     d|            |r/|                      dt          j                                Y d }~d S Y d }~d S d }~ww xY w)NzHFirst run for this version and executable, loading imports synchronouslyF)swallowz?Error loading required imports. Did you install aider properly?r   r"   z(Imports loaded and installs file updatedz3Not first run, loading imports in background thread)r   TzError in loading imports: r  )rK   load_slow_importsr+   rJ   r@   r   r	   install_properlyr   r  	threadingThreaddaemonstartrT   r  r  )rA   r  r   rL   threadrq   s         r1   r  r    s   P 	 ^  !%00000   c#hh'''`aaaT24[\\\	  KIJJJJJK K  VTUUU%->???F FMLLNNNNN P P P
8Q88999 	PNNNi6J6L6LNNOOOOOOOOO	P 	P 	P 	P 	P 	PPsE   D - D 
B,A+B'"D 'B,,D 
AD 
E6"AE11E6c                 `    	 dd l }dd l}dd l}dd l}d S # t          $ r}| s|Y d }~d S d }~ww xY w)Nr   )rp  r   networkxnumpyr+   )r  rp  r   r  r  rq   s         r1   r  r    sy        	G	 	 	 	 	 	s    
-(-__main__)T)F)r   )NNNNF)Wr  r}   r   r   r  r  r  dataclassesr   pathlibr   r5   ImportErrorr   rm  dotenvr   prompt_toolkit.enumsr   r   r   r   r	   r
   aider.analyticsr   
aider.argsr   aider.codersr   aider.coders.base_coderr   aider.commandsr   r   aider.copypaster   aider.deprecatedr   aider.format_settingsr   r   aider.historyr   aider.ior   	aider.llmr   aider.modelsr   aider.onboardingr   r   
aider.repor   r   aider.reportr   aider.versioncheckr   r   r    aider.watchr!   r#   r2   r;   rF   rM   r^   rI   rv   r   r   r   r   r   r   r   r   r   r  r  r  __name__statusr  r  rw   r1   <module>r4     s    				 				 



                        JJJJ   
CCC            , , , , , , 2 2 2 2 2 2 2 2 2 2 2 2 % % % % % % ! ! ! ! ! !       5 5 5 5 5 5 0 0 0 0 0 0 0 0 , , , , , , 9 9 9 9 9 9 G G G G G G G G % % % % % %                   & & & & & & I I I I I I I I - - - - - - - - 3 3 3 3 3 3 W W W W W W W W W W # # # # # #        "    &
 
 
3! 3! 3!l2+ 2+ 2+ 2+j  6 6 6 # # #Z  6  <   4   :   ,$ $ $NY+ Y+ Y+ Y+x( ( ( (VP P P P<     zTVVFCHV s   / 99