diff --git a/HISTORY.md b/HISTORY.md index a190321c4..302e3ac15 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,7 +1,7 @@ # Release history -### main branch +### Aider v0.61.0 - Load and save aider slash-commands to files: - `/save ` command will make a file of `/add` and `/read-only` commands that recreate the current file context in the chat. @@ -13,9 +13,13 @@ - Bugfix for when diff mode flexibly handles the model using the wrong filename. - Displays filenames in sorted order for `/add` and `/read-only`. - New `--no-fancy-input` switch disables prompt toolkit input, now still available with `--no-pretty`. +- Override browser config with `--no-browser` or `--no-gui`. +- Offer to open documentation URLs when errors occur. - Properly support all o1 models, regardless of provider. +- Improved layout of filenames above input prompt. +- Better handle corrupted repomap tags cache. - Improved handling of API errors, especially when accessing the weak model. -- Aider wrote 70% of the code in this release. +- Aider wrote 68% of the code in this release. ### Aider v0.60.1 diff --git a/aider/__init__.py b/aider/__init__.py index 380d10743..699ff523f 100644 --- a/aider/__init__.py +++ b/aider/__init__.py @@ -1,6 +1,6 @@ try: from aider.__version__ import __version__ except Exception: - __version__ = "0.60.2.dev" + __version__ = "0.61.1.dev" __all__ = [__version__] diff --git a/aider/args.py b/aider/args.py index 5d2e841ab..c02254e49 100644 --- a/aider/args.py +++ b/aider/args.py @@ -702,8 +702,8 @@ def get_parser(default_config_files, git_root): group.add_argument( "--gui", "--browser", - action="store_true", - help="Run aider in your browser", + action=argparse.BooleanOptionalAction, + help="Run aider in your browser (default: False)", default=False, ) group.add_argument( diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 168b1d1ca..1beed7a45 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -790,8 +790,40 @@ class Coder: self.num_reflections += 1 message = self.reflected_message - def check_and_open_urls(self, text: str) -> List[str]: - """Check text for URLs and offer to open them in a browser.""" + def check_and_open_urls(self, exc: Exception) -> List[str]: + import openai + + """Check exception for URLs, offer to open in a browser, with user-friendly error msgs.""" + text = str(exc) + friendly_msg = None + + if isinstance(exc, (openai.APITimeoutError, openai.APIConnectionError)): + friendly_msg = ( + "There is a problem connecting to the API provider. Please try again later or check" + " your model settings." + ) + elif isinstance(exc, openai.RateLimitError): + friendly_msg = ( + "The API provider's rate limits have been exceeded. Check with your provider or" + " wait awhile and retry." + ) + elif isinstance(exc, openai.InternalServerError): + friendly_msg = ( + "The API provider seems to be down or overloaded. Please try again later." + ) + elif isinstance(exc, openai.BadRequestError): + friendly_msg = "The API provider refused the request as invalid?" + elif isinstance(exc, openai.AuthenticationError): + friendly_msg = ( + "The API provider refused your authentication. Please check that you are using a" + " valid API key." + ) + + if friendly_msg: + self.io.tool_warning(text) + self.io.tool_error(f"{friendly_msg}") + else: + self.io.tool_error(text) url_pattern = re.compile(r"(https?://[^\s/$.?#].[^\s]*)") urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates @@ -1153,18 +1185,15 @@ class Coder: break except retry_exceptions() as err: # Print the error and its base classes - err_msg = str(err) - # base_classes = [] - # for cls in err.__class__.__mro__: # Skip the class itself - # base_classes.append(cls.__name__) - # if base_classes: - # err_msg += f"\nBase classes: {' -> '.join(base_classes)}" - self.io.tool_error(err_msg) + # for cls in err.__class__.__mro__: dump(cls.__name__) + retry_delay *= 2 if retry_delay > RETRY_TIMEOUT: self.mdstream = None - self.check_and_open_urls(err_msg) + self.check_and_open_urls(err) break + err_msg = str(err) + self.io.tool_error(err_msg) self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...") time.sleep(retry_delay) continue @@ -1193,9 +1222,10 @@ class Coder: dict(role="assistant", content=self.multi_response_content, prefix=True) ) except (openai.APIError, openai.APIStatusError) as err: + # for cls in err.__class__.__mro__: dump(cls.__name__) self.mdstream = None - self.io.tool_error(str(err)) - self.check_and_open_urls(str(err)) + self.check_and_open_urls(err) + break except Exception as err: lines = traceback.format_exception(type(err), err, err.__traceback__) self.io.tool_warning("".join(lines)) diff --git a/aider/commands.py b/aider/commands.py index 89d261631..45d19c1b8 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -1199,6 +1199,13 @@ class Commands: self.io.tool_error(f"Not a file or directory: {abs_path}") def _add_read_only_file(self, abs_path, original_name): + if is_image_file(original_name) and not self.coder.main_model.info.get("supports_vision"): + self.io.tool_error( + f"Cannot add image file {original_name} as the" + f" {self.coder.main_model.name} does not support images." + ) + return + if abs_path in self.coder.abs_read_only_fnames: self.io.tool_error(f"{original_name} is already in the chat as a read-only file") return @@ -1290,6 +1297,7 @@ class Commands: try: with open(args.strip(), "w", encoding=self.io.encoding) as f: + f.write("/drop\n") # Write commands to add editable files for fname in sorted(self.coder.abs_fnames): rel_fname = self.coder.get_rel_fname(fname) diff --git a/aider/io.py b/aider/io.py index 4c008070b..67c5c3548 100644 --- a/aider/io.py +++ b/aider/io.py @@ -4,6 +4,7 @@ import threading from collections import defaultdict from dataclasses import dataclass from datetime import datetime +from io import StringIO from pathlib import Path from prompt_toolkit.completion import Completer, Completion, ThreadedCompleter @@ -16,6 +17,7 @@ from prompt_toolkit.shortcuts import CompleteStyle, PromptSession from prompt_toolkit.styles import Style from pygments.lexers import MarkdownLexer, guess_lexer_for_filename from pygments.token import Token +from rich.columns import Columns from rich.console import Console from rich.markdown import Markdown from rich.style import Style as RichStyle @@ -748,17 +750,35 @@ class InputOutput: self.chat_history_file = None # Disable further attempts to write def format_files_for_input(self, rel_fnames, rel_read_only_fnames): - read_only_files = [] - for full_path in sorted(rel_read_only_fnames or []): - read_only_files.append(f"{full_path} (read only)") + if not self.pretty: + read_only_files = [] + for full_path in sorted(rel_read_only_fnames or []): + read_only_files.append(f"{full_path} (read only)") - editable_files = [] - for full_path in sorted(rel_fnames): - if full_path in rel_read_only_fnames: - continue - editable_files.append(f"{full_path}") + editable_files = [] + for full_path in sorted(rel_fnames): + if full_path in rel_read_only_fnames: + continue + editable_files.append(f"{full_path}") - return "\n".join(read_only_files + editable_files) + "\n" + return "\n".join(read_only_files + editable_files) + "\n" + + output = StringIO() + console = Console(file=output, force_terminal=False) + + read_only_files = sorted(rel_read_only_fnames or []) + editable_files = [f for f in sorted(rel_fnames) if f not in rel_read_only_fnames] + + if read_only_files: + console.print("Read only files:", style="bold") + console.print(Columns(read_only_files)) + if editable_files: + if read_only_files: + console.print() + console.print("Editable files:", style="bold") + console.print(Columns(editable_files)) + + return output.getvalue() def get_rel_fname(fname, root): diff --git a/aider/linter.py b/aider/linter.py index 6bee6df8c..471914072 100644 --- a/aider/linter.py +++ b/aider/linter.py @@ -221,7 +221,12 @@ def basic_lint(fname, code): tree = parser.parse(bytes(code, "utf-8")) - errors = traverse_tree(tree.root_node) + try: + errors = traverse_tree(tree.root_node) + except RecursionError: + print(f"Unable to lint {fname} due to RecursionError") + return + if not errors: return diff --git a/aider/models.py b/aider/models.py index 614ef8410..b48454787 100644 --- a/aider/models.py +++ b/aider/models.py @@ -298,6 +298,23 @@ MODEL_SETTINGS = [ cache_control=True, reminder="user", ), + ModelSettings( + "anthropic/claude-3-5-sonnet-latest", + "diff", + weak_model_name="anthropic/claude-3-haiku-20240307", + editor_model_name="anthropic/claude-3-5-sonnet-20241022", + editor_edit_format="editor-diff", + use_repo_map=True, + examples_as_sys_msg=True, + extra_params={ + "extra_headers": { + "anthropic-beta": ANTHROPIC_BETA_HEADER, + }, + "max_tokens": 8192, + }, + cache_control=True, + reminder="user", + ), ModelSettings( "claude-3-5-sonnet-20241022", "diff", diff --git a/aider/utils.py b/aider/utils.py index 2d533896d..4cf45b6dd 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -275,8 +275,12 @@ class Spinner: self.start_time = time.time() self.last_update = 0 self.visible = False + self.is_tty = sys.stdout.isatty() def step(self): + if not self.is_tty: + return + current_time = time.time() if not self.visible and current_time - self.start_time >= 0.5: self.visible = True @@ -292,7 +296,7 @@ class Spinner: print(f"\r{self.text} {next(self.spinner_chars)}\r{self.text} ", end="", flush=True) def end(self): - if self.visible: + if self.visible and self.is_tty: print("\r" + " " * (len(self.text) + 3)) diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index f5ed93f46..57b7ab99d 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -19,7 +19,7 @@ cog.out(text) -### main branch +### Aider v0.61.0 - Load and save aider slash-commands to files: - `/save ` command will make a file of `/add` and `/read-only` commands that recreate the current file context in the chat. @@ -31,9 +31,13 @@ cog.out(text) - Bugfix for when diff mode flexibly handles the model using the wrong filename. - Displays filenames in sorted order for `/add` and `/read-only`. - New `--no-fancy-input` switch disables prompt toolkit input, now still available with `--no-pretty`. +- Override browser config with `--no-browser` or `--no-gui`. +- Offer to open documentation URLs when errors occur. - Properly support all o1 models, regardless of provider. +- Improved layout of filenames above input prompt. +- Better handle corrupted repomap tags cache. - Improved handling of API errors, especially when accessing the weak model. -- Aider wrote 70% of the code in this release. +- Aider wrote 68% of the code in this release. ### Aider v0.60.1 diff --git a/aider/website/_data/blame.yml b/aider/website/_data/blame.yml index bfe40b68e..66fadfeaf 100644 --- a/aider/website/_data/blame.yml +++ b/aider/website/_data/blame.yml @@ -2819,3 +2819,79 @@ fry69: 18 start_tag: v0.59.0 total_lines: 285 +- aider_percentage: 67.61 + aider_total: 860 + end_date: '2024-11-01' + end_tag: v0.61.0 + file_counts: + aider/__init__.py: + Paul Gauthier: 1 + aider/analytics.py: + Paul Gauthier: 75 + Paul Gauthier (aider): 89 + aider/args.py: + Paul Gauthier: 5 + Paul Gauthier (aider): 29 + aider/coders/base_coder.py: + Paul Gauthier: 56 + Paul Gauthier (aider): 43 + aider/coders/editblock_coder.py: + Paul Gauthier: 14 + aider/commands.py: + Paul Gauthier: 14 + Paul Gauthier (aider): 86 + aider/io.py: + Paul Gauthier: 12 + Paul Gauthier (aider): 32 + aider/linter.py: + Paul Gauthier: 6 + aider/main.py: + Paul Gauthier: 48 + Paul Gauthier (aider): 10 + aider/models.py: + Paul Gauthier: 54 + Paul Gauthier (aider): 63 + kAIto47802: 4 + aider/repomap.py: + Paul Gauthier: 12 + Paul Gauthier (aider): 52 + aider/sendchat.py: + Paul Gauthier: 23 + Paul Gauthier (aider): 23 + aider/urls.py: + Paul Gauthier: 2 + aider/utils.py: + Paul Gauthier (aider): 6 + scripts/issues.py: + Paul Gauthier (aider): 13 + scripts/pip-compile.sh: + Paul Gauthier (aider): 13 + scripts/update-docs.sh: + Paul Gauthier: 1 + Paul Gauthier (aider): 5 + tests/basic/test_analytics.py: + Paul Gauthier: 1 + Paul Gauthier (aider): 99 + tests/basic/test_commands.py: + Konstantin L: 34 + Paul Gauthier: 45 + Paul Gauthier (aider): 267 + tests/basic/test_io.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 4 + tests/basic/test_main.py: + Paul Gauthier (aider): 3 + tests/basic/test_models.py: + Paul Gauthier: 3 + Paul Gauthier (aider): 9 + tests/basic/test_sanity_check_repo.py: + Paul Gauthier (aider): 6 + tests/basic/test_sendchat.py: + Paul Gauthier (aider): 8 + grand_total: + Konstantin L: 34 + Paul Gauthier: 374 + Paul Gauthier (aider): 860 + kAIto47802: 4 + start_tag: v0.60.0 + total_lines: 1272 diff --git a/aider/website/_posts/2024-05-24-self-assembly.md b/aider/website/_posts/2024-05-24-self-assembly.md index 66fd36b27..4ccb9af96 100644 --- a/aider/website/_posts/2024-05-24-self-assembly.md +++ b/aider/website/_posts/2024-05-24-self-assembly.md @@ -12,6 +12,10 @@ nav_exclude: true [![self assembly](/assets/self-assembly.jpg)](https://aider.chat/assets/self-assembly.jpg) +{: .note } +This article is quite out dated. For current statistics, see +[aider's release history](/HISTORY.html). + The [aider git repo](https://github.com/Aider-AI/aider) currently contains about 4K commits and 14K lines of code. diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 97be9c403..a75edfd48 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -221,3 +221,135 @@ {"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409766} {"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409766} {"event": "command_exit", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409782} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410248} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410250} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410851} +{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410852} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410896} +{"event": "command_chat-mode", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410902} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 6309, "completion_tokens": 904, "total_tokens": 7213, "cost": 0.032487, "total_cost": 0.032487, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410958} +{"event": "command_code", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410990} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 9288, "completion_tokens": 448, "total_tokens": 9736, "cost": 0.034584000000000004, "total_cost": 0.067071, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411002} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411007} +{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411007} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411013} +{"event": "command_read-only", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411019} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 7880, "completion_tokens": 325, "total_tokens": 8205, "cost": 0.028515000000000002, "total_cost": 0.095586, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411067} +{"event": "command_code", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411120} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 10269, "completion_tokens": 375, "total_tokens": 10644, "cost": 0.036432, "total_cost": 0.132018, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411129} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411166} +{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411167} +{"event": "command_read-only", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411172} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411220} +{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411220} +{"event": "command_read-only", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411222} +{"event": "command_chat-mode", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411276} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 10770, "completion_tokens": 174, "total_tokens": 10944, "cost": 0.03492, "total_cost": 0.166938, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411291} +{"event": "command_exit", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411314} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411351} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411422} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411423} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411552} +{"event": "model warning", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411554} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411577} +{"event": "model warning", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411578} +{"event": "cli session", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411580} +{"event": "message_send", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "edit_format": "diff", "prompt_tokens": 2749, "completion_tokens": 52, "total_tokens": 2801, "cost": 0.0, "total_cost": 0.0, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411584} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411627} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411751} +{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411839} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411842} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 14351, "completion_tokens": 440, "total_tokens": 14791, "cost": 0.049653, "total_cost": 0.216591, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411862} +{"event": "command_undo", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411880} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 14896, "completion_tokens": 266, "total_tokens": 15162, "cost": 0.048678, "total_cost": 0.265269, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411902} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411941} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 27430, "completion_tokens": 608, "total_tokens": 28038, "cost": 0.09141, "total_cost": 0.35667899999999997, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411960} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 27414, "completion_tokens": 506, "total_tokens": 27920, "cost": 0.089832, "total_cost": 0.446511, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411984} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 28297, "completion_tokens": 343, "total_tokens": 28640, "cost": 0.090036, "total_cost": 0.536547, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412019} +{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412065} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412068} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412073} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412073} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412074} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 9491, "completion_tokens": 158, "total_tokens": 9649, "cost": 0.030843000000000002, "total_cost": 0.56739, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412084} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412095} +{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412095} +{"event": "command_exit", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412096} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412186} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412187} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412189} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412300} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412301} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412302} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412321} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412321} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412322} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413528} +{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413531} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413534} +{"event": "command_chat-mode", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413538} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 8811, "completion_tokens": 309, "total_tokens": 9120, "cost": 0.031068000000000002, "total_cost": 0.031068000000000002, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413585} +{"event": "command_run", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413632} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 15950, "completion_tokens": 330, "total_tokens": 16280, "cost": 0.05280000000000001, "total_cost": 0.08386800000000001, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413669} +{"event": "command_run", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413704} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 18174, "completion_tokens": 292, "total_tokens": 18466, "cost": 0.058902, "total_cost": 0.14277, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413719} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413935} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413935} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413937} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414047} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414048} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414048} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414048} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414050} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415697} +{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415697} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 3293, "completion_tokens": 439, "total_tokens": 3732, "cost": 0.016464, "total_cost": 0.016464, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415752} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 3960, "completion_tokens": 517, "total_tokens": 4477, "cost": 0.019635, "total_cost": 0.036099, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415790} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415930} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415931} +{"event": "command_drop", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473870} +{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473873} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 4607, "completion_tokens": 97, "total_tokens": 4704, "cost": 0.015276, "total_cost": 0.5826659999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473888} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473908} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473916} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 5842, "completion_tokens": 604, "total_tokens": 6446, "cost": 0.026586, "total_cost": 0.6092519999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473929} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730474024} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730474025} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730474027} +{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477197} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477206} +{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477229} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 18098, "completion_tokens": 632, "total_tokens": 18730, "cost": 0.063774, "total_cost": 0.6730259999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477334} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 18968, "completion_tokens": 219, "total_tokens": 19187, "cost": 0.060189000000000006, "total_cost": 0.733215, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477568} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477576} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477576} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 19375, "completion_tokens": 91, "total_tokens": 19466, "cost": 0.05949, "total_cost": 0.792705, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477578} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 19587, "completion_tokens": 158, "total_tokens": 19745, "cost": 0.061131, "total_cost": 0.853836, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477585} +{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 20082, "completion_tokens": 294, "total_tokens": 20376, "cost": 0.064656, "total_cost": 0.9184920000000001, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477595} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477605} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477606} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477636} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477636} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477655} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477656} +{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 37070, "completion_tokens": 0, "total_tokens": 37070, "cost": 0.005560499999999993, "total_cost": 0.005560499999999993, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477731} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477733} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477733} +{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 2022, "completion_tokens": 0, "total_tokens": 2022, "cost": 0.00030329999999999995, "total_cost": 0.00030329999999999995, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477738} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477767} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477767} +{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 674, "completion_tokens": 0, "total_tokens": 674, "cost": 0.00010109999999999999, "total_cost": 0.00010109999999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477770} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477789} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477789} +{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 674, "completion_tokens": 0, "total_tokens": 674, "cost": 0.00010109999999999999, "total_cost": 0.00010109999999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477792} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477822} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477822} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477834} +{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477835} +{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 4044, "completion_tokens": 0, "total_tokens": 4044, "cost": 0.0006066, "total_cost": 0.0006066, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477852} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730478267} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730478268} +{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730478719} +{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730479180} +{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730479181} + diff --git a/aider/website/assets/sample.aider.conf.yml b/aider/website/assets/sample.aider.conf.yml index ab7c8a98b..56b05d35e 100644 --- a/aider/website/assets/sample.aider.conf.yml +++ b/aider/website/assets/sample.aider.conf.yml @@ -350,7 +350,7 @@ ## Specify the config file (default: search for .aider.conf.yml in git root, cwd or home directory) #config: xxx -## Run aider in your browser +## Run aider in your browser (default: False) #gui: false ## Enable/disable suggesting shell commands (default: True) diff --git a/aider/website/assets/sample.env b/aider/website/assets/sample.env index 3daf35b00..9b787dc9f 100644 --- a/aider/website/assets/sample.env +++ b/aider/website/assets/sample.env @@ -333,7 +333,7 @@ ## Specify the encoding for input and output (default: utf-8) #AIDER_ENCODING=utf-8 -## Run aider in your browser +## Run aider in your browser (default: False) #AIDER_GUI=false ## Enable/disable suggesting shell commands (default: True) diff --git a/aider/website/docs/config/adv-model-settings.md b/aider/website/docs/config/adv-model-settings.md index bd292611e..18901f51a 100644 --- a/aider/website/docs/config/adv-model-settings.md +++ b/aider/website/docs/config/adv-model-settings.md @@ -490,6 +490,25 @@ cog.out("```\n") use_system_prompt: true use_temperature: true weak_model_name: anthropic/claude-3-haiku-20240307 +- cache_control: true + caches_by_default: false + edit_format: diff + editor_edit_format: editor-diff + editor_model_name: anthropic/claude-3-5-sonnet-20241022 + examples_as_sys_msg: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31 + max_tokens: 8192 + lazy: false + name: anthropic/claude-3-5-sonnet-latest + reminder: user + send_undo_reply: false + streaming: true + use_repo_map: true + use_system_prompt: true + use_temperature: true + weak_model_name: anthropic/claude-3-haiku-20240307 - cache_control: true caches_by_default: false edit_format: diff diff --git a/aider/website/docs/config/aider_conf.md b/aider/website/docs/config/aider_conf.md index 98cc532e8..ef6abbf4a 100644 --- a/aider/website/docs/config/aider_conf.md +++ b/aider/website/docs/config/aider_conf.md @@ -406,7 +406,7 @@ cog.outl("```") ## Specify the config file (default: search for .aider.conf.yml in git root, cwd or home directory) #config: xxx -## Run aider in your browser +## Run aider in your browser (default: False) #gui: false ## Enable/disable suggesting shell commands (default: True) diff --git a/aider/website/docs/config/dotenv.md b/aider/website/docs/config/dotenv.md index 0cc735577..d7e1735e5 100644 --- a/aider/website/docs/config/dotenv.md +++ b/aider/website/docs/config/dotenv.md @@ -375,7 +375,7 @@ cog.outl("```") ## Specify the encoding for input and output (default: utf-8) #AIDER_ENCODING=utf-8 -## Run aider in your browser +## Run aider in your browser (default: False) #AIDER_GUI=false ## Enable/disable suggesting shell commands (default: True) diff --git a/aider/website/docs/config/options.md b/aider/website/docs/config/options.md index 7d89db873..5131631fc 100644 --- a/aider/website/docs/config/options.md +++ b/aider/website/docs/config/options.md @@ -69,7 +69,8 @@ usage: aider [-h] [--openai-api-key] [--anthropic-api-key] [--model] [--install-main-branch] [--upgrade] [--apply] [--yes-always] [-v] [--show-repo-map] [--show-prompts] [--exit] [--message] [--message-file] [--load] - [--encoding] [-c] [--gui] + [--encoding] [-c] + [--gui | --no-gui | --browser | --no-browser] [--suggest-shell-commands | --no-suggest-shell-commands] [--fancy-input | --no-fancy-input] [--voice-format] [--voice-language] @@ -631,12 +632,14 @@ Aliases: - `--config CONFIG_FILE` ### `--gui` -Run aider in your browser +Run aider in your browser (default: False) Default: False Environment variable: `AIDER_GUI` Aliases: - `--gui` + - `--no-gui` - `--browser` + - `--no-browser` ### `--suggest-shell-commands` Enable/disable suggesting shell commands (default: True) diff --git a/aider/website/docs/install/install.md b/aider/website/docs/install/install.md index 70a9b5754..f2dad3648 100644 --- a/aider/website/docs/install/install.md +++ b/aider/website/docs/install/install.md @@ -9,6 +9,10 @@ nav_order: 10 - TOC {:toc} +## Python version + +Aider currently works with python 3.9-3.12. + ## Install git Make sure you have git installed. diff --git a/aider/website/docs/more/analytics.md b/aider/website/docs/more/analytics.md index ac5f7946e..61e90218b 100644 --- a/aider/website/docs/more/analytics.md +++ b/aider/website/docs/more/analytics.md @@ -1,6 +1,7 @@ --- parent: More info nav_order: 500 +description: Opt-in, anonymous, no personal info. --- # Analytics diff --git a/aider/website/docs/usage/commands.md b/aider/website/docs/usage/commands.md index b8970693c..bc5da3e23 100644 --- a/aider/website/docs/usage/commands.md +++ b/aider/website/docs/usage/commands.md @@ -69,6 +69,8 @@ The interactive prompt is built with [prompt-toolkit](https://github.com/prompt- ### Emacs +- `Up Arrow` : Scroll back through previously sent messages. +- `Down Arrow` : Scroll forward through previously sent messages. - `Ctrl-A` : Move cursor to the start of the line. - `Ctrl-B` : Move cursor back one character. - `Ctrl-D` : Delete the character under the cursor. @@ -85,6 +87,8 @@ The interactive prompt is built with [prompt-toolkit](https://github.com/prompt- To use vi/vim keybindings, run aider with the `--vim` switch. +- `Up Arrow` : Scroll back through previously sent messages. +- `Down Arrow` : Scroll forward through previously sent messages. - `Esc` : Switch to command mode. - `i` : Switch to insert mode. - `a` : Move cursor one character to the right and switch to insert mode. diff --git a/requirements.txt b/requirements.txt index 15ebf1078..b77960136 100644 --- a/requirements.txt +++ b/requirements.txt @@ -70,7 +70,7 @@ httpcore==1.0.6 # via httpx httpx==0.27.2 # via openai -huggingface-hub==0.26.1 +huggingface-hub==0.26.2 # via tokenizers idna==3.10 # via @@ -86,7 +86,7 @@ importlib-resources==6.4.5 # via -r requirements/requirements.in jinja2==3.1.4 # via litellm -jiter==0.6.1 +jiter==0.7.0 # via openai json5==0.9.25 # via -r requirements/requirements.in @@ -96,7 +96,7 @@ jsonschema==4.23.0 # litellm jsonschema-specifications==2024.10.1 # via jsonschema -litellm==1.50.4 +litellm==1.51.2 # via -r requirements/requirements.in markdown-it-py==3.0.0 # via rich @@ -120,7 +120,7 @@ numpy==1.26.4 # via # -r requirements/requirements.in # scipy -openai==1.52.2 +openai==1.53.0 # via litellm packaging==24.1 # via @@ -132,7 +132,7 @@ pathspec==0.12.1 # grep-ast pexpect==4.9.0 # via -r requirements/requirements.in -pillow==11.0.0 +pillow==10.4.0 # via -r requirements/requirements.in posthog==3.7.0 # via -r requirements/requirements.in @@ -187,7 +187,7 @@ requests==2.32.3 # tiktoken rich==13.9.3 # via -r requirements/requirements.in -rpds-py==0.20.0 +rpds-py==0.20.1 # via # jsonschema # referencing @@ -217,7 +217,7 @@ tokenizers==0.19.1 # via # -r requirements/requirements.in # litellm -tqdm==4.66.5 +tqdm==4.66.6 # via # huggingface-hub # openai @@ -239,7 +239,7 @@ urllib3==2.2.3 # requests wcwidth==0.2.13 # via prompt-toolkit -yarl==1.16.0 +yarl==1.17.1 # via aiohttp zipp==3.20.2 # via importlib-metadata diff --git a/requirements/requirements-browser.txt b/requirements/requirements-browser.txt index a5a3950c7..538b5dc9b 100644 --- a/requirements/requirements-browser.txt +++ b/requirements/requirements-browser.txt @@ -2,13 +2,15 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/requirements-browser.txt requirements/requirements-browser.in +# pip-compile --constraint=requirements.txt --constraint=requirements/requirements-dev.txt --constraint=requirements/requirements-help.txt --output-file=requirements/requirements-browser.txt requirements/requirements-browser.in # -altair==4.2.2 +altair==5.4.1 # via streamlit attrs==24.2.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-help.txt # jsonschema # referencing blinker==1.8.2 @@ -17,151 +19,195 @@ cachetools==5.5.0 # via streamlit certifi==2024.8.30 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # requests charset-normalizer==3.4.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # requests click==8.1.7 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # streamlit -entrypoints==0.4 - # via altair gitdb==4.0.11 # via + # -c requirements.txt # -c requirements/../requirements.txt # gitpython gitpython==3.1.43 # via + # -c requirements.txt # -c requirements/../requirements.txt # streamlit idna==3.10 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # requests -importlib-metadata==7.2.1 - # via - # -c requirements/../requirements.txt - # streamlit jinja2==3.1.4 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # altair # pydeck jsonschema==4.23.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # altair jsonschema-specifications==2024.10.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # jsonschema markdown-it-py==3.0.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # rich markupsafe==3.0.2 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # jinja2 mdurl==0.1.2 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # markdown-it-py +narwhals==1.12.1 + # via altair numpy==1.26.4 # via + # -c requirements.txt # -c requirements/../requirements.txt - # altair + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # pandas - # pyarrow # pydeck # streamlit packaging==24.1 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt + # altair # streamlit pandas==2.2.3 # via - # altair + # -c requirements/requirements-dev.txt # streamlit -pillow==11.0.0 +pillow==10.4.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # streamlit -protobuf==3.20.3 +protobuf==5.28.3 # via streamlit -pyarrow==17.0.0 +pyarrow==18.0.0 # via streamlit pydeck==0.9.1 # via streamlit pygments==2.18.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # rich -pympler==1.1 - # via streamlit python-dateutil==2.9.0.post0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # pandas - # streamlit pytz==2024.2 - # via pandas + # via + # -c requirements/requirements-dev.txt + # pandas referencing==0.35.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # jsonschema # jsonschema-specifications requests==2.32.3 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # streamlit rich==13.9.3 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # streamlit -rpds-py==0.20.0 +rpds-py==0.20.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # jsonschema # referencing six==1.16.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # python-dateutil smmap==5.0.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # gitdb -streamlit==1.22.0 +streamlit==1.39.0 # via -r requirements/requirements-browser.in tenacity==8.5.0 - # via streamlit + # via + # -c requirements/requirements-help.txt + # streamlit toml==0.10.2 # via streamlit -toolz==1.0.0 - # via altair tornado==6.4.1 # via streamlit typing-extensions==4.12.2 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt + # altair # streamlit tzdata==2024.2 - # via pandas -tzlocal==5.2 - # via streamlit + # via + # -c requirements/requirements-dev.txt + # pandas urllib3==2.2.3 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # requests -validators==0.34.0 - # via streamlit watchdog==4.0.2 # via -r requirements/requirements-browser.in -zipp==3.20.2 - # via - # -c requirements/../requirements.txt - # importlib-metadata diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index 9dcd23c6c..945efbf95 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in +# pip-compile --constraint=requirements.txt --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in # alabaster==1.0.0 # via sphinx @@ -12,16 +12,19 @@ build==1.2.2.post1 # via pip-tools certifi==2024.8.30 # via + # -c requirements.txt # -c requirements/../requirements.txt # requests cfgv==3.4.0 # via pre-commit charset-normalizer==3.4.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # requests click==8.1.7 # via + # -c requirements.txt # -c requirements/../requirements.txt # pip-tools # typer @@ -45,6 +48,7 @@ docutils==0.21.2 # sphinx-rtd-theme filelock==3.16.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # virtualenv fonttools==4.54.1 @@ -53,6 +57,7 @@ identify==2.6.1 # via pre-commit idna==3.10 # via + # -c requirements.txt # -c requirements/../requirements.txt # requests imagesize==1.4.1 @@ -63,6 +68,7 @@ iniconfig==2.0.0 # via pytest jinja2==3.1.4 # via + # -c requirements.txt # -c requirements/../requirements.txt # sphinx kiwisolver==1.4.7 @@ -71,16 +77,19 @@ lox==0.12.0 # via -r requirements/requirements-dev.in markdown-it-py==3.0.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # rich markupsafe==3.0.2 # via + # -c requirements.txt # -c requirements/../requirements.txt # jinja2 matplotlib==3.9.2 # via -r requirements/requirements-dev.in mdurl==0.1.2 # via + # -c requirements.txt # -c requirements/../requirements.txt # markdown-it-py multiprocess==0.70.17 @@ -89,12 +98,14 @@ nodeenv==1.9.1 # via pre-commit numpy==1.26.4 # via + # -c requirements.txt # -c requirements/../requirements.txt # contourpy # matplotlib # pandas packaging==24.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # build # matplotlib @@ -104,8 +115,9 @@ pandas==2.2.3 # via -r requirements/requirements-dev.in pathos==0.3.3 # via lox -pillow==11.0.0 +pillow==10.4.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # matplotlib pip-tools==7.4.1 @@ -122,6 +134,7 @@ pre-commit==4.0.1 # via -r requirements/requirements-dev.in pygments==2.18.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # rich # sphinx @@ -135,6 +148,7 @@ pytest==8.3.3 # via -r requirements/requirements-dev.in python-dateutil==2.9.0.post0 # via + # -c requirements.txt # -c requirements/../requirements.txt # matplotlib # pandas @@ -142,14 +156,17 @@ pytz==2024.2 # via pandas pyyaml==6.0.2 # via + # -c requirements.txt # -c requirements/../requirements.txt # pre-commit requests==2.32.3 # via + # -c requirements.txt # -c requirements/../requirements.txt # sphinx rich==13.9.3 # via + # -c requirements.txt # -c requirements/../requirements.txt # typer semver==3.0.2 @@ -158,6 +175,7 @@ shellingham==1.5.4 # via typer six==1.16.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # python-dateutil snowballstemmer==2.2.0 @@ -186,15 +204,17 @@ typer==0.12.5 # via -r requirements/requirements-dev.in typing-extensions==4.12.2 # via + # -c requirements.txt # -c requirements/../requirements.txt # typer tzdata==2024.2 # via pandas urllib3==2.2.3 # via + # -c requirements.txt # -c requirements/../requirements.txt # requests -virtualenv==20.27.0 +virtualenv==20.27.1 # via pre-commit wheel==0.44.0 # via pip-tools diff --git a/requirements/requirements-help.txt b/requirements/requirements-help.txt index 83804923b..cbaa2e0a1 100644 --- a/requirements/requirements-help.txt +++ b/requirements/requirements-help.txt @@ -2,46 +2,58 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/requirements-help.txt requirements/requirements-help.in +# pip-compile --constraint=requirements.txt --constraint=requirements/requirements-dev.txt --output-file=requirements/requirements-help.txt requirements/requirements-help.in # aiohappyeyeballs==2.4.3 # via + # -c requirements.txt # -c requirements/../requirements.txt # aiohttp aiohttp==3.10.10 # via + # -c requirements.txt # -c requirements/../requirements.txt # huggingface-hub # llama-index-core aiosignal==1.3.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # aiohttp annotated-types==0.7.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # pydantic anyio==4.6.2.post1 # via + # -c requirements.txt # -c requirements/../requirements.txt # httpx attrs==24.2.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # aiohttp certifi==2024.8.30 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # httpcore # httpx # requests charset-normalizer==3.4.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # requests click==8.1.7 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # nltk dataclasses-json==0.6.7 # via llama-index-core @@ -51,17 +63,21 @@ dirtyjson==1.0.8 # via llama-index-core filelock==3.16.1 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # huggingface-hub # torch # transformers frozenlist==1.5.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # aiohttp # aiosignal fsspec==2024.10.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # huggingface-hub # llama-index-core @@ -72,18 +88,22 @@ greenlet==3.0.3 # sqlalchemy h11==0.14.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # httpcore httpcore==1.0.6 # via + # -c requirements.txt # -c requirements/../requirements.txt # httpx httpx==0.27.2 # via + # -c requirements.txt # -c requirements/../requirements.txt # llama-index-core -huggingface-hub[inference]==0.26.1 +huggingface-hub[inference]==0.26.2 # via + # -c requirements.txt # -c requirements/../requirements.txt # llama-index-embeddings-huggingface # sentence-transformers @@ -91,20 +111,24 @@ huggingface-hub[inference]==0.26.1 # transformers idna==3.10 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # anyio # httpx # requests # yarl jinja2==3.1.4 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # torch joblib==1.4.2 # via # nltk # scikit-learn -llama-index-core==0.11.20 +llama-index-core==0.11.21 # via # -r requirements/requirements-help.in # llama-index-embeddings-huggingface @@ -112,7 +136,9 @@ llama-index-embeddings-huggingface==0.3.1 # via -r requirements/requirements-help.in markupsafe==3.0.2 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # jinja2 marshmallow==3.23.0 # via dataclasses-json @@ -120,6 +146,7 @@ mpmath==1.3.0 # via sympy multidict==6.1.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # aiohttp # yarl @@ -129,6 +156,7 @@ nest-asyncio==1.6.0 # via llama-index-core networkx==3.2.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # llama-index-core # torch @@ -136,49 +164,63 @@ nltk==3.9.1 # via llama-index-core numpy==1.26.4 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # llama-index-core # scikit-learn # scipy # transformers packaging==24.1 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # huggingface-hub # marshmallow # transformers -pillow==11.0.0 +pillow==10.4.0 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # llama-index-core # sentence-transformers propcache==0.2.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # yarl pydantic==2.9.2 # via + # -c requirements.txt # -c requirements/../requirements.txt # llama-index-core pydantic-core==2.23.4 # via + # -c requirements.txt # -c requirements/../requirements.txt # pydantic pyyaml==6.0.2 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # huggingface-hub # llama-index-core # transformers regex==2024.9.11 # via + # -c requirements.txt # -c requirements/../requirements.txt # nltk # tiktoken # transformers requests==2.32.3 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # huggingface-hub # llama-index-core # tiktoken @@ -189,6 +231,7 @@ scikit-learn==1.5.2 # via sentence-transformers scipy==1.13.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # scikit-learn # sentence-transformers @@ -196,6 +239,7 @@ sentence-transformers==3.2.1 # via llama-index-embeddings-huggingface sniffio==1.3.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # anyio # httpx @@ -211,16 +255,19 @@ threadpoolctl==3.5.0 # via scikit-learn tiktoken==0.8.0 # via + # -c requirements.txt # -c requirements/../requirements.txt # llama-index-core tokenizers==0.19.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # transformers torch==2.2.2 # via sentence-transformers -tqdm==4.66.5 +tqdm==4.66.6 # via + # -c requirements.txt # -c requirements/../requirements.txt # huggingface-hub # llama-index-core @@ -231,7 +278,9 @@ transformers==4.44.2 # via sentence-transformers typing-extensions==4.12.2 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # huggingface-hub # llama-index-core # pydantic @@ -245,13 +294,16 @@ typing-inspect==0.9.0 # llama-index-core urllib3==2.2.3 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-dev.txt # requests wrapt==1.16.0 # via # deprecated # llama-index-core -yarl==1.16.0 +yarl==1.17.1 # via + # -c requirements.txt # -c requirements/../requirements.txt # aiohttp diff --git a/requirements/requirements-playwright.txt b/requirements/requirements-playwright.txt index 0d92718fd..6e63e4666 100644 --- a/requirements/requirements-playwright.txt +++ b/requirements/requirements-playwright.txt @@ -2,10 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/requirements-playwright.txt requirements/requirements-playwright.in +# pip-compile --constraint=requirements.txt --constraint=requirements/requirements-browser.txt --constraint=requirements/requirements-dev.txt --constraint=requirements/requirements-help.txt --output-file=requirements/requirements-playwright.txt requirements/requirements-playwright.in # greenlet==3.0.3 # via + # -c requirements/requirements-help.txt # -r requirements/requirements-playwright.in # playwright playwright==1.47.0 @@ -14,5 +15,9 @@ pyee==12.0.0 # via playwright typing-extensions==4.12.2 # via + # -c requirements.txt # -c requirements/../requirements.txt + # -c requirements/requirements-browser.txt + # -c requirements/requirements-dev.txt + # -c requirements/requirements-help.txt # pyee diff --git a/requirements/requirements.in b/requirements/requirements.in index a1a88cba9..6e1ba07ef 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -17,7 +17,6 @@ sounddevice soundfile beautifulsoup4 PyYAML -Pillow diff-match-patch pypandoc litellm @@ -57,3 +56,6 @@ numpy<2 # Going past this makes dependencies unresolvable # Seems to be caused by sentence-transformers tokenizers==0.19.1 + +# streamlit 1.39.0 depends on this, as far back as 1.22 which is ancient and doesn't have chat ui +Pillow<11 diff --git a/scripts/pip-compile.sh b/scripts/pip-compile.sh index 0f0ae77b9..9d8a8ff3c 100755 --- a/scripts/pip-compile.sh +++ b/scripts/pip-compile.sh @@ -3,16 +3,23 @@ # exit when any command fails set -e +# First compile the base requirements pip-compile \ requirements/requirements.in \ --output-file=requirements.txt \ $1 -for SUFFIX in dev help browser playwright; do +# Then compile each additional requirements file in sequence +SUFFIXES=(dev help browser playwright) +CONSTRAINTS="--constraint=requirements.txt" +for SUFFIX in "${SUFFIXES[@]}"; do pip-compile \ requirements/requirements-${SUFFIX}.in \ --output-file=requirements/requirements-${SUFFIX}.txt \ + ${CONSTRAINTS} \ $1 -done + # Add this file as a constraint for the next iteration + CONSTRAINTS+=" --constraint=requirements/requirements-${SUFFIX}.txt" +done diff --git a/tests/basic/test_commands.py b/tests/basic/test_commands.py index 6a91eb19f..7288a8d6d 100644 --- a/tests/basic/test_commands.py +++ b/tests/basic/test_commands.py @@ -875,6 +875,34 @@ class TestCommands(TestCase): os.unlink(external_file1_path) os.unlink(external_file2_path) + def test_cmd_read_only_with_image_file(self): + with GitTemporaryDirectory() as repo_dir: + io = InputOutput(pretty=False, fancy_input=False, yes=False) + coder = Coder.create(self.GPT35, None, io) + commands = Commands(io, coder) + + # Create a test image file + test_file = Path(repo_dir) / "test_image.jpg" + test_file.write_text("Mock image content") + + # Test with non-vision model + commands.cmd_read_only(str(test_file)) + self.assertEqual(len(coder.abs_read_only_fnames), 0) + + # Test with vision model + vision_model = Model("gpt-4-vision-preview") + vision_coder = Coder.create(vision_model, None, io) + vision_commands = Commands(io, vision_coder) + + vision_commands.cmd_read_only(str(test_file)) + self.assertEqual(len(vision_coder.abs_read_only_fnames), 1) + self.assertTrue( + any( + os.path.samefile(str(test_file), fname) + for fname in vision_coder.abs_read_only_fnames + ) + ) + def test_cmd_read_only_with_glob_pattern(self): with GitTemporaryDirectory() as repo_dir: io = InputOutput(pretty=False, fancy_input=False, yes=False)