diff --git a/aider/__init__.py b/aider/__init__.py index b30f630f31f..04baaec73cc 100644 --- a/aider/__init__.py +++ b/aider/__init__.py @@ -1,6 +1,6 @@ from packaging import version -__version__ = "0.88.7.dev" +__version__ = "0.88.8.dev" safe_version = __version__ try: diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 5cd335e4a69..7de98e32c29 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -2068,6 +2068,8 @@ async def send_message(self, inp): if tool_call_dict.get("id") in tool_id_set: continue + tool_id_set.add(tool_call_dict.get("id")) + tool_calls.append( ChatCompletionMessageToolCall( id=tool_call_dict.get("id"), diff --git a/aider/commands.py b/aider/commands.py index 8a00b5f64c7..ed530550416 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -2042,7 +2042,9 @@ def _get_session_file_path(self, session_name): session_dir = self._get_session_directory() # Sanitize the session name to be filesystem-safe safe_name = re.sub(r"[^a-zA-Z0-9_.-]", "_", session_name) - return session_dir / f"{safe_name}.json" + ext = "" if safe_name[-5:] == ".json" else ".json" + + return session_dir / f"{safe_name}{ext}" def _find_session_file(self, session_name): """Find a session file by name, checking both name-based and full path""" diff --git a/aider/io.py b/aider/io.py index 6b8aafa605a..7c6c845fba4 100644 --- a/aider/io.py +++ b/aider/io.py @@ -945,7 +945,7 @@ async def cancel_input_task(self): try: input_task.cancel() await input_task - except (asyncio.CancelledError, IndexError): + except (asyncio.CancelledError, EOFError, IndexError): pass async def cancel_processing_task(self): @@ -955,7 +955,7 @@ async def cancel_processing_task(self): try: processing_task.cancel() await processing_task - except (asyncio.CancelledError, IndexError): + except (asyncio.CancelledError, EOFError, IndexError): pass def add_to_input_history(self, inp):