aider-ce 0.88.20__py3-none-any.whl → 0.88.38__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aider/__init__.py +1 -1
- aider/_version.py +2 -2
- aider/args.py +63 -43
- aider/coders/agent_coder.py +331 -79
- aider/coders/agent_prompts.py +3 -15
- aider/coders/architect_coder.py +21 -5
- aider/coders/base_coder.py +661 -413
- aider/coders/base_prompts.py +6 -3
- aider/coders/chat_chunks.py +39 -17
- aider/commands.py +79 -15
- aider/diffs.py +10 -9
- aider/exceptions.py +1 -1
- aider/helpers/coroutines.py +8 -0
- aider/helpers/requests.py +45 -0
- aider/history.py +5 -0
- aider/io.py +179 -25
- aider/main.py +86 -35
- aider/models.py +16 -8
- aider/queries/tree-sitter-language-pack/c-tags.scm +3 -0
- aider/queries/tree-sitter-language-pack/clojure-tags.scm +5 -0
- aider/queries/tree-sitter-language-pack/commonlisp-tags.scm +5 -0
- aider/queries/tree-sitter-language-pack/cpp-tags.scm +3 -0
- aider/queries/tree-sitter-language-pack/csharp-tags.scm +6 -0
- aider/queries/tree-sitter-language-pack/dart-tags.scm +5 -0
- aider/queries/tree-sitter-language-pack/elixir-tags.scm +5 -0
- aider/queries/tree-sitter-language-pack/elm-tags.scm +3 -0
- aider/queries/tree-sitter-language-pack/go-tags.scm +7 -0
- aider/queries/tree-sitter-language-pack/java-tags.scm +6 -0
- aider/queries/tree-sitter-language-pack/javascript-tags.scm +8 -0
- aider/queries/tree-sitter-language-pack/lua-tags.scm +5 -0
- aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +3 -0
- aider/queries/tree-sitter-language-pack/python-tags.scm +10 -0
- aider/queries/tree-sitter-language-pack/r-tags.scm +6 -0
- aider/queries/tree-sitter-language-pack/ruby-tags.scm +5 -0
- aider/queries/tree-sitter-language-pack/rust-tags.scm +3 -0
- aider/queries/tree-sitter-language-pack/solidity-tags.scm +1 -1
- aider/queries/tree-sitter-language-pack/swift-tags.scm +4 -1
- aider/queries/tree-sitter-languages/c-tags.scm +3 -0
- aider/queries/tree-sitter-languages/c_sharp-tags.scm +6 -0
- aider/queries/tree-sitter-languages/cpp-tags.scm +3 -0
- aider/queries/tree-sitter-languages/dart-tags.scm +2 -1
- aider/queries/tree-sitter-languages/elixir-tags.scm +5 -0
- aider/queries/tree-sitter-languages/elm-tags.scm +3 -0
- aider/queries/tree-sitter-languages/fortran-tags.scm +3 -0
- aider/queries/tree-sitter-languages/go-tags.scm +6 -0
- aider/queries/tree-sitter-languages/haskell-tags.scm +2 -0
- aider/queries/tree-sitter-languages/java-tags.scm +6 -0
- aider/queries/tree-sitter-languages/javascript-tags.scm +8 -0
- aider/queries/tree-sitter-languages/julia-tags.scm +2 -2
- aider/queries/tree-sitter-languages/kotlin-tags.scm +3 -0
- aider/queries/tree-sitter-languages/ocaml_interface-tags.scm +6 -0
- aider/queries/tree-sitter-languages/php-tags.scm +6 -0
- aider/queries/tree-sitter-languages/python-tags.scm +10 -0
- aider/queries/tree-sitter-languages/ruby-tags.scm +5 -0
- aider/queries/tree-sitter-languages/rust-tags.scm +3 -0
- aider/queries/tree-sitter-languages/scala-tags.scm +2 -3
- aider/queries/tree-sitter-languages/typescript-tags.scm +3 -0
- aider/queries/tree-sitter-languages/zig-tags.scm +20 -3
- aider/repomap.py +71 -11
- aider/resources/model-metadata.json +27335 -635
- aider/resources/model-settings.yml +190 -0
- aider/scrape.py +2 -0
- aider/tools/__init__.py +2 -0
- aider/tools/command.py +84 -94
- aider/tools/command_interactive.py +95 -110
- aider/tools/delete_block.py +131 -159
- aider/tools/delete_line.py +97 -132
- aider/tools/delete_lines.py +120 -160
- aider/tools/extract_lines.py +288 -312
- aider/tools/finished.py +30 -43
- aider/tools/git_branch.py +107 -109
- aider/tools/git_diff.py +44 -56
- aider/tools/git_log.py +39 -53
- aider/tools/git_remote.py +37 -51
- aider/tools/git_show.py +33 -47
- aider/tools/git_status.py +30 -44
- aider/tools/grep.py +214 -242
- aider/tools/indent_lines.py +175 -201
- aider/tools/insert_block.py +220 -253
- aider/tools/list_changes.py +65 -80
- aider/tools/ls.py +64 -80
- aider/tools/make_editable.py +57 -73
- aider/tools/make_readonly.py +50 -66
- aider/tools/remove.py +64 -80
- aider/tools/replace_all.py +96 -109
- aider/tools/replace_line.py +118 -156
- aider/tools/replace_lines.py +160 -197
- aider/tools/replace_text.py +159 -160
- aider/tools/show_numbered_context.py +115 -141
- aider/tools/thinking.py +52 -0
- aider/tools/undo_change.py +78 -91
- aider/tools/update_todo_list.py +130 -138
- aider/tools/utils/base_tool.py +64 -0
- aider/tools/utils/output.py +118 -0
- aider/tools/view.py +38 -54
- aider/tools/view_files_matching.py +131 -134
- aider/tools/view_files_with_symbol.py +108 -120
- aider/urls.py +1 -1
- aider/versioncheck.py +4 -3
- aider/website/docs/config/adv-model-settings.md +237 -0
- aider/website/docs/config/agent-mode.md +36 -3
- aider/website/docs/config/model-aliases.md +2 -1
- aider/website/docs/faq.md +6 -11
- aider/website/docs/languages.md +2 -2
- aider/website/docs/more/infinite-output.md +27 -0
- {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/METADATA +112 -70
- {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/RECORD +112 -107
- aider_ce-0.88.38.dist-info/entry_points.txt +6 -0
- aider_ce-0.88.20.dist-info/entry_points.txt +0 -2
- /aider/tools/{tool_utils.py → utils/helpers.py} +0 -0
- {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/WHEEL +0 -0
- {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/licenses/LICENSE.txt +0 -0
- {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/top_level.txt +0 -0
|
@@ -1,129 +1,117 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
from aider.tools.utils.base_tool import BaseTool
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Tool(BaseTool):
|
|
5
|
+
NORM_NAME = "viewfileswithsymbol"
|
|
6
|
+
SCHEMA = {
|
|
7
|
+
"type": "function",
|
|
8
|
+
"function": {
|
|
9
|
+
"name": "ViewFilesWithSymbol",
|
|
10
|
+
"description": "View files that contain a specific symbol (e.g., class, function).",
|
|
11
|
+
"parameters": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"properties": {
|
|
14
|
+
"symbol": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "The symbol to search for.",
|
|
17
|
+
},
|
|
12
18
|
},
|
|
19
|
+
"required": ["symbol"],
|
|
13
20
|
},
|
|
14
|
-
"required": ["symbol"],
|
|
15
21
|
},
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
files_in_context = list(coder.abs_fnames) + list(coder.abs_read_only_fnames)
|
|
37
|
-
found_in_context = []
|
|
38
|
-
for abs_fname in files_in_context:
|
|
39
|
-
rel_fname = coder.get_rel_fname(abs_fname)
|
|
40
|
-
try:
|
|
41
|
-
# Use get_tags for consistency with RepoMap usage elsewhere for now.
|
|
42
|
-
tags = coder.repo_map.get_tags(abs_fname, rel_fname)
|
|
43
|
-
for tag in tags:
|
|
44
|
-
if tag.name == symbol:
|
|
45
|
-
found_in_context.append(rel_fname)
|
|
46
|
-
break # Found in this file, move to next
|
|
47
|
-
except Exception as e:
|
|
48
|
-
coder.io.tool_warning(
|
|
49
|
-
f"Could not get symbols for {rel_fname} while checking context: {e}"
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
if found_in_context:
|
|
53
|
-
# Symbol found in already loaded files. Report this and stop.
|
|
54
|
-
file_list = ", ".join(sorted(list(set(found_in_context))))
|
|
55
|
-
coder.io.tool_output(f"Symbol '{symbol}' found in already loaded file(s): {file_list}")
|
|
56
|
-
return f"Symbol '{symbol}' found in already loaded file(s): {file_list}"
|
|
57
|
-
|
|
58
|
-
# 2. If not found in context, search the repository using RepoMap
|
|
59
|
-
coder.io.tool_output(f"🔎 Searching for symbol '{symbol}' in repository...")
|
|
60
|
-
try:
|
|
61
|
-
found_files = set()
|
|
62
|
-
current_context_files = coder.abs_fnames | coder.abs_read_only_fnames
|
|
63
|
-
files_to_search = set(coder.get_all_abs_files()) - current_context_files
|
|
64
|
-
|
|
65
|
-
rel_fname_to_abs = {}
|
|
66
|
-
all_tags = []
|
|
67
|
-
|
|
68
|
-
for fname in files_to_search:
|
|
69
|
-
rel_fname = coder.get_rel_fname(fname)
|
|
70
|
-
rel_fname_to_abs[rel_fname] = fname
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def execute(cls, coder, symbol):
|
|
26
|
+
"""
|
|
27
|
+
Find files containing a symbol using RepoMap and return them as text.
|
|
28
|
+
Checks files already in context first.
|
|
29
|
+
"""
|
|
30
|
+
if not coder.repo_map:
|
|
31
|
+
coder.io.tool_output("⚠️ Repo map not available, cannot use ViewFilesWithSymbol tool.")
|
|
32
|
+
return "Repo map not available"
|
|
33
|
+
|
|
34
|
+
if not symbol:
|
|
35
|
+
return "Error: Missing 'symbol' parameter for ViewFilesWithSymbol"
|
|
36
|
+
|
|
37
|
+
# 1. Check files already in context
|
|
38
|
+
files_in_context = list(coder.abs_fnames) + list(coder.abs_read_only_fnames)
|
|
39
|
+
found_in_context = []
|
|
40
|
+
for abs_fname in files_in_context:
|
|
41
|
+
rel_fname = coder.get_rel_fname(abs_fname)
|
|
71
42
|
try:
|
|
72
|
-
|
|
73
|
-
|
|
43
|
+
# Use get_tags for consistency with RepoMap usage elsewhere for now.
|
|
44
|
+
tags = coder.repo_map.get_tags(abs_fname, rel_fname)
|
|
45
|
+
for tag in tags:
|
|
46
|
+
if tag.name == symbol:
|
|
47
|
+
found_in_context.append(rel_fname)
|
|
48
|
+
break # Found in this file, move to next
|
|
74
49
|
except Exception as e:
|
|
75
|
-
coder.io.tool_warning(
|
|
76
|
-
|
|
77
|
-
# Find matching symbols
|
|
78
|
-
for tag in all_tags:
|
|
79
|
-
if tag.name == symbol:
|
|
80
|
-
# Use absolute path directly if available, otherwise resolve from relative path
|
|
81
|
-
abs_fname = rel_fname_to_abs.get(tag.rel_fname) or coder.abs_root_path(tag.fname)
|
|
82
|
-
if abs_fname in files_to_search: # Ensure we only add files we intended to search
|
|
83
|
-
found_files.add(coder.get_rel_fname(abs_fname))
|
|
84
|
-
|
|
85
|
-
# Return formatted text instead of adding to context
|
|
86
|
-
if found_files:
|
|
87
|
-
found_files_list = sorted(list(found_files))
|
|
88
|
-
if len(found_files) > 10:
|
|
89
|
-
result = (
|
|
90
|
-
f"Found symbol '{symbol}' in {len(found_files)} files:"
|
|
91
|
-
f" {', '.join(found_files_list[:10])} and {len(found_files) - 10} more"
|
|
92
|
-
)
|
|
93
|
-
coder.io.tool_output(f"🔎 Found '{symbol}' in {len(found_files)} files")
|
|
94
|
-
else:
|
|
95
|
-
result = (
|
|
96
|
-
f"Found symbol '{symbol}' in {len(found_files)} files:"
|
|
97
|
-
f" {', '.join(found_files_list)}"
|
|
98
|
-
)
|
|
99
|
-
coder.io.tool_output(
|
|
100
|
-
f"🔎 Found '{symbol}' in files:"
|
|
101
|
-
f" {', '.join(found_files_list[:5])}{' and more' if len(found_files) > 5 else ''}"
|
|
50
|
+
coder.io.tool_warning(
|
|
51
|
+
f"Could not get symbols for {rel_fname} while checking context: {e}"
|
|
102
52
|
)
|
|
103
53
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
except Exception as e:
|
|
110
|
-
coder.io.tool_error(f"Error in ViewFilesWithSymbol: {str(e)}")
|
|
111
|
-
return f"Error: {str(e)}"
|
|
54
|
+
if found_in_context:
|
|
55
|
+
# Symbol found in already loaded files. Report this and stop.
|
|
56
|
+
file_list = ", ".join(sorted(list(set(found_in_context))))
|
|
57
|
+
coder.io.tool_output(f"Symbol '{symbol}' found in already loaded file(s): {file_list}")
|
|
58
|
+
return f"Symbol '{symbol}' found in already loaded file(s): {file_list}"
|
|
112
59
|
|
|
60
|
+
# 2. If not found in context, search the repository using RepoMap
|
|
61
|
+
coder.io.tool_output(f"🔎 Searching for symbol '{symbol}' in repository...")
|
|
62
|
+
try:
|
|
63
|
+
found_files = set()
|
|
64
|
+
current_context_files = coder.abs_fnames | coder.abs_read_only_fnames
|
|
65
|
+
files_to_search = set(coder.get_all_abs_files()) - current_context_files
|
|
66
|
+
|
|
67
|
+
rel_fname_to_abs = {}
|
|
68
|
+
all_tags = []
|
|
69
|
+
|
|
70
|
+
for fname in files_to_search:
|
|
71
|
+
rel_fname = coder.get_rel_fname(fname)
|
|
72
|
+
rel_fname_to_abs[rel_fname] = fname
|
|
73
|
+
try:
|
|
74
|
+
tags = coder.repo_map.get_tags(fname, rel_fname)
|
|
75
|
+
all_tags.extend(tags)
|
|
76
|
+
except Exception as e:
|
|
77
|
+
coder.io.tool_warning(f"Could not get tags for {rel_fname}: {e}")
|
|
78
|
+
|
|
79
|
+
# Find matching symbols
|
|
80
|
+
for tag in all_tags:
|
|
81
|
+
if tag.name == symbol:
|
|
82
|
+
# Use absolute path directly if available, otherwise resolve from relative path
|
|
83
|
+
abs_fname = rel_fname_to_abs.get(tag.rel_fname) or coder.abs_root_path(
|
|
84
|
+
tag.fname
|
|
85
|
+
)
|
|
86
|
+
if (
|
|
87
|
+
abs_fname in files_to_search
|
|
88
|
+
): # Ensure we only add files we intended to search
|
|
89
|
+
found_files.add(coder.get_rel_fname(abs_fname))
|
|
90
|
+
|
|
91
|
+
# Return formatted text instead of adding to context
|
|
92
|
+
if found_files:
|
|
93
|
+
found_files_list = sorted(list(found_files))
|
|
94
|
+
if len(found_files) > 10:
|
|
95
|
+
result = (
|
|
96
|
+
f"Found symbol '{symbol}' in {len(found_files)} files:"
|
|
97
|
+
f" {', '.join(found_files_list[:10])} and {len(found_files) - 10} more"
|
|
98
|
+
)
|
|
99
|
+
coder.io.tool_output(f"🔎 Found '{symbol}' in {len(found_files)} files")
|
|
100
|
+
else:
|
|
101
|
+
result = (
|
|
102
|
+
f"Found symbol '{symbol}' in {len(found_files)} files:"
|
|
103
|
+
f" {', '.join(found_files_list)}"
|
|
104
|
+
)
|
|
105
|
+
coder.io.tool_output(
|
|
106
|
+
f"🔎 Found '{symbol}' in files:"
|
|
107
|
+
f" {', '.join(found_files_list[:5])}{' and more' if len(found_files) > 5 else ''}"
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
return result
|
|
111
|
+
else:
|
|
112
|
+
coder.io.tool_output(f"⚠️ Symbol '{symbol}' not found in searchable files")
|
|
113
|
+
return f"Symbol '{symbol}' not found in searchable files"
|
|
113
114
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
Args:
|
|
119
|
-
coder: The Coder instance
|
|
120
|
-
params: Dictionary of parameters
|
|
121
|
-
|
|
122
|
-
Returns:
|
|
123
|
-
str: Result message
|
|
124
|
-
"""
|
|
125
|
-
symbol = params.get("symbol")
|
|
126
|
-
if symbol is not None:
|
|
127
|
-
return _execute_view_files_with_symbol(coder, symbol)
|
|
128
|
-
else:
|
|
129
|
-
return "Error: Missing 'symbol' parameter for ViewFilesWithSymbol"
|
|
115
|
+
except Exception as e:
|
|
116
|
+
coder.io.tool_error(f"Error in ViewFilesWithSymbol: {str(e)}")
|
|
117
|
+
return f"Error: {str(e)}"
|
aider/urls.py
CHANGED
|
@@ -12,6 +12,6 @@ github_issues = "https://github.com/dwash96/aider-ce/issues/new"
|
|
|
12
12
|
git_index_version = "https://github.com/Aider-AI/aider/issues/211"
|
|
13
13
|
install_properly = "https://aider.chat/docs/troubleshooting/imports.html"
|
|
14
14
|
analytics = "https://aider.chat/docs/more/analytics.html"
|
|
15
|
-
release_notes = "https://
|
|
15
|
+
release_notes = "https://github.com/dwash96/aider-ce/releases/latest"
|
|
16
16
|
edit_formats = "https://aider.chat/docs/more/edit-formats.html"
|
|
17
17
|
models_and_keys = "https://aider.chat/docs/troubleshooting/models-and-keys.html"
|
aider/versioncheck.py
CHANGED
|
@@ -55,7 +55,7 @@ async def install_upgrade(io, latest_version=None):
|
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
if success:
|
|
58
|
-
io.tool_output("Re-run aider to use new version.")
|
|
58
|
+
io.tool_output("Re-run aider-ce to use new version.")
|
|
59
59
|
sys.exit()
|
|
60
60
|
|
|
61
61
|
return
|
|
@@ -84,8 +84,9 @@ async def check_version(io, just_check=False, verbose=False):
|
|
|
84
84
|
io.tool_output(f"Current version: {current_version}")
|
|
85
85
|
io.tool_output(f"Latest version: {latest_version}")
|
|
86
86
|
|
|
87
|
-
is_update_available =
|
|
88
|
-
|
|
87
|
+
is_update_available = (
|
|
88
|
+
packaging.version.parse(latest_version).release
|
|
89
|
+
> packaging.version.parse(current_version).release
|
|
89
90
|
)
|
|
90
91
|
except Exception as err:
|
|
91
92
|
io.tool_error(f"Error checking pypi for new version: {err}")
|
|
@@ -378,6 +378,51 @@ cog.out("```\n")
|
|
|
378
378
|
accepts_settings:
|
|
379
379
|
- reasoning_effort
|
|
380
380
|
|
|
381
|
+
- name: azure/gpt-5-pro
|
|
382
|
+
edit_format: diff
|
|
383
|
+
weak_model_name: azure/gpt-5-mini
|
|
384
|
+
use_repo_map: true
|
|
385
|
+
examples_as_sys_msg: true
|
|
386
|
+
use_temperature: false
|
|
387
|
+
streaming: false
|
|
388
|
+
editor_model_name: azure/gpt-5
|
|
389
|
+
editor_edit_format: editor-diff
|
|
390
|
+
system_prompt_prefix: 'Formatting re-enabled. '
|
|
391
|
+
accepts_settings:
|
|
392
|
+
- reasoning_effort
|
|
393
|
+
|
|
394
|
+
- name: azure/gpt-5.1
|
|
395
|
+
edit_format: diff
|
|
396
|
+
weak_model_name: azure/gpt-5-nano
|
|
397
|
+
use_repo_map: true
|
|
398
|
+
use_temperature: false
|
|
399
|
+
accepts_settings:
|
|
400
|
+
- reasoning_effort
|
|
401
|
+
|
|
402
|
+
- name: azure/gpt-5.1-2025-11-13
|
|
403
|
+
edit_format: diff
|
|
404
|
+
weak_model_name: azure/gpt-5-nano-2025-08-07
|
|
405
|
+
use_repo_map: true
|
|
406
|
+
use_temperature: false
|
|
407
|
+
accepts_settings:
|
|
408
|
+
- reasoning_effort
|
|
409
|
+
|
|
410
|
+
- name: azure/gpt-5.1-chat
|
|
411
|
+
edit_format: diff
|
|
412
|
+
weak_model_name: azure/gpt-5-nano
|
|
413
|
+
use_repo_map: true
|
|
414
|
+
use_temperature: false
|
|
415
|
+
accepts_settings:
|
|
416
|
+
- reasoning_effort
|
|
417
|
+
|
|
418
|
+
- name: azure/gpt-5.1-chat-latest
|
|
419
|
+
edit_format: diff
|
|
420
|
+
weak_model_name: azure/gpt-5-nano
|
|
421
|
+
use_repo_map: true
|
|
422
|
+
use_temperature: false
|
|
423
|
+
accepts_settings:
|
|
424
|
+
- reasoning_effort
|
|
425
|
+
|
|
381
426
|
- name: azure/o1
|
|
382
427
|
edit_format: diff
|
|
383
428
|
weak_model_name: azure/gpt-4o-mini
|
|
@@ -553,6 +598,20 @@ cog.out("```\n")
|
|
|
553
598
|
accepts_settings:
|
|
554
599
|
- thinking_tokens
|
|
555
600
|
|
|
601
|
+
- name: bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
602
|
+
edit_format: diff
|
|
603
|
+
weak_model_name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0
|
|
604
|
+
use_repo_map: true
|
|
605
|
+
extra_params:
|
|
606
|
+
extra_headers:
|
|
607
|
+
anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19
|
|
608
|
+
max_tokens: 64000
|
|
609
|
+
cache_control: true
|
|
610
|
+
editor_model_name: bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
611
|
+
editor_edit_format: editor-diff
|
|
612
|
+
accepts_settings:
|
|
613
|
+
- thinking_tokens
|
|
614
|
+
|
|
556
615
|
- name: bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0
|
|
557
616
|
edit_format: diff
|
|
558
617
|
weak_model_name: bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0
|
|
@@ -1027,6 +1086,15 @@ cog.out("```\n")
|
|
|
1027
1086
|
accepts_settings:
|
|
1028
1087
|
- thinking_tokens
|
|
1029
1088
|
|
|
1089
|
+
- name: gemini/gemini-3-pro-preview
|
|
1090
|
+
edit_format: diff-fenced
|
|
1091
|
+
weak_model_name: gemini/gemini-2.5-flash
|
|
1092
|
+
use_repo_map: true
|
|
1093
|
+
overeager: true
|
|
1094
|
+
use_temperature: false
|
|
1095
|
+
accepts_settings:
|
|
1096
|
+
- thinking_tokens
|
|
1097
|
+
|
|
1030
1098
|
- name: gemini/gemini-exp-1206
|
|
1031
1099
|
edit_format: diff
|
|
1032
1100
|
use_repo_map: true
|
|
@@ -1193,6 +1261,14 @@ cog.out("```\n")
|
|
|
1193
1261
|
accepts_settings:
|
|
1194
1262
|
- reasoning_effort
|
|
1195
1263
|
|
|
1264
|
+
- name: gpt-5-codex
|
|
1265
|
+
edit_format: diff
|
|
1266
|
+
weak_model_name: gpt-5-nano
|
|
1267
|
+
use_repo_map: true
|
|
1268
|
+
use_temperature: false
|
|
1269
|
+
accepts_settings:
|
|
1270
|
+
- reasoning_effort
|
|
1271
|
+
|
|
1196
1272
|
- name: gpt-5-mini
|
|
1197
1273
|
edit_format: diff
|
|
1198
1274
|
weak_model_name: gpt-5-nano
|
|
@@ -1225,6 +1301,60 @@ cog.out("```\n")
|
|
|
1225
1301
|
accepts_settings:
|
|
1226
1302
|
- reasoning_effort
|
|
1227
1303
|
|
|
1304
|
+
- name: gpt-5-pro
|
|
1305
|
+
edit_format: diff
|
|
1306
|
+
weak_model_name: gpt-5-mini
|
|
1307
|
+
use_repo_map: true
|
|
1308
|
+
examples_as_sys_msg: true
|
|
1309
|
+
use_temperature: false
|
|
1310
|
+
streaming: false
|
|
1311
|
+
editor_model_name: gpt-5
|
|
1312
|
+
editor_edit_format: editor-diff
|
|
1313
|
+
system_prompt_prefix: 'Formatting re-enabled. '
|
|
1314
|
+
accepts_settings:
|
|
1315
|
+
- reasoning_effort
|
|
1316
|
+
|
|
1317
|
+
- name: gpt-5.1
|
|
1318
|
+
edit_format: diff
|
|
1319
|
+
weak_model_name: gpt-5-nano
|
|
1320
|
+
use_repo_map: true
|
|
1321
|
+
overeager: true
|
|
1322
|
+
use_temperature: false
|
|
1323
|
+
accepts_settings:
|
|
1324
|
+
- reasoning_effort
|
|
1325
|
+
|
|
1326
|
+
- name: gpt-5.1-2025-11-13
|
|
1327
|
+
edit_format: diff
|
|
1328
|
+
weak_model_name: gpt-5-nano-2025-08-07
|
|
1329
|
+
use_repo_map: true
|
|
1330
|
+
use_temperature: false
|
|
1331
|
+
accepts_settings:
|
|
1332
|
+
- reasoning_effort
|
|
1333
|
+
|
|
1334
|
+
- name: gpt-5.1-chat
|
|
1335
|
+
edit_format: diff
|
|
1336
|
+
weak_model_name: gpt-5-nano
|
|
1337
|
+
use_repo_map: true
|
|
1338
|
+
use_temperature: false
|
|
1339
|
+
accepts_settings:
|
|
1340
|
+
- reasoning_effort
|
|
1341
|
+
|
|
1342
|
+
- name: gpt-5.1-chat-latest
|
|
1343
|
+
edit_format: diff
|
|
1344
|
+
weak_model_name: gpt-5-nano
|
|
1345
|
+
use_repo_map: true
|
|
1346
|
+
use_temperature: false
|
|
1347
|
+
accepts_settings:
|
|
1348
|
+
- reasoning_effort
|
|
1349
|
+
|
|
1350
|
+
- name: gpt-5.1-codex
|
|
1351
|
+
edit_format: diff
|
|
1352
|
+
weak_model_name: gpt-5-nano
|
|
1353
|
+
use_repo_map: true
|
|
1354
|
+
use_temperature: false
|
|
1355
|
+
accepts_settings:
|
|
1356
|
+
- reasoning_effort
|
|
1357
|
+
|
|
1228
1358
|
- name: groq/llama3-70b-8192
|
|
1229
1359
|
edit_format: diff
|
|
1230
1360
|
weak_model_name: groq/llama3-8b-8192
|
|
@@ -1434,6 +1564,51 @@ cog.out("```\n")
|
|
|
1434
1564
|
accepts_settings:
|
|
1435
1565
|
- reasoning_effort
|
|
1436
1566
|
|
|
1567
|
+
- name: openai/gpt-5-pro
|
|
1568
|
+
edit_format: diff
|
|
1569
|
+
weak_model_name: openai/gpt-5-mini
|
|
1570
|
+
use_repo_map: true
|
|
1571
|
+
examples_as_sys_msg: true
|
|
1572
|
+
use_temperature: false
|
|
1573
|
+
streaming: false
|
|
1574
|
+
editor_model_name: openai/gpt-5
|
|
1575
|
+
editor_edit_format: editor-diff
|
|
1576
|
+
system_prompt_prefix: 'Formatting re-enabled. '
|
|
1577
|
+
accepts_settings:
|
|
1578
|
+
- reasoning_effort
|
|
1579
|
+
|
|
1580
|
+
- name: openai/gpt-5.1
|
|
1581
|
+
edit_format: diff
|
|
1582
|
+
weak_model_name: openai/gpt-5-nano
|
|
1583
|
+
use_repo_map: true
|
|
1584
|
+
use_temperature: false
|
|
1585
|
+
accepts_settings:
|
|
1586
|
+
- reasoning_effort
|
|
1587
|
+
|
|
1588
|
+
- name: openai/gpt-5.1-2025-11-13
|
|
1589
|
+
edit_format: diff
|
|
1590
|
+
weak_model_name: openai/gpt-5-nano-2025-08-07
|
|
1591
|
+
use_repo_map: true
|
|
1592
|
+
use_temperature: false
|
|
1593
|
+
accepts_settings:
|
|
1594
|
+
- reasoning_effort
|
|
1595
|
+
|
|
1596
|
+
- name: openai/gpt-5.1-chat
|
|
1597
|
+
edit_format: diff
|
|
1598
|
+
weak_model_name: openai/gpt-5-nano
|
|
1599
|
+
use_repo_map: true
|
|
1600
|
+
use_temperature: false
|
|
1601
|
+
accepts_settings:
|
|
1602
|
+
- reasoning_effort
|
|
1603
|
+
|
|
1604
|
+
- name: openai/gpt-5.1-chat-latest
|
|
1605
|
+
edit_format: diff
|
|
1606
|
+
weak_model_name: openai/gpt-5-nano
|
|
1607
|
+
use_repo_map: true
|
|
1608
|
+
use_temperature: false
|
|
1609
|
+
accepts_settings:
|
|
1610
|
+
- reasoning_effort
|
|
1611
|
+
|
|
1437
1612
|
- name: openai/o1
|
|
1438
1613
|
edit_format: diff
|
|
1439
1614
|
weak_model_name: openai/gpt-4o-mini
|
|
@@ -1758,6 +1933,14 @@ cog.out("```\n")
|
|
|
1758
1933
|
accepts_settings:
|
|
1759
1934
|
- thinking_tokens
|
|
1760
1935
|
|
|
1936
|
+
- name: openrouter/google/gemini-3-pro-preview
|
|
1937
|
+
edit_format: diff-fenced
|
|
1938
|
+
weak_model_name: openrouter/google/gemini-2.5-flash
|
|
1939
|
+
use_repo_map: true
|
|
1940
|
+
overeager: true
|
|
1941
|
+
accepts_settings:
|
|
1942
|
+
- thinking_tokens
|
|
1943
|
+
|
|
1761
1944
|
- name: openrouter/google/gemma-3-27b-it
|
|
1762
1945
|
use_system_prompt: false
|
|
1763
1946
|
|
|
@@ -1861,6 +2044,51 @@ cog.out("```\n")
|
|
|
1861
2044
|
accepts_settings:
|
|
1862
2045
|
- reasoning_effort
|
|
1863
2046
|
|
|
2047
|
+
- name: openrouter/openai/gpt-5-pro
|
|
2048
|
+
edit_format: diff
|
|
2049
|
+
weak_model_name: openrouter/openai/gpt-5-mini
|
|
2050
|
+
use_repo_map: true
|
|
2051
|
+
examples_as_sys_msg: true
|
|
2052
|
+
use_temperature: false
|
|
2053
|
+
streaming: false
|
|
2054
|
+
editor_model_name: openrouter/openai/gpt-5
|
|
2055
|
+
editor_edit_format: editor-diff
|
|
2056
|
+
system_prompt_prefix: 'Formatting re-enabled. '
|
|
2057
|
+
accepts_settings:
|
|
2058
|
+
- reasoning_effort
|
|
2059
|
+
|
|
2060
|
+
- name: openrouter/openai/gpt-5.1
|
|
2061
|
+
edit_format: diff
|
|
2062
|
+
weak_model_name: openrouter/openai/gpt-5-nano
|
|
2063
|
+
use_repo_map: true
|
|
2064
|
+
use_temperature: false
|
|
2065
|
+
accepts_settings:
|
|
2066
|
+
- reasoning_effort
|
|
2067
|
+
|
|
2068
|
+
- name: openrouter/openai/gpt-5.1-2025-11-13
|
|
2069
|
+
edit_format: diff
|
|
2070
|
+
weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07
|
|
2071
|
+
use_repo_map: true
|
|
2072
|
+
use_temperature: false
|
|
2073
|
+
accepts_settings:
|
|
2074
|
+
- reasoning_effort
|
|
2075
|
+
|
|
2076
|
+
- name: openrouter/openai/gpt-5.1-chat
|
|
2077
|
+
edit_format: diff
|
|
2078
|
+
weak_model_name: openrouter/openai/gpt-5-nano
|
|
2079
|
+
use_repo_map: true
|
|
2080
|
+
use_temperature: false
|
|
2081
|
+
accepts_settings:
|
|
2082
|
+
- reasoning_effort
|
|
2083
|
+
|
|
2084
|
+
- name: openrouter/openai/gpt-5.1-chat-latest
|
|
2085
|
+
edit_format: diff
|
|
2086
|
+
weak_model_name: openrouter/openai/gpt-5-nano
|
|
2087
|
+
use_repo_map: true
|
|
2088
|
+
use_temperature: false
|
|
2089
|
+
accepts_settings:
|
|
2090
|
+
- reasoning_effort
|
|
2091
|
+
|
|
1864
2092
|
- name: openrouter/openai/o1
|
|
1865
2093
|
edit_format: diff
|
|
1866
2094
|
weak_model_name: openrouter/openai/gpt-4o-mini
|
|
@@ -2232,6 +2460,15 @@ cog.out("```\n")
|
|
|
2232
2460
|
accepts_settings:
|
|
2233
2461
|
- thinking_tokens
|
|
2234
2462
|
|
|
2463
|
+
- name: vertex_ai/gemini-3-pro-preview
|
|
2464
|
+
edit_format: diff-fenced
|
|
2465
|
+
weak_model_name: vertex_ai/gemini-2.5-flash
|
|
2466
|
+
use_repo_map: true
|
|
2467
|
+
overeager: true
|
|
2468
|
+
editor_model_name: vertex_ai/gemini-2.5-flash
|
|
2469
|
+
accepts_settings:
|
|
2470
|
+
- thinking_tokens
|
|
2471
|
+
|
|
2235
2472
|
- name: xai/grok-3-beta
|
|
2236
2473
|
edit_format: diff
|
|
2237
2474
|
use_repo_map: true
|
|
@@ -154,6 +154,8 @@ Agent Mode can be configured using the `--agent-config` command line argument, w
|
|
|
154
154
|
- **`skip_cli_confirmations`**: YOLO mode, be brave and let the LLM cook, can also use the option `yolo` (default: False)
|
|
155
155
|
- **`tools_includelist`**: Array of tool names to allow (only these tools will be available)
|
|
156
156
|
- **`tools_excludelist`**: Array of tool names to exclude (these tools will be disabled)
|
|
157
|
+
- **`include_context_blocks`**: Array of context block names to include (overrides default set)
|
|
158
|
+
- **`exclude_context_blocks`**: Array of context block names to exclude from default set
|
|
157
159
|
|
|
158
160
|
#### Essential Tools
|
|
159
161
|
|
|
@@ -164,6 +166,29 @@ Certain tools are always available regardless of includelist/excludelist setting
|
|
|
164
166
|
- `view` - View files
|
|
165
167
|
- `finished` - Complete the task
|
|
166
168
|
|
|
169
|
+
#### Context Blocks
|
|
170
|
+
|
|
171
|
+
The following context blocks are available by default and can be customized using `include_context_blocks` and `exclude_context_blocks`:
|
|
172
|
+
|
|
173
|
+
- **`context_summary`**: Shows current context usage and token limits
|
|
174
|
+
- **`directory_structure`**: Displays the project's file structure
|
|
175
|
+
- **`git_status`**: Shows current git branch, status, and recent commits
|
|
176
|
+
- **`symbol_outline`**: Lists classes, functions, and methods in current context
|
|
177
|
+
- **`todo_list`**: Shows the current todo list managed via `UpdateTodoList` tool
|
|
178
|
+
|
|
179
|
+
When `include_context_blocks` is specified, only the listed blocks will be included. When `exclude_context_blocks` is specified, the listed blocks will be removed from the default set.
|
|
180
|
+
|
|
181
|
+
#### Other Aider-CE CLI/Config Options for Agent Mode
|
|
182
|
+
|
|
183
|
+
- `preserve-todo-list` - Preserve todo list across sessions
|
|
184
|
+
- `use-enhanced-map` - Use enhanced repo map that takes into account import relationships between files
|
|
185
|
+
|
|
186
|
+
```yaml
|
|
187
|
+
preserve-todo-list: true
|
|
188
|
+
use-enhanced-map: true
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
|
|
167
192
|
#### Usage Examples
|
|
168
193
|
|
|
169
194
|
```bash
|
|
@@ -176,8 +201,17 @@ aider-ce --agent --agent-config '{"tools_excludelist": ["command", "commandinter
|
|
|
176
201
|
# Custom large file threshold
|
|
177
202
|
aider-ce --agent --agent-config '{"large_file_token_threshold": 10000}'
|
|
178
203
|
|
|
204
|
+
# Custom context blocks configuration
|
|
205
|
+
aider-ce --agent --agent-config '{"include_context_blocks": ["directory_structure", "git_status"]}'
|
|
206
|
+
|
|
207
|
+
# Exclude specific context blocks
|
|
208
|
+
aider-ce --agent --agent-config '{"exclude_context_blocks": ["symbol_outline", "todo_list"]}'
|
|
209
|
+
|
|
179
210
|
# Combined configuration
|
|
180
|
-
aider-ce --agent --agent-config '{"large_file_token_threshold": 10000, "tools_includelist": ["view", "makeeditable", "replacetext", "finished", "gitdiff"]}'
|
|
211
|
+
aider-ce --agent --agent-config '{"large_file_token_threshold": 10000, "tools_includelist": ["view", "makeeditable", "replacetext", "finished", "gitdiff"], "include_context_blocks": ["directory_structure", "git_status"]}'
|
|
212
|
+
|
|
213
|
+
# Command Line Options
|
|
214
|
+
aider-ce --agent --agent-config '{"large_file_token_threshold": 10000, "tools_includelist": ["view", "makeeditable", "replacetext", "finished", "gitdiff"]}' --preserve-todo-list --use-enhanced-map
|
|
181
215
|
```
|
|
182
216
|
|
|
183
217
|
This configuration system allows for fine-grained control over which tools are available in Agent Mode, enabling security-conscious deployments and specialized workflows while maintaining essential functionality.
|
|
@@ -190,5 +224,4 @@ This configuration system allows for fine-grained control over which tools are a
|
|
|
190
224
|
- **Scalable exploration**: Can handle large codebases through strategic context management
|
|
191
225
|
- **Recovery mechanisms**: Built-in undo and safety features
|
|
192
226
|
|
|
193
|
-
Agent Mode represents a significant evolution in aider's capabilities, enabling more sophisticated and autonomous codebase manipulation while maintaining safety and control through the tool-based architecture.
|
|
194
|
-
|
|
227
|
+
Agent Mode represents a significant evolution in aider's capabilities, enabling more sophisticated and autonomous codebase manipulation while maintaining safety and control through the tool-based architecture.
|
|
@@ -81,8 +81,9 @@ for alias, model in sorted(MODEL_ALIASES.items()):
|
|
|
81
81
|
- `deepseek`: deepseek/deepseek-chat
|
|
82
82
|
- `flash`: gemini/gemini-2.5-flash
|
|
83
83
|
- `flash-lite`: gemini/gemini-2.5-flash-lite
|
|
84
|
-
- `gemini`: gemini/gemini-
|
|
84
|
+
- `gemini`: gemini/gemini-3-pro-preview
|
|
85
85
|
- `gemini-2.5-pro`: gemini/gemini-2.5-pro
|
|
86
|
+
- `gemini-3-pro-preview`: gemini/gemini-3-pro-preview
|
|
86
87
|
- `gemini-exp`: gemini/gemini-2.5-pro-exp-03-25
|
|
87
88
|
- `grok3`: xai/grok-3-beta
|
|
88
89
|
- `haiku`: claude-3-5-haiku-20241022
|
aider/website/docs/faq.md
CHANGED
|
@@ -264,19 +264,14 @@ tr:hover { background-color: #f5f5f5; }
|
|
|
264
264
|
</style>
|
|
265
265
|
<table>
|
|
266
266
|
<tr><th>Model Name</th><th class='right'>Total Tokens</th><th class='right'>Percent</th></tr>
|
|
267
|
-
<tr><td>gemini/gemini-2.5-pro</td><td class='right'>
|
|
268
|
-
<tr><td>gpt-5</td><td class='right'>211,072</td><td class='right'>28.
|
|
269
|
-
<tr><td>None</td><td class='right'>168,988</td><td class='right'>
|
|
270
|
-
<tr><td>
|
|
267
|
+
<tr><td>gemini/gemini-2.5-pro</td><td class='right'>222,047</td><td class='right'>29.7%</td></tr>
|
|
268
|
+
<tr><td>gpt-5</td><td class='right'>211,072</td><td class='right'>28.2%</td></tr>
|
|
269
|
+
<tr><td>None</td><td class='right'>168,988</td><td class='right'>22.6%</td></tr>
|
|
270
|
+
<tr><td>gemini/gemini-3-pro-preview</td><td class='right'>81,851</td><td class='right'>11.0%</td></tr>
|
|
271
|
+
<tr><td>o3-pro</td><td class='right'>36,620</td><td class='right'>4.9%</td></tr>
|
|
271
272
|
<tr><td>gemini/gemini-2.5-flash-lite</td><td class='right'>15,470</td><td class='right'>2.1%</td></tr>
|
|
272
|
-
<tr><td>gemini/gemini-2.5-flash-lite-preview-06-17</td><td class='right'>11,371</td><td class='right'>1.
|
|
273
|
-
<tr><td>o3</td><td class='right'>3,915</td><td class='right'>0.5%</td></tr>
|
|
274
|
-
<tr><td>openai/REDACTED</td><td class='right'>1,970</td><td class='right'>0.3%</td></tr>
|
|
273
|
+
<tr><td>gemini/gemini-2.5-flash-lite-preview-06-17</td><td class='right'>11,371</td><td class='right'>1.5%</td></tr>
|
|
275
274
|
</table>
|
|
276
|
-
|
|
277
|
-
{: .note :}
|
|
278
|
-
Some models show as REDACTED, because they are new or unpopular models.
|
|
279
|
-
Aider's analytics only records the names of "well known" LLMs.
|
|
280
275
|
<!--[[[end]]]-->
|
|
281
276
|
|
|
282
277
|
## How are the "aider wrote xx% of code" stats computed?
|