aider-ce 0.88.3__py3-none-any.whl → 0.88.4__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/base_coder.py +91 -49
- aider/io.py +88 -59
- aider/main.py +1 -0
- aider/urls.py +1 -1
- aider/versioncheck.py +1 -1
- {aider_ce-0.88.3.dist-info → aider_ce-0.88.4.dist-info}/METADATA +1 -1
- {aider_ce-0.88.3.dist-info → aider_ce-0.88.4.dist-info}/RECORD +13 -13
- {aider_ce-0.88.3.dist-info → aider_ce-0.88.4.dist-info}/WHEEL +0 -0
- {aider_ce-0.88.3.dist-info → aider_ce-0.88.4.dist-info}/entry_points.txt +0 -0
- {aider_ce-0.88.3.dist-info → aider_ce-0.88.4.dist-info}/licenses/LICENSE.txt +0 -0
- {aider_ce-0.88.3.dist-info → aider_ce-0.88.4.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.4'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 88, 4)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
aider/coders/base_coder.py
CHANGED
|
@@ -42,7 +42,7 @@ from rich.console import Console
|
|
|
42
42
|
|
|
43
43
|
from aider import __version__, models, prompts, urls, utils
|
|
44
44
|
from aider.analytics import Analytics
|
|
45
|
-
from aider.commands import Commands
|
|
45
|
+
from aider.commands import Commands, SwitchCoder
|
|
46
46
|
from aider.exceptions import LiteLLMExceptions
|
|
47
47
|
from aider.history import ChatSummary
|
|
48
48
|
from aider.io import ConfirmGroup, InputOutput
|
|
@@ -585,8 +585,6 @@ class Coder:
|
|
|
585
585
|
self.summarizer_thread = None
|
|
586
586
|
self.summarized_done_messages = []
|
|
587
587
|
self.summarizing_messages = None
|
|
588
|
-
self.input_task = None
|
|
589
|
-
self.confirmation_in_progress = False
|
|
590
588
|
|
|
591
589
|
self.files_edited_by_tools = set()
|
|
592
590
|
|
|
@@ -1057,7 +1055,7 @@ class Coder:
|
|
|
1057
1055
|
self.commit_before_message.append(self.repo.get_head_commit_sha())
|
|
1058
1056
|
|
|
1059
1057
|
async def run(self, with_message=None, preproc=True):
|
|
1060
|
-
while self.confirmation_in_progress:
|
|
1058
|
+
while self.io.confirmation_in_progress:
|
|
1061
1059
|
await asyncio.sleep(0.1) # Yield control and wait briefly
|
|
1062
1060
|
|
|
1063
1061
|
if self.io.prompt_session:
|
|
@@ -1067,8 +1065,6 @@ class Coder:
|
|
|
1067
1065
|
return await self._run_patched(with_message, preproc)
|
|
1068
1066
|
|
|
1069
1067
|
async def _run_patched(self, with_message=None, preproc=True):
|
|
1070
|
-
input_task = None
|
|
1071
|
-
processing_task = None
|
|
1072
1068
|
try:
|
|
1073
1069
|
if with_message:
|
|
1074
1070
|
self.io.user_input(with_message)
|
|
@@ -1076,91 +1072,134 @@ class Coder:
|
|
|
1076
1072
|
return self.partial_response_content
|
|
1077
1073
|
|
|
1078
1074
|
user_message = None
|
|
1075
|
+
await self.io.cancel_input_task()
|
|
1076
|
+
await self.io.cancel_processing_task()
|
|
1079
1077
|
|
|
1080
1078
|
while True:
|
|
1081
1079
|
try:
|
|
1082
1080
|
if (
|
|
1083
|
-
not self.confirmation_in_progress
|
|
1084
|
-
and not input_task
|
|
1081
|
+
not self.io.confirmation_in_progress
|
|
1085
1082
|
and not user_message
|
|
1086
|
-
and (
|
|
1083
|
+
and (
|
|
1084
|
+
not self.io.input_task
|
|
1085
|
+
or self.io.input_task.done()
|
|
1086
|
+
or self.io.input_task.cancelled()
|
|
1087
|
+
)
|
|
1088
|
+
and (not self.io.processing_task or not self.io.placeholder)
|
|
1087
1089
|
):
|
|
1088
1090
|
if not self.suppress_announcements_for_next_prompt:
|
|
1089
1091
|
self.show_announcements()
|
|
1090
|
-
self.suppress_announcements_for_next_prompt =
|
|
1092
|
+
self.suppress_announcements_for_next_prompt = True
|
|
1091
1093
|
|
|
1092
1094
|
# Stop spinner before showing announcements or getting input
|
|
1093
1095
|
self.io.stop_spinner()
|
|
1094
|
-
|
|
1095
1096
|
self.copy_context()
|
|
1096
|
-
self.input_task = asyncio.create_task(self.get_input())
|
|
1097
|
-
|
|
1097
|
+
self.io.input_task = asyncio.create_task(self.get_input())
|
|
1098
|
+
|
|
1099
|
+
# Yield Control so input can actually get properly set up
|
|
1100
|
+
await asyncio.sleep(0)
|
|
1098
1101
|
|
|
1099
1102
|
tasks = set()
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1103
|
+
|
|
1104
|
+
if self.io.processing_task:
|
|
1105
|
+
if self.io.processing_task.done():
|
|
1106
|
+
exception = self.io.processing_task.exception()
|
|
1107
|
+
if exception:
|
|
1108
|
+
if isinstance(exception, SwitchCoder):
|
|
1109
|
+
await self.io.processing_task
|
|
1110
|
+
elif (
|
|
1111
|
+
not self.io.processing_task.done()
|
|
1112
|
+
and not self.io.processing_task.cancelled()
|
|
1113
|
+
):
|
|
1114
|
+
tasks.add(self.io.processing_task)
|
|
1115
|
+
|
|
1116
|
+
if (
|
|
1117
|
+
self.io.input_task
|
|
1118
|
+
and not self.io.input_task.done()
|
|
1119
|
+
and not self.io.input_task.cancelled()
|
|
1120
|
+
):
|
|
1121
|
+
tasks.add(self.io.input_task)
|
|
1104
1122
|
|
|
1105
1123
|
if tasks:
|
|
1106
1124
|
done, pending = await asyncio.wait(
|
|
1107
1125
|
tasks, return_when=asyncio.FIRST_COMPLETED
|
|
1108
1126
|
)
|
|
1109
1127
|
|
|
1110
|
-
if input_task and input_task in done:
|
|
1111
|
-
if processing_task:
|
|
1112
|
-
if not self.confirmation_in_progress:
|
|
1113
|
-
|
|
1114
|
-
try:
|
|
1115
|
-
await processing_task
|
|
1116
|
-
except asyncio.CancelledError:
|
|
1117
|
-
pass
|
|
1128
|
+
if self.io.input_task and self.io.input_task in done:
|
|
1129
|
+
if self.io.processing_task:
|
|
1130
|
+
if not self.io.confirmation_in_progress:
|
|
1131
|
+
await self.io.cancel_processing_task()
|
|
1118
1132
|
self.io.stop_spinner()
|
|
1119
|
-
processing_task = None
|
|
1120
1133
|
|
|
1121
1134
|
try:
|
|
1122
|
-
user_message = input_task.result()
|
|
1135
|
+
user_message = self.io.input_task.result()
|
|
1136
|
+
await self.io.cancel_input_task()
|
|
1123
1137
|
except (asyncio.CancelledError, KeyboardInterrupt):
|
|
1124
1138
|
user_message = None
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1139
|
+
|
|
1140
|
+
if not user_message:
|
|
1141
|
+
await self.io.cancel_input_task()
|
|
1128
1142
|
continue
|
|
1129
1143
|
|
|
1130
|
-
if processing_task and processing_task in
|
|
1144
|
+
if self.io.processing_task and self.io.processing_task in pending:
|
|
1131
1145
|
try:
|
|
1132
|
-
|
|
1146
|
+
tasks = set()
|
|
1147
|
+
tasks.add(self.io.processing_task)
|
|
1148
|
+
|
|
1149
|
+
# We just did a confirmation so add a new input task
|
|
1150
|
+
if (
|
|
1151
|
+
not self.io.input_task
|
|
1152
|
+
and self.io.get_confirmation_acknowledgement()
|
|
1153
|
+
):
|
|
1154
|
+
self.io.input_task = asyncio.create_task(self.get_input())
|
|
1155
|
+
tasks.add(self.io.input_task)
|
|
1156
|
+
|
|
1157
|
+
done, pending = await asyncio.wait(
|
|
1158
|
+
tasks, return_when=asyncio.FIRST_COMPLETED
|
|
1159
|
+
)
|
|
1160
|
+
|
|
1161
|
+
if self.io.input_task and self.io.input_task in done:
|
|
1162
|
+
await self.io.cancel_processing_task()
|
|
1163
|
+
self.io.stop_spinner()
|
|
1164
|
+
self.io.acknowledge_confirmation()
|
|
1165
|
+
|
|
1166
|
+
try:
|
|
1167
|
+
user_message = self.io.input_task.result()
|
|
1168
|
+
await self.io.cancel_input_task()
|
|
1169
|
+
except (asyncio.CancelledError, KeyboardInterrupt):
|
|
1170
|
+
user_message = None
|
|
1171
|
+
|
|
1133
1172
|
except (asyncio.CancelledError, KeyboardInterrupt):
|
|
1173
|
+
print("error of some sort")
|
|
1134
1174
|
pass
|
|
1135
|
-
|
|
1175
|
+
|
|
1136
1176
|
# Stop spinner when processing task completes
|
|
1137
1177
|
self.io.stop_spinner()
|
|
1138
1178
|
|
|
1139
|
-
if user_message and
|
|
1140
|
-
processing_task = asyncio.create_task(
|
|
1179
|
+
if user_message and not self.io.acknowledge_confirmation():
|
|
1180
|
+
self.io.processing_task = asyncio.create_task(
|
|
1141
1181
|
self._processing_logic(user_message, preproc)
|
|
1142
1182
|
)
|
|
1143
1183
|
# Start spinner for processing task
|
|
1144
1184
|
self.io.start_spinner("Processing...")
|
|
1145
|
-
|
|
1185
|
+
|
|
1186
|
+
self.io.ring_bell()
|
|
1187
|
+
user_message = None
|
|
1146
1188
|
except KeyboardInterrupt:
|
|
1147
|
-
if
|
|
1148
|
-
processing_task.cancel()
|
|
1149
|
-
processing_task = None
|
|
1150
|
-
# Stop spinner when processing task is cancelled
|
|
1151
|
-
self.io.stop_spinner()
|
|
1152
|
-
if input_task:
|
|
1189
|
+
if self.io.input_task:
|
|
1153
1190
|
self.io.set_placeholder("")
|
|
1154
|
-
|
|
1155
|
-
|
|
1191
|
+
await self.io.cancel_input_task()
|
|
1192
|
+
|
|
1193
|
+
if self.io.processing_task:
|
|
1194
|
+
await self.io.cancel_processing_task()
|
|
1195
|
+
self.io.stop_spinner()
|
|
1196
|
+
|
|
1156
1197
|
self.keyboard_interrupt()
|
|
1157
1198
|
except EOFError:
|
|
1158
1199
|
return
|
|
1159
1200
|
finally:
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
if processing_task:
|
|
1163
|
-
processing_task.cancel()
|
|
1201
|
+
await self.io.cancel_input_task()
|
|
1202
|
+
await self.io.cancel_processing_task()
|
|
1164
1203
|
|
|
1165
1204
|
async def _processing_logic(self, user_message, preproc):
|
|
1166
1205
|
try:
|
|
@@ -1188,6 +1227,7 @@ class Coder:
|
|
|
1188
1227
|
all_read_only_files = [self.get_rel_fname(fname) for fname in all_read_only_fnames]
|
|
1189
1228
|
all_files = sorted(set(inchat_files + all_read_only_files))
|
|
1190
1229
|
edit_format = "" if self.edit_format == self.main_model.edit_format else self.edit_format
|
|
1230
|
+
|
|
1191
1231
|
return await self.io.get_input(
|
|
1192
1232
|
self.root,
|
|
1193
1233
|
all_files,
|
|
@@ -1214,6 +1254,8 @@ class Coder:
|
|
|
1214
1254
|
self.init_before_message()
|
|
1215
1255
|
|
|
1216
1256
|
if preproc:
|
|
1257
|
+
if user_message[0] in "!":
|
|
1258
|
+
user_message = f"/run {user_message[1:]}"
|
|
1217
1259
|
message = await self.preproc_user_input(user_message)
|
|
1218
1260
|
else:
|
|
1219
1261
|
message = user_message
|
|
@@ -2704,7 +2746,7 @@ class Coder:
|
|
|
2704
2746
|
|
|
2705
2747
|
async for chunk in completion:
|
|
2706
2748
|
# Check if confirmation is in progress and wait if needed
|
|
2707
|
-
while self.confirmation_in_progress:
|
|
2749
|
+
while self.io.confirmation_in_progress:
|
|
2708
2750
|
await asyncio.sleep(0.1) # Yield control and wait briefly
|
|
2709
2751
|
|
|
2710
2752
|
if isinstance(chunk, str):
|
aider/io.py
CHANGED
|
@@ -320,6 +320,7 @@ class InputOutput:
|
|
|
320
320
|
root=".",
|
|
321
321
|
notifications=False,
|
|
322
322
|
notifications_command=None,
|
|
323
|
+
verbose=False,
|
|
323
324
|
):
|
|
324
325
|
self.console = Console()
|
|
325
326
|
self.pretty = pretty
|
|
@@ -337,6 +338,8 @@ class InputOutput:
|
|
|
337
338
|
self.multiline_mode = multiline_mode
|
|
338
339
|
self.bell_on_next_input = False
|
|
339
340
|
self.notifications = notifications
|
|
341
|
+
self.verbose = verbose
|
|
342
|
+
|
|
340
343
|
if notifications and notifications_command is None:
|
|
341
344
|
self.notifications_command = self.get_default_notification_command()
|
|
342
345
|
else:
|
|
@@ -363,7 +366,7 @@ class InputOutput:
|
|
|
363
366
|
)
|
|
364
367
|
|
|
365
368
|
self.fzf_available = shutil.which("fzf")
|
|
366
|
-
if not self.fzf_available:
|
|
369
|
+
if not self.fzf_available and self.verbose:
|
|
367
370
|
self.tool_warning(
|
|
368
371
|
"fzf not found, fuzzy finder features will be disabled. Install it for enhanced"
|
|
369
372
|
" file/history search."
|
|
@@ -460,7 +463,18 @@ class InputOutput:
|
|
|
460
463
|
self.file_watcher = file_watcher
|
|
461
464
|
self.root = root
|
|
462
465
|
self.outstanding_confirmations = []
|
|
466
|
+
|
|
467
|
+
# Variables used to interface with base_coder
|
|
463
468
|
self.coder = None
|
|
469
|
+
self.input_task = None
|
|
470
|
+
self.processing_task = None
|
|
471
|
+
self.confirmation_in_progress = False
|
|
472
|
+
self.confirmation_acknowledgement = False
|
|
473
|
+
|
|
474
|
+
# State tracking for confirmation input
|
|
475
|
+
self.confirmation_input_active = False
|
|
476
|
+
self.saved_input_text = ""
|
|
477
|
+
self.confirmation_future = None
|
|
464
478
|
|
|
465
479
|
# Validate color settings after console is initialized
|
|
466
480
|
self._validate_color_settings()
|
|
@@ -657,16 +671,8 @@ class InputOutput:
|
|
|
657
671
|
print()
|
|
658
672
|
|
|
659
673
|
def interrupt_input(self):
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
if (
|
|
664
|
-
coder
|
|
665
|
-
and hasattr(coder, "input_task")
|
|
666
|
-
and coder.input_task
|
|
667
|
-
and not coder.input_task.done()
|
|
668
|
-
):
|
|
669
|
-
coder.input_task.cancel()
|
|
674
|
+
if self.input_task and not self.input_task.done():
|
|
675
|
+
self.input_task.cancel()
|
|
670
676
|
|
|
671
677
|
if self.prompt_session and self.prompt_session.app:
|
|
672
678
|
# Store any partial input before interrupting
|
|
@@ -698,9 +704,6 @@ class InputOutput:
|
|
|
698
704
|
self.reject_outstanding_confirmations()
|
|
699
705
|
self.rule()
|
|
700
706
|
|
|
701
|
-
# Ring the bell if needed
|
|
702
|
-
self.ring_bell()
|
|
703
|
-
|
|
704
707
|
rel_fnames = list(rel_fnames)
|
|
705
708
|
show = ""
|
|
706
709
|
if rel_fnames:
|
|
@@ -879,6 +882,11 @@ class InputOutput:
|
|
|
879
882
|
self.tool_error(str(err))
|
|
880
883
|
return ""
|
|
881
884
|
except Exception as err:
|
|
885
|
+
try:
|
|
886
|
+
self.prompt_session.app.exit()
|
|
887
|
+
except Exception:
|
|
888
|
+
pass
|
|
889
|
+
|
|
882
890
|
import traceback
|
|
883
891
|
|
|
884
892
|
self.tool_error(str(err))
|
|
@@ -931,6 +939,26 @@ class InputOutput:
|
|
|
931
939
|
self.user_input(inp)
|
|
932
940
|
return inp
|
|
933
941
|
|
|
942
|
+
async def cancel_input_task(self):
|
|
943
|
+
if self.input_task:
|
|
944
|
+
input_task = self.input_task
|
|
945
|
+
self.input_task = None
|
|
946
|
+
try:
|
|
947
|
+
input_task.cancel()
|
|
948
|
+
await input_task
|
|
949
|
+
except asyncio.CancelledError:
|
|
950
|
+
pass
|
|
951
|
+
|
|
952
|
+
async def cancel_processing_task(self):
|
|
953
|
+
if self.processing_task:
|
|
954
|
+
processing_task = self.processing_task
|
|
955
|
+
self.processing_task = None
|
|
956
|
+
try:
|
|
957
|
+
processing_task.cancel()
|
|
958
|
+
await processing_task
|
|
959
|
+
except asyncio.CancelledError:
|
|
960
|
+
pass
|
|
961
|
+
|
|
934
962
|
def add_to_input_history(self, inp):
|
|
935
963
|
if not self.input_history_file:
|
|
936
964
|
return
|
|
@@ -1001,32 +1029,33 @@ class InputOutput:
|
|
|
1001
1029
|
return True
|
|
1002
1030
|
return False
|
|
1003
1031
|
|
|
1032
|
+
def set_confirmation_acknowledgement(self):
|
|
1033
|
+
self.confirmation_acknowledgement = True
|
|
1034
|
+
|
|
1035
|
+
def get_confirmation_acknowledgement(self):
|
|
1036
|
+
return self.confirmation_acknowledgement
|
|
1037
|
+
|
|
1038
|
+
def acknowledge_confirmation(self):
|
|
1039
|
+
outstanding_confirmation = self.confirmation_acknowledgement
|
|
1040
|
+
self.confirmation_acknowledgement = False
|
|
1041
|
+
return outstanding_confirmation
|
|
1042
|
+
|
|
1004
1043
|
@restore_multiline_async
|
|
1005
1044
|
async def confirm_ask(
|
|
1006
1045
|
self,
|
|
1007
1046
|
*args,
|
|
1008
1047
|
**kwargs,
|
|
1009
1048
|
):
|
|
1010
|
-
|
|
1011
|
-
interrupted_for_confirmation = False
|
|
1012
|
-
if (
|
|
1013
|
-
coder
|
|
1014
|
-
and hasattr(coder, "input_task")
|
|
1015
|
-
and coder.input_task
|
|
1016
|
-
and not coder.input_task.done()
|
|
1017
|
-
):
|
|
1018
|
-
coder.confirmation_in_progress = True
|
|
1019
|
-
interrupted_for_confirmation = True
|
|
1020
|
-
# self.interrupt_input()
|
|
1049
|
+
self.confirmation_in_progress = True
|
|
1021
1050
|
|
|
1022
1051
|
try:
|
|
1052
|
+
self.set_confirmation_acknowledgement()
|
|
1023
1053
|
return await asyncio.create_task(self._confirm_ask(*args, **kwargs))
|
|
1024
1054
|
except KeyboardInterrupt:
|
|
1025
1055
|
# Re-raise KeyboardInterrupt to allow it to propagate
|
|
1026
1056
|
raise
|
|
1027
1057
|
finally:
|
|
1028
|
-
|
|
1029
|
-
coder.confirmation_in_progress = False
|
|
1058
|
+
self.confirmation_in_progress = False
|
|
1030
1059
|
|
|
1031
1060
|
async def _confirm_ask(
|
|
1032
1061
|
self,
|
|
@@ -1039,9 +1068,6 @@ class InputOutput:
|
|
|
1039
1068
|
):
|
|
1040
1069
|
self.num_user_asks += 1
|
|
1041
1070
|
|
|
1042
|
-
# Ring the bell if needed
|
|
1043
|
-
self.ring_bell()
|
|
1044
|
-
|
|
1045
1071
|
question_id = (question, subject)
|
|
1046
1072
|
|
|
1047
1073
|
confirmation_future = asyncio.get_running_loop().create_future()
|
|
@@ -1086,47 +1112,45 @@ class InputOutput:
|
|
|
1086
1112
|
else:
|
|
1087
1113
|
self.tool_output(subject, bold=True)
|
|
1088
1114
|
|
|
1089
|
-
style = self._get_style()
|
|
1090
|
-
|
|
1091
1115
|
if self.yes is True:
|
|
1092
1116
|
res = "n" if explicit_yes_required else "y"
|
|
1117
|
+
self.acknowledge_confirmation()
|
|
1093
1118
|
elif self.yes is False:
|
|
1094
1119
|
res = "n"
|
|
1120
|
+
self.acknowledge_confirmation()
|
|
1095
1121
|
elif group and group.preference:
|
|
1096
1122
|
res = group.preference
|
|
1097
1123
|
self.user_input(f"{question}{res}", log_only=False)
|
|
1124
|
+
self.acknowledge_confirmation()
|
|
1098
1125
|
else:
|
|
1126
|
+
# Ring the bell if needed
|
|
1127
|
+
self.ring_bell()
|
|
1128
|
+
|
|
1099
1129
|
while True:
|
|
1100
1130
|
try:
|
|
1101
1131
|
if self.prompt_session:
|
|
1102
|
-
coder = self.coder() if self.coder else None
|
|
1103
1132
|
if (
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1133
|
+
not self.input_task
|
|
1134
|
+
or self.input_task.done()
|
|
1135
|
+
or self.input_task.cancelled()
|
|
1136
|
+
):
|
|
1137
|
+
coder = self.coder() if self.coder else None
|
|
1138
|
+
|
|
1139
|
+
if coder:
|
|
1140
|
+
self.input_task = asyncio.create_task(coder.get_input())
|
|
1141
|
+
await asyncio.sleep(0)
|
|
1142
|
+
|
|
1143
|
+
if (
|
|
1144
|
+
self.input_task
|
|
1145
|
+
and not self.input_task.done()
|
|
1146
|
+
and not self.input_task.cancelled()
|
|
1108
1147
|
):
|
|
1109
1148
|
self.prompt_session.message = question
|
|
1110
1149
|
self.prompt_session.app.invalidate()
|
|
1111
|
-
res = await coder.input_task
|
|
1112
1150
|
else:
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
style=style,
|
|
1117
|
-
complete_while_typing=False,
|
|
1118
|
-
)
|
|
1119
|
-
)
|
|
1120
|
-
done, pending = await asyncio.wait(
|
|
1121
|
-
{prompt_task, confirmation_future},
|
|
1122
|
-
return_when=asyncio.FIRST_COMPLETED,
|
|
1123
|
-
)
|
|
1124
|
-
|
|
1125
|
-
if confirmation_future in done:
|
|
1126
|
-
prompt_task.cancel()
|
|
1127
|
-
return await confirmation_future
|
|
1128
|
-
|
|
1129
|
-
res = await prompt_task
|
|
1151
|
+
continue
|
|
1152
|
+
|
|
1153
|
+
res = await self.input_task
|
|
1130
1154
|
else:
|
|
1131
1155
|
res = await asyncio.get_event_loop().run_in_executor(
|
|
1132
1156
|
None, input, question
|
|
@@ -1241,17 +1265,22 @@ class InputOutput:
|
|
|
1241
1265
|
|
|
1242
1266
|
if not isinstance(message, Text):
|
|
1243
1267
|
message = Text(message)
|
|
1244
|
-
|
|
1245
|
-
style = dict(
|
|
1268
|
+
|
|
1269
|
+
style = dict()
|
|
1270
|
+
|
|
1271
|
+
if self.pretty:
|
|
1272
|
+
color = ensure_hash_prefix(color) if color else None
|
|
1273
|
+
if color:
|
|
1274
|
+
style["color"] = color
|
|
1246
1275
|
|
|
1247
1276
|
try:
|
|
1248
|
-
self.stream_print(message, **style)
|
|
1277
|
+
self.stream_print(message, style=RichStyle(**style))
|
|
1249
1278
|
except UnicodeEncodeError:
|
|
1250
1279
|
# Fallback to ASCII-safe output
|
|
1251
1280
|
if isinstance(message, Text):
|
|
1252
1281
|
message = message.plain
|
|
1253
1282
|
message = str(message).encode("ascii", errors="replace").decode("ascii")
|
|
1254
|
-
self.stream_print(message, **style)
|
|
1283
|
+
self.stream_print(message, style=RichStyle(**style))
|
|
1255
1284
|
|
|
1256
1285
|
if self.prompt_session and self.prompt_session.app:
|
|
1257
1286
|
self.prompt_session.app.invalidate()
|
aider/main.py
CHANGED
|
@@ -601,6 +601,7 @@ async def main_async(argv=None, input=None, output=None, force_git_root=None, re
|
|
|
601
601
|
multiline_mode=args.multiline,
|
|
602
602
|
notifications=args.notifications,
|
|
603
603
|
notifications_command=args.notifications_command,
|
|
604
|
+
verbose=args.verbose,
|
|
604
605
|
)
|
|
605
606
|
|
|
606
607
|
io = get_io(args.pretty)
|
aider/urls.py
CHANGED
|
@@ -8,7 +8,7 @@ model_warnings = "https://aider.chat/docs/llms/warnings.html"
|
|
|
8
8
|
token_limits = "https://aider.chat/docs/troubleshooting/token-limits.html"
|
|
9
9
|
llms = "https://aider.chat/docs/llms.html"
|
|
10
10
|
large_repos = "https://aider.chat/docs/faq.html#can-i-use-aider-in-a-large-mono-repo"
|
|
11
|
-
github_issues = "https://github.com/
|
|
11
|
+
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"
|
aider/versioncheck.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
aider/__init__.py,sha256=
|
|
1
|
+
aider/__init__.py,sha256=Gt5Oveq-MHT_HEMx5-sLQoQaHGVMIX7buzoDjI8ifqA,496
|
|
2
2
|
aider/__main__.py,sha256=Vdhw8YA1K3wPMlbJQYL5WqvRzAKVeZ16mZQFO9VRmCo,62
|
|
3
|
-
aider/_version.py,sha256=
|
|
3
|
+
aider/_version.py,sha256=IQ-Q4S4Mold8rZdN7zBkEdwsR_c0ns8JopeeDGBPsmA,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,10 +17,10 @@ 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=jEhZdRs7pbOszyiJpCAUYbUjSH9Bp21H-YkgdraUrjw,57586
|
|
21
21
|
aider/linter.py,sha256=t5jwWZ1dvIzRtig1kTSjzl6u1LRfw0e19qwNIen2jAg,7998
|
|
22
22
|
aider/llm.py,sha256=dtT0mavXP1SyR0Zu_ysZXKdbs3y53q2PevvDKBUrs6s,1505
|
|
23
|
-
aider/main.py,sha256=
|
|
23
|
+
aider/main.py,sha256=I_zPPpX19TWMwngQowlIeiv8O9UwFqdCiQOiFhZ2tBo,46365
|
|
24
24
|
aider/mdstream.py,sha256=fS9iQUQmIJPEMo7o1psPGE2yYj31MI3m3msdN-jEzUw,7594
|
|
25
25
|
aider/models.py,sha256=yflYZ64oza4QH04vIPI2n7rcsdSw2Np4BRwRKlb3STQ,45455
|
|
26
26
|
aider/onboarding.py,sha256=pMWl--NOH_hb4w1wVxLmv8W0akcrilo1Pxf9XUSqBXs,16135
|
|
@@ -34,9 +34,9 @@ aider/run_cmd.py,sha256=9-NpSL4hlqIndf_EN1jnmWfjX7vIPbDgKgGPGRAr2Rw,4223
|
|
|
34
34
|
aider/scrape.py,sha256=1d5RTtHLJ8JersGoQWm0mDVk_rQfsY4Xm-0jTK8xEPw,8346
|
|
35
35
|
aider/sendchat.py,sha256=fY9scUSGdcLUDrD3PWUEyp6njRZZ138l79oXz_bks8o,7700
|
|
36
36
|
aider/special.py,sha256=OhsBWWM-DWwjWbi6kE7EqR4CiUfyJ6qJuCgcmywZSAc,4415
|
|
37
|
-
aider/urls.py,sha256=
|
|
37
|
+
aider/urls.py,sha256=LoSe3P1wGC5hEohJ5lRuIXT2R0YzLNbJrC67c8KoQZ4,1124
|
|
38
38
|
aider/utils.py,sha256=wkT43yJx59Q0OfIlzNX2n9rPyEEo7WLKXdXoxNJzdz4,12231
|
|
39
|
-
aider/versioncheck.py,sha256=
|
|
39
|
+
aider/versioncheck.py,sha256=e2rD1Kdz_mcuzcgyrRsveYd-BxfgS4pzkFbIE2gz6xs,2979
|
|
40
40
|
aider/voice.py,sha256=hNQCMCWhljcROJhzsvnkwgzzgQQbFORkpROhKeqICig,6797
|
|
41
41
|
aider/waiting.py,sha256=QbDnh1U6oJPqkUrRM3DC8iA5-djbKRW5iJh6Q3VOnrI,944
|
|
42
42
|
aider/watch.py,sha256=znCZhHCBlcMm-4SRJP-B0mWfsl5q26DAd-zlk2zykQ8,10641
|
|
@@ -46,7 +46,7 @@ aider/coders/architect_coder.py,sha256=O5KIf__Ka0bgtCUhYWUmAb08aCS6Nq-CdVWWa-VNK
|
|
|
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=gFEeUmxwv5r9wrl9kwRyIxJIxefx4hCs3SedZVnyEms,130301
|
|
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
|
|
@@ -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.4.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
265
|
+
aider_ce-0.88.4.dist-info/METADATA,sha256=9NpL2hUk3EJMmZYIsg6JtqX80IqogsWzDTQTX-zo7zE,20820
|
|
266
|
+
aider_ce-0.88.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
267
|
+
aider_ce-0.88.4.dist-info/entry_points.txt,sha256=qUBEUd84DYNEHFSgZbgsjgsrAABxqwOj-Dwut9pHZx0,45
|
|
268
|
+
aider_ce-0.88.4.dist-info/top_level.txt,sha256=uwOA6ycgSiRLrBsaRBcIeN_eBKAX78U01_KDEHR8mBk,6
|
|
269
|
+
aider_ce-0.88.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|