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.
Files changed (113) hide show
  1. aider/__init__.py +1 -1
  2. aider/_version.py +2 -2
  3. aider/args.py +63 -43
  4. aider/coders/agent_coder.py +331 -79
  5. aider/coders/agent_prompts.py +3 -15
  6. aider/coders/architect_coder.py +21 -5
  7. aider/coders/base_coder.py +661 -413
  8. aider/coders/base_prompts.py +6 -3
  9. aider/coders/chat_chunks.py +39 -17
  10. aider/commands.py +79 -15
  11. aider/diffs.py +10 -9
  12. aider/exceptions.py +1 -1
  13. aider/helpers/coroutines.py +8 -0
  14. aider/helpers/requests.py +45 -0
  15. aider/history.py +5 -0
  16. aider/io.py +179 -25
  17. aider/main.py +86 -35
  18. aider/models.py +16 -8
  19. aider/queries/tree-sitter-language-pack/c-tags.scm +3 -0
  20. aider/queries/tree-sitter-language-pack/clojure-tags.scm +5 -0
  21. aider/queries/tree-sitter-language-pack/commonlisp-tags.scm +5 -0
  22. aider/queries/tree-sitter-language-pack/cpp-tags.scm +3 -0
  23. aider/queries/tree-sitter-language-pack/csharp-tags.scm +6 -0
  24. aider/queries/tree-sitter-language-pack/dart-tags.scm +5 -0
  25. aider/queries/tree-sitter-language-pack/elixir-tags.scm +5 -0
  26. aider/queries/tree-sitter-language-pack/elm-tags.scm +3 -0
  27. aider/queries/tree-sitter-language-pack/go-tags.scm +7 -0
  28. aider/queries/tree-sitter-language-pack/java-tags.scm +6 -0
  29. aider/queries/tree-sitter-language-pack/javascript-tags.scm +8 -0
  30. aider/queries/tree-sitter-language-pack/lua-tags.scm +5 -0
  31. aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +3 -0
  32. aider/queries/tree-sitter-language-pack/python-tags.scm +10 -0
  33. aider/queries/tree-sitter-language-pack/r-tags.scm +6 -0
  34. aider/queries/tree-sitter-language-pack/ruby-tags.scm +5 -0
  35. aider/queries/tree-sitter-language-pack/rust-tags.scm +3 -0
  36. aider/queries/tree-sitter-language-pack/solidity-tags.scm +1 -1
  37. aider/queries/tree-sitter-language-pack/swift-tags.scm +4 -1
  38. aider/queries/tree-sitter-languages/c-tags.scm +3 -0
  39. aider/queries/tree-sitter-languages/c_sharp-tags.scm +6 -0
  40. aider/queries/tree-sitter-languages/cpp-tags.scm +3 -0
  41. aider/queries/tree-sitter-languages/dart-tags.scm +2 -1
  42. aider/queries/tree-sitter-languages/elixir-tags.scm +5 -0
  43. aider/queries/tree-sitter-languages/elm-tags.scm +3 -0
  44. aider/queries/tree-sitter-languages/fortran-tags.scm +3 -0
  45. aider/queries/tree-sitter-languages/go-tags.scm +6 -0
  46. aider/queries/tree-sitter-languages/haskell-tags.scm +2 -0
  47. aider/queries/tree-sitter-languages/java-tags.scm +6 -0
  48. aider/queries/tree-sitter-languages/javascript-tags.scm +8 -0
  49. aider/queries/tree-sitter-languages/julia-tags.scm +2 -2
  50. aider/queries/tree-sitter-languages/kotlin-tags.scm +3 -0
  51. aider/queries/tree-sitter-languages/ocaml_interface-tags.scm +6 -0
  52. aider/queries/tree-sitter-languages/php-tags.scm +6 -0
  53. aider/queries/tree-sitter-languages/python-tags.scm +10 -0
  54. aider/queries/tree-sitter-languages/ruby-tags.scm +5 -0
  55. aider/queries/tree-sitter-languages/rust-tags.scm +3 -0
  56. aider/queries/tree-sitter-languages/scala-tags.scm +2 -3
  57. aider/queries/tree-sitter-languages/typescript-tags.scm +3 -0
  58. aider/queries/tree-sitter-languages/zig-tags.scm +20 -3
  59. aider/repomap.py +71 -11
  60. aider/resources/model-metadata.json +27335 -635
  61. aider/resources/model-settings.yml +190 -0
  62. aider/scrape.py +2 -0
  63. aider/tools/__init__.py +2 -0
  64. aider/tools/command.py +84 -94
  65. aider/tools/command_interactive.py +95 -110
  66. aider/tools/delete_block.py +131 -159
  67. aider/tools/delete_line.py +97 -132
  68. aider/tools/delete_lines.py +120 -160
  69. aider/tools/extract_lines.py +288 -312
  70. aider/tools/finished.py +30 -43
  71. aider/tools/git_branch.py +107 -109
  72. aider/tools/git_diff.py +44 -56
  73. aider/tools/git_log.py +39 -53
  74. aider/tools/git_remote.py +37 -51
  75. aider/tools/git_show.py +33 -47
  76. aider/tools/git_status.py +30 -44
  77. aider/tools/grep.py +214 -242
  78. aider/tools/indent_lines.py +175 -201
  79. aider/tools/insert_block.py +220 -253
  80. aider/tools/list_changes.py +65 -80
  81. aider/tools/ls.py +64 -80
  82. aider/tools/make_editable.py +57 -73
  83. aider/tools/make_readonly.py +50 -66
  84. aider/tools/remove.py +64 -80
  85. aider/tools/replace_all.py +96 -109
  86. aider/tools/replace_line.py +118 -156
  87. aider/tools/replace_lines.py +160 -197
  88. aider/tools/replace_text.py +159 -160
  89. aider/tools/show_numbered_context.py +115 -141
  90. aider/tools/thinking.py +52 -0
  91. aider/tools/undo_change.py +78 -91
  92. aider/tools/update_todo_list.py +130 -138
  93. aider/tools/utils/base_tool.py +64 -0
  94. aider/tools/utils/output.py +118 -0
  95. aider/tools/view.py +38 -54
  96. aider/tools/view_files_matching.py +131 -134
  97. aider/tools/view_files_with_symbol.py +108 -120
  98. aider/urls.py +1 -1
  99. aider/versioncheck.py +4 -3
  100. aider/website/docs/config/adv-model-settings.md +237 -0
  101. aider/website/docs/config/agent-mode.md +36 -3
  102. aider/website/docs/config/model-aliases.md +2 -1
  103. aider/website/docs/faq.md +6 -11
  104. aider/website/docs/languages.md +2 -2
  105. aider/website/docs/more/infinite-output.md +27 -0
  106. {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/METADATA +112 -70
  107. {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/RECORD +112 -107
  108. aider_ce-0.88.38.dist-info/entry_points.txt +6 -0
  109. aider_ce-0.88.20.dist-info/entry_points.txt +0 -2
  110. /aider/tools/{tool_utils.py → utils/helpers.py} +0 -0
  111. {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/WHEEL +0 -0
  112. {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/licenses/LICENSE.txt +0 -0
  113. {aider_ce-0.88.20.dist-info → aider_ce-0.88.38.dist-info}/top_level.txt +0 -0
@@ -1,129 +1,117 @@
1
- schema = {
2
- "type": "function",
3
- "function": {
4
- "name": "ViewFilesWithSymbol",
5
- "description": "View files that contain a specific symbol (e.g., class, function).",
6
- "parameters": {
7
- "type": "object",
8
- "properties": {
9
- "symbol": {
10
- "type": "string",
11
- "description": "The symbol to search for.",
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
- # Normalized tool name for lookup
20
- NORM_NAME = "viewfileswithsymbol"
21
-
22
-
23
- def _execute_view_files_with_symbol(coder, symbol):
24
- """
25
- Find files containing a symbol using RepoMap and return them as text.
26
- Checks files already in context first.
27
- """
28
- if not coder.repo_map:
29
- coder.io.tool_output("⚠️ Repo map not available, cannot use ViewFilesWithSymbol tool.")
30
- return "Repo map not available"
31
-
32
- if not symbol:
33
- return "Error: Missing 'symbol' parameter for ViewFilesWithSymbol"
34
-
35
- # 1. Check files already in context
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
- tags = coder.repo_map.get_tags(fname, rel_fname)
73
- all_tags.extend(tags)
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(f"Could not get tags for {rel_fname}: {e}")
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
- return result
105
- else:
106
- coder.io.tool_output(f"⚠️ Symbol '{symbol}' not found in searchable files")
107
- return f"Symbol '{symbol}' not found in searchable files"
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
- def process_response(coder, params):
115
- """
116
- Process the ViewFilesWithSymbol tool response.
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://aider.chat/HISTORY.html#release-notes"
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 = packaging.version.parse(latest_version) > packaging.version.parse(
88
- current_version
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-2.5-pro
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'>281,824</td><td class='right'>38.5%</td></tr>
268
- <tr><td>gpt-5</td><td class='right'>211,072</td><td class='right'>28.9%</td></tr>
269
- <tr><td>None</td><td class='right'>168,988</td><td class='right'>23.1%</td></tr>
270
- <tr><td>o3-pro</td><td class='right'>36,620</td><td class='right'>5.0%</td></tr>
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.6%</td></tr>
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?