aider-ce 0.88.1__py3-none-any.whl → 0.88.3__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.
Potentially problematic release.
This version of aider-ce might be problematic. Click here for more details.
- aider/__init__.py +1 -1
- aider/_version.py +2 -2
- aider/coders/architect_coder.py +1 -1
- aider/coders/base_coder.py +11 -9
- aider/io.py +8 -7
- aider/mcp/__init__.py +17 -0
- {aider_ce-0.88.1.dist-info → aider_ce-0.88.3.dist-info}/METADATA +1 -1
- {aider_ce-0.88.1.dist-info → aider_ce-0.88.3.dist-info}/RECORD +12 -12
- {aider_ce-0.88.1.dist-info → aider_ce-0.88.3.dist-info}/entry_points.txt +0 -1
- {aider_ce-0.88.1.dist-info → aider_ce-0.88.3.dist-info}/WHEEL +0 -0
- {aider_ce-0.88.1.dist-info → aider_ce-0.88.3.dist-info}/licenses/LICENSE.txt +0 -0
- {aider_ce-0.88.1.dist-info → aider_ce-0.88.3.dist-info}/top_level.txt +0 -0
aider/__init__.py
CHANGED
aider/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.88.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 88,
|
|
31
|
+
__version__ = version = '0.88.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 88, 3)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
aider/coders/architect_coder.py
CHANGED
|
@@ -14,7 +14,7 @@ class ArchitectCoder(AskCoder):
|
|
|
14
14
|
if not content or not content.strip():
|
|
15
15
|
return
|
|
16
16
|
|
|
17
|
-
if not self.auto_accept_architect and not self.io.confirm_ask("Edit the files?"):
|
|
17
|
+
if not self.auto_accept_architect and not await self.io.confirm_ask("Edit the files?"):
|
|
18
18
|
return
|
|
19
19
|
|
|
20
20
|
kwargs = dict()
|
aider/coders/base_coder.py
CHANGED
|
@@ -616,9 +616,6 @@ class Coder:
|
|
|
616
616
|
except Exception as e:
|
|
617
617
|
self.io.tool_warning(f"Could not remove todo list file {todo_file_path}: {e}")
|
|
618
618
|
|
|
619
|
-
# Instantiate MCP tools
|
|
620
|
-
if self.mcp_servers:
|
|
621
|
-
pass
|
|
622
619
|
# validate the functions jsonschema
|
|
623
620
|
if self.functions:
|
|
624
621
|
from jsonschema import Draft7Validator
|
|
@@ -1755,7 +1752,7 @@ class Coder:
|
|
|
1755
1752
|
|
|
1756
1753
|
return chunks
|
|
1757
1754
|
|
|
1758
|
-
def check_tokens(self, messages):
|
|
1755
|
+
async def check_tokens(self, messages):
|
|
1759
1756
|
"""Check if the messages will fit within the model's token limits."""
|
|
1760
1757
|
input_tokens = self.main_model.token_count(messages)
|
|
1761
1758
|
max_input_tokens = self.main_model.info.get("max_input_tokens") or 0
|
|
@@ -1774,7 +1771,7 @@ class Coder:
|
|
|
1774
1771
|
" the context limit is exceeded."
|
|
1775
1772
|
)
|
|
1776
1773
|
|
|
1777
|
-
if not self.io.confirm_ask("Try to proceed anyway?"):
|
|
1774
|
+
if not await self.io.confirm_ask("Try to proceed anyway?"):
|
|
1778
1775
|
return False
|
|
1779
1776
|
return True
|
|
1780
1777
|
|
|
@@ -1792,7 +1789,7 @@ class Coder:
|
|
|
1792
1789
|
chunks = self.format_messages()
|
|
1793
1790
|
messages = chunks.all_messages()
|
|
1794
1791
|
|
|
1795
|
-
if not self.check_tokens(messages):
|
|
1792
|
+
if not await self.check_tokens(messages):
|
|
1796
1793
|
return
|
|
1797
1794
|
self.warm_cache(chunks)
|
|
1798
1795
|
|
|
@@ -2352,7 +2349,8 @@ class Coder:
|
|
|
2352
2349
|
)
|
|
2353
2350
|
return (server.name, server_tools)
|
|
2354
2351
|
except Exception as e:
|
|
2355
|
-
|
|
2352
|
+
if server.name != "unnamed-server":
|
|
2353
|
+
self.io.tool_warning(f"Error initializing MCP server {server.name}:\n{e}")
|
|
2356
2354
|
return None
|
|
2357
2355
|
|
|
2358
2356
|
async def get_all_server_tools():
|
|
@@ -2604,7 +2602,7 @@ class Coder:
|
|
|
2604
2602
|
)
|
|
2605
2603
|
self.chat_completion_call_hashes.append(hash_object.hexdigest())
|
|
2606
2604
|
|
|
2607
|
-
if
|
|
2605
|
+
if not isinstance(completion, ModelResponse):
|
|
2608
2606
|
async for chunk in self.show_send_output_stream(completion):
|
|
2609
2607
|
yield chunk
|
|
2610
2608
|
else:
|
|
@@ -2640,6 +2638,10 @@ class Coder:
|
|
|
2640
2638
|
if self.verbose:
|
|
2641
2639
|
print(completion)
|
|
2642
2640
|
|
|
2641
|
+
if not isinstance(completion, ModelResponse):
|
|
2642
|
+
self.io.tool_error(str(completion))
|
|
2643
|
+
return
|
|
2644
|
+
|
|
2643
2645
|
if not completion.choices:
|
|
2644
2646
|
self.io.tool_error(str(completion))
|
|
2645
2647
|
return
|
|
@@ -3092,7 +3094,7 @@ class Coder:
|
|
|
3092
3094
|
return
|
|
3093
3095
|
|
|
3094
3096
|
if not Path(full_path).exists():
|
|
3095
|
-
if not self.io.confirm_ask("Create new file?", subject=path):
|
|
3097
|
+
if not await self.io.confirm_ask("Create new file?", subject=path):
|
|
3096
3098
|
self.io.tool_output(f"Skipping edits to {path}")
|
|
3097
3099
|
return
|
|
3098
3100
|
|
aider/io.py
CHANGED
|
@@ -418,13 +418,14 @@ class InputOutput:
|
|
|
418
418
|
self.pretty = False
|
|
419
419
|
fancy_input = False
|
|
420
420
|
|
|
421
|
+
# Spinner state
|
|
422
|
+
self.spinner_running = False
|
|
423
|
+
self.spinner_text = ""
|
|
424
|
+
self.spinner_frame_index = 0
|
|
425
|
+
self.spinner_last_frame_index = 0
|
|
426
|
+
self.unicode_palette = "░█"
|
|
427
|
+
|
|
421
428
|
if fancy_input:
|
|
422
|
-
# Spinner state
|
|
423
|
-
self.spinner_running = False
|
|
424
|
-
self.spinner_text = ""
|
|
425
|
-
self.spinner_frame_index = 0
|
|
426
|
-
self.spinner_last_frame_index = 0
|
|
427
|
-
self.unicode_palette = "░█"
|
|
428
429
|
# If unicode is supported, use the rich 'dots2' spinner, otherwise an ascii fallback
|
|
429
430
|
if self._spinner_supports_unicode():
|
|
430
431
|
self.spinner_frames = SPINNERS["dots2"]["frames"]
|
|
@@ -1301,7 +1302,7 @@ class InputOutput:
|
|
|
1301
1302
|
else:
|
|
1302
1303
|
show_resp = Text(message or "(empty response)")
|
|
1303
1304
|
|
|
1304
|
-
self.
|
|
1305
|
+
self.console.print(show_resp)
|
|
1305
1306
|
|
|
1306
1307
|
def render_markdown(self, text):
|
|
1307
1308
|
output = StringIO()
|
aider/mcp/__init__.py
CHANGED
|
@@ -154,4 +154,21 @@ def load_mcp_servers(mcp_servers, mcp_servers_file, io, verbose=False, mcp_trans
|
|
|
154
154
|
if mcp_servers_file:
|
|
155
155
|
servers = _parse_mcp_servers_from_file(mcp_servers_file, io, verbose, mcp_transport)
|
|
156
156
|
|
|
157
|
+
if not servers:
|
|
158
|
+
# A default MCP server is actually now necessary for the overall agentic loop
|
|
159
|
+
# and a dummy server does suffice for the job
|
|
160
|
+
# because I am not smart enough to figure out why
|
|
161
|
+
# on coder switch, the agent actually initializes the prompt area twice
|
|
162
|
+
# once immediately after input for the old coder
|
|
163
|
+
# and immediately again for the new target coder
|
|
164
|
+
# which causes a race condition where we are awaiting a coroutine
|
|
165
|
+
# that can no longer yield control (somehow?)
|
|
166
|
+
# but somehow having to run through the MCP server checks
|
|
167
|
+
# allows control to be yielded again somehow
|
|
168
|
+
# and I cannot figure out just how that is happening
|
|
169
|
+
# and maybe it is actually prompt_toolkit's fault
|
|
170
|
+
# but this hack works swimmingly because ???
|
|
171
|
+
# so sure! why not
|
|
172
|
+
servers = [McpServer(json.loads('{"aider_default": {}}'))]
|
|
173
|
+
|
|
157
174
|
return servers
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
aider/__init__.py,sha256=
|
|
1
|
+
aider/__init__.py,sha256=wrKtj8dqyfjwH3Rlw7e1W9GVgUnjsG9nsUMYHBwb3Vo,496
|
|
2
2
|
aider/__main__.py,sha256=Vdhw8YA1K3wPMlbJQYL5WqvRzAKVeZ16mZQFO9VRmCo,62
|
|
3
|
-
aider/_version.py,sha256=
|
|
3
|
+
aider/_version.py,sha256=enEulHZ1Bg_kUgfLWzNgkcmguOKMpRSnje8Z-0F49F4,706
|
|
4
4
|
aider/analytics.py,sha256=c5ujaCcMc3yG-9rz_0oSsqBwmVQRxJnui6iE_yDyY_M,7507
|
|
5
5
|
aider/args.py,sha256=lC64t3gp-SJ1Sv51LDHpTAsiU2ZwiFWerYf3iu9mtWY,32742
|
|
6
6
|
aider/args_formatter.py,sha256=CBRnzHyZk-fFCK0ekAzb6C4PPJOU-VTpWIIsJe3qUhk,6369
|
|
@@ -17,7 +17,7 @@ aider/gui.py,sha256=JnHvli1JTCGHAgsOZ8HkAWOKAFxmngbyviZIJeYvjsw,17573
|
|
|
17
17
|
aider/help.py,sha256=wExA1E9vuJccKBH1VvKmH-zJqFi-vhNc0n3CD3Y-8fI,4432
|
|
18
18
|
aider/help_pats.py,sha256=syn7pSVJdcf8uMKTxnZUZBQu-r8JMAi-rrC-k2er1Fk,376
|
|
19
19
|
aider/history.py,sha256=083Gm7KxNo1PXMFHYiChigxCbRzmLkfNlesODdCC-eY,6067
|
|
20
|
-
aider/io.py,sha256=
|
|
20
|
+
aider/io.py,sha256=flltMLvPUnG7sDpfQC_XWICjXxhIy2EJGtdygSr0cvA,56836
|
|
21
21
|
aider/linter.py,sha256=t5jwWZ1dvIzRtig1kTSjzl6u1LRfw0e19qwNIen2jAg,7998
|
|
22
22
|
aider/llm.py,sha256=dtT0mavXP1SyR0Zu_ysZXKdbs3y53q2PevvDKBUrs6s,1505
|
|
23
23
|
aider/main.py,sha256=2Pk5nJhUf-aoa2cbs6VPQA0lfneRYgw-dCbkFO8r8WY,46331
|
|
@@ -42,11 +42,11 @@ aider/waiting.py,sha256=QbDnh1U6oJPqkUrRM3DC8iA5-djbKRW5iJh6Q3VOnrI,944
|
|
|
42
42
|
aider/watch.py,sha256=znCZhHCBlcMm-4SRJP-B0mWfsl5q26DAd-zlk2zykQ8,10641
|
|
43
43
|
aider/watch_prompts.py,sha256=JHmXPZUKm1b1og22QolboU-Xie6bJWhmlbKBi2StkdI,556
|
|
44
44
|
aider/coders/__init__.py,sha256=iB0SkjLra5cb5byPx-bzrmlH6Ud7GnpdOG3pWMhysLs,1102
|
|
45
|
-
aider/coders/architect_coder.py,sha256=
|
|
45
|
+
aider/coders/architect_coder.py,sha256=O5KIf__Ka0bgtCUhYWUmAb08aCS6Nq-CdVWWa-VNKv0,1646
|
|
46
46
|
aider/coders/architect_prompts.py,sha256=R0_KxZjo-km_yNaeDAquDP9qfp3IdWgrdMirCWe0RIE,1658
|
|
47
47
|
aider/coders/ask_coder.py,sha256=Omk4Ih8-prefkMZ_jnRS3faoW5CQUakHOvZ-s7piM3U,210
|
|
48
48
|
aider/coders/ask_prompts.py,sha256=W6HwDUfzfOLt9q8sl6rw7fN7b5ND90FkxCZrtrWl5vY,1171
|
|
49
|
-
aider/coders/base_coder.py,sha256=
|
|
49
|
+
aider/coders/base_coder.py,sha256=I2IwjL2mzcBJhnaMHhAZn0tQZ6DPi8sw-EsjRofJk9c,128223
|
|
50
50
|
aider/coders/base_prompts.py,sha256=O3bBjhf0hgvtKbQ9QyOMnRy8LrmfLyT9dVAcXxHS_3k,3659
|
|
51
51
|
aider/coders/chat_chunks.py,sha256=8HPet6cmQdgWvaA_tGpinO4ASMst53uTcSEtNVTYDXE,1981
|
|
52
52
|
aider/coders/context_coder.py,sha256=_RSzu6ptHo2lkTN7-e9TpcZKzqbQF2eNX5MkyswGm3s,1577
|
|
@@ -82,7 +82,7 @@ aider/coders/wholefile_coder.py,sha256=uPoNNeSia1wrl4oiPjwnYrtVej7hXa2OepGsJC9t1
|
|
|
82
82
|
aider/coders/wholefile_func_coder.py,sha256=pyQHy-VP1gFb4-4EHmYLxRkCP0Ss4nlA4-aQdBVAPQU,4261
|
|
83
83
|
aider/coders/wholefile_func_prompts.py,sha256=M5-d6qRYUeRTelK5w2mQYkVfFV_caPc-qGfNHlmbmJs,868
|
|
84
84
|
aider/coders/wholefile_prompts.py,sha256=9un0j4lH0mKh39wZaRA1Md9gQBQ_kdAzexbeEmqf8wo,2015
|
|
85
|
-
aider/mcp/__init__.py,sha256=
|
|
85
|
+
aider/mcp/__init__.py,sha256=vYNfOKLMhDHXQyayTCFkZI1g53pBHDcTNOUziyKc_Jo,6747
|
|
86
86
|
aider/mcp/server.py,sha256=sGlmgDMZ8LBgUikSq0I1y48OoTIhHMc4_Y1ST-amK1Q,5253
|
|
87
87
|
aider/queries/tree-sitter-language-pack/README.md,sha256=ivZSEuWqYfUVLZl2AZZGRlm0bQsaG-VTBKBwACyM07k,291
|
|
88
88
|
aider/queries/tree-sitter-language-pack/arduino-tags.scm,sha256=HbgdothT9Jjk56COXTtUkVAdZ14rZNnqzLbWVLeRs5U,177
|
|
@@ -261,9 +261,9 @@ aider/website/docs/usage/tutorials.md,sha256=ZKBztbUtucHOiv9h8gvWiWTP6MTSsFyz4mA
|
|
|
261
261
|
aider/website/docs/usage/voice.md,sha256=BtX7pHRgHRWUmrNbS4JssC-SO8RrJ_OetBCtIYpO0pU,3452
|
|
262
262
|
aider/website/docs/usage/watch.md,sha256=OVF14lGtv1vhSXRE8PpxQ3YW-uXSifarUbmLBjmLRyA,7940
|
|
263
263
|
aider/website/share/index.md,sha256=P51aDw9AT8AVbsU7v6g1tWuMjly7y_plM_ZI1ScaT8Y,3172
|
|
264
|
-
aider_ce-0.88.
|
|
265
|
-
aider_ce-0.88.
|
|
266
|
-
aider_ce-0.88.
|
|
267
|
-
aider_ce-0.88.
|
|
268
|
-
aider_ce-0.88.
|
|
269
|
-
aider_ce-0.88.
|
|
264
|
+
aider_ce-0.88.3.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
265
|
+
aider_ce-0.88.3.dist-info/METADATA,sha256=3XMMyoRjhPiiC-TNNFw4oVg3yUtLttJRCfvX03w5zBE,20820
|
|
266
|
+
aider_ce-0.88.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
267
|
+
aider_ce-0.88.3.dist-info/entry_points.txt,sha256=qUBEUd84DYNEHFSgZbgsjgsrAABxqwOj-Dwut9pHZx0,45
|
|
268
|
+
aider_ce-0.88.3.dist-info/top_level.txt,sha256=uwOA6ycgSiRLrBsaRBcIeN_eBKAX78U01_KDEHR8mBk,6
|
|
269
|
+
aider_ce-0.88.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|