From c980fd0e775e2d61d4bd88f7cc85f29717b0d1e6 Mon Sep 17 00:00:00 2001 From: Jon Keys Date: Tue, 25 Feb 2025 18:26:36 -0800 Subject: [PATCH 001/459] use playwright if available when invoking scraper via cli --- aider/gui.py | 4 ++-- aider/scrape.py | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/aider/gui.py b/aider/gui.py index 7fa90bc38..6c5b012dc 100755 --- a/aider/gui.py +++ b/aider/gui.py @@ -11,7 +11,7 @@ from aider.coders import Coder from aider.dump import dump # noqa: F401 from aider.io import InputOutput from aider.main import main as cli_main -from aider.scrape import Scraper +from aider.scrape import Scraper, has_playwright class CaptureIO(InputOutput): @@ -484,7 +484,7 @@ class GUI: url = self.web_content if not self.state.scraper: - self.scraper = Scraper(print_error=self.info) + self.scraper = Scraper(print_error=self.info, playwright_available=has_playwright()) content = self.scraper.scrape(url) or "" if content.strip(): diff --git a/aider/scrape.py b/aider/scrape.py index 7977a8548..04e44bc81 100755 --- a/aider/scrape.py +++ b/aider/scrape.py @@ -14,7 +14,7 @@ aider_user_agent = f"Aider/{__version__} +{urls.website}" # platforms. -def install_playwright(io): +def check_env(): try: from playwright.sync_api import sync_playwright @@ -29,6 +29,16 @@ def install_playwright(io): except Exception: has_chromium = False + return has_pip, has_chromium + + +def has_playwright(): + has_pip, has_chromium = check_env() + return has_pip and has_chromium + + +def install_playwright(io): + has_pip, has_chromium = check_env() if has_pip and has_chromium: return True @@ -261,7 +271,7 @@ def slimdown_html(soup): def main(url): - scraper = Scraper() + scraper = Scraper(playwright_available=has_playwright()) content = scraper.scrape(url) print(content) From c1b2ff20de98236c3f2bff4af578619eec1003a2 Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:02:19 +0700 Subject: [PATCH 002/459] feat: Add method to fetch model info from openrouter pages --- aider/models.py | 45 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/aider/models.py b/aider/models.py index cc54f03d3..8289a424a 100644 --- a/aider/models.py +++ b/aider/models.py @@ -211,7 +211,7 @@ class ModelInfoManager: def get_model_info(self, model): cached_info = self.get_model_from_cached_json_db(model) - + litellm_info = None if litellm._lazy_module or not cached_info: try: @@ -219,13 +219,52 @@ class ModelInfoManager: except Exception as ex: if "model_prices_and_context_window.json" not in str(ex): print(str(ex)) - + if litellm_info: return litellm_info - + + if not cached_info and model.startswith("openrouter/"): + openrouter_info = self.fetch_openrouter_model_info(model) + if openrouter_info: + return openrouter_info + return cached_info + def fetch_openrouter_model_info(self, model): + """ + Fetch model info by scraping the openrouter model page. + Expected URL: https://openrouter.ai/ + Example: openrouter/qwen/qwen-2.5-72b-instruct:free + Returns a dict with keys: max_input_tokens, input_cost, output_cost. + """ + url_part = model[len("openrouter/"):] + url = "https://openrouter.ai/" + url_part + import requests + try: + response = requests.get(url, timeout=5) + if response.status_code != 200: + return {} + html = response.text + from bs4 import BeautifulSoup + soup = BeautifulSoup(html, "html.parser") + text = soup.get_text() + import re + context_match = re.search(r"([\d,]+)\s*context", text) + if context_match: + context_str = context_match.group(1).replace(",", "") + context_size = int(context_str) + else: + context_size = None + input_cost_match = re.search(r"\$\s*0\s*/M input tokens", text, re.IGNORECASE) + output_cost_match = re.search(r"\$\s*0\s*/M output tokens", text, re.IGNORECASE) + input_cost = 0 if input_cost_match else None + output_cost = 0 if output_cost_match else None + return {"max_input_tokens": context_size, "input_cost": input_cost, "output_cost": output_cost} + except Exception as e: + print("Error fetching openrouter info:", str(e)) + return {} + model_info_manager = ModelInfoManager() From 4600dbcda5c991b9f630cfd571bb8f884c5e41ab Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:05:55 +0700 Subject: [PATCH 003/459] feat: Print parsed model parameters in fetch_openrouter_model_info() method --- aider/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aider/models.py b/aider/models.py index 8289a424a..108dd9a97 100644 --- a/aider/models.py +++ b/aider/models.py @@ -260,7 +260,9 @@ class ModelInfoManager: output_cost_match = re.search(r"\$\s*0\s*/M output tokens", text, re.IGNORECASE) input_cost = 0 if input_cost_match else None output_cost = 0 if output_cost_match else None - return {"max_input_tokens": context_size, "input_cost": input_cost, "output_cost": output_cost} + params = {"max_input_tokens": context_size, "input_cost": input_cost, "output_cost": output_cost} + print("Parsed model parameters:", params) + return params except Exception as e: print("Error fetching openrouter info:", str(e)) return {} From 08d48f42ad6c826ad108d5d3becef2c602c27fe3 Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:08:57 +0700 Subject: [PATCH 004/459] refactor: Remove BeautifulSoup dependency and use regex to strip HTML tags --- aider/models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/aider/models.py b/aider/models.py index 108dd9a97..28bc05f85 100644 --- a/aider/models.py +++ b/aider/models.py @@ -246,10 +246,8 @@ class ModelInfoManager: if response.status_code != 200: return {} html = response.text - from bs4 import BeautifulSoup - soup = BeautifulSoup(html, "html.parser") - text = soup.get_text() import re + text = re.sub(r'<[^>]+>', ' ', html) context_match = re.search(r"([\d,]+)\s*context", text) if context_match: context_str = context_match.group(1).replace(",", "") From 5e48f6898d17163e94a30c15df4507a6c23711cb Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:10:23 +0700 Subject: [PATCH 005/459] fix: Improve print statement to include model name in parameters output --- aider/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/models.py b/aider/models.py index 28bc05f85..fbe6ed181 100644 --- a/aider/models.py +++ b/aider/models.py @@ -259,7 +259,7 @@ class ModelInfoManager: input_cost = 0 if input_cost_match else None output_cost = 0 if output_cost_match else None params = {"max_input_tokens": context_size, "input_cost": input_cost, "output_cost": output_cost} - print("Parsed model parameters:", params) + print(f"Model '{model}': Parsed parameters: {params}") return params except Exception as e: print("Error fetching openrouter info:", str(e)) From 44e5525e6f46f04b020b3feea19b63669d214dd7 Mon Sep 17 00:00:00 2001 From: Stefan Hladnik Date: Tue, 18 Mar 2025 03:17:56 +0700 Subject: [PATCH 006/459] style: Remove unnecessary blank lines in ModelInfoManager class --- aider/models.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/aider/models.py b/aider/models.py index fbe6ed181..1bf2168b6 100644 --- a/aider/models.py +++ b/aider/models.py @@ -211,7 +211,7 @@ class ModelInfoManager: def get_model_info(self, model): cached_info = self.get_model_from_cached_json_db(model) - + litellm_info = None if litellm._lazy_module or not cached_info: try: @@ -219,15 +219,15 @@ class ModelInfoManager: except Exception as ex: if "model_prices_and_context_window.json" not in str(ex): print(str(ex)) - + if litellm_info: return litellm_info - + if not cached_info and model.startswith("openrouter/"): openrouter_info = self.fetch_openrouter_model_info(model) if openrouter_info: return openrouter_info - + return cached_info @@ -264,7 +264,7 @@ class ModelInfoManager: except Exception as e: print("Error fetching openrouter info:", str(e)) return {} - + model_info_manager = ModelInfoManager() From 2651d9967681accad317e1b7023a7303e20c1a0a Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:17:57 +0700 Subject: [PATCH 007/459] feat: Update cost extraction to capture non-zero input/output costs --- aider/models.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aider/models.py b/aider/models.py index 1bf2168b6..53b99c772 100644 --- a/aider/models.py +++ b/aider/models.py @@ -254,10 +254,10 @@ class ModelInfoManager: context_size = int(context_str) else: context_size = None - input_cost_match = re.search(r"\$\s*0\s*/M input tokens", text, re.IGNORECASE) - output_cost_match = re.search(r"\$\s*0\s*/M output tokens", text, re.IGNORECASE) - input_cost = 0 if input_cost_match else None - output_cost = 0 if output_cost_match else None + input_cost_match = re.search(r"\$\s*([\d.]+)\s*/M input tokens", text, re.IGNORECASE) + output_cost_match = re.search(r"\$\s*([\d.]+)\s*/M output tokens", text, re.IGNORECASE) + input_cost = float(input_cost_match.group(1)) if input_cost_match else None + output_cost = float(output_cost_match.group(1)) if output_cost_match else None params = {"max_input_tokens": context_size, "input_cost": input_cost, "output_cost": output_cost} print(f"Model '{model}': Parsed parameters: {params}") return params From 29587cd07cc824ce2795f9b255540dd4c7f66575 Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:24:04 +0700 Subject: [PATCH 008/459] fix: Update return keys in fetch_openrouter_model_info() to match JSON metadata --- aider/models.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/aider/models.py b/aider/models.py index 53b99c772..1ca6276fd 100644 --- a/aider/models.py +++ b/aider/models.py @@ -236,7 +236,7 @@ class ModelInfoManager: Fetch model info by scraping the openrouter model page. Expected URL: https://openrouter.ai/ Example: openrouter/qwen/qwen-2.5-72b-instruct:free - Returns a dict with keys: max_input_tokens, input_cost, output_cost. + Returns a dict with keys: max_tokens, max_input_tokens, max_output_tokens, input_cost_per_token, output_cost_per_token. """ url_part = model[len("openrouter/"):] url = "https://openrouter.ai/" + url_part @@ -258,7 +258,13 @@ class ModelInfoManager: output_cost_match = re.search(r"\$\s*([\d.]+)\s*/M output tokens", text, re.IGNORECASE) input_cost = float(input_cost_match.group(1)) if input_cost_match else None output_cost = float(output_cost_match.group(1)) if output_cost_match else None - params = {"max_input_tokens": context_size, "input_cost": input_cost, "output_cost": output_cost} + params = { + "max_input_tokens": context_size, + "max_tokens": context_size, + "max_output_tokens": context_size, + "input_cost_per_token": input_cost, + "output_cost_per_token": output_cost, + } print(f"Model '{model}': Parsed parameters: {params}") return params except Exception as e: From 4765a90f97722b124ea9166c7442b4baec6d48ef Mon Sep 17 00:00:00 2001 From: Stefan Hladnik Date: Tue, 18 Mar 2025 03:38:24 +0700 Subject: [PATCH 009/459] fix: Adjust input and output cost calculations to use million scale --- aider/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/models.py b/aider/models.py index 1ca6276fd..3499e7820 100644 --- a/aider/models.py +++ b/aider/models.py @@ -256,8 +256,8 @@ class ModelInfoManager: context_size = None input_cost_match = re.search(r"\$\s*([\d.]+)\s*/M input tokens", text, re.IGNORECASE) output_cost_match = re.search(r"\$\s*([\d.]+)\s*/M output tokens", text, re.IGNORECASE) - input_cost = float(input_cost_match.group(1)) if input_cost_match else None - output_cost = float(output_cost_match.group(1)) if output_cost_match else None + input_cost = float(input_cost_match.group(1)) / 1000000 if input_cost_match else None + output_cost = float(output_cost_match.group(1)) / 1000000 if output_cost_match else None params = { "max_input_tokens": context_size, "max_tokens": context_size, From b37773c6300428c5d7ac277f927862431601b01b Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:38:25 +0700 Subject: [PATCH 010/459] style: Update import location and add SSL verification in fetch_openrouter_model_info() --- aider/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/models.py b/aider/models.py index 3499e7820..ed014bb54 100644 --- a/aider/models.py +++ b/aider/models.py @@ -240,9 +240,9 @@ class ModelInfoManager: """ url_part = model[len("openrouter/"):] url = "https://openrouter.ai/" + url_part - import requests try: - response = requests.get(url, timeout=5) + import requests + response = requests.get(url, timeout=5, verify=self.verify_ssl) if response.status_code != 200: return {} html = response.text From 87ccacb99f79aeab6d3747d3b6c05d55377d9e30 Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:46:36 +0700 Subject: [PATCH 011/459] fix: Return empty dict if any required parameters are missing --- aider/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aider/models.py b/aider/models.py index ed014bb54..749b2c79c 100644 --- a/aider/models.py +++ b/aider/models.py @@ -258,6 +258,8 @@ class ModelInfoManager: output_cost_match = re.search(r"\$\s*([\d.]+)\s*/M output tokens", text, re.IGNORECASE) input_cost = float(input_cost_match.group(1)) / 1000000 if input_cost_match else None output_cost = float(output_cost_match.group(1)) / 1000000 if output_cost_match else None + if context_size is None or input_cost is None or output_cost is None: + return {} params = { "max_input_tokens": context_size, "max_tokens": context_size, From d64427d726685f8687bd7400041b16fce2170c95 Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:49:59 +0700 Subject: [PATCH 012/459] feat: Add error handling for unavailable model in response text --- aider/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aider/models.py b/aider/models.py index 749b2c79c..dc55e0a8a 100644 --- a/aider/models.py +++ b/aider/models.py @@ -246,6 +246,9 @@ class ModelInfoManager: if response.status_code != 200: return {} html = response.text + if f'The model "{url_part}" is not available' in html: + print(f"Error: Model '{url_part}' is not available") + sys.exit(1) import re text = re.sub(r'<[^>]+>', ' ', html) context_match = re.search(r"([\d,]+)\s*context", text) From 21cca34392a8bac0bb6ffbc1226a8877578944ad Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:53:27 +0700 Subject: [PATCH 013/459] fix: Allow arbitrary characters in model availability check regex --- aider/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/models.py b/aider/models.py index dc55e0a8a..fe92e8aa5 100644 --- a/aider/models.py +++ b/aider/models.py @@ -246,10 +246,10 @@ class ModelInfoManager: if response.status_code != 200: return {} html = response.text - if f'The model "{url_part}" is not available' in html: + import re + if re.search(rf'The model\s*.*{re.escape(url_part)}.* is not available', html, re.IGNORECASE): print(f"Error: Model '{url_part}' is not available") sys.exit(1) - import re text = re.sub(r'<[^>]+>', ' ', html) context_match = re.search(r"([\d,]+)\s*context", text) if context_match: From cdd730e627e7e9f2a18d77e72c96b1600706e6eb Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 03:54:27 +0700 Subject: [PATCH 014/459] feat: Print error message in red for unavailable models --- aider/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/models.py b/aider/models.py index fe92e8aa5..f78376948 100644 --- a/aider/models.py +++ b/aider/models.py @@ -248,7 +248,7 @@ class ModelInfoManager: html = response.text import re if re.search(rf'The model\s*.*{re.escape(url_part)}.* is not available', html, re.IGNORECASE): - print(f"Error: Model '{url_part}' is not available") + print(f"\033[91mError: Model '{url_part}' is not available\033[0m") sys.exit(1) text = re.sub(r'<[^>]+>', ' ', html) context_match = re.search(r"([\d,]+)\s*context", text) From 7c3d96d0e7a9360f60e4148c585f6553bb73b2c5 Mon Sep 17 00:00:00 2001 From: Stefan Hladnik Date: Tue, 18 Mar 2025 04:13:40 +0700 Subject: [PATCH 015/459] fix: Remove debug print statement from ModelInfoManager class --- aider/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/models.py b/aider/models.py index f78376948..a190f5f97 100644 --- a/aider/models.py +++ b/aider/models.py @@ -270,7 +270,6 @@ class ModelInfoManager: "input_cost_per_token": input_cost, "output_cost_per_token": output_cost, } - print(f"Model '{model}': Parsed parameters: {params}") return params except Exception as e: print("Error fetching openrouter info:", str(e)) From b3d9e0d1b058da0f9a560e3a6637b0cd446da7d8 Mon Sep 17 00:00:00 2001 From: "Stefan Hladnik (aider)" Date: Tue, 18 Mar 2025 12:18:48 +0700 Subject: [PATCH 016/459] fix: Return empty dict instead of exiting on model availability error --- aider/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/models.py b/aider/models.py index a190f5f97..bc1d54e12 100644 --- a/aider/models.py +++ b/aider/models.py @@ -249,7 +249,7 @@ class ModelInfoManager: import re if re.search(rf'The model\s*.*{re.escape(url_part)}.* is not available', html, re.IGNORECASE): print(f"\033[91mError: Model '{url_part}' is not available\033[0m") - sys.exit(1) + return {} text = re.sub(r'<[^>]+>', ' ', html) context_match = re.search(r"([\d,]+)\s*context", text) if context_match: From e980973621da2a20d95b6a477756cb01e3f8cca9 Mon Sep 17 00:00:00 2001 From: Andrey Popp <8mayday@gmail.com> Date: Sun, 30 Mar 2025 22:09:06 +0400 Subject: [PATCH 017/459] feat: add repomap support for ocaml/ocaml_interface --- .../tree-sitter-language-pack/ocaml-tags.scm | 115 ++++++++++++++++++ .../ocaml_interface-tags.scm | 98 +++++++++++++++ .../ocaml_interface-tags.scm | 98 +++++++++++++++ tests/basic/test_repomap.py | 9 +- .../languages/ocaml_interface/test.mli | 14 +++ 5 files changed, 332 insertions(+), 2 deletions(-) create mode 100644 aider/queries/tree-sitter-language-pack/ocaml-tags.scm create mode 100644 aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm create mode 100644 aider/queries/tree-sitter-languages/ocaml_interface-tags.scm create mode 100644 tests/fixtures/languages/ocaml_interface/test.mli diff --git a/aider/queries/tree-sitter-language-pack/ocaml-tags.scm b/aider/queries/tree-sitter-language-pack/ocaml-tags.scm new file mode 100644 index 000000000..52d5a857e --- /dev/null +++ b/aider/queries/tree-sitter-language-pack/ocaml-tags.scm @@ -0,0 +1,115 @@ +; Modules +;-------- + +( + (comment)? @doc . + (module_definition (module_binding (module_name) @name.definition.module) @definition.module) + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(module_path (module_name) @name.reference.module) @reference.module + +; Module types +;-------------- + +( + (comment)? @doc . + (module_type_definition (module_type_name) @name.definition.interface) @definition.interface + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(module_type_path (module_type_name) @name.reference.implementation) @reference.implementation + +; Functions +;---------- + +( + (comment)? @doc . + (value_definition + [ + (let_binding + pattern: (value_name) @name.definition.function + (parameter)) + (let_binding + pattern: (value_name) @name.definition.function + body: [(fun_expression) (function_expression)]) + ] @definition.function + ) + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +( + (comment)? @doc . + (external (value_name) @name.definition.function) @definition.function + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(application_expression + function: (value_path (value_name) @name.reference.call)) @reference.call + +(infix_expression + left: (value_path (value_name) @name.reference.call) + operator: (concat_operator) @reference.call + (#eq? @reference.call "@@")) + +(infix_expression + operator: (rel_operator) @reference.call + right: (value_path (value_name) @name.reference.call) + (#eq? @reference.call "|>")) + +; Operator +;--------- + +( + (comment)? @doc . + (value_definition + (let_binding + pattern: (parenthesized_operator (_) @name.definition.function)) @definition.function) + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +[ + (prefix_operator) + (sign_operator) + (pow_operator) + (mult_operator) + (add_operator) + (concat_operator) + (rel_operator) + (and_operator) + (or_operator) + (assign_operator) + (hash_operator) + (indexing_operator) + (let_operator) + (let_and_operator) + (match_operator) +] @name.reference.call @reference.call + +; Classes +;-------- + +( + (comment)? @doc . + [ + (class_definition (class_binding (class_name) @name.definition.class) @definition.class) + (class_type_definition (class_type_binding (class_type_name) @name.definition.class) @definition.class) + ] + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +[ + (class_path (class_name) @name.reference.class) + (class_type_path (class_type_name) @name.reference.class) +] @reference.class + +; Methods +;-------- + +( + (comment)? @doc . + (method_definition (method_name) @name.definition.method) @definition.method + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(method_invocation (method_name) @name.reference.call) @reference.call diff --git a/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm b/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm new file mode 100644 index 000000000..d7a8f8b97 --- /dev/null +++ b/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm @@ -0,0 +1,98 @@ +; Modules +;-------- + +( + (comment)? @doc . + (module_definition + (module_binding (module_name) @name) @definition.module + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_path (module_name) @name) @reference.module +(extended_module_path (module_name) @name) @reference.module + +( + (comment)? @doc . + (module_type_definition (module_type_name) @name) @definition.interface + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_type_path (module_type_name) @name) @reference.implementation + + +; Classes +;-------- + +( + (comment)? @doc . + [ + (class_definition + (class_binding (class_name) @name) @definition.class + ) + (class_type_definition + (class_type_binding (class_type_name) @name) @definition.class + ) + ] + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +[ + (class_path (class_name) @name) + (class_type_path (class_type_name) @name) +] @reference.class + +( + (comment)? @doc . + (method_definition (method_name) @name) @definition.method + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(method_invocation (method_name) @name) @reference.call + + +; Types +;------ + +( + (comment)? @doc . + (type_definition + (type_binding + name: [ + (type_constructor) @name + (type_constructor_path (type_constructor) @name) + ] + ) @definition.type + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(type_constructor_path (type_constructor) @name) @reference.type + +[ + (constructor_declaration (constructor_name) @name) + (tag_specification (tag) @name) +] @definition.enum_variant + +[ + (constructor_path (constructor_name) @name) + (tag) @name +] @reference.enum_variant + +(field_declaration (field_name) @name) @definition.field + +(field_path (field_name) @name) @reference.field + +( + (comment)? @doc . + (external (value_name) @name) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +( + (comment)? @doc . + (value_specification + (value_name) @name.definition.function + ) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) diff --git a/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm b/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm new file mode 100644 index 000000000..d7a8f8b97 --- /dev/null +++ b/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm @@ -0,0 +1,98 @@ +; Modules +;-------- + +( + (comment)? @doc . + (module_definition + (module_binding (module_name) @name) @definition.module + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_path (module_name) @name) @reference.module +(extended_module_path (module_name) @name) @reference.module + +( + (comment)? @doc . + (module_type_definition (module_type_name) @name) @definition.interface + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_type_path (module_type_name) @name) @reference.implementation + + +; Classes +;-------- + +( + (comment)? @doc . + [ + (class_definition + (class_binding (class_name) @name) @definition.class + ) + (class_type_definition + (class_type_binding (class_type_name) @name) @definition.class + ) + ] + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +[ + (class_path (class_name) @name) + (class_type_path (class_type_name) @name) +] @reference.class + +( + (comment)? @doc . + (method_definition (method_name) @name) @definition.method + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(method_invocation (method_name) @name) @reference.call + + +; Types +;------ + +( + (comment)? @doc . + (type_definition + (type_binding + name: [ + (type_constructor) @name + (type_constructor_path (type_constructor) @name) + ] + ) @definition.type + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(type_constructor_path (type_constructor) @name) @reference.type + +[ + (constructor_declaration (constructor_name) @name) + (tag_specification (tag) @name) +] @definition.enum_variant + +[ + (constructor_path (constructor_name) @name) + (tag) @name +] @reference.enum_variant + +(field_declaration (field_name) @name) @definition.field + +(field_path (field_name) @name) @reference.field + +( + (comment)? @doc . + (external (value_name) @name) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +( + (comment)? @doc . + (value_specification + (value_name) @name.definition.function + ) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) diff --git a/tests/basic/test_repomap.py b/tests/basic/test_repomap.py index 17a5753c3..322bac954 100644 --- a/tests/basic/test_repomap.py +++ b/tests/basic/test_repomap.py @@ -314,8 +314,6 @@ class TestRepoMapAllLanguages(unittest.TestCase): def test_language_lua(self): self._test_language_repo_map("lua", "lua", "greet") - # "ocaml": ("ml", "Greeter"), # not supported in tsl-pack (yet?) - def test_language_php(self): self._test_language_repo_map("php", "php", "greet") @@ -384,6 +382,12 @@ class TestRepoMapAllLanguages(unittest.TestCase): def test_language_scala(self): self._test_language_repo_map("scala", "scala", "Greeter") + def test_language_ocaml(self): + self._test_language_repo_map("ocaml", "ml", "Greeter") + + def test_language_ocaml_interface(self): + self._test_language_repo_map("ocaml_interface", "mli", "Greeter") + def _test_language_repo_map(self, lang, key, symbol): """Helper method to test repo map generation for a specific language.""" # Get the fixture file path and name based on language @@ -407,6 +411,7 @@ class TestRepoMapAllLanguages(unittest.TestCase): dump(lang) dump(result) + print(result) self.assertGreater(len(result.strip().splitlines()), 1) # Check if the result contains all the expected files and symbols diff --git a/tests/fixtures/languages/ocaml_interface/test.mli b/tests/fixtures/languages/ocaml_interface/test.mli new file mode 100644 index 000000000..8289f9fc5 --- /dev/null +++ b/tests/fixtures/languages/ocaml_interface/test.mli @@ -0,0 +1,14 @@ +(* Module definition *) +module Greeter : sig + type person = { + name: string; + age: int + } + + val create_person : string -> int -> person + + val greet : person -> unit +end + +(* Outside the module *) +val main : unit -> unit From 67bb4f95524d1d4d47cf55f17be2189626784569 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 16:52:45 +0300 Subject: [PATCH 018/459] feat: add co-authored-by commit attribution --- aider/args.py | 6 +++ aider/coders/base_coder.py | 4 +- aider/repo.py | 76 +++++++++++++++++++++++++++++++------- 3 files changed, 70 insertions(+), 16 deletions(-) diff --git a/aider/args.py b/aider/args.py index 6df19778b..4f91a9cbd 100644 --- a/aider/args.py +++ b/aider/args.py @@ -448,6 +448,12 @@ def get_parser(default_config_files, git_root): default=False, help="Prefix all commit messages with 'aider: ' (default: False)", ) + group.add_argument( + "--attribute-co-authored-by", + action=argparse.BooleanOptionalAction, + default=False, + help="Attribute aider edits using the Co-authored-by trailer in the commit message (default: False).", + ) group.add_argument( "--git-commit-verify", action=argparse.BooleanOptionalAction, diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 19d375afb..5c64475eb 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -2248,7 +2248,7 @@ class Coder: context = self.get_context_from_history(self.cur_messages) try: - res = self.repo.commit(fnames=edited, context=context, aider_edits=True) + res = self.repo.commit(fnames=edited, context=context, aider_edits=True, coder=self) if res: self.show_auto_commit_outcome(res) commit_hash, commit_message = res @@ -2284,7 +2284,7 @@ class Coder: if not self.repo: return - self.repo.commit(fnames=self.need_commit_before_edits) + self.repo.commit(fnames=self.need_commit_before_edits, coder=self) # files changed, move cur messages back behind the files messages # self.move_back_cur_messages(self.gpt_prompts.files_content_local_edits) diff --git a/aider/repo.py b/aider/repo.py index 5ece5147c..999a07269 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -111,7 +111,7 @@ class GitRepo: if aider_ignore_file: self.aider_ignore_file = Path(aider_ignore_file) - def commit(self, fnames=None, context=None, message=None, aider_edits=False): + def commit(self, fnames=None, context=None, message=None, aider_edits=False, coder=None): if not fnames and not self.repo.is_dirty(): return @@ -124,15 +124,52 @@ class GitRepo: else: commit_message = self.get_commit_message(diffs, context) - if aider_edits and self.attribute_commit_message_author: - commit_message = "aider: " + commit_message - elif self.attribute_commit_message_committer: - commit_message = "aider: " + commit_message + commit_message_trailer = "" + if aider_edits: + # Use coder.args if available, otherwise default to config/defaults + attribute_author = ( + coder.args.attribute_author + if coder and hasattr(coder, "args") + else self.attribute_author + ) + attribute_committer = ( + coder.args.attribute_committer + if coder and hasattr(coder, "args") + else self.attribute_committer + ) + attribute_commit_message_author = ( + coder.args.attribute_commit_message_author + if coder and hasattr(coder, "args") + else self.attribute_commit_message_author + ) + attribute_commit_message_committer = ( + coder.args.attribute_commit_message_committer + if coder and hasattr(coder, "args") + else self.attribute_commit_message_committer + ) + attribute_co_authored_by = ( + coder.args.attribute_co_authored_by + if coder and hasattr(coder, "args") + else False # Default to False if not found + ) + + # Add Co-authored-by trailer if configured + if attribute_co_authored_by: + model_name = "unknown-model" + if coder and hasattr(coder, "main_model") and coder.main_model.name: + model_name = coder.main_model.name + commit_message_trailer = ( + f"\n\nCo-authored-by: aider ({model_name}) " + ) + + # Prefix commit message if configured + if attribute_commit_message_author or attribute_commit_message_committer: + commit_message = "aider: " + commit_message if not commit_message: commit_message = "(no commit message provided)" - full_commit_message = commit_message + full_commit_message = commit_message + commit_message_trailer # if context: # full_commit_message += "\n\n# Aider chat conversation:\n\n" + context @@ -152,13 +189,25 @@ class GitRepo: original_user_name = self.repo.git.config("--get", "user.name") original_committer_name_env = os.environ.get("GIT_COMMITTER_NAME") + original_author_name_env = os.environ.get("GIT_AUTHOR_NAME") committer_name = f"{original_user_name} (aider)" - if self.attribute_committer: + # Use coder.args if available, otherwise default to config/defaults + use_attribute_committer = ( + coder.args.attribute_committer + if coder and hasattr(coder, "args") + else self.attribute_committer + ) + use_attribute_author = ( + coder.args.attribute_author + if coder and hasattr(coder, "args") + else self.attribute_author + ) + + if use_attribute_committer: os.environ["GIT_COMMITTER_NAME"] = committer_name - if aider_edits and self.attribute_author: - original_author_name_env = os.environ.get("GIT_AUTHOR_NAME") + if aider_edits and use_attribute_author: os.environ["GIT_AUTHOR_NAME"] = committer_name try: @@ -170,17 +219,16 @@ class GitRepo: self.io.tool_error(f"Unable to commit: {err}") finally: # Restore the env - - if self.attribute_committer: + if use_attribute_committer: if original_committer_name_env is not None: os.environ["GIT_COMMITTER_NAME"] = original_committer_name_env - else: + elif "GIT_COMMITTER_NAME" in os.environ: del os.environ["GIT_COMMITTER_NAME"] - if aider_edits and self.attribute_author: + if aider_edits and use_attribute_author: if original_author_name_env is not None: os.environ["GIT_AUTHOR_NAME"] = original_author_name_env - else: + elif "GIT_AUTHOR_NAME" in os.environ: del os.environ["GIT_AUTHOR_NAME"] def get_rel_repo_dir(self): From b6b8f30378cae0cab844989142eec5efb39f6554 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 16:57:21 +0300 Subject: [PATCH 019/459] test: add tests for co-authored-by commit attribution --- tests/basic/test_repo.py | 83 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index aa863c570..7e288e063 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -4,7 +4,7 @@ import tempfile import time import unittest from pathlib import Path -from unittest.mock import patch +from unittest.mock import MagicMock, patch import git @@ -211,6 +211,87 @@ class TestRepo(unittest.TestCase): original_author_name = os.environ.get("GIT_AUTHOR_NAME") self.assertIsNone(original_author_name) + def test_commit_with_co_authored_by(self): + # Cleanup of the git temp dir explodes on windows + if platform.system() == "Windows": + return + + with GitTemporaryDirectory(): + # new repo + raw_repo = git.Repo() + raw_repo.config_writer().set_value("user", "name", "Test User").release() + raw_repo.config_writer().set_value("user", "email", "test@example.com").release() + + # add a file and commit it + fname = Path("file.txt") + fname.touch() + raw_repo.git.add(str(fname)) + raw_repo.git.commit("-m", "initial commit") + + # Mock coder args + mock_coder = MagicMock() + mock_coder.args.attribute_co_authored_by = True + mock_coder.args.attribute_author = None # Explicitly None to test override + mock_coder.args.attribute_committer = None # Explicitly None to test override + mock_coder.args.attribute_commit_message_author = False + mock_coder.args.attribute_commit_message_committer = False + mock_coder.model.name = "gpt-test" + + io = InputOutput() + git_repo = GitRepo(io, None, None) + + # commit a change with aider_edits=True and co-authored-by flag + fname.write_text("new content") + git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") + + # check the commit message and author/committer + commit = raw_repo.head.commit + self.assertIn("Co-authored-by: aider (gpt-test) ", commit.message) + self.assertEqual(commit.message.splitlines()[0], "Aider edit") + self.assertEqual(commit.author.name, "Test User") # Should NOT be modified + self.assertEqual(commit.committer.name, "Test User") # Should NOT be modified + + def test_commit_without_co_authored_by(self): + # Cleanup of the git temp dir explodes on windows + if platform.system() == "Windows": + return + + with GitTemporaryDirectory(): + # new repo + raw_repo = git.Repo() + raw_repo.config_writer().set_value("user", "name", "Test User").release() + raw_repo.config_writer().set_value("user", "email", "test@example.com").release() + + # add a file and commit it + fname = Path("file.txt") + fname.touch() + raw_repo.git.add(str(fname)) + raw_repo.git.commit("-m", "initial commit") + + # Mock coder args (default behavior) + mock_coder = MagicMock() + mock_coder.args.attribute_co_authored_by = False + mock_coder.args.attribute_author = True + mock_coder.args.attribute_committer = True + mock_coder.args.attribute_commit_message_author = False + mock_coder.args.attribute_commit_message_committer = False + mock_coder.model.name = "gpt-test" + + io = InputOutput() + git_repo = GitRepo(io, None, None) + + # commit a change with aider_edits=True and default flags + fname.write_text("new content") + git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") + + # check the commit message and author/committer + commit = raw_repo.head.commit + self.assertNotIn("Co-authored-by:", commit.message) + self.assertEqual(commit.message.splitlines()[0], "Aider edit") + self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified + self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified + + def test_get_tracked_files(self): # Create a temporary directory tempdir = Path(tempfile.mkdtemp()) From eb28e228913fdc0c90b62168bb4b57475a91e22c Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:07:41 +0300 Subject: [PATCH 020/459] test: fix mock setup for model name in co-authored-by test --- tests/basic/test_repo.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 7e288e063..4ff694714 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -235,7 +235,9 @@ class TestRepo(unittest.TestCase): mock_coder.args.attribute_committer = None # Explicitly None to test override mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False - mock_coder.model.name = "gpt-test" + # Set the model name correctly on the nested mock + mock_coder.model = MagicMock(name="gpt-test") + io = InputOutput() git_repo = GitRepo(io, None, None) From 192f8bec26ca0348cf43b1ec7bf00ac7e459f565 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:09:12 +0300 Subject: [PATCH 021/459] test: fix mock model name setup in co-authored-by test --- tests/basic/test_repo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 4ff694714..d0441a4da 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -236,7 +236,8 @@ class TestRepo(unittest.TestCase): mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False # Set the model name correctly on the nested mock - mock_coder.model = MagicMock(name="gpt-test") + mock_coder.model = MagicMock() + mock_coder.model.configure_mock(name="gpt-test") io = InputOutput() From a5327af5e9ef31b68a4345a6679b66b72a9c09fc Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:12:30 +0300 Subject: [PATCH 022/459] test: fix mock setup for co-authored-by commit test --- tests/basic/test_repo.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index d0441a4da..631e6f606 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -236,8 +236,9 @@ class TestRepo(unittest.TestCase): mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False # Set the model name correctly on the nested mock - mock_coder.model = MagicMock() - mock_coder.model.configure_mock(name="gpt-test") + # The code uses coder.main_model.name for the co-authored-by line + mock_coder.main_model = MagicMock() + mock_coder.main_model.name = "gpt-test" io = InputOutput() From b22c9b8542cda2a5e45df0a919039d484378d2b9 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:32:15 +0300 Subject: [PATCH 023/459] feat: implement Co-authored-by attribution option --- aider/repo.py | 74 ++++++++++++++++++++-------------------- tests/basic/test_repo.py | 55 +++++++++++++++++++++++++++-- 2 files changed, 89 insertions(+), 40 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index 999a07269..efa0fda8c 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -125,7 +125,41 @@ class GitRepo: commit_message = self.get_commit_message(diffs, context) commit_message_trailer = "" + attribute_author = self.attribute_author + attribute_committer = self.attribute_committer + attribute_commit_message_author = self.attribute_commit_message_author + attribute_commit_message_committer = self.attribute_commit_message_committer + attribute_co_authored_by = False # Default if coder or args not available + + if coder and hasattr(coder, "args"): + attribute_author = coder.args.attribute_author + attribute_committer = coder.args.attribute_committer + attribute_commit_message_author = coder.args.attribute_commit_message_author + attribute_commit_message_committer = coder.args.attribute_commit_message_committer + attribute_co_authored_by = coder.args.attribute_co_authored_by + if aider_edits: + # Add Co-authored-by trailer if configured + if attribute_co_authored_by: + model_name = "unknown-model" + if coder and hasattr(coder, "main_model") and coder.main_model.name: + model_name = coder.main_model.name + commit_message_trailer = ( + f"\n\nCo-authored-by: aider ({model_name}) " + ) + + # Prefix commit message if configured + if attribute_commit_message_author or attribute_commit_message_committer: + commit_message = "aider: " + commit_message + + # Prepare author/committer modification flags (used later) + use_attribute_author = attribute_author + use_attribute_committer = attribute_committer + else: + # Don't modify author/committer/message for non-aider edits + use_attribute_author = False + use_attribute_committer = self.attribute_committer # Keep committer modification for non-aider edits if configured + # Use coder.args if available, otherwise default to config/defaults attribute_author = ( coder.args.attribute_author @@ -143,29 +177,6 @@ class GitRepo: else self.attribute_commit_message_author ) attribute_commit_message_committer = ( - coder.args.attribute_commit_message_committer - if coder and hasattr(coder, "args") - else self.attribute_commit_message_committer - ) - attribute_co_authored_by = ( - coder.args.attribute_co_authored_by - if coder and hasattr(coder, "args") - else False # Default to False if not found - ) - - # Add Co-authored-by trailer if configured - if attribute_co_authored_by: - model_name = "unknown-model" - if coder and hasattr(coder, "main_model") and coder.main_model.name: - model_name = coder.main_model.name - commit_message_trailer = ( - f"\n\nCo-authored-by: aider ({model_name}) " - ) - - # Prefix commit message if configured - if attribute_commit_message_author or attribute_commit_message_committer: - commit_message = "aider: " + commit_message - if not commit_message: commit_message = "(no commit message provided)" @@ -192,22 +203,11 @@ class GitRepo: original_author_name_env = os.environ.get("GIT_AUTHOR_NAME") committer_name = f"{original_user_name} (aider)" - # Use coder.args if available, otherwise default to config/defaults - use_attribute_committer = ( - coder.args.attribute_committer - if coder and hasattr(coder, "args") - else self.attribute_committer - ) - use_attribute_author = ( - coder.args.attribute_author - if coder and hasattr(coder, "args") - else self.attribute_author - ) - + # Apply author/committer modifications based on flags determined earlier if use_attribute_committer: os.environ["GIT_COMMITTER_NAME"] = committer_name - if aider_edits and use_attribute_author: + if use_attribute_author: # Already checks for aider_edits implicitly os.environ["GIT_AUTHOR_NAME"] = committer_name try: @@ -225,7 +225,7 @@ class GitRepo: elif "GIT_COMMITTER_NAME" in os.environ: del os.environ["GIT_COMMITTER_NAME"] - if aider_edits and use_attribute_author: + if use_attribute_author: # Already checks for aider_edits implicitly if original_author_name_env is not None: os.environ["GIT_AUTHOR_NAME"] = original_author_name_env elif "GIT_AUTHOR_NAME" in os.environ: diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 631e6f606..945de84f8 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -229,10 +229,11 @@ class TestRepo(unittest.TestCase): raw_repo.git.commit("-m", "initial commit") # Mock coder args + # Mock coder args: Co-authored-by enabled, author/committer modification disabled mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = True - mock_coder.args.attribute_author = None # Explicitly None to test override - mock_coder.args.attribute_committer = None # Explicitly None to test override + mock_coder.args.attribute_author = False # Explicitly disable name modification + mock_coder.args.attribute_committer = False # Explicitly disable name modification mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False # Set the model name correctly on the nested mock @@ -255,6 +256,51 @@ class TestRepo(unittest.TestCase): self.assertEqual(commit.author.name, "Test User") # Should NOT be modified self.assertEqual(commit.committer.name, "Test User") # Should NOT be modified + def test_commit_with_co_authored_by_and_name_modification(self): + # Test scenario where Co-authored-by is true AND author/committer modification is also true (default) + # Cleanup of the git temp dir explodes on windows + if platform.system() == "Windows": + return + + with GitTemporaryDirectory(): + # new repo + raw_repo = git.Repo() + raw_repo.config_writer().set_value("user", "name", "Test User").release() + raw_repo.config_writer().set_value("user", "email", "test@example.com").release() + + # add a file and commit it + fname = Path("file.txt") + fname.touch() + raw_repo.git.add(str(fname)) + raw_repo.git.commit("-m", "initial commit") + + # Mock coder args: Co-authored-by enabled, author/committer modification enabled (default) + mock_coder = MagicMock() + mock_coder.args.attribute_co_authored_by = True + mock_coder.args.attribute_author = True # Explicitly enable (or rely on default) + mock_coder.args.attribute_committer = True # Explicitly enable (or rely on default) + mock_coder.args.attribute_commit_message_author = False + mock_coder.args.attribute_commit_message_committer = False + # Set the model name correctly on the nested mock + mock_coder.main_model = MagicMock() + mock_coder.main_model.name = "gpt-test-combo" + + + io = InputOutput() + git_repo = GitRepo(io, None, None) + + # commit a change with aider_edits=True and combo flags + fname.write_text("new content combo") + git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider combo edit") + + # check the commit message and author/committer + commit = raw_repo.head.commit + self.assertIn("Co-authored-by: aider (gpt-test-combo) ", commit.message) + self.assertEqual(commit.message.splitlines()[0], "Aider combo edit") + self.assertEqual(commit.author.name, "Test User (aider)") # Should BE modified + self.assertEqual(commit.committer.name, "Test User (aider)") # Should BE modified + + def test_commit_without_co_authored_by(self): # Cleanup of the git temp dir explodes on windows if platform.system() == "Windows": @@ -279,7 +325,10 @@ class TestRepo(unittest.TestCase): mock_coder.args.attribute_committer = True mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False - mock_coder.model.name = "gpt-test" + # Set the model name correctly on the nested mock (though not used in this test assertion) + mock_coder.main_model = MagicMock() + mock_coder.main_model.name = "gpt-test-no-coauthor" + io = InputOutput() git_repo = GitRepo(io, None, None) From c73b987cd099cc73e1be17d3084df444b1e70491 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:32:57 +0300 Subject: [PATCH 024/459] fix: fix syntax error in commit logic --- aider/repo.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/aider/repo.py b/aider/repo.py index efa0fda8c..5ad84d36d 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -177,6 +177,10 @@ class GitRepo: else self.attribute_commit_message_author ) attribute_commit_message_committer = ( + coder.args.attribute_commit_message_committer + if coder and hasattr(coder, "args") + else self.attribute_commit_message_committer + ) if not commit_message: commit_message = "(no commit message provided)" From e9511643998d4868bc261b3ec0479e6a2a362b3a Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:35:45 +0300 Subject: [PATCH 025/459] chore: Add test comment to dump function --- aider/dump.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/dump.py b/aider/dump.py index 2c8bf31c2..6098d0b73 100644 --- a/aider/dump.py +++ b/aider/dump.py @@ -12,6 +12,7 @@ def cvt(s): def dump(*vals): + # This is a test comment # http://docs.python.org/library/traceback.html stack = traceback.extract_stack() vars = stack[-2][3] From 482e0c2d0b5cdfe60281f13bab2ead4aa540e9e6 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:37:00 +0300 Subject: [PATCH 026/459] chore: Add test comment --- aider/prompts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/prompts.py b/aider/prompts.py index 84ed75e9b..1dacf10d0 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -1,5 +1,6 @@ # flake8: noqa: E501 +# This is a test comment. # COMMIT From 4783ad3a73530c174f664505b65fe2e587ef27aa Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:39:49 +0300 Subject: [PATCH 027/459] feat: add attribute-co-authored-by option for commit attribution --- aider/args.py | 2 +- aider/repo.py | 83 +++++++++++++++++++++++---------------------------- 2 files changed, 38 insertions(+), 47 deletions(-) diff --git a/aider/args.py b/aider/args.py index 4f91a9cbd..3571faa5e 100644 --- a/aider/args.py +++ b/aider/args.py @@ -428,7 +428,7 @@ def get_parser(default_config_files, git_root): "--attribute-author", action=argparse.BooleanOptionalAction, default=True, - help="Attribute aider code changes in the git author name (default: True)", + help="Attribute aider code changes in the git author name (default: True, ignored if attribute-co-authored-by is True unless explicitly set)", ) group.add_argument( "--attribute-committer", diff --git a/aider/repo.py b/aider/repo.py index 5ad84d36d..e0bcef2de 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -69,6 +69,8 @@ class GitRepo: self.attribute_committer = attribute_committer self.attribute_commit_message_author = attribute_commit_message_author self.attribute_commit_message_committer = attribute_commit_message_committer + # Ensure attribute_co_authored_by is initialized, default to False if not provided + self.attribute_co_authored_by = getattr(self, 'attribute_co_authored_by', False) self.commit_prompt = commit_prompt self.subtree_only = subtree_only self.git_commit_verify = git_commit_verify @@ -124,66 +126,56 @@ class GitRepo: else: commit_message = self.get_commit_message(diffs, context) - commit_message_trailer = "" - attribute_author = self.attribute_author - attribute_committer = self.attribute_committer - attribute_commit_message_author = self.attribute_commit_message_author - attribute_commit_message_committer = self.attribute_commit_message_committer - attribute_co_authored_by = False # Default if coder or args not available - + # Retrieve attribute settings, prioritizing coder.args if available if coder and hasattr(coder, "args"): attribute_author = coder.args.attribute_author attribute_committer = coder.args.attribute_committer attribute_commit_message_author = coder.args.attribute_commit_message_author attribute_commit_message_committer = coder.args.attribute_commit_message_committer attribute_co_authored_by = coder.args.attribute_co_authored_by + else: + # Fallback to self attributes (initialized from config/defaults) + attribute_author = self.attribute_author + attribute_committer = self.attribute_committer + attribute_commit_message_author = self.attribute_commit_message_author + attribute_commit_message_committer = self.attribute_commit_message_committer + attribute_co_authored_by = getattr(self, 'attribute_co_authored_by', False) + + commit_message_trailer = "" + prefix_commit_message = False + use_attribute_author = False + use_attribute_committer = False if aider_edits: - # Add Co-authored-by trailer if configured + # Determine commit message prefixing + if attribute_commit_message_author or attribute_commit_message_committer: + prefix_commit_message = True + + # Determine author/committer modification and trailer if attribute_co_authored_by: model_name = "unknown-model" if coder and hasattr(coder, "main_model") and coder.main_model.name: model_name = coder.main_model.name - commit_message_trailer = ( - f"\n\nCo-authored-by: aider ({model_name}) " - ) - - # Prefix commit message if configured - if attribute_commit_message_author or attribute_commit_message_committer: - commit_message = "aider: " + commit_message - - # Prepare author/committer modification flags (used later) - use_attribute_author = attribute_author - use_attribute_committer = attribute_committer - else: - # Don't modify author/committer/message for non-aider edits + commit_message_trailer = f"\n\nCo-authored-by: aider ({model_name}) " + # Only modify author/committer if explicitly requested alongside co-authored-by + use_attribute_author = attribute_author + use_attribute_committer = attribute_committer + else: + # Original behavior when co-authored-by is false + use_attribute_author = attribute_author + use_attribute_committer = attribute_committer + else: # not aider_edits + # Keep original behavior for non-aider edits use_attribute_author = False - use_attribute_committer = self.attribute_committer # Keep committer modification for non-aider edits if configured + use_attribute_committer = attribute_committer # Respect config for committer + prefix_commit_message = False # Don't prefix non-aider commits - # Use coder.args if available, otherwise default to config/defaults - attribute_author = ( - coder.args.attribute_author - if coder and hasattr(coder, "args") - else self.attribute_author - ) - attribute_committer = ( - coder.args.attribute_committer - if coder and hasattr(coder, "args") - else self.attribute_committer - ) - attribute_commit_message_author = ( - coder.args.attribute_commit_message_author - if coder and hasattr(coder, "args") - else self.attribute_commit_message_author - ) - attribute_commit_message_committer = ( - coder.args.attribute_commit_message_committer - if coder and hasattr(coder, "args") - else self.attribute_commit_message_committer - ) if not commit_message: commit_message = "(no commit message provided)" + if prefix_commit_message: + commit_message = "aider: " + commit_message + full_commit_message = commit_message + commit_message_trailer # if context: # full_commit_message += "\n\n# Aider chat conversation:\n\n" + context @@ -210,8 +202,7 @@ class GitRepo: # Apply author/committer modifications based on flags determined earlier if use_attribute_committer: os.environ["GIT_COMMITTER_NAME"] = committer_name - - if use_attribute_author: # Already checks for aider_edits implicitly + if use_attribute_author: os.environ["GIT_AUTHOR_NAME"] = committer_name try: @@ -229,7 +220,7 @@ class GitRepo: elif "GIT_COMMITTER_NAME" in os.environ: del os.environ["GIT_COMMITTER_NAME"] - if use_attribute_author: # Already checks for aider_edits implicitly + if use_attribute_author: if original_author_name_env is not None: os.environ["GIT_AUTHOR_NAME"] = original_author_name_env elif "GIT_AUTHOR_NAME" in os.environ: From 43cb4d68f7b6a31beddf130b9b09c5c448221005 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:45:48 +0300 Subject: [PATCH 028/459] test: Temporarily disable co-author attribution to verify test failure --- aider/repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/repo.py b/aider/repo.py index e0bcef2de..aa6cffb4f 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -132,7 +132,7 @@ class GitRepo: attribute_committer = coder.args.attribute_committer attribute_commit_message_author = coder.args.attribute_commit_message_author attribute_commit_message_committer = coder.args.attribute_commit_message_committer - attribute_co_authored_by = coder.args.attribute_co_authored_by + # attribute_co_authored_by = coder.args.attribute_co_authored_by # <-- Intentionally commented out for testing else: # Fallback to self attributes (initialized from config/defaults) attribute_author = self.attribute_author From dede701423342f2dd40d1493c21874e92111a4ba Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:47:20 +0300 Subject: [PATCH 029/459] test: intentionally break co-authored-by logic --- aider/repo.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index aa6cffb4f..4ba96d920 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -132,7 +132,7 @@ class GitRepo: attribute_committer = coder.args.attribute_committer attribute_commit_message_author = coder.args.attribute_commit_message_author attribute_commit_message_committer = coder.args.attribute_commit_message_committer - # attribute_co_authored_by = coder.args.attribute_co_authored_by # <-- Intentionally commented out for testing + attribute_co_authored_by = coder.args.attribute_co_authored_by # <-- Restored else: # Fallback to self attributes (initialized from config/defaults) attribute_author = self.attribute_author @@ -152,7 +152,13 @@ class GitRepo: prefix_commit_message = True # Determine author/committer modification and trailer - if attribute_co_authored_by: + + # --- Intentionally break the behavior for testing --- + original_attribute_co_authored_by = attribute_co_authored_by # Keep original value if needed elsewhere + attribute_co_authored_by = False # Force to False to ignore the setting + # --- End intentional break --- + + if attribute_co_authored_by: # This condition will now always be false model_name = "unknown-model" if coder and hasattr(coder, "main_model") and coder.main_model.name: model_name = coder.main_model.name From 80114e7a24faa004d7131f47364a28f8fae8d694 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:48:52 +0300 Subject: [PATCH 030/459] chore: revert intentional break introduced for testing --- aider/repo.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index 4ba96d920..7e04d89ee 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -153,12 +153,7 @@ class GitRepo: # Determine author/committer modification and trailer - # --- Intentionally break the behavior for testing --- - original_attribute_co_authored_by = attribute_co_authored_by # Keep original value if needed elsewhere - attribute_co_authored_by = False # Force to False to ignore the setting - # --- End intentional break --- - - if attribute_co_authored_by: # This condition will now always be false + if attribute_co_authored_by: model_name = "unknown-model" if coder and hasattr(coder, "main_model") and coder.main_model.name: model_name = coder.main_model.name From d5671c2879c85f581bd504a962e8b54b6567c776 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:50:16 +0300 Subject: [PATCH 031/459] chore: Add test comment --- tests/fixtures/sample-code-base/sample.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/fixtures/sample-code-base/sample.js b/tests/fixtures/sample-code-base/sample.js index f3f2eaf58..a934b428c 100644 --- a/tests/fixtures/sample-code-base/sample.js +++ b/tests/fixtures/sample-code-base/sample.js @@ -1,3 +1,4 @@ +// Aider test commit // Sample JavaScript script with 7 functions // 1. A simple greeting function From 48f89f226fac3d407d40574d921bf5df065cda71 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:51:58 +0300 Subject: [PATCH 032/459] fix: prevent name modification when using co-authored-by --- aider/repo.py | 10 +++++----- tests/basic/test_repo.py | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index 7e04d89ee..f0d436526 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -58,6 +58,7 @@ class GitRepo: commit_prompt=None, subtree_only=False, git_commit_verify=True, + attribute_co_authored_by=False, # Added parameter ): self.io = io self.models = models @@ -69,8 +70,7 @@ class GitRepo: self.attribute_committer = attribute_committer self.attribute_commit_message_author = attribute_commit_message_author self.attribute_commit_message_committer = attribute_commit_message_committer - # Ensure attribute_co_authored_by is initialized, default to False if not provided - self.attribute_co_authored_by = getattr(self, 'attribute_co_authored_by', False) + self.attribute_co_authored_by = attribute_co_authored_by # Assign from parameter self.commit_prompt = commit_prompt self.subtree_only = subtree_only self.git_commit_verify = git_commit_verify @@ -158,9 +158,9 @@ class GitRepo: if coder and hasattr(coder, "main_model") and coder.main_model.name: model_name = coder.main_model.name commit_message_trailer = f"\n\nCo-authored-by: aider ({model_name}) " - # Only modify author/committer if explicitly requested alongside co-authored-by - use_attribute_author = attribute_author - use_attribute_committer = attribute_committer + # If co-authored-by is used, disable author/committer name modification + use_attribute_author = False + use_attribute_committer = False else: # Original behavior when co-authored-by is false use_attribute_author = attribute_author diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 945de84f8..2c68c8f00 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -297,8 +297,9 @@ class TestRepo(unittest.TestCase): commit = raw_repo.head.commit self.assertIn("Co-authored-by: aider (gpt-test-combo) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider combo edit") - self.assertEqual(commit.author.name, "Test User (aider)") # Should BE modified - self.assertEqual(commit.committer.name, "Test User (aider)") # Should BE modified + # When co-authored-by is true, name modification should be disabled + self.assertEqual(commit.author.name, "Test User") # Should NOT be modified + self.assertEqual(commit.committer.name, "Test User") # Should NOT be modified def test_commit_without_co_authored_by(self): From 072bd30443ce0b3bb8cb7df2f9550446b4edb240 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:53:11 +0300 Subject: [PATCH 033/459] test: add comment for testing --- tests/fixtures/sample-code-base/sample.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/fixtures/sample-code-base/sample.js b/tests/fixtures/sample-code-base/sample.js index a934b428c..31280539f 100644 --- a/tests/fixtures/sample-code-base/sample.js +++ b/tests/fixtures/sample-code-base/sample.js @@ -1,4 +1,5 @@ // Aider test commit +// Another test comment // Sample JavaScript script with 7 functions // 1. A simple greeting function From f648a018a2a738f03576acb4e4998e8b2be17341 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:55:13 +0300 Subject: [PATCH 034/459] fix: Pass attribute_co_authored_by arg to GitRepo constructor --- aider/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/main.py b/aider/main.py index 9da90e161..a8535d02c 100644 --- a/aider/main.py +++ b/aider/main.py @@ -904,6 +904,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F commit_prompt=args.commit_prompt, subtree_only=args.subtree_only, git_commit_verify=args.git_commit_verify, + attribute_co_authored_by=args.attribute_co_authored_by, # Pass the arg ) except FileNotFoundError: pass From ff8e9850ba2dd61a5ff1cc6f5b2cb30d0469082e Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:55:54 +0300 Subject: [PATCH 035/459] chore: add test comment to dump function --- aider/dump.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/dump.py b/aider/dump.py index 6098d0b73..85065a97d 100644 --- a/aider/dump.py +++ b/aider/dump.py @@ -13,6 +13,7 @@ def cvt(s): def dump(*vals): # This is a test comment + # This is another test comment # http://docs.python.org/library/traceback.html stack = traceback.extract_stack() vars = stack[-2][3] From d1437b76665a4e4f51d6ea21200a0b817e6157c3 Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:57:04 +0300 Subject: [PATCH 036/459] chore: add debug prints for attribute_co_authored_by --- aider/main.py | 2 ++ aider/repo.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/aider/main.py b/aider/main.py index a8535d02c..61100d14a 100644 --- a/aider/main.py +++ b/aider/main.py @@ -501,6 +501,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F # Parse again to include any arguments that might have been defined in .env args = parser.parse_args(argv) + print(f"DEBUG: After final parse, args.attribute_co_authored_by = {args.attribute_co_authored_by}") # DEBUG if git is None: args.git = False @@ -891,6 +892,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F repo = None if args.git: try: + print(f"DEBUG: Before GitRepo init, args.attribute_co_authored_by = {args.attribute_co_authored_by}") # DEBUG repo = GitRepo( io, fnames, diff --git a/aider/repo.py b/aider/repo.py index f0d436526..5a57ffb46 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -60,6 +60,7 @@ class GitRepo: git_commit_verify=True, attribute_co_authored_by=False, # Added parameter ): + print(f"DEBUG: GitRepo.__init__ received attribute_co_authored_by = {attribute_co_authored_by}") # DEBUG self.io = io self.models = models @@ -71,6 +72,7 @@ class GitRepo: self.attribute_commit_message_author = attribute_commit_message_author self.attribute_commit_message_committer = attribute_commit_message_committer self.attribute_co_authored_by = attribute_co_authored_by # Assign from parameter + print(f"DEBUG: GitRepo.__init__ set self.attribute_co_authored_by = {self.attribute_co_authored_by}") # DEBUG self.commit_prompt = commit_prompt self.subtree_only = subtree_only self.git_commit_verify = git_commit_verify @@ -117,6 +119,8 @@ class GitRepo: if not fnames and not self.repo.is_dirty(): return + print(f"DEBUG: GitRepo.commit start, self.attribute_co_authored_by = {self.attribute_co_authored_by}") # DEBUG + diffs = self.get_diffs(fnames) if not diffs: return @@ -141,6 +145,8 @@ class GitRepo: attribute_commit_message_committer = self.attribute_commit_message_committer attribute_co_authored_by = getattr(self, 'attribute_co_authored_by', False) + print(f"DEBUG: GitRepo.commit after retrieval, attribute_co_authored_by = {attribute_co_authored_by}") # DEBUG + commit_message_trailer = "" prefix_commit_message = False use_attribute_author = False @@ -153,6 +159,7 @@ class GitRepo: # Determine author/committer modification and trailer + print(f"DEBUG: GitRepo.commit before logic check, attribute_co_authored_by = {attribute_co_authored_by}") # DEBUG if attribute_co_authored_by: model_name = "unknown-model" if coder and hasattr(coder, "main_model") and coder.main_model.name: @@ -201,6 +208,7 @@ class GitRepo: committer_name = f"{original_user_name} (aider)" # Apply author/committer modifications based on flags determined earlier + print(f"DEBUG: GitRepo.commit before setting env, use_attribute_author={use_attribute_author}, use_attribute_committer={use_attribute_committer}") # DEBUG if use_attribute_committer: os.environ["GIT_COMMITTER_NAME"] = committer_name if use_attribute_author: From 15d623f2c085478e43ceafda98dffefcc44eec7d Mon Sep 17 00:00:00 2001 From: "Andrew Grigorev (aider)" Date: Sat, 12 Apr 2025 17:57:44 +0300 Subject: [PATCH 037/459] chore: add another test comment to prompts --- aider/prompts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/prompts.py b/aider/prompts.py index 1dacf10d0..87f14a5ec 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -1,6 +1,7 @@ # flake8: noqa: E501 # This is a test comment. +# This is another test comment. # COMMIT From 316d8f8e9bf919fa431cda7250ea33d4f5b230bd Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:06:09 +0300 Subject: [PATCH 038/459] chore: add third test comment Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- aider/prompts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/prompts.py b/aider/prompts.py index 87f14a5ec..50830978a 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -2,6 +2,7 @@ # This is a test comment. # This is another test comment. +# This is a third test comment. # COMMIT From 66fdeceb3b39f1ca25ed9cd7cf2a041b9d1e5f66 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:06 +0300 Subject: [PATCH 039/459] Revert "chore: add third test comment" This reverts commit 316d8f8e9bf919fa431cda7250ea33d4f5b230bd. --- aider/prompts.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/prompts.py b/aider/prompts.py index 50830978a..87f14a5ec 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -2,7 +2,6 @@ # This is a test comment. # This is another test comment. -# This is a third test comment. # COMMIT From 0a59c38f31ff82137b219013693386efd4a13b96 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:07 +0300 Subject: [PATCH 040/459] Revert "chore: add another test comment to prompts" This reverts commit 15d623f2c085478e43ceafda98dffefcc44eec7d. --- aider/prompts.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/prompts.py b/aider/prompts.py index 87f14a5ec..1dacf10d0 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -1,7 +1,6 @@ # flake8: noqa: E501 # This is a test comment. -# This is another test comment. # COMMIT From e1820522db7eb006306d6396e09f5f1b94b633f2 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:07 +0300 Subject: [PATCH 041/459] Revert "chore: add debug prints for attribute_co_authored_by" This reverts commit d1437b76665a4e4f51d6ea21200a0b817e6157c3. --- aider/main.py | 2 -- aider/repo.py | 8 -------- 2 files changed, 10 deletions(-) diff --git a/aider/main.py b/aider/main.py index 61100d14a..a8535d02c 100644 --- a/aider/main.py +++ b/aider/main.py @@ -501,7 +501,6 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F # Parse again to include any arguments that might have been defined in .env args = parser.parse_args(argv) - print(f"DEBUG: After final parse, args.attribute_co_authored_by = {args.attribute_co_authored_by}") # DEBUG if git is None: args.git = False @@ -892,7 +891,6 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F repo = None if args.git: try: - print(f"DEBUG: Before GitRepo init, args.attribute_co_authored_by = {args.attribute_co_authored_by}") # DEBUG repo = GitRepo( io, fnames, diff --git a/aider/repo.py b/aider/repo.py index 5a57ffb46..f0d436526 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -60,7 +60,6 @@ class GitRepo: git_commit_verify=True, attribute_co_authored_by=False, # Added parameter ): - print(f"DEBUG: GitRepo.__init__ received attribute_co_authored_by = {attribute_co_authored_by}") # DEBUG self.io = io self.models = models @@ -72,7 +71,6 @@ class GitRepo: self.attribute_commit_message_author = attribute_commit_message_author self.attribute_commit_message_committer = attribute_commit_message_committer self.attribute_co_authored_by = attribute_co_authored_by # Assign from parameter - print(f"DEBUG: GitRepo.__init__ set self.attribute_co_authored_by = {self.attribute_co_authored_by}") # DEBUG self.commit_prompt = commit_prompt self.subtree_only = subtree_only self.git_commit_verify = git_commit_verify @@ -119,8 +117,6 @@ class GitRepo: if not fnames and not self.repo.is_dirty(): return - print(f"DEBUG: GitRepo.commit start, self.attribute_co_authored_by = {self.attribute_co_authored_by}") # DEBUG - diffs = self.get_diffs(fnames) if not diffs: return @@ -145,8 +141,6 @@ class GitRepo: attribute_commit_message_committer = self.attribute_commit_message_committer attribute_co_authored_by = getattr(self, 'attribute_co_authored_by', False) - print(f"DEBUG: GitRepo.commit after retrieval, attribute_co_authored_by = {attribute_co_authored_by}") # DEBUG - commit_message_trailer = "" prefix_commit_message = False use_attribute_author = False @@ -159,7 +153,6 @@ class GitRepo: # Determine author/committer modification and trailer - print(f"DEBUG: GitRepo.commit before logic check, attribute_co_authored_by = {attribute_co_authored_by}") # DEBUG if attribute_co_authored_by: model_name = "unknown-model" if coder and hasattr(coder, "main_model") and coder.main_model.name: @@ -208,7 +201,6 @@ class GitRepo: committer_name = f"{original_user_name} (aider)" # Apply author/committer modifications based on flags determined earlier - print(f"DEBUG: GitRepo.commit before setting env, use_attribute_author={use_attribute_author}, use_attribute_committer={use_attribute_committer}") # DEBUG if use_attribute_committer: os.environ["GIT_COMMITTER_NAME"] = committer_name if use_attribute_author: From 02bc9a85c026ab4dd8aadea73156247f0d5d3131 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:08 +0300 Subject: [PATCH 042/459] Revert "chore: add test comment to dump function" This reverts commit ff8e9850ba2dd61a5ff1cc6f5b2cb30d0469082e. --- aider/dump.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/dump.py b/aider/dump.py index 85065a97d..6098d0b73 100644 --- a/aider/dump.py +++ b/aider/dump.py @@ -13,7 +13,6 @@ def cvt(s): def dump(*vals): # This is a test comment - # This is another test comment # http://docs.python.org/library/traceback.html stack = traceback.extract_stack() vars = stack[-2][3] From cf7b35f90d45766f33327d7dbcd31c5a90c130d1 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:08 +0300 Subject: [PATCH 043/459] Revert "test: add comment for testing" This reverts commit 072bd30443ce0b3bb8cb7df2f9550446b4edb240. --- tests/fixtures/sample-code-base/sample.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/fixtures/sample-code-base/sample.js b/tests/fixtures/sample-code-base/sample.js index 31280539f..a934b428c 100644 --- a/tests/fixtures/sample-code-base/sample.js +++ b/tests/fixtures/sample-code-base/sample.js @@ -1,5 +1,4 @@ // Aider test commit -// Another test comment // Sample JavaScript script with 7 functions // 1. A simple greeting function From 7b8c7edfd5a122967ee03eefa0c5077ae1031d90 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:08 +0300 Subject: [PATCH 044/459] Revert "chore: Add test comment" This reverts commit d5671c2879c85f581bd504a962e8b54b6567c776. --- tests/fixtures/sample-code-base/sample.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/fixtures/sample-code-base/sample.js b/tests/fixtures/sample-code-base/sample.js index a934b428c..f3f2eaf58 100644 --- a/tests/fixtures/sample-code-base/sample.js +++ b/tests/fixtures/sample-code-base/sample.js @@ -1,4 +1,3 @@ -// Aider test commit // Sample JavaScript script with 7 functions // 1. A simple greeting function From aa07e16f1833fb78269286f114e2eb2ccb07b2e9 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:09 +0300 Subject: [PATCH 045/459] Revert "chore: Add test comment" This reverts commit 482e0c2d0b5cdfe60281f13bab2ead4aa540e9e6. --- aider/prompts.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/prompts.py b/aider/prompts.py index 1dacf10d0..84ed75e9b 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -1,6 +1,5 @@ # flake8: noqa: E501 -# This is a test comment. # COMMIT From 427f9c5b00fb3964d71344e86452209df1422616 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:14:09 +0300 Subject: [PATCH 046/459] Revert "chore: Add test comment to dump function" This reverts commit e9511643998d4868bc261b3ec0479e6a2a362b3a. --- aider/dump.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/dump.py b/aider/dump.py index 6098d0b73..2c8bf31c2 100644 --- a/aider/dump.py +++ b/aider/dump.py @@ -12,7 +12,6 @@ def cvt(s): def dump(*vals): - # This is a test comment # http://docs.python.org/library/traceback.html stack = traceback.extract_stack() vars = stack[-2][3] From c56e836d22be0139adb3d976ac49ed4db8a45ab8 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:19:55 +0300 Subject: [PATCH 047/459] refactor: simplify commit logic and use context manager for git env Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- aider/args.py | 5 ++- aider/repo.py | 105 +++++++++++++++++++++++++------------------------- 2 files changed, 56 insertions(+), 54 deletions(-) diff --git a/aider/args.py b/aider/args.py index 3571faa5e..6d62b6dbf 100644 --- a/aider/args.py +++ b/aider/args.py @@ -428,7 +428,10 @@ def get_parser(default_config_files, git_root): "--attribute-author", action=argparse.BooleanOptionalAction, default=True, - help="Attribute aider code changes in the git author name (default: True, ignored if attribute-co-authored-by is True unless explicitly set)", + help=( + "Attribute aider code changes in the git author name (default: True). This is ignored" + " if --attribute-co-authored-by is True." + ), ) group.add_argument( "--attribute-committer", diff --git a/aider/repo.py b/aider/repo.py index f0d436526..f8a5cacfc 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -1,3 +1,4 @@ +import contextlib import os import time from pathlib import Path, PurePosixPath @@ -34,6 +35,19 @@ ANY_GIT_ERROR += [ ANY_GIT_ERROR = tuple(ANY_GIT_ERROR) +@contextlib.contextmanager +def set_git_env(var_name, value, original_value): + """Temporarily set a Git environment variable.""" + os.environ[var_name] = value + try: + yield + finally: + if original_value is not None: + os.environ[var_name] = original_value + elif var_name in os.environ: + del os.environ[var_name] + + class GitRepo: repo = None aider_ignore_file = None @@ -139,37 +153,29 @@ class GitRepo: attribute_committer = self.attribute_committer attribute_commit_message_author = self.attribute_commit_message_author attribute_commit_message_committer = self.attribute_commit_message_committer - attribute_co_authored_by = getattr(self, 'attribute_co_authored_by', False) + attribute_co_authored_by = getattr(self, "attribute_co_authored_by", False) + # Determine commit message prefixing + prefix_commit_message = aider_edits and ( + attribute_commit_message_author or attribute_commit_message_committer + ) + + # Determine Co-authored-by trailer commit_message_trailer = "" - prefix_commit_message = False - use_attribute_author = False - use_attribute_committer = False + if aider_edits and attribute_co_authored_by: + model_name = "unknown-model" + if coder and hasattr(coder, "main_model") and coder.main_model.name: + model_name = coder.main_model.name + commit_message_trailer = ( + f"\n\nCo-authored-by: aider ({model_name}) " + ) - if aider_edits: - # Determine commit message prefixing - if attribute_commit_message_author or attribute_commit_message_committer: - prefix_commit_message = True - - # Determine author/committer modification and trailer - - if attribute_co_authored_by: - model_name = "unknown-model" - if coder and hasattr(coder, "main_model") and coder.main_model.name: - model_name = coder.main_model.name - commit_message_trailer = f"\n\nCo-authored-by: aider ({model_name}) " - # If co-authored-by is used, disable author/committer name modification - use_attribute_author = False - use_attribute_committer = False - else: - # Original behavior when co-authored-by is false - use_attribute_author = attribute_author - use_attribute_committer = attribute_committer - else: # not aider_edits - # Keep original behavior for non-aider edits - use_attribute_author = False - use_attribute_committer = attribute_committer # Respect config for committer - prefix_commit_message = False # Don't prefix non-aider commits + # Determine if author/committer names should be modified + # If co-authored-by is used for aider edits, it takes precedence over direct name modification. + use_attribute_author = attribute_author and aider_edits and not attribute_co_authored_by + use_attribute_committer = attribute_committer and not ( + aider_edits and attribute_co_authored_by + ) if not commit_message: commit_message = "(no commit message provided)" @@ -178,8 +184,6 @@ class GitRepo: commit_message = "aider: " + commit_message full_commit_message = commit_message + commit_message_trailer - # if context: - # full_commit_message += "\n\n# Aider chat conversation:\n\n" + context cmd = ["-m", full_commit_message] if not self.git_commit_verify: @@ -200,32 +204,27 @@ class GitRepo: original_author_name_env = os.environ.get("GIT_AUTHOR_NAME") committer_name = f"{original_user_name} (aider)" - # Apply author/committer modifications based on flags determined earlier - if use_attribute_committer: - os.environ["GIT_COMMITTER_NAME"] = committer_name - if use_attribute_author: - os.environ["GIT_AUTHOR_NAME"] = committer_name - try: - self.repo.git.commit(cmd) - commit_hash = self.get_head_commit_sha(short=True) - self.io.tool_output(f"Commit {commit_hash} {commit_message}", bold=True) - return commit_hash, commit_message + # Use context managers to handle environment variables + with contextlib.ExitStack() as stack: + if use_attribute_committer: + stack.enter_context( + set_git_env("GIT_COMMITTER_NAME", committer_name, original_committer_name_env) + ) + if use_attribute_author: + stack.enter_context( + set_git_env("GIT_AUTHOR_NAME", committer_name, original_author_name_env) + ) + + # Perform the commit + self.repo.git.commit(cmd) + commit_hash = self.get_head_commit_sha(short=True) + self.io.tool_output(f"Commit {commit_hash} {commit_message}", bold=True) + return commit_hash, commit_message + except ANY_GIT_ERROR as err: self.io.tool_error(f"Unable to commit: {err}") - finally: - # Restore the env - if use_attribute_committer: - if original_committer_name_env is not None: - os.environ["GIT_COMMITTER_NAME"] = original_committer_name_env - elif "GIT_COMMITTER_NAME" in os.environ: - del os.environ["GIT_COMMITTER_NAME"] - - if use_attribute_author: - if original_author_name_env is not None: - os.environ["GIT_AUTHOR_NAME"] = original_author_name_env - elif "GIT_AUTHOR_NAME" in os.environ: - del os.environ["GIT_AUTHOR_NAME"] + # No return here, implicitly returns None def get_rel_repo_dir(self): try: From dd4b61da207dfe45cca6e9dee16490b048b3ed8e Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 18:26:46 +0300 Subject: [PATCH 048/459] test: add test for co-authored-by precedence over author/committer Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- tests/basic/test_repo.py | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 2c68c8f00..57bad6625 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -301,6 +301,60 @@ class TestRepo(unittest.TestCase): self.assertEqual(commit.author.name, "Test User") # Should NOT be modified self.assertEqual(commit.committer.name, "Test User") # Should NOT be modified + def test_commit_co_authored_by_precedence(self): + # Test that co-authored-by takes precedence over name modification when both are enabled + if platform.system() == "Windows": + return + + with GitTemporaryDirectory(): + # new repo + raw_repo = git.Repo() + raw_repo.config_writer().set_value("user", "name", "Test User").release() + raw_repo.config_writer().set_value("user", "email", "test@example.com").release() + + # add a file and commit it + fname = Path("file.txt") + fname.touch() + raw_repo.git.add(str(fname)) + raw_repo.git.commit("-m", "initial commit") + + # Mock coder args: All relevant flags enabled + mock_coder = MagicMock() + mock_coder.args.attribute_co_authored_by = True + mock_coder.args.attribute_author = True # Explicitly enable (or rely on default) + mock_coder.args.attribute_committer = True # Explicitly enable (or rely on default) + mock_coder.args.attribute_commit_message_author = False + mock_coder.args.attribute_commit_message_committer = False + mock_coder.main_model = MagicMock() + mock_coder.main_model.name = "gpt-precedence" + + io = InputOutput() + # Initialize GitRepo directly with flags, simulating config/defaults if coder wasn't passed + # This ensures the test covers the case where coder might not provide args + git_repo = GitRepo( + io, + None, + None, + attribute_co_authored_by=True, + attribute_author=True, + attribute_committer=True, + ) + + + # commit a change with aider_edits=True and conflicting flags + fname.write_text("new content precedence") + # Pass the coder object here to ensure its args are used if available, + # but the GitRepo init already set the fallback values. + git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider precedence edit") + + # check the commit message and author/committer + commit = raw_repo.head.commit + self.assertIn("Co-authored-by: aider (gpt-precedence) ", commit.message) + self.assertEqual(commit.message.splitlines()[0], "Aider precedence edit") + # Co-authored-by should take precedence, names should NOT be modified + self.assertEqual(commit.author.name, "Test User") + self.assertEqual(commit.committer.name, "Test User") + def test_commit_without_co_authored_by(self): # Cleanup of the git temp dir explodes on windows From ea74f31b3e98550611e95e7108a9a63c0dd8d5c5 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:09:46 +0300 Subject: [PATCH 049/459] feat: Explicit author/committer flags override co-authored-by Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- aider/args.py | 13 +++--- aider/repo.py | 28 ++++++++++--- tests/basic/test_repo.py | 87 +++++++++++++++++++++------------------- 3 files changed, 77 insertions(+), 51 deletions(-) diff --git a/aider/args.py b/aider/args.py index 6d62b6dbf..7aaf10f2a 100644 --- a/aider/args.py +++ b/aider/args.py @@ -427,17 +427,20 @@ def get_parser(default_config_files, git_root): group.add_argument( "--attribute-author", action=argparse.BooleanOptionalAction, - default=True, + default=None, help=( - "Attribute aider code changes in the git author name (default: True). This is ignored" - " if --attribute-co-authored-by is True." + "Attribute aider code changes in the git author name (default: True). If explicitly set" + " to True, overrides --attribute-co-authored-by precedence." ), ) group.add_argument( "--attribute-committer", action=argparse.BooleanOptionalAction, - default=True, - help="Attribute aider commits in the git committer name (default: True)", + default=None, + help=( + "Attribute aider commits in the git committer name (default: True). If explicitly set" + " to True, overrides --attribute-co-authored-by precedence for aider edits." + ), ) group.add_argument( "--attribute-commit-message-author", diff --git a/aider/repo.py b/aider/repo.py index f8a5cacfc..31bcc7957 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -153,7 +153,16 @@ class GitRepo: attribute_committer = self.attribute_committer attribute_commit_message_author = self.attribute_commit_message_author attribute_commit_message_committer = self.attribute_commit_message_committer - attribute_co_authored_by = getattr(self, "attribute_co_authored_by", False) + attribute_co_authored_by = getattr(self, "attribute_co_authored_by", False) # Should be False if not set + + # Determine explicit settings (None means use default behavior) + author_explicit = attribute_author is not None + committer_explicit = attribute_committer is not None + + # Determine effective settings (apply default True if not explicit) + effective_author = True if attribute_author is None else attribute_author + effective_committer = True if attribute_committer is None else attribute_committer + # Determine commit message prefixing prefix_commit_message = aider_edits and ( @@ -171,12 +180,21 @@ class GitRepo: ) # Determine if author/committer names should be modified - # If co-authored-by is used for aider edits, it takes precedence over direct name modification. - use_attribute_author = attribute_author and aider_edits and not attribute_co_authored_by - use_attribute_committer = attribute_committer and not ( - aider_edits and attribute_co_authored_by + # Author modification applies only to aider edits. + # It's used if effective_author is True AND (co-authored-by is False OR author was explicitly set). + use_attribute_author = ( + aider_edits + and effective_author + and (not attribute_co_authored_by or author_explicit) ) + # Committer modification applies regardless of aider_edits (based on tests). + # It's used if effective_committer is True AND (it's not an aider edit with co-authored-by OR committer was explicitly set). + use_attribute_committer = effective_committer and ( + not (aider_edits and attribute_co_authored_by) or committer_explicit + ) + + if not commit_message: commit_message = "(no commit message provided)" diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 57bad6625..e7026a242 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -185,26 +185,35 @@ class TestRepo(unittest.TestCase): raw_repo.git.commit("-m", "initial commit") io = InputOutput() - git_repo = GitRepo(io, None, None) + # Initialize GitRepo with default None values for attributes + git_repo = GitRepo(io, None, None, attribute_author=None, attribute_committer=None) - # commit a change + # commit a change with aider_edits=True (using default attributes) fname.write_text("new content") git_repo.commit(fnames=[str(fname)], aider_edits=True) - # check the committer name + # check the committer name (defaults interpreted as True) commit = raw_repo.head.commit self.assertEqual(commit.author.name, "Test User (aider)") self.assertEqual(commit.committer.name, "Test User (aider)") - # commit a change without aider_edits + # commit a change without aider_edits (using default attributes) fname.write_text("new content again!") git_repo.commit(fnames=[str(fname)], aider_edits=False) - # check the committer name + # check the committer name (author not modified, committer still modified by default) commit = raw_repo.head.commit self.assertEqual(commit.author.name, "Test User") self.assertEqual(commit.committer.name, "Test User (aider)") + # Now test with explicit False + git_repo_explicit_false = GitRepo(io, None, None, attribute_author=False, attribute_committer=False) + fname.write_text("explicit false content") + git_repo_explicit_false.commit(fnames=[str(fname)], aider_edits=True) + commit = raw_repo.head.commit + self.assertEqual(commit.author.name, "Test User") # Explicit False + self.assertEqual(commit.committer.name, "Test User") # Explicit False + # check that the original committer name is restored original_committer_name = os.environ.get("GIT_COMMITTER_NAME") self.assertIsNone(original_committer_name) @@ -228,15 +237,13 @@ class TestRepo(unittest.TestCase): raw_repo.git.add(str(fname)) raw_repo.git.commit("-m", "initial commit") - # Mock coder args - # Mock coder args: Co-authored-by enabled, author/committer modification disabled + # Mock coder args: Co-authored-by enabled, author/committer use default (None) mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = True - mock_coder.args.attribute_author = False # Explicitly disable name modification - mock_coder.args.attribute_committer = False # Explicitly disable name modification + mock_coder.args.attribute_author = None # Default + mock_coder.args.attribute_committer = None # Default mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False - # Set the model name correctly on the nested mock # The code uses coder.main_model.name for the co-authored-by line mock_coder.main_model = MagicMock() mock_coder.main_model.name = "gpt-test" @@ -253,16 +260,17 @@ class TestRepo(unittest.TestCase): commit = raw_repo.head.commit self.assertIn("Co-authored-by: aider (gpt-test) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider edit") + # With default (None), co-authored-by takes precedence self.assertEqual(commit.author.name, "Test User") # Should NOT be modified self.assertEqual(commit.committer.name, "Test User") # Should NOT be modified - def test_commit_with_co_authored_by_and_name_modification(self): - # Test scenario where Co-authored-by is true AND author/committer modification is also true (default) - # Cleanup of the git temp dir explodes on windows + def test_commit_co_authored_by_with_explicit_name_modification(self): + # Test scenario where Co-authored-by is true AND author/committer modification are explicitly True if platform.system() == "Windows": return with GitTemporaryDirectory(): + # Setup repo... # new repo raw_repo = git.Repo() raw_repo.config_writer().set_value("user", "name", "Test User").release() @@ -274,14 +282,13 @@ class TestRepo(unittest.TestCase): raw_repo.git.add(str(fname)) raw_repo.git.commit("-m", "initial commit") - # Mock coder args: Co-authored-by enabled, author/committer modification enabled (default) + # Mock coder args: Co-authored-by enabled, author/committer modification explicitly enabled mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = True - mock_coder.args.attribute_author = True # Explicitly enable (or rely on default) - mock_coder.args.attribute_committer = True # Explicitly enable (or rely on default) + mock_coder.args.attribute_author = True # Explicitly enable + mock_coder.args.attribute_committer = True # Explicitly enable mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False - # Set the model name correctly on the nested mock mock_coder.main_model = MagicMock() mock_coder.main_model.name = "gpt-test-combo" @@ -297,12 +304,12 @@ class TestRepo(unittest.TestCase): commit = raw_repo.head.commit self.assertIn("Co-authored-by: aider (gpt-test-combo) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider combo edit") - # When co-authored-by is true, name modification should be disabled - self.assertEqual(commit.author.name, "Test User") # Should NOT be modified - self.assertEqual(commit.committer.name, "Test User") # Should NOT be modified + # When co-authored-by is true BUT author/committer are explicit True, modification SHOULD happen + self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified + self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified - def test_commit_co_authored_by_precedence(self): - # Test that co-authored-by takes precedence over name modification when both are enabled + def test_commit_co_authored_by_precedence_over_default(self): + # Test that co-authored-by takes precedence over default (None) name modification if platform.system() == "Windows": return @@ -318,30 +325,29 @@ class TestRepo(unittest.TestCase): raw_repo.git.add(str(fname)) raw_repo.git.commit("-m", "initial commit") - # Mock coder args: All relevant flags enabled + # Mock coder args: Co-authored-by enabled, author/committer use default (None) mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = True - mock_coder.args.attribute_author = True # Explicitly enable (or rely on default) - mock_coder.args.attribute_committer = True # Explicitly enable (or rely on default) + mock_coder.args.attribute_author = None # Default + mock_coder.args.attribute_committer = None # Default mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False - mock_coder.main_model = MagicMock() + mock_coder.main_model = MagicMock() # Define main_model before accessing name mock_coder.main_model.name = "gpt-precedence" io = InputOutput() - # Initialize GitRepo directly with flags, simulating config/defaults if coder wasn't passed - # This ensures the test covers the case where coder might not provide args + # Initialize GitRepo directly with flags, simulating config/defaults + # Use None for author/committer to test default behavior git_repo = GitRepo( io, None, None, attribute_co_authored_by=True, - attribute_author=True, - attribute_committer=True, + attribute_author=None, # Default + attribute_committer=None, # Default ) - - # commit a change with aider_edits=True and conflicting flags + # commit a change with aider_edits=True and default flags fname.write_text("new content precedence") # Pass the coder object here to ensure its args are used if available, # but the GitRepo init already set the fallback values. @@ -351,13 +357,13 @@ class TestRepo(unittest.TestCase): commit = raw_repo.head.commit self.assertIn("Co-authored-by: aider (gpt-precedence) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider precedence edit") - # Co-authored-by should take precedence, names should NOT be modified + # Co-authored-by should take precedence over default (None), names should NOT be modified self.assertEqual(commit.author.name, "Test User") self.assertEqual(commit.committer.name, "Test User") def test_commit_without_co_authored_by(self): - # Cleanup of the git temp dir explodes on windows + # Test standard name modification when co-authored-by is False if platform.system() == "Windows": return @@ -373,14 +379,13 @@ class TestRepo(unittest.TestCase): raw_repo.git.add(str(fname)) raw_repo.git.commit("-m", "initial commit") - # Mock coder args (default behavior) + # Mock coder args (co-authored-by False, author/committer default None) mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = False - mock_coder.args.attribute_author = True - mock_coder.args.attribute_committer = True + mock_coder.args.attribute_author = None # Default + mock_coder.args.attribute_committer = None # Default mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False - # Set the model name correctly on the nested mock (though not used in this test assertion) mock_coder.main_model = MagicMock() mock_coder.main_model.name = "gpt-test-no-coauthor" @@ -392,12 +397,12 @@ class TestRepo(unittest.TestCase): fname.write_text("new content") git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") - # check the commit message and author/committer + # check the commit message and author/committer (defaults interpreted as True) commit = raw_repo.head.commit self.assertNotIn("Co-authored-by:", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider edit") - self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified - self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified + self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified (default True) + self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified (default True) def test_get_tracked_files(self): From 278a596bfafd8f9e596f64732d83194271bc0e4d Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:21:03 +0300 Subject: [PATCH 050/459] docs: clarify commit author/committer/co-authored-by logic Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- aider/repo.py | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/aider/repo.py b/aider/repo.py index 31bcc7957..ad87a379a 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -128,6 +128,70 @@ class GitRepo: self.aider_ignore_file = Path(aider_ignore_file) def commit(self, fnames=None, context=None, message=None, aider_edits=False, coder=None): + """ + Commit the specified files or all dirty files if none are specified. + + Args: + fnames (list, optional): List of filenames to commit. Defaults to None (commit all + dirty files). + context (str, optional): Context for generating the commit message. Defaults to None. + message (str, optional): Explicit commit message. Defaults to None (generate message). + aider_edits (bool, optional): Whether the changes were made by Aider. Defaults to False. + This affects attribution logic. + coder (Coder, optional): The Coder instance, used to access config and model info. + Defaults to None. + + Returns: + tuple(str, str) or None: The commit hash and commit message if successful, else None. + + Attribution Logic: + ------------------ + This method handles Git commit attribution based on configuration flags and whether + Aider generated the changes (`aider_edits`). + + Key Concepts: + - Author: The person who originally wrote the code changes. + - Committer: The person who last applied the commit to the repository. + - aider_edits=True: Changes were generated by Aider (LLM). + - aider_edits=False: Commit is user-driven (e.g., /commit manually staged changes). + - Explicit Setting: A flag (--attribute-...) is set to True or False via command line + or config file. + - Implicit Default: A flag is not explicitly set, defaulting to None in args, which is + interpreted as True unless overridden by other logic. + + Flags: + - --attribute-author: Modify Author name to "User Name (aider)". + - --attribute-committer: Modify Committer name to "User Name (aider)". + - --attribute-co-authored-by: Add "Co-authored-by: aider () " + trailer to the commit message. + + Behavior Summary: + + 1. When aider_edits = True (AI Changes): + - If --attribute-co-authored-by=True: + - Co-authored-by trailer IS ADDED. + - Author/Committer names are NOT modified by default (co-authored-by takes precedence). + - EXCEPTION: If --attribute-author/--attribute-committer is EXPLICITLY True, + the respective name IS modified (explicit overrides precedence). + - If --attribute-co-authored-by=False: + - Co-authored-by trailer is NOT added. + - Author/Committer names ARE modified by default (implicit True). + - EXCEPTION: If --attribute-author/--attribute-committer is EXPLICITLY False, + the respective name is NOT modified. + + 2. When aider_edits = False (User Changes): + - --attribute-co-authored-by is IGNORED (trailer never added). + - Author name is NEVER modified (--attribute-author ignored). + - Committer name IS modified by default (implicit True, as Aider runs `git commit`). + - EXCEPTION: If --attribute-committer is EXPLICITLY False, the name is NOT modified. + + Resulting Scenarios: + - Standard AI edit (defaults): Co-authored-by=False -> Author=You(aider), Committer=You(aider) + - AI edit with Co-authored-by (default): Co-authored-by=True -> Author=You, Committer=You, Trailer added + - AI edit with Co-authored-by + Explicit Author: Co-authored-by=True, --attribute-author -> Author=You(aider), Committer=You, Trailer added + - User commit (defaults): aider_edits=False -> Author=You, Committer=You(aider) + - User commit with explicit no-committer: aider_edits=False, --no-attribute-committer -> Author=You, Committer=You + """ if not fnames and not self.repo.is_dirty(): return From 5664b5b195aa53f507376efc407dc49e204f3a0b Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:41:24 +0300 Subject: [PATCH 051/459] test: Assert commit return value in more tests Co-authored-by: aider (vertex_ai/gemini-2.0-flash-lite-001) --- tests/basic/test_repo.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index e7026a242..287d5ea16 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -190,7 +190,8 @@ class TestRepo(unittest.TestCase): # commit a change with aider_edits=True (using default attributes) fname.write_text("new content") - git_repo.commit(fnames=[str(fname)], aider_edits=True) + commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True) + self.assertIsNotNone(commit_result) # check the committer name (defaults interpreted as True) commit = raw_repo.head.commit @@ -199,7 +200,8 @@ class TestRepo(unittest.TestCase): # commit a change without aider_edits (using default attributes) fname.write_text("new content again!") - git_repo.commit(fnames=[str(fname)], aider_edits=False) + commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=False) + self.assertIsNotNone(commit_result) # check the committer name (author not modified, committer still modified by default) commit = raw_repo.head.commit @@ -209,7 +211,8 @@ class TestRepo(unittest.TestCase): # Now test with explicit False git_repo_explicit_false = GitRepo(io, None, None, attribute_author=False, attribute_committer=False) fname.write_text("explicit false content") - git_repo_explicit_false.commit(fnames=[str(fname)], aider_edits=True) + commit_result = git_repo_explicit_false.commit(fnames=[str(fname)], aider_edits=True) + self.assertIsNotNone(commit_result) commit = raw_repo.head.commit self.assertEqual(commit.author.name, "Test User") # Explicit False self.assertEqual(commit.committer.name, "Test User") # Explicit False @@ -254,7 +257,8 @@ class TestRepo(unittest.TestCase): # commit a change with aider_edits=True and co-authored-by flag fname.write_text("new content") - git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") + commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") + self.assertIsNotNone(commit_result) # check the commit message and author/committer commit = raw_repo.head.commit @@ -298,7 +302,8 @@ class TestRepo(unittest.TestCase): # commit a change with aider_edits=True and combo flags fname.write_text("new content combo") - git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider combo edit") + commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider combo edit") + self.assertIsNotNone(commit_result) # check the commit message and author/committer commit = raw_repo.head.commit @@ -351,7 +356,8 @@ class TestRepo(unittest.TestCase): fname.write_text("new content precedence") # Pass the coder object here to ensure its args are used if available, # but the GitRepo init already set the fallback values. - git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider precedence edit") + commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider precedence edit") + self.assertIsNotNone(commit_result) # check the commit message and author/committer commit = raw_repo.head.commit @@ -395,7 +401,8 @@ class TestRepo(unittest.TestCase): # commit a change with aider_edits=True and default flags fname.write_text("new content") - git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") + commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") + self.assertIsNotNone(commit_result) # check the commit message and author/committer (defaults interpreted as True) commit = raw_repo.head.commit @@ -598,7 +605,8 @@ class TestRepo(unittest.TestCase): git_repo = GitRepo(InputOutput(), None, None) - git_repo.commit(fnames=[str(fname)]) + commit_result = git_repo.commit(fnames=[str(fname)]) + self.assertIsNotNone(commit_result) def test_git_commit_verify(self): """Test that git_commit_verify controls whether --no-verify is passed to git commit""" From 37a252748a68bb26398ea38e92472e94166abbb5 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:45:01 +0300 Subject: [PATCH 052/459] test: Fix commit result assertion in test_noop_commit --- tests/basic/test_repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 287d5ea16..88c4b4edf 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -606,7 +606,7 @@ class TestRepo(unittest.TestCase): git_repo = GitRepo(InputOutput(), None, None) commit_result = git_repo.commit(fnames=[str(fname)]) - self.assertIsNotNone(commit_result) + self.assertIsNone(commit_result) def test_git_commit_verify(self): """Test that git_commit_verify controls whether --no-verify is passed to git commit""" From d991cb67219e0728679bf5d00773f12619c97279 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:54:56 +0300 Subject: [PATCH 053/459] test: cover user commit with no committer attribution Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- tests/basic/test_repo.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 88c4b4edf..9633ec208 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -223,6 +223,15 @@ class TestRepo(unittest.TestCase): original_author_name = os.environ.get("GIT_AUTHOR_NAME") self.assertIsNone(original_author_name) + # Test user commit with explicit no-committer attribution + git_repo_user_no_committer = GitRepo(io, None, None, attribute_committer=False) + fname.write_text("user no committer content") + commit_result = git_repo_user_no_committer.commit(fnames=[str(fname)], aider_edits=False) + self.assertIsNotNone(commit_result) + commit = raw_repo.head.commit + self.assertEqual(commit.author.name, "Test User") # Author never modified for user commits + self.assertEqual(commit.committer.name, "Test User") # Explicit False prevents modification + def test_commit_with_co_authored_by(self): # Cleanup of the git temp dir explodes on windows if platform.system() == "Windows": From 3e1bc77bf20ceec54699fc1141b6d90aaf1adc1a Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:56:18 +0300 Subject: [PATCH 054/459] test: add tests for commit author/committer attribution logic Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- tests/basic/test_repo.py | 115 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 9633ec208..5d1ff335b 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -420,6 +420,121 @@ class TestRepo(unittest.TestCase): self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified (default True) self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified (default True) + def test_commit_ai_edits_no_coauthor_explicit_false(self): + # Test AI edits (aider_edits=True) when co-authored-by is False, + # but author or committer attribution is explicitly disabled. + if platform.system() == "Windows": + return + + with GitTemporaryDirectory(): + # Setup repo + raw_repo = git.Repo() + raw_repo.config_writer().set_value("user", "name", "Test User").release() + raw_repo.config_writer().set_value("user", "email", "test@example.com").release() + fname = Path("file.txt") + fname.touch() + raw_repo.git.add(str(fname)) + raw_repo.git.commit("-m", "initial commit") + + io = InputOutput() + + # Case 1: attribute_author = False, attribute_committer = None (default True) + mock_coder_no_author = MagicMock() + mock_coder_no_author.args.attribute_co_authored_by = False + mock_coder_no_author.args.attribute_author = False # Explicit False + mock_coder_no_author.args.attribute_committer = None # Default True + mock_coder_no_author.args.attribute_commit_message_author = False + mock_coder_no_author.args.attribute_commit_message_committer = False + mock_coder_no_author.main_model = MagicMock() + mock_coder_no_author.main_model.name = "gpt-test-no-author" + + git_repo_no_author = GitRepo(io, None, None) + fname.write_text("no author content") + commit_result = git_repo_no_author.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder_no_author, message="Aider no author") + self.assertIsNotNone(commit_result) + commit = raw_repo.head.commit + self.assertNotIn("Co-authored-by:", commit.message) + self.assertEqual(commit.author.name, "Test User") # Explicit False + self.assertEqual(commit.committer.name, "Test User (aider)") # Default True + + # Case 2: attribute_author = None (default True), attribute_committer = False + mock_coder_no_committer = MagicMock() + mock_coder_no_committer.args.attribute_co_authored_by = False + mock_coder_no_committer.args.attribute_author = None # Default True + mock_coder_no_committer.args.attribute_committer = False # Explicit False + mock_coder_no_committer.args.attribute_commit_message_author = False + mock_coder_no_committer.args.attribute_commit_message_committer = False + mock_coder_no_committer.main_model = MagicMock() + mock_coder_no_committer.main_model.name = "gpt-test-no-committer" + + git_repo_no_committer = GitRepo(io, None, None) + fname.write_text("no committer content") + commit_result = git_repo_no_committer.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder_no_committer, message="Aider no committer") + self.assertIsNotNone(commit_result) + commit = raw_repo.head.commit + self.assertNotIn("Co-authored-by:", commit.message) + self.assertEqual(commit.author.name, "Test User (aider)") # Default True + self.assertEqual(commit.committer.name, "Test User") # Explicit False + + + def test_commit_user_edits_ignores_co_author(self): + # Test user edits (aider_edits=False) behavior regarding co-author and name attribution. + # Co-author should be ignored, Author never modified, Committer follows flag. + if platform.system() == "Windows": + return + + with GitTemporaryDirectory(): + # Setup repo + raw_repo = git.Repo() + raw_repo.config_writer().set_value("user", "name", "Test User").release() + raw_repo.config_writer().set_value("user", "email", "test@example.com").release() + fname = Path("file.txt") + fname.touch() + raw_repo.git.add(str(fname)) + raw_repo.git.commit("-m", "initial commit") + + io = InputOutput() + + # Case 1: co_author=True, committer=None (default True) + mock_coder_user_default = MagicMock() + mock_coder_user_default.args.attribute_co_authored_by = True # Should be ignored + mock_coder_user_default.args.attribute_author = True # Should be ignored + mock_coder_user_default.args.attribute_committer = None # Default True + mock_coder_user_default.args.attribute_commit_message_author = False + mock_coder_user_default.args.attribute_commit_message_committer = False + mock_coder_user_default.main_model = MagicMock() + mock_coder_user_default.main_model.name = "gpt-user-default" + + git_repo_user_default = GitRepo(io, None, None) + fname.write_text("user default content") + commit_result = git_repo_user_default.commit(fnames=[str(fname)], aider_edits=False, coder=mock_coder_user_default, message="User default") + self.assertIsNotNone(commit_result) + commit = raw_repo.head.commit + self.assertNotIn("Co-authored-by:", commit.message) # Ignored + self.assertEqual(commit.author.name, "Test User") # Never modified + self.assertEqual(commit.committer.name, "Test User (aider)") # Default True + + # Case 2: co_author=True, committer=False + mock_coder_user_no_committer = MagicMock() + mock_coder_user_no_committer.args.attribute_co_authored_by = True # Should be ignored + mock_coder_user_no_committer.args.attribute_author = True # Should be ignored + mock_coder_user_no_committer.args.attribute_committer = False # Explicit False + mock_coder_user_no_committer.args.attribute_commit_message_author = False + mock_coder_user_no_committer.args.attribute_commit_message_committer = False + mock_coder_user_no_committer.main_model = MagicMock() + mock_coder_user_no_committer.main_model.name = "gpt-user-no-committer" + + # Need to init GitRepo with attribute_committer=False for this case + git_repo_user_no_committer = GitRepo(io, None, None, attribute_committer=False) + fname.write_text("user no committer content") + # Pass coder to simulate args being present, though GitRepo init matters more here + commit_result = git_repo_user_no_committer.commit(fnames=[str(fname)], aider_edits=False, coder=mock_coder_user_no_committer, message="User no committer") + self.assertIsNotNone(commit_result) + commit = raw_repo.head.commit + self.assertNotIn("Co-authored-by:", commit.message) # Ignored + self.assertEqual(commit.author.name, "Test User") # Never modified + self.assertEqual(commit.committer.name, "Test User") # Explicit False + def test_get_tracked_files(self): # Create a temporary directory From 9e91e8f1b2d2a0b13567da85da85fbfe046314bb Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:58:06 +0300 Subject: [PATCH 055/459] test: remove redundant commit attribution tests Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- tests/basic/test_repo.py | 104 --------------------------------------- 1 file changed, 104 deletions(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 5d1ff335b..a1224ce02 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -376,50 +376,6 @@ class TestRepo(unittest.TestCase): self.assertEqual(commit.author.name, "Test User") self.assertEqual(commit.committer.name, "Test User") - - def test_commit_without_co_authored_by(self): - # Test standard name modification when co-authored-by is False - if platform.system() == "Windows": - return - - with GitTemporaryDirectory(): - # new repo - raw_repo = git.Repo() - raw_repo.config_writer().set_value("user", "name", "Test User").release() - raw_repo.config_writer().set_value("user", "email", "test@example.com").release() - - # add a file and commit it - fname = Path("file.txt") - fname.touch() - raw_repo.git.add(str(fname)) - raw_repo.git.commit("-m", "initial commit") - - # Mock coder args (co-authored-by False, author/committer default None) - mock_coder = MagicMock() - mock_coder.args.attribute_co_authored_by = False - mock_coder.args.attribute_author = None # Default - mock_coder.args.attribute_committer = None # Default - mock_coder.args.attribute_commit_message_author = False - mock_coder.args.attribute_commit_message_committer = False - mock_coder.main_model = MagicMock() - mock_coder.main_model.name = "gpt-test-no-coauthor" - - - io = InputOutput() - git_repo = GitRepo(io, None, None) - - # commit a change with aider_edits=True and default flags - fname.write_text("new content") - commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") - self.assertIsNotNone(commit_result) - - # check the commit message and author/committer (defaults interpreted as True) - commit = raw_repo.head.commit - self.assertNotIn("Co-authored-by:", commit.message) - self.assertEqual(commit.message.splitlines()[0], "Aider edit") - self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified (default True) - self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified (default True) - def test_commit_ai_edits_no_coauthor_explicit_false(self): # Test AI edits (aider_edits=True) when co-authored-by is False, # but author or committer attribution is explicitly disabled. @@ -476,66 +432,6 @@ class TestRepo(unittest.TestCase): self.assertEqual(commit.author.name, "Test User (aider)") # Default True self.assertEqual(commit.committer.name, "Test User") # Explicit False - - def test_commit_user_edits_ignores_co_author(self): - # Test user edits (aider_edits=False) behavior regarding co-author and name attribution. - # Co-author should be ignored, Author never modified, Committer follows flag. - if platform.system() == "Windows": - return - - with GitTemporaryDirectory(): - # Setup repo - raw_repo = git.Repo() - raw_repo.config_writer().set_value("user", "name", "Test User").release() - raw_repo.config_writer().set_value("user", "email", "test@example.com").release() - fname = Path("file.txt") - fname.touch() - raw_repo.git.add(str(fname)) - raw_repo.git.commit("-m", "initial commit") - - io = InputOutput() - - # Case 1: co_author=True, committer=None (default True) - mock_coder_user_default = MagicMock() - mock_coder_user_default.args.attribute_co_authored_by = True # Should be ignored - mock_coder_user_default.args.attribute_author = True # Should be ignored - mock_coder_user_default.args.attribute_committer = None # Default True - mock_coder_user_default.args.attribute_commit_message_author = False - mock_coder_user_default.args.attribute_commit_message_committer = False - mock_coder_user_default.main_model = MagicMock() - mock_coder_user_default.main_model.name = "gpt-user-default" - - git_repo_user_default = GitRepo(io, None, None) - fname.write_text("user default content") - commit_result = git_repo_user_default.commit(fnames=[str(fname)], aider_edits=False, coder=mock_coder_user_default, message="User default") - self.assertIsNotNone(commit_result) - commit = raw_repo.head.commit - self.assertNotIn("Co-authored-by:", commit.message) # Ignored - self.assertEqual(commit.author.name, "Test User") # Never modified - self.assertEqual(commit.committer.name, "Test User (aider)") # Default True - - # Case 2: co_author=True, committer=False - mock_coder_user_no_committer = MagicMock() - mock_coder_user_no_committer.args.attribute_co_authored_by = True # Should be ignored - mock_coder_user_no_committer.args.attribute_author = True # Should be ignored - mock_coder_user_no_committer.args.attribute_committer = False # Explicit False - mock_coder_user_no_committer.args.attribute_commit_message_author = False - mock_coder_user_no_committer.args.attribute_commit_message_committer = False - mock_coder_user_no_committer.main_model = MagicMock() - mock_coder_user_no_committer.main_model.name = "gpt-user-no-committer" - - # Need to init GitRepo with attribute_committer=False for this case - git_repo_user_no_committer = GitRepo(io, None, None, attribute_committer=False) - fname.write_text("user no committer content") - # Pass coder to simulate args being present, though GitRepo init matters more here - commit_result = git_repo_user_no_committer.commit(fnames=[str(fname)], aider_edits=False, coder=mock_coder_user_no_committer, message="User no committer") - self.assertIsNotNone(commit_result) - commit = raw_repo.head.commit - self.assertNotIn("Co-authored-by:", commit.message) # Ignored - self.assertEqual(commit.author.name, "Test User") # Never modified - self.assertEqual(commit.committer.name, "Test User") # Explicit False - - def test_get_tracked_files(self): # Create a temporary directory tempdir = Path(tempfile.mkdtemp()) From 6a970c35152c350797bf44ee10f69ca23cd61dfa Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 19:58:29 +0300 Subject: [PATCH 056/459] test: remove redundant co-authored-by precedence test Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- tests/basic/test_repo.py | 54 ---------------------------------------- 1 file changed, 54 deletions(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index a1224ce02..11523996f 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -322,60 +322,6 @@ class TestRepo(unittest.TestCase): self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified - def test_commit_co_authored_by_precedence_over_default(self): - # Test that co-authored-by takes precedence over default (None) name modification - if platform.system() == "Windows": - return - - with GitTemporaryDirectory(): - # new repo - raw_repo = git.Repo() - raw_repo.config_writer().set_value("user", "name", "Test User").release() - raw_repo.config_writer().set_value("user", "email", "test@example.com").release() - - # add a file and commit it - fname = Path("file.txt") - fname.touch() - raw_repo.git.add(str(fname)) - raw_repo.git.commit("-m", "initial commit") - - # Mock coder args: Co-authored-by enabled, author/committer use default (None) - mock_coder = MagicMock() - mock_coder.args.attribute_co_authored_by = True - mock_coder.args.attribute_author = None # Default - mock_coder.args.attribute_committer = None # Default - mock_coder.args.attribute_commit_message_author = False - mock_coder.args.attribute_commit_message_committer = False - mock_coder.main_model = MagicMock() # Define main_model before accessing name - mock_coder.main_model.name = "gpt-precedence" - - io = InputOutput() - # Initialize GitRepo directly with flags, simulating config/defaults - # Use None for author/committer to test default behavior - git_repo = GitRepo( - io, - None, - None, - attribute_co_authored_by=True, - attribute_author=None, # Default - attribute_committer=None, # Default - ) - - # commit a change with aider_edits=True and default flags - fname.write_text("new content precedence") - # Pass the coder object here to ensure its args are used if available, - # but the GitRepo init already set the fallback values. - commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider precedence edit") - self.assertIsNotNone(commit_result) - - # check the commit message and author/committer - commit = raw_repo.head.commit - self.assertIn("Co-authored-by: aider (gpt-precedence) ", commit.message) - self.assertEqual(commit.message.splitlines()[0], "Aider precedence edit") - # Co-authored-by should take precedence over default (None), names should NOT be modified - self.assertEqual(commit.author.name, "Test User") - self.assertEqual(commit.committer.name, "Test User") - def test_commit_ai_edits_no_coauthor_explicit_false(self): # Test AI edits (aider_edits=True) when co-authored-by is False, # but author or committer attribution is explicitly disabled. From 5851d66174af65ffea837c57c22e51893898b229 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 20:00:44 +0300 Subject: [PATCH 057/459] test: improve test clarity with skipIf and assertion messages Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- tests/basic/test_repo.py | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 11523996f..4d5abac86 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -165,14 +165,11 @@ class TestRepo(unittest.TestCase): args = mock_send.call_args[0] # Get positional args self.assertEqual(args[0][0]["content"], custom_prompt) # Check first message content + @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") @patch("aider.repo.GitRepo.get_commit_message") def test_commit_with_custom_committer_name(self, mock_send): mock_send.return_value = '"a good commit message"' - # Cleanup of the git temp dir explodes on windows - if platform.system() == "Windows": - return - with GitTemporaryDirectory(): # new repo raw_repo = git.Repo() @@ -229,14 +226,11 @@ class TestRepo(unittest.TestCase): commit_result = git_repo_user_no_committer.commit(fnames=[str(fname)], aider_edits=False) self.assertIsNotNone(commit_result) commit = raw_repo.head.commit - self.assertEqual(commit.author.name, "Test User") # Author never modified for user commits - self.assertEqual(commit.committer.name, "Test User") # Explicit False prevents modification + self.assertEqual(commit.author.name, "Test User", msg="Author name should not be modified for user commits") + self.assertEqual(commit.committer.name, "Test User", msg="Committer name should not be modified when attribute_committer=False") + @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") def test_commit_with_co_authored_by(self): - # Cleanup of the git temp dir explodes on windows - if platform.system() == "Windows": - return - with GitTemporaryDirectory(): # new repo raw_repo = git.Repo() @@ -274,14 +268,12 @@ class TestRepo(unittest.TestCase): self.assertIn("Co-authored-by: aider (gpt-test) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider edit") # With default (None), co-authored-by takes precedence - self.assertEqual(commit.author.name, "Test User") # Should NOT be modified - self.assertEqual(commit.committer.name, "Test User") # Should NOT be modified + self.assertEqual(commit.author.name, "Test User", msg="Author name should not be modified when co-authored-by takes precedence") + self.assertEqual(commit.committer.name, "Test User", msg="Committer name should not be modified when co-authored-by takes precedence") + @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") def test_commit_co_authored_by_with_explicit_name_modification(self): # Test scenario where Co-authored-by is true AND author/committer modification are explicitly True - if platform.system() == "Windows": - return - with GitTemporaryDirectory(): # Setup repo... # new repo @@ -319,15 +311,13 @@ class TestRepo(unittest.TestCase): self.assertIn("Co-authored-by: aider (gpt-test-combo) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider combo edit") # When co-authored-by is true BUT author/committer are explicit True, modification SHOULD happen - self.assertEqual(commit.author.name, "Test User (aider)") # Should be modified - self.assertEqual(commit.committer.name, "Test User (aider)") # Should be modified + self.assertEqual(commit.author.name, "Test User (aider)", msg="Author name should be modified when explicitly True, even with co-author") + self.assertEqual(commit.committer.name, "Test User (aider)", msg="Committer name should be modified when explicitly True, even with co-author") + @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") def test_commit_ai_edits_no_coauthor_explicit_false(self): # Test AI edits (aider_edits=True) when co-authored-by is False, # but author or committer attribution is explicitly disabled. - if platform.system() == "Windows": - return - with GitTemporaryDirectory(): # Setup repo raw_repo = git.Repo() @@ -375,8 +365,8 @@ class TestRepo(unittest.TestCase): self.assertIsNotNone(commit_result) commit = raw_repo.head.commit self.assertNotIn("Co-authored-by:", commit.message) - self.assertEqual(commit.author.name, "Test User (aider)") # Default True - self.assertEqual(commit.committer.name, "Test User") # Explicit False + self.assertEqual(commit.author.name, "Test User (aider)", msg="Author name should be modified (default True) when co-author=False") + self.assertEqual(commit.committer.name, "Test User", msg="Committer name should not be modified (explicit False) when co-author=False") def test_get_tracked_files(self): # Create a temporary directory @@ -574,12 +564,9 @@ class TestRepo(unittest.TestCase): commit_result = git_repo.commit(fnames=[str(fname)]) self.assertIsNone(commit_result) + @unittest.skipIf(platform.system() == "Windows", "Git hook execution differs on Windows") def test_git_commit_verify(self): """Test that git_commit_verify controls whether --no-verify is passed to git commit""" - # Skip on Windows as hook execution works differently - if platform.system() == "Windows": - return - with GitTemporaryDirectory(): # Create a new repo raw_repo = git.Repo() From 38dfd6f4f96110d0e9bb5fcd9fcea044f744b3c5 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 20:07:33 +0300 Subject: [PATCH 058/459] docs: clarify --attribute-co-authored-by precedence --- aider/args.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/aider/args.py b/aider/args.py index 7aaf10f2a..dfa84b6c2 100644 --- a/aider/args.py +++ b/aider/args.py @@ -458,7 +458,11 @@ def get_parser(default_config_files, git_root): "--attribute-co-authored-by", action=argparse.BooleanOptionalAction, default=False, - help="Attribute aider edits using the Co-authored-by trailer in the commit message (default: False).", + help=( + "Attribute aider edits using the Co-authored-by trailer in the commit message" + " (default: False). If True, this takes precedence over default --attribute-author and" + " --attribute-committer behavior unless they are explicitly set to True." + ), ) group.add_argument( "--git-commit-verify", From 165e237be78c36437d1f2b5f0101546a1f4e2026 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 20:25:01 +0300 Subject: [PATCH 059/459] chore: remove unnecessary comment in repo.py Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- aider/repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/repo.py b/aider/repo.py index ad87a379a..85130e105 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -210,7 +210,7 @@ class GitRepo: attribute_committer = coder.args.attribute_committer attribute_commit_message_author = coder.args.attribute_commit_message_author attribute_commit_message_committer = coder.args.attribute_commit_message_committer - attribute_co_authored_by = coder.args.attribute_co_authored_by # <-- Restored + attribute_co_authored_by = coder.args.attribute_co_authored_by else: # Fallback to self attributes (initialized from config/defaults) attribute_author = self.attribute_author From 3f94fd5e4edd2205a24d5716c4dec3e9075f3b56 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 20:38:25 +0300 Subject: [PATCH 060/459] refactor: Simplify access to attribute_co_authored_by Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- aider/repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/repo.py b/aider/repo.py index 85130e105..0fa58ab7d 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -217,7 +217,7 @@ class GitRepo: attribute_committer = self.attribute_committer attribute_commit_message_author = self.attribute_commit_message_author attribute_commit_message_committer = self.attribute_commit_message_committer - attribute_co_authored_by = getattr(self, "attribute_co_authored_by", False) # Should be False if not set + attribute_co_authored_by = self.attribute_co_authored_by # Determine explicit settings (None means use default behavior) author_explicit = attribute_author is not None From 1d42690824f4208c612210b73b6d002830aa7882 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Sat, 12 Apr 2025 20:50:29 +0300 Subject: [PATCH 061/459] fix: update co-authored-by domain to aider.chat Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) --- aider/repo.py | 4 ++-- tests/basic/test_repo.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index 0fa58ab7d..aa2d525f7 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -162,7 +162,7 @@ class GitRepo: Flags: - --attribute-author: Modify Author name to "User Name (aider)". - --attribute-committer: Modify Committer name to "User Name (aider)". - - --attribute-co-authored-by: Add "Co-authored-by: aider () " + - --attribute-co-authored-by: Add "Co-authored-by: aider () " trailer to the commit message. Behavior Summary: @@ -240,7 +240,7 @@ class GitRepo: if coder and hasattr(coder, "main_model") and coder.main_model.name: model_name = coder.main_model.name commit_message_trailer = ( - f"\n\nCo-authored-by: aider ({model_name}) " + f"\n\nCo-authored-by: aider ({model_name}) " ) # Determine if author/committer names should be modified diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 4d5abac86..400c307a8 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -265,7 +265,7 @@ class TestRepo(unittest.TestCase): # check the commit message and author/committer commit = raw_repo.head.commit - self.assertIn("Co-authored-by: aider (gpt-test) ", commit.message) + self.assertIn("Co-authored-by: aider (gpt-test) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider edit") # With default (None), co-authored-by takes precedence self.assertEqual(commit.author.name, "Test User", msg="Author name should not be modified when co-authored-by takes precedence") @@ -308,7 +308,7 @@ class TestRepo(unittest.TestCase): # check the commit message and author/committer commit = raw_repo.head.commit - self.assertIn("Co-authored-by: aider (gpt-test-combo) ", commit.message) + self.assertIn("Co-authored-by: aider (gpt-test-combo) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider combo edit") # When co-authored-by is true BUT author/committer are explicit True, modification SHOULD happen self.assertEqual(commit.author.name, "Test User (aider)", msg="Author name should be modified when explicitly True, even with co-author") From f106993cd1704a20e102c3e987031b7becee0a56 Mon Sep 17 00:00:00 2001 From: Andrew Grigorev Date: Tue, 15 Apr 2025 01:35:00 +0300 Subject: [PATCH 062/459] fix: add --disable-playwright option to suppress Playwright prompts and usage Co-authored-by: aider (openai/gpt-4.1) --- aider/args.py | 6 ++ aider/commands.py | 14 ++- tests/scrape/test_playwright_disable.py | 120 ++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 tests/scrape/test_playwright_disable.py diff --git a/aider/args.py b/aider/args.py index 6df19778b..1bc1aaed2 100644 --- a/aider/args.py +++ b/aider/args.py @@ -670,6 +670,12 @@ def get_parser(default_config_files, git_root): ###### group = parser.add_argument_group("Other settings") + group.add_argument( + "--disable-playwright", + action="store_true", + help="Never prompt for or attempt to install Playwright for web scraping (default: False).", + default=False, + ) group.add_argument( "--file", action="append", diff --git a/aider/commands.py b/aider/commands.py index 81fc80093..29f20a976 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -220,12 +220,18 @@ class Commands: self.io.tool_output(f"Scraping {url}...") if not self.scraper: - res = install_playwright(self.io) - if not res: - self.io.tool_warning("Unable to initialize playwright.") + disable_playwright = getattr(self.args, "disable_playwright", False) + if disable_playwright: + res = False + else: + res = install_playwright(self.io) + if not res: + self.io.tool_warning("Unable to initialize playwright.") self.scraper = Scraper( - print_error=self.io.tool_error, playwright_available=res, verify_ssl=self.verify_ssl + print_error=self.io.tool_error, + playwright_available=res, + verify_ssl=self.verify_ssl, ) content = self.scraper.scrape(url) or "" diff --git a/tests/scrape/test_playwright_disable.py b/tests/scrape/test_playwright_disable.py new file mode 100644 index 000000000..df777752b --- /dev/null +++ b/tests/scrape/test_playwright_disable.py @@ -0,0 +1,120 @@ +import pytest +from unittest.mock import MagicMock + +from aider.scrape import install_playwright, Scraper + +class DummyIO: + def __init__(self): + self.outputs = [] + self.confirmed = False + + def tool_output(self, msg): + self.outputs.append(msg) + + def confirm_ask(self, msg, default="y"): + self.outputs.append(f"confirm: {msg}") + return self.confirmed + + def tool_error(self, msg): + self.outputs.append(f"error: {msg}") + + +def test_scraper_disable_playwright_flag(monkeypatch): + io = DummyIO() + # Simulate that playwright is not available (disable_playwright just means playwright_available=False) + scraper = Scraper(print_error=io.tool_error, playwright_available=False) + # Patch scrape_with_httpx to check it is called + called = {} + def fake_httpx(url): + called['called'] = True + return "plain text", "text/plain" + scraper.scrape_with_httpx = fake_httpx + content = scraper.scrape("http://example.com") + assert content == "plain text" + assert called['called'] + +def test_scraper_enable_playwright(monkeypatch): + io = DummyIO() + # Simulate that playwright is available and should be used + scraper = Scraper(print_error=io.tool_error, playwright_available=True) + # Patch scrape_with_playwright to check it is called + called = {} + def fake_playwright(url): + called['called'] = True + return "hi", "text/html" + scraper.scrape_with_playwright = fake_playwright + content = scraper.scrape("http://example.com") + assert content.startswith("hi") or "" in content + assert called['called'] + +def test_commands_web_disable_playwright(monkeypatch): + """ + Test that Commands.cmd_web does not emit a misleading warning when --disable-playwright is set. + """ + from aider.commands import Commands + + # Dummy IO to capture outputs and warnings + class DummyIO: + def __init__(self): + self.outputs = [] + self.warnings = [] + self.errors = [] + def tool_output(self, msg, *a, **k): + self.outputs.append(msg) + def tool_warning(self, msg, *a, **k): + self.warnings.append(msg) + def tool_error(self, msg, *a, **k): + self.errors.append(msg) + def read_text(self, filename, silent=False): + return "" + def confirm_ask(self, *a, **k): + return True + def print(self, *a, **k): + pass + + # Dummy coder to satisfy Commands + class DummyCoder: + def __init__(self): + self.cur_messages = [] + self.main_model = type("M", (), {"edit_format": "code", "name": "dummy", "info": {}}) + def get_rel_fname(self, fname): + return fname + def get_inchat_relative_files(self): + return [] + def abs_root_path(self, fname): + return fname + def get_all_abs_files(self): + return [] + def get_announcements(self): + return [] + def format_chat_chunks(self): + return type("Chunks", (), {"repo": [], "readonly_files": [], "chat_files": []})() + def event(self, *a, **k): + pass + + # Patch install_playwright to always return False (simulate not available) + monkeypatch.setattr("aider.scrape.install_playwright", lambda io: False) + + # Patch Scraper to always use scrape_with_httpx and never warn + class DummyScraper: + def __init__(self, **kwargs): + self.called = False + def scrape(self, url): + self.called = True + return "dummy content" + + monkeypatch.setattr("aider.commands.Scraper", DummyScraper) + + io = DummyIO() + coder = DummyCoder() + args = type("Args", (), {"disable_playwright": True})() + commands = Commands(io, coder, args=args) + + commands.cmd_web("http://example.com") + # Should not emit a warning about playwright + assert not io.warnings + # Should not contain message "For the best web scraping, install Playwright:" + assert all("install Playwright:" not in msg for msg in io.outputs) + # Should output scraping and added to chat + assert any("Scraping" in msg for msg in io.outputs) + assert any("added to chat" in msg for msg in io.outputs) From ec7ac60cfcaa3c7250558d19736f7aac975717e9 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 08:54:44 -0700 Subject: [PATCH 063/459] copy --- HISTORY.md | 7 + aider/website/HISTORY.md | 7 + aider/website/assets/sample-analytics.jsonl | 214 ++++++++++---------- aider/website/docs/faq.md | 16 +- 4 files changed, 129 insertions(+), 115 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 99398aa22..f3f839e7d 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,13 @@ # Release history +### Aider v0.82.2 + +- Fix editing shell files with diff-fenced, by zjy1412. +- Improve robustness of patch application by allowing multiple update/delete actions for the same file within a single response. +- Update prompts to instruct LLMs to consolidate all edits for a given file into a single block within the patch. + ### Aider v0.82.1 + - Added support for `o3` and `o4-mini` including provider-specific versions for OpenAI, OpenRouter, and Azure. - Added support for Azure specific `gpt-4.1` and `gpt-4.1-mini` models. - Disabled streaming for `o3` models since you need identity verification to stream. diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index 20b70ec6a..fa3fdcb22 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -24,7 +24,14 @@ cog.out(text) ]]]--> +### Aider v0.82.2 + +- Fix editing shell files with diff-fenced, by zjy1412. +- Improve robustness of patch application by allowing multiple update/delete actions for the same file within a single response. +- Update prompts to instruct LLMs to consolidate all edits for a given file into a single block within the patch. + ### Aider v0.82.1 + - Added support for `o3` and `o4-mini` including provider-specific versions for OpenAI, OpenRouter, and Azure. - Added support for Azure specific `gpt-4.1` and `gpt-4.1-mini` models. - Disabled streaming for `o3` models since you need identity verification to stream. diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 6f29aa337..3c18d8c53 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,110 +1,3 @@ -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577003} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 19980, "completion_tokens": 209, "total_tokens": 20189, "cost": 0.063075, "total_cost": 0.61737}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577011} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577039} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577050} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 20284, "completion_tokens": 562, "total_tokens": 20846, "cost": 0.06928200000000001, "total_cost": 0.686652}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577062} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577094} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 20748, "completion_tokens": 570, "total_tokens": 21318, "cost": 0.070794, "total_cost": 0.7574460000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577107} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577148} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577199} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577199} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 18851, "completion_tokens": 341, "total_tokens": 19192, "cost": 0.061668, "total_cost": 0.8191140000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577212} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577284} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 21544, "completion_tokens": 921, "total_tokens": 22465, "cost": 0.07844699999999999, "total_cost": 0.897561}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577304} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577305} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 23437, "completion_tokens": 960, "total_tokens": 24397, "cost": 0.084711, "total_cost": 0.982272}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577328} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577329} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 25273, "completion_tokens": 627, "total_tokens": 25900, "cost": 0.085224, "total_cost": 1.067496}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577347} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577348} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577354} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577356} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577390} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 13107, "completion_tokens": 553, "total_tokens": 13660, "cost": 0.047616000000000006, "total_cost": 1.115112}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577401} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577417} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577431} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577441} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 13101, "completion_tokens": 825, "total_tokens": 13926, "cost": 0.051678, "total_cost": 1.1667900000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577458} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577481} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 14119, "completion_tokens": 509, "total_tokens": 14628, "cost": 0.049992, "total_cost": 1.2167820000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577492} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577511} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577529} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 14688, "completion_tokens": 513, "total_tokens": 15201, "cost": 0.051759, "total_cost": 1.2685410000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577541} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577541} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 15982, "completion_tokens": 514, "total_tokens": 16496, "cost": 0.055656000000000004, "total_cost": 1.3241970000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577552} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577622} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 16560, "completion_tokens": 1044, "total_tokens": 17604, "cost": 0.06534000000000001, "total_cost": 1.3895370000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577642} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577666} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 17795, "completion_tokens": 382, "total_tokens": 18177, "cost": 0.059115, "total_cost": 1.4486520000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577676} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578142} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578142} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578145} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578600} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578601} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578601} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578601} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578602} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578602} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578602} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 14829, "completion_tokens": 515, "total_tokens": 15344, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578625} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578634} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15859, "completion_tokens": 252, "total_tokens": 16111, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578640} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578711} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578745} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578745} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 31847, "completion_tokens": 913, "total_tokens": 32760, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578766} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578802} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 33028, "completion_tokens": 171, "total_tokens": 33199, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578814} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578882} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 33229, "completion_tokens": 1078, "total_tokens": 34307, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578896} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578896} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 35722, "completion_tokens": 1044, "total_tokens": 36766, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578907} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578914} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 37246, "completion_tokens": 219, "total_tokens": 37465, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578919} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578948} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 37520, "completion_tokens": 523, "total_tokens": 38043, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578959} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578990} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 38220, "completion_tokens": 381, "total_tokens": 38601, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578997} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579008} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579010} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579011} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579026} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15395, "completion_tokens": 1022, "total_tokens": 16417, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579035} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579044} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 17097, "completion_tokens": 653, "total_tokens": 17750, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579053} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579710} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579710} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 17585, "completion_tokens": 386, "total_tokens": 17971, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579725} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579761} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 18039, "completion_tokens": 873, "total_tokens": 18912, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579781} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579783} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 19435, "completion_tokens": 254, "total_tokens": 19689, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579793} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579798} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 20006, "completion_tokens": 227, "total_tokens": 20233, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579804} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744586979} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744586995} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744586995} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 11494, "completion_tokens": 1239, "total_tokens": 12733, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587032} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587133} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587134} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587134} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587134} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587151} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587154} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587155} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587155} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587155} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587176} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 13376, "completion_tokens": 902, "total_tokens": 14278, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587186} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587224} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587226} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587229} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587253} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 13814, "completion_tokens": 296, "total_tokens": 14110, "cost": 0.045882, "total_cost": 0.045882}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587261} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587278} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587283} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587283} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587305} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587305} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 13075, "completion_tokens": 2645, "total_tokens": 15720, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587358} {"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591225} {"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591226} @@ -998,3 +891,110 @@ {"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161817} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161817} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161818} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162550} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162555} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162555} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162555} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162555} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162555} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162556} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162557} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162558} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162558} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162558} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162558} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162558} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162559} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162560} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162561} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162561} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162561} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162561} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162561} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162561} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162562} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162563} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162564} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162564} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162564} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162564} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162620} +{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162621} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162621} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162621} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162621} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162622} +{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162622} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162622} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162622} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162754} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162760} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745162760} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163376} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163381} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163381} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163393} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163405} +{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163405} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163405} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163405} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163407} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 5399, "completion_tokens": 256, "total_tokens": 5655, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163408} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163408} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163508} +{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163513} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163513} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163513} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index d76f5846e..71bb34aef 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,14 +264,14 @@ tr:hover { background-color: #f5f5f5; } - - - - - - - - + + + + + + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-252,499,33883.9%
openrouter/anthropic/claude-3.7-sonnet313,37710.5%
o3100,7773.4%
gemini/gemini-2.5-pro-preview-03-2516,5240.6%
o4-mini16,4990.6%
gpt-4.1-mini11,7750.4%
gpt-4.110,6870.4%
None8,0010.3%
gemini/gemini-2.5-pro-exp-03-252,084,41491.2%
o3100,7774.4%
openrouter/anthropic/claude-3.7-sonnet35,2681.5%
gemini/gemini-2.5-pro-preview-03-2516,5240.7%
o4-mini16,4990.7%
gpt-4.1-mini11,7750.5%
gpt-4.110,6870.5%
None8,0010.4%
gemini/REDACTED6060.0%
From 21fa54d792a5ba25e6d93d3e93e7a6004c3c5083 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 10:28:01 -0700 Subject: [PATCH 064/459] Refactor: Update LLM docs to match gemini.md structure --- aider/website/docs/llms/anthropic.md | 19 +++++++++++------ aider/website/docs/llms/azure.md | 15 +++++++++++-- aider/website/docs/llms/bedrock.md | 25 +++++++++++++++------- aider/website/docs/llms/cohere.md | 15 ++++++++++--- aider/website/docs/llms/deepseek.md | 15 +++++++++++-- aider/website/docs/llms/groq.md | 15 ++++++++++--- aider/website/docs/llms/lm-studio.md | 21 +++++++++++++----- aider/website/docs/llms/ollama.md | 20 +++++++++++++----- aider/website/docs/llms/openai-compat.md | 16 +++++++++++--- aider/website/docs/llms/openai.md | 27 +++++++++++++++--------- aider/website/docs/llms/openrouter.md | 25 +++++++++++----------- aider/website/docs/llms/vertex.md | 9 +++++++- aider/website/docs/llms/xai.md | 16 ++++++++++---- 13 files changed, 173 insertions(+), 65 deletions(-) diff --git a/aider/website/docs/llms/anthropic.md b/aider/website/docs/llms/anthropic.md index cf69ab610..26748b101 100644 --- a/aider/website/docs/llms/anthropic.md +++ b/aider/website/docs/llms/anthropic.md @@ -10,21 +10,26 @@ To work with Anthropic's models, you need to provide your either in the `ANTHROPIC_API_KEY` environment variable or via the `--anthropic-api-key` command line switch. -Aider has some built in shortcuts for the most popular Anthropic models and -has been tested and benchmarked to work well with them: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat - export ANTHROPIC_API_KEY= # Mac/Linux setx ANTHROPIC_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and Anthropic on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Aider uses Claude 3.7 Sonnet by default aider -# Claude 3 Opus -aider --model claude-3-opus-20240229 - # List models available from Anthropic aider --list-models anthropic/ ``` diff --git a/aider/website/docs/llms/azure.md b/aider/website/docs/llms/azure.md index c342ec700..7e20fc83d 100644 --- a/aider/website/docs/llms/azure.md +++ b/aider/website/docs/llms/azure.md @@ -7,9 +7,13 @@ nav_order: 500 Aider can connect to the OpenAI models on Azure. -``` -python -m pip install -U aider-chat +First, install aider: +{% include install.md %} + +Then configure your API keys and endpoint: + +``` # Mac/Linux: export AZURE_API_KEY= export AZURE_API_VERSION=2024-12-01-preview @@ -20,6 +24,13 @@ setx AZURE_API_KEY setx AZURE_API_VERSION 2024-12-01-preview setx AZURE_API_BASE https://myendpt.openai.azure.com # ... restart your shell after setx commands +``` + +Start working with aider and Azure on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project aider --model azure/ diff --git a/aider/website/docs/llms/bedrock.md b/aider/website/docs/llms/bedrock.md index c7705918f..f3e2131c7 100644 --- a/aider/website/docs/llms/bedrock.md +++ b/aider/website/docs/llms/bedrock.md @@ -6,10 +6,7 @@ nav_order: 560 # Amazon Bedrock Aider can connect to models provided by Amazon Bedrock. -You will need to have an AWS account with access to the Bedrock service. - -To configure Aider to use the Amazon Bedrock API, you need to set up your AWS credentials. -This can be done using the AWS CLI or by setting environment variables. +You will need to have an AWS account with access to the Bedrock service and the specific models you wish to use. ## Select a Model from Amazon Bedrock @@ -37,6 +34,14 @@ feature, you will receive an error message like the following: anthropic.claude-3-7-sonnet-20250219-v1:0 with on-demand throughput isn\xe2\x80\x99t supported. Retry your request with the ID or ARN of an inference profile that contains this model."}' +## Installation and Configuration + +First, install aider: + +{% include install.md %} + +Next, configure your AWS credentials. This can be done using the AWS CLI or by setting environment variables. + ## AWS CLI Configuration If you haven't already, install the [AWS CLI](https://aws.amazon.com/cli/) and configure it with your credentials: @@ -49,7 +54,7 @@ This will prompt you to enter your AWS Access Key ID, Secret Access Key, and def ## Environment Variables -Alternatively, you can set the following environment variables: +You can set the following environment variables: ```bash export AWS_REGION=your_preferred_region @@ -63,7 +68,7 @@ export AWS_PROFILE=your-profile ``` You can add these to your -[.env file](/docs/config/dotenv.html). +`.env` file. ### Set Environment Variables with PowerShell @@ -77,6 +82,8 @@ $env:AWS_REGION = 'us-west-2' # Put whichever AWS region that you'd like, that ## Install boto3 +Aider needs the `boto3` library to connect to Bedrock. + The AWS Bedrock provider requires the `boto3` package in order to function correctly: ```bash @@ -95,12 +102,14 @@ You must install `boto3` dependency to aider's virtual environment installed via uv tool run --from aider-chat pip install boto3 ``` - -## Running Aider with Bedrock +## Get Started Once your AWS credentials are set up, you can run Aider with the `--model` command line switch, specifying the Bedrock model you want to use: ```bash +# Change directory into your codebase +cd /to/your/project + aider --model bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0 ``` diff --git a/aider/website/docs/llms/cohere.md b/aider/website/docs/llms/cohere.md index 66ab3c842..ce3e1a795 100644 --- a/aider/website/docs/llms/cohere.md +++ b/aider/website/docs/llms/cohere.md @@ -10,13 +10,22 @@ Their Command-R+ model works well with aider as a *very basic* coding assistant. You'll need a [Cohere API key](https://dashboard.cohere.com/welcome/login). -To use **Command-R+**: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat - export COHERE_API_KEY= # Mac/Linux setx COHERE_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and Cohere on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project aider --model command-r-plus-08-2024 diff --git a/aider/website/docs/llms/deepseek.md b/aider/website/docs/llms/deepseek.md index 72073c1df..0abbf51a9 100644 --- a/aider/website/docs/llms/deepseek.md +++ b/aider/website/docs/llms/deepseek.md @@ -9,11 +9,22 @@ Aider can connect to the DeepSeek.com API. To work with DeepSeek's models, you need to set the `DEEPSEEK_API_KEY` environment variable with your [DeepSeek API key](https://platform.deepseek.com/api_keys). The DeepSeek Chat V3 model has a top score on aider's code editing benchmark. -``` -python -m pip install -U aider-chat +First, install aider: +{% include install.md %} + +Then configure your API keys: + +``` export DEEPSEEK_API_KEY= # Mac/Linux setx DEEPSEEK_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and DeepSeek on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Use DeepSeek Chat v3 aider --model deepseek/deepseek-chat diff --git a/aider/website/docs/llms/groq.md b/aider/website/docs/llms/groq.md index f258e6848..b8e60e719 100644 --- a/aider/website/docs/llms/groq.md +++ b/aider/website/docs/llms/groq.md @@ -10,13 +10,22 @@ The Llama 3 70B model works well with aider and is comparable to GPT-3.5 in code editing performance. You'll need a [Groq API key](https://console.groq.com/keys). -To use **Llama3 70B**: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat - export GROQ_API_KEY= # Mac/Linux setx GROQ_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and Groq on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project aider --model groq/llama3-70b-8192 diff --git a/aider/website/docs/llms/lm-studio.md b/aider/website/docs/llms/lm-studio.md index 909d3afe1..be9e53845 100644 --- a/aider/website/docs/llms/lm-studio.md +++ b/aider/website/docs/llms/lm-studio.md @@ -5,11 +5,15 @@ nav_order: 400 # LM Studio -To use LM Studio: +Aider can connect to models served by LM Studio. + +First, install aider: + +{% include install.md %} + +Then configure your API key and endpoint: ``` -python -m pip install -U aider-chat - # Must set a value here even if its a dummy value export LM_STUDIO_API_KEY=dummy-api-key # Mac/Linux setx LM_STUDIO_API_KEY dummy-api-key # Windows, restart shell after setx @@ -17,12 +21,19 @@ setx LM_STUDIO_API_KEY dummy-api-key # Windows, restart shell after setx # LM Studio default server URL is http://localhost:1234/v1 export LM_STUDIO_API_BASE=http://localhost:1234/v1 # Mac/Linux setx LM_STUDIO_API_BASE http://localhost:1234/v1 # Windows, restart shell after setx - -aider --model lm_studio/ ``` **Note:** Even though LM Studio doesn't require an API Key out of the box the `LM_STUDIO_API_KEY` must have a dummy value like `dummy-api-key` set or the client request will fail trying to send an empty `Bearer` token. +Start working with aider and LM Studio on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project + +aider --model lm_studio/ +``` + See the [model warnings](warnings.html) section for information on warnings which will occur when working with models that aider is not familiar with. diff --git a/aider/website/docs/llms/ollama.md b/aider/website/docs/llms/ollama.md index 463dc4a3e..a9dbf6c07 100644 --- a/aider/website/docs/llms/ollama.md +++ b/aider/website/docs/llms/ollama.md @@ -7,6 +7,19 @@ nav_order: 500 Aider can connect to local Ollama models. +First, install aider: + +{% include install.md %} + +Then configure your Ollama API endpoint (usually the default): + +```bash +export OLLAMA_API_BASE=http://127.0.0.1:11434 # Mac/Linux +setx OLLAMA_API_BASE http://127.0.0.1:11434 # Windows, restart shell after setx +``` + +Start working with aider and Ollama on your codebase: + ``` # Pull the model ollama pull @@ -14,11 +27,8 @@ ollama pull # Start your ollama server, increasing the context window to 8k tokens OLLAMA_CONTEXT_LENGTH=8192 ollama serve -# In another terminal window... -python -m pip install -U aider-chat - -export OLLAMA_API_BASE=http://127.0.0.1:11434 # Mac/Linux -setx OLLAMA_API_BASE http://127.0.0.1:11434 # Windows, restart shell after setx +# In another terminal window, change directory into your codebase +cd /to/your/project aider --model ollama_chat/ ``` diff --git a/aider/website/docs/llms/openai-compat.md b/aider/website/docs/llms/openai-compat.md index e1b2a73f2..ea45a574f 100644 --- a/aider/website/docs/llms/openai-compat.md +++ b/aider/website/docs/llms/openai-compat.md @@ -7,10 +7,13 @@ nav_order: 500 Aider can connect to any LLM which is accessible via an OpenAI compatible API endpoint. -``` -python -m pip install aider-install -aider-install +First, install aider: +{% include install.md %} + +Then configure your API key and endpoint: + +``` # Mac/Linux: export OPENAI_API_BASE= export OPENAI_API_KEY= @@ -19,6 +22,13 @@ export OPENAI_API_KEY= setx OPENAI_API_BASE setx OPENAI_API_KEY # ... restart shell after setx commands +``` + +Start working with aider and your OpenAI compatible API on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Prefix the model name with openai/ aider --model openai/ diff --git a/aider/website/docs/llms/openai.md b/aider/website/docs/llms/openai.md index a9d907afb..e88944644 100644 --- a/aider/website/docs/llms/openai.md +++ b/aider/website/docs/llms/openai.md @@ -10,27 +10,34 @@ To work with OpenAI's models, you need to provide your either in the `OPENAI_API_KEY` environment variable or via the `--api-key openai=` command line switch. -Aider has some built in shortcuts for the most popular OpenAI models and -has been tested and benchmarked to work well with them: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat +export OPENAI_API_KEY= # Mac/Linux +setx OPENAI_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and OpenAI on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # o3-mini -aider --model o3-mini --api-key openai= +aider --model o3-mini # o1-mini -aider --model o1-mini --api-key openai= +aider --model o1-mini # GPT-4o -aider --model gpt-4o --api-key openai= +aider --model gpt-4o # List models available from OpenAI aider --list-models openai/ - -# You can also store you API key in environment variables (or .env) -export OPENAI_API_KEY= # Mac/Linux -setx OPENAI_API_KEY # Windows, restart shell after setx ``` You can use `aider --model ` to use any other OpenAI model. diff --git a/aider/website/docs/llms/openrouter.md b/aider/website/docs/llms/openrouter.md index f9ec3ea0d..e5e8a48cc 100644 --- a/aider/website/docs/llms/openrouter.md +++ b/aider/website/docs/llms/openrouter.md @@ -8,11 +8,22 @@ nav_order: 500 Aider can connect to [models provided by OpenRouter](https://openrouter.ai/models?o=top-weekly): You'll need an [OpenRouter API key](https://openrouter.ai/keys). -``` -python -m pip install -U aider-chat +First, install aider: +{% include install.md %} + +Then configure your API keys: + +``` export OPENROUTER_API_KEY= # Mac/Linux setx OPENROUTER_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and OpenRouter on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Or any other open router model aider --model openrouter// @@ -23,16 +34,6 @@ aider --list-models openrouter/ In particular, many aider users access Sonnet via OpenRouter: -``` -python -m pip install -U aider-chat - -export OPENROUTER_API_KEY= # Mac/Linux -setx OPENROUTER_API_KEY # Windows, restart shell after setx - -aider --model openrouter/anthropic/claude-3.7-sonnet -``` - - {: .tip } If you get errors, check your [OpenRouter privacy settings](https://openrouter.ai/settings/privacy). diff --git a/aider/website/docs/llms/vertex.md b/aider/website/docs/llms/vertex.md index b7afee42f..9dc82ea38 100644 --- a/aider/website/docs/llms/vertex.md +++ b/aider/website/docs/llms/vertex.md @@ -13,6 +13,10 @@ or service account with permission to use the Vertex AI API. With your chosen login method, the gcloud CLI should automatically set the `GOOGLE_APPLICATION_CREDENTIALS` environment variable which points to the credentials file. +First, install aider: + +{% include install.md %} + To configure Aider to use the Vertex AI API, you need to set `VERTEXAI_PROJECT` (the GCP project ID) and `VERTEXAI_LOCATION` (the GCP region) [environment variables for Aider](/docs/config/dotenv.html). @@ -27,9 +31,12 @@ VERTEXAI_PROJECT=my-project VERTEXAI_LOCATION=us-east5 ``` -Then you can run aider with the `--model` command line switch, like this: +Start working with aider and Vertex AI on your codebase: ``` +# Change directory into your codebase +cd /to/your/project + aider --model vertex_ai/claude-3-5-sonnet@20240620 ``` diff --git a/aider/website/docs/llms/xai.md b/aider/website/docs/llms/xai.md index 3374cf487..c2334fa3c 100644 --- a/aider/website/docs/llms/xai.md +++ b/aider/website/docs/llms/xai.md @@ -7,14 +7,22 @@ nav_order: 400 You'll need a [xAI API key](https://console.x.ai.). -To use xAI: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ```bash -python -m pip install aider-install -aider-install - export XAI_API_KEY= # Mac/Linux setx XAI_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and xAI on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Grok 3 aider --model xai/grok-3-beta From 328a3c317846c15e198ed816e01fe7aa5688baf3 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 10:34:12 -0700 Subject: [PATCH 065/459] docs: Improve Amazon Bedrock setup instructions --- aider/website/docs/llms/bedrock.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/aider/website/docs/llms/bedrock.md b/aider/website/docs/llms/bedrock.md index f3e2131c7..c38631a36 100644 --- a/aider/website/docs/llms/bedrock.md +++ b/aider/website/docs/llms/bedrock.md @@ -6,7 +6,8 @@ nav_order: 560 # Amazon Bedrock Aider can connect to models provided by Amazon Bedrock. -You will need to have an AWS account with access to the Bedrock service and the specific models you wish to use. +To configure Aider to use the Amazon Bedrock API, you need to set up your AWS credentials. +This can be done using the AWS CLI or by setting environment variables. ## Select a Model from Amazon Bedrock @@ -68,7 +69,7 @@ export AWS_PROFILE=your-profile ``` You can add these to your -`.env` file. +[.env file](/docs/config/dotenv.html). ### Set Environment Variables with PowerShell From 7a50b7779a22abf753e190a8c6564362393bc304 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 10:34:13 -0700 Subject: [PATCH 066/459] docs: Update boto3 install instructions for Bedrock --- aider/website/docs/llms/bedrock.md | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/aider/website/docs/llms/bedrock.md b/aider/website/docs/llms/bedrock.md index c38631a36..5d31beac7 100644 --- a/aider/website/docs/llms/bedrock.md +++ b/aider/website/docs/llms/bedrock.md @@ -82,25 +82,17 @@ $env:AWS_REGION = 'us-west-2' # Put whichever AWS region that you'd like, that ``` ## Install boto3 - -Aider needs the `boto3` library to connect to Bedrock. - -The AWS Bedrock provider requires the `boto3` package in order to function correctly: - -```bash -pip install boto3 -``` - -To use aider installed via `pipx` with AWS Bedrock, you must add the `boto3` dependency to aider's virtual environment by running - -```bash -pipx inject aider-chat boto3 -``` - -You must install `boto3` dependency to aider's virtual environment installed via one-liner or uv by running +You may need to install the `boto3` package. ```bash +# If you installed with aider-install or `uv tool` uv tool run --from aider-chat pip install boto3 + +# Or with pipx... +pipx inject aider-chat boto3 + +# Or with pip +pip install -U boto3 ``` ## Get Started From 84c3ac93ef1bcfb83fead60ef3326e143eab6513 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 10:37:14 -0700 Subject: [PATCH 067/459] copy --- aider/website/_includes/get-started.md | 11 ++++++---- aider/website/_includes/install.md | 5 +++++ aider/website/docs/llms/bedrock.md | 27 ++++++++++++----------- aider/website/docs/llms/gemini.md | 30 ++++++++++++++++++++------ 4 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 aider/website/_includes/install.md diff --git a/aider/website/_includes/get-started.md b/aider/website/_includes/get-started.md index d5d3ff8c6..eb15d2797 100644 --- a/aider/website/_includes/get-started.md +++ b/aider/website/_includes/get-started.md @@ -1,10 +1,13 @@ -If you already have python 3.8-3.13 installed, you can get started quickly like this: +If you already have python 3.8-3.13 installed, you can get started quickly like this. + +First, install aider: + +{% include install.md %} + +Start working with aider on your codebase: ```bash -python -m pip install aider-install -aider-install - # Change directory into your codebase cd /to/your/project diff --git a/aider/website/_includes/install.md b/aider/website/_includes/install.md new file mode 100644 index 000000000..f42be5656 --- /dev/null +++ b/aider/website/_includes/install.md @@ -0,0 +1,5 @@ + +```bash +python -m pip install aider-install +aider-install +``` diff --git a/aider/website/docs/llms/bedrock.md b/aider/website/docs/llms/bedrock.md index 5d31beac7..51a7d0822 100644 --- a/aider/website/docs/llms/bedrock.md +++ b/aider/website/docs/llms/bedrock.md @@ -81,19 +81,6 @@ $env:AWS_SECRET_ACCESS_KEY = 'your_secret_key' $env:AWS_REGION = 'us-west-2' # Put whichever AWS region that you'd like, that the Bedrock service supports. ``` -## Install boto3 -You may need to install the `boto3` package. - -```bash -# If you installed with aider-install or `uv tool` -uv tool run --from aider-chat pip install boto3 - -# Or with pipx... -pipx inject aider-chat boto3 - -# Or with pip -pip install -U boto3 -``` ## Get Started @@ -123,6 +110,20 @@ aider --list-models bedrock/ Make sure you have access to these models in your AWS account before attempting to use them with Aider. +## Install boto3 +You may need to install the `boto3` package. + +```bash +# If you installed with aider-install or `uv tool` +uv tool run --from aider-chat pip install boto3 + +# Or with pipx... +pipx inject aider-chat boto3 + +# Or with pip +pip install -U boto3 +``` + # More info For more information on Amazon Bedrock and its models, refer to the [official AWS documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html). diff --git a/aider/website/docs/llms/gemini.md b/aider/website/docs/llms/gemini.md index 8cd70d5de..719f51760 100644 --- a/aider/website/docs/llms/gemini.md +++ b/aider/website/docs/llms/gemini.md @@ -7,17 +7,23 @@ nav_order: 300 You'll need a [Gemini API key](https://aistudio.google.com/app/u/2/apikey). -``` -python -m pip install -U aider-chat +First, install aider: -# You may need to install google-generativeai -pip install -U google-generativeai +{% include install.md %} -# Or with pipx... -pipx inject aider-chat google-generativeai +Then configure your API keys: +```bash export GEMINI_API_KEY= # Mac/Linux setx GEMINI_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and Gemini on your codebase: + + +```bash +# Change directory into your codebase +cd /to/your/project # You can run the Gemini 2.5 Pro model with: aider --model gemini-2.5-pro @@ -26,3 +32,15 @@ aider --model gemini-2.5-pro aider --list-models gemini/ ``` +You may need to install the `google-generativeai` package. + +```bash +# If you installed with aider-install or `uv tool` +uv tool run --from aider-chat pip install google-generativeai + +# Or with pipx... +pipx inject aider-chat google-generativeai + +# Or with pip +pip install -U google-generativeai +``` From e560ab61b6852ddf2794f9ce719298d12f359a51 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 10:48:39 -0700 Subject: [PATCH 068/459] copy --- aider/website/docs/llms.md | 9 ++++----- aider/website/docs/llms/gemini.md | 7 +++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/aider/website/docs/llms.md b/aider/website/docs/llms.md index 23d4007a7..2180f9b63 100644 --- a/aider/website/docs/llms.md +++ b/aider/website/docs/llms.md @@ -16,9 +16,10 @@ description: Aider can connect to most LLMs for AI pair programming. Aider works best with these models, which are skilled at editing code: +- [Gemini 2.5 Pro](/docs/gemini.html) - [DeepSeek R1 and V3](/docs/llms/deepseek.html) - [Claude 3.7 Sonnet](/docs/llms/anthropic.html) -- [OpenAI o1, o3-mini and GPT-4o](/docs/llms/openai.html) +- [OpenAI o3, o4-mini and GPT-4.1](/docs/llms/openai.html) ## Free models @@ -26,10 +27,8 @@ Aider works best with these models, which are skilled at editing code: Aider works with a number of **free** API providers: -- Google's [Gemini 1.5 Pro](/docs/llms/gemini.html) works with aider, with -code editing capabilities similar to GPT-3.5. -- You can use [Llama 3 70B on Groq](/docs/llms/groq.html) which is comparable to GPT-3.5 in code editing performance. -- Cohere also offers free API access to their [Command-R+ model](/docs/llms/cohere.html), which works with aider as a *very basic* coding assistant. +- [OpenRouter offers free access to many models](https://openrouter.ai/models/?q=free), with limitations on daily usage. +- Google's [Gemini 2.5 Pro Exp](/docs/llms/gemini.html) works very well with aider. ## Local models {: .no_toc } diff --git a/aider/website/docs/llms/gemini.md b/aider/website/docs/llms/gemini.md index 719f51760..261512fda 100644 --- a/aider/website/docs/llms/gemini.md +++ b/aider/website/docs/llms/gemini.md @@ -25,8 +25,11 @@ Start working with aider and Gemini on your codebase: # Change directory into your codebase cd /to/your/project -# You can run the Gemini 2.5 Pro model with: -aider --model gemini-2.5-pro +# You can run the Gemini 2.5 Pro model with this shortcut: +aider --model gemini + +# You can run the Gemini 2.5 Pro Exp for free, with usage limits: +aider --model gemini-exp # List models available from Gemini aider --list-models gemini/ From d45a5747eab17cee28b91431cad078eb61b2b3ad Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 10:58:37 -0700 Subject: [PATCH 069/459] feat: Add script to clean metadata from files --- scripts/clean_metadata.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 scripts/clean_metadata.py diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py new file mode 100644 index 000000000..e69de29bb From 7bde345b831dd403c1c346dc86a59a5203793b00 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 10:58:38 -0700 Subject: [PATCH 070/459] feat: Add script to find common models in metadata files. --- scripts/clean_metadata.py | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index e69de29bb..29328c9e8 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +import json +from pathlib import Path + + +def main(): + script_dir = Path(__file__).parent.resolve() + litellm_path = script_dir / "../litellm/model_prices_and_context_window.json" + aider_path = script_dir / "../aider/resources/model-metadata.json" + + if not litellm_path.exists(): + print(f"Error: LiteLLM metadata file not found at {litellm_path}") + return + + if not aider_path.exists(): + print(f"Error: Aider metadata file not found at {aider_path}") + return + + try: + with open(litellm_path, "r") as f: + litellm_data = json.load(f) + except json.JSONDecodeError as e: + print(f"Error decoding JSON from {litellm_path}: {e}") + return + except Exception as e: + print(f"Error reading {litellm_path}: {e}") + return + + try: + with open(aider_path, "r") as f: + aider_data = json.load(f) + except json.JSONDecodeError as e: + print(f"Error decoding JSON from {aider_path}: {e}") + return + except Exception as e: + print(f"Error reading {aider_path}: {e}") + return + + litellm_keys = set(litellm_data.keys()) + aider_keys = set(aider_data.keys()) + + common_keys = litellm_keys.intersection(aider_keys) + + if common_keys: + print("Common models found in both files:") + for key in sorted(list(common_keys)): + print(f"- {key}") + else: + print("No common models found between the two files.") + + +if __name__ == "__main__": + main() From 19a94e5f15e7f438bcdfe3e826b1fbbd03d10203 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 10:59:59 -0700 Subject: [PATCH 071/459] fix: Update litellm_path to correctly locate JSON file --- scripts/clean_metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 29328c9e8..3f57bbfef 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -6,7 +6,7 @@ from pathlib import Path def main(): script_dir = Path(__file__).parent.resolve() - litellm_path = script_dir / "../litellm/model_prices_and_context_window.json" + litellm_path = script_dir / "../../litellm/model_prices_and_context_window.json" aider_path = script_dir / "../aider/resources/model-metadata.json" if not litellm_path.exists(): From 8596f0d4a3712cad11b0169ad1ceacf5550bf85e Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:00:00 -0700 Subject: [PATCH 072/459] feat: Use json5 to load model metadata for lenient parsing --- scripts/clean_metadata.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 3f57bbfef..3466f683b 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import json +import json5 from pathlib import Path @@ -28,8 +29,9 @@ def main(): return try: + # Use json5 for the aider metadata file as it might contain comments with open(aider_path, "r") as f: - aider_data = json.load(f) + aider_data = json5.load(f) except json.JSONDecodeError as e: print(f"Error decoding JSON from {aider_path}: {e}") return From be44b6509568f172c4c37f7283acabe263b354a5 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:00:03 -0700 Subject: [PATCH 073/459] style: Apply linting to clean_metadata.py --- scripts/clean_metadata.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 3466f683b..dcdfbb5f4 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -1,9 +1,10 @@ #!/usr/bin/env python import json -import json5 from pathlib import Path +import json5 + def main(): script_dir = Path(__file__).parent.resolve() From 82b26daf37e25d3a6e3a3ebce0a0857185180823 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:00:49 -0700 Subject: [PATCH 074/459] feat: display matching entries side-by-side with diff highlighting --- scripts/clean_metadata.py | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index dcdfbb5f4..defca1606 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import json +import difflib from pathlib import Path import json5 @@ -43,12 +44,42 @@ def main(): litellm_keys = set(litellm_data.keys()) aider_keys = set(aider_data.keys()) - common_keys = litellm_keys.intersection(aider_keys) + common_keys = sorted(list(litellm_keys.intersection(aider_keys))) if common_keys: - print("Common models found in both files:") - for key in sorted(list(common_keys)): - print(f"- {key}") + print("Comparing common models found in both files:\n") + for key in common_keys: + print(f"--- {key} (litellm) ---") + print(f"+++ {key} (aider) +++") + + litellm_entry = litellm_data.get(key, {}) + aider_entry = aider_data.get(key, {}) + + # Convert dicts to formatted JSON strings for comparison + litellm_json = json.dumps(litellm_entry, indent=4, sort_keys=True).splitlines() + aider_json = json.dumps(aider_entry, indent=4, sort_keys=True).splitlines() + + # Generate unified diff + diff = difflib.unified_diff( + litellm_json, + aider_json, + fromfile=f"{key} (litellm)", + tofile=f"{key} (aider)", + lineterm="", + n=max(len(litellm_json), len(aider_json)), # Show all lines + ) + + # Print the diff, skipping the header lines generated by unified_diff + diff_lines = list(diff)[2:] + if not diff_lines: + print("(No differences found)") + else: + for line in diff_lines: + # Add color for better readability (optional, requires a library like 'termcolor' or manual ANSI codes) + # Simple +/- indication is standard for diffs + print(line) + print("\n" + "=" * 40 + "\n") + else: print("No common models found between the two files.") From 876569613bdda75c25bbb6535ab38eb8ba83b6ff Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:00:52 -0700 Subject: [PATCH 075/459] style: Apply linting to clean_metadata.py --- scripts/clean_metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index defca1606..024818d61 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -import json import difflib +import json from pathlib import Path import json5 From 758020c574ff5329b67c491d2dac797db2a7c8b3 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:01:40 -0700 Subject: [PATCH 076/459] fix: Flip diff order to be from aider -> litellm in script --- scripts/clean_metadata.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 024818d61..4bd80925e 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -49,8 +49,8 @@ def main(): if common_keys: print("Comparing common models found in both files:\n") for key in common_keys: - print(f"--- {key} (litellm) ---") - print(f"+++ {key} (aider) +++") + print(f"--- {key} (aider) ---") + print(f"+++ {key} (litellm) +++") litellm_entry = litellm_data.get(key, {}) aider_entry = aider_data.get(key, {}) @@ -61,10 +61,10 @@ def main(): # Generate unified diff diff = difflib.unified_diff( - litellm_json, aider_json, - fromfile=f"{key} (litellm)", - tofile=f"{key} (aider)", + litellm_json, + fromfile=f"{key} (aider)", + tofile=f"{key} (litellm)", lineterm="", n=max(len(litellm_json), len(aider_json)), # Show all lines ) From b2d541f1ebb0abf25674b2858266d4fa66667b64 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:02:00 -0700 Subject: [PATCH 077/459] style: Fix line length in clean_metadata.py for flake8 compliance --- scripts/clean_metadata.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 4bd80925e..6ae06a3eb 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -75,7 +75,8 @@ def main(): print("(No differences found)") else: for line in diff_lines: - # Add color for better readability (optional, requires a library like 'termcolor' or manual ANSI codes) + # Add color for better readability (optional, requires a library + # like 'termcolor' or manual ANSI codes) # Simple +/- indication is standard for diffs print(line) print("\n" + "=" * 40 + "\n") From 226108d05d8c27450349143a4fc77c5541975a14 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:02:37 -0700 Subject: [PATCH 078/459] feat: Prompt user to remove entries from model-metadata.json --- scripts/clean_metadata.py | 45 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 6ae06a3eb..d86eaae77 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -9,7 +9,8 @@ import json5 def main(): script_dir = Path(__file__).parent.resolve() - litellm_path = script_dir / "../../litellm/model_prices_and_context_window.json" + # Adjust path relative to the script's location in the aider repo + litellm_path = script_dir.parent / "../litellm/model_prices_and_context_window.json" aider_path = script_dir / "../aider/resources/model-metadata.json" if not litellm_path.exists(): @@ -44,6 +45,7 @@ def main(): litellm_keys = set(litellm_data.keys()) aider_keys = set(aider_data.keys()) + keys_to_remove = set() common_keys = sorted(list(litellm_keys.intersection(aider_keys))) if common_keys: @@ -79,10 +81,49 @@ def main(): # like 'termcolor' or manual ANSI codes) # Simple +/- indication is standard for diffs print(line) - print("\n" + "=" * 40 + "\n") + print("\n" + "=" * 40) + + # Ask user if they want to remove the entry from aider's metadata + response = input( + f"Remove '{key}' from aider/resources/model-metadata.json? (y/N): " + ).strip().lower() + if response == 'y': + keys_to_remove.add(key) + print(f"Marked '{key}' for removal.") + else: + print(f"Keeping '{key}'.") + print("-" * 40 + "\n") # Separator for the next model else: print("No common models found between the two files.") + return # Exit if no common keys + + # Remove marked keys after iterating through all common models + if keys_to_remove: + print("\nRemoving marked entries from aider data...") + removed_count = 0 + for key in keys_to_remove: + if key in aider_data: + del aider_data[key] + print(f" - Removed {key}") + removed_count += 1 + + if removed_count > 0: + # Write the modified data back to the aider metadata file + try: + with open(aider_path, "w") as f: + # Use json.dump for standard, clean JSON output + # Using sort_keys=True for consistent ordering + json.dump(aider_data, f, indent=4, sort_keys=True) + # Add a trailing newline for POSIX compatibility + f.write("\n") + print(f"\nSuccessfully updated {aider_path} with {removed_count} removal(s).") + except Exception as e: + print(f"\nError writing updated data to {aider_path}: {e}") + else: + print("\nNo entries were actually removed (perhaps they were already gone?).") + else: + print("\nNo entries marked for removal.") if __name__ == "__main__": From ce1266be68d526eebd80041e5454814be3ea1687 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:02:40 -0700 Subject: [PATCH 079/459] style: Run linter on clean_metadata.py --- scripts/clean_metadata.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index d86eaae77..2607c7302 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -84,10 +84,12 @@ def main(): print("\n" + "=" * 40) # Ask user if they want to remove the entry from aider's metadata - response = input( - f"Remove '{key}' from aider/resources/model-metadata.json? (y/N): " - ).strip().lower() - if response == 'y': + response = ( + input(f"Remove '{key}' from aider/resources/model-metadata.json? (y/N): ") + .strip() + .lower() + ) + if response == "y": keys_to_remove.add(key) print(f"Marked '{key}' for removal.") else: @@ -96,7 +98,7 @@ def main(): else: print("No common models found between the two files.") - return # Exit if no common keys + return # Exit if no common keys # Remove marked keys after iterating through all common models if keys_to_remove: @@ -121,7 +123,7 @@ def main(): except Exception as e: print(f"\nError writing updated data to {aider_path}: {e}") else: - print("\nNo entries were actually removed (perhaps they were already gone?).") + print("\nNo entries were actually removed (perhaps they were already gone?).") else: print("\nNo entries marked for removal.") From b4673fdc85fa209a3eb95691c6bddfd215651603 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:03:41 -0700 Subject: [PATCH 080/459] Refactor: Remove keys immediately in clean_metadata.py --- scripts/clean_metadata.py | 48 ++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 2607c7302..d28e45420 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -45,8 +45,8 @@ def main(): litellm_keys = set(litellm_data.keys()) aider_keys = set(aider_data.keys()) - keys_to_remove = set() common_keys = sorted(list(litellm_keys.intersection(aider_keys))) + removed_count = 0 if common_keys: print("Comparing common models found in both files:\n") @@ -90,8 +90,21 @@ def main(): .lower() ) if response == "y": - keys_to_remove.add(key) - print(f"Marked '{key}' for removal.") + if key in aider_data: + print(f"Removing '{key}' from aider data...") + del aider_data[key] + removed_count += 1 + # Write the modified data back immediately + try: + with open(aider_path, "w") as f: + json.dump(aider_data, f, indent=4, sort_keys=True) + f.write("\n") + print(f"Successfully removed '{key}' and updated {aider_path}.") + except Exception as e: + print(f"Error writing updated data to {aider_path} after removing {key}: {e}") + # Exit or handle error appropriately? For now, just print. + else: + print(f"'{key}' not found in aider data (already removed?).") else: print(f"Keeping '{key}'.") print("-" * 40 + "\n") # Separator for the next model @@ -100,32 +113,11 @@ def main(): print("No common models found between the two files.") return # Exit if no common keys - # Remove marked keys after iterating through all common models - if keys_to_remove: - print("\nRemoving marked entries from aider data...") - removed_count = 0 - for key in keys_to_remove: - if key in aider_data: - del aider_data[key] - print(f" - Removed {key}") - removed_count += 1 - - if removed_count > 0: - # Write the modified data back to the aider metadata file - try: - with open(aider_path, "w") as f: - # Use json.dump for standard, clean JSON output - # Using sort_keys=True for consistent ordering - json.dump(aider_data, f, indent=4, sort_keys=True) - # Add a trailing newline for POSIX compatibility - f.write("\n") - print(f"\nSuccessfully updated {aider_path} with {removed_count} removal(s).") - except Exception as e: - print(f"\nError writing updated data to {aider_path}: {e}") - else: - print("\nNo entries were actually removed (perhaps they were already gone?).") + # Final summary message + if removed_count > 0: + print(f"\nFinished comparing. A total of {removed_count} entr(y/ies) were removed.") else: - print("\nNo entries marked for removal.") + print("\nFinished comparing. No entries were removed.") if __name__ == "__main__": From 6656b5d973da485ff6f0cf9895489f6db2a92fa0 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:03:44 -0700 Subject: [PATCH 081/459] style: Apply linting to clean_metadata.py --- scripts/clean_metadata.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index d28e45420..d07c41003 100644 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -101,7 +101,9 @@ def main(): f.write("\n") print(f"Successfully removed '{key}' and updated {aider_path}.") except Exception as e: - print(f"Error writing updated data to {aider_path} after removing {key}: {e}") + print( + f"Error writing updated data to {aider_path} after removing {key}: {e}" + ) # Exit or handle error appropriately? For now, just print. else: print(f"'{key}' not found in aider data (already removed?).") From ba2c4d1eb753b7a5f289f62e8a227321ab4da66d Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 11:05:35 -0700 Subject: [PATCH 082/459] chore: Make clean_metadata.py executable --- scripts/clean_metadata.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/clean_metadata.py diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py old mode 100644 new mode 100755 From 58f4db4e524e7d6d1579cd1f75ca0939eac2a344 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:05:36 -0700 Subject: [PATCH 083/459] feat: Implement surgical removal of JSON blocks from metadata file --- scripts/clean_metadata.py | 136 +++++++++++++++++++++++++++++++++----- 1 file changed, 121 insertions(+), 15 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index d07c41003..feb9a87ac 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -3,10 +3,124 @@ import difflib import json from pathlib import Path +import re import json5 + +def find_block_lines(lines, key_to_remove): + """Finds the start and end line indices for a top-level key's block.""" + start_line_idx = -1 + # Regex to find the line starting the key definition, allowing for whitespace + # and ensuring it's the key we want (e.g., avoid matching "key1_extra": ...) + key_pattern = re.compile(r'^\s*"' + re.escape(key_to_remove) + r'"\s*:\s*{?') + + for i, line in enumerate(lines): + if key_pattern.match(line.strip()): + start_line_idx = i + break + + if start_line_idx == -1: + # Key might not start with '{' on the same line, check if it starts immediately after + key_pattern_no_brace = re.compile(r'^\s*"' + re.escape(key_to_remove) + r'"\s*:\s*$') + potential_start = -1 + for i, line in enumerate(lines): + if key_pattern_no_brace.match(line.strip()): + potential_start = i + # Look for the opening brace on the next non-empty/comment line + j = i + 1 + while j < len(lines): + stripped_next_line = lines[j].strip() + if not stripped_next_line or stripped_next_line.startswith("//"): + j += 1 + continue + if stripped_next_line.startswith("{"): + start_line_idx = i # Start from the key definition line + break + else: + potential_start = -1 # False alarm + break + if start_line_idx != -1: + break + + if start_line_idx == -1: + print(f"Warning: Could not reliably find start line for '{key_to_remove}'. Skipping removal.") + return None, None # Key block start not found clearly + + brace_level = 0 + in_string = False + escape_next = False + block_started = False + end_line_idx = -1 + + # Start brace counting from the identified start line + for i in range(start_line_idx, len(lines)): + line = lines[i] + # Simple brace counting - might be fooled by braces in comments or strings + # This is a limitation of pure text processing without full parsing + for char_idx, char in enumerate(line): + # Rudimentary string detection + if char == '"': + # Check if preceded by an odd number of backslashes (escaped quote) + backslashes = 0 + temp_idx = char_idx - 1 + while temp_idx >= 0 and line[temp_idx] == '\\': + backslashes += 1 + temp_idx -= 1 + if backslashes % 2 == 0: + in_string = not in_string + + if not in_string: + if char == '{': + brace_level += 1 + block_started = True # Mark that we've entered the block + elif char == '}': + brace_level -= 1 + + # Check if the block ends *after* processing the entire line + if block_started and brace_level == 0: + end_line_idx = i + break + + if end_line_idx == -1: + print(f"Warning: Could not find end of block for '{key_to_remove}' starting at line {start_line_idx+1}. Skipping removal.") + return None, None # Block end not found + + return start_line_idx, end_line_idx + + +def remove_block_surgically(file_path, key_to_remove): + """Reads the file, removes the block for the key, writes back.""" + try: + # Read with universal newlines, but keep track for writing + with open(file_path, "r") as f: + content = f.read() + lines = content.splitlines(keepends=True) # Keep original line endings + except Exception as e: + print(f"Error reading {file_path} for removal: {e}") + return False + + start_idx, end_idx = find_block_lines(lines, key_to_remove) + + if start_idx is None or end_idx is None: + return False # Error message already printed by find_block_lines + + # Prepare the lines to be written, excluding the identified block + output_lines = lines[:start_idx] + lines[end_idx + 1 :] + + # Note: Comma handling is omitted for simplicity. User may need manual fix. + + try: + with open(file_path, "w") as f: + f.writelines(output_lines) + print(f"Successfully removed '{key_to_remove}' block and updated {file_path}.") + return True + except Exception as e: + print(f"Error writing updated data to {file_path} after removing {key_to_remove}: {e}") + return False + + def main(): script_dir = Path(__file__).parent.resolve() # Adjust path relative to the script's location in the aider repo @@ -90,23 +204,15 @@ def main(): .lower() ) if response == "y": - if key in aider_data: - print(f"Removing '{key}' from aider data...") - del aider_data[key] + # Perform surgical removal from the text file + if remove_block_surgically(aider_path, key): removed_count += 1 - # Write the modified data back immediately - try: - with open(aider_path, "w") as f: - json.dump(aider_data, f, indent=4, sort_keys=True) - f.write("\n") - print(f"Successfully removed '{key}' and updated {aider_path}.") - except Exception as e: - print( - f"Error writing updated data to {aider_path} after removing {key}: {e}" - ) - # Exit or handle error appropriately? For now, just print. + # Optional: Also remove from the in-memory dict if needed later, + # but it's not strictly necessary if we reload or finish now. + # if key in aider_data: del aider_data[key] else: - print(f"'{key}' not found in aider data (already removed?).") + print(f"Failed to remove '{key}' block surgically.") + # Key might still be in aider_data if removal failed else: print(f"Keeping '{key}'.") print("-" * 40 + "\n") # Separator for the next model From ebfce5b0f20487c1dc469cd710b214ab1f0409ec Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:05:39 -0700 Subject: [PATCH 084/459] style: Run linter on clean_metadata.py --- scripts/clean_metadata.py | 44 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index feb9a87ac..26b599633 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -2,13 +2,12 @@ import difflib import json -from pathlib import Path import re +from pathlib import Path import json5 - def find_block_lines(lines, key_to_remove): """Finds the start and end line indices for a top-level key's block.""" start_line_idx = -1 @@ -36,16 +35,18 @@ def find_block_lines(lines, key_to_remove): j += 1 continue if stripped_next_line.startswith("{"): - start_line_idx = i # Start from the key definition line + start_line_idx = i # Start from the key definition line break else: - potential_start = -1 # False alarm + potential_start = -1 # False alarm break if start_line_idx != -1: break if start_line_idx == -1: - print(f"Warning: Could not reliably find start line for '{key_to_remove}'. Skipping removal.") + print( + f"Warning: Could not reliably find start line for '{key_to_remove}'. Skipping removal." + ) return None, None # Key block start not found clearly brace_level = 0 @@ -62,20 +63,20 @@ def find_block_lines(lines, key_to_remove): for char_idx, char in enumerate(line): # Rudimentary string detection if char == '"': - # Check if preceded by an odd number of backslashes (escaped quote) - backslashes = 0 - temp_idx = char_idx - 1 - while temp_idx >= 0 and line[temp_idx] == '\\': - backslashes += 1 - temp_idx -= 1 - if backslashes % 2 == 0: - in_string = not in_string + # Check if preceded by an odd number of backslashes (escaped quote) + backslashes = 0 + temp_idx = char_idx - 1 + while temp_idx >= 0 and line[temp_idx] == "\\": + backslashes += 1 + temp_idx -= 1 + if backslashes % 2 == 0: + in_string = not in_string if not in_string: - if char == '{': + if char == "{": brace_level += 1 - block_started = True # Mark that we've entered the block - elif char == '}': + block_started = True # Mark that we've entered the block + elif char == "}": brace_level -= 1 # Check if the block ends *after* processing the entire line @@ -84,8 +85,11 @@ def find_block_lines(lines, key_to_remove): break if end_line_idx == -1: - print(f"Warning: Could not find end of block for '{key_to_remove}' starting at line {start_line_idx+1}. Skipping removal.") - return None, None # Block end not found + print( + f"Warning: Could not find end of block for '{key_to_remove}' starting at line" + f" {start_line_idx+1}. Skipping removal." + ) + return None, None # Block end not found return start_line_idx, end_line_idx @@ -96,7 +100,7 @@ def remove_block_surgically(file_path, key_to_remove): # Read with universal newlines, but keep track for writing with open(file_path, "r") as f: content = f.read() - lines = content.splitlines(keepends=True) # Keep original line endings + lines = content.splitlines(keepends=True) # Keep original line endings except Exception as e: print(f"Error reading {file_path} for removal: {e}") return False @@ -104,7 +108,7 @@ def remove_block_surgically(file_path, key_to_remove): start_idx, end_idx = find_block_lines(lines, key_to_remove) if start_idx is None or end_idx is None: - return False # Error message already printed by find_block_lines + return False # Error message already printed by find_block_lines # Prepare the lines to be written, excluding the identified block output_lines = lines[:start_idx] + lines[end_idx + 1 :] From 48ac1de8d370f9ec950acc95d45a1606e0a9be2a Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:05:56 -0700 Subject: [PATCH 085/459] fix: Remove unused variables and fix whitespace in clean_metadata.py --- scripts/clean_metadata.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 26b599633..c8c0eb077 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -23,10 +23,8 @@ def find_block_lines(lines, key_to_remove): if start_line_idx == -1: # Key might not start with '{' on the same line, check if it starts immediately after key_pattern_no_brace = re.compile(r'^\s*"' + re.escape(key_to_remove) + r'"\s*:\s*$') - potential_start = -1 for i, line in enumerate(lines): if key_pattern_no_brace.match(line.strip()): - potential_start = i # Look for the opening brace on the next non-empty/comment line j = i + 1 while j < len(lines): @@ -51,7 +49,6 @@ def find_block_lines(lines, key_to_remove): brace_level = 0 in_string = False - escape_next = False block_started = False end_line_idx = -1 @@ -87,7 +84,7 @@ def find_block_lines(lines, key_to_remove): if end_line_idx == -1: print( f"Warning: Could not find end of block for '{key_to_remove}' starting at line" - f" {start_line_idx+1}. Skipping removal." + f" {start_line_idx + 1}. Skipping removal." ) return None, None # Block end not found From 506c3c928e65112a4cd108d316bdff9a15949d57 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:06:20 -0700 Subject: [PATCH 086/459] refactor: Remove unused variable in find_block_lines function --- scripts/clean_metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index c8c0eb077..8028d7491 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -36,7 +36,7 @@ def find_block_lines(lines, key_to_remove): start_line_idx = i # Start from the key definition line break else: - potential_start = -1 # False alarm + # False alarm, the line after the key wasn't '{' break if start_line_idx != -1: break From d8caa76bc822669a576b0c26ae7d6d51a2d4ab58 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:08:53 -0700 Subject: [PATCH 087/459] feat: Compare dicts directly to avoid spurious diffs in metadata cleaning --- scripts/clean_metadata.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 8028d7491..7ee3648ea 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -173,10 +173,17 @@ def main(): aider_entry = aider_data.get(key, {}) # Convert dicts to formatted JSON strings for comparison - litellm_json = json.dumps(litellm_entry, indent=4, sort_keys=True).splitlines() - aider_json = json.dumps(aider_entry, indent=4, sort_keys=True).splitlines() + # First, compare the dictionaries directly for semantic equality + if litellm_entry == aider_entry: + print(f"'{key}': Entries are semantically identical.") + print("\n" + "=" * 40) + print("-" * 40 + "\n") # Separator for the next model + continue # Skip diff and removal prompt for identical entries # Generate unified diff + # If dictionaries differ, generate JSON strings to show the diff + litellm_json = json.dumps(litellm_entry, indent=4, sort_keys=True).splitlines() + aider_json = json.dumps(aider_entry, indent=4, sort_keys=True).splitlines() diff = difflib.unified_diff( aider_json, litellm_json, @@ -189,7 +196,9 @@ def main(): # Print the diff, skipping the header lines generated by unified_diff diff_lines = list(diff)[2:] if not diff_lines: - print("(No differences found)") + # This case should ideally not be reached if dict comparison was done first, + # but kept as a fallback. + print("(No textual differences found, though dictionaries might differ in type/order)") else: for line in diff_lines: # Add color for better readability (optional, requires a library From 2f38cd184cbac8516f7d82d006194fc32c972c06 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:08:57 -0700 Subject: [PATCH 088/459] style: Format clean_metadata.py with black linter --- scripts/clean_metadata.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 7ee3648ea..0a9bcb2be 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -177,8 +177,8 @@ def main(): if litellm_entry == aider_entry: print(f"'{key}': Entries are semantically identical.") print("\n" + "=" * 40) - print("-" * 40 + "\n") # Separator for the next model - continue # Skip diff and removal prompt for identical entries + print("-" * 40 + "\n") # Separator for the next model + continue # Skip diff and removal prompt for identical entries # Generate unified diff # If dictionaries differ, generate JSON strings to show the diff @@ -198,7 +198,9 @@ def main(): if not diff_lines: # This case should ideally not be reached if dict comparison was done first, # but kept as a fallback. - print("(No textual differences found, though dictionaries might differ in type/order)") + print( + "(No textual differences found, though dictionaries might differ in type/order)" + ) else: for line in diff_lines: # Add color for better readability (optional, requires a library From de28178369f2f899f2aaf2105c19f6b065141926 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:10:58 -0700 Subject: [PATCH 089/459] feat: Add dummy key to JSON dumps for diffing, then remove it. --- scripts/clean_metadata.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 0a9bcb2be..73ba2b713 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -182,15 +182,33 @@ def main(): # Generate unified diff # If dictionaries differ, generate JSON strings to show the diff - litellm_json = json.dumps(litellm_entry, indent=4, sort_keys=True).splitlines() - aider_json = json.dumps(aider_entry, indent=4, sort_keys=True).splitlines() + # Add a dummy key to ensure the *real* last key gets a comma + litellm_entry_copy = litellm_entry.copy() + aider_entry_copy = aider_entry.copy() + dummy_key = "zzzdummykey" + litellm_entry_copy[dummy_key] = True + aider_entry_copy[dummy_key] = True + + litellm_json_lines = json.dumps( + litellm_entry_copy, indent=4, sort_keys=True + ).splitlines() + aider_json_lines = json.dumps( + aider_entry_copy, indent=4, sort_keys=True + ).splitlines() + + # Remove the dummy key line before diffing + litellm_json_filtered = [ + line for line in litellm_json_lines if dummy_key not in line + ] + aider_json_filtered = [line for line in aider_json_lines if dummy_key not in line] + diff = difflib.unified_diff( - aider_json, - litellm_json, + aider_json_filtered, + litellm_json_filtered, fromfile=f"{key} (aider)", tofile=f"{key} (litellm)", lineterm="", - n=max(len(litellm_json), len(aider_json)), # Show all lines + n=max(len(litellm_json_filtered), len(aider_json_filtered)), # Show all lines ) # Print the diff, skipping the header lines generated by unified_diff From 13b3e75d0e328d30481fc315cd131738fe1e4a2e Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:11:01 -0700 Subject: [PATCH 090/459] style: Apply linting to clean_metadata.py --- scripts/clean_metadata.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/scripts/clean_metadata.py b/scripts/clean_metadata.py index 73ba2b713..c1031857b 100755 --- a/scripts/clean_metadata.py +++ b/scripts/clean_metadata.py @@ -192,14 +192,10 @@ def main(): litellm_json_lines = json.dumps( litellm_entry_copy, indent=4, sort_keys=True ).splitlines() - aider_json_lines = json.dumps( - aider_entry_copy, indent=4, sort_keys=True - ).splitlines() + aider_json_lines = json.dumps(aider_entry_copy, indent=4, sort_keys=True).splitlines() # Remove the dummy key line before diffing - litellm_json_filtered = [ - line for line in litellm_json_lines if dummy_key not in line - ] + litellm_json_filtered = [line for line in litellm_json_lines if dummy_key not in line] aider_json_filtered = [line for line in aider_json_lines if dummy_key not in line] diff = difflib.unified_diff( From 51e0fff82247d6a378f74ee83cc647ed58ca02d2 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 11:12:20 -0700 Subject: [PATCH 091/459] cleanup metadata that is now in litellm --- aider/resources/model-metadata.json | 202 ---------------------------- 1 file changed, 202 deletions(-) diff --git a/aider/resources/model-metadata.json b/aider/resources/model-metadata.json index 8cd469dce..336c6bee8 100644 --- a/aider/resources/model-metadata.json +++ b/aider/resources/model-metadata.json @@ -15,22 +15,6 @@ //"supports_tool_choice": true, "supports_prompt_caching": true }, - "openrouter/deepseek/deepseek-r1": { - "max_tokens": 8192, - "max_input_tokens": 64000, - "max_output_tokens": 8192, - "input_cost_per_token": 0.00000055, - "input_cost_per_token_cache_hit": 0.00000014, - "cache_read_input_token_cost": 0.00000014, - "cache_creation_input_token_cost": 0.0, - "output_cost_per_token": 0.00000219, - "litellm_provider": "openrouter", - "mode": "chat", - //"supports_function_calling": true, - "supports_assistant_prefill": true, - //"supports_tool_choice": true, - "supports_prompt_caching": true - }, "openrouter/deepseek/deepseek-r1:free": { "max_tokens": 8192, "max_input_tokens": 64000, @@ -99,15 +83,6 @@ "output_cost_per_token": 0.000008, "mode": "chat", }, - "fireworks_ai/accounts/fireworks/models/deepseek-v3": { - "max_tokens": 128000, - "max_input_tokens": 100000, - "max_output_tokens": 8192, - "litellm_provider": "fireworks_ai", - "input_cost_per_token": 0.0000009, - "output_cost_per_token": 0.0000009, - "mode": "chat", - }, "fireworks_ai/accounts/fireworks/models/deepseek-v3-0324": { "max_tokens": 160000, "max_input_tokens": 100000, @@ -117,54 +92,6 @@ "output_cost_per_token": 0.0000009, "mode": "chat", }, - "o3-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.0000011, - "output_cost_per_token": 0.0000044, - "cache_read_input_token_cost": 0.00000055, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true - }, - "openrouter/openai/o3-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.0000011, - "output_cost_per_token": 0.0000044, - "cache_read_input_token_cost": 0.00000055, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true - }, - "openrouter/openai/o3-mini-high": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.0000011, - "output_cost_per_token": 0.0000044, - "cache_read_input_token_cost": 0.00000055, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true - }, "openrouter/openrouter/quasar-alpha": { "max_input_tokens": 1000000, "max_output_tokens": 32000, @@ -203,26 +130,6 @@ "supports_prompt_caching": true, "supports_system_messages": true }, - "claude-3-7-sonnet-20250219": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.000015, - "cache_creation_input_token_cost": 0.00000375, - "cache_read_input_token_cost": 0.0000003, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-10-01", - "supports_tool_choice": true - }, "anthropic/claude-3-7-sonnet-20250219": { "max_tokens": 8192, "max_input_tokens": 200000, @@ -243,43 +150,6 @@ "deprecation_date": "2025-10-01", "supports_tool_choice": true }, - "openrouter/anthropic/claude-3.7-sonnet": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.000015, - "cache_creation_input_token_cost": 0.00000375, - "cache_read_input_token_cost": 0.0000003, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-10-01", - "supports_tool_choice": true - }, - "gpt-4.5-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 0.000075, - "output_cost_per_token": 0.00015, - "cache_read_input_token_cost": 0.0000375, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, "openai/gpt-4.5-preview": { "max_tokens": 16384, "max_input_tokens": 128000, @@ -334,42 +204,6 @@ "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, - "gemini/gemini-2.5-pro-preview-03-25": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 64000, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0.00000125, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0.000010, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, "vertex_ai/gemini-2.5-pro-exp-03-25": { "max_tokens": 8192, "max_input_tokens": 1048576, @@ -523,15 +357,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.000015, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/x-ai/grok-3-mini-beta": { "max_tokens": 131072, "max_input_tokens": 131072, @@ -541,15 +366,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-mini-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.0000003, - "output_cost_per_token": 0.0000005, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/x-ai/grok-3-fast-beta": { "max_tokens": 131072, "max_input_tokens": 131072, @@ -559,15 +375,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-fast-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.000005, - "output_cost_per_token": 0.000025, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/x-ai/grok-3-mini-fast-beta": { "max_tokens": 131072, "max_input_tokens": 131072, @@ -577,15 +384,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-mini-fast-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.0000006, - "output_cost_per_token": 0.000004, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/google/gemini-2.0-flash-exp:free": { "max_tokens": 8192, "max_input_tokens": 1048576, From 20a29e5cd18f85180d451603f2fbc63e2e7b7593 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 11:12:54 -0700 Subject: [PATCH 092/459] copy --- aider/website/docs/llms.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/website/docs/llms.md b/aider/website/docs/llms.md index 2180f9b63..c2475431c 100644 --- a/aider/website/docs/llms.md +++ b/aider/website/docs/llms.md @@ -16,7 +16,7 @@ description: Aider can connect to most LLMs for AI pair programming. Aider works best with these models, which are skilled at editing code: -- [Gemini 2.5 Pro](/docs/gemini.html) +- [Gemini 2.5 Pro](/docs/llms/gemini.html) - [DeepSeek R1 and V3](/docs/llms/deepseek.html) - [Claude 3.7 Sonnet](/docs/llms/anthropic.html) - [OpenAI o3, o4-mini and GPT-4.1](/docs/llms/openai.html) From 1a4d3927e7eab362a8d19d54149d0963a0a91436 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:29:33 -0700 Subject: [PATCH 093/459] feat: Add --thinking-tokens option to benchmark script --- benchmark/benchmark.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/benchmark/benchmark.py b/benchmark/benchmark.py index 71d3cec3e..a3c2ca850 100755 --- a/benchmark/benchmark.py +++ b/benchmark/benchmark.py @@ -209,6 +209,9 @@ def main( reasoning_effort: Optional[str] = typer.Option( None, "--reasoning-effort", help="Set reasoning effort for models that support it" ), + thinking_tokens: Optional[int] = typer.Option( + None, "--thinking-tokens", help="Set thinking tokens for models that support it" + ), exercises_dir: str = typer.Option( EXERCISES_DIR_DEFAULT, "--exercises-dir", help="Directory with exercise files" ), @@ -366,6 +369,7 @@ def main( num_ctx, sleep, reasoning_effort, + thinking_tokens, ) all_results.append(results) @@ -391,6 +395,7 @@ def main( num_ctx, sleep, reasoning_effort, + thinking_tokens, ) all_results = run_test_threaded.gather(tqdm=True) @@ -489,6 +494,7 @@ def summarize_results(dirname, stats_languages=None): res.lazy_comments = 0 res.reasoning_effort = None + res.thinking_tokens = None variants = defaultdict(set) for results in all_results: @@ -518,6 +524,7 @@ def summarize_results(dirname, stats_languages=None): res.indentation_errors += results.get("indentation_errors", 0) res.reasoning_effort = results.get("reasoning_effort") + res.thinking_tokens = results.get("thinking_tokens") for key in "model edit_format commit_hash editor_model editor_edit_format".split(): val = results.get(key) @@ -564,6 +571,8 @@ def summarize_results(dirname, stats_languages=None): if res.reasoning_effort is not None: print(f" reasoning_effort: {res.reasoning_effort}") + if res.thinking_tokens is not None: + print(f" thinking_tokens: {res.thinking_tokens}") for i in range(tries): print(f" pass_rate_{i + 1}: {percents[i]:.1f}") @@ -650,15 +659,14 @@ def get_replayed_content(replay_dname, test_dname): def run_test(original_dname, testdir, *args, **kwargs): try: return run_test_real(original_dname, testdir, *args, **kwargs) - except Exception as err: + except Exception: print("=" * 40) print("Test failed") - print(err) traceback.print_exc() testdir = Path(testdir) results_fname = testdir / ".aider.results.json" - results_fname.write_text(json.dumps(dict(exception=str(err)))) + results_fname.write_text(json.dumps(dict(exception=traceback.format_exc()))) def run_test_real( @@ -677,6 +685,7 @@ def run_test_real( num_ctx=None, sleep=0, reasoning_effort: Optional[str] = None, + thinking_tokens: Optional[int] = None, read_model_settings=None, ): if not os.path.isdir(testdir): @@ -787,6 +796,9 @@ def run_test_real( if reasoning_effort is not None: main_model.set_reasoning_effort(reasoning_effort) + if thinking_tokens is not None: + main_model.set_thinking_tokens(thinking_tokens) + dump(main_model.max_chat_history_tokens) if num_ctx: @@ -938,6 +950,7 @@ def run_test_real( indentation_errors=indentation_errors, lazy_comments=lazy_comments, # Add the count of pattern matches to the results reasoning_effort=reasoning_effort, + thinking_tokens=thinking_tokens, chat_hashes=list( zip( coder.chat_completion_call_hashes, From 8c3f167e8c48ed86ab4f746f7787e3a2ad04c90b Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 11:31:55 -0700 Subject: [PATCH 094/459] feat: Add simple unified diff coder --- aider/coders/udiff_simple.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 aider/coders/udiff_simple.py diff --git a/aider/coders/udiff_simple.py b/aider/coders/udiff_simple.py new file mode 100644 index 000000000..e69de29bb From 3ca3f39f1d22ca03ed85b7e5a023ffd0e06a7b15 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:31:55 -0700 Subject: [PATCH 095/459] feat: Add UnifiedDiffSimpleCoder with simpler prompt for code edits --- aider/coders/udiff_simple.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/aider/coders/udiff_simple.py b/aider/coders/udiff_simple.py index e69de29bb..290178ed4 100644 --- a/aider/coders/udiff_simple.py +++ b/aider/coders/udiff_simple.py @@ -0,0 +1,16 @@ +from .udiff_coder import UnifiedDiffCoder + + +class UnifiedDiffSimpleCoder(UnifiedDiffCoder): + """ + A coder that uses unified diff format for code modifications. + This variant uses a simpler prompt that doesn't mention specific + diff rules like using `@@ ... @@` lines or avoiding line numbers. + """ + + edit_format = "udiff-simple" + + # We can inherit the prompts if they are suitable or override them here + # For now, let's assume the base UnifiedDiffPrompts are sufficient + # If specific prompts are needed for the "simple" version, they would be defined here. + # gpt_prompts = UnifiedDiffSimplePrompts() From ab11118c8afd8e309a84fab0ef1666a9c7b8ee14 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 11:32:41 -0700 Subject: [PATCH 096/459] feat: Add simple prompts for unified diff coder --- aider/coders/udiff_simple_prompts.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 aider/coders/udiff_simple_prompts.py diff --git a/aider/coders/udiff_simple_prompts.py b/aider/coders/udiff_simple_prompts.py new file mode 100644 index 000000000..e69de29bb From ba4d613cbc7dd261d400dab61931df089d92ba6b Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:32:42 -0700 Subject: [PATCH 097/459] feat: Give udiff-simple its own prompts, inheriting from udiff prompts --- aider/coders/udiff_simple.py | 6 ++---- aider/coders/udiff_simple_prompts.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/aider/coders/udiff_simple.py b/aider/coders/udiff_simple.py index 290178ed4..9cc51991d 100644 --- a/aider/coders/udiff_simple.py +++ b/aider/coders/udiff_simple.py @@ -1,4 +1,5 @@ from .udiff_coder import UnifiedDiffCoder +from .udiff_simple_prompts import UnifiedDiffSimplePrompts class UnifiedDiffSimpleCoder(UnifiedDiffCoder): @@ -10,7 +11,4 @@ class UnifiedDiffSimpleCoder(UnifiedDiffCoder): edit_format = "udiff-simple" - # We can inherit the prompts if they are suitable or override them here - # For now, let's assume the base UnifiedDiffPrompts are sufficient - # If specific prompts are needed for the "simple" version, they would be defined here. - # gpt_prompts = UnifiedDiffSimplePrompts() + gpt_prompts = UnifiedDiffSimplePrompts() diff --git a/aider/coders/udiff_simple_prompts.py b/aider/coders/udiff_simple_prompts.py index e69de29bb..b604f78dc 100644 --- a/aider/coders/udiff_simple_prompts.py +++ b/aider/coders/udiff_simple_prompts.py @@ -0,0 +1,16 @@ +from .udiff_prompts import UnifiedDiffPrompts + + +class UnifiedDiffSimplePrompts(UnifiedDiffPrompts): + """ + Prompts for the UnifiedDiffSimpleCoder. + Inherits from UnifiedDiffPrompts and can override specific prompts + if a simpler wording is desired for this edit format. + """ + + # For now, we inherit all prompts. Override specific ones below if needed. + # For example, to override the main_system prompt: + # main_system = """ + # A simpler version of the main system prompt for udiff-simple. + # """ + pass From 5423ffe51837e6b5062907a565dc8d86dc1fc1ee Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 11:34:10 -0700 Subject: [PATCH 098/459] feat: Add UnifiedDiffSimpleCoder to coders module --- aider/coders/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aider/coders/__init__.py b/aider/coders/__init__.py index e494fa3e4..88bcddfaa 100644 --- a/aider/coders/__init__.py +++ b/aider/coders/__init__.py @@ -10,6 +10,7 @@ from .editor_whole_coder import EditorWholeFileCoder from .help_coder import HelpCoder from .patch_coder import PatchCoder from .udiff_coder import UnifiedDiffCoder +from .udiff_simple import UnifiedDiffSimpleCoder from .wholefile_coder import WholeFileCoder # from .single_wholefile_func_coder import SingleWholeFileFunctionCoder @@ -23,6 +24,7 @@ __all__ = [ WholeFileCoder, PatchCoder, UnifiedDiffCoder, + UnifiedDiffSimpleCoder, # SingleWholeFileFunctionCoder, ArchitectCoder, EditorEditBlockCoder, From ac1ff231e05b923ce1a09007dde3442aeb12459c Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 12:38:09 -0700 Subject: [PATCH 099/459] better prompt --- aider/coders/udiff_simple_prompts.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/aider/coders/udiff_simple_prompts.py b/aider/coders/udiff_simple_prompts.py index b604f78dc..706bb1026 100644 --- a/aider/coders/udiff_simple_prompts.py +++ b/aider/coders/udiff_simple_prompts.py @@ -8,9 +8,18 @@ class UnifiedDiffSimplePrompts(UnifiedDiffPrompts): if a simpler wording is desired for this edit format. """ - # For now, we inherit all prompts. Override specific ones below if needed. - # For example, to override the main_system prompt: - # main_system = """ - # A simpler version of the main system prompt for udiff-simple. - # """ - pass + example_messages = [] + + system_reminder = """# File editing rules: + +Return edits similar to unified diffs that `diff -U0` would produce. + +The user's patch tool needs CORRECT patches that apply cleanly against the current contents of the file! +Think carefully and make sure you include and mark all lines that need to be removed or changed as `-` lines. +Make sure you mark all new or modified lines with `+`. +Don't leave out any lines or the diff patch won't apply correctly. + +To make a new file, show a diff from `--- /dev/null` to `+++ path/to/new/file.ext`. + +{lazy_prompt} +""" From c94340d4931617bd7d384d1e5cf4ce64a5de32c6 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 13:18:57 -0700 Subject: [PATCH 100/459] less ram --- benchmark/docker.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmark/docker.sh b/benchmark/docker.sh index 3edde7c66..6f97b865e 100755 --- a/benchmark/docker.sh +++ b/benchmark/docker.sh @@ -2,8 +2,8 @@ docker run \ -it --rm \ - --memory=25g \ - --memory-swap=25g \ + --memory=12g \ + --memory-swap=12g \ --add-host=host.docker.internal:host-gateway \ -v `pwd`:/aider \ -v `pwd`/tmp.benchmarks/.:/benchmarks \ From 230e5065c1b07b43525916d92e39ec8e715bd5a1 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 15:47:34 -0700 Subject: [PATCH 101/459] feat: Add gemini-2.5-flash-preview-04-17 model and leaderboard entry --- aider/resources/model-settings.yml | 4 +++ aider/website/_data/polyglot_leaderboard.yml | 28 +++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/aider/resources/model-settings.yml b/aider/resources/model-settings.yml index 7b5970d6e..4f1c8ec80 100644 --- a/aider/resources/model-settings.yml +++ b/aider/resources/model-settings.yml @@ -1367,3 +1367,7 @@ # extra_body: # reasoning_effort: high +- name: gemini/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: ["thinking_tokens"] diff --git a/aider/website/_data/polyglot_leaderboard.yml b/aider/website/_data/polyglot_leaderboard.yml index 5d7c651ae..0af93a8de 100644 --- a/aider/website/_data/polyglot_leaderboard.yml +++ b/aider/website/_data/polyglot_leaderboard.yml @@ -1197,4 +1197,30 @@ date: 2025-04-19 versions: 0.82.2.dev seconds_per_case: 195.6 - total_cost: 0.0000 \ No newline at end of file + total_cost: 0.0000 + +- dirname: 2025-04-20-19-54-31--flash25-diff-no-think + test_cases: 225 + model: gemini-2.5-flash-preview-04-17 (default) + edit_format: diff + commit_hash: 7fcce5d-dirty + pass_rate_1: 21.8 + pass_rate_2: 47.1 + pass_num_1: 49 + pass_num_2: 106 + percent_cases_well_formed: 85.3 + error_outputs: 60 + num_malformed_responses: 55 + num_with_malformed_responses: 33 + user_asks: 82 + lazy_comments: 1 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 5 + test_timeouts: 4 + total_tests: 225 + command: aider --model gemini/gemini-2.5-flash-preview-04-17 + date: 2025-04-20 + versions: 0.82.3.dev + seconds_per_case: 50.1 + total_cost: 1.8451 \ No newline at end of file From 19de93ae39c18cb5798cd1992451089788645d92 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 15:58:54 -0700 Subject: [PATCH 102/459] fix: Update weak model name for gemini-2.5-pro-exp-03-25 --- aider/resources/model-settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/resources/model-settings.yml b/aider/resources/model-settings.yml index 4f1c8ec80..870d6b669 100644 --- a/aider/resources/model-settings.yml +++ b/aider/resources/model-settings.yml @@ -965,7 +965,7 @@ - name: gemini/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced use_repo_map: true - weak_model_name: gemini/gemini-2.0-flash + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 - name: openrouter/google/gemini-2.5-pro-exp-03-25:free edit_format: diff-fenced From bbab0cea5e8c722814053e021eeba3cbc95b8dfd Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 16:01:03 -0700 Subject: [PATCH 103/459] feat: Add model settings for gemini-2.5-flash-preview-04-17 models --- aider/resources/model-settings.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/aider/resources/model-settings.yml b/aider/resources/model-settings.yml index 870d6b669..8355e0c92 100644 --- a/aider/resources/model-settings.yml +++ b/aider/resources/model-settings.yml @@ -1371,3 +1371,13 @@ edit_format: diff use_repo_map: true accepts_settings: ["thinking_tokens"] + +- name: gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: ["thinking_tokens"] From 16fbff8de1e26686c962414419fb4b5841eb6cc2 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 16:04:04 -0700 Subject: [PATCH 104/459] Feat: Add gemini-2.5-flash-preview-04-17 as editor/weak model name --- aider/resources/model-settings.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aider/resources/model-settings.yml b/aider/resources/model-settings.yml index 8355e0c92..43ec1438d 100644 --- a/aider/resources/model-settings.yml +++ b/aider/resources/model-settings.yml @@ -975,14 +975,14 @@ - name: vertex_ai/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced use_repo_map: true - # Need metadata for this one... - #weak_model_name: vertex_ai/gemini-2.0-flash + weak_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 + editor_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 - name: vertex_ai/gemini-2.5-pro-preview-03-25 edit_format: diff-fenced use_repo_map: true - # Need metadata for this one... - #weak_model_name: vertex_ai/gemini-2.0-flash + weak_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 + editor_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 - name: openrouter/openrouter/quasar-alpha use_repo_map: true From 48733a315b61192f07b294881a99cb0105cb9f89 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 16:25:54 -0700 Subject: [PATCH 105/459] fix: Handle filenames starting with fence chars in editblock coder --- aider/coders/editblock_coder.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index 4d7776278..471a0c37c 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -412,7 +412,13 @@ def strip_filename(filename, fence): return start_fence = fence[0] - if filename.startswith(start_fence) or filename.startswith(triple_backticks): + if filename.startswith(start_fence): + candidate = filename[len(start_fence):] + if candidate and "." in candidate: + return candidate + + if filename.startswith(triple_backticks): + candidate = # ai! return filename = filename.rstrip(":") From f28504a2eb96be99433e76a8501fd909ce6d8e46 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 16:25:55 -0700 Subject: [PATCH 106/459] fix: Properly handle filenames starting with triple backticks --- aider/coders/editblock_coder.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index 471a0c37c..32020f30f 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -418,8 +418,7 @@ def strip_filename(filename, fence): return candidate if filename.startswith(triple_backticks): - candidate = # ai! - return + filename = filename[len(triple_backticks):] filename = filename.rstrip(":") filename = filename.lstrip("#") From c6ce87170060ea76507903622f0e47b2ed58a980 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 20 Apr 2025 16:25:59 -0700 Subject: [PATCH 107/459] style: Apply linter to editblock_coder.py --- aider/coders/editblock_coder.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index 32020f30f..bb0a01914 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -413,12 +413,12 @@ def strip_filename(filename, fence): start_fence = fence[0] if filename.startswith(start_fence): - candidate = filename[len(start_fence):] + candidate = filename[len(start_fence) :] if candidate and "." in candidate: return candidate if filename.startswith(triple_backticks): - filename = filename[len(triple_backticks):] + filename = filename[len(triple_backticks) :] filename = filename.rstrip(":") filename = filename.lstrip("#") @@ -461,8 +461,12 @@ def find_original_update_blocks(content, fence=DEFAULT_FENCE, valid_fnames=None) ] # Check if the next line or the one after that is an editblock - next_is_editblock = (i + 1 < len(lines) and head_pattern.match(lines[i + 1].strip()) - or i + 2 < len(lines) and head_pattern.match(lines[i + 2].strip())) + next_is_editblock = ( + i + 1 < len(lines) + and head_pattern.match(lines[i + 1].strip()) + or i + 2 < len(lines) + and head_pattern.match(lines[i + 2].strip()) + ) if any(line.strip().startswith(start) for start in shell_starts) and not next_is_editblock: shell_content = [] From 5e210c700d8f3f6f24248981bd259acdfd0410b9 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 16:36:36 -0700 Subject: [PATCH 108/459] fix: Handle filenames starting with fences or triple backticks correctly --- aider/coders/editblock_coder.py | 8 ++++-- tests/basic/test_editblock.py | 45 ++++++++------------------------- 2 files changed, 16 insertions(+), 37 deletions(-) diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index bb0a01914..d8f85da52 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -414,11 +414,15 @@ def strip_filename(filename, fence): start_fence = fence[0] if filename.startswith(start_fence): candidate = filename[len(start_fence) :] - if candidate and "." in candidate: + if candidate and ("." in candidate or "/" in candidate): return candidate + return if filename.startswith(triple_backticks): - filename = filename[len(triple_backticks) :] + candidate = filename[len(triple_backticks) :] + if candidate and ("." in candidate or "/" in candidate): + return candidate + return filename = filename.rstrip(":") filename = filename.lstrip("#") diff --git a/tests/basic/test_editblock.py b/tests/basic/test_editblock.py index d80952bbe..e93edb7c3 100644 --- a/tests/basic/test_editblock.py +++ b/tests/basic/test_editblock.py @@ -108,29 +108,6 @@ Hope you like it! edits = list(eb.find_original_update_blocks(edit)) self.assertEqual(edits, [("foo.txt", "Two\n", "Tooooo\n")]) - def test_find_original_update_blocks_mangled_filename_w_source_tag(self): - source = "source" - - edit = """ -Here's the change: - -<%s>foo.txt -<<<<<<< SEARCH -One -======= -Two ->>>>>>> REPLACE - - -Hope you like it! -""" % (source, source) - - fence = ("<%s>" % source, "" % source) - - with self.assertRaises(ValueError) as cm: - _edits = list(eb.find_original_update_blocks(edit, fence)) - self.assertIn("missing filename", str(cm.exception)) - def test_find_original_update_blocks_quote_below_filename(self): edit = """ Here's the change: @@ -181,10 +158,11 @@ Tooooo oops! +>>>>>>> REPLACE """ with self.assertRaises(ValueError) as cm: - list(eb.find_original_update_blocks(edit)) + _blocks = list(eb.find_original_update_blocks(edit)) self.assertIn("filename", str(cm.exception)) def test_find_original_update_blocks_no_final_newline(self): @@ -575,7 +553,7 @@ Hope you like it! edits = list(eb.find_original_update_blocks(edit, fence=quad_backticks)) self.assertEqual(edits, [("foo.txt", "", "Tooooo\n")]) - #Test for shell script blocks with sh language identifier (issue #3785) + # Test for shell script blocks with sh language identifier (issue #3785) def test_find_original_update_blocks_with_sh_language_identifier(self): # https://github.com/Aider-AI/aider/issues/3785 edit = """ @@ -609,13 +587,13 @@ exit 0 # Check that the content contains the expected shell script elements result_content = edits[0][2] self.assertIn("#!/bin/bash", result_content) - self.assertIn("if [ \"$#\" -ne 1 ];", result_content) - self.assertIn("echo \"Usage: $0 \"", result_content) + self.assertIn('if [ "$#" -ne 1 ];', result_content) + self.assertIn('echo "Usage: $0 "', result_content) self.assertIn("exit 1", result_content) - self.assertIn("echo \"$1\"", result_content) + self.assertIn('echo "$1"', result_content) self.assertIn("exit 0", result_content) - #Test for C# code blocks with csharp language identifier + # Test for C# code blocks with csharp language identifier def test_find_original_update_blocks_with_csharp_language_identifier(self): edit = """ Here's a C# code change: @@ -631,12 +609,9 @@ Console.WriteLine("Hello, C# World!"); """ edits = list(eb.find_original_update_blocks(edit)) - search_text = "Console.WriteLine(\"Hello World!\");\n" - replace_text = "Console.WriteLine(\"Hello, C# World!\");\n" - self.assertEqual( - edits, - [("Program.cs", search_text, replace_text)] - ) + search_text = 'Console.WriteLine("Hello World!");\n' + replace_text = 'Console.WriteLine("Hello, C# World!");\n' + self.assertEqual(edits, [("Program.cs", search_text, replace_text)]) if __name__ == "__main__": From 7719eae0234ccdcfbb27dd1415d8225db83d7398 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 16:41:58 -0700 Subject: [PATCH 109/459] copy --- HISTORY.md | 8 + aider/website/HISTORY.md | 8 + aider/website/assets/sample-analytics.jsonl | 440 +++++++++--------- .../website/docs/config/adv-model-settings.md | 24 +- aider/website/docs/faq.md | 14 +- 5 files changed, 266 insertions(+), 228 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index f3f839e7d..337a05e6c 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,13 @@ # Release history +### main branch + +- Add support for `gemini-2.5-flash-preview-04-17` models. +- Improved "diff" format for Gemini 2.5 Flash by accepting filenames provided on the same line as the opening fence. +- Add new `udiff-simple` edit format, for Gemini 2.5 Pro. +- Update default weak/editor models for Gemini 2.5 Pro models to use `gemini-2.5-flash-preview-04-17`. +- Aider wrote 69% of the code in this release. + ### Aider v0.82.2 - Fix editing shell files with diff-fenced, by zjy1412. diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index fa3fdcb22..abce8bd1d 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -24,6 +24,14 @@ cog.out(text) ]]]--> +### main branch + +- Add support for `gemini-2.5-flash-preview-04-17` models. +- Improved "diff" format for Gemini 2.5 Flash by accepting filenames provided on the same line as the opening fence. +- Add new `udiff-simple` edit format, for Gemini 2.5 Pro. +- Update default weak/editor models for Gemini 2.5 Pro models to use `gemini-2.5-flash-preview-04-17`. +- Aider wrote 69% of the code in this release. + ### Aider v0.82.2 - Fix editing shell files with diff-fenced, by zjy1412. diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 3c18d8c53..90d6e65dd 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,223 +1,3 @@ -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 13075, "completion_tokens": 2645, "total_tokens": 15720, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587358} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591225} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591226} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591226} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591226} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591241} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591241} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591241} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 14867, "completion_tokens": 214, "total_tokens": 15081, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591248} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591285} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15502, "completion_tokens": 173, "total_tokens": 15675, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591288} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591289} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 16016, "completion_tokens": 49, "total_tokens": 16065, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591293} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744593859} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744606398} -{"event": "exit", "properties": {"reason": "Listed models"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744606400} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644920} -{"event": "repo", "properties": {"num_files": 205}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644926} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644926} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644929} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644932} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644932} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644932} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6260, "completion_tokens": 112, "total_tokens": 6372, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644943} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644959} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648515} -{"event": "repo", "properties": {"num_files": 205}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648516} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648516} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648516} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648538} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648543} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648544} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 3917, "completion_tokens": 433, "total_tokens": 4350, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648558} -{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648573} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648574} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6666, "completion_tokens": 192, "total_tokens": 6858, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648578} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648601} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648632} -{"event": "repo", "properties": {"num_files": 209}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648632} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648632} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648633} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648645} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6426, "completion_tokens": 113, "total_tokens": 6539, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648649} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648658} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "repo", "properties": {"num_files": 209}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648746} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6386, "completion_tokens": 150, "total_tokens": 6536, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648754} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648848} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6704, "completion_tokens": 222, "total_tokens": 6926, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648858} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648889} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6951, "completion_tokens": 215, "total_tokens": 7166, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648896} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648911} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 7181, "completion_tokens": 181, "total_tokens": 7362, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648917} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744649052} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 7409, "completion_tokens": 365, "total_tokens": 7774, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744649062} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744649118} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663883} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663885} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663885} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663885} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664016} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664025} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664027} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664027} -{"event": "cli session", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664027} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664029} -{"event": "message_send", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 10637, "completion_tokens": 50, "total_tokens": 10687, "cost": 0.021674, "total_cost": 0.021674}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664034} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664040} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664048} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664051} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664051} -{"event": "cli session", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664051} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664071} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664182} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664183} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664183} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664183} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664319} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 14361, "completion_tokens": 809, "total_tokens": 15170, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664339} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664340} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15983, "completion_tokens": 334, "total_tokens": 16317, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664349} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664636} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664639} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664643} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664649} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664650} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12108, "completion_tokens": 649, "total_tokens": 12757, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664664} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664664} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9878, "completion_tokens": 936, "total_tokens": 10814, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664674} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664709} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664727} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12196, "completion_tokens": 178, "total_tokens": 12374, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664733} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664733} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9525, "completion_tokens": 217, "total_tokens": 9742, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664738} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664814} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12464, "completion_tokens": 452, "total_tokens": 12916, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664831} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664832} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9839, "completion_tokens": 957, "total_tokens": 10796, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664848} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664885} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664886} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664892} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664918} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12204, "completion_tokens": 92, "total_tokens": 12296, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664926} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664926} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9439, "completion_tokens": 114, "total_tokens": 9553, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664932} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664961} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664963} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12251, "completion_tokens": 305, "total_tokens": 12556, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664980} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664980} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9674, "completion_tokens": 73, "total_tokens": 9747, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664984} -{"event": "command_reset", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665447} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665455} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665459} -{"event": "command_tokens", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665471} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665484} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665533} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 24637, "completion_tokens": 2765, "total_tokens": 27402, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665600} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665600} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24366, "completion_tokens": 121, "total_tokens": 24487, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665607} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665905} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665906} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665906} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665906} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665914} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665949} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665951} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665951} -{"event": "cli session", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1-mini", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665951} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665952} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665952} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665966} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 16140, "completion_tokens": 311, "total_tokens": 16451, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665977} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665978} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665984} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665986} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665987} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 13886, "completion_tokens": 174, "total_tokens": 14060, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665994} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665994} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 11452, "completion_tokens": 290, "total_tokens": 11742, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665999} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665999} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 12204, "completion_tokens": 317, "total_tokens": 12521, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666007} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666080} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666094} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666096} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666096} -{"event": "cli session", "properties": {"main_model": "gpt-4.1-mini", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1-mini", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666096} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666098} -{"event": "message_send", "properties": {"main_model": "gpt-4.1-mini", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1-mini", "edit_format": "diff", "prompt_tokens": 11733, "completion_tokens": 42, "total_tokens": 11775, "cost": 0.0047604, "total_cost": 0.0047604}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666101} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666102} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666102} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666302} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666303} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666303} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666303} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666308} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666367} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 27445, "completion_tokens": 2380, "total_tokens": 29825, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666387} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666387} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 23982, "completion_tokens": 2376, "total_tokens": 26358, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666406} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666590} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 30380, "completion_tokens": 987, "total_tokens": 31367, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666601} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666602} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 31879, "completion_tokens": 238, "total_tokens": 32117, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666613} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666619} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 32674, "completion_tokens": 169, "total_tokens": 32843, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666622} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666704} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666704} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 29052, "completion_tokens": 1012, "total_tokens": 30064, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666742} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666873} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666877} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666885} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666893} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666893} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666923} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 14154, "completion_tokens": 137, "total_tokens": 14291, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666930} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666931} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 17505, "completion_tokens": 1217, "total_tokens": 18722, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666932} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 11623, "completion_tokens": 226, "total_tokens": 11849, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666939} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666971} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667034} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 19170, "completion_tokens": 5717, "total_tokens": 24887, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667035} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667035} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 14509, "completion_tokens": 7991, "total_tokens": 22500, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667108} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667115} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 26817, "completion_tokens": 629, "total_tokens": 27446, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667123} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667145} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667155} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667155} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 14926, "completion_tokens": 1210, "total_tokens": 16136, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667199} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667332} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667350} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667366} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667367} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667408} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 14827, "completion_tokens": 2438, "total_tokens": 17265, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667443} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667449} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 15669, "completion_tokens": 2562, "total_tokens": 18231, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667470} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667479} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667492} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667498} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 15842, "completion_tokens": 1819, "total_tokens": 17661, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667522} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667523} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 18852, "completion_tokens": 2212, "total_tokens": 21064, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667547} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667547} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667563} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667564} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667659} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 11633, "completion_tokens": 1878, "total_tokens": 13511, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667686} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667738} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667769} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667769} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 11319, "completion_tokens": 1373, "total_tokens": 12692, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667791} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667864} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667877} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 12727, "completion_tokens": 1245, "total_tokens": 13972, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667888} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667907} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667913} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "whole", "prompt_tokens": 13359, "completion_tokens": 1287, "total_tokens": 14646, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667925} {"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667990} {"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667991} @@ -998,3 +778,223 @@ {"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163513} {"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163513} {"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163513} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745163518} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169424} +{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169425} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169425} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169425} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169504} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169513} +{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169513} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169513} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169515} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169818} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169922} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12540, "completion_tokens": 4598, "total_tokens": 17138, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169961} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169983} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169986} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745169991} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745170026} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745170032} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745170033} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745170035} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 11415, "completion_tokens": 3674, "total_tokens": 15089, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745170079} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745170445} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 15533, "completion_tokens": 259, "total_tokens": 15792, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745170451} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171263} +{"event": "repo", "properties": {"num_files": 612}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171263} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171263} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171264} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 8867, "completion_tokens": 17, "total_tokens": 8884, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171269} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171269} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171274} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171276} +{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171302} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171306} +{"event": "repo", "properties": {"num_files": 612}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171307} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171307} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171307} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 9113, "completion_tokens": 17, "total_tokens": 9130, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171312} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171312} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171723} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171757} +{"event": "repo", "properties": {"num_files": 612}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171758} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171758} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171758} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171761} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171764} +{"event": "repo", "properties": {"num_files": 612}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171765} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171765} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171765} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171829} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171854} +{"event": "repo", "properties": {"num_files": 612}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171854} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171854} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171854} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171874} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171909} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12362, "completion_tokens": 445, "total_tokens": 12807, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171917} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171960} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 13269, "completion_tokens": 262, "total_tokens": 13531, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171970} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171985} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171988} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171994} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 20636, "completion_tokens": 177, "total_tokens": 20813, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745171998} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172037} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 20894, "completion_tokens": 496, "total_tokens": 21390, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172048} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172095} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 21739, "completion_tokens": 251, "total_tokens": 21990, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172099} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172115} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 22364, "completion_tokens": 155, "total_tokens": 22519, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172119} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172137} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 22589, "completion_tokens": 696, "total_tokens": 23285, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172157} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172200} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172211} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 23740, "completion_tokens": 695, "total_tokens": 24435, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172220} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172282} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 24460, "completion_tokens": 1797, "total_tokens": 26257, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172335} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172348} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 27939, "completion_tokens": 314, "total_tokens": 28253, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172356} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172356} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 28199, "completion_tokens": 1732, "total_tokens": 29931, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172379} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172493} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172522} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 19352, "completion_tokens": 467, "total_tokens": 19819, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172532} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172581} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172586} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172594} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 20067, "completion_tokens": 327, "total_tokens": 20394, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172610} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172650} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 22284, "completion_tokens": 426, "total_tokens": 22710, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172657} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172722} +{"event": "repo", "properties": {"num_files": 613}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172724} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172724} +{"event": "cli session", "properties": {"main_model": "xai/grok-3-fast-beta", "weak_model": "xai/grok-3-fast-beta", "editor_model": "xai/grok-3-fast-beta", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172724} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172725} +{"event": "message_send", "properties": {"main_model": "xai/grok-3-fast-beta", "weak_model": "xai/grok-3-fast-beta", "editor_model": "xai/grok-3-fast-beta", "edit_format": "diff", "prompt_tokens": 10210, "completion_tokens": 78, "total_tokens": 10288, "cost": 0.053000000000000005, "total_cost": 0.053000000000000005}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172729} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172730} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172730} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745172883} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173009} +{"event": "repo", "properties": {"num_files": 613}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173009} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173009} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173009} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173017} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "whole", "prompt_tokens": 8315, "completion_tokens": 25, "total_tokens": 8340, "cost": 0.00126225, "total_cost": 0.00126225}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173024} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173227} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173231} +{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173234} +{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173235} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173477} +{"event": "repo", "properties": {"num_files": 613}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173478} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173478} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173478} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173651} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 13344, "completion_tokens": 1294, "total_tokens": 14638, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173666} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173674} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 15409, "completion_tokens": 651, "total_tokens": 16060, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173687} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173750} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173754} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173757} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173764} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 13350, "completion_tokens": 721, "total_tokens": 14071, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173772} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173790} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173796} +{"event": "repo", "properties": {"num_files": 613}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173796} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173796} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173796} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173798} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173798} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173873} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173898} +{"event": "repo", "properties": {"num_files": 613}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173898} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173898} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173898} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173908} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 8723, "completion_tokens": 179, "total_tokens": 8902, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173914} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173939} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173954} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 7633, "completion_tokens": 328, "total_tokens": 7961, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173960} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173967} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173985} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745173997} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 25866, "completion_tokens": 543, "total_tokens": 26409, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174004} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174035} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174044} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 26460, "completion_tokens": 137, "total_tokens": 26597, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174049} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174055} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174056} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174056} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174643} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174643} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174643} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174643} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174645} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745174645} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745175891} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745175892} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745175892} +{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745175896} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189251} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189251} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189251} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189254} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189929} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189931} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189931} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189934} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189982} +{"event": "exit", "properties": {"reason": "Listed models"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189984} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745189999} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190000} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190000} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190000} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190007} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190022} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190053} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 16858, "completion_tokens": 143, "total_tokens": 17001, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190062} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190237} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 17173, "completion_tokens": 312, "total_tokens": 17485, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190243} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190249} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190249} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190260} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190262} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190262} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190262} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "diff", "prompt_tokens": 10189, "completion_tokens": 116, "total_tokens": 10305, "cost": 0.0015979499999999999, "total_cost": 0.0015979499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190272} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190955} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190955} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190955} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190955} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745190964} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191011} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191011} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8442, "completion_tokens": 417, "total_tokens": 8859, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191025} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191054} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191054} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191127} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 14287, "completion_tokens": 1995, "total_tokens": 16282, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191145} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191182} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191214} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191214} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191224} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191228} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191286} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191286} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8481, "completion_tokens": 1848, "total_tokens": 10329, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191334} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191533} +{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191535} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191535} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8611, "completion_tokens": 89, "total_tokens": 8700, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745191553} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192191} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192191} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192191} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192196} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192301} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192301} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192301} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192301} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7873, "completion_tokens": 147, "total_tokens": 8020, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192314} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192314} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192315} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192318} diff --git a/aider/website/docs/config/adv-model-settings.md b/aider/website/docs/config/adv-model-settings.md index ded10691a..e3c17035c 100644 --- a/aider/website/docs/config/adv-model-settings.md +++ b/aider/website/docs/config/adv-model-settings.md @@ -674,6 +674,12 @@ cog.out("```\n") editor_edit_format: editor-diff reasoning_tag: think +- name: gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: + - thinking_tokens + - name: gemini/gemini-1.5-flash-002 - name: gemini/gemini-1.5-flash-exp-0827 @@ -702,9 +708,15 @@ cog.out("```\n") edit_format: diff use_repo_map: true +- name: gemini/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: + - thinking_tokens + - name: gemini/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced - weak_model_name: gemini/gemini-2.0-flash + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 use_repo_map: true - name: gemini/gemini-2.5-pro-preview-03-25 @@ -1446,6 +1458,12 @@ cog.out("```\n") accepts_settings: - thinking_tokens +- name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: + - thinking_tokens + - name: vertex_ai/claude-3-5-haiku@20241022 edit_format: diff weak_model_name: vertex_ai/claude-3-5-haiku@20241022 @@ -1496,11 +1514,15 @@ cog.out("```\n") - name: vertex_ai/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced + weak_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 use_repo_map: true + editor_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 - name: vertex_ai/gemini-2.5-pro-preview-03-25 edit_format: diff-fenced + weak_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 use_repo_map: true + editor_model_name: vertex_ai-language-models/gemini-2.5-flash-preview-04-17 - name: vertex_ai/gemini-pro-experimental edit_format: diff-fenced diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index 71bb34aef..ba1207ba8 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,13 +264,13 @@ tr:hover { background-color: #f5f5f5; } - - - - - - - + + + + + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-252,084,41491.2%
o3100,7774.4%
openrouter/anthropic/claude-3.7-sonnet35,2681.5%
gemini/gemini-2.5-pro-preview-03-2516,5240.7%
o4-mini16,4990.7%
gpt-4.1-mini11,7750.5%
gpt-4.110,6870.5%
gemini/gemini-2.5-pro-exp-03-251,852,96990.0%
o3100,7774.9%
openrouter/anthropic/claude-3.7-sonnet35,2681.7%
gemini/gemini-2.5-flash-preview-04-1718,6450.9%
gemini/gemini-2.5-pro-preview-03-2516,5240.8%
o4-mini16,4990.8%
xai/grok-3-fast-beta10,2880.5%
None8,0010.4%
gemini/REDACTED6060.0%
From 7c0aac745460528c45cb7d12dd1f4fda698f80c9 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 16:43:35 -0700 Subject: [PATCH 110/459] chore: Update Gemini flash model alias to preview version --- aider/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/models.py b/aider/models.py index a31061f87..dd0abd452 100644 --- a/aider/models.py +++ b/aider/models.py @@ -88,7 +88,7 @@ MODEL_ALIASES = { "3": "gpt-3.5-turbo", # Other models "deepseek": "deepseek/deepseek-chat", - "flash": "gemini/gemini-2.0-flash-exp", + "flash": "gemini/gemini-2.5-flash-preview-04-17", "quasar": "openrouter/openrouter/quasar-alpha", "r1": "deepseek/deepseek-reasoner", "gemini-2.5-pro": "gemini/gemini-2.5-pro-exp-03-25", From b3d32f65d3b6b64d245e572e75c8979775087c61 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 17:29:42 -0700 Subject: [PATCH 111/459] fixed quote --- README.md | 4 ++-- aider/website/assets/home.css | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e9db1be80..688506ab5 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u ## Kind Words From Users -- *"My life has changed this week. There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* — [Eric S. Raymond](https://x.com/esrtweet/status/1910809356381413593) +- *"My life has changed... There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* — [Eric S. Raymond](https://x.com/esrtweet/status/1910809356381413593) - *"The best free open source AI coding assistant."* — [IndyDevDan](https://youtu.be/YALpX8oOn78) - *"The best AI coding assistant so far."* — [Matthew Berman](https://www.youtube.com/watch?v=df8afeb1FY8) - *"Aider ... has easily quadrupled my coding productivity."* — [SOLAR_FIELDS](https://news.ycombinator.com/item?id=36212100) @@ -168,7 +168,7 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u - *"Aider is also my best friend."* — [jzn21](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) - *"Try Aider, it's worth it."* — [jorgejhms](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) - *"I like aider :)"* — [Chenwei Cui](https://x.com/ccui42/status/1904965344999145698) -- *"Aider is the precision tool of LLM code gen. It is minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* — [Reilly Sweetland](https://x.com/rsweetland/status/1904963807237259586) +- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* — [Reilly Sweetland](https://x.com/rsweetland/status/1904963807237259586) - *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) - *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* — [Joshua D Vander Hook](https://x.com/jodavaho/status/1911154899057795218) - *"thanks to aider, i have started and finished three personal projects within the last two days"* — [joseph stalzyn](https://x.com/anitaheeder/status/1908338609645904160) diff --git a/aider/website/assets/home.css b/aider/website/assets/home.css index b46efaa23..9d64fd2e1 100644 --- a/aider/website/assets/home.css +++ b/aider/website/assets/home.css @@ -446,7 +446,7 @@ code, pre, .code-block { } .testimonial-text::before { - content: "\201C"; /* Opening fancy quote */ + content: "\201C\00A0"; /* Opening fancy quote */ color: var(--primary); margin-right: 4px; vertical-align: -0.3em; From 303645cffae597123237967f831e0892e225d784 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 20 Apr 2025 17:30:06 -0700 Subject: [PATCH 112/459] copy --- aider/website/assets/sample-analytics.jsonl | 80 ++++++++++----------- aider/website/docs/config/model-aliases.md | 2 +- aider/website/docs/faq.md | 6 +- aider/website/index.html | 4 +- 4 files changed, 46 insertions(+), 46 deletions(-) diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 90d6e65dd..18005a8c6 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,43 +1,3 @@ -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "whole", "prompt_tokens": 13359, "completion_tokens": 1287, "total_tokens": 14646, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667925} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667990} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667991} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667996} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668002} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668016} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 21550, "completion_tokens": 885, "total_tokens": 22435, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668037} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668063} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 28286, "completion_tokens": 231, "total_tokens": 28517, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668076} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668077} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24153, "completion_tokens": 230, "total_tokens": 24383, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668081} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668082} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24627, "completion_tokens": 137, "total_tokens": 24764, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668088} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668088} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 25094, "completion_tokens": 201, "total_tokens": 25295, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668096} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668136} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 28588, "completion_tokens": 226, "total_tokens": 28814, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668140} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668140} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24152, "completion_tokens": 322, "total_tokens": 24474, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668144} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668205} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668206} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668210} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668212} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 10474, "completion_tokens": 570, "total_tokens": 11044, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668262} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668263} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 7990, "completion_tokens": 342, "total_tokens": 8332, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668268} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668312} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668319} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668324} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668337} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668337} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668349} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668349} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668352} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668352} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 10679, "completion_tokens": 744, "total_tokens": 11423, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668379} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668395} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668414} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668414} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 26914, "completion_tokens": 596, "total_tokens": 27510, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668429} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668482} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 28214, "completion_tokens": 358, "total_tokens": 28572, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668500} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668500} @@ -998,3 +958,43 @@ {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192314} {"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192315} {"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192318} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192612} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192612} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192612} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745192615} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194554} +{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194556} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194556} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194556} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194568} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194656} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 17860, "completion_tokens": 168, "total_tokens": 18028, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194665} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194715} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 18087, "completion_tokens": 253, "total_tokens": 18340, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194725} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194753} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194758} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194776} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194789} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 19552, "completion_tokens": 1375, "total_tokens": 20927, "cost": 0.25052, "total_cost": 0.25052}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194806} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194833} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194837} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194840} +{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 20025, "completion_tokens": 286, "total_tokens": 20311, "cost": 0.064365, "total_cost": 0.314885}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194850} +{"event": "command_think-tokens", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194889} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194910} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194912} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194925} +{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 19887, "completion_tokens": 819, "total_tokens": 20706, "cost": 0.071946, "total_cost": 0.38683100000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194945} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194972} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194973} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194975} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194980} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194982} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745194985} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 19561, "completion_tokens": 3339, "total_tokens": 22900, "cost": 0.32917, "total_cost": 0.7160010000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745195020} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745195108} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 19855, "completion_tokens": 876, "total_tokens": 20731, "cost": 0.23359000000000002, "total_cost": 0.9495910000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745195117} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745195161} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 20114, "completion_tokens": 1504, "total_tokens": 21618, "cost": 0.26130000000000003, "total_cost": 1.2108910000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745195174} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745195213} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745195363} diff --git a/aider/website/docs/config/model-aliases.md b/aider/website/docs/config/model-aliases.md index a9b218f47..73eed2937 100644 --- a/aider/website/docs/config/model-aliases.md +++ b/aider/website/docs/config/model-aliases.md @@ -79,7 +79,7 @@ for alias, model in sorted(MODEL_ALIASES.items()): - `4-turbo`: gpt-4-1106-preview - `4o`: gpt-4o - `deepseek`: deepseek/deepseek-chat -- `flash`: gemini/gemini-2.0-flash-exp +- `flash`: gemini/gemini-2.5-flash-preview-04-17 - `gemini`: gemini/gemini-2.5-pro-preview-03-25 - `gemini-2.5-pro`: gemini/gemini-2.5-pro-exp-03-25 - `gemini-exp`: gemini/gemini-2.5-pro-exp-03-25 diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index ba1207ba8..eaaaa4fc2 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,9 +264,9 @@ tr:hover { background-color: #f5f5f5; } - - - + + + diff --git a/aider/website/index.html b/aider/website/index.html index 80611f3a9..50947389d 100644 --- a/aider/website/index.html +++ b/aider/website/index.html @@ -269,7 +269,7 @@ cog.out(text) + + From 043c42b2b41b2074c468d56a4303c2f81a7193de Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 10:59:49 -0700 Subject: [PATCH 223/459] feat: Create Qwen3 leaderboard data file --- aider/website/_data/qwen3_leaderboard.yml | 55 +++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 aider/website/_data/qwen3_leaderboard.yml diff --git a/aider/website/_data/qwen3_leaderboard.yml b/aider/website/_data/qwen3_leaderboard.yml new file mode 100644 index 000000000..07e378674 --- /dev/null +++ b/aider/website/_data/qwen3_leaderboard.yml @@ -0,0 +1,55 @@ +- dirname: 2025-05-08-03-20-24--qwen3-32b-default + test_cases: 225 + model: Qwen3 32B + edit_format: diff + commit_hash: aaacee5-dirty, aeaf259 + pass_rate_1: 14.2 + pass_rate_2: 40.0 + pass_num_1: 32 + pass_num_2: 90 + percent_cases_well_formed: 83.6 + error_outputs: 119 + num_malformed_responses: 50 + num_with_malformed_responses: 37 + user_asks: 97 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 12 + prompt_tokens: 317591 + completion_tokens: 120418 + test_timeouts: 5 + total_tests: 225 + command: aider --model openrouter/qwen/qwen3-32b + date: 2025-05-08 + versions: 0.82.4.dev + seconds_per_case: 372.2 + total_cost: 0.7603 + +- dirname: 2025-05-08-03-22-37--qwen3-235b-defaults + test_cases: 225 + model: Qwen3 235B A22B + edit_format: diff + commit_hash: aaacee5-dirty + pass_rate_1: 17.3 + pass_rate_2: 49.8 + pass_num_1: 39 + pass_num_2: 112 + percent_cases_well_formed: 91.6 + error_outputs: 58 + num_malformed_responses: 29 + num_with_malformed_responses: 19 + user_asks: 102 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 0 + completion_tokens: 0 + test_timeouts: 1 + total_tests: 225 + command: aider --model openrouter/qwen/qwen3-235b-a22b + date: 2025-05-08 + versions: 0.82.4.dev + seconds_per_case: 428.1 + total_cost: 1.8037 From b5cde63b370326a3ea232837cef4aa0afec9135f Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 11:00:41 -0700 Subject: [PATCH 224/459] initial --- aider/website/_posts/2025-05-08-qwen3.md | 283 +++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 aider/website/_posts/2025-05-08-qwen3.md diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md new file mode 100644 index 000000000..5279a39e1 --- /dev/null +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -0,0 +1,283 @@ +--- +layout: post +title: Qwen3 Benchmark Results +excerpt: "Benchmark results for Qwen3 models using the Aider polyglot coding benchmark." +date: 2025-05-08 +--- + +You can add some introductory text for your blog post here. + +

Qwen3 polyglot coding leaderboard

+ +
+ +
+ + + +
+ +
+ +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-251,852,96990.0%
o3100,7774.9%
openrouter/anthropic/claude-3.7-sonnet35,2681.7%
gemini/gemini-2.5-pro-exp-03-251,637,70083.1%
o3186,9539.5%
openrouter/anthropic/claude-3.7-sonnet76,2853.9%
gemini/gemini-2.5-flash-preview-04-1718,6450.9%
gemini/gemini-2.5-pro-preview-03-2516,5240.8%
o4-mini16,4990.8%
+ + + + + + + + + + + + + {% assign max_cost = 0 %} + {% for row in site.data.qwen3_leaderboard %} {# <-- MODIFIED DATA SOURCE #} + {% if row.total_cost > max_cost %} + {% assign max_cost = row.total_cost %} + {% endif %} + {% endfor %} + {% if max_cost == 0 %}{% assign max_cost = 1 %}{% endif %} + {% assign edit_sorted = site.data.qwen3_leaderboard | sort: 'pass_rate_2' | reverse %} {# <-- MODIFIED DATA SOURCE #} + {% for row in edit_sorted %} {% comment %} Add loop index for unique IDs {% endcomment %} + {% assign row_index = forloop.index0 %} + + + + + + + + + + + + + {% endfor %} + +
+ + ModelPercent correctCostCommandCorrect edit formatEdit Format
+ + + {{ row.model }} +
+ {{ row.pass_rate_2 }}% +
+ {% if row.total_cost > 0 %} +
+ {% endif %} + {% assign rounded_cost = row.total_cost | times: 1.0 | round: 2 %} + {% if row.total_cost == 0 or rounded_cost == 0.00 %}{% else %}${{ rounded_cost }}{% endif %} +
{{ row.command }}{{ row.percent_cases_well_formed }}%{{ row.edit_format }}
+ + + + + + From eef0051b9335878c6e1dbd4875f00e626abcbbd3 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 11:01:03 -0700 Subject: [PATCH 225/459] chore: Remove temporary comments --- aider/website/_posts/2025-05-08-qwen3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index 5279a39e1..da4b5bdf3 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -35,13 +35,13 @@ You can add some introductory text for your blog post here. {% assign max_cost = 0 %} - {% for row in site.data.qwen3_leaderboard %} {# <-- MODIFIED DATA SOURCE #} + {% for row in site.data.qwen3_leaderboard %} {% if row.total_cost > max_cost %} {% assign max_cost = row.total_cost %} {% endif %} {% endfor %} {% if max_cost == 0 %}{% assign max_cost = 1 %}{% endif %} - {% assign edit_sorted = site.data.qwen3_leaderboard | sort: 'pass_rate_2' | reverse %} {# <-- MODIFIED DATA SOURCE #} + {% assign edit_sorted = site.data.qwen3_leaderboard | sort: 'pass_rate_2' | reverse %} {% for row in edit_sorted %} {% comment %} Add loop index for unique IDs {% endcomment %} {% assign row_index = forloop.index0 %} From 0a5c1960b36f5712f58d29dbb06df93463db93c7 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 11:01:15 -0700 Subject: [PATCH 226/459] cleanup --- aider/website/_post/2025-05-08-qwen3.md | 283 ------------------------ 1 file changed, 283 deletions(-) delete mode 100644 aider/website/_post/2025-05-08-qwen3.md diff --git a/aider/website/_post/2025-05-08-qwen3.md b/aider/website/_post/2025-05-08-qwen3.md deleted file mode 100644 index 5279a39e1..000000000 --- a/aider/website/_post/2025-05-08-qwen3.md +++ /dev/null @@ -1,283 +0,0 @@ ---- -layout: post -title: Qwen3 Benchmark Results -excerpt: "Benchmark results for Qwen3 models using the Aider polyglot coding benchmark." -date: 2025-05-08 ---- - -You can add some introductory text for your blog post here. - -

Qwen3 polyglot coding leaderboard

- -
- -
- - - -
- -
- - - - - - - - - - - - - - - {% assign max_cost = 0 %} - {% for row in site.data.qwen3_leaderboard %} {# <-- MODIFIED DATA SOURCE #} - {% if row.total_cost > max_cost %} - {% assign max_cost = row.total_cost %} - {% endif %} - {% endfor %} - {% if max_cost == 0 %}{% assign max_cost = 1 %}{% endif %} - {% assign edit_sorted = site.data.qwen3_leaderboard | sort: 'pass_rate_2' | reverse %} {# <-- MODIFIED DATA SOURCE #} - {% for row in edit_sorted %} {% comment %} Add loop index for unique IDs {% endcomment %} - {% assign row_index = forloop.index0 %} - - - - - - - - - - - - - {% endfor %} - -
- - ModelPercent correctCostCommandCorrect edit formatEdit Format
- - - {{ row.model }} -
- {{ row.pass_rate_2 }}% -
- {% if row.total_cost > 0 %} -
- {% endif %} - {% assign rounded_cost = row.total_cost | times: 1.0 | round: 2 %} - {% if row.total_cost == 0 or rounded_cost == 0.00 %}{% else %}${{ rounded_cost }}{% endif %} -
{{ row.command }}{{ row.percent_cases_well_formed }}%{{ row.edit_format }}
- - - - - - From d32d0b790987da368e3a1236010341d9ae8c227b Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 11:05:37 -0700 Subject: [PATCH 227/459] chore: Remove last updated date cog code --- aider/website/_posts/2025-05-08-qwen3.md | 27 ------------------------ 1 file changed, 27 deletions(-) diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index da4b5bdf3..e2a6f420a 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -254,30 +254,3 @@ You can add some introductory text for your blog post here. - - From 35fe1df499056a088acfd45d358e895851e56473 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 11:05:40 -0700 Subject: [PATCH 228/459] feat: Make leaderboard title configurable and set custom title in post --- aider/website/_includes/leaderboard_table.js | 11 ++++++++--- aider/website/_posts/2025-05-08-qwen3.md | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/aider/website/_includes/leaderboard_table.js b/aider/website/_includes/leaderboard_table.js index 8f9f40a82..0dacbdbe7 100644 --- a/aider/website/_includes/leaderboard_table.js +++ b/aider/website/_includes/leaderboard_table.js @@ -188,10 +188,15 @@ document.addEventListener('DOMContentLoaded', function() { // Update the leaderboard title based on mode and selection if (leaderboardTitle) { - if (currentMode === 'view' && selectedRows.size > 0) { - leaderboardTitle.textContent = filteredTitle; + // Check if a custom title is provided globally + if (typeof LEADERBOARD_CUSTOM_TITLE !== 'undefined' && LEADERBOARD_CUSTOM_TITLE) { + leaderboardTitle.textContent = LEADERBOARD_CUSTOM_TITLE; } else { - leaderboardTitle.textContent = defaultTitle; + if (currentMode === 'view' && selectedRows.size > 0) { + leaderboardTitle.textContent = filteredTitle; + } else { + leaderboardTitle.textContent = defaultTitle; + } } } diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index e2a6f420a..51f6d4292 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -252,5 +252,6 @@ You can add some introductory text for your blog post here. From d89d500eabaef94c967df426eedcace24d41f216 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 11:31:07 -0700 Subject: [PATCH 229/459] chore: Update default settings for Qwen3 235b model --- aider/models.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/aider/models.py b/aider/models.py index 166cb3974..1e4b408e2 100644 --- a/aider/models.py +++ b/aider/models.py @@ -526,6 +526,11 @@ class Model(ModelSettings): if "qwen3" in model and "235b" in model: self.edit_format = "diff" self.use_repo_map = True + self.system_prompt_prefix = "/no_think" + self.use_temperature = 0.7 + self.extra_params = { + "max_tokens": 24000, "top_p": 0.8, "top_k": 20, "min_p": 0.0 + } return # <-- # use the defaults From f047b2928b0f8e1fb75eafe284c73533ed9ed63a Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 11:31:14 -0700 Subject: [PATCH 230/459] style: Format models.py --- aider/models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/aider/models.py b/aider/models.py index 1e4b408e2..5abc535b1 100644 --- a/aider/models.py +++ b/aider/models.py @@ -528,9 +528,7 @@ class Model(ModelSettings): self.use_repo_map = True self.system_prompt_prefix = "/no_think" self.use_temperature = 0.7 - self.extra_params = { - "max_tokens": 24000, "top_p": 0.8, "top_k": 20, "min_p": 0.0 - } + self.extra_params = {"max_tokens": 24000, "top_p": 0.8, "top_k": 20, "min_p": 0.0} return # <-- # use the defaults From 43dd9ef8a5a804c7387f8f3fe8575606fcdf67c7 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 11:32:11 -0700 Subject: [PATCH 231/459] tweak qwen3 settings --- aider/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/models.py b/aider/models.py index 5abc535b1..3c7affcbe 100644 --- a/aider/models.py +++ b/aider/models.py @@ -528,7 +528,7 @@ class Model(ModelSettings): self.use_repo_map = True self.system_prompt_prefix = "/no_think" self.use_temperature = 0.7 - self.extra_params = {"max_tokens": 24000, "top_p": 0.8, "top_k": 20, "min_p": 0.0} + self.extra_params = {"top_p": 0.8, "top_k": 20, "min_p": 0.0} return # <-- # use the defaults From 87768303068fdeac4d79a31471aabd104f0cf613 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 11:32:24 -0700 Subject: [PATCH 232/459] copy --- aider/resources/model-settings.yml | 44 +++---- aider/website/_data/qwen3_leaderboard.yml | 138 +++++++++++++++++++++- aider/website/_posts/2025-05-08-qwen3.md | 87 +++++++++++++- 3 files changed, 241 insertions(+), 28 deletions(-) diff --git a/aider/resources/model-settings.yml b/aider/resources/model-settings.yml index c1a3ea833..338521179 100644 --- a/aider/resources/model-settings.yml +++ b/aider/resources/model-settings.yml @@ -1412,27 +1412,27 @@ use_repo_map: true weak_model_name: openrouter/google/gemini-2.0-flash-001 -- name: openrouter/qwen/qwen3-235b-a22b - system_prompt_prefix: "/no_think" - use_temperature: 0.7 - extra_params: - max_tokens: 24000 - top_p: 0.8 - top_k: 20 - min_p: 0.0 - temperature: 0.7 - extra_body: - provider: - order: ["Together"] +#- name: openrouter/qwen/qwen3-235b-a22b +# system_prompt_prefix: "/no_think" +# use_temperature: 0.7 +# extra_params: +# max_tokens: 24000 +# top_p: 0.8 +# top_k: 20 +# min_p: 0.0 +# temperature: 0.7 +# extra_body: +# provider: +# order: ["Together"] -- name: together_ai/Qwen/Qwen3-235B-A22B-fp8-tput - system_prompt_prefix: "/no_think" - use_temperature: 0.7 - reasoning_tag: think - extra_params: - max_tokens: 24000 - top_p: 0.8 - top_k: 20 - min_p: 0.0 - temperature: 0.7 +#- name: together_ai/Qwen/Qwen3-235B-A22B-fp8-tput +# system_prompt_prefix: "/no_think" +# use_temperature: 0.7 +# reasoning_tag: think +# extra_params: +# max_tokens: 24000 +# top_p: 0.8 +# top_k: 20 +# min_p: 0.0 +# temperature: 0.7 \ No newline at end of file diff --git a/aider/website/_data/qwen3_leaderboard.yml b/aider/website/_data/qwen3_leaderboard.yml index 07e378674..faa20fab7 100644 --- a/aider/website/_data/qwen3_leaderboard.yml +++ b/aider/website/_data/qwen3_leaderboard.yml @@ -1,6 +1,6 @@ - dirname: 2025-05-08-03-20-24--qwen3-32b-default test_cases: 225 - model: Qwen3 32B + model: Qwen3 32B on OpenRouter, all providers, default settings (thinking) edit_format: diff commit_hash: aaacee5-dirty, aeaf259 pass_rate_1: 14.2 @@ -28,7 +28,7 @@ - dirname: 2025-05-08-03-22-37--qwen3-235b-defaults test_cases: 225 - model: Qwen3 235B A22B + model: Qwen3 235B A22B on OpenRouter, all providers, default settings (thinking) edit_format: diff commit_hash: aaacee5-dirty pass_rate_1: 17.3 @@ -53,3 +53,137 @@ versions: 0.82.4.dev seconds_per_case: 428.1 total_cost: 1.8037 + + +- dirname: 2025-05-08-17-39-14--qwen3-235b-or-together-only + test_cases: 225 + model: Qwen3 235B A22B on OpenRouter only TogetherAI, recommended /no_think settings + edit_format: diff + commit_hash: 328584e + pass_rate_1: 28.0 + pass_rate_2: 54.7 + pass_num_1: 63 + pass_num_2: 123 + percent_cases_well_formed: 90.7 + error_outputs: 39 + num_malformed_responses: 32 + num_with_malformed_responses: 21 + user_asks: 106 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2816606 + completion_tokens: 362346 + test_timeouts: 2 + total_tests: 225 + command: aider --model openrouter/qwen/qwen3-235b-a22b + date: 2025-05-08 + versions: 0.82.4.dev + seconds_per_case: 77.2 + total_cost: 0.6399 + + +- dirname: 2025-04-30-04-49-37--Qwen3-235B-A22B-whole-nothink + test_cases: 225 + model: Qwen3-235B-A22B with VLLM, bfloat16, recommended /no_think settings + edit_format: whole + commit_hash: 0c383df-dirty + pass_rate_1: 28.0 + pass_rate_2: 65.3 + pass_num_1: 63 + pass_num_2: 147 + percent_cases_well_formed: 100.0 + error_outputs: 3 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 166 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 3 + test_timeouts: 0 + total_tests: 225 + command: aider --model openai/Qwen3-235B-A22B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 166.0 + total_cost: 0.0000 + +- dirname: 2025-04-30-04-49-50--Qwen3-235B-A22B-diff-nothink + test_cases: 225 + model: Qwen3-235B-A22B with VLLM, bfloat16, recommended /no_think settings + edit_format: diff + commit_hash: 0c383df-dirty + pass_rate_1: 29.8 + pass_rate_2: 61.3 + pass_num_1: 67 + pass_num_2: 138 + percent_cases_well_formed: 94.7 + error_outputs: 25 + num_malformed_responses: 25 + num_with_malformed_responses: 12 + user_asks: 97 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + test_timeouts: 2 + total_tests: 225 + command: aider --model openai/Qwen3-235B-A22B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 158.2 + total_cost: 0.0000 + +- dirname: 2025-04-30-04-08-41--Qwen3-32B-whole-nothink + test_cases: 225 + model: Qwen3-32B with VLLM, bfloat16, recommended /no_think settings + edit_format: whole + commit_hash: 0c383df-dirty + pass_rate_1: 20.4 + pass_rate_2: 45.8 + pass_num_1: 46 + pass_num_2: 103 + percent_cases_well_formed: 100.0 + error_outputs: 3 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 94 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 3 + test_timeouts: 5 + total_tests: 225 + command: aider --model openai/Qwen3-32B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 48.1 + total_cost: 0.0000 + +- dirname: 2025-04-30-04-08-51--Qwen3-32B-diff-nothink + test_cases: 225 + model: Qwen3-32B with VLLM, bfloat16, recommended /no_think settings + edit_format: diff + commit_hash: 0c383df-dirty + pass_rate_1: 20.4 + pass_rate_2: 41.3 + pass_num_1: 46 + pass_num_2: 93 + percent_cases_well_formed: 94.2 + error_outputs: 17 + num_malformed_responses: 14 + num_with_malformed_responses: 13 + user_asks: 83 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 3 + test_timeouts: 4 + total_tests: 225 + command: aider --model openai/Qwen3-32B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 59.4 + total_cost: 0.0000 \ No newline at end of file diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index 51f6d4292..4923f5330 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -1,13 +1,29 @@ --- layout: post -title: Qwen3 Benchmark Results +title: Qwen3 benchmark results excerpt: "Benchmark results for Qwen3 models using the Aider polyglot coding benchmark." date: 2025-05-08 --- -You can add some introductory text for your blog post here. +# Qwen3 results on the aider polyglot benchmark -

Qwen3 polyglot coding leaderboard

+As [previously discussed when Qwen2.5 was released](/2024/11/21/quantization.html), +details matter when working with open source models for AI coding. +Proprietary models are served by their creators or trusted providers with stable inference settings. +Open source models are wonderful because anyone can serve them, +but API providers can use very different inference settings, quantizations, etc. + +Below are collection of aider polyglot benchmark results for the new Qwen3 models. +Results are presented with various settings against various API providers, +with the hope of showcasing the strengths of these models and its providers. + +{: .note } +This article is being updated as new results become available. + + + + +

Qwen3 results on the aider polyglot benchmark

@@ -252,6 +268,69 @@ You can add some introductory text for your blog post here. + + +## OpenRouter only TogetherAI, recommended /no_think settings + +These results were obtained with the +[recommended](https://huggingface.co/Qwen/Qwen3-235B-A22B#best-practices) +non-thinking model settings in `.aider.model.settings.yml`: + +```yaml +- name: openrouter/qwen/qwen3-235b-a22b + system_prompt_prefix: "/no_think" + use_temperature: 0.7 + extra_params: + max_tokens: 24000 + top_p: 0.8 + top_k: 20 + min_p: 0.0 + temperature: 0.7 + extra_body: + provider: + order: ["Together"] +``` + +And then running aider: + +```bash +aider --model openrouter/qwen/qwen3-235b-a22b +``` + + +## OpenRouter, all providers, default settings (thinking) + +These results were obtained by simply running aider as shown below, without any model specific settings. +This should have enabled thinking, assuming upstream API providers honor that convention for Qwen3. + +```bash +aider --model openrouter/qwen/qwen3-xxx +``` + +## VLLM, bfloat16, recommended /no_think + +These [benchmarks results were obtained by GitHub user AlongWY](https://github.com/Aider-AI/aider/pull/3908) +with the +[recommended](https://huggingface.co/Qwen/Qwen3-235B-A22B#best-practices) +non-thinking model settings in `.aider.model.settings.yml`: + +```yaml +- name: openai/ + system_prompt_prefix: "/no_think" + use_temperature: 0.7 + extra_params: + max_tokens: 24000 + top_p: 0.8 + top_k: 20 + min_p: 0.0 + temperature: 0.7 +``` + +And then running aider: + +```bash +aider --model openai/ --openai-api-base +``` From d5ea078f24323dabe52783a7f3c0f2bf8f83a417 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 11:34:42 -0700 Subject: [PATCH 233/459] copy --- aider/website/_posts/2025-05-08-qwen3.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index 4923f5330..01a544b25 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -15,14 +15,13 @@ but API providers can use very different inference settings, quantizations, etc. Below are collection of aider polyglot benchmark results for the new Qwen3 models. Results are presented with various settings against various API providers, -with the hope of showcasing the strengths of these models and its providers. +with the hope of showcasing the strengths of these models and their providers. + +See details for configuring Qwen3 after the results table. {: .note } This article is being updated as new results become available. - - -

Qwen3 results on the aider polyglot benchmark

From acd7309b7878aab0aeda2d27fad07d56d9ed56b6 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 11:41:51 -0700 Subject: [PATCH 234/459] copy --- aider/website/_data/qwen3_leaderboard.yml | 14 +++++++------- aider/website/_posts/2025-05-08-qwen3.md | 9 ++++++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/aider/website/_data/qwen3_leaderboard.yml b/aider/website/_data/qwen3_leaderboard.yml index faa20fab7..e773bdee2 100644 --- a/aider/website/_data/qwen3_leaderboard.yml +++ b/aider/website/_data/qwen3_leaderboard.yml @@ -1,6 +1,6 @@ - dirname: 2025-05-08-03-20-24--qwen3-32b-default test_cases: 225 - model: Qwen3 32B on OpenRouter, all providers, default settings (thinking) + model: Qwen3 32B diff on OpenRouter, all providers, default settings (thinking) edit_format: diff commit_hash: aaacee5-dirty, aeaf259 pass_rate_1: 14.2 @@ -28,7 +28,7 @@ - dirname: 2025-05-08-03-22-37--qwen3-235b-defaults test_cases: 225 - model: Qwen3 235B A22B on OpenRouter, all providers, default settings (thinking) + model: Qwen3 235B A22B diff on OpenRouter, all providers, default settings (thinking) edit_format: diff commit_hash: aaacee5-dirty pass_rate_1: 17.3 @@ -57,7 +57,7 @@ - dirname: 2025-05-08-17-39-14--qwen3-235b-or-together-only test_cases: 225 - model: Qwen3 235B A22B on OpenRouter only TogetherAI, recommended /no_think settings + model: Qwen3 235B A22B diff on OpenRouter only TogetherAI, recommended /no_think settings edit_format: diff commit_hash: 328584e pass_rate_1: 28.0 @@ -86,7 +86,7 @@ - dirname: 2025-04-30-04-49-37--Qwen3-235B-A22B-whole-nothink test_cases: 225 - model: Qwen3-235B-A22B with VLLM, bfloat16, recommended /no_think settings + model: Qwen3-235B-A22B whole with VLLM, bfloat16, recommended /no_think settings edit_format: whole commit_hash: 0c383df-dirty pass_rate_1: 28.0 @@ -112,7 +112,7 @@ - dirname: 2025-04-30-04-49-50--Qwen3-235B-A22B-diff-nothink test_cases: 225 - model: Qwen3-235B-A22B with VLLM, bfloat16, recommended /no_think settings + model: Qwen3-235B-A22B diff with VLLM, bfloat16, recommended /no_think settings edit_format: diff commit_hash: 0c383df-dirty pass_rate_1: 29.8 @@ -138,7 +138,7 @@ - dirname: 2025-04-30-04-08-41--Qwen3-32B-whole-nothink test_cases: 225 - model: Qwen3-32B with VLLM, bfloat16, recommended /no_think settings + model: Qwen3-32B whole with VLLM, bfloat16, recommended /no_think settings edit_format: whole commit_hash: 0c383df-dirty pass_rate_1: 20.4 @@ -164,7 +164,7 @@ - dirname: 2025-04-30-04-08-51--Qwen3-32B-diff-nothink test_cases: 225 - model: Qwen3-32B with VLLM, bfloat16, recommended /no_think settings + model: Qwen3-32B diff with VLLM, bfloat16, recommended /no_think settings edit_format: diff commit_hash: 0c383df-dirty pass_rate_1: 20.4 diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index 01a544b25..79d53ea8d 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -14,10 +14,13 @@ Open source models are wonderful because anyone can serve them, but API providers can use very different inference settings, quantizations, etc. Below are collection of aider polyglot benchmark results for the new Qwen3 models. -Results are presented with various settings against various API providers, -with the hope of showcasing the strengths of these models and their providers. +Results are presented using both "diff" and "whole" +[edit formats](https://aider.chat/docs/more/edit-formats.html), +with various models settings, against various API providers. -See details for configuring Qwen3 after the results table. +See details on the +[model settings](https://aider.chat/docs/config/adv-model-settings.html#model-settings) +used after the results table. {: .note } This article is being updated as new results become available. From e4274aa4f66a404374f9939526948d74569927eb Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 12:08:05 -0700 Subject: [PATCH 235/459] copy --- HISTORY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 48738aa73..132b84e59 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,9 +2,9 @@ ### main branch -- Added support for `qwen3-235b` models, including `openrouter/qwen/qwen3-235b-a22b`. +- Added support for `qwen3-235b` models. - Added support for `gemini-2.5-pro-preview-05-06` models. -- Added repomap support for OCaml and OCaml interface files, by Andrey Popp. +- Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. - Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. - Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. - Marked Gemini 2.5 Pro preview models as `overeager` by default. From cd7567fcf603857b6abc762bc4d4593502e31105 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 12:08:14 -0700 Subject: [PATCH 236/459] chore: Refine ask mode prompt instructions --- aider/coders/ask_prompts.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aider/coders/ask_prompts.py b/aider/coders/ask_prompts.py index 855806592..93106380a 100644 --- a/aider/coders/ask_prompts.py +++ b/aider/coders/ask_prompts.py @@ -8,7 +8,9 @@ class AskPrompts(CoderPrompts): Answer questions about the supplied code. Always reply to the user in {language}. -Describe code changes however you like. Don't use SEARCH/REPLACE blocks! +Describe code changes however you like. +Don't use SEARCH/REPLACE blocks! +Don't return entire updated source files. """ example_messages = [] From 82f33c12206d1ab7a19d4b5369a40c3016b255ee Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 12:14:41 -0700 Subject: [PATCH 237/459] copy --- aider/website/_posts/2025-05-08-qwen3.md | 1 + aider/website/assets/2025-05-08-qwen3.jpg | Bin 0 -> 226001 bytes 2 files changed, 1 insertion(+) create mode 100644 aider/website/assets/2025-05-08-qwen3.jpg diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index 79d53ea8d..21716c725 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -2,6 +2,7 @@ layout: post title: Qwen3 benchmark results excerpt: "Benchmark results for Qwen3 models using the Aider polyglot coding benchmark." +highlight_image: /assets/2025-05-08-qwen3.jpg date: 2025-05-08 --- diff --git a/aider/website/assets/2025-05-08-qwen3.jpg b/aider/website/assets/2025-05-08-qwen3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69934518c22eae9c8df019aacd6a856499ad6701 GIT binary patch literal 226001 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

2yZ5|H)wr*Qs8&nb)KgHQy15 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 H2LA50EM=*(Yrs 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�HY$l_~o=C^8q_(Z?a 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

x0OqbYI?`Fz>_|~WcGFAcA&1Sn7MrKsp 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

)zwuNJ1<|d4>BGG0S~TeuyD2m*%g`s&LmFr z9I80+Yw{K2MYHyrAh+obaW!j7b1@sv zUSSBl_U_0+C-XwQVs7*UW+(5QAgG^R;#DNhMO78%RNA&%9WOVbyOBmPrFw%7 zWCkm2-Sf71%BS_#0YxjT2{f}=A%HZ6+D^t)$FxE8^xR@pKpC_* z)+zteu9P5g1gtA^IwnGG*Cd7MoRiey=~W(98yr;o?C>EoFfA&LrG-dTJy@DXnFeOAFN_}mz?vAY zUGa3fej}YWfi$PJkXzT5p0=&n_{?PF5lG&$r^ey+O>^`ZL+N2r2Mylav{VTQ>()E!HH!GXL zHP|mOF?N6&Mj`o<@06<>aUKAnqZQ?wX}9?quoR(84I#+gx}@^BHT`l+9!tfj#zOo( z%aW2I#2jrcW$mk?xx`}9nMDHEY6uctWML$5y94PDeLC%j;BpLVNp&HQIaYt|i{W`N zebzt_*EmBy5Mbn-0>S8jOnf>~Rn*B(XURZ(Mog~q@(S@QI}9A%wgTLfjnrHPs6 zJv%}bs>EgU$HDAQQJdiH@kd3^r!pDey^d+)B_;HaD|U^33&qicnFp5ns*EU=Jv~S# z-1$`1vaQ5hd%y|GjYxjgnb`35F2mydxJ#hnN&x7MSBnPAU1ngO=`T9XzxwIFo^A!G z{UgSKM@I4wjn}{5@hk3a_rUCx`@?7WXD{%UMBY55{X+Xq477j-$uHnq4%Lk`eFbsP zjs9V;`CqxS`(xekQs;KB5}fv)&j&5OcW4eoHGE-X*ulbIiG8_W%}`ztULM)E|B_P8 zn5C*1q@&7IXgURtHiPbysu3GWiF~tfH22#jNr&>%eK6VwW4_RB=88S8TjAMa@Gi|b zxVH6vp#BBAJ7|=>(Oi6&ppK11t>`4;XSSaN`N<(aW#MP%@Uyr4YmN&+b5LF^ddkD1 zQ~vX>^h!PV(xBvgO^6Qc1y@0Ctz5Gi_v6piwql09%(yAalYqd54+IF3Yb0u_YN9M4SlMB=d^s_Lc7d83{9j0NGP+45{d4iJ|Dp7xQEn5q@nX zfarbmLk3S=|4jN4oMy)JTjwEkm*~HBZc6@q>L)dR^2Sd|`Iq+_4}*q4RC|}N6@Coy zXJDv_BAuNNT!2mC$wUj2WYLk+WiV_<4q|Qkpl#it`3_RADQ{8{CgLufQpwFXKNEiu zA{;WDlD(vVmdtQ^i2!k#1dBcR!yBq!EvWw~u}KU;N@E+bi5US`2~NV~i=Iu% Date: Thu, 8 May 2025 12:30:06 -0700 Subject: [PATCH 238/459] feat: Show spinner while waiting for first stream content --- aider/mdstream.py | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/aider/mdstream.py b/aider/mdstream.py index 24c14f0d4..c24d97928 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -2,6 +2,8 @@ import io import time +import threading +from aider.utils import Spinner from rich import box from rich.console import Console @@ -115,9 +117,20 @@ class MarkdownStream: else: self.mdargs = dict() - # Initialize rich Live display with empty text - self.live = Live(Text(""), refresh_per_second=1.0 / self.min_delay) - self.live.start() + # Defer Live creation until the first update so the Spinner can be shown. + self.live = None + self.spinner = Spinner("Streaming markdown...") + self._spinner_stop_event = threading.Event() + self._spinner_thread = threading.Thread(target=self._spin, daemon=True) + self._spinner_thread.start() + self._live_started = False + + def _spin(self): + """Background thread that keeps the spinner moving until stopped.""" + while not self._spinner_stop_event.is_set(): + time.sleep(0.1) + self.spinner.step() + self.spinner.end() def _render_markdown_to_lines(self, text): """Render markdown text to a list of lines. @@ -146,6 +159,15 @@ class MarkdownStream: except Exception: pass # Ignore any errors during cleanup + # Ensure the spinner thread is properly shut down + if hasattr(self, "_spinner_stop_event"): + self._spinner_stop_event.set() + if hasattr(self, "_spinner_thread") and self._spinner_thread.is_alive(): + try: + self._spinner_thread.join(timeout=0.1) + except Exception: + pass + def update(self, text, final=False): """Update the displayed markdown content. @@ -163,6 +185,16 @@ class MarkdownStream: Markdown going to the console works better in terminal scrollback buffers. The live window doesn't play nice with terminal scrollback. """ + # On the first call, stop the spinner and start the Live renderer + if not getattr(self, "_live_started", False): + if hasattr(self, "_spinner_stop_event"): + self._spinner_stop_event.set() + if hasattr(self, "_spinner_thread"): + self._spinner_thread.join() + self.live = Live(Text(""), refresh_per_second=1.0 / self.min_delay) + self.live.start() + self._live_started = True + now = time.time() # Throttle updates to maintain smooth rendering if not final and now - self.when < self.min_delay: From 1d7c56b8c5a5733f9e0e6250f9db65d18f287b18 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 12:30:11 -0700 Subject: [PATCH 239/459] chore: Reorder imports in mdstream.py --- aider/mdstream.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/mdstream.py b/aider/mdstream.py index c24d97928..ed881b28f 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -1,9 +1,8 @@ #!/usr/bin/env python import io -import time import threading -from aider.utils import Spinner +import time from rich import box from rich.console import Console @@ -14,6 +13,7 @@ from rich.syntax import Syntax from rich.text import Text from aider.dump import dump # noqa: F401 +from aider.utils import Spinner _text_prefix = """ # Header From 606e27a337d65b21101b1eef5643c18cb317feb3 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 12:35:02 -0700 Subject: [PATCH 240/459] copy --- aider/mdstream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/mdstream.py b/aider/mdstream.py index ed881b28f..ba80849ad 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -119,7 +119,7 @@ class MarkdownStream: # Defer Live creation until the first update so the Spinner can be shown. self.live = None - self.spinner = Spinner("Streaming markdown...") + self.spinner = Spinner("Waiting for LLM") self._spinner_stop_event = threading.Event() self._spinner_thread = threading.Thread(target=self._spin, daemon=True) self._spinner_thread.start() From 96bc57167fc27c18ff560b6a74d3d631b1063bbe Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 12:35:10 -0700 Subject: [PATCH 241/459] feat: Improve ask prompt to elide unchanging code --- aider/coders/ask_prompts.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aider/coders/ask_prompts.py b/aider/coders/ask_prompts.py index 93106380a..c8c2fb4ea 100644 --- a/aider/coders/ask_prompts.py +++ b/aider/coders/ask_prompts.py @@ -8,9 +8,8 @@ class AskPrompts(CoderPrompts): Answer questions about the supplied code. Always reply to the user in {language}. -Describe code changes however you like. -Don't use SEARCH/REPLACE blocks! -Don't return entire updated source files. +Describe code changes however you like, but elide unchanging code. +Don't use SEARCH/REPLACE blocks or return huge swaths of unchanging code. """ example_messages = [] From b8f9d459fb86e8fecdf81af601696c99ec0b37f4 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 13:48:58 -0700 Subject: [PATCH 242/459] copy --- HISTORY.md | 7 +- aider/website/HISTORY.md | 11 +- aider/website/assets/sample-analytics.jsonl | 974 ++++++++++---------- aider/website/docs/faq.md | 13 +- 4 files changed, 508 insertions(+), 497 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 132b84e59..79f9626d2 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -5,6 +5,7 @@ - Added support for `qwen3-235b` models. - Added support for `gemini-2.5-pro-preview-05-06` models. - Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. +- Added a spinner animation while waiting for the LLM to start streaming its response. - Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. - Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. - Marked Gemini 2.5 Pro preview models as `overeager` by default. @@ -20,7 +21,11 @@ - The `aider scrape` command-line tool will now use Playwright for web scraping if it is available, by Jon Keys. - Fixed linter command execution on Windows by adopting `oslex` for argument quoting, by Titusz Pan. - Improved cross-platform display of shell commands by using `oslex` for robust argument quoting, by Titusz Pan. -- Aider wrote 46% of the code in this release. +- Improved `/ask` mode to instruct the LLM to elide unchanging code in its responses. +- Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. +- Improved display of filenames in the prompt header using rich Text formatting. +- Enabled `reasoning_effort` for Gemini 2.5 Flash models. +- Aider wrote 50% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index 8fa19229c..677b9ed8f 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -26,9 +26,10 @@ cog.out(text) ### main branch -- Added support for `qwen3-235b` models, including `openrouter/qwen/qwen3-235b-a22b`. +- Added support for `qwen3-235b` models. - Added support for `gemini-2.5-pro-preview-05-06` models. -- Added repomap support for OCaml and OCaml interface files, by Andrey Popp. +- Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. +- Added a spinner animation while waiting for the LLM to start streaming its response. - Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. - Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. - Marked Gemini 2.5 Pro preview models as `overeager` by default. @@ -44,7 +45,11 @@ cog.out(text) - The `aider scrape` command-line tool will now use Playwright for web scraping if it is available, by Jon Keys. - Fixed linter command execution on Windows by adopting `oslex` for argument quoting, by Titusz Pan. - Improved cross-platform display of shell commands by using `oslex` for robust argument quoting, by Titusz Pan. -- Aider wrote 46% of the code in this release. +- Improved `/ask` mode to instruct the LLM to elide unchanging code in its responses. +- Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. +- Improved display of filenames in the prompt header using rich Text formatting. +- Enabled `reasoning_effort` for Gemini 2.5 Flash models. +- Aider wrote 50% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index a667682bb..70f22786f 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,490 +1,3 @@ -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591242} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591242} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591255} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591261} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8690, "completion_tokens": 345, "total_tokens": 9035, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591274} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591286} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 7292, "completion_tokens": 1220, "total_tokens": 8512, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591320} -{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591356} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591356} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8562, "completion_tokens": 885, "total_tokens": 9447, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591367} -{"event": "command_diff", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591397} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745591415} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745592842} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745592843} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745592843} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745592843} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745592864} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7148, "completion_tokens": 118, "total_tokens": 7266, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745592870} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745593117} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745593128} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745593128} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745593128} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745593131} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132185} -{"event": "repo", "properties": {"num_files": 210}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132185} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132185} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132185} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132186} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132243} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 5920, "completion_tokens": 369, "total_tokens": 6289, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132250} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132280} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746132280} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145284} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145285} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145285} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145322} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145323} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145323} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145359} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145359} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145359} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145381} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145381} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145381} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145385} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145397} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145397} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145397} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145400} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145410} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145410} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145410} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145410} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145430} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 21091, "completion_tokens": 965, "total_tokens": 22056, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145453} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145493} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 22758, "completion_tokens": 96, "total_tokens": 22854, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145498} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145505} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145506} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145575} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145577} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145578} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145578} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145578} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145595} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 21165, "completion_tokens": 665, "total_tokens": 21830, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145626} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145642} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 22974, "completion_tokens": 626, "total_tokens": 23600, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145655} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145666} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145669} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145671} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145681} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145684} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145684} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145684} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145684} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145691} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145696} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145698} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145698} -{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145698} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145703} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145707} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145708} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145708} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145712} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 23102, "completion_tokens": 3097, "total_tokens": 26199, "cost": 0.35490000000000005, "total_cost": 0.35490000000000005}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145734} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145736} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145749} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145749} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145749} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 24907, "completion_tokens": 1560, "total_tokens": 26467, "cost": 0.31147, "total_cost": 0.6663700000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145753} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145756} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145756} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145756} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145759} -{"event": "command_diff", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145770} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145814} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145814} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145814} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145818} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145847} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145848} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145848} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145849} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145857} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145857} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145857} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145859} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145882} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145949} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145949} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145949} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145951} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145963} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145963} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145963} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145963} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145964} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145971} -{"event": "repo", "properties": {"num_files": 615}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145971} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145971} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746145971} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746146011} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746146014} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746146014} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 21508, "completion_tokens": 724, "total_tokens": 22232, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746146038} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497069} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497069} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497069} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497072} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497077} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497174} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497177} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 30848, "completion_tokens": 526, "total_tokens": 31374, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497198} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497235} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 31391, "completion_tokens": 528, "total_tokens": 31919, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497253} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497546} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497546} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497546} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497546} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 15562, "completion_tokens": 328, "total_tokens": 15890, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497569} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497569} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497571} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497574} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497662} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497662} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497662} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497666} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497674} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497675} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497675} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497678} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497704} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497705} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497705} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497709} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497783} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497783} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497783} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497787} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497814} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497815} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497815} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497819} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497839} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497840} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497840} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497842} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497852} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497852} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497852} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746497856} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501582} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501588} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501589} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501590} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501591} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501592} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501593} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501593} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501593} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501593} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501661} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501662} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501662} -{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501662} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501662} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501663} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501663} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501663} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501663} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501784} -{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501790} -{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746501790} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746548297} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554583} -{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554586} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554618} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554618} -{"event": "cli session", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554619} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554619} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554622} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554627} -{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554630} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554631} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554631} -{"event": "cli session", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554631} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554631} -{"event": "message_send", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED", "edit_format": "whole", "prompt_tokens": 1831, "completion_tokens": 158, "total_tokens": 1989, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554638} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554640} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746554640} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561895} -{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561898} -{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561920} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561922} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561923} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561923} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561923} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-pro-preview-05-06", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "whole", "prompt_tokens": 8566, "completion_tokens": 10, "total_tokens": 8576, "cost": 0.010807500000000001, "total_cost": 0.010807500000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561929} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746561929} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562529} -{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562531} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562536} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562536} -{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562536} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562536} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 1862, "completion_tokens": 339, "total_tokens": 2201, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562557} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562559} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746562559} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746630985} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746630989} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746630989} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631023} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631023} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631023} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631023} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631085} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631087} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631087} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631087} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631087} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631102} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631734} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631734} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631734} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631734} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631736} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced", "prompt_tokens": 10039, "completion_tokens": 10, "total_tokens": 10049, "cost": 0.01264875, "total_cost": 0.01264875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631741} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631746} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631763} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631765} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631766} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631766} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631766} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631767} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced", "prompt_tokens": 10023, "completion_tokens": 10, "total_tokens": 10033, "cost": 9990.01252875, "total_cost": 9990.01252875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631772} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631795} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631804} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631805} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631805} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631805} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631811} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631838} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631839} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631839} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631839} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746631844} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633659} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633659} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633659} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633659} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633672} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633728} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 10520, "completion_tokens": 138, "total_tokens": 10658, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633788} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633798} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633806} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633806} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633806} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633806} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633808} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 4930, "completion_tokens": 787, "total_tokens": 5717, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746633938} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746634244} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746635197} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746635197} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746635197} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746635198} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746635222} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746635299} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 4998, "completion_tokens": 991, "total_tokens": 5989, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746635317} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636463} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636745} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636748} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636748} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636748} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced", "prompt_tokens": 10025, "completion_tokens": 20, "total_tokens": 10045, "cost": 0.012731250000000001, "total_cost": 0.012731250000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636782} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636782} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636796} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636797} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636797} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636797} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9605, "completion_tokens": 13, "total_tokens": 9618, "cost": 0.012136250000000001, "total_cost": 0.012136250000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636802} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636802} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636814} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636814} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636814} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636814} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 7634, "completion_tokens": 9, "total_tokens": 7643, "cost": 0.0096325, "total_cost": 0.0096325}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636818} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636819} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636863} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636864} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636864} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636864} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9661, "completion_tokens": 13, "total_tokens": 9674, "cost": 0.01220625, "total_cost": 0.01220625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636869} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636869} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636903} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636903} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636903} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636903} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 7623, "completion_tokens": 97, "total_tokens": 7720, "cost": 0.010498750000000001, "total_cost": 0.010498750000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636910} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636926} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636926} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636926} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636926} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9548, "completion_tokens": 177, "total_tokens": 9725, "cost": 0.013705000000000002, "total_cost": 0.013705000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746636935} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637010} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637010} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637010} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637010} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9693, "completion_tokens": 593, "total_tokens": 10286, "cost": 0.01804625, "total_cost": 0.01804625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637039} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637039} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637062} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637062} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637062} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637063} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9877, "completion_tokens": 469, "total_tokens": 10346, "cost": 0.017036250000000003, "total_cost": 0.017036250000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637102} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637102} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637741} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637744} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637744} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637745} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 10769, "completion_tokens": 415, "total_tokens": 11184, "cost": 0.017611250000000002, "total_cost": 0.017611250000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637797} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637797} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637816} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637816} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637816} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637816} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9891, "completion_tokens": 368, "total_tokens": 10259, "cost": 0.016043750000000002, "total_cost": 0.016043750000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637917} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746637917} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641506} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641507} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641507} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641507} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9544, "completion_tokens": 13, "total_tokens": 9557, "cost": 0.012060000000000001, "total_cost": 0.012060000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641512} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641513} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641570} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641571} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641571} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641571} -{"event": "message_send_exception", "properties": {"exception": "Model is None and does not exist in passed completion_response. Passed completion_response=, model=None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641576} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641576} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641608} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641608} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641608} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641608} -{"event": "message_send_exception", "properties": {"exception": "Model is None and does not exist in passed completion_response. Passed completion_response=, model=None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641613} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641613} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641630} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641630} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641630} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641630} -{"event": "message_send_exception", "properties": {"exception": "Model is None and does not exist in passed completion_response. Passed completion_response=, model=None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641635} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641635} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641711} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641711} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641711} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641712} -{"event": "message_send_exception", "properties": {"exception": "Model is None and does not exist in passed completion_response. Passed completion_response=, model=None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641717} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641717} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641747} -{"event": "repo", "properties": {"num_files": 616}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641748} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641748} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641748} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 9055, "completion_tokens": 57, "total_tokens": 9112, "cost": 0.01188875, "total_cost": 0.01188875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641753} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641753} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641859} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641860} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641860} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641860} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 10879, "completion_tokens": 55, "total_tokens": 10934, "cost": 0.014148750000000002, "total_cost": 0.014148750000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641865} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746641865} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642137} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642140} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642140} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642141} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642170} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642170} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642170} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642171} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642199} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642200} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642201} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642201} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642201} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 14013, "completion_tokens": 340, "total_tokens": 14353, "cost": 0.02091625, "total_cost": 0.02091625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642240} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642240} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642274} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642274} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642274} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642274} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 12853, "completion_tokens": 3080, "total_tokens": 15933, "cost": 0.04686625, "total_cost": 0.04686625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642307} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642307} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642372} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642372} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642372} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642372} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 14020, "completion_tokens": 2279, "total_tokens": 16299, "cost": 0.040315000000000004, "total_cost": 0.040315000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642397} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642397} {"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642510} {"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642511} @@ -998,3 +511,490 @@ {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716073} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 26488, "completion_tokens": 403, "total_tokens": 26891, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716145} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716145} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721958} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721960} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721960} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721960} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721985} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722024} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722053} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 13638, "completion_tokens": 385, "total_tokens": 14023, "cost": 0.0208975, "total_cost": 0.0208975}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722068} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722095} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722098} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 17782, "completion_tokens": 1505, "total_tokens": 19287, "cost": 0.037277500000000005, "total_cost": 0.058175000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722171} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722185} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 20819, "completion_tokens": 108, "total_tokens": 20927, "cost": 0.027103750000000003, "total_cost": 0.08527875000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722191} +{"event": "command_diff", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722202} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722230} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722237} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722245} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722246} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 25435, "completion_tokens": 399, "total_tokens": 25834, "cost": 0.03578375, "total_cost": 0.12106250000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722299} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722331} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722335} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722340} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 29275, "completion_tokens": 659, "total_tokens": 29934, "cost": 0.04318375, "total_cost": 0.16424625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722360} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722369} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722370} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722382} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722382} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 21916, "completion_tokens": 479, "total_tokens": 22395, "cost": 0.032185000000000005, "total_cost": 0.19643125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722501} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722527} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 22728, "completion_tokens": 377, "total_tokens": 23105, "cost": 0.03218, "total_cost": 0.22861125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722535} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722547} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722560} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 26430, "completion_tokens": 885, "total_tokens": 27315, "cost": 0.04188750000000001, "total_cost": 0.27049875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722612} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722623} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722875} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722878} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722878} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722878} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 609, "completion_tokens": 12, "total_tokens": 621, "cost": 9.855e-05, "total_cost": 9.855e-05}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722880} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722880} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722899} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722901} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722901} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722901} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 605, "completion_tokens": 236, "total_tokens": 841, "cost": 0.00023234999999999998, "total_cost": 0.00023234999999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722904} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722904} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722934} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722937} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722937} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722937} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5661, "completion_tokens": 320, "total_tokens": 5981, "cost": 0.00104115, "total_cost": 0.00104115}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722943} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722949} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722951} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722951} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722951} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722966} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723226} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723229} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723229} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723229} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6242, "completion_tokens": 1356, "total_tokens": 7598, "cost": 0.0017499, "total_cost": 0.0017499}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723250} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723250} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723310} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723312} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723312} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723313} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6242, "completion_tokens": 1123, "total_tokens": 7365, "cost": 0.0016101, "total_cost": 0.0016101}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723368} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723368} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723389} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723392} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723392} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723392} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6242, "completion_tokens": 1255, "total_tokens": 7497, "cost": 0.0016893, "total_cost": 0.0016893}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723470} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723529} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723532} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723532} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723532} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723540} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723571} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723574} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723574} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723574} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723578} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723597} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723600} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723600} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723600} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723606} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723632} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723634} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723634} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723634} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 642, "total_tokens": 6879, "cost": 0.0013207499999999999, "total_cost": 0.0013207499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723646} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723646} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723703} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723705} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723705} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723705} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 1418, "total_tokens": 7655, "cost": 0.00178635, "total_cost": 0.00178635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723742} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723947} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723950} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723950} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723950} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 880, "total_tokens": 7117, "cost": 0.0014635499999999999, "total_cost": 0.0014635499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723974} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723974} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724025} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724027} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724027} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724027} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 1282, "total_tokens": 7519, "cost": 0.0017047499999999999, "total_cost": 0.0017047499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724047} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724047} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724236} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724238} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724238} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724238} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 629, "total_tokens": 6866, "cost": 0.0013129499999999998, "total_cost": 0.0013129499999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724249} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724249} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724301} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724303} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724303} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724303} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 718, "total_tokens": 6955, "cost": 0.00136635, "total_cost": 0.00136635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724317} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724317} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724534} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724536} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724536} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724536} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724588} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724592} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724594} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724594} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724594} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 765, "total_tokens": 7002, "cost": 0.00139455, "total_cost": 0.00139455}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724615} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724615} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724781} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724784} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724784} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724784} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 1394, "total_tokens": 7631, "cost": 0.00177195, "total_cost": 0.00177195}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724838} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724838} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724896} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724899} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724899} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724899} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 922, "total_tokens": 7159, "cost": 0.00148875, "total_cost": 0.00148875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724936} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724936} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725372} +{"event": "model warning", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725375} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725377} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725377} +{"event": "cli session", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725378} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725379} +{"event": "message_send", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "diff", "prompt_tokens": 3492, "completion_tokens": 271, "total_tokens": 3763, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725391} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725491} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725491} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725501} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725507} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725509} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725509} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725509} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725533} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725534} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725536} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725536} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725536} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725541} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725551} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725553} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725553} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725553} +{"event": "message_send", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "whole", "prompt_tokens": 1935, "completion_tokens": 51, "total_tokens": 1986, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725558} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725558} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725561} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725563} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725563} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725563} +{"event": "message_send", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "whole", "prompt_tokens": 1943, "completion_tokens": 15, "total_tokens": 1958, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725573} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725573} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725636} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725642} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725644} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725644} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725644} +{"event": "message_send", "properties": {"main_model": "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput", "weak_model": "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput", "editor_model": "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput", "edit_format": "whole", "prompt_tokens": 1951, "completion_tokens": 43, "total_tokens": 1994, "cost": 0.000416, "total_cost": 0.000416}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725648} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725648} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725775} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725777} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725777} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725777} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5707, "completion_tokens": 195, "total_tokens": 5902, "cost": 0.0009730499999999999, "total_cost": 0.0009730499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725786} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725786} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725789} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725791} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725791} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725791} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5707, "completion_tokens": 581, "total_tokens": 6288, "cost": 0.0012046499999999998, "total_cost": 0.0012046499999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725820} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725820} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725846} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725848} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725848} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725848} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725860} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725862} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725864} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725864} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725864} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5707, "completion_tokens": 1253, "total_tokens": 6960, "cost": 0.0016078499999999999, "total_cost": 0.0016078499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725927} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725927} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726382} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6865, "completion_tokens": 82, "total_tokens": 6947, "cost": 0.00940125, "total_cost": 0.00940125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726385} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726426} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726426} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726482} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726490} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} +{"event": "message_send_exception", "properties": {"exception": "Only one live display may be active at once"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726502} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726502} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6866, "completion_tokens": 199, "total_tokens": 7065, "cost": 0.0105725, "total_cost": 0.0105725}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726540} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726540} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726547} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726548} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726548} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726548} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726553} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726913} +{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726914} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726914} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726914} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726926} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726931} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726951} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726959} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726990} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726990} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 14008, "completion_tokens": 3802, "total_tokens": 17810, "cost": 0.05553000000000001, "total_cost": 0.05553000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727053} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727062} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 19187, "completion_tokens": 3743, "total_tokens": 22930, "cost": 0.06141375, "total_cost": 0.11694375000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727102} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727129} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727152} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 38503, "completion_tokens": 672, "total_tokens": 39175, "cost": 0.05484875, "total_cost": 0.17179250000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727163} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727208} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727226} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727229} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727256} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 31466, "completion_tokens": 273, "total_tokens": 31739, "cost": 0.04206250000000001, "total_cost": 0.21385500000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727262} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727440} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727511} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 31733, "completion_tokens": 312, "total_tokens": 32045, "cost": 0.04278625, "total_cost": 0.25664125000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727535} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746728999} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746728999} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729004} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729006} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729006} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729006} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729012} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729014} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729054} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 13502, "completion_tokens": 156, "total_tokens": 13658, "cost": 0.0184375, "total_cost": 0.0184375}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729065} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729303} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 28623, "completion_tokens": 246, "total_tokens": 28869, "cost": 0.03823875, "total_cost": 0.03823875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730236} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730236} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730237} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730241} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730406} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730407} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730407} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730407} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730411} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730413} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730417} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730429} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 18827, "completion_tokens": 786, "total_tokens": 19613, "cost": 0.031393750000000005, "total_cost": 0.031393750000000005}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730443} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730453} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730453} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730461} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730545} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730555} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730665} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730665} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730791} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 31357, "completion_tokens": 990, "total_tokens": 32347, "cost": 0.04909625, "total_cost": 0.04909625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730823} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 5588, "completion_tokens": 184, "total_tokens": 5772, "cost": 0.008825000000000001, "total_cost": 0.008825000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730865} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730865} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730899} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730913} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 32702, "completion_tokens": 583, "total_tokens": 33285, "cost": 0.046707500000000006, "total_cost": 0.09580375000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730995} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731013} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731017} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731050} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731067} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731084} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731109} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731138} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731144} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731153} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731154} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731154} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731154} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731156} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731176} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731177} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731177} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731177} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731179} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731206} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731212} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731275} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731277} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731289} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731289} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731289} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731294} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731300} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731303} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731311} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731314} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731325} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731360} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731360} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731487} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731498} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731501} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731502} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731502} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 8223, "completion_tokens": 2842, "total_tokens": 11065, "cost": 0.038698750000000004, "total_cost": 0.038698750000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731628} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731706} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 10957, "completion_tokens": 1920, "total_tokens": 12877, "cost": 0.03289625, "total_cost": 0.071595}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731749} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731814} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731821} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731839} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731875} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731875} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 8249, "completion_tokens": 2823, "total_tokens": 11072, "cost": 0.03854125, "total_cost": 0.03854125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731951} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731955} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 11032, "completion_tokens": 1587, "total_tokens": 12619, "cost": 0.029660000000000006, "total_cost": 0.06820125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732083} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732115} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732120} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732122} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732190} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732249} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732249} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732293} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732352} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 13572, "completion_tokens": 1866, "total_tokens": 15438, "cost": 0.035625000000000004, "total_cost": 0.10382625000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732387} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732489} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732491} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732493} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732498} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 5588, "completion_tokens": 340, "total_tokens": 5928, "cost": 0.010385000000000002, "total_cost": 0.010385000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732503} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732510} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732512} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732514} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732518} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "diff", "prompt_tokens": 9935, "completion_tokens": 5219, "total_tokens": 15154, "cost": 0.30811000000000005, "total_cost": 0.41193625000000006}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732604} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 5588, "completion_tokens": 227, "total_tokens": 5815, "cost": 0.009255000000000001, "total_cost": 0.009255000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732807} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732807} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732840} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732850} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732852} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732852} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732852} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732857} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732859} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732861} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732861} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732861} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732864} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732906} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732907} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732907} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732910} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736688} +{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736691} +{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736755} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736759} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736762} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736762} +{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736762} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736765} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736769} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736771} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736771} +{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736771} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736779} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "diff", "prompt_tokens": 7487, "completion_tokens": 400, "total_tokens": 7887, "cost": 0.00136305, "total_cost": 0.00136305}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736790} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736795} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736798} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736864} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737186} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 30117, "completion_tokens": 361, "total_tokens": 30478, "cost": 0.04125625000000001, "total_cost": 0.04125625000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737284} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737284} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index 436f0f8bc..e2d8ac531 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,12 +264,13 @@ tr:hover { background-color: #f5f5f5; } - - - - - - + + + + + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25668,48355.7%
gemini/gemini-2.5-pro-preview-03-25442,01936.9%
o352,6664.4%
gemini/gemini-2.5-pro-preview-05-0618,6541.6%
openrouter/REDACTED15,5871.3%
gemini/REDACTED1,9890.2%
gemini/gemini-2.5-pro-preview-05-06575,43340.7%
gemini/gemini-2.5-pro-exp-03-25413,81529.3%
gemini/gemini-2.5-pro-preview-03-25263,26118.6%
openrouter/REDACTED135,1099.6%
o315,1541.1%
together_ai/REDACTED7,7070.5%
together_ai/Qwen/Qwen3-235B-A22B-fp8-tput1,9940.1%
{: .note :} From 81721259315ec2a9355e8378dc1f16bb86c69f96 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 13:52:37 -0700 Subject: [PATCH 243/459] copy --- aider/website/_posts/2025-05-08-qwen3.md | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index 21716c725..474ee5852 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -25,6 +25,7 @@ used after the results table. {: .note } This article is being updated as new results become available. +Also, some results were submitted by aider users and have not been verified.

Qwen3 results on the aider polyglot benchmark

From 4709a539c609a71082ee677ab43da1331f3a4f9b Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:01:28 -0700 Subject: [PATCH 244/459] fix: Preserve original read-only files when cloning Commands --- aider/commands.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/commands.py b/aider/commands.py index 29f20a976..7a7a738c3 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -47,6 +47,7 @@ class Commands: parser=self.parser, verbose=self.verbose, editor=self.editor, + original_read_only_fnames=self.original_read_only_fnames, ) def __init__( From 7a3805d39f15d6d453e6f508aaf868f9539f8d22 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:02:46 -0700 Subject: [PATCH 245/459] test: add tests for /reset and /drop with cloned coder --- tests/basic/test_commands.py | 84 ++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/tests/basic/test_commands.py b/tests/basic/test_commands.py index 7ded4ca3a..2d15e02f5 100644 --- a/tests/basic/test_commands.py +++ b/tests/basic/test_commands.py @@ -2105,3 +2105,87 @@ class TestCommands(TestCase): mock_tool_error.assert_any_call( "Command '/model gpt-4' is only supported in interactive mode, skipping." ) + + def test_reset_after_coder_clone_preserves_original_read_only_files(self): + with GitTemporaryDirectory() as repo_dir_path: + repo_dir = str(repo_dir_path) + io = InputOutput(pretty=False, fancy_input=False, yes=True) + + orig_ro_path = Path(repo_dir) / "orig_ro.txt" + orig_ro_path.write_text("original read only") + + editable_path = Path(repo_dir) / "editable.txt" + editable_path.write_text("editable content") + + other_ro_path = Path(repo_dir) / "other_ro.txt" + other_ro_path.write_text("other read only") + + original_read_only_fnames_set = {str(orig_ro_path)} + + # Create the initial Coder + orig_coder = Coder.create(main_model=self.GPT35, io=io, fnames=[], repo=None) + orig_coder.root = repo_dir # Set root for path operations + + # Replace its commands object with one that has the original_read_only_fnames + orig_coder.commands = Commands( + io, orig_coder, original_read_only_fnames=list(original_read_only_fnames_set) + ) + orig_coder.commands.coder = orig_coder + + # Populate coder's file sets + orig_coder.abs_read_only_fnames.add(str(orig_ro_path)) + orig_coder.abs_fnames.add(str(editable_path)) + orig_coder.abs_read_only_fnames.add(str(other_ro_path)) + + # Simulate SwitchCoder by creating a new coder from the original one + new_coder = Coder.create(from_coder=orig_coder) + new_commands = new_coder.commands + + # Perform /reset + new_commands.cmd_reset("") + + # Assertions for /reset + self.assertEqual(len(new_coder.abs_fnames), 0) + self.assertEqual(len(new_coder.abs_read_only_fnames), 1) + self.assertIn(str(orig_ro_path), new_coder.abs_read_only_fnames) + self.assertEqual(len(new_coder.done_messages), 0) + self.assertEqual(len(new_coder.cur_messages), 0) + + def test_drop_bare_after_coder_clone_preserves_original_read_only_files(self): + with GitTemporaryDirectory() as repo_dir_path: + repo_dir = str(repo_dir_path) + io = InputOutput(pretty=False, fancy_input=False, yes=True) + + orig_ro_path = Path(repo_dir) / "orig_ro.txt" + orig_ro_path.write_text("original read only") + + editable_path = Path(repo_dir) / "editable.txt" + editable_path.write_text("editable content") + + other_ro_path = Path(repo_dir) / "other_ro.txt" + other_ro_path.write_text("other read only") + + original_read_only_fnames_set = {str(orig_ro_path)} + + orig_coder = Coder.create(main_model=self.GPT35, io=io, fnames=[], repo=None) + orig_coder.root = repo_dir + orig_coder.commands = Commands( + io, orig_coder, original_read_only_fnames=list(original_read_only_fnames_set) + ) + orig_coder.commands.coder = orig_coder + + orig_coder.abs_read_only_fnames.add(str(orig_ro_path)) + orig_coder.abs_fnames.add(str(editable_path)) + orig_coder.abs_read_only_fnames.add(str(other_ro_path)) + orig_coder.done_messages = [{"role": "user", "content": "d1"}] + orig_coder.cur_messages = [{"role": "user", "content": "c1"}] + + new_coder = Coder.create(from_coder=orig_coder) + new_commands = new_coder.commands + new_commands.cmd_drop("") + + self.assertEqual(len(new_coder.abs_fnames), 0) + self.assertEqual(len(new_coder.abs_read_only_fnames), 1) + self.assertIn(str(orig_ro_path), new_coder.abs_read_only_fnames) + self.assertEqual(new_coder.done_messages, [{"role": "user", "content": "d1"}]) + self.assertEqual(new_coder.cur_messages, [{"role": "user", "content": "c1"}]) From 8f0fa6684dd60e412362e99529dd652053b4ba9c Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:08:06 -0700 Subject: [PATCH 246/459] feat: implement Knight Rider style spinner animation --- aider/utils.py | 62 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 8ab8184a3..3ec6701e9 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -1,4 +1,3 @@ -import itertools import os import platform import oslex @@ -251,29 +250,34 @@ def run_install(cmd): class Spinner: - unicode_spinner = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] - ascii_spinner = ["|", "/", "-", "\\"] - def __init__(self, text): self.text = text self.start_time = time.time() self.last_update = 0 self.visible = False self.is_tty = sys.stdout.isatty() - self.tested = False - def test_charset(self): - if self.tested: - return - self.tested = True - # Try unicode first, fall back to ascii if needed - try: - # Test if we can print unicode characters - print(self.unicode_spinner[0], end="", flush=True) - print("\r", end="", flush=True) - self.spinner_chars = itertools.cycle(self.unicode_spinner) - except UnicodeEncodeError: - self.spinner_chars = itertools.cycle(self.ascii_spinner) + self.scanner_width = 7 # Width of the scanning area (e.g., 7 for "[---■--]") + self.scanner_pos = 0 + self.scanner_dir = 1 if self.scanner_width > 1 else 0 # Direction of scanner movement + + # Attempt to use Unicode characters for the scanner, fallback to ASCII + self.scanner_char = "#" # ASCII fallback + self.trail_char = "-" # ASCII fallback + if self.is_tty: + try: + # Test print Unicode chars and erase them to check encoding support + sys.stdout.write("■─") + sys.stdout.flush() + sys.stdout.write("\b\b \b\b") # Backspace, write spaces, backspace + sys.stdout.flush() + self.scanner_char = "■" # Unicode + self.trail_char = "─" # Unicode + except UnicodeEncodeError: + pass # Stick to ASCII fallbacks + except Exception: # Catch other potential IO errors on strange terminals + pass + self.animation_len = self.scanner_width + 2 # For brackets like "[]" def step(self): if not self.is_tty: @@ -291,12 +295,30 @@ class Spinner: if not self.visible: return - self.test_charset() - print(f"\r{self.text} {next(self.spinner_chars)}\r{self.text} ", end="", flush=True) + frame = [self.trail_char] * self.scanner_width + # Ensure scanner_pos is within bounds for frame assignment + current_pos_in_frame = max(0, min(self.scanner_pos, self.scanner_width - 1)) + if self.scanner_width > 0: # Only place char if width is positive + frame[current_pos_in_frame] = self.scanner_char + + animation_segment = f"[{''.join(frame)}]" + print(f"\r{self.text} {animation_segment}", end="", flush=True) + + # Update scanner position for the next frame + if self.scanner_width > 1: + self.scanner_pos += self.scanner_dir + if self.scanner_pos >= self.scanner_width - 1: # Reached or passed the end + self.scanner_pos = self.scanner_width - 1 # Pin to end + self.scanner_dir = -1 # Reverse direction + elif self.scanner_pos <= 0: # Reached or passed the beginning + self.scanner_pos = 0 # Pin to start + self.scanner_dir = 1 # Reverse direction def end(self): if self.visible and self.is_tty: - print("\r" + " " * (len(self.text) + 3)) + clear_len = len(self.text) + 1 + self.animation_len # text + space + animation segment + print("\r" + " " * clear_len + "\r", end="", flush=True) # Clear line and reset cursor + self.visible = False def find_common_root(abs_fnames): From 20faadcbd976a04102265e6590df4b5f031ca398 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:08:11 -0700 Subject: [PATCH 247/459] style: Apply linter fixes --- aider/utils.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 3ec6701e9..214d6c310 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -1,12 +1,13 @@ import os import platform -import oslex import subprocess import sys import tempfile import time from pathlib import Path +import oslex + from aider.dump import dump # noqa: F401 IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".webp", ".pdf"} @@ -259,7 +260,7 @@ class Spinner: self.scanner_width = 7 # Width of the scanning area (e.g., 7 for "[---■--]") self.scanner_pos = 0 - self.scanner_dir = 1 if self.scanner_width > 1 else 0 # Direction of scanner movement + self.scanner_dir = 1 if self.scanner_width > 1 else 0 # Direction of scanner movement # Attempt to use Unicode characters for the scanner, fallback to ASCII self.scanner_char = "#" # ASCII fallback @@ -269,13 +270,13 @@ class Spinner: # Test print Unicode chars and erase them to check encoding support sys.stdout.write("■─") sys.stdout.flush() - sys.stdout.write("\b\b \b\b") # Backspace, write spaces, backspace + sys.stdout.write("\b\b \b\b") # Backspace, write spaces, backspace sys.stdout.flush() self.scanner_char = "■" # Unicode self.trail_char = "─" # Unicode except UnicodeEncodeError: pass # Stick to ASCII fallbacks - except Exception: # Catch other potential IO errors on strange terminals + except Exception: # Catch other potential IO errors on strange terminals pass self.animation_len = self.scanner_width + 2 # For brackets like "[]" @@ -298,7 +299,7 @@ class Spinner: frame = [self.trail_char] * self.scanner_width # Ensure scanner_pos is within bounds for frame assignment current_pos_in_frame = max(0, min(self.scanner_pos, self.scanner_width - 1)) - if self.scanner_width > 0: # Only place char if width is positive + if self.scanner_width > 0: # Only place char if width is positive frame[current_pos_in_frame] = self.scanner_char animation_segment = f"[{''.join(frame)}]" @@ -308,7 +309,7 @@ class Spinner: if self.scanner_width > 1: self.scanner_pos += self.scanner_dir if self.scanner_pos >= self.scanner_width - 1: # Reached or passed the end - self.scanner_pos = self.scanner_width - 1 # Pin to end + self.scanner_pos = self.scanner_width - 1 # Pin to end self.scanner_dir = -1 # Reverse direction elif self.scanner_pos <= 0: # Reached or passed the beginning self.scanner_pos = 0 # Pin to start @@ -316,8 +317,8 @@ class Spinner: def end(self): if self.visible and self.is_tty: - clear_len = len(self.text) + 1 + self.animation_len # text + space + animation segment - print("\r" + " " * clear_len + "\r", end="", flush=True) # Clear line and reset cursor + clear_len = len(self.text) + 1 + self.animation_len # text + space + animation segment + print("\r" + " " * clear_len + "\r", end="", flush=True) # Clear line and reset cursor self.visible = False From 62dc55dd77dc204b34da68139555aca713d6d7c5 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:09:34 -0700 Subject: [PATCH 248/459] feat: Position cursor on scanner char in spinner animation --- aider/utils.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 214d6c310..68b27931f 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -296,14 +296,35 @@ class Spinner: if not self.visible: return - frame = [self.trail_char] * self.scanner_width + frame_chars = [self.trail_char] * self.scanner_width # Ensure scanner_pos is within bounds for frame assignment current_pos_in_frame = max(0, min(self.scanner_pos, self.scanner_width - 1)) - if self.scanner_width > 0: # Only place char if width is positive - frame[current_pos_in_frame] = self.scanner_char - animation_segment = f"[{''.join(frame)}]" - print(f"\r{self.text} {animation_segment}", end="", flush=True) + if self.scanner_width > 0: # Only place char if width is positive + frame_chars[current_pos_in_frame] = self.scanner_char + + animation_content = "".join(frame_chars) # Content inside brackets, e.g., "---■--" + animation_segment = f"[{animation_content}]" # Full animation part, e.g., "[---■--]" + + # Print the entire line to display it + full_line_output = f"\r{self.text} {animation_segment}" + sys.stdout.write(full_line_output) + + # Now, calculate backspaces to position cursor on the scanner_char + # Only if scanner_char was actually placed (i.e., scanner_width > 0) + if self.scanner_width > 0: + # Number of characters in animation_content *after* the scanner_char + # (self.scanner_width - 1) is the last index of animation_content. + # So, (self.scanner_width - 1) - current_pos_in_frame gives count of chars after. + chars_in_content_after_scanner = (self.scanner_width - 1) - current_pos_in_frame + + # We also need to backspace over the closing bracket ']' + num_backspaces = chars_in_content_after_scanner + 1 + + num_backspaces = max(0, num_backspaces) # Ensure not negative + sys.stdout.write('\b' * num_backspaces) + + sys.stdout.flush() # Flush after all writes for this frame # Update scanner position for the next frame if self.scanner_width > 1: @@ -314,7 +335,6 @@ class Spinner: elif self.scanner_pos <= 0: # Reached or passed the beginning self.scanner_pos = 0 # Pin to start self.scanner_dir = 1 # Reverse direction - def end(self): if self.visible and self.is_tty: clear_len = len(self.text) + 1 + self.animation_len # text + space + animation segment From 15317a9f4bc1b44cc658a9b769ec28c0c5ef6dff Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:09:38 -0700 Subject: [PATCH 249/459] style: Run linter and apply fixes --- aider/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 68b27931f..f72528019 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -322,7 +322,7 @@ class Spinner: num_backspaces = chars_in_content_after_scanner + 1 num_backspaces = max(0, num_backspaces) # Ensure not negative - sys.stdout.write('\b' * num_backspaces) + sys.stdout.write("\b" * num_backspaces) sys.stdout.flush() # Flush after all writes for this frame @@ -335,6 +335,7 @@ class Spinner: elif self.scanner_pos <= 0: # Reached or passed the beginning self.scanner_pos = 0 # Pin to start self.scanner_dir = 1 # Reverse direction + def end(self): if self.visible and self.is_tty: clear_len = len(self.text) + 1 + self.animation_len # text + space + animation segment From e1ab9cc0ab813766cf130a4333c960f238db8cb5 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 14:19:26 -0700 Subject: [PATCH 250/459] fix: Correct spinner erasure and update animation --- aider/mdstream.py | 2 +- aider/utils.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aider/mdstream.py b/aider/mdstream.py index ba80849ad..8820d7261 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -128,7 +128,7 @@ class MarkdownStream: def _spin(self): """Background thread that keeps the spinner moving until stopped.""" while not self._spinner_stop_event.is_set(): - time.sleep(0.1) + time.sleep(0.15) self.spinner.step() self.spinner.end() diff --git a/aider/utils.py b/aider/utils.py index f72528019..ccd5fc334 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -272,7 +272,7 @@ class Spinner: sys.stdout.flush() sys.stdout.write("\b\b \b\b") # Backspace, write spaces, backspace sys.stdout.flush() - self.scanner_char = "■" # Unicode + self.scanner_char = "≡" # Unicode self.trail_char = "─" # Unicode except UnicodeEncodeError: pass # Stick to ASCII fallbacks @@ -321,7 +321,7 @@ class Spinner: # We also need to backspace over the closing bracket ']' num_backspaces = chars_in_content_after_scanner + 1 - num_backspaces = max(0, num_backspaces) # Ensure not negative + num_backspaces = max(0, num_backspaces) + 1 # Ensure not negative sys.stdout.write("\b" * num_backspaces) sys.stdout.flush() # Flush after all writes for this frame @@ -433,8 +433,8 @@ def printable_shell_command(cmd_list): def main(): spinner = Spinner("Running spinner...") - for _ in range(40): # 40 steps * 0.25 seconds = 10 seconds - time.sleep(0.25) + for _ in range(300): + time.sleep(0.15) spinner.step() spinner.end() From c3d4fdb4c1d1d31c45f68d229ec2686fb0498a43 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:25:14 -0700 Subject: [PATCH 251/459] fix: Preserve original read-only files across symlinks --- aider/commands.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/aider/commands.py b/aider/commands.py index 7a7a738c3..3dd370e51 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -81,8 +81,20 @@ class Commands: self.help = None self.editor = editor - # Store the original read-only filenames provided via args.read - self.original_read_only_fnames = set(original_read_only_fnames or []) + # Store the original read-only filenames provided via args.read. + # Keep both the raw path as given and the canonical realpath so we + # can match them later even when symlinks (eg /var ↔ /private/var) + # are involved. + self.original_read_only_fnames = set() + for fname in original_read_only_fnames or []: + # As provided + self.original_read_only_fnames.add(str(fname)) + # Canonical path (best-effort) + try: + self.original_read_only_fnames.add(os.path.realpath(fname)) + except Exception: + # Ignore paths that cannot be resolved + pass def cmd_model(self, args): "Switch the Main Model to a new LLM" @@ -411,16 +423,23 @@ class Commands: def _drop_all_files(self): self.coder.abs_fnames = set() + # Helper to compare two paths while ignoring symlinks/resolution. + def _paths_match(p1, p2): + try: + return os.path.samefile(p1, p2) + except (FileNotFoundError, OSError): + return os.path.normpath(p1) == os.path.normpath(p2) + # When dropping all files, keep those that were originally provided via args.read if self.original_read_only_fnames: - # Keep only the original read-only files to_keep = set() for abs_fname in self.coder.abs_read_only_fnames: rel_fname = self.coder.get_rel_fname(abs_fname) - if ( - abs_fname in self.original_read_only_fnames - or rel_fname in self.original_read_only_fnames - ): + keep = any( + _paths_match(abs_fname, orig) or rel_fname == orig + for orig in self.original_read_only_fnames + ) + if keep: to_keep.add(abs_fname) self.coder.abs_read_only_fnames = to_keep else: From 2ebb2103b8b8a5fea03948ac09a5a27af082e05a Mon Sep 17 00:00:00 2001 From: MDW Date: Wed, 16 Apr 2025 16:52:12 +0200 Subject: [PATCH 252/459] ci: add pre-commit.yml for GitHub Actions This commit adds a new GitHub Actions workflow configuration file (`pre-commit.yml`) to automate the execution of pre-commit hooks on pull requests and pushes. The workflow includes steps to install dependencies, cache pre-commit hooks, run the hooks, convert logs to Checkstyle format, save the cache, and upload logs as artifacts. This setup ensures that code quality checks are enforced consistently across the repository. --- .github/workflows/pre-commit.yml | 48 ++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/workflows/pre-commit.yml diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 000000000..5de58d77d --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,48 @@ +--- +name: pre-commit +on: + pull_request: + push: + workflow_dispatch: +jobs: + pre-commit: + runs-on: ubuntu-latest + env: + RAW_LOG: pre-commit.log + CS_XML: pre-commit.xml + steps: + - run: sudo apt-get update && sudo apt-get install cppcheck uncrustify + if: false + - uses: actions/checkout@v4 + - run: python -m pip install pre-commit + - uses: actions/cache/restore@v4 + with: + path: ~/.cache/pre-commit/ + key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }} + - name: Run pre-commit hooks + env: + SKIP: no-commit-to-branch + run: | + set -o pipefail + pre-commit gc + pre-commit run --show-diff-on-failure --color=always --all-files | tee ${RAW_LOG} + - name: Convert Raw Log to Checkstyle format (launch action) + uses: mdeweerd/logToCheckStyle@v2025.1.1 + if: ${{ failure() }} + with: + in: ${{ env.RAW_LOG }} + # out: ${{ env.CS_XML }} + - uses: actions/cache/save@v4 + if: ${{ ! cancelled() }} + with: + path: ~/.cache/pre-commit/ + key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }} + - name: Provide log as artifact + uses: actions/upload-artifact@v4 + if: ${{ ! cancelled() }} + with: + name: precommit-logs + path: | + ${{ env.RAW_LOG }} + ${{ env.CS_XML }} + retention-days: 2 From d127d456694cb10adc6deaab6194d34c166fe835 Mon Sep 17 00:00:00 2001 From: MDW Date: Wed, 16 Apr 2025 17:36:09 +0200 Subject: [PATCH 253/459] chore: update codespell skip patterns Update the `skip` patterns in the `pyproject.toml` file to exclude `tests/fixtures/*` and `aider/website/*`. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f7b25eee8..928c5fee2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,5 +48,5 @@ build-backend = "setuptools.build_meta" write_to = "aider/_version.py" [tool.codespell] -skip = "*.svg,Gemfile.lock" +skip = "*.svg,Gemfile.lock,tests/fixtures/*,aider/website/*" write-changes = true From a2ecc5883b90c8b22a957891d57b076fc1483a29 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:28:11 -0700 Subject: [PATCH 254/459] feat: add shell completion generation using shtab --- aider/args.py | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/aider/args.py b/aider/args.py index 4e3fcb4c0..98bc01b94 100644 --- a/aider/args.py +++ b/aider/args.py @@ -6,6 +6,7 @@ import sys from pathlib import Path import configargparse +import shtab from aider import __version__ from aider.args_formatter import ( @@ -858,16 +859,35 @@ def get_sample_dotenv(): def main(): - arg = sys.argv[1] if len(sys.argv[1:]) else None - - if arg == "md": - print(get_md_help()) - elif arg == "dotenv": - print(get_sample_dotenv()) + if len(sys.argv) > 1: + command = sys.argv[1] else: + command = "yaml" # Default to yaml if no command is given + + if command == "md": + print(get_md_help()) + elif command == "dotenv": + print(get_sample_dotenv()) + elif command == "yaml": + print(get_sample_yaml()) + elif command == "completion": + if len(sys.argv) > 2: + shell = sys.argv[2] + if shell not in shtab.SUPPORTED_SHELLS: + print(f"Error: Unsupported shell '{shell}'.", file=sys.stderr) + print(f"Supported shells are: {', '.join(shtab.SUPPORTED_SHELLS)}", file=sys.stderr) + sys.exit(1) + parser = get_parser([], None) + print(shtab.complete(parser, shell=shell, prog="aider")) + else: + print("Error: Please specify a shell for completion.", file=sys.stderr) + print(f"Usage: python {sys.argv[0]} completion ", file=sys.stderr) + print(f"Supported shells are: {', '.join(shtab.SUPPORTED_SHELLS)}", file=sys.stderr) + sys.exit(1) + else: + # Default to YAML for any other unrecognized argument, or if 'yaml' was explicitly passed print(get_sample_yaml()) if __name__ == "__main__": - status = main() - sys.exit(status) + main() From 09acfc8147bf210d9206ebe40186d2a3b94c38a2 Mon Sep 17 00:00:00 2001 From: MDW Date: Wed, 16 Apr 2025 17:40:01 +0200 Subject: [PATCH 255/459] style(pre-commit): apply python style from pre-commit hooks --- aider/coders/editblock_fenced_coder.py | 1 + aider/coders/help_coder.py | 1 + aider/linter.py | 3 ++- tests/basic/test_watch.py | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/aider/coders/editblock_fenced_coder.py b/aider/coders/editblock_fenced_coder.py index 80e5036ea..cd09e27c5 100644 --- a/aider/coders/editblock_fenced_coder.py +++ b/aider/coders/editblock_fenced_coder.py @@ -5,5 +5,6 @@ from .editblock_fenced_prompts import EditBlockFencedPrompts class EditBlockFencedCoder(EditBlockCoder): """A coder that uses fenced search/replace blocks for code modifications.""" + edit_format = "diff-fenced" gpt_prompts = EditBlockFencedPrompts() diff --git a/aider/coders/help_coder.py b/aider/coders/help_coder.py index fcb1e6aa1..311805af7 100644 --- a/aider/coders/help_coder.py +++ b/aider/coders/help_coder.py @@ -5,6 +5,7 @@ from .help_prompts import HelpPrompts class HelpCoder(Coder): """Interactive help and documentation about aider.""" + edit_format = "help" gpt_prompts = HelpPrompts() diff --git a/aider/linter.py b/aider/linter.py index 51ed40b70..9c980366d 100644 --- a/aider/linter.py +++ b/aider/linter.py @@ -1,10 +1,11 @@ import os +import oslex import re +import shlex import subprocess import sys import traceback import warnings -import oslex from dataclasses import dataclass from pathlib import Path diff --git a/tests/basic/test_watch.py b/tests/basic/test_watch.py index 524f80e08..16e4f8206 100644 --- a/tests/basic/test_watch.py +++ b/tests/basic/test_watch.py @@ -155,7 +155,7 @@ def test_ai_comment_pattern(): assert ( question_js_has_bang == "?" ), "Expected at least one bang (!) comment in watch_question.js fixture" - + # Test Lisp fixture lisp_path = fixtures_dir / "watch.lisp" lisp_lines, lisp_comments, lisp_has_bang = watcher.get_ai_comments(str(lisp_path)) From 30097ab85972242f2fe8f3234121a6440d542b98 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:29:01 -0700 Subject: [PATCH 256/459] fix: Exit with status code from main() --- aider/args.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aider/args.py b/aider/args.py index 98bc01b94..4e714a624 100644 --- a/aider/args.py +++ b/aider/args.py @@ -890,4 +890,5 @@ def main(): if __name__ == "__main__": - main() + status = main() + sys.exit(status) From 40a5a88d56c2728f693c0ef25e991699b9d74270 Mon Sep 17 00:00:00 2001 From: MDW Date: Wed, 16 Apr 2025 18:29:07 +0200 Subject: [PATCH 257/459] style: remove or ignore unused imports The following files had unused imports removed: - `scripts/30k-image.py` - `scripts/dl_icons.py` - `scripts/redact-cast.py` --- benchmark/refactor_tools.py | 2 +- scripts/30k-image.py | 1 - scripts/dl_icons.py | 1 - scripts/redact-cast.py | 2 -- 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/benchmark/refactor_tools.py b/benchmark/refactor_tools.py index 117770a67..03812b0c1 100755 --- a/benchmark/refactor_tools.py +++ b/benchmark/refactor_tools.py @@ -132,7 +132,7 @@ def find_non_self_methods(path): with open(filename, "r") as file: try: node = ast.parse(file.read(), filename=filename) - except: + except: # noqa: E722 pass checker = SelfUsageChecker() checker.visit(node) diff --git a/scripts/30k-image.py b/scripts/30k-image.py index 9a62206e4..4921b3c20 100644 --- a/scripts/30k-image.py +++ b/scripts/30k-image.py @@ -7,7 +7,6 @@ This creates a shareable social media graphic with confetti animation. import argparse import base64 import math -import os import random from pathlib import Path diff --git a/scripts/dl_icons.py b/scripts/dl_icons.py index 8240ca641..7d878c907 100644 --- a/scripts/dl_icons.py +++ b/scripts/dl_icons.py @@ -3,7 +3,6 @@ Download Material Design Icons SVGs used in the README and save to local assets. """ -import os from pathlib import Path import requests diff --git a/scripts/redact-cast.py b/scripts/redact-cast.py index 91f230e87..c7a1e4ea8 100755 --- a/scripts/redact-cast.py +++ b/scripts/redact-cast.py @@ -1,7 +1,5 @@ #!/usr/bin/env python3 import json -import os -import re import sys import pyte From 1f6f48086438f747b7b1fcc5a86b882e148a04e6 Mon Sep 17 00:00:00 2001 From: MDW Date: Wed, 16 Apr 2025 18:32:50 +0200 Subject: [PATCH 258/459] style(scripts): add flake8 noqa directive to 30k-image.py This commit adds a flake8 directive to disable the E501 line length check for the 30k-image.py script. --- scripts/30k-image.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/30k-image.py b/scripts/30k-image.py index 4921b3c20..29924d424 100644 --- a/scripts/30k-image.py +++ b/scripts/30k-image.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +# flake8: noqa: E501 """ Generate a celebratory SVG image for Aider reaching 30,000 GitHub stars. This creates a shareable social media graphic with confetti animation. From 217b45ae88ef65f8e7ab914b42b67a45a1b33530 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:29:40 -0700 Subject: [PATCH 259/459] fix: Set parser.prog for shtab completion compatibility --- aider/args.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aider/args.py b/aider/args.py index 4e714a624..cd6e4363d 100644 --- a/aider/args.py +++ b/aider/args.py @@ -878,7 +878,8 @@ def main(): print(f"Supported shells are: {', '.join(shtab.SUPPORTED_SHELLS)}", file=sys.stderr) sys.exit(1) parser = get_parser([], None) - print(shtab.complete(parser, shell=shell, prog="aider")) + parser.prog = "aider" # Set the program name on the parser + print(shtab.complete(parser, shell=shell)) else: print("Error: Please specify a shell for completion.", file=sys.stderr) print(f"Usage: python {sys.argv[0]} completion ", file=sys.stderr) From 1d5c3c3a2bd3656c45e5737cb7795f6c81b38c95 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 14:30:27 -0700 Subject: [PATCH 260/459] add shtab --- requirements.txt | 4 ++++ requirements/common-constraints.txt | 8 +++++--- requirements/requirements-browser.txt | 2 +- requirements/requirements-dev.txt | 4 ++-- requirements/requirements.in | 1 + 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/requirements.txt b/requirements.txt index f3c08d722..5fcad0a8b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -414,6 +414,10 @@ scipy==1.13.1 # via # -c requirements/common-constraints.txt # -r requirements/requirements.in +shtab==1.7.2 + # via + # -c requirements/common-constraints.txt + # -r requirements/requirements.in six==1.17.0 # via # -c requirements/common-constraints.txt diff --git a/requirements/common-constraints.txt b/requirements/common-constraints.txt index e23b6c23a..3406f7f40 100644 --- a/requirements/common-constraints.txt +++ b/requirements/common-constraints.txt @@ -249,7 +249,7 @@ markupsafe==3.0.2 # via jinja2 marshmallow==3.26.1 # via dataclasses-json -matplotlib==3.10.1 +matplotlib==3.10.3 # via -r requirements/requirements-dev.in mccabe==0.7.0 # via flake8 @@ -269,7 +269,7 @@ multiprocess==0.70.18 # via pathos mypy-extensions==1.1.0 # via typing-inspect -narwhals==1.38.0 +narwhals==1.38.2 # via altair nest-asyncio==1.6.0 # via llama-index-core @@ -486,6 +486,8 @@ setuptools==80.3.1 # via pip-tools shellingham==1.5.4 # via typer +shtab==1.7.2 + # via -r requirements/requirements.in six==1.17.0 # via # mixpanel @@ -592,7 +594,7 @@ urllib3==2.4.0 # requests uv==0.7.3 # via -r requirements/requirements-dev.in -virtualenv==20.31.1 +virtualenv==20.31.2 # via pre-commit watchfiles==1.0.5 # via -r requirements/requirements.in diff --git a/requirements/requirements-browser.txt b/requirements/requirements-browser.txt index 4b8c880f0..3f9dbbbc5 100644 --- a/requirements/requirements-browser.txt +++ b/requirements/requirements-browser.txt @@ -58,7 +58,7 @@ markupsafe==3.0.2 # via # -c requirements/common-constraints.txt # jinja2 -narwhals==1.38.0 +narwhals==1.38.2 # via # -c requirements/common-constraints.txt # altair diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index fc05acc51..4d49ef191 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -127,7 +127,7 @@ markdown-it-py==3.0.0 # via # -c requirements/common-constraints.txt # rich -matplotlib==3.10.1 +matplotlib==3.10.3 # via # -c requirements/common-constraints.txt # -r requirements/requirements-dev.in @@ -301,7 +301,7 @@ uv==0.7.3 # via # -c requirements/common-constraints.txt # -r requirements/requirements-dev.in -virtualenv==20.31.1 +virtualenv==20.31.2 # via # -c requirements/common-constraints.txt # pre-commit diff --git a/requirements/requirements.in b/requirements/requirements.in index 6ddde184b..d1c49e35b 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -27,6 +27,7 @@ psutil watchfiles socksio pillow +shtab oslex google-generativeai From 9297ee982d962c1e5ea0143ec14c65fdb24dcde7 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:30:31 -0700 Subject: [PATCH 261/459] fix: Preserve original path spelling for read-only files --- aider/commands.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/aider/commands.py b/aider/commands.py index 3dd370e51..1811f8044 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -435,11 +435,20 @@ class Commands: to_keep = set() for abs_fname in self.coder.abs_read_only_fnames: rel_fname = self.coder.get_rel_fname(abs_fname) - keep = any( - _paths_match(abs_fname, orig) or rel_fname == orig - for orig in self.original_read_only_fnames - ) - if keep: + + # Prefer to keep the *original* spelling that the user supplied + # (eg the /var/… symlink) rather than the canonicalised path we + # may have stored internally. This preserves exactly what the + # user (and the tests) expect to see. + kept_name = None + for orig in self.original_read_only_fnames: + if _paths_match(abs_fname, orig) or rel_fname == orig: + kept_name = str(orig) + break + + if kept_name: + to_keep.add(kept_name) + else: to_keep.add(abs_fname) self.coder.abs_read_only_fnames = to_keep else: From 920b20b17dccb631acbaa23fa6f8defb3f7eb7fd Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:31:56 -0700 Subject: [PATCH 262/459] feat: add --shell-completions arg for shell completion scripts --- aider/args.py | 12 ++++++++++++ aider/main.py | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/aider/args.py b/aider/args.py index cd6e4363d..4e57f5c35 100644 --- a/aider/args.py +++ b/aider/args.py @@ -811,6 +811,18 @@ def get_parser(default_config_files, git_root): help="Specify which editor to use for the /editor command", ) + supported_shells_list = sorted(list(shtab.SUPPORTED_SHELLS)) + group.add_argument( + "--shell-completions", + metavar="SHELL", + choices=supported_shells_list, + help=( + "Print shell completion script for the specified SHELL and exit. Supported shells:" + f" {', '.join(supported_shells_list)}. Example: aider --shell-completions bash" + ), + ) + + ########## group = parser.add_argument_group("Deprecated model settings") # Add deprecated model shortcut arguments diff --git a/aider/main.py b/aider/main.py index a37f16129..82d00f474 100644 --- a/aider/main.py +++ b/aider/main.py @@ -15,6 +15,7 @@ except ImportError: import importlib_resources from dotenv import load_dotenv +import shtab from prompt_toolkit.enums import EditingMode from aider import __version__, models, urls, utils @@ -502,6 +503,13 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F # Parse again to include any arguments that might have been defined in .env args = parser.parse_args(argv) + if args.shell_completions: + # Ensure parser.prog is set for shtab, though it should be by default + parser.prog = "aider" + print(shtab.complete(parser, shell=args.shell_completions)) + sys.exit(0) + + if git is None: args.git = False From ee9ad75509a6af39c020a0e228c82595e6101330 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:32:08 -0700 Subject: [PATCH 263/459] style: apply linter fixes --- aider/args.py | 1 - aider/main.py | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/aider/args.py b/aider/args.py index 4e57f5c35..1543bb07e 100644 --- a/aider/args.py +++ b/aider/args.py @@ -822,7 +822,6 @@ def get_parser(default_config_files, git_root): ), ) - ########## group = parser.add_argument_group("Deprecated model settings") # Add deprecated model shortcut arguments diff --git a/aider/main.py b/aider/main.py index 82d00f474..ea344f0ba 100644 --- a/aider/main.py +++ b/aider/main.py @@ -14,8 +14,8 @@ except ImportError: git = None import importlib_resources -from dotenv import load_dotenv import shtab +from dotenv import load_dotenv from prompt_toolkit.enums import EditingMode from aider import __version__, models, urls, utils @@ -509,7 +509,6 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F print(shtab.complete(parser, shell=args.shell_completions)) sys.exit(0) - if git is None: args.git = False @@ -912,7 +911,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F commit_prompt=args.commit_prompt, subtree_only=args.subtree_only, git_commit_verify=args.git_commit_verify, - attribute_co_authored_by=args.attribute_co_authored_by, # Pass the arg + attribute_co_authored_by=args.attribute_co_authored_by, # Pass the arg ) except FileNotFoundError: pass From 0b4430f228f2f397f5a031a8641bcf87535aa294 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 14:34:56 -0700 Subject: [PATCH 264/459] Revert "fix: Preserve original path spelling for read-only files" This reverts commit 9297ee982d962c1e5ea0143ec14c65fdb24dcde7. --- aider/commands.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/aider/commands.py b/aider/commands.py index 1811f8044..3dd370e51 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -435,20 +435,11 @@ class Commands: to_keep = set() for abs_fname in self.coder.abs_read_only_fnames: rel_fname = self.coder.get_rel_fname(abs_fname) - - # Prefer to keep the *original* spelling that the user supplied - # (eg the /var/… symlink) rather than the canonicalised path we - # may have stored internally. This preserves exactly what the - # user (and the tests) expect to see. - kept_name = None - for orig in self.original_read_only_fnames: - if _paths_match(abs_fname, orig) or rel_fname == orig: - kept_name = str(orig) - break - - if kept_name: - to_keep.add(kept_name) - else: + keep = any( + _paths_match(abs_fname, orig) or rel_fname == orig + for orig in self.original_read_only_fnames + ) + if keep: to_keep.add(abs_fname) self.coder.abs_read_only_fnames = to_keep else: From 79923c954b743cd7ad97361ad71cc535bf561341 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 14:35:08 -0700 Subject: [PATCH 265/459] Revert "fix: Preserve original read-only files across symlinks" This reverts commit c3d4fdb4c1d1d31c45f68d229ec2686fb0498a43. --- aider/commands.py | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/aider/commands.py b/aider/commands.py index 3dd370e51..7a7a738c3 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -81,20 +81,8 @@ class Commands: self.help = None self.editor = editor - # Store the original read-only filenames provided via args.read. - # Keep both the raw path as given and the canonical realpath so we - # can match them later even when symlinks (eg /var ↔ /private/var) - # are involved. - self.original_read_only_fnames = set() - for fname in original_read_only_fnames or []: - # As provided - self.original_read_only_fnames.add(str(fname)) - # Canonical path (best-effort) - try: - self.original_read_only_fnames.add(os.path.realpath(fname)) - except Exception: - # Ignore paths that cannot be resolved - pass + # Store the original read-only filenames provided via args.read + self.original_read_only_fnames = set(original_read_only_fnames or []) def cmd_model(self, args): "Switch the Main Model to a new LLM" @@ -423,23 +411,16 @@ class Commands: def _drop_all_files(self): self.coder.abs_fnames = set() - # Helper to compare two paths while ignoring symlinks/resolution. - def _paths_match(p1, p2): - try: - return os.path.samefile(p1, p2) - except (FileNotFoundError, OSError): - return os.path.normpath(p1) == os.path.normpath(p2) - # When dropping all files, keep those that were originally provided via args.read if self.original_read_only_fnames: + # Keep only the original read-only files to_keep = set() for abs_fname in self.coder.abs_read_only_fnames: rel_fname = self.coder.get_rel_fname(abs_fname) - keep = any( - _paths_match(abs_fname, orig) or rel_fname == orig - for orig in self.original_read_only_fnames - ) - if keep: + if ( + abs_fname in self.original_read_only_fnames + or rel_fname in self.original_read_only_fnames + ): to_keep.add(abs_fname) self.coder.abs_read_only_fnames = to_keep else: From 311981f4e5b39bfa5431fe11fda58cf13f200b12 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:39:14 -0700 Subject: [PATCH 266/459] test: Use os.path.samefile for robust read-only file assertion --- tests/basic/test_commands.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/basic/test_commands.py b/tests/basic/test_commands.py index 2d15e02f5..8f668c6f5 100644 --- a/tests/basic/test_commands.py +++ b/tests/basic/test_commands.py @@ -2147,7 +2147,11 @@ class TestCommands(TestCase): # Assertions for /reset self.assertEqual(len(new_coder.abs_fnames), 0) self.assertEqual(len(new_coder.abs_read_only_fnames), 1) - self.assertIn(str(orig_ro_path), new_coder.abs_read_only_fnames) + # self.assertIn(str(orig_ro_path), new_coder.abs_read_only_fnames) + self.assertTrue( + any(os.path.samefile(p, str(orig_ro_path)) for p in new_coder.abs_read_only_fnames), + f"File {str(orig_ro_path)} not found in {new_coder.abs_read_only_fnames}", + ) self.assertEqual(len(new_coder.done_messages), 0) self.assertEqual(len(new_coder.cur_messages), 0) @@ -2186,6 +2190,10 @@ class TestCommands(TestCase): self.assertEqual(len(new_coder.abs_fnames), 0) self.assertEqual(len(new_coder.abs_read_only_fnames), 1) - self.assertIn(str(orig_ro_path), new_coder.abs_read_only_fnames) + # self.assertIn(str(orig_ro_path), new_coder.abs_read_only_fnames) + self.assertTrue( + any(os.path.samefile(p, str(orig_ro_path)) for p in new_coder.abs_read_only_fnames), + f"File {str(orig_ro_path)} not found in {new_coder.abs_read_only_fnames}", + ) self.assertEqual(new_coder.done_messages, [{"role": "user", "content": "d1"}]) self.assertEqual(new_coder.cur_messages, [{"role": "user", "content": "c1"}]) From c147571b1843405aa4d7946d52807f94044146c7 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 14:43:56 -0700 Subject: [PATCH 267/459] feat: add shell-completions option --- aider/website/assets/sample-analytics.jsonl | 184 ++++++++++---------- aider/website/assets/sample.aider.conf.yml | 3 + aider/website/assets/sample.env | 3 + aider/website/docs/config/aider_conf.md | 3 + aider/website/docs/config/dotenv.md | 3 + aider/website/docs/config/options.md | 11 +- aider/website/docs/faq.md | 12 +- tests/basic/test_commands.py | 4 +- 8 files changed, 120 insertions(+), 103 deletions(-) diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 70f22786f..4ef5bedb9 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,95 +1,3 @@ -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642397} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642510} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642511} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642511} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642511} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 12857, "completion_tokens": 4951, "total_tokens": 17808, "cost": 0.06558125000000001, "total_cost": 0.06558125000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642560} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642561} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642590} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642591} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642591} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642591} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 12659, "completion_tokens": 3733, "total_tokens": 16392, "cost": 0.05315375, "total_cost": 0.05315375}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642632} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642632} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642659} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642660} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642660} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642660} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 12882, "completion_tokens": 345, "total_tokens": 13227, "cost": 0.019552500000000004, "total_cost": 0.019552500000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642724} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642724} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642738} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642739} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642739} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642739} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 12863, "completion_tokens": 716, "total_tokens": 13579, "cost": 0.023238750000000002, "total_cost": 0.023238750000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642765} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642765} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642795} -{"event": "repo", "properties": {"num_files": 606}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642796} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642796} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642796} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 12658, "completion_tokens": 5959, "total_tokens": 18617, "cost": 0.07541250000000001, "total_cost": 0.07541250000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642852} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746642852} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643011} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643012} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643012} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643012} -{"event": "message_send_exception", "properties": {"exception": "'ModelResponse' object has no attribute 'completion_tokens'"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643015} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643015} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643034} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643034} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643034} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643034} -{"event": "message_send_exception", "properties": {"exception": "'ModelResponse' object has no attribute 'completion_tokens'"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643039} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643039} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643084} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643085} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643085} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643085} -{"event": "message_send_exception", "properties": {"exception": "'ModelResponse' object has no attribute 'completion_tokens'"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643088} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643088} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643095} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643095} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643095} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643095} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 68, "completion_tokens": 81, "total_tokens": 149, "cost": 0.0008950000000000001, "total_cost": 0.0008950000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643099} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643099} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643119} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643120} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643120} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643120} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 1822, "total_tokens": 10526, "cost": 0.0291, "total_cost": 0.0291}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643140} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643140} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643199} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643199} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643199} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643199} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643203} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643204} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643204} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643204} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 68, "completion_tokens": 13, "total_tokens": 81, "cost": 0.00021500000000000002, "total_cost": 0.00021500000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643207} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643207} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643216} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643217} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643217} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643217} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 307, "total_tokens": 9011, "cost": 0.01395, "total_cost": 0.01395}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643242} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643242} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643287} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643287} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643287} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643287} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 468, "total_tokens": 9172, "cost": 0.015560000000000001, "total_cost": 0.015560000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643309} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643309} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643362} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643362} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643362} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643362} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 2055, "total_tokens": 10759, "cost": 0.03143, "total_cost": 0.03143}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643385} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643385} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643425} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643426} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643426} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643426} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 2614, "total_tokens": 11318, "cost": 0.037020000000000004, "total_cost": 0.037020000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643452} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643452} @@ -998,3 +906,95 @@ {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 30117, "completion_tokens": 361, "total_tokens": 30478, "cost": 0.04125625000000001, "total_cost": 0.04125625000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737284} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737284} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737699} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737700} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737700} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737700} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737727} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737727} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 6435, "completion_tokens": 884, "total_tokens": 7319, "cost": 0.016883750000000003, "total_cost": 0.016883750000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737803} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737820} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737926} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737936} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737943} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738004} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738004} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 33813, "completion_tokens": 554, "total_tokens": 34367, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738026} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738032} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 34494, "completion_tokens": 76, "total_tokens": 34570, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738036} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738068} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 34580, "completion_tokens": 76, "total_tokens": 34656, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738070} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738093} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738097} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738102} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 63505, "completion_tokens": 1191, "total_tokens": 64696, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738163} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738188} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738223} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738235} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738235} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738240} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738252} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738252} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6343, "completion_tokens": 2379, "total_tokens": 8722, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738367} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738407} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 69472, "completion_tokens": 1827, "total_tokens": 71299, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738456} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 10045, "completion_tokens": 1102, "total_tokens": 11147, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738480} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738525} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 11528, "completion_tokens": 707, "total_tokens": 12235, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738566} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738934} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739112} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739112} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739112} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739166} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739234} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739236} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739238} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739241} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739246} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739258} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739258} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 68151, "completion_tokens": 4679, "total_tokens": 72830, "cost": 0.86867, "total_cost": 0.86867}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739381} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739421} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739458} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739470} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739471} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739471} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739471} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739508} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739508} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 70789, "completion_tokens": 2403, "total_tokens": 73192, "cost": 0.80401, "total_cost": 1.6726800000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739511} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 9168, "completion_tokens": 989, "total_tokens": 10157, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739544} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739672} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739680} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739680} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 11940, "completion_tokens": 485, "total_tokens": 12425, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739687} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739735} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 12723, "completion_tokens": 66, "total_tokens": 12789, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739739} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 74182, "completion_tokens": 3265, "total_tokens": 77447, "cost": 0.8724200000000001, "total_cost": 2.5451}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739763} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739767} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 12906, "completion_tokens": 234, "total_tokens": 13140, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739778} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739786} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 76544, "completion_tokens": 1560, "total_tokens": 78104, "cost": 0.82784, "total_cost": 3.3729400000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739829} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739844} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739847} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739877} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 19935, "completion_tokens": 409, "total_tokens": 20344, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739913} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739948} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739948} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740094} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740156} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740158} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740183} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 25752, "completion_tokens": 537, "total_tokens": 26289, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740332} diff --git a/aider/website/assets/sample.aider.conf.yml b/aider/website/assets/sample.aider.conf.yml index da6956cd5..7fe9459bf 100644 --- a/aider/website/assets/sample.aider.conf.yml +++ b/aider/website/assets/sample.aider.conf.yml @@ -428,6 +428,9 @@ ## Specify which editor to use for the /editor command #editor: xxx +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#shell-completions: xxx + ############################ # Deprecated model settings: diff --git a/aider/website/assets/sample.env b/aider/website/assets/sample.env index b08bb1a38..6d2a032cd 100644 --- a/aider/website/assets/sample.env +++ b/aider/website/assets/sample.env @@ -396,6 +396,9 @@ ## Specify which editor to use for the /editor command #AIDER_EDITOR= +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#AIDER_SHELL_COMPLETIONS= + ############################ # Deprecated model settings: diff --git a/aider/website/docs/config/aider_conf.md b/aider/website/docs/config/aider_conf.md index 3eb580bce..99bccf401 100644 --- a/aider/website/docs/config/aider_conf.md +++ b/aider/website/docs/config/aider_conf.md @@ -482,6 +482,9 @@ cog.outl("```") ## Specify which editor to use for the /editor command #editor: xxx +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#shell-completions: xxx + ############################ # Deprecated model settings: diff --git a/aider/website/docs/config/dotenv.md b/aider/website/docs/config/dotenv.md index 5dff49c51..82ad974de 100644 --- a/aider/website/docs/config/dotenv.md +++ b/aider/website/docs/config/dotenv.md @@ -436,6 +436,9 @@ cog.outl("```") ## Specify which editor to use for the /editor command #AIDER_EDITOR= +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#AIDER_SHELL_COMPLETIONS= + ############################ # Deprecated model settings: diff --git a/aider/website/docs/config/options.md b/aider/website/docs/config/options.md index f0bbe5177..368c4ec7e 100644 --- a/aider/website/docs/config/options.md +++ b/aider/website/docs/config/options.md @@ -82,9 +82,10 @@ usage: aider [-h] [--model] [--openai-api-key] [--anthropic-api-key] [--multiline | --no-multiline] [--notifications | --no-notifications] [--notifications-command] - [--detect-urls | --no-detect-urls] [--editor] [--opus] - [--sonnet] [--haiku] [--4] [--4o] [--mini] [--4-turbo] - [--35turbo] [--deepseek] [--o1-mini] [--o1-preview] + [--detect-urls | --no-detect-urls] [--editor] + [--shell-completions] [--opus] [--sonnet] [--haiku] + [--4] [--4o] [--mini] [--4-turbo] [--35turbo] + [--deepseek] [--o1-mini] [--o1-preview] ``` @@ -767,6 +768,10 @@ Aliases: Specify which editor to use for the /editor command Environment variable: `AIDER_EDITOR` +### `--shell-completions SHELL` +Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +Environment variable: `AIDER_SHELL_COMPLETIONS` + ## Deprecated model settings: ### `--opus` diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index e2d8ac531..fd56dd2f5 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,12 +264,12 @@ tr:hover { background-color: #f5f5f5; } - - - - - - + + + + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-preview-05-06575,43340.7%
gemini/gemini-2.5-pro-exp-03-25413,81529.3%
gemini/gemini-2.5-pro-preview-03-25263,26118.6%
openrouter/REDACTED135,1099.6%
o315,1541.1%
together_ai/REDACTED7,7070.5%
gemini/gemini-2.5-pro-exp-03-25780,65139.6%
gemini/gemini-2.5-pro-preview-05-06582,75229.6%
o3316,72716.1%
gemini/gemini-2.5-pro-preview-03-25143,9407.3%
openrouter/REDACTED135,1096.9%
together_ai/REDACTED7,7070.4%
together_ai/Qwen/Qwen3-235B-A22B-fp8-tput1,9940.1%
diff --git a/tests/basic/test_commands.py b/tests/basic/test_commands.py index 8f668c6f5..cc6cd4222 100644 --- a/tests/basic/test_commands.py +++ b/tests/basic/test_commands.py @@ -2108,7 +2108,7 @@ class TestCommands(TestCase): def test_reset_after_coder_clone_preserves_original_read_only_files(self): with GitTemporaryDirectory() as repo_dir_path: - repo_dir = str(repo_dir_path) + repo_dir = str(".") io = InputOutput(pretty=False, fancy_input=False, yes=True) orig_ro_path = Path(repo_dir) / "orig_ro.txt" @@ -2157,7 +2157,7 @@ class TestCommands(TestCase): def test_drop_bare_after_coder_clone_preserves_original_read_only_files(self): with GitTemporaryDirectory() as repo_dir_path: - repo_dir = str(repo_dir_path) + repo_dir = str(".") io = InputOutput(pretty=False, fancy_input=False, yes=True) orig_ro_path = Path(repo_dir) / "orig_ro.txt" From 0af5563e7778d3c76bef014b06e7c78287edbbd9 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 14:44:07 -0700 Subject: [PATCH 268/459] style: Fix F841 unused variable in tests --- tests/basic/test_commands.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/basic/test_commands.py b/tests/basic/test_commands.py index cc6cd4222..d187ee521 100644 --- a/tests/basic/test_commands.py +++ b/tests/basic/test_commands.py @@ -2107,7 +2107,7 @@ class TestCommands(TestCase): ) def test_reset_after_coder_clone_preserves_original_read_only_files(self): - with GitTemporaryDirectory() as repo_dir_path: + with GitTemporaryDirectory() as _: repo_dir = str(".") io = InputOutput(pretty=False, fancy_input=False, yes=True) @@ -2156,7 +2156,7 @@ class TestCommands(TestCase): self.assertEqual(len(new_coder.cur_messages), 0) def test_drop_bare_after_coder_clone_preserves_original_read_only_files(self): - with GitTemporaryDirectory() as repo_dir_path: + with GitTemporaryDirectory() as _: repo_dir = str(".") io = InputOutput(pretty=False, fancy_input=False, yes=True) From 2a614944428854ea2ed8804a005fa70036e66d59 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 14:55:53 -0700 Subject: [PATCH 269/459] copy --- HISTORY.md | 6 +- aider/website/HISTORY.md | 6 +- aider/website/assets/sample-analytics.jsonl | 228 ++++++++++---------- aider/website/docs/faq.md | 10 +- 4 files changed, 129 insertions(+), 121 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 79f9626d2..c8dbf24db 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -25,7 +25,7 @@ - Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. - Improved display of filenames in the prompt header using rich Text formatting. - Enabled `reasoning_effort` for Gemini 2.5 Flash models. -- Aider wrote 50% of the code in this release. + - Aider wrote 54% of the code in this release. ### Aider v0.82.3 @@ -39,6 +39,10 @@ - Set Gemini 2.5 Pro models to use the `overeager` prompt setting by default. - Add common file types (`.svg`, `.pdf`) to the default list of ignored files for AI comment scanning (`--watch`). - Skip scanning files larger than 1MB for AI comments (`--watch`). + - Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). + - Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. + - Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). + - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. ### Aider v0.82.2 diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index 677b9ed8f..29a123951 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -49,7 +49,7 @@ cog.out(text) - Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. - Improved display of filenames in the prompt header using rich Text formatting. - Enabled `reasoning_effort` for Gemini 2.5 Flash models. -- Aider wrote 50% of the code in this release. + - Aider wrote 54% of the code in this release. ### Aider v0.82.3 @@ -63,6 +63,10 @@ cog.out(text) - Set Gemini 2.5 Pro models to use the `overeager` prompt setting by default. - Add common file types (`.svg`, `.pdf`) to the default list of ignored files for AI comment scanning (`--watch`). - Skip scanning files larger than 1MB for AI comments (`--watch`). + - Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). + - Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. + - Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). + - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. ### Aider v0.82.2 diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 4ef5bedb9..d61cf093f 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,117 +1,3 @@ -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643426} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 2614, "total_tokens": 11318, "cost": 0.037020000000000004, "total_cost": 0.037020000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643452} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643452} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643551} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643552} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643552} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643552} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 468, "total_tokens": 9172, "cost": 0.015560000000000001, "total_cost": 0.015560000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643575} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643575} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643589} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643589} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643589} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643589} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 1822, "total_tokens": 10526, "cost": 0.0291, "total_cost": 0.0291}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643611} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643611} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643634} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643634} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643634} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643634} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 1822, "total_tokens": 10526, "cost": 0.0291, "total_cost": 0.0291}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643655} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643655} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643675} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643675} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643675} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643675} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 468, "total_tokens": 9172, "cost": 0.015560000000000001, "total_cost": 0.015560000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643696} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643696} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643709} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643709} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643709} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643709} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 500, "total_tokens": 9204, "cost": 0.015880000000000002, "total_cost": 0.015880000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643730} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643730} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643743} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643743} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643743} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643743} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 2055, "total_tokens": 10759, "cost": 0.03143, "total_cost": 0.03143}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643764} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643764} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643777} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643777} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643777} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643777} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 336, "total_tokens": 9040, "cost": 0.014240000000000001, "total_cost": 0.014240000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643796} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643796} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643874} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643874} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643874} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643874} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 2614, "total_tokens": 11318, "cost": 0.037020000000000004, "total_cost": 0.037020000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643901} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746643901} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644671} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644671} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644671} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644671} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 1822, "total_tokens": 10526, "cost": 0.0291, "total_cost": 0.0291}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644693} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644693} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644812} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644813} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644813} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644813} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 336, "total_tokens": 9040, "cost": 0.014240000000000001, "total_cost": 0.014240000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644835} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644835} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644859} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644859} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644859} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644859} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 1583, "total_tokens": 10287, "cost": 0.02671, "total_cost": 0.02671}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644877} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746644877} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746645851} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746645851} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746645851} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746645851} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746645861} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 6524, "completion_tokens": 387, "total_tokens": 6911, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746645888} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746646177} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746648919} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746648919} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746648919} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746648919} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746648920} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746648930} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6568, "completion_tokens": 1043, "total_tokens": 7611, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746648961} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649323} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649324} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6657, "completion_tokens": 916, "total_tokens": 7573, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649392} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649626} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649652} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649652} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649652} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649652} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "ask", "prompt_tokens": 8704, "completion_tokens": 336, "total_tokens": 9040, "cost": 0.014240000000000001, "total_cost": 0.014240000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649669} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746649669} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650326} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650327} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650327} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650330} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650397} -{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650399} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650401} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650401} -{"event": "cli session", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650401} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650403} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650416} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650421} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650422} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650422} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650422} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8240, "completion_tokens": 10, "total_tokens": 8250, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650427} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650427} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650437} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650437} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650437} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746650440} {"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657288} {"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657291} {"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657297} @@ -998,3 +884,117 @@ {"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740158} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740183} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 25752, "completion_tokens": 537, "total_tokens": 26289, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740332} +{"event": "command_lint", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740602} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740637} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 23028, "completion_tokens": 209, "total_tokens": 23237, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740645} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740795} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740888} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740989} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740989} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741116} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741117} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741117} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741117} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741128} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741128} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8311, "completion_tokens": 73, "total_tokens": 8384, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741133} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 34536, "completion_tokens": 239, "total_tokens": 34775, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741136} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741136} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741137} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 4178, "completion_tokens": 107, "total_tokens": 4285, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741140} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 35036, "completion_tokens": 455, "total_tokens": 35491, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741205} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741205} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741206} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741208} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741243} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index fd56dd2f5..fe10d0dc6 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,11 +264,11 @@ tr:hover { background-color: #f5f5f5; } - - - - - + + + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25780,65139.6%
gemini/gemini-2.5-pro-preview-05-06582,75229.6%
o3316,72716.1%
gemini/gemini-2.5-pro-preview-03-25143,9407.3%
openrouter/REDACTED135,1096.9%
gemini/gemini-2.5-pro-exp-03-25856,47844.7%
gemini/gemini-2.5-pro-preview-05-06582,75230.4%
o3316,72716.5%
openrouter/REDACTED135,1097.1%
gemini/gemini-2.5-pro-preview-03-2514,0120.7%
together_ai/REDACTED7,7070.4%
together_ai/Qwen/Qwen3-235B-A22B-fp8-tput1,9940.1%
From b40baaceea3195d1a6f0445c2eb257d41e5149eb Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 15:11:07 -0700 Subject: [PATCH 270/459] do codespell the website --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 928c5fee2..40a52f566 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,5 +48,5 @@ build-backend = "setuptools.build_meta" write_to = "aider/_version.py" [tool.codespell] -skip = "*.svg,Gemfile.lock,tests/fixtures/*,aider/website/*" +skip = "*.svg,Gemfile.lock,tests/fixtures/*,aider/website/assets/*" write-changes = true From 38e7f04e60664e044ca8dfeb50ff6c66e64d8a7f Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 15:13:38 -0700 Subject: [PATCH 271/459] lint --- aider/coders/udiff_simple_prompts.py | 2 +- aider/linter.py | 2 +- aider/repo.py | 14 ++- tests/basic/test_repo.py | 108 +++++++++++++++++------- tests/scrape/test_playwright_disable.py | 34 ++++++-- 5 files changed, 115 insertions(+), 45 deletions(-) diff --git a/aider/coders/udiff_simple_prompts.py b/aider/coders/udiff_simple_prompts.py index ea98164cf..cd3160e58 100644 --- a/aider/coders/udiff_simple_prompts.py +++ b/aider/coders/udiff_simple_prompts.py @@ -22,4 +22,4 @@ Don't leave out any lines or the diff patch won't apply correctly. To make a new file, show a diff from `--- /dev/null` to `+++ path/to/new/file.ext`. {final_reminders} -""" # noqa +""" # noqa diff --git a/aider/linter.py b/aider/linter.py index 9c980366d..301e5d7aa 100644 --- a/aider/linter.py +++ b/aider/linter.py @@ -1,5 +1,4 @@ import os -import oslex import re import shlex import subprocess @@ -9,6 +8,7 @@ import warnings from dataclasses import dataclass from pathlib import Path +import oslex from grep_ast import TreeContext, filename_to_lang from grep_ast.tsl import get_parser # noqa: E402 diff --git a/aider/repo.py b/aider/repo.py index aa2d525f7..6db4c7635 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -72,7 +72,7 @@ class GitRepo: commit_prompt=None, subtree_only=False, git_commit_verify=True, - attribute_co_authored_by=False, # Added parameter + attribute_co_authored_by=False, # Added parameter ): self.io = io self.models = models @@ -84,7 +84,7 @@ class GitRepo: self.attribute_committer = attribute_committer self.attribute_commit_message_author = attribute_commit_message_author self.attribute_commit_message_committer = attribute_commit_message_committer - self.attribute_co_authored_by = attribute_co_authored_by # Assign from parameter + self.attribute_co_authored_by = attribute_co_authored_by # Assign from parameter self.commit_prompt = commit_prompt self.subtree_only = subtree_only self.git_commit_verify = git_commit_verify @@ -227,7 +227,6 @@ class GitRepo: effective_author = True if attribute_author is None else attribute_author effective_committer = True if attribute_committer is None else attribute_committer - # Determine commit message prefixing prefix_commit_message = aider_edits and ( attribute_commit_message_author or attribute_commit_message_committer @@ -247,9 +246,7 @@ class GitRepo: # Author modification applies only to aider edits. # It's used if effective_author is True AND (co-authored-by is False OR author was explicitly set). use_attribute_author = ( - aider_edits - and effective_author - and (not attribute_co_authored_by or author_explicit) + aider_edits and effective_author and (not attribute_co_authored_by or author_explicit) ) # Committer modification applies regardless of aider_edits (based on tests). @@ -258,7 +255,6 @@ class GitRepo: not (aider_edits and attribute_co_authored_by) or committer_explicit ) - if not commit_message: commit_message = "(no commit message provided)" @@ -291,7 +287,9 @@ class GitRepo: with contextlib.ExitStack() as stack: if use_attribute_committer: stack.enter_context( - set_git_env("GIT_COMMITTER_NAME", committer_name, original_committer_name_env) + set_git_env( + "GIT_COMMITTER_NAME", committer_name, original_committer_name_env + ) ) if use_attribute_author: stack.enter_context( diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index 400c307a8..a07124810 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -206,13 +206,15 @@ class TestRepo(unittest.TestCase): self.assertEqual(commit.committer.name, "Test User (aider)") # Now test with explicit False - git_repo_explicit_false = GitRepo(io, None, None, attribute_author=False, attribute_committer=False) + git_repo_explicit_false = GitRepo( + io, None, None, attribute_author=False, attribute_committer=False + ) fname.write_text("explicit false content") commit_result = git_repo_explicit_false.commit(fnames=[str(fname)], aider_edits=True) self.assertIsNotNone(commit_result) commit = raw_repo.head.commit - self.assertEqual(commit.author.name, "Test User") # Explicit False - self.assertEqual(commit.committer.name, "Test User") # Explicit False + self.assertEqual(commit.author.name, "Test User") # Explicit False + self.assertEqual(commit.committer.name, "Test User") # Explicit False # check that the original committer name is restored original_committer_name = os.environ.get("GIT_COMMITTER_NAME") @@ -223,11 +225,21 @@ class TestRepo(unittest.TestCase): # Test user commit with explicit no-committer attribution git_repo_user_no_committer = GitRepo(io, None, None, attribute_committer=False) fname.write_text("user no committer content") - commit_result = git_repo_user_no_committer.commit(fnames=[str(fname)], aider_edits=False) + commit_result = git_repo_user_no_committer.commit( + fnames=[str(fname)], aider_edits=False + ) self.assertIsNotNone(commit_result) commit = raw_repo.head.commit - self.assertEqual(commit.author.name, "Test User", msg="Author name should not be modified for user commits") - self.assertEqual(commit.committer.name, "Test User", msg="Committer name should not be modified when attribute_committer=False") + self.assertEqual( + commit.author.name, + "Test User", + msg="Author name should not be modified for user commits", + ) + self.assertEqual( + commit.committer.name, + "Test User", + msg="Committer name should not be modified when attribute_committer=False", + ) @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") def test_commit_with_co_authored_by(self): @@ -246,21 +258,22 @@ class TestRepo(unittest.TestCase): # Mock coder args: Co-authored-by enabled, author/committer use default (None) mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = True - mock_coder.args.attribute_author = None # Default - mock_coder.args.attribute_committer = None # Default + mock_coder.args.attribute_author = None # Default + mock_coder.args.attribute_committer = None # Default mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False # The code uses coder.main_model.name for the co-authored-by line mock_coder.main_model = MagicMock() mock_coder.main_model.name = "gpt-test" - io = InputOutput() git_repo = GitRepo(io, None, None) # commit a change with aider_edits=True and co-authored-by flag fname.write_text("new content") - commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit") + commit_result = git_repo.commit( + fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider edit" + ) self.assertIsNotNone(commit_result) # check the commit message and author/committer @@ -268,8 +281,16 @@ class TestRepo(unittest.TestCase): self.assertIn("Co-authored-by: aider (gpt-test) ", commit.message) self.assertEqual(commit.message.splitlines()[0], "Aider edit") # With default (None), co-authored-by takes precedence - self.assertEqual(commit.author.name, "Test User", msg="Author name should not be modified when co-authored-by takes precedence") - self.assertEqual(commit.committer.name, "Test User", msg="Committer name should not be modified when co-authored-by takes precedence") + self.assertEqual( + commit.author.name, + "Test User", + msg="Author name should not be modified when co-authored-by takes precedence", + ) + self.assertEqual( + commit.committer.name, + "Test User", + msg="Committer name should not be modified when co-authored-by takes precedence", + ) @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") def test_commit_co_authored_by_with_explicit_name_modification(self): @@ -290,29 +311,40 @@ class TestRepo(unittest.TestCase): # Mock coder args: Co-authored-by enabled, author/committer modification explicitly enabled mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = True - mock_coder.args.attribute_author = True # Explicitly enable - mock_coder.args.attribute_committer = True # Explicitly enable + mock_coder.args.attribute_author = True # Explicitly enable + mock_coder.args.attribute_committer = True # Explicitly enable mock_coder.args.attribute_commit_message_author = False mock_coder.args.attribute_commit_message_committer = False mock_coder.main_model = MagicMock() mock_coder.main_model.name = "gpt-test-combo" - io = InputOutput() git_repo = GitRepo(io, None, None) # commit a change with aider_edits=True and combo flags fname.write_text("new content combo") - commit_result = git_repo.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider combo edit") + commit_result = git_repo.commit( + fnames=[str(fname)], aider_edits=True, coder=mock_coder, message="Aider combo edit" + ) self.assertIsNotNone(commit_result) # check the commit message and author/committer commit = raw_repo.head.commit - self.assertIn("Co-authored-by: aider (gpt-test-combo) ", commit.message) + self.assertIn( + "Co-authored-by: aider (gpt-test-combo) ", commit.message + ) self.assertEqual(commit.message.splitlines()[0], "Aider combo edit") # When co-authored-by is true BUT author/committer are explicit True, modification SHOULD happen - self.assertEqual(commit.author.name, "Test User (aider)", msg="Author name should be modified when explicitly True, even with co-author") - self.assertEqual(commit.committer.name, "Test User (aider)", msg="Committer name should be modified when explicitly True, even with co-author") + self.assertEqual( + commit.author.name, + "Test User (aider)", + msg="Author name should be modified when explicitly True, even with co-author", + ) + self.assertEqual( + commit.committer.name, + "Test User (aider)", + msg="Committer name should be modified when explicitly True, even with co-author", + ) @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") def test_commit_ai_edits_no_coauthor_explicit_false(self): @@ -333,8 +365,8 @@ class TestRepo(unittest.TestCase): # Case 1: attribute_author = False, attribute_committer = None (default True) mock_coder_no_author = MagicMock() mock_coder_no_author.args.attribute_co_authored_by = False - mock_coder_no_author.args.attribute_author = False # Explicit False - mock_coder_no_author.args.attribute_committer = None # Default True + mock_coder_no_author.args.attribute_author = False # Explicit False + mock_coder_no_author.args.attribute_committer = None # Default True mock_coder_no_author.args.attribute_commit_message_author = False mock_coder_no_author.args.attribute_commit_message_committer = False mock_coder_no_author.main_model = MagicMock() @@ -342,18 +374,23 @@ class TestRepo(unittest.TestCase): git_repo_no_author = GitRepo(io, None, None) fname.write_text("no author content") - commit_result = git_repo_no_author.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder_no_author, message="Aider no author") + commit_result = git_repo_no_author.commit( + fnames=[str(fname)], + aider_edits=True, + coder=mock_coder_no_author, + message="Aider no author", + ) self.assertIsNotNone(commit_result) commit = raw_repo.head.commit self.assertNotIn("Co-authored-by:", commit.message) - self.assertEqual(commit.author.name, "Test User") # Explicit False - self.assertEqual(commit.committer.name, "Test User (aider)") # Default True + self.assertEqual(commit.author.name, "Test User") # Explicit False + self.assertEqual(commit.committer.name, "Test User (aider)") # Default True # Case 2: attribute_author = None (default True), attribute_committer = False mock_coder_no_committer = MagicMock() mock_coder_no_committer.args.attribute_co_authored_by = False - mock_coder_no_committer.args.attribute_author = None # Default True - mock_coder_no_committer.args.attribute_committer = False # Explicit False + mock_coder_no_committer.args.attribute_author = None # Default True + mock_coder_no_committer.args.attribute_committer = False # Explicit False mock_coder_no_committer.args.attribute_commit_message_author = False mock_coder_no_committer.args.attribute_commit_message_committer = False mock_coder_no_committer.main_model = MagicMock() @@ -361,12 +398,25 @@ class TestRepo(unittest.TestCase): git_repo_no_committer = GitRepo(io, None, None) fname.write_text("no committer content") - commit_result = git_repo_no_committer.commit(fnames=[str(fname)], aider_edits=True, coder=mock_coder_no_committer, message="Aider no committer") + commit_result = git_repo_no_committer.commit( + fnames=[str(fname)], + aider_edits=True, + coder=mock_coder_no_committer, + message="Aider no committer", + ) self.assertIsNotNone(commit_result) commit = raw_repo.head.commit self.assertNotIn("Co-authored-by:", commit.message) - self.assertEqual(commit.author.name, "Test User (aider)", msg="Author name should be modified (default True) when co-author=False") - self.assertEqual(commit.committer.name, "Test User", msg="Committer name should not be modified (explicit False) when co-author=False") + self.assertEqual( + commit.author.name, + "Test User (aider)", + msg="Author name should be modified (default True) when co-author=False", + ) + self.assertEqual( + commit.committer.name, + "Test User", + msg="Committer name should not be modified (explicit False) when co-author=False", + ) def test_get_tracked_files(self): # Create a temporary directory diff --git a/tests/scrape/test_playwright_disable.py b/tests/scrape/test_playwright_disable.py index df777752b..215422cc2 100644 --- a/tests/scrape/test_playwright_disable.py +++ b/tests/scrape/test_playwright_disable.py @@ -1,7 +1,9 @@ -import pytest from unittest.mock import MagicMock -from aider.scrape import install_playwright, Scraper +import pytest + +from aider.scrape import Scraper, install_playwright + class DummyIO: def __init__(self): @@ -25,13 +27,16 @@ def test_scraper_disable_playwright_flag(monkeypatch): scraper = Scraper(print_error=io.tool_error, playwright_available=False) # Patch scrape_with_httpx to check it is called called = {} + def fake_httpx(url): - called['called'] = True + called["called"] = True return "plain text", "text/plain" + scraper.scrape_with_httpx = fake_httpx content = scraper.scrape("http://example.com") assert content == "plain text" - assert called['called'] + assert called["called"] + def test_scraper_enable_playwright(monkeypatch): io = DummyIO() @@ -39,13 +44,16 @@ def test_scraper_enable_playwright(monkeypatch): scraper = Scraper(print_error=io.tool_error, playwright_available=True) # Patch scrape_with_playwright to check it is called called = {} + def fake_playwright(url): - called['called'] = True + called["called"] = True return "hi", "text/html" + scraper.scrape_with_playwright = fake_playwright content = scraper.scrape("http://example.com") assert content.startswith("hi") or "" in content - assert called['called'] + assert called["called"] + def test_commands_web_disable_playwright(monkeypatch): """ @@ -59,16 +67,22 @@ def test_commands_web_disable_playwright(monkeypatch): self.outputs = [] self.warnings = [] self.errors = [] + def tool_output(self, msg, *a, **k): self.outputs.append(msg) + def tool_warning(self, msg, *a, **k): self.warnings.append(msg) + def tool_error(self, msg, *a, **k): self.errors.append(msg) + def read_text(self, filename, silent=False): return "" + def confirm_ask(self, *a, **k): return True + def print(self, *a, **k): pass @@ -77,18 +91,25 @@ def test_commands_web_disable_playwright(monkeypatch): def __init__(self): self.cur_messages = [] self.main_model = type("M", (), {"edit_format": "code", "name": "dummy", "info": {}}) + def get_rel_fname(self, fname): return fname + def get_inchat_relative_files(self): return [] + def abs_root_path(self, fname): return fname + def get_all_abs_files(self): return [] + def get_announcements(self): return [] + def format_chat_chunks(self): return type("Chunks", (), {"repo": [], "readonly_files": [], "chat_files": []})() + def event(self, *a, **k): pass @@ -99,6 +120,7 @@ def test_commands_web_disable_playwright(monkeypatch): class DummyScraper: def __init__(self, **kwargs): self.called = False + def scrape(self, url): self.called = True return "dummy content" From 023e93979881544ce1797193b84faa36cd173c54 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:15:17 -0700 Subject: [PATCH 272/459] style: Address flake8 errors --- aider/linter.py | 1 - aider/repo.py | 37 +++++++++++++++---------- tests/basic/test_repo.py | 9 ++++-- tests/scrape/test_playwright_disable.py | 9 ++---- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/aider/linter.py b/aider/linter.py index 301e5d7aa..d386696e5 100644 --- a/aider/linter.py +++ b/aider/linter.py @@ -1,6 +1,5 @@ import os import re -import shlex import subprocess import sys import traceback diff --git a/aider/repo.py b/aider/repo.py index 6db4c7635..0438f2243 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -134,15 +134,16 @@ class GitRepo: Args: fnames (list, optional): List of filenames to commit. Defaults to None (commit all dirty files). - context (str, optional): Context for generating the commit message. Defaults to None. + context (str, optional): Context for generating commit message. Defaults to None. message (str, optional): Explicit commit message. Defaults to None (generate message). aider_edits (bool, optional): Whether the changes were made by Aider. Defaults to False. This affects attribution logic. - coder (Coder, optional): The Coder instance, used to access config and model info. + coder (Coder, optional): The Coder instance, used for config and model info. Defaults to None. Returns: - tuple(str, str) or None: The commit hash and commit message if successful, else None. + tuple(str, str) or None: The commit hash and commit message if successful, + else None. Attribution Logic: ------------------ @@ -154,16 +155,16 @@ class GitRepo: - Committer: The person who last applied the commit to the repository. - aider_edits=True: Changes were generated by Aider (LLM). - aider_edits=False: Commit is user-driven (e.g., /commit manually staged changes). - - Explicit Setting: A flag (--attribute-...) is set to True or False via command line - or config file. + - Explicit Setting: A flag (--attribute-...) is set to True or False + via command line or config file. - Implicit Default: A flag is not explicitly set, defaulting to None in args, which is interpreted as True unless overridden by other logic. Flags: - --attribute-author: Modify Author name to "User Name (aider)". - --attribute-committer: Modify Committer name to "User Name (aider)". - - --attribute-co-authored-by: Add "Co-authored-by: aider () " - trailer to the commit message. + - --attribute-co-authored-by: Add + "Co-authored-by: aider () " trailer to commit message. Behavior Summary: @@ -171,8 +172,8 @@ class GitRepo: - If --attribute-co-authored-by=True: - Co-authored-by trailer IS ADDED. - Author/Committer names are NOT modified by default (co-authored-by takes precedence). - - EXCEPTION: If --attribute-author/--attribute-committer is EXPLICITLY True, - the respective name IS modified (explicit overrides precedence). + - EXCEPTION: If --attribute-author/--attribute-committer is EXPLICITLY True, the + respective name IS modified (explicit overrides precedence). - If --attribute-co-authored-by=False: - Co-authored-by trailer is NOT added. - Author/Committer names ARE modified by default (implicit True). @@ -186,11 +187,15 @@ class GitRepo: - EXCEPTION: If --attribute-committer is EXPLICITLY False, the name is NOT modified. Resulting Scenarios: - - Standard AI edit (defaults): Co-authored-by=False -> Author=You(aider), Committer=You(aider) - - AI edit with Co-authored-by (default): Co-authored-by=True -> Author=You, Committer=You, Trailer added - - AI edit with Co-authored-by + Explicit Author: Co-authored-by=True, --attribute-author -> Author=You(aider), Committer=You, Trailer added + - Standard AI edit (defaults): Co-authored-by=False -> Author=You(aider), + Committer=You(aider) + - AI edit with Co-authored-by (default): Co-authored-by=True -> Author=You, + Committer=You, Trailer added + - AI edit with Co-authored-by + Explicit Author: Co-authored-by=True, + --attribute-author -> Author=You(aider), Committer=You, Trailer added - User commit (defaults): aider_edits=False -> Author=You, Committer=You(aider) - - User commit with explicit no-committer: aider_edits=False, --no-attribute-committer -> Author=You, Committer=You + - User commit with explicit no-committer: aider_edits=False, + --no-attribute-committer -> Author=You, Committer=You """ if not fnames and not self.repo.is_dirty(): return @@ -244,13 +249,15 @@ class GitRepo: # Determine if author/committer names should be modified # Author modification applies only to aider edits. - # It's used if effective_author is True AND (co-authored-by is False OR author was explicitly set). + # It's used if effective_author is True AND + # (co-authored-by is False OR author was explicitly set). use_attribute_author = ( aider_edits and effective_author and (not attribute_co_authored_by or author_explicit) ) # Committer modification applies regardless of aider_edits (based on tests). - # It's used if effective_committer is True AND (it's not an aider edit with co-authored-by OR committer was explicitly set). + # It's used if effective_committer is True AND + # (it's not an aider edit with co-authored-by OR committer was explicitly set). use_attribute_committer = effective_committer and ( not (aider_edits and attribute_co_authored_by) or committer_explicit ) diff --git a/tests/basic/test_repo.py b/tests/basic/test_repo.py index a07124810..0f1e7ed0e 100644 --- a/tests/basic/test_repo.py +++ b/tests/basic/test_repo.py @@ -294,7 +294,8 @@ class TestRepo(unittest.TestCase): @unittest.skipIf(platform.system() == "Windows", "Git env var behavior differs on Windows") def test_commit_co_authored_by_with_explicit_name_modification(self): - # Test scenario where Co-authored-by is true AND author/committer modification are explicitly True + # Test scenario where Co-authored-by is true AND + # author/committer modification are explicitly True with GitTemporaryDirectory(): # Setup repo... # new repo @@ -308,7 +309,8 @@ class TestRepo(unittest.TestCase): raw_repo.git.add(str(fname)) raw_repo.git.commit("-m", "initial commit") - # Mock coder args: Co-authored-by enabled, author/committer modification explicitly enabled + # Mock coder args: Co-authored-by enabled, + # author/committer modification explicitly enabled mock_coder = MagicMock() mock_coder.args.attribute_co_authored_by = True mock_coder.args.attribute_author = True # Explicitly enable @@ -334,7 +336,8 @@ class TestRepo(unittest.TestCase): "Co-authored-by: aider (gpt-test-combo) ", commit.message ) self.assertEqual(commit.message.splitlines()[0], "Aider combo edit") - # When co-authored-by is true BUT author/committer are explicit True, modification SHOULD happen + # When co-authored-by is true BUT author/committer are explicit True, + # modification SHOULD happen self.assertEqual( commit.author.name, "Test User (aider)", diff --git a/tests/scrape/test_playwright_disable.py b/tests/scrape/test_playwright_disable.py index 215422cc2..7a851a4e7 100644 --- a/tests/scrape/test_playwright_disable.py +++ b/tests/scrape/test_playwright_disable.py @@ -1,8 +1,4 @@ -from unittest.mock import MagicMock - -import pytest - -from aider.scrape import Scraper, install_playwright +from aider.scrape import Scraper class DummyIO: @@ -23,7 +19,8 @@ class DummyIO: def test_scraper_disable_playwright_flag(monkeypatch): io = DummyIO() - # Simulate that playwright is not available (disable_playwright just means playwright_available=False) + # Simulate that playwright is not available + # (disable_playwright just means playwright_available=False) scraper = Scraper(print_error=io.tool_error, playwright_available=False) # Patch scrape_with_httpx to check it is called called = {} From b6a32d8682fbcd3f8c1c940f27b919c251503a60 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 15:28:45 -0700 Subject: [PATCH 273/459] copy --- HISTORY.md | 3 +- aider/website/HISTORY.md | 3 +- aider/website/assets/sample-analytics.jsonl | 338 ++++++++++---------- aider/website/docs/faq.md | 8 +- 4 files changed, 177 insertions(+), 175 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index c8dbf24db..7ae35fedb 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -6,6 +6,7 @@ - Added support for `gemini-2.5-pro-preview-05-06` models. - Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. - Added a spinner animation while waiting for the LLM to start streaming its response. +- Updated the spinner animation to a Knight Rider style. - Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. - Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. - Marked Gemini 2.5 Pro preview models as `overeager` by default. @@ -25,7 +26,7 @@ - Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. - Improved display of filenames in the prompt header using rich Text formatting. - Enabled `reasoning_effort` for Gemini 2.5 Flash models. - - Aider wrote 54% of the code in this release. + - Aider wrote 53% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index 29a123951..e1a3345ac 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -30,6 +30,7 @@ cog.out(text) - Added support for `gemini-2.5-pro-preview-05-06` models. - Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. - Added a spinner animation while waiting for the LLM to start streaming its response. +- Updated the spinner animation to a Knight Rider style. - Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. - Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. - Marked Gemini 2.5 Pro preview models as `overeager` by default. @@ -49,7 +50,7 @@ cog.out(text) - Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. - Improved display of filenames in the prompt header using rich Text formatting. - Enabled `reasoning_effort` for Gemini 2.5 Flash models. - - Aider wrote 54% of the code in this release. + - Aider wrote 53% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index d61cf093f..9647720d6 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,172 +1,3 @@ -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657288} -{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657291} -{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657297} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657300} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657302} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657302} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657302} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 605, "completion_tokens": 362, "total_tokens": 967, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657321} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657321} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657326} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657328} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657328} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657328} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657334} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657340} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657342} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657342} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657342} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 605, "completion_tokens": 300, "total_tokens": 905, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657355} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657355} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657389} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657391} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657391} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657391} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657397} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657459} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657462} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657462} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657462} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657473} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657474} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657476} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657476} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657476} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 605, "completion_tokens": 40, "total_tokens": 645, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657481} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657481} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657535} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657537} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657537} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657537} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 605, "completion_tokens": 214, "total_tokens": 819, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657541} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746657541} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746658868} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746658868} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746658868} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746658868} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746658873} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746658947} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746658947} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659079} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 40797, "completion_tokens": 630, "total_tokens": 41427, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659096} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659220} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 41689, "completion_tokens": 808, "total_tokens": 42497, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659238} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659274} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659277} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659277} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659277} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659279} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659294} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659296} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659296} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659296} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659297} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659303} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659305} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659305} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659305} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659310} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659316} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746659316} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746660773} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746660774} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746660774} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746660777} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661684} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661684} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661684} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661684} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 6018, "completion_tokens": 231, "total_tokens": 6249, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661749} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661749} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661993} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661993} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661993} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746661998} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662225} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662225} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662225} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662226} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662230} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662273} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662273} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 14331, "completion_tokens": 2421, "total_tokens": 16752, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662373} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662390} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 17412, "completion_tokens": 2765, "total_tokens": 20177, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662420} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662480} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662488} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662513} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662513} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 23117, "completion_tokens": 1083, "total_tokens": 24200, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662558} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662591} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662601} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662606} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662610} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662701} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662833} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662833} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662833} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662833} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662878} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662879} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662879} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662879} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 14673, "completion_tokens": 281, "total_tokens": 14954, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662896} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662896} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662898} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662900} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662909} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746662959} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 16375, "completion_tokens": 343, "total_tokens": 16718, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663063} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663153} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663154} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663154} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663154} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663170} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663207} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663207} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663212} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663213} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663213} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663216} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 11173, "completion_tokens": 947, "total_tokens": 12120, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663253} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663802} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663926} -{"event": "repo", "properties": {"num_files": 617}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663926} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663926} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746663929} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746664012} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746664482} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746664482} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746664482} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746664482} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 19959, "completion_tokens": 176, "total_tokens": 20135, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746664554} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746664554} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666729} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666730} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666730} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666733} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666821} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666822} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666822} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666825} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666956} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666956} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666956} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.0-flash", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.0-flash", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666956} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666960} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666962} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666962} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666962} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666966} -{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666968} -{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666988} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666997} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666997} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666997} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666997} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666999} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746666999} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667009} {"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667011} {"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667027} {"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667033} @@ -998,3 +829,172 @@ {"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741206} {"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741208} {"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741243} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741377} +{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741377} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741384} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741385} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741385} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741385} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741388} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741388} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 4335, "completion_tokens": 1387, "total_tokens": 5722, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741410} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741467} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6505, "completion_tokens": 1110, "total_tokens": 7615, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741488} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741511} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741511} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741532} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741532} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 7902, "completion_tokens": 920, "total_tokens": 8822, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741538} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741601} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741601} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8862, "completion_tokens": 194, "total_tokens": 9056, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741609} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741671} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741671} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 9155, "completion_tokens": 462, "total_tokens": 9617, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741683} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741695} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9895, "completion_tokens": 88, "total_tokens": 9983, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741700} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741775} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741804} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741804} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741804} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741805} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741809} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741816} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741829} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741829} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 16879, "completion_tokens": 935, "total_tokens": 17814, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741873} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741906} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741908} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741912} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741912} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 12536, "completion_tokens": 933, "total_tokens": 13469, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741942} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742038} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742115} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742120} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742120} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 11006, "completion_tokens": 326, "total_tokens": 11332, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742135} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742147} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742455} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742470} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 13513, "completion_tokens": 112, "total_tokens": 13625, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742482} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742487} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 22061, "completion_tokens": 1859, "total_tokens": 23920, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742513} +{"event": "command_reset", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742530} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742532} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742538} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742603} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742689} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742874} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742915} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8099, "completion_tokens": 195, "total_tokens": 8294, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742987} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743044} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743046} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 35736, "completion_tokens": 428, "total_tokens": 36164, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743115} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743115} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index fe10d0dc6..dd3db2165 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,10 +264,10 @@ tr:hover { background-color: #f5f5f5; } - - - - + + + + From d3931f67cabcd68732294c5085cf8d022c977012 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:32:50 -0700 Subject: [PATCH 274/459] feat: Enhance spinner with head and trailing effect --- aider/utils.py | 100 +++++++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index ccd5fc334..c1bf9ca5f 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -258,27 +258,40 @@ class Spinner: self.visible = False self.is_tty = sys.stdout.isatty() - self.scanner_width = 7 # Width of the scanning area (e.g., 7 for "[---■--]") + # -------------------------------------------------------------- + # Spinner configuration + # -------------------------------------------------------------- + # Logical width of the animation area inside the brackets + self.scanner_width = 7 self.scanner_pos = 0 - self.scanner_dir = 1 if self.scanner_width > 1 else 0 # Direction of scanner movement + self.scanner_dir = 1 if self.scanner_width > 1 else 0 # 1 → right, -1 → left - # Attempt to use Unicode characters for the scanner, fallback to ASCII - self.scanner_char = "#" # ASCII fallback - self.trail_char = "-" # ASCII fallback + # Character palette – will be upgraded to Unicode if possible + self.scanner_head_char = "#" # One char per head position + self.trail_active_char = "=" # Recently-visited positions + self.trail_empty_char = "-" # Background + + # Visual lengths (number of logical positions) + self.scanner_head_length = 2 # "≡≡" + self.trail_active_length = 2 # "══" + + # Upgrade to Unicode glyphs when the terminal supports them if self.is_tty: try: - # Test print Unicode chars and erase them to check encoding support - sys.stdout.write("■─") + sys.stdout.write("≡═─") sys.stdout.flush() - sys.stdout.write("\b\b \b\b") # Backspace, write spaces, backspace + sys.stdout.write("\b\b\b \b\b\b") sys.stdout.flush() - self.scanner_char = "≡" # Unicode - self.trail_char = "─" # Unicode + self.scanner_head_char = "≡" + self.trail_active_char = "═" + self.trail_empty_char = "─" except UnicodeEncodeError: - pass # Stick to ASCII fallbacks - except Exception: # Catch other potential IO errors on strange terminals pass - self.animation_len = self.scanner_width + 2 # For brackets like "[]" + except Exception: + pass + + # Cached length of the animation segment (inside the []) + self.animation_len = self.scanner_width + 2 def step(self): if not self.is_tty: @@ -296,45 +309,42 @@ class Spinner: if not self.visible: return - frame_chars = [self.trail_char] * self.scanner_width - # Ensure scanner_pos is within bounds for frame assignment - current_pos_in_frame = max(0, min(self.scanner_pos, self.scanner_width - 1)) + # Start with an empty frame + frame_chars = [self.trail_empty_char] * self.scanner_width - if self.scanner_width > 0: # Only place char if width is positive - frame_chars[current_pos_in_frame] = self.scanner_char + # Place the 2-character head + head_start = max(0, min(self.scanner_pos, self.scanner_width - self.scanner_head_length)) + head_end = head_start + self.scanner_head_length - 1 + for i in range(self.scanner_head_length): + pos = head_start + i + if 0 <= pos < self.scanner_width: + frame_chars[pos] = self.scanner_head_char - animation_content = "".join(frame_chars) # Content inside brackets, e.g., "---■--" - animation_segment = f"[{animation_content}]" # Full animation part, e.g., "[---■--]" + # Add the active trail directly behind the head + for i in range(1, self.trail_active_length + 1): + if self.scanner_dir > 0: # moving right → trail to the left + pos = head_start - i + else: # moving left → trail to the right + pos = head_end + i + if 0 <= pos < self.scanner_width and frame_chars[pos] == self.trail_empty_char: + frame_chars[pos] = self.trail_active_char + + animation_content = "".join(frame_chars) + animation_segment = f"[{animation_content}]" - # Print the entire line to display it full_line_output = f"\r{self.text} {animation_segment}" sys.stdout.write(full_line_output) + sys.stdout.flush() - # Now, calculate backspaces to position cursor on the scanner_char - # Only if scanner_char was actually placed (i.e., scanner_width > 0) - if self.scanner_width > 0: - # Number of characters in animation_content *after* the scanner_char - # (self.scanner_width - 1) is the last index of animation_content. - # So, (self.scanner_width - 1) - current_pos_in_frame gives count of chars after. - chars_in_content_after_scanner = (self.scanner_width - 1) - current_pos_in_frame - - # We also need to backspace over the closing bracket ']' - num_backspaces = chars_in_content_after_scanner + 1 - - num_backspaces = max(0, num_backspaces) + 1 # Ensure not negative - sys.stdout.write("\b" * num_backspaces) - - sys.stdout.flush() # Flush after all writes for this frame - - # Update scanner position for the next frame - if self.scanner_width > 1: + # Advance for next frame + if self.scanner_width > self.scanner_head_length: self.scanner_pos += self.scanner_dir - if self.scanner_pos >= self.scanner_width - 1: # Reached or passed the end - self.scanner_pos = self.scanner_width - 1 # Pin to end - self.scanner_dir = -1 # Reverse direction - elif self.scanner_pos <= 0: # Reached or passed the beginning - self.scanner_pos = 0 # Pin to start - self.scanner_dir = 1 # Reverse direction + if self.scanner_dir > 0 and self.scanner_pos >= self.scanner_width - self.scanner_head_length: + self.scanner_pos = self.scanner_width - self.scanner_head_length + self.scanner_dir = -1 + elif self.scanner_dir < 0 and self.scanner_pos <= 0: + self.scanner_pos = 0 + self.scanner_dir = 1 def end(self): if self.visible and self.is_tty: From 540b2519c29ca0d100ce1547c66fad52e273f1cc Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:32:56 -0700 Subject: [PATCH 275/459] style: Run linter --- aider/utils.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index c1bf9ca5f..844bceee1 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -267,13 +267,13 @@ class Spinner: self.scanner_dir = 1 if self.scanner_width > 1 else 0 # 1 → right, -1 → left # Character palette – will be upgraded to Unicode if possible - self.scanner_head_char = "#" # One char per head position - self.trail_active_char = "=" # Recently-visited positions - self.trail_empty_char = "-" # Background + self.scanner_head_char = "#" # One char per head position + self.trail_active_char = "=" # Recently-visited positions + self.trail_empty_char = "-" # Background # Visual lengths (number of logical positions) - self.scanner_head_length = 2 # "≡≡" - self.trail_active_length = 2 # "══" + self.scanner_head_length = 2 # "≡≡" + self.trail_active_length = 2 # "══" # Upgrade to Unicode glyphs when the terminal supports them if self.is_tty: @@ -322,9 +322,9 @@ class Spinner: # Add the active trail directly behind the head for i in range(1, self.trail_active_length + 1): - if self.scanner_dir > 0: # moving right → trail to the left + if self.scanner_dir > 0: # moving right → trail to the left pos = head_start - i - else: # moving left → trail to the right + else: # moving left → trail to the right pos = head_end + i if 0 <= pos < self.scanner_width and frame_chars[pos] == self.trail_empty_char: frame_chars[pos] = self.trail_active_char @@ -339,7 +339,10 @@ class Spinner: # Advance for next frame if self.scanner_width > self.scanner_head_length: self.scanner_pos += self.scanner_dir - if self.scanner_dir > 0 and self.scanner_pos >= self.scanner_width - self.scanner_head_length: + if ( + self.scanner_dir > 0 + and self.scanner_pos >= self.scanner_width - self.scanner_head_length + ): self.scanner_pos = self.scanner_width - self.scanner_head_length self.scanner_dir = -1 elif self.scanner_dir < 0 and self.scanner_pos <= 0: From 80f78ee85dfd3aef05a831e20c343257559c42af Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 15:33:17 -0700 Subject: [PATCH 276/459] feat: add waiting module --- aider/waiting.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 aider/waiting.py diff --git a/aider/waiting.py b/aider/waiting.py new file mode 100644 index 000000000..e69de29bb From 21a05ead4ef637df0cc883d4780b92bd4bccafde Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:33:19 -0700 Subject: [PATCH 277/459] refactor: Extract WaitingSpinner to its own module --- aider/mdstream.py | 26 ++++++++++------------- aider/waiting.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/aider/mdstream.py b/aider/mdstream.py index 8820d7261..0611a806d 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -13,7 +13,7 @@ from rich.syntax import Syntax from rich.text import Text from aider.dump import dump # noqa: F401 -from aider.utils import Spinner +from aider.waiting import WaitingSpinner _text_prefix = """ # Header @@ -117,12 +117,11 @@ class MarkdownStream: else: self.mdargs = dict() - # Defer Live creation until the first update so the Spinner can be shown. + # Defer Live creation until the first update so the spinner can be shown. self.live = None - self.spinner = Spinner("Waiting for LLM") - self._spinner_stop_event = threading.Event() - self._spinner_thread = threading.Thread(target=self._spin, daemon=True) - self._spinner_thread.start() + self.waiting_spinner = WaitingSpinner("Waiting for LLM") + self.waiting_spinner.start() + self._spinner_running = True self._live_started = False def _spin(self): @@ -159,12 +158,10 @@ class MarkdownStream: except Exception: pass # Ignore any errors during cleanup - # Ensure the spinner thread is properly shut down - if hasattr(self, "_spinner_stop_event"): - self._spinner_stop_event.set() - if hasattr(self, "_spinner_thread") and self._spinner_thread.is_alive(): + # Ensure the spinner is properly shut down + if getattr(self, "_spinner_running", False): try: - self._spinner_thread.join(timeout=0.1) + self.waiting_spinner.stop() except Exception: pass @@ -187,10 +184,9 @@ class MarkdownStream: """ # On the first call, stop the spinner and start the Live renderer if not getattr(self, "_live_started", False): - if hasattr(self, "_spinner_stop_event"): - self._spinner_stop_event.set() - if hasattr(self, "_spinner_thread"): - self._spinner_thread.join() + if getattr(self, "_spinner_running", False): + self.waiting_spinner.stop() + self._spinner_running = False self.live = Live(Text(""), refresh_per_second=1.0 / self.min_delay) self.live.start() self._live_started = True diff --git a/aider/waiting.py b/aider/waiting.py index e69de29bb..c0b121e74 100644 --- a/aider/waiting.py +++ b/aider/waiting.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +""" +Thread-based, killable spinner utility. + +Use it like: + + from aider.waiting import WaitingSpinner + + spinner = WaitingSpinner("Waiting for LLM") + spinner.start() + ... # long task + spinner.stop() +""" + +import threading +import time + +from aider.utils import Spinner + + +class WaitingSpinner: + """Background spinner that can be started/stopped safely.""" + + def __init__(self, text: str = "Waiting for LLM", delay: float = 0.15): + self.spinner = Spinner(text) + self.delay = delay + self._stop_event = threading.Event() + self._thread = threading.Thread(target=self._spin, daemon=True) + + def _spin(self): + while not self._stop_event.is_set(): + time.sleep(self.delay) + self.spinner.step() + self.spinner.end() + + def start(self): + """Start the spinner in a background thread.""" + if not self._thread.is_alive(): + self._thread.start() + + def stop(self): + """Request the spinner to stop and wait briefly for the thread to exit.""" + self._stop_event.set() + if self._thread.is_alive(): + self._thread.join(timeout=0.1) + + # Allow use as a context-manager + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop() From 98dc8e5d57b6769925898e3fecbab37cd180ad46 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:33:34 -0700 Subject: [PATCH 278/459] fix: Remove unused threading import --- aider/mdstream.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/mdstream.py b/aider/mdstream.py index 0611a806d..186ef7624 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -1,7 +1,6 @@ #!/usr/bin/env python import io -import threading import time from rich import box From cf1d58745e3f790e2b7edc3fdedd438d3c508842 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 15:38:19 -0700 Subject: [PATCH 279/459] Revert "style: Run linter" This reverts commit 540b2519c29ca0d100ce1547c66fad52e273f1cc. --- aider/utils.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 844bceee1..c1bf9ca5f 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -267,13 +267,13 @@ class Spinner: self.scanner_dir = 1 if self.scanner_width > 1 else 0 # 1 → right, -1 → left # Character palette – will be upgraded to Unicode if possible - self.scanner_head_char = "#" # One char per head position - self.trail_active_char = "=" # Recently-visited positions - self.trail_empty_char = "-" # Background + self.scanner_head_char = "#" # One char per head position + self.trail_active_char = "=" # Recently-visited positions + self.trail_empty_char = "-" # Background # Visual lengths (number of logical positions) - self.scanner_head_length = 2 # "≡≡" - self.trail_active_length = 2 # "══" + self.scanner_head_length = 2 # "≡≡" + self.trail_active_length = 2 # "══" # Upgrade to Unicode glyphs when the terminal supports them if self.is_tty: @@ -322,9 +322,9 @@ class Spinner: # Add the active trail directly behind the head for i in range(1, self.trail_active_length + 1): - if self.scanner_dir > 0: # moving right → trail to the left + if self.scanner_dir > 0: # moving right → trail to the left pos = head_start - i - else: # moving left → trail to the right + else: # moving left → trail to the right pos = head_end + i if 0 <= pos < self.scanner_width and frame_chars[pos] == self.trail_empty_char: frame_chars[pos] = self.trail_active_char @@ -339,10 +339,7 @@ class Spinner: # Advance for next frame if self.scanner_width > self.scanner_head_length: self.scanner_pos += self.scanner_dir - if ( - self.scanner_dir > 0 - and self.scanner_pos >= self.scanner_width - self.scanner_head_length - ): + if self.scanner_dir > 0 and self.scanner_pos >= self.scanner_width - self.scanner_head_length: self.scanner_pos = self.scanner_width - self.scanner_head_length self.scanner_dir = -1 elif self.scanner_dir < 0 and self.scanner_pos <= 0: From a1cb86dca380657fbbabf7de7ccb3eb6cae6ca50 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 15:38:34 -0700 Subject: [PATCH 280/459] Revert "feat: Enhance spinner with head and trailing effect" This reverts commit d3931f67cabcd68732294c5085cf8d022c977012. --- aider/utils.py | 100 ++++++++++++++++++++++--------------------------- 1 file changed, 45 insertions(+), 55 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index c1bf9ca5f..ccd5fc334 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -258,40 +258,27 @@ class Spinner: self.visible = False self.is_tty = sys.stdout.isatty() - # -------------------------------------------------------------- - # Spinner configuration - # -------------------------------------------------------------- - # Logical width of the animation area inside the brackets - self.scanner_width = 7 + self.scanner_width = 7 # Width of the scanning area (e.g., 7 for "[---■--]") self.scanner_pos = 0 - self.scanner_dir = 1 if self.scanner_width > 1 else 0 # 1 → right, -1 → left + self.scanner_dir = 1 if self.scanner_width > 1 else 0 # Direction of scanner movement - # Character palette – will be upgraded to Unicode if possible - self.scanner_head_char = "#" # One char per head position - self.trail_active_char = "=" # Recently-visited positions - self.trail_empty_char = "-" # Background - - # Visual lengths (number of logical positions) - self.scanner_head_length = 2 # "≡≡" - self.trail_active_length = 2 # "══" - - # Upgrade to Unicode glyphs when the terminal supports them + # Attempt to use Unicode characters for the scanner, fallback to ASCII + self.scanner_char = "#" # ASCII fallback + self.trail_char = "-" # ASCII fallback if self.is_tty: try: - sys.stdout.write("≡═─") + # Test print Unicode chars and erase them to check encoding support + sys.stdout.write("■─") sys.stdout.flush() - sys.stdout.write("\b\b\b \b\b\b") + sys.stdout.write("\b\b \b\b") # Backspace, write spaces, backspace sys.stdout.flush() - self.scanner_head_char = "≡" - self.trail_active_char = "═" - self.trail_empty_char = "─" + self.scanner_char = "≡" # Unicode + self.trail_char = "─" # Unicode except UnicodeEncodeError: + pass # Stick to ASCII fallbacks + except Exception: # Catch other potential IO errors on strange terminals pass - except Exception: - pass - - # Cached length of the animation segment (inside the []) - self.animation_len = self.scanner_width + 2 + self.animation_len = self.scanner_width + 2 # For brackets like "[]" def step(self): if not self.is_tty: @@ -309,42 +296,45 @@ class Spinner: if not self.visible: return - # Start with an empty frame - frame_chars = [self.trail_empty_char] * self.scanner_width + frame_chars = [self.trail_char] * self.scanner_width + # Ensure scanner_pos is within bounds for frame assignment + current_pos_in_frame = max(0, min(self.scanner_pos, self.scanner_width - 1)) - # Place the 2-character head - head_start = max(0, min(self.scanner_pos, self.scanner_width - self.scanner_head_length)) - head_end = head_start + self.scanner_head_length - 1 - for i in range(self.scanner_head_length): - pos = head_start + i - if 0 <= pos < self.scanner_width: - frame_chars[pos] = self.scanner_head_char + if self.scanner_width > 0: # Only place char if width is positive + frame_chars[current_pos_in_frame] = self.scanner_char - # Add the active trail directly behind the head - for i in range(1, self.trail_active_length + 1): - if self.scanner_dir > 0: # moving right → trail to the left - pos = head_start - i - else: # moving left → trail to the right - pos = head_end + i - if 0 <= pos < self.scanner_width and frame_chars[pos] == self.trail_empty_char: - frame_chars[pos] = self.trail_active_char - - animation_content = "".join(frame_chars) - animation_segment = f"[{animation_content}]" + animation_content = "".join(frame_chars) # Content inside brackets, e.g., "---■--" + animation_segment = f"[{animation_content}]" # Full animation part, e.g., "[---■--]" + # Print the entire line to display it full_line_output = f"\r{self.text} {animation_segment}" sys.stdout.write(full_line_output) - sys.stdout.flush() - # Advance for next frame - if self.scanner_width > self.scanner_head_length: + # Now, calculate backspaces to position cursor on the scanner_char + # Only if scanner_char was actually placed (i.e., scanner_width > 0) + if self.scanner_width > 0: + # Number of characters in animation_content *after* the scanner_char + # (self.scanner_width - 1) is the last index of animation_content. + # So, (self.scanner_width - 1) - current_pos_in_frame gives count of chars after. + chars_in_content_after_scanner = (self.scanner_width - 1) - current_pos_in_frame + + # We also need to backspace over the closing bracket ']' + num_backspaces = chars_in_content_after_scanner + 1 + + num_backspaces = max(0, num_backspaces) + 1 # Ensure not negative + sys.stdout.write("\b" * num_backspaces) + + sys.stdout.flush() # Flush after all writes for this frame + + # Update scanner position for the next frame + if self.scanner_width > 1: self.scanner_pos += self.scanner_dir - if self.scanner_dir > 0 and self.scanner_pos >= self.scanner_width - self.scanner_head_length: - self.scanner_pos = self.scanner_width - self.scanner_head_length - self.scanner_dir = -1 - elif self.scanner_dir < 0 and self.scanner_pos <= 0: - self.scanner_pos = 0 - self.scanner_dir = 1 + if self.scanner_pos >= self.scanner_width - 1: # Reached or passed the end + self.scanner_pos = self.scanner_width - 1 # Pin to end + self.scanner_dir = -1 # Reverse direction + elif self.scanner_pos <= 0: # Reached or passed the beginning + self.scanner_pos = 0 # Pin to start + self.scanner_dir = 1 # Reverse direction def end(self): if self.visible and self.is_tty: From f1121e3b7cd2e1cff1108ae0e9c46d7449bb2377 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:41:43 -0700 Subject: [PATCH 281/459] feat: add waiting spinner for non-streaming pretty mode --- aider/coders/base_coder.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index b29347352..d356330e3 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -44,7 +44,13 @@ from aider.reasoning_tags import ( from aider.repo import ANY_GIT_ERROR, GitRepo from aider.repomap import RepoMap from aider.run_cmd import run_cmd -from aider.utils import format_content, format_messages, format_tokens, is_image_file +from aider.utils import ( + format_content, + format_messages, + format_tokens, + is_image_file, +) +from aider.waiting import WaitingSpinner from ..dump import dump # noqa: F401 from .chat_chunks import ChatChunks @@ -571,6 +577,15 @@ class Coder: if not self.pretty: return False + def _stop_waiting_spinner(self): + """Stop and clear the waiting spinner if it is running.""" + spinner = getattr(self, "waiting_spinner", None) + if spinner: + try: + spinner.stop() + finally: + self.waiting_spinner = None + # only show pretty output if fences are the normal triple-backtick if self.fence[0][0] != "`": return False @@ -1410,6 +1425,10 @@ class Coder: self.multi_response_content = "" if self.show_pretty() and self.stream: self.mdstream = self.io.get_assistant_mdstream() + elif self.show_pretty(): # pretty output but NOT streaming + self.waiting_spinner = WaitingSpinner("Waiting for LLM") + self.waiting_spinner.start() + self.mdstream = None else: self.mdstream = None @@ -1482,6 +1501,9 @@ class Coder: self.live_incremental_response(True) self.mdstream = None + # Ensure any waiting spinner is stopped + self._stop_waiting_spinner() + self.partial_response_content = self.get_multi_response_content_in_progress(True) self.remove_reasoning_content() self.multi_response_content = "" @@ -1798,6 +1820,9 @@ class Coder: self.io.ai_output(json.dumps(args, indent=4)) def show_send_output(self, completion): + # Stop spinner once we have a response + self._stop_waiting_spinner() + if self.verbose: print(completion) From ede3061fe0da4bfda80b80119b64582c43e91afe Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:42:30 -0700 Subject: [PATCH 282/459] style: Format imports in base_coder.py --- aider/coders/base_coder.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index d356330e3..c592b7ebd 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -44,12 +44,7 @@ from aider.reasoning_tags import ( from aider.repo import ANY_GIT_ERROR, GitRepo from aider.repomap import RepoMap from aider.run_cmd import run_cmd -from aider.utils import ( - format_content, - format_messages, - format_tokens, - is_image_file, -) +from aider.utils import format_content, format_messages, format_tokens, is_image_file from aider.waiting import WaitingSpinner from ..dump import dump # noqa: F401 From 6351964bcdae45b811757f9c3e5a388daebb8c57 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:43:03 -0700 Subject: [PATCH 283/459] fix: Make _stop_waiting_spinner a method of Coder --- aider/coders/base_coder.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index c592b7ebd..f4a8cb2e4 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -572,14 +572,6 @@ class Coder: if not self.pretty: return False - def _stop_waiting_spinner(self): - """Stop and clear the waiting spinner if it is running.""" - spinner = getattr(self, "waiting_spinner", None) - if spinner: - try: - spinner.stop() - finally: - self.waiting_spinner = None # only show pretty output if fences are the normal triple-backtick if self.fence[0][0] != "`": @@ -587,6 +579,15 @@ class Coder: return True + def _stop_waiting_spinner(self): + """Stop and clear the waiting spinner if it is running.""" + spinner = getattr(self, "waiting_spinner", None) + if spinner: + try: + spinner.stop() + finally: + self.waiting_spinner = None + def get_abs_fnames_content(self): for fname in list(self.abs_fnames): content = self.io.read_text(fname) From e6a35be5b7ea68dcecdaa3ea750752698d6218db Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:43:52 -0700 Subject: [PATCH 284/459] style: Run linter --- aider/coders/base_coder.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index f4a8cb2e4..5a04da7ad 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -572,7 +572,6 @@ class Coder: if not self.pretty: return False - # only show pretty output if fences are the normal triple-backtick if self.fence[0][0] != "`": return False From 18f702b95ae05db1bd7be45b0daff4be0db6e9ae Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:48:40 -0700 Subject: [PATCH 285/459] refactor: Simplify spinner animation by pre-rendering frames --- aider/utils.py | 129 ++++++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 71 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index ccd5fc334..2f49c6170 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -251,95 +251,82 @@ def run_install(cmd): class Spinner: - def __init__(self, text): + """ + Minimal spinner that scans a single marker back and forth across a line. + + The animation is pre-rendered into a list of frames. If the terminal + cannot display unicode the frames are converted to plain ASCII. + """ + + def __init__(self, text: str, width: int = 7): self.text = text + self.width = max(1, width) self.start_time = time.time() - self.last_update = 0 + self.last_update = 0.0 self.visible = False self.is_tty = sys.stdout.isatty() - self.scanner_width = 7 # Width of the scanning area (e.g., 7 for "[---■--]") - self.scanner_pos = 0 - self.scanner_dir = 1 if self.scanner_width > 1 else 0 # Direction of scanner movement + # Decide which characters to use + scan_char, trail_char = "≡", "─" + if not self._supports_unicode(): + scan_char, trail_char = "#", "-" - # Attempt to use Unicode characters for the scanner, fallback to ASCII - self.scanner_char = "#" # ASCII fallback - self.trail_char = "-" # ASCII fallback - if self.is_tty: - try: - # Test print Unicode chars and erase them to check encoding support - sys.stdout.write("■─") - sys.stdout.flush() - sys.stdout.write("\b\b \b\b") # Backspace, write spaces, backspace - sys.stdout.flush() - self.scanner_char = "≡" # Unicode - self.trail_char = "─" # Unicode - except UnicodeEncodeError: - pass # Stick to ASCII fallbacks - except Exception: # Catch other potential IO errors on strange terminals - pass - self.animation_len = self.scanner_width + 2 # For brackets like "[]" + # Build the animation frames + forward = [ + f"[{trail_char * pos}{scan_char}{trail_char * (self.width - 1 - pos)}]" + for pos in range(self.width) + ] + self.frames = forward + forward[-2:0:-1] # bounce back + self.frame_idx = 0 + self.scan_char = scan_char + self.animation_len = len(self.frames[0]) - def step(self): + def _supports_unicode(self) -> bool: + if not self.is_tty: + return False + try: + sys.stdout.write("∎\b \b") + sys.stdout.flush() + return True + except UnicodeEncodeError: + return False + except Exception: + return False + + def _next_frame(self) -> str: + frame = self.frames[self.frame_idx] + self.frame_idx = (self.frame_idx + 1) % len(self.frames) + return frame + + def step(self) -> None: if not self.is_tty: return - current_time = time.time() - if not self.visible and current_time - self.start_time >= 0.5: + now = time.time() + if not self.visible and now - self.start_time >= 0.5: self.visible = True - self._step() - elif self.visible and current_time - self.last_update >= 0.1: - self._step() - self.last_update = current_time + self.last_update = 0.0 - def _step(self): - if not self.visible: + if not self.visible or now - self.last_update < 0.1: return - frame_chars = [self.trail_char] * self.scanner_width - # Ensure scanner_pos is within bounds for frame assignment - current_pos_in_frame = max(0, min(self.scanner_pos, self.scanner_width - 1)) + self.last_update = now + frame = self._next_frame() - if self.scanner_width > 0: # Only place char if width is positive - frame_chars[current_pos_in_frame] = self.scanner_char + sys.stdout.write(f"\r{self.text} {frame}") - animation_content = "".join(frame_chars) # Content inside brackets, e.g., "---■--" - animation_segment = f"[{animation_content}]" # Full animation part, e.g., "[---■--]" + # Backspace cursor to the scanner character + pos_in_content = frame.find(self.scan_char) - 1 # exclude '[' + chars_after_scanner = (self.width - 1) - pos_in_content + num_backspaces = max(0, chars_after_scanner + 2) # +']' and extra + sys.stdout.write("\b" * num_backspaces) + sys.stdout.flush() - # Print the entire line to display it - full_line_output = f"\r{self.text} {animation_segment}" - sys.stdout.write(full_line_output) - - # Now, calculate backspaces to position cursor on the scanner_char - # Only if scanner_char was actually placed (i.e., scanner_width > 0) - if self.scanner_width > 0: - # Number of characters in animation_content *after* the scanner_char - # (self.scanner_width - 1) is the last index of animation_content. - # So, (self.scanner_width - 1) - current_pos_in_frame gives count of chars after. - chars_in_content_after_scanner = (self.scanner_width - 1) - current_pos_in_frame - - # We also need to backspace over the closing bracket ']' - num_backspaces = chars_in_content_after_scanner + 1 - - num_backspaces = max(0, num_backspaces) + 1 # Ensure not negative - sys.stdout.write("\b" * num_backspaces) - - sys.stdout.flush() # Flush after all writes for this frame - - # Update scanner position for the next frame - if self.scanner_width > 1: - self.scanner_pos += self.scanner_dir - if self.scanner_pos >= self.scanner_width - 1: # Reached or passed the end - self.scanner_pos = self.scanner_width - 1 # Pin to end - self.scanner_dir = -1 # Reverse direction - elif self.scanner_pos <= 0: # Reached or passed the beginning - self.scanner_pos = 0 # Pin to start - self.scanner_dir = 1 # Reverse direction - - def end(self): + def end(self) -> None: if self.visible and self.is_tty: - clear_len = len(self.text) + 1 + self.animation_len # text + space + animation segment - print("\r" + " " * clear_len + "\r", end="", flush=True) # Clear line and reset cursor + clear_len = len(self.text) + 1 + self.animation_len + sys.stdout.write("\r" + " " * clear_len + "\r") + sys.stdout.flush() self.visible = False From 5bb891b2bbdce62746b52f909b50c299f347a062 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:51:37 -0700 Subject: [PATCH 286/459] refactor: Use pre-defined ASCII frames for spinner animation --- aider/utils.py | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 2f49c6170..0ec5ad5cc 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -260,26 +260,37 @@ class Spinner: def __init__(self, text: str, width: int = 7): self.text = text - self.width = max(1, width) self.start_time = time.time() self.last_update = 0.0 self.visible = False self.is_tty = sys.stdout.isatty() - # Decide which characters to use - scan_char, trail_char = "≡", "─" - if not self._supports_unicode(): - scan_char, trail_char = "#", "-" + # Pre-render the animation frames using pure ASCII so they will + # always display, even on very limited terminals. + ascii_forward = """ +[#------] +[-#-----] +[--#----] +[---#---] +[----#--] +[-----#-] +[------#] +""".strip().splitlines() - # Build the animation frames - forward = [ - f"[{trail_char * pos}{scan_char}{trail_char * (self.width - 1 - pos)}]" - for pos in range(self.width) - ] - self.frames = forward + forward[-2:0:-1] # bounce back + # If unicode is supported, swap the ASCII chars for nicer glyphs. + if self._supports_unicode(): + scan_char, trail_char = "≡", "─" + forward = [f.replace("#", scan_char).replace("-", trail_char) for f in ascii_forward] + else: + scan_char, trail_char = "#", "-" + forward = ascii_forward + + # Bounce the scanner back and forth. + self.frames = forward + forward[-2:0:-1] self.frame_idx = 0 self.scan_char = scan_char - self.animation_len = len(self.frames[0]) + self.width = len(forward[0]) - 2 # number of chars between the brackets + self.animation_len = len(forward[0]) def _supports_unicode(self) -> bool: if not self.is_tty: From 3a5a46253df244b5c0d2ff05ddcb511c04077805 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 15:57:56 -0700 Subject: [PATCH 287/459] feat: redesign spinner animation with tail --- aider/utils.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 0ec5ad5cc..b8b1e7b15 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -267,36 +267,43 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. - ascii_forward = """ -[#------] -[-#-----] -[--#----] -[---#---] -[----#--] -[-----#-] -[------#] + ascii_frames = """ +[#=-----] +[=#-----] +[-=#----] +[--=#---] +[---=#--] +[----=#-] +[-----=#] +[-----#=] +[----#=-] +[---#=--] +[---#=--] +[---#=--] +[--#=---] +[-#=----] """.strip().splitlines() # If unicode is supported, swap the ASCII chars for nicer glyphs. if self._supports_unicode(): - scan_char, trail_char = "≡", "─" - forward = [f.replace("#", scan_char).replace("-", trail_char) for f in ascii_forward] + scan_char, tail_char, trail_char = "≡", "=", "─" + frames = [f.replace("#", scan_char).replace("-", trail_char) for f in ascii_frames] else: - scan_char, trail_char = "#", "-" - forward = ascii_forward + scan_char, tail_char, trail_char = "#", "=", "-" + frames = ascii_frames # Bounce the scanner back and forth. - self.frames = forward + forward[-2:0:-1] + self.frames = frames self.frame_idx = 0 self.scan_char = scan_char - self.width = len(forward[0]) - 2 # number of chars between the brackets - self.animation_len = len(forward[0]) + self.width = len(frames[0]) - 2 # number of chars between the brackets + self.animation_len = len(frames[0]) def _supports_unicode(self) -> bool: if not self.is_tty: return False try: - sys.stdout.write("∎\b \b") + sys.stdout.write("≡\b─\b") sys.stdout.flush() return True except UnicodeEncodeError: From 01592afac3ae774923673a1b8bc2873e05f04c6d Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 15:58:04 -0700 Subject: [PATCH 288/459] fix: Remove unused variables in Spinner --- aider/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index b8b1e7b15..eb99d6e3b 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -286,10 +286,10 @@ class Spinner: # If unicode is supported, swap the ASCII chars for nicer glyphs. if self._supports_unicode(): - scan_char, tail_char, trail_char = "≡", "=", "─" + scan_char, _, trail_char = "≡", "=", "─" frames = [f.replace("#", scan_char).replace("-", trail_char) for f in ascii_frames] else: - scan_char, tail_char, trail_char = "#", "=", "-" + scan_char, _, _ = "#", "=", "-" frames = ascii_frames # Bounce the scanner back and forth. From 0864a7ca76a2f181b6efe24bfd870c7fd186d951 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 16:00:53 -0700 Subject: [PATCH 289/459] refactor: Prune spinner animation frames and char assignments --- aider/utils.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index eb99d6e3b..aff5cef86 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -278,18 +278,16 @@ class Spinner: [-----#=] [----#=-] [---#=--] -[---#=--] -[---#=--] [--#=---] [-#=----] """.strip().splitlines() # If unicode is supported, swap the ASCII chars for nicer glyphs. if self._supports_unicode(): - scan_char, _, trail_char = "≡", "=", "─" + scan_char, trail_char = "≡", "─" frames = [f.replace("#", scan_char).replace("-", trail_char) for f in ascii_frames] else: - scan_char, _, _ = "#", "=", "-" + scan_char, _ = "#", "-" frames = ascii_frames # Bounce the scanner back and forth. From befff1f22e4ead3ba68685f2507dbf9f64b9f951 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 16:06:44 -0700 Subject: [PATCH 290/459] refactor: Centralize spinner logic in BaseCoder --- aider/coders/base_coder.py | 11 +++++++---- aider/mdstream.py | 21 +-------------------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 5a04da7ad..f68e3bead 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -1418,12 +1418,13 @@ class Coder: utils.show_messages(messages, functions=self.functions) self.multi_response_content = "" - if self.show_pretty() and self.stream: - self.mdstream = self.io.get_assistant_mdstream() - elif self.show_pretty(): # pretty output but NOT streaming + if self.show_pretty(): self.waiting_spinner = WaitingSpinner("Waiting for LLM") self.waiting_spinner.start() - self.mdstream = None + if self.stream: + self.mdstream = self.io.get_assistant_mdstream() + else: + self.mdstream = None else: self.mdstream = None @@ -1932,6 +1933,8 @@ class Coder: except AttributeError: pass + if received_content: + self._stop_waiting_spinner() self.partial_response_content += text if self.show_pretty(): diff --git a/aider/mdstream.py b/aider/mdstream.py index 186ef7624..4e76d7735 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -12,7 +12,6 @@ from rich.syntax import Syntax from rich.text import Text from aider.dump import dump # noqa: F401 -from aider.waiting import WaitingSpinner _text_prefix = """ # Header @@ -116,19 +115,10 @@ class MarkdownStream: else: self.mdargs = dict() - # Defer Live creation until the first update so the spinner can be shown. + # Defer Live creation until the first update. self.live = None - self.waiting_spinner = WaitingSpinner("Waiting for LLM") - self.waiting_spinner.start() - self._spinner_running = True self._live_started = False - def _spin(self): - """Background thread that keeps the spinner moving until stopped.""" - while not self._spinner_stop_event.is_set(): - time.sleep(0.15) - self.spinner.step() - self.spinner.end() def _render_markdown_to_lines(self, text): """Render markdown text to a list of lines. @@ -157,12 +147,6 @@ class MarkdownStream: except Exception: pass # Ignore any errors during cleanup - # Ensure the spinner is properly shut down - if getattr(self, "_spinner_running", False): - try: - self.waiting_spinner.stop() - except Exception: - pass def update(self, text, final=False): """Update the displayed markdown content. @@ -183,9 +167,6 @@ class MarkdownStream: """ # On the first call, stop the spinner and start the Live renderer if not getattr(self, "_live_started", False): - if getattr(self, "_spinner_running", False): - self.waiting_spinner.stop() - self._spinner_running = False self.live = Live(Text(""), refresh_per_second=1.0 / self.min_delay) self.live.start() self._live_started = True From a22772b388d3b0dc1345c9b8eea044d702758c13 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 16:06:50 -0700 Subject: [PATCH 291/459] style: remove trailing whitespace --- aider/mdstream.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/aider/mdstream.py b/aider/mdstream.py index 4e76d7735..774b247c2 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -119,7 +119,6 @@ class MarkdownStream: self.live = None self._live_started = False - def _render_markdown_to_lines(self, text): """Render markdown text to a list of lines. @@ -147,7 +146,6 @@ class MarkdownStream: except Exception: pass # Ignore any errors during cleanup - def update(self, text, final=False): """Update the displayed markdown content. From 37601eb4b73b88b55a34e674f70e71c557b9d453 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 16:27:51 -0700 Subject: [PATCH 292/459] copy --- HISTORY.md | 12 +- aider/website/HISTORY.md | 12 +- aider/website/assets/sample-analytics.jsonl | 406 ++++++++++---------- aider/website/docs/faq.md | 8 +- 4 files changed, 219 insertions(+), 219 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 7ae35fedb..4d53857ca 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,8 +2,8 @@ ### main branch -- Added support for `qwen3-235b` models. - Added support for `gemini-2.5-pro-preview-05-06` models. +- Added support for `qwen3-235b` models. - Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. - Added a spinner animation while waiting for the LLM to start streaming its response. - Updated the spinner animation to a Knight Rider style. @@ -26,7 +26,11 @@ - Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. - Improved display of filenames in the prompt header using rich Text formatting. - Enabled `reasoning_effort` for Gemini 2.5 Flash models. - - Aider wrote 53% of the code in this release. +- Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). +- Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. +- Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). +- The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. +- Aider wrote 53% of the code in this release. ### Aider v0.82.3 @@ -40,10 +44,6 @@ - Set Gemini 2.5 Pro models to use the `overeager` prompt setting by default. - Add common file types (`.svg`, `.pdf`) to the default list of ignored files for AI comment scanning (`--watch`). - Skip scanning files larger than 1MB for AI comments (`--watch`). - - Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). - - Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. - - Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). - - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. ### Aider v0.82.2 diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index e1a3345ac..e2b26dd4e 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -26,8 +26,8 @@ cog.out(text) ### main branch -- Added support for `qwen3-235b` models. - Added support for `gemini-2.5-pro-preview-05-06` models. +- Added support for `qwen3-235b` models. - Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. - Added a spinner animation while waiting for the LLM to start streaming its response. - Updated the spinner animation to a Knight Rider style. @@ -50,7 +50,11 @@ cog.out(text) - Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. - Improved display of filenames in the prompt header using rich Text formatting. - Enabled `reasoning_effort` for Gemini 2.5 Flash models. - - Aider wrote 53% of the code in this release. +- Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). +- Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. +- Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). +- The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. +- Aider wrote 53% of the code in this release. ### Aider v0.82.3 @@ -64,10 +68,6 @@ cog.out(text) - Set Gemini 2.5 Pro models to use the `overeager` prompt setting by default. - Add common file types (`.svg`, `.pdf`) to the default list of ignored files for AI comment scanning (`--watch`). - Skip scanning files larger than 1MB for AI comments (`--watch`). - - Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). - - Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. - - Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). - - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. ### Aider v0.82.2 diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 9647720d6..183da114b 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,206 +1,3 @@ -{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667011} -{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667027} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667033} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667033} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667033} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667036} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667201} -{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667203} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667207} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667207} -{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667207} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667209} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667229} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667229} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667436} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667439} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667439} -{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667439} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667441} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 9655, "completion_tokens": 395, "total_tokens": 10050, "cost": 0.00168525, "total_cost": 0.00168525}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667458} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667467} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667467} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667540} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667540} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667540} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667540} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 23450, "completion_tokens": 234, "total_tokens": 23684, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667620} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746667620} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675029} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675031} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675031} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675031} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675037} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675041} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675042} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675042} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675042} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "diff-fenced", "prompt_tokens": 2505, "completion_tokens": 19, "total_tokens": 2524, "cost": 0.0033212500000000004, "total_cost": 0.0033212500000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675045} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675045} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675108} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675108} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675108} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675108} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "diff-fenced", "prompt_tokens": 2505, "completion_tokens": 19, "total_tokens": 2524, "cost": 0.0033212500000000004, "total_cost": 0.0033212500000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675112} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675112} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675128} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675128} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675128} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746675131} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676184} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676184} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676184} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676184} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "diff-fenced", "prompt_tokens": 2505, "completion_tokens": 10, "total_tokens": 2515, "cost": 0.00323125, "total_cost": 0.00323125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676188} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676188} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676219} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676219} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676219} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676219} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "diff-fenced", "prompt_tokens": 2505, "completion_tokens": 10, "total_tokens": 2515, "cost": 0.00323125, "total_cost": 0.00323125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676223} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676223} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676443} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676444} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676444} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676447} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676855} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676855} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676855} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676856} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676893} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676910} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 29573, "completion_tokens": 375, "total_tokens": 29948, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746676919} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746677172} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746677193} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746677231} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 30852, "completion_tokens": 632, "total_tokens": 31484, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746677275} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746677755} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746677755} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711728} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711729} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711729} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711732} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711971} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711974} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711974} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746711976} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712059} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712061} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712061} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712063} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712089} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712091} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712091} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712093} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712185} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712187} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712187} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712189} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712229} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712231} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712231} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712233} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712358} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712358} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712358} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712361} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712987} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712990} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712990} -{"event": "exit", "properties": {"reason": "Showed prompts"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746712992} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746714804} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746714807} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746714807} -{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746714807} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746714940} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746714940} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715733} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715734} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715734} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715734} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715766} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 14229, "completion_tokens": 151, "total_tokens": 14380, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715772} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715788} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 14847, "completion_tokens": 184, "total_tokens": 15031, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715794} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715812} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715812} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715863} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715863} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715863} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715863} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 26489, "completion_tokens": 334, "total_tokens": 26823, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715963} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746715963} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716073} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716073} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716073} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716073} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 26488, "completion_tokens": 403, "total_tokens": 26891, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716145} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746716145} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721958} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721960} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721960} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721960} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746721985} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722024} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722053} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 13638, "completion_tokens": 385, "total_tokens": 14023, "cost": 0.0208975, "total_cost": 0.0208975}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722068} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722095} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722098} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 17782, "completion_tokens": 1505, "total_tokens": 19287, "cost": 0.037277500000000005, "total_cost": 0.058175000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722171} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722185} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 20819, "completion_tokens": 108, "total_tokens": 20927, "cost": 0.027103750000000003, "total_cost": 0.08527875000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722191} -{"event": "command_diff", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722202} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722230} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722237} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722245} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722246} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 25435, "completion_tokens": 399, "total_tokens": 25834, "cost": 0.03578375, "total_cost": 0.12106250000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722299} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722331} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722335} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722340} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 29275, "completion_tokens": 659, "total_tokens": 29934, "cost": 0.04318375, "total_cost": 0.16424625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722360} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722369} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722370} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722382} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722382} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 21916, "completion_tokens": 479, "total_tokens": 22395, "cost": 0.032185000000000005, "total_cost": 0.19643125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722501} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722527} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 22728, "completion_tokens": 377, "total_tokens": 23105, "cost": 0.03218, "total_cost": 0.22861125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722535} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722547} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722560} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 26430, "completion_tokens": 885, "total_tokens": 27315, "cost": 0.04188750000000001, "total_cost": 0.27049875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722612} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722623} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722875} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722878} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722878} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722878} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 609, "completion_tokens": 12, "total_tokens": 621, "cost": 9.855e-05, "total_cost": 9.855e-05}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722880} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722880} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722899} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722901} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722901} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722901} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 605, "completion_tokens": 236, "total_tokens": 841, "cost": 0.00023234999999999998, "total_cost": 0.00023234999999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722904} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722904} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722934} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722937} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722937} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722937} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5661, "completion_tokens": 320, "total_tokens": 5981, "cost": 0.00104115, "total_cost": 0.00104115}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722943} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722949} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722951} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722951} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722951} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746722966} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723226} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723229} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723229} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723229} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6242, "completion_tokens": 1356, "total_tokens": 7598, "cost": 0.0017499, "total_cost": 0.0017499}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723250} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723250} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723310} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723312} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723312} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723313} {"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6242, "completion_tokens": 1123, "total_tokens": 7365, "cost": 0.0016101, "total_cost": 0.0016101}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723368} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723368} @@ -998,3 +795,206 @@ {"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743046} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 35736, "completion_tokens": 428, "total_tokens": 36164, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743115} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743115} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743135} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8113, "completion_tokens": 2128, "total_tokens": 10241, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743267} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743309} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743316} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743338} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743354} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743365} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} +{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743493} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743503} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743506} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743510} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743518} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743527} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 10143, "completion_tokens": 12389, "total_tokens": 22532, "cost": 0.59699, "total_cost": 0.59699}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743568} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743572} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 26024, "completion_tokens": 1961, "total_tokens": 27985, "cost": 0.33868000000000004, "total_cost": 0.33868000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743595} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743604} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743607} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 27270, "completion_tokens": 246, "total_tokens": 27516, "cost": 0.10878, "total_cost": 0.44746}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743612} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 11257, "completion_tokens": 2663, "total_tokens": 13920, "cost": 0.21909, "total_cost": 0.81608}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743647} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743701} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 11535, "completion_tokens": 1714, "total_tokens": 13249, "cost": 0.18391000000000002, "total_cost": 0.99999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743733} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743780} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743940} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743984} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744009} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744009} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 24331, "completion_tokens": 1664, "total_tokens": 25995, "cost": 0.30987000000000003, "total_cost": 0.7573300000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744032} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744069} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 27682, "completion_tokens": 1547, "total_tokens": 29229, "cost": 0.3387, "total_cost": 1.09603}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744090} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744094} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744095} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744095} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744095} +{"event": "message_send_exception", "properties": {"exception": "'EditBlockCoder' object has no attribute '_stop_waiting_spinner'"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744108} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744159} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 28471, "completion_tokens": 1850, "total_tokens": 30321, "cost": 0.35871000000000003, "total_cost": 1.4547400000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744180} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744188} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744190} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744190} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744190} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 7494, "completion_tokens": 276, "total_tokens": 7770, "cost": 0.08598, "total_cost": 0.08598}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744195} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744195} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744208} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744210} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744210} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744210} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744256} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744302} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744304} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744421} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 8987, "completion_tokens": 7646, "total_tokens": 16633, "cost": 0.39571, "total_cost": 0.39571}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744517} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744547} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744591} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744640} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 10351, "completion_tokens": 2858, "total_tokens": 13209, "cost": 0.21783000000000002, "total_cost": 0.61354}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744693} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745011} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745011} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745011} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745068} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745068} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745076} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7804, "completion_tokens": 185, "total_tokens": 7989, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745082} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745086} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745197} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745197} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745197} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745253} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745253} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745254} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745254} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745254} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745257} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745257} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745302} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745304} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745304} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745304} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745308} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745311} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745329} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745329} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745368} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 22843, "completion_tokens": 1684, "total_tokens": 24527, "cost": 0.29579, "total_cost": 0.29579}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745376} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745384} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745444} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745444} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6977, "completion_tokens": 1526, "total_tokens": 8503, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745473} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745513} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745513} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 23524, "completion_tokens": 4435, "total_tokens": 27959, "cost": 0.41264, "total_cost": 0.70843}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745514} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745539} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 27062, "completion_tokens": 4657, "total_tokens": 31719, "cost": 0.4569000000000001, "total_cost": 1.16533}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745601} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 5471, "completion_tokens": 285, "total_tokens": 5756, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746417} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746417} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7626, "completion_tokens": 3778, "total_tokens": 11404, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746468} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746468} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 38859, "completion_tokens": 263, "total_tokens": 39122, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746724} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746724} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index dd3db2165..0bc54cfc5 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,10 +264,10 @@ tr:hover { background-color: #f5f5f5; }
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25856,47844.7%
gemini/gemini-2.5-pro-preview-05-06582,75230.4%
o3316,72716.5%
openrouter/REDACTED135,1097.1%
gemini/gemini-2.5-pro-exp-03-25816,68243.6%
gemini/gemini-2.5-pro-preview-05-06582,75231.1%
o3316,72716.9%
openrouter/REDACTED131,7737.0%
gemini/gemini-2.5-pro-preview-03-2514,0120.7%
together_ai/REDACTED7,7070.4%
together_ai/Qwen/Qwen3-235B-A22B-fp8-tput1,9940.1%
- - - - + + + + From d7e091f31570b0e2d9548f8cc7ff9040bce5c01e Mon Sep 17 00:00:00 2001 From: cantalupo555 Date: Thu, 8 May 2025 20:32:00 -0300 Subject: [PATCH 293/459] refactor: Update OpenRouter Gemini 2.5 Pro Exp model ID --- aider/resources/model-metadata.json | 2 +- aider/resources/model-settings.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/resources/model-metadata.json b/aider/resources/model-metadata.json index 51b458df9..72c394730 100644 --- a/aider/resources/model-metadata.json +++ b/aider/resources/model-metadata.json @@ -312,7 +312,7 @@ "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, - "openrouter/google/gemini-2.5-pro-exp-03-25:free": { + "openrouter/google/gemini-2.5-pro-exp-03-25": { "max_tokens": 8192, "max_input_tokens": 1048576, "max_output_tokens": 64000, diff --git a/aider/resources/model-settings.yml b/aider/resources/model-settings.yml index 338521179..5b00a0f0d 100644 --- a/aider/resources/model-settings.yml +++ b/aider/resources/model-settings.yml @@ -969,7 +969,7 @@ overeager: true weak_model_name: gemini/gemini-2.5-flash-preview-04-17 -- name: openrouter/google/gemini-2.5-pro-exp-03-25:free +- name: openrouter/google/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced overeager: true use_repo_map: true From c706663841e1b9567dc680871674af533c152fa2 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 16:32:07 -0700 Subject: [PATCH 294/459] fix: Ensure spinner ends on stop --- aider/waiting.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/waiting.py b/aider/waiting.py index c0b121e74..8068551bb 100644 --- a/aider/waiting.py +++ b/aider/waiting.py @@ -44,6 +44,7 @@ class WaitingSpinner: self._stop_event.set() if self._thread.is_alive(): self._thread.join(timeout=0.1) + self.spinner.end() # Allow use as a context-manager def __enter__(self): From b236e0c801b555c17ca8844107cb78737d37a234 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 17:08:07 -0700 Subject: [PATCH 295/459] style: Improve spinner display order and output --- aider/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index aff5cef86..61e71877e 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -301,7 +301,7 @@ class Spinner: if not self.is_tty: return False try: - sys.stdout.write("≡\b─\b") + sys.stdout.write("≡\b─\b \b") sys.stdout.flush() return True except UnicodeEncodeError: @@ -329,7 +329,7 @@ class Spinner: self.last_update = now frame = self._next_frame() - sys.stdout.write(f"\r{self.text} {frame}") + sys.stdout.write(f"\r{frame} {self.text}") # Backspace cursor to the scanner character pos_in_content = frame.find(self.scan_char) - 1 # exclude '[' From 9ef506dc25dd5e87872e0731e909f9bec6978b8f Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 17:09:43 -0700 Subject: [PATCH 296/459] feat: Continue spinner animation across instances --- aider/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 61e71877e..2eb12d200 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -258,6 +258,8 @@ class Spinner: cannot display unicode the frames are converted to plain ASCII. """ + last_frame_idx = 0 # Class variable to store the last frame index + def __init__(self, text: str, width: int = 7): self.text = text self.start_time = time.time() @@ -292,7 +294,7 @@ class Spinner: # Bounce the scanner back and forth. self.frames = frames - self.frame_idx = 0 + self.frame_idx = Spinner.last_frame_idx # Initialize from class variable self.scan_char = scan_char self.width = len(frames[0]) - 2 # number of chars between the brackets self.animation_len = len(frames[0]) @@ -312,6 +314,7 @@ class Spinner: def _next_frame(self) -> str: frame = self.frames[self.frame_idx] self.frame_idx = (self.frame_idx + 1) % len(self.frames) + Spinner.last_frame_idx = self.frame_idx # Update class variable return frame def step(self) -> None: From 95cc362c074155f00cf3c84f4a392a9ff0b0b935 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 17:12:28 -0700 Subject: [PATCH 297/459] fix: Fix spinner backspace calculation --- aider/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 2eb12d200..42c6ac0f1 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -337,7 +337,7 @@ class Spinner: # Backspace cursor to the scanner character pos_in_content = frame.find(self.scan_char) - 1 # exclude '[' chars_after_scanner = (self.width - 1) - pos_in_content - num_backspaces = max(0, chars_after_scanner + 2) # +']' and extra + num_backspaces = max(0, chars_after_scanner + 2) + len(self.text) + 1 sys.stdout.write("\b" * num_backspaces) sys.stdout.flush() From aad6838e15808dedbc95c64768e3b0b398ea3300 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 17:17:01 -0700 Subject: [PATCH 298/459] chore: Improve spinner ASCII animation --- aider/utils.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 42c6ac0f1..128e578f2 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -270,23 +270,25 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. ascii_frames = """ -[#=-----] -[=#-----] -[-=#----] -[--=#---] -[---=#--] -[----=#-] -[-----=#] -[-----#=] -[----#=-] -[---#=--] -[--#=---] -[-#=----] +[#=- ] +[=# ] +[-=# ] +[ -=# ] +[ -=# ] +[ -=# ] +[ -=#] +[ #=] +[ #=-] +[ #=- ] +[ #=- ] +[ #=- ] """.strip().splitlines() + xlate = ("-=#", "≈≋≣") + # If unicode is supported, swap the ASCII chars for nicer glyphs. if self._supports_unicode(): - scan_char, trail_char = "≡", "─" + scan_char, trail_char = "≣", "" frames = [f.replace("#", scan_char).replace("-", trail_char) for f in ascii_frames] else: scan_char, _ = "#", "-" From 647f556582d9a08ad8f81317f091336f984a6651 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 17:17:02 -0700 Subject: [PATCH 299/459] refactor: Use str.translate for spinner unicode mapping --- aider/utils.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 128e578f2..0ace78f6d 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -284,20 +284,20 @@ class Spinner: [ #=- ] """.strip().splitlines() - xlate = ("-=#", "≈≋≣") + xlate_from, xlate_to = ("-=#", "≈≋≣") # If unicode is supported, swap the ASCII chars for nicer glyphs. if self._supports_unicode(): - scan_char, trail_char = "≣", "" - frames = [f.replace("#", scan_char).replace("-", trail_char) for f in ascii_frames] + translation_table = str.maketrans(xlate_from, xlate_to) + frames = [f.translate(translation_table) for f in ascii_frames] + self.scan_char = xlate_to[xlate_from.find("#")] else: - scan_char, _ = "#", "-" frames = ascii_frames + self.scan_char = "#" # Bounce the scanner back and forth. self.frames = frames - self.frame_idx = Spinner.last_frame_idx # Initialize from class variable - self.scan_char = scan_char + self.frame_idx = Spinner.last_frame_idx # Initialize from class variable self.width = len(frames[0]) - 2 # number of chars between the brackets self.animation_len = len(frames[0]) From 784ac79da1c127332f13c45194340a4676d2cf69 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 17:17:07 -0700 Subject: [PATCH 300/459] style: Apply formatting --- aider/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 0ace78f6d..9786b6041 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -297,7 +297,7 @@ class Spinner: # Bounce the scanner back and forth. self.frames = frames - self.frame_idx = Spinner.last_frame_idx # Initialize from class variable + self.frame_idx = Spinner.last_frame_idx # Initialize from class variable self.width = len(frames[0]) - 2 # number of chars between the brackets self.animation_len = len(frames[0]) From 4e86a82a0882a0d347166ffbe2eb811ff39ef9bb Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 17:21:48 -0700 Subject: [PATCH 301/459] copy --- aider/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 9786b6041..c7ec14b01 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -284,7 +284,7 @@ class Spinner: [ #=- ] """.strip().splitlines() - xlate_from, xlate_to = ("-=#", "≈≋≣") + xlate_from, xlate_to = ("-=#", "─=≡") # If unicode is supported, swap the ASCII chars for nicer glyphs. if self._supports_unicode(): From 292aa9bded4fe320cfc797a9207f60388603bae5 Mon Sep 17 00:00:00 2001 From: KebobZ Date: Thu, 8 May 2025 17:36:22 -0700 Subject: [PATCH 302/459] Add Qwen3-235B-A22B-Q5_K_M to qwen3_leaderboard.yml --- aider/website/_data/qwen3_leaderboard.yml | 28 ++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/aider/website/_data/qwen3_leaderboard.yml b/aider/website/_data/qwen3_leaderboard.yml index e773bdee2..2e9eac1fc 100644 --- a/aider/website/_data/qwen3_leaderboard.yml +++ b/aider/website/_data/qwen3_leaderboard.yml @@ -186,4 +186,30 @@ date: 2025-04-30 versions: 0.81.4.dev seconds_per_case: 59.4 - total_cost: 0.0000 \ No newline at end of file + total_cost: 0.0000 + +- dirname: 2025-05-07-03-15-59--Qwen3-235B-A22B-Q5_K_M-whole-nothink + test_cases: 225 + model: Qwen3-235B-A22B whole with llama.cpp, Q5_K_M (unsloth), recommended /no_think settings + edit_format: whole + commit_hash: 8159cbf + pass_rate_1: 27.1 + pass_rate_2: 59.1 + pass_num_1: 61 + pass_num_2: 133 + percent_cases_well_formed: 100.0 + error_outputs: 1 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 169 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/Qwen3-235B-A22B-Q5_K_M + date: 2025-05-07 + versions: 0.82.4.dev + seconds_per_case: 635.2 + total_cost: 0.0000 From 2d34b738bce7928b9ac76008c390e35c92b6a0e6 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 17:47:41 -0700 Subject: [PATCH 303/459] chore: Update waiting spinner --- aider/coders/base_coder.py | 2 +- aider/utils.py | 29 +++++++++++++++++------------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index f68e3bead..ab59600cf 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -1419,7 +1419,7 @@ class Coder: self.multi_response_content = "" if self.show_pretty(): - self.waiting_spinner = WaitingSpinner("Waiting for LLM") + self.waiting_spinner = WaitingSpinner("Waiting for " + self.main_model.name) self.waiting_spinner.start() if self.stream: self.mdstream = self.io.get_assistant_mdstream() diff --git a/aider/utils.py b/aider/utils.py index c7ec14b01..bd332d996 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -270,21 +270,22 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. ascii_frames = """ -[#=- ] +[#= ] [=# ] -[-=# ] -[ -=# ] -[ -=# ] -[ -=# ] -[ -=#] +[ =# ] +[ =# ] +[ =# ] +[ =# ] +[ =#] [ #=] -[ #=-] -[ #=- ] -[ #=- ] -[ #=- ] +[ #= ] +[ #= ] +[ #= ] +[ #= ] """.strip().splitlines() - xlate_from, xlate_to = ("-=#", "─=≡") + self.unicode_palette = "≋≣" + xlate_from, xlate_to = ("=#", self.unicode_palette) # If unicode is supported, swap the ASCII chars for nicer glyphs. if self._supports_unicode(): @@ -305,7 +306,11 @@ class Spinner: if not self.is_tty: return False try: - sys.stdout.write("≡\b─\b \b") + out = self.unicode_palette + out += "\b" * len(self.unicode_palette) + out += " " * len(self.unicode_palette) + out += "\b" * len(self.unicode_palette) + sys.stdout.write(out) sys.stdout.flush() return True except UnicodeEncodeError: From 4fb2d780119bbc9a75bebabbee84d07f865cd9c1 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 19:21:28 -0700 Subject: [PATCH 304/459] spinner --- aider/utils.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index bd332d996..613da3cd8 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -269,20 +269,18 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. - ascii_frames = """ -[#= ] -[=# ] -[ =# ] -[ =# ] -[ =# ] -[ =# ] -[ =#] -[ #=] -[ #= ] -[ #= ] -[ #= ] -[ #= ] -""".strip().splitlines() + ascii_frames = """ #= | + =# | + =# | + =# | + =# | + =# | + =# | + #= | + #= | + #= | + #= | + #= |""".splitlines() self.unicode_palette = "≋≣" xlate_from, xlate_to = ("=#", self.unicode_palette) From 52ae22bcf848fba98dc562950d33979ea1360022 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 19:28:30 -0700 Subject: [PATCH 305/459] Refactor: Update spinner frames definition --- aider/utils.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 613da3cd8..670252d44 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -269,18 +269,20 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. - ascii_frames = """ #= | - =# | - =# | - =# | - =# | - =# | - =# | - #= | - #= | - #= | - #= | - #= |""".splitlines() + ascii_frames = [ + ' #= | ', + ' =# | ', + ' =# | ', + ' =# | ', + ' =# | ', + ' =# | ', + ' =# | ', + ' #= | ', + ' #= | ', + ' #= | ', + ' #= | ', + ' #= | ', + ] self.unicode_palette = "≋≣" xlate_from, xlate_to = ("=#", self.unicode_palette) From 7a5877ea5031fbcaf87ea2845e7d7a570768e38f Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 19:28:35 -0700 Subject: [PATCH 306/459] style: Format spinner frames --- aider/utils.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 670252d44..64d9573f0 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -270,18 +270,18 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. ascii_frames = [ - ' #= | ', - ' =# | ', - ' =# | ', - ' =# | ', - ' =# | ', - ' =# | ', - ' =# | ', - ' #= | ', - ' #= | ', - ' #= | ', - ' #= | ', - ' #= | ', + " #= | ", + " =# | ", + " =# | ", + " =# | ", + " =# | ", + " =# | ", + " =# | ", + " #= | ", + " #= | ", + " #= | ", + " #= | ", + " #= | ", ] self.unicode_palette = "≋≣" From 4d5852a30eb325a3a0474dcf3cba343bc0082b30 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Thu, 8 May 2025 19:49:19 -0700 Subject: [PATCH 307/459] chore: Refine ASCII spinner animation --- aider/utils.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 64d9573f0..1c0f722c4 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -270,18 +270,18 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. ascii_frames = [ - " #= | ", - " =# | ", - " =# | ", - " =# | ", - " =# | ", - " =# | ", - " =# | ", - " #= | ", - " #= | ", - " #= | ", - " #= | ", - " #= | ", + "#= ", + "=# ", + " =# ", + " =# ", + " =# ", + " =# ", + " =#", + " #=", + " #= ", + " #= ", + " #= ", + " #= ", ] self.unicode_palette = "≋≣" @@ -446,10 +446,11 @@ def printable_shell_command(cmd_list): def main(): spinner = Spinner("Running spinner...") - for _ in range(300): + for _ in range(100): time.sleep(0.15) spinner.step() spinner.end() + print("Success!") if __name__ == "__main__": From edb3bf84cc4a8be836655190927abc552604fea9 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 8 May 2025 19:52:12 -0700 Subject: [PATCH 308/459] chore: Adjust spinner ascii frame width --- aider/utils.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 1c0f722c4..2409d6ebf 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -270,18 +270,24 @@ class Spinner: # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. ascii_frames = [ - "#= ", - "=# ", - " =# ", - " =# ", - " =# ", - " =# ", - " =#", - " #=", - " #= ", - " #= ", - " #= ", - " #= ", + "#= ", # C1 C2 space(8) + "=# ", # C2 C1 space(8) + " =# ", # space(1) C2 C1 space(7) + " =# ", # space(2) C2 C1 space(6) + " =# ", # space(3) C2 C1 space(5) + " =# ", # space(4) C2 C1 space(4) + " =# ", # space(5) C2 C1 space(3) + " =# ", # space(6) C2 C1 space(2) + " =# ", # space(7) C2 C1 space(1) + " =#", # space(8) C2 C1 + " #=", # space(8) C1 C2 + " #= ", # space(7) C1 C2 space(1) + " #= ", # space(6) C1 C2 space(2) + " #= ", # space(5) C1 C2 space(3) + " #= ", # space(4) C1 C2 space(4) + " #= ", # space(3) C1 C2 space(5) + " #= ", # space(2) C1 C2 space(6) + " #= ", # space(1) C1 C2 space(7) ] self.unicode_palette = "≋≣" From 81b86441fd93e56e702f0e5e471f98d1059453a6 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:01:48 -0700 Subject: [PATCH 309/459] feat: Hide cursor when spinner is active --- aider/utils.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/aider/utils.py b/aider/utils.py index 2409d6ebf..13f09b034 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -7,6 +7,7 @@ import time from pathlib import Path import oslex +from rich.console import Console from aider.dump import dump # noqa: F401 @@ -266,6 +267,7 @@ class Spinner: self.last_update = 0.0 self.visible = False self.is_tty = sys.stdout.isatty() + self.console = Console() # Pre-render the animation frames using pure ASCII so they will # always display, even on very limited terminals. @@ -338,6 +340,8 @@ class Spinner: if not self.visible and now - self.start_time >= 0.5: self.visible = True self.last_update = 0.0 + if self.is_tty: + self.console.show_cursor(False) if not self.visible or now - self.last_update < 0.1: return @@ -359,6 +363,7 @@ class Spinner: clear_len = len(self.text) + 1 + self.animation_len sys.stdout.write("\r" + " " * clear_len + "\r") sys.stdout.flush() + self.console.show_cursor(True) self.visible = False From 23714d7db617a90d05d4e21362326d498e4189ad Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:17:49 -0700 Subject: [PATCH 310/459] feat: Add user language instruction to commit prompt --- aider/prompts.py | 4 +++- aider/repo.py | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/aider/prompts.py b/aider/prompts.py index 84ed75e9b..aecf29a9e 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -13,11 +13,13 @@ Generate a one-line commit message for those changes. The commit message should be structured as follows: : Use these for : fix, feat, build, chore, ci, docs, style, refactor, perf, test -Ensure the commit message: +Ensure the commit message:{language_instruction} - Starts with the appropriate prefix. - Is in the imperative mood (e.g., \"add feature\" not \"added feature\" or \"adding feature\"). - Does not exceed 72 characters. +Reply only with the one-line commit message, without any additional text, explanations, or line breaks. + Reply only with the one-line commit message, without any additional text, explanations, \ or line breaks. """ diff --git a/aider/repo.py b/aider/repo.py index 0438f2243..809c8e375 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -207,7 +207,12 @@ class GitRepo: if message: commit_message = message else: - commit_message = self.get_commit_message(diffs, context) + user_language = None + if coder: + user_language = coder.get_user_language() + commit_message = self.get_commit_message(diffs, context, user_language) + + # Retrieve attribute settings, prioritizing coder.args if available if coder and hasattr(coder, "args"): @@ -319,7 +324,7 @@ class GitRepo: except (ValueError, OSError): return self.repo.git_dir - def get_commit_message(self, diffs, context): + def get_commit_message(self, diffs, context, user_language=None): diffs = "# Diffs:\n" + diffs content = "" @@ -328,6 +333,11 @@ class GitRepo: content += diffs system_content = self.commit_prompt or prompts.commit_system + language_instruction = "" + if user_language: + language_instruction = f"\n- Is written in {user_language}." + system_content = system_content.format(language_instruction=language_instruction) + messages = [ dict(role="system", content=system_content), dict(role="user", content=content), From 8652fcf86efce7acd1316bf5697f4a6296310cea Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:17:55 -0700 Subject: [PATCH 311/459] style: Remove empty lines --- aider/repo.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index 809c8e375..0723c6c14 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -212,8 +212,6 @@ class GitRepo: user_language = coder.get_user_language() commit_message = self.get_commit_message(diffs, context, user_language) - - # Retrieve attribute settings, prioritizing coder.args if available if coder and hasattr(coder, "args"): attribute_author = coder.args.attribute_author From 4c959f45429660959195c38c3dd37be4fd2b5cd6 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:21:05 -0700 Subject: [PATCH 312/459] chore: Print messages when verbose in simple_send --- aider/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aider/models.py b/aider/models.py index 3c7affcbe..d69ae2d5a 100644 --- a/aider/models.py +++ b/aider/models.py @@ -913,6 +913,9 @@ class Model(ModelSettings): messages = ensure_alternating_roles(messages) retry_delay = 0.125 + if self.verbose: + dump(messages) + while True: try: kwargs = { From 04cbe87caac1991680af5a121d0825e1b9b11139 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 06:48:26 -0700 Subject: [PATCH 313/459] style: Update spinner unicode palette --- aider/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 13f09b034..00caf8ab3 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -292,7 +292,7 @@ class Spinner: " #= ", # space(1) C1 C2 space(7) ] - self.unicode_palette = "≋≣" + self.unicode_palette = "░█" xlate_from, xlate_to = ("=#", self.unicode_palette) # If unicode is supported, swap the ASCII chars for nicer glyphs. From 2bc93868764650d70c2b570ada5f6d51e222cc8e Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:50:42 -0700 Subject: [PATCH 314/459] feat: Add optional text param to Spinner.step --- aider/utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 00caf8ab3..c6fd96cfb 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -332,7 +332,10 @@ class Spinner: Spinner.last_frame_idx = self.frame_idx # Update class variable return frame - def step(self) -> None: + def step(self, text: str = None) -> None: + if text is not None: + self.text = text + if not self.is_tty: return From 11480f6110696ab26462bf8342d46e0cfe1888b4 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 06:53:57 -0700 Subject: [PATCH 315/459] chore: Add item name to repo map progress --- aider/repomap.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aider/repomap.py b/aider/repomap.py index 598770d18..580292a3c 100644 --- a/aider/repomap.py +++ b/aider/repomap.py @@ -380,7 +380,7 @@ class RepoMap: if self.verbose: self.io.tool_output(f"Processing {fname}") if progress and not showing_bar: - progress() + progress("Updating repo map: " + fname) try: file_ok = Path(fname).is_file() @@ -459,7 +459,7 @@ class RepoMap: for ident in idents: if progress: - progress() + progress("Updating repo map: " + ident) definers = defines[ident] @@ -512,7 +512,7 @@ class RepoMap: ranked_definitions = defaultdict(float) for src in G.nodes: if progress: - progress() + progress("Updating repo map: " + src) src_rank = ranked[src] total_weight = sum(data["weight"] for _src, _dst, data in G.out_edges(src, data=True)) From b9885bb76dfd57886fad6abf4f4cd992b49c2db1 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:53:58 -0700 Subject: [PATCH 316/459] refactor: refactor 'Updating repo map' text to constant --- aider/repomap.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/aider/repomap.py b/aider/repomap.py index 580292a3c..31daa1c56 100644 --- a/aider/repomap.py +++ b/aider/repomap.py @@ -35,6 +35,8 @@ CACHE_VERSION = 3 if USING_TSL_PACK: CACHE_VERSION = 4 +UPDATING_REPO_MAP_MESSAGE = "Updating repo map" + class RepoMap: TAGS_CACHE_DIR = f".aider.tags.cache.v{CACHE_VERSION}" @@ -380,7 +382,7 @@ class RepoMap: if self.verbose: self.io.tool_output(f"Processing {fname}") if progress and not showing_bar: - progress("Updating repo map: " + fname) + progress(f"{UPDATING_REPO_MAP_MESSAGE}: {fname}") try: file_ok = Path(fname).is_file() @@ -459,7 +461,7 @@ class RepoMap: for ident in idents: if progress: - progress("Updating repo map: " + ident) + progress(f"{UPDATING_REPO_MAP_MESSAGE}: {ident}") definers = defines[ident] @@ -512,7 +514,7 @@ class RepoMap: ranked_definitions = defaultdict(float) for src in G.nodes: if progress: - progress("Updating repo map: " + src) + progress(f"{UPDATING_REPO_MAP_MESSAGE}: {src}") src_rank = ranked[src] total_weight = sum(data["weight"] for _src, _dst, data in G.out_edges(src, data=True)) @@ -621,7 +623,7 @@ class RepoMap: if not mentioned_idents: mentioned_idents = set() - spin = Spinner("Updating repo map") + spin = Spinner(UPDATING_REPO_MAP_MESSAGE) ranked_tags = self.get_ranked_tags( chat_fnames, From 781ed90653f6344e4365fceba8e04cc84dcae765 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:54:10 -0700 Subject: [PATCH 317/459] fix: Clear to end of line when spinner updates --- aider/utils.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index c6fd96cfb..4ce440bf4 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -309,6 +309,7 @@ class Spinner: self.frame_idx = Spinner.last_frame_idx # Initialize from class variable self.width = len(frames[0]) - 2 # number of chars between the brackets self.animation_len = len(frames[0]) + self.last_display_len = 0 # Length of the last spinner line (frame + text) def _supports_unicode(self) -> bool: if not self.is_tty: @@ -350,20 +351,35 @@ class Spinner: return self.last_update = now - frame = self._next_frame() + frame_str = self._next_frame() - sys.stdout.write(f"\r{frame} {self.text}") + current_text_payload = f" {self.text}" + line_to_display = f"{frame_str}{current_text_payload}" + len_line_to_display = len(line_to_display) + + # Calculate padding to clear any remnants from a longer previous line + padding_to_clear = " " * max(0, self.last_display_len - len_line_to_display) + + # Write the spinner frame, text, and any necessary clearing spaces + sys.stdout.write(f"\r{line_to_display}{padding_to_clear}") + + # Store the length of the actual content part for the next step's clearing calculation + self.last_display_len = len_line_to_display + + # Calculate number of backspaces to position cursor at the scanner character + scan_char_abs_pos = frame_str.find(self.scan_char) + + # Total characters written to the line (frame + text + padding) + total_chars_written_on_line = len_line_to_display + len(padding_to_clear) + + num_backspaces = total_chars_written_on_line - scan_char_abs_pos - # Backspace cursor to the scanner character - pos_in_content = frame.find(self.scan_char) - 1 # exclude '[' - chars_after_scanner = (self.width - 1) - pos_in_content - num_backspaces = max(0, chars_after_scanner + 2) + len(self.text) + 1 sys.stdout.write("\b" * num_backspaces) sys.stdout.flush() def end(self) -> None: if self.visible and self.is_tty: - clear_len = len(self.text) + 1 + self.animation_len + clear_len = self.last_display_len # Use the length of the last displayed content sys.stdout.write("\r" + " " * clear_len + "\r") sys.stdout.flush() self.console.show_cursor(True) From df967e4b41703a27a07e834ecc8d81307c8e350a Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:57:18 -0700 Subject: [PATCH 318/459] feat: Clip spinner output to console width --- aider/utils.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 4ce440bf4..1efbf8aa5 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -353,8 +353,19 @@ class Spinner: self.last_update = now frame_str = self._next_frame() + # Determine the maximum width for the spinner line + # Subtract 2 as requested, to leave a margin or prevent cursor wrapping issues + max_spinner_width = self.console.width - 2 + if max_spinner_width < 0: # Handle extremely narrow terminals + max_spinner_width = 0 + current_text_payload = f" {self.text}" line_to_display = f"{frame_str}{current_text_payload}" + + # Truncate the line if it's too long for the console width + if len(line_to_display) > max_spinner_width: + line_to_display = line_to_display[:max_spinner_width] + len_line_to_display = len(line_to_display) # Calculate padding to clear any remnants from a longer previous line @@ -362,8 +373,6 @@ class Spinner: # Write the spinner frame, text, and any necessary clearing spaces sys.stdout.write(f"\r{line_to_display}{padding_to_clear}") - - # Store the length of the actual content part for the next step's clearing calculation self.last_display_len = len_line_to_display # Calculate number of backspaces to position cursor at the scanner character @@ -372,8 +381,10 @@ class Spinner: # Total characters written to the line (frame + text + padding) total_chars_written_on_line = len_line_to_display + len(padding_to_clear) + # num_backspaces will be non-positive if scan_char_abs_pos is beyond total_chars_written_on_line + # (e.g., if the scan char itself was truncated). + # In such cases, (effectively) 0 backspaces are written, and the cursor stays at the end of the line. num_backspaces = total_chars_written_on_line - scan_char_abs_pos - sys.stdout.write("\b" * num_backspaces) sys.stdout.flush() From 766a41d5de616ca2011b549f00b74ce8a0776fc7 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:57:23 -0700 Subject: [PATCH 319/459] style: Apply formatting --- aider/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index 1efbf8aa5..640a81f58 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -356,7 +356,7 @@ class Spinner: # Determine the maximum width for the spinner line # Subtract 2 as requested, to leave a margin or prevent cursor wrapping issues max_spinner_width = self.console.width - 2 - if max_spinner_width < 0: # Handle extremely narrow terminals + if max_spinner_width < 0: # Handle extremely narrow terminals max_spinner_width = 0 current_text_payload = f" {self.text}" From 1a7960810c95bd2a627ff28e6c162a224b857e4c Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 06:57:32 -0700 Subject: [PATCH 320/459] style: Fix E501 line length in spinner comments --- aider/utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 640a81f58..8721d438e 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -381,9 +381,11 @@ class Spinner: # Total characters written to the line (frame + text + padding) total_chars_written_on_line = len_line_to_display + len(padding_to_clear) - # num_backspaces will be non-positive if scan_char_abs_pos is beyond total_chars_written_on_line + # num_backspaces will be non-positive if scan_char_abs_pos is beyond + # total_chars_written_on_line (e.g., if the scan char itself was truncated). # (e.g., if the scan char itself was truncated). - # In such cases, (effectively) 0 backspaces are written, and the cursor stays at the end of the line. + # In such cases, (effectively) 0 backspaces are written, + # and the cursor stays at the end of the line. num_backspaces = total_chars_written_on_line - scan_char_abs_pos sys.stdout.write("\b" * num_backspaces) sys.stdout.flush() From 77deb35022646894d4430b35b6accc992978b059 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 08:10:36 -0700 Subject: [PATCH 321/459] chore: Add model option to update history script --- scripts/update-history.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/update-history.py b/scripts/update-history.py index e8fa455b2..f5fde9106 100755 --- a/scripts/update-history.py +++ b/scripts/update-history.py @@ -136,6 +136,8 @@ def main(): message, "--no-git", "--no-auto-lint", + "--model", + "o3", ] subprocess.run(cmd) From 3f49acf39011944ee5c66478e54ea80012a04c54 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 08:10:39 -0700 Subject: [PATCH 322/459] feat: Allow specifying aider model in update-history.py --- scripts/update-history.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/update-history.py b/scripts/update-history.py index f5fde9106..122d26737 100755 --- a/scripts/update-history.py +++ b/scripts/update-history.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import argparse import os import re import subprocess @@ -69,6 +70,11 @@ def run_plain_git_log(): def main(): + parser = argparse.ArgumentParser(description="Update HISTORY.md using aider.") + parser.add_argument( + "model", nargs="?", default="o3", help="The model to use with aider (default: o3)" + ) + args = parser.parse_args() # Get the git log and diff output log_content = run_git_log() plain_log_content = run_plain_git_log() @@ -137,7 +143,7 @@ def main(): "--no-git", "--no-auto-lint", "--model", - "o3", + args.model, ] subprocess.run(cmd) From 4e608dbd77b21451803d694989c28cdd8508616a Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 08:12:11 -0700 Subject: [PATCH 323/459] refactor: Use sys.argv instead of argparse for model arg --- scripts/update-history.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/scripts/update-history.py b/scripts/update-history.py index 122d26737..f551ce14c 100755 --- a/scripts/update-history.py +++ b/scripts/update-history.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 -import argparse import os import re import subprocess +import sys import tempfile from history_prompts import history_prompt @@ -70,11 +70,10 @@ def run_plain_git_log(): def main(): - parser = argparse.ArgumentParser(description="Update HISTORY.md using aider.") - parser.add_argument( - "model", nargs="?", default="o3", help="The model to use with aider (default: o3)" - ) - args = parser.parse_args() + model_name = "o3" + if len(sys.argv) > 1: + model_name = sys.argv[1] + # Get the git log and diff output log_content = run_git_log() plain_log_content = run_plain_git_log() @@ -143,7 +142,7 @@ def main(): "--no-git", "--no-auto-lint", "--model", - args.model, + model_name, ] subprocess.run(cmd) From a3562d1d62f9fbaf2ed6ff49f5cf37530308b13e Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 08:14:00 -0700 Subject: [PATCH 324/459] feat: Forward script args to aider command --- scripts/update-history.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/scripts/update-history.py b/scripts/update-history.py index f551ce14c..55e3ccaa0 100755 --- a/scripts/update-history.py +++ b/scripts/update-history.py @@ -70,9 +70,7 @@ def run_plain_git_log(): def main(): - model_name = "o3" - if len(sys.argv) > 1: - model_name = sys.argv[1] + aider_args = sys.argv[1:] # Get the git log and diff output log_content = run_git_log() @@ -141,9 +139,7 @@ def main(): message, "--no-git", "--no-auto-lint", - "--model", - model_name, - ] + ] + aider_args subprocess.run(cmd) # Read back the updated history From 9f1ef3f49f6b14542c2a7fa954877a48c0a1813e Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 08:14:02 -0700 Subject: [PATCH 325/459] chore: Display line counts before calling aider --- scripts/update-history.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/update-history.py b/scripts/update-history.py index 55e3ccaa0..80262bfc4 100755 --- a/scripts/update-history.py +++ b/scripts/update-history.py @@ -123,6 +123,12 @@ def main(): blame_result = subprocess.run(["python3", "scripts/blame.py"], capture_output=True, text=True) aider_line = blame_result.stdout.strip().split("\n")[-1] # Get last line with percentage + # Display line counts + print(f"Lines in {hist_path}: {len(relevant_history.splitlines())}") + print(f"Lines in {log_path}: {len(log_content.splitlines())}") + print(f"Lines in {plain_log_path}: {len(plain_log_content.splitlines())}") + print(f"Lines in {diff_path}: {len(diff_content.splitlines())}") + # Construct and run the aider command message = history_prompt.format(aider_line=aider_line) From 5be642fbec9a27e6f03d6d34d375704513aaf442 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 08:18:31 -0700 Subject: [PATCH 326/459] show repomap token progress --- aider/repomap.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/aider/repomap.py b/aider/repomap.py index 31daa1c56..6328a701f 100644 --- a/aider/repomap.py +++ b/aider/repomap.py @@ -657,7 +657,11 @@ class RepoMap: while lower_bound <= upper_bound: # dump(lower_bound, middle, upper_bound) - spin.step() + if middle > 1500: + show_tokens = f"{middle / 1000.0:.1f}K" + else: + show_tokens = str(middle) + spin.step(f"{UPDATING_REPO_MAP_MESSAGE}: {show_tokens} tokens") tree = self.to_tree(ranked_tags[:middle], chat_rel_fnames) num_tokens = self.token_count(tree) From 9978f6c51eabfab716400cb1b214fd94fc638761 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 08:19:20 -0700 Subject: [PATCH 327/459] copy --- HISTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/HISTORY.md b/HISTORY.md index 4d53857ca..a29bc097a 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -10,6 +10,7 @@ - Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. - Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. - Marked Gemini 2.5 Pro preview models as `overeager` by default. +- Commit message prompt specifies the user's language. - Updated the default weak model for Gemini 2.5 Pro models to `gemini/gemini-2.5-flash-preview-04-17`. - Corrected `gemini-2.5-pro-exp-03-25` model settings to reflect its lack of support for `thinking_budget`. - Ensured model-specific system prompt prefixes are placed on a new line before the main system prompt. From d79bc2c05bc2425cdca7a701509d7aef5748f8bb Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 08:21:50 -0700 Subject: [PATCH 328/459] refactor: Move blame calculation after line counts --- scripts/update-history.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/update-history.py b/scripts/update-history.py index 80262bfc4..b0f873d25 100755 --- a/scripts/update-history.py +++ b/scripts/update-history.py @@ -119,16 +119,16 @@ def main(): tmp_hist.write(relevant_history) hist_path = tmp_hist.name - # Run blame to get aider percentage - blame_result = subprocess.run(["python3", "scripts/blame.py"], capture_output=True, text=True) - aider_line = blame_result.stdout.strip().split("\n")[-1] # Get last line with percentage - # Display line counts print(f"Lines in {hist_path}: {len(relevant_history.splitlines())}") print(f"Lines in {log_path}: {len(log_content.splitlines())}") print(f"Lines in {plain_log_path}: {len(plain_log_content.splitlines())}") print(f"Lines in {diff_path}: {len(diff_content.splitlines())}") + # Run blame to get aider percentage + blame_result = subprocess.run(["python3", "scripts/blame.py"], capture_output=True, text=True) + aider_line = blame_result.stdout.strip().split("\n")[-1] # Get last line with percentage + # Construct and run the aider command message = history_prompt.format(aider_line=aider_line) From 66201414207d83e4d3cdf36e0b20d8fe99597004 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 08:21:52 -0700 Subject: [PATCH 329/459] chore: Remove plain git log from update-history script --- scripts/update-history.py | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/scripts/update-history.py b/scripts/update-history.py index b0f873d25..d584228b9 100755 --- a/scripts/update-history.py +++ b/scripts/update-history.py @@ -53,28 +53,11 @@ def run_git_diff(): return result.stdout -def run_plain_git_log(): - latest_ver = get_latest_version_from_history() - cmd = [ - "git", - "log", - f"v{latest_ver}..HEAD", - "--", - "aider/", - ":!aider/website/", - ":!scripts/", - ":!HISTORY.md", - ] - result = subprocess.run(cmd, capture_output=True, text=True) - return result.stdout - - def main(): aider_args = sys.argv[1:] # Get the git log and diff output log_content = run_git_log() - plain_log_content = run_plain_git_log() diff_content = run_git_diff() # Extract relevant portion of HISTORY.md @@ -111,10 +94,6 @@ def main(): tmp_diff.write(diff_content) diff_path = tmp_diff.name - with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".plain_log") as tmp_plain_log: - tmp_plain_log.write(plain_log_content) - plain_log_path = tmp_plain_log.name - with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".md") as tmp_hist: tmp_hist.write(relevant_history) hist_path = tmp_hist.name @@ -122,7 +101,6 @@ def main(): # Display line counts print(f"Lines in {hist_path}: {len(relevant_history.splitlines())}") print(f"Lines in {log_path}: {len(log_content.splitlines())}") - print(f"Lines in {plain_log_path}: {len(plain_log_content.splitlines())}") print(f"Lines in {diff_path}: {len(diff_content.splitlines())}") # Run blame to get aider percentage @@ -138,8 +116,6 @@ def main(): "--read", log_path, "--read", - plain_log_path, - "--read", diff_path, "--msg", message, @@ -173,7 +149,6 @@ def main(): # Cleanup os.unlink(log_path) - os.unlink(plain_log_path) os.unlink(diff_path) os.unlink(hist_path) From 64b4d13880e6ff898ee53cee469732f2f57ac2be Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 08:29:33 -0700 Subject: [PATCH 330/459] improve history prompt --- HISTORY.md | 4 +- aider/website/HISTORY.md | 5 +- aider/website/assets/sample-analytics.jsonl | 1148 ++++++++--------- .../website/docs/config/adv-model-settings.md | 2 +- aider/website/docs/faq.md | 10 +- scripts/history_prompts.py | 12 +- 6 files changed, 592 insertions(+), 589 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index a29bc097a..d54a409f9 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -31,7 +31,9 @@ - Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. - Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. -- Aider wrote 53% of the code in this release. +- Displayed token count progress and the name of the file or identifier being processed during repo map updates. +- Extended the waiting spinner to also show for non-streaming responses and further enhanced its animation with console width clipping, cursor hiding, and a more continuous appearance. +- Aider wrote 55% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index e2b26dd4e..43a77b1a3 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -34,6 +34,7 @@ cog.out(text) - Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. - Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. - Marked Gemini 2.5 Pro preview models as `overeager` by default. +- Commit message prompt specifies the user's language. - Updated the default weak model for Gemini 2.5 Pro models to `gemini/gemini-2.5-flash-preview-04-17`. - Corrected `gemini-2.5-pro-exp-03-25` model settings to reflect its lack of support for `thinking_budget`. - Ensured model-specific system prompt prefixes are placed on a new line before the main system prompt. @@ -54,7 +55,9 @@ cog.out(text) - Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. - Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. -- Aider wrote 53% of the code in this release. +- Displayed token count progress and the name of the file or identifier being processed during repo map updates. +- Extended the waiting spinner to also show for non-streaming responses and further enhanced its animation with console width clipping, cursor hiding, and a more continuous appearance. +- Aider wrote 55% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 183da114b..b2c3425e3 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,577 +1,3 @@ -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723313} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6242, "completion_tokens": 1123, "total_tokens": 7365, "cost": 0.0016101, "total_cost": 0.0016101}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723368} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723368} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723389} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723392} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723392} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723392} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6242, "completion_tokens": 1255, "total_tokens": 7497, "cost": 0.0016893, "total_cost": 0.0016893}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723470} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723529} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723532} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723532} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723532} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723540} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723571} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723574} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723574} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723574} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723578} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723597} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723600} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723600} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723600} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723606} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723632} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723634} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723634} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723634} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 642, "total_tokens": 6879, "cost": 0.0013207499999999999, "total_cost": 0.0013207499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723646} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723646} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723703} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723705} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723705} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723705} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 1418, "total_tokens": 7655, "cost": 0.00178635, "total_cost": 0.00178635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723742} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723947} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723950} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723950} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723950} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 880, "total_tokens": 7117, "cost": 0.0014635499999999999, "total_cost": 0.0014635499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723974} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746723974} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724025} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724027} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724027} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724027} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 1282, "total_tokens": 7519, "cost": 0.0017047499999999999, "total_cost": 0.0017047499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724047} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724047} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724236} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724238} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724238} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724238} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 629, "total_tokens": 6866, "cost": 0.0013129499999999998, "total_cost": 0.0013129499999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724249} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724249} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724301} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724303} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724303} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724303} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 718, "total_tokens": 6955, "cost": 0.00136635, "total_cost": 0.00136635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724317} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724317} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724534} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724536} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724536} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724536} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724588} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724592} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724594} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724594} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724594} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 765, "total_tokens": 7002, "cost": 0.00139455, "total_cost": 0.00139455}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724615} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724615} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724781} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724784} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724784} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724784} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 1394, "total_tokens": 7631, "cost": 0.00177195, "total_cost": 0.00177195}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724838} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724838} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724896} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724899} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724899} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724899} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 6237, "completion_tokens": 922, "total_tokens": 7159, "cost": 0.00148875, "total_cost": 0.00148875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724936} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746724936} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725372} -{"event": "model warning", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725375} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725377} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725377} -{"event": "cli session", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725378} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725379} -{"event": "message_send", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "diff", "prompt_tokens": 3492, "completion_tokens": 271, "total_tokens": 3763, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725391} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725491} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725491} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725501} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725507} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725509} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725509} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725509} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725533} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725534} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725536} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725536} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725536} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725541} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725551} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725553} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725553} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725553} -{"event": "message_send", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "whole", "prompt_tokens": 1935, "completion_tokens": 51, "total_tokens": 1986, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725558} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725558} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725561} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725563} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725563} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725563} -{"event": "message_send", "properties": {"main_model": "together_ai/REDACTED", "weak_model": "together_ai/REDACTED", "editor_model": "together_ai/REDACTED", "edit_format": "whole", "prompt_tokens": 1943, "completion_tokens": 15, "total_tokens": 1958, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725573} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725573} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725636} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725642} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725644} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725644} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725644} -{"event": "message_send", "properties": {"main_model": "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput", "weak_model": "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput", "editor_model": "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput", "edit_format": "whole", "prompt_tokens": 1951, "completion_tokens": 43, "total_tokens": 1994, "cost": 0.000416, "total_cost": 0.000416}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725648} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725648} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725775} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725777} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725777} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725777} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5707, "completion_tokens": 195, "total_tokens": 5902, "cost": 0.0009730499999999999, "total_cost": 0.0009730499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725786} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725786} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725789} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725791} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725791} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725791} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5707, "completion_tokens": 581, "total_tokens": 6288, "cost": 0.0012046499999999998, "total_cost": 0.0012046499999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725820} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725820} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725846} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725848} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725848} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725848} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725860} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725862} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725864} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725864} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725864} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 5707, "completion_tokens": 1253, "total_tokens": 6960, "cost": 0.0016078499999999999, "total_cost": 0.0016078499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725927} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746725927} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726378} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726382} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6865, "completion_tokens": 82, "total_tokens": 6947, "cost": 0.00940125, "total_cost": 0.00940125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726385} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726426} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726426} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726443} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726482} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726484} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726490} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726501} -{"event": "message_send_exception", "properties": {"exception": "Only one live display may be active at once"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726502} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726502} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726515} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-preview-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6866, "completion_tokens": 199, "total_tokens": 7065, "cost": 0.0105725, "total_cost": 0.0105725}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726540} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726540} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726547} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726548} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726548} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726548} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726553} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726913} -{"event": "repo", "properties": {"num_files": 621}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726914} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726914} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726914} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726926} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726931} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726951} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726959} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726990} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746726990} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 14008, "completion_tokens": 3802, "total_tokens": 17810, "cost": 0.05553000000000001, "total_cost": 0.05553000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727053} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727062} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 19187, "completion_tokens": 3743, "total_tokens": 22930, "cost": 0.06141375, "total_cost": 0.11694375000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727102} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727129} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727152} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 38503, "completion_tokens": 672, "total_tokens": 39175, "cost": 0.05484875, "total_cost": 0.17179250000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727163} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727208} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727226} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727229} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727256} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 31466, "completion_tokens": 273, "total_tokens": 31739, "cost": 0.04206250000000001, "total_cost": 0.21385500000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727262} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727440} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727511} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 31733, "completion_tokens": 312, "total_tokens": 32045, "cost": 0.04278625, "total_cost": 0.25664125000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746727535} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746728999} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746728999} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729004} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729006} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729006} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729006} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729012} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729014} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729054} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 13502, "completion_tokens": 156, "total_tokens": 13658, "cost": 0.0184375, "total_cost": 0.0184375}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729065} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746729303} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730192} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 28623, "completion_tokens": 246, "total_tokens": 28869, "cost": 0.03823875, "total_cost": 0.03823875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730236} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730236} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730237} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730241} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730406} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730407} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730407} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730407} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730411} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730413} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730417} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730429} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 18827, "completion_tokens": 786, "total_tokens": 19613, "cost": 0.031393750000000005, "total_cost": 0.031393750000000005}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730443} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730453} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730453} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730459} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730461} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730545} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730546} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730555} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730665} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730665} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730791} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 31357, "completion_tokens": 990, "total_tokens": 32347, "cost": 0.04909625, "total_cost": 0.04909625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730823} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730838} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 5588, "completion_tokens": 184, "total_tokens": 5772, "cost": 0.008825000000000001, "total_cost": 0.008825000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730865} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730865} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730892} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730899} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730913} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 32702, "completion_tokens": 583, "total_tokens": 33285, "cost": 0.046707500000000006, "total_cost": 0.09580375000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746730995} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731006} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731013} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731017} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731050} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731064} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731067} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731081} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731084} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731109} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731136} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731138} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731141} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731144} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731153} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731154} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731154} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731154} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731156} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731176} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731177} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731177} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731177} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731179} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731198} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731206} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731212} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731275} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731277} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731289} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731289} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731289} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731294} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731300} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731303} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731311} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731314} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731325} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731360} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731360} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731487} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731495} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731498} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731501} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731502} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731502} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 8223, "completion_tokens": 2842, "total_tokens": 11065, "cost": 0.038698750000000004, "total_cost": 0.038698750000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731628} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731706} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 10957, "completion_tokens": 1920, "total_tokens": 12877, "cost": 0.03289625, "total_cost": 0.071595}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731749} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731814} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731821} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731839} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731850} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731875} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731875} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 8249, "completion_tokens": 2823, "total_tokens": 11072, "cost": 0.03854125, "total_cost": 0.03854125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731951} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746731955} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 11032, "completion_tokens": 1587, "total_tokens": 12619, "cost": 0.029660000000000006, "total_cost": 0.06820125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732083} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732097} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732101} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732115} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732120} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732122} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732190} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732249} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732249} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732293} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732352} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 13572, "completion_tokens": 1866, "total_tokens": 15438, "cost": 0.035625000000000004, "total_cost": 0.10382625000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732387} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732406} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732489} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732491} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732493} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732498} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 5588, "completion_tokens": 340, "total_tokens": 5928, "cost": 0.010385000000000002, "total_cost": 0.010385000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732503} -{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732510} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732512} -{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732514} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732518} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "diff", "prompt_tokens": 9935, "completion_tokens": 5219, "total_tokens": 15154, "cost": 0.30811000000000005, "total_cost": 0.41193625000000006}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732604} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732723} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 5588, "completion_tokens": 227, "total_tokens": 5815, "cost": 0.009255000000000001, "total_cost": 0.009255000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732807} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732807} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732815} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732840} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732850} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732852} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732852} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732852} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732857} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732859} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732861} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732861} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732861} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732864} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732906} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732907} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732907} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746732910} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736688} -{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736691} -{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736755} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736759} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736762} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736762} -{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736762} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736765} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736769} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736771} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736771} -{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736771} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736779} -{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "openrouter/REDACTED", "editor_model": "openrouter/REDACTED", "edit_format": "diff", "prompt_tokens": 7487, "completion_tokens": 400, "total_tokens": 7887, "cost": 0.00136305, "total_cost": 0.00136305}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736790} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736795} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736798} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746736864} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737186} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737234} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple", "prompt_tokens": 30117, "completion_tokens": 361, "total_tokens": 30478, "cost": 0.04125625000000001, "total_cost": 0.04125625000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737284} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737284} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737699} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737700} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737700} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737700} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737727} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737727} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "ask", "prompt_tokens": 6435, "completion_tokens": 884, "total_tokens": 7319, "cost": 0.016883750000000003, "total_cost": 0.016883750000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737803} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737820} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737921} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737926} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737936} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746737943} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738004} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738004} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 33813, "completion_tokens": 554, "total_tokens": 34367, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738026} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738032} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 34494, "completion_tokens": 76, "total_tokens": 34570, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738036} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738068} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 34580, "completion_tokens": 76, "total_tokens": 34656, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738070} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738093} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738097} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738102} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 63505, "completion_tokens": 1191, "total_tokens": 64696, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738163} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738188} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738223} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738235} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738235} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738240} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738244} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738252} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738252} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6343, "completion_tokens": 2379, "total_tokens": 8722, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738367} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738407} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 69472, "completion_tokens": 1827, "total_tokens": 71299, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738456} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 10045, "completion_tokens": 1102, "total_tokens": 11147, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738480} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738525} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 11528, "completion_tokens": 707, "total_tokens": 12235, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738566} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746738934} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739112} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739112} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739112} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739166} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739234} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739236} -{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739238} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739241} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739246} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739258} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739258} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 68151, "completion_tokens": 4679, "total_tokens": 72830, "cost": 0.86867, "total_cost": 0.86867}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739381} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739421} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739458} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739470} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739471} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739471} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739471} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739508} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739508} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 70789, "completion_tokens": 2403, "total_tokens": 73192, "cost": 0.80401, "total_cost": 1.6726800000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739511} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 9168, "completion_tokens": 989, "total_tokens": 10157, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739544} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739672} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739680} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739680} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 11940, "completion_tokens": 485, "total_tokens": 12425, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739687} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739735} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 12723, "completion_tokens": 66, "total_tokens": 12789, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739739} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 74182, "completion_tokens": 3265, "total_tokens": 77447, "cost": 0.8724200000000001, "total_cost": 2.5451}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739763} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739767} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 12906, "completion_tokens": 234, "total_tokens": 13140, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739778} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739786} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 76544, "completion_tokens": 1560, "total_tokens": 78104, "cost": 0.82784, "total_cost": 3.3729400000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739829} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739844} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739847} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739877} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 19935, "completion_tokens": 409, "total_tokens": 20344, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739913} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739948} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746739948} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740094} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740151} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740156} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740158} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740183} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 25752, "completion_tokens": 537, "total_tokens": 26289, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740332} -{"event": "command_lint", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740602} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740637} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 23028, "completion_tokens": 209, "total_tokens": 23237, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740645} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740795} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740800} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740801} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740802} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740803} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740804} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} {"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} {"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} {"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} @@ -998,3 +424,577 @@ {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 38859, "completion_tokens": 263, "total_tokens": 39122, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746724} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746724} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746906} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746919} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746928} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746928} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8141, "completion_tokens": 527, "total_tokens": 8668, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746942} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746970} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746982} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8145, "completion_tokens": 2, "total_tokens": 8147, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746983} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746995} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746997} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747003} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 7199, "completion_tokens": 21, "total_tokens": 7220, "cost": 0.07283, "total_cost": 0.07283}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747008} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747072} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747080} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747082} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747082} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747082} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747084} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 11919, "completion_tokens": 805, "total_tokens": 12724, "cost": 0.15139, "total_cost": 0.15139}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747100} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747106} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747108} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747109} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 9564, "completion_tokens": 21, "total_tokens": 9585, "cost": 0.09648, "total_cost": 0.24786999999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747113} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747123} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747123} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747123} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747127} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747190} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747190} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747194} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747196} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747196} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747196} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747197} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747206} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7646, "completion_tokens": 85, "total_tokens": 7731, "cost": 0.07986, "total_cost": 0.07986}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747210} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747215} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747217} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7642, "completion_tokens": 466, "total_tokens": 8108, "cost": 0.09506, "total_cost": 0.17492000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747228} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747234} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747234} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747328} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747329} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747329} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747332} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747432} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747433} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747433} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747436} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747449} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747450} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747450} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747450} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747451} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747481} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747490} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747491} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747491} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747494} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747526} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747527} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747527} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747527} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747531} +{"event": "command_tokens", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747534} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747541} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747560} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 10472, "completion_tokens": 1189, "total_tokens": 11661, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747572} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 94725, "completion_tokens": 673, "total_tokens": 95398, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747633} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747648} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748758} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748759} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748759} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748772} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748773} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748773} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748784} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748785} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748785} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748803} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748803} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748803} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748819} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748820} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748820} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748824} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748824} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748824} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748828} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748828} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748828} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748846} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748846} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748846} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748889} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748889} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748889} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748898} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748898} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748898} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748901} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748902} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748902} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748908} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748909} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748909} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748912} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748912} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748912} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748920} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748921} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748921} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748951} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748951} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748951} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748955} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748959} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748959} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748959} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748963} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748965} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748966} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748966} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748969} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749018} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749020} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749020} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749020} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749045} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749151} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749161} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749165} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749166} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749166} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749169} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749187} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749187} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749187} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749191} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749193} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749194} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749194} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749197} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749200} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749201} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749201} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749204} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749204} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749208} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749208} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749208} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749211} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749217} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8495, "completion_tokens": 17, "total_tokens": 8512, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749222} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749225} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749225} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749229} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749229} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749229} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749229} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8507, "completion_tokens": 17, "total_tokens": 8524, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749235} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749235} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749253} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749253} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749253} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749253} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 10418, "completion_tokens": 21, "total_tokens": 10439, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749259} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749259} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749281} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749282} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749282} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749287} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749297} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749297} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749297} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749297} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749367} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 6871, "completion_tokens": 316, "total_tokens": 7187, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749381} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749390} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749391} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749391} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749391} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8628, "completion_tokens": 17, "total_tokens": 8645, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749396} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749396} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749404} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749405} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749405} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749405} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8507, "completion_tokens": 17, "total_tokens": 8524, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749410} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749410} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749440} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749440} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749440} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749440} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749449} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749450} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749450} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749450} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8490, "completion_tokens": 17, "total_tokens": 8507, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749455} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749455} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749465} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749466} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749466} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749466} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749474} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749480} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749480} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749480} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749480} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9334, "completion_tokens": 211, "total_tokens": 9545, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749528} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749528} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749544} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749544} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749544} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749548} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749609} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749804} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749804} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749804} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749804} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749810} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7706, "completion_tokens": 335, "total_tokens": 8041, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749817} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750812} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750814} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750814} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750814} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750830} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750835} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7829, "completion_tokens": 1580, "total_tokens": 9409, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750925} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750936} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746750951} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751276} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751276} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751276} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751276} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751303} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751304} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751305} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751305} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751305} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9360, "completion_tokens": 161, "total_tokens": 9521, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751364} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751398} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751398} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751398} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751399} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9265, "completion_tokens": 238, "total_tokens": 9503, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751448} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751462} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751463} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751463} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751463} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9307, "completion_tokens": 115, "total_tokens": 9422, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751503} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751512} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751512} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751512} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751512} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751523} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751524} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751525} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751525} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751525} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9339, "completion_tokens": 189, "total_tokens": 9528, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751577} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751652} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751652} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751652} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751661} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751782} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751782} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751782} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751782} +{"event": "command_help", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751789} +{"event": "interactive help", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751789} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751814} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751872} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "help", "prompt_tokens": 16994, "completion_tokens": 241, "total_tokens": 17235, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751881} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751885} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751885} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751892} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751893} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751893} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751893} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9391, "completion_tokens": 329, "total_tokens": 9720, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751949} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746751949} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757491} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757491} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757491} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757492} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757492} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757497} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8137, "completion_tokens": 540, "total_tokens": 8677, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757521} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757582} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757582} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757599} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757600} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757600} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757600} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757603} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757626} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7987, "completion_tokens": 400, "total_tokens": 8387, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746757703} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758816} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758822} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758823} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758823} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758823} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9336, "completion_tokens": 219, "total_tokens": 9555, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758868} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758914} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758915} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758915} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758915} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9337, "completion_tokens": 301, "total_tokens": 9638, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758940} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758940} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758952} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758952} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758952} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746758959} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759050} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759051} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759051} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759051} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759060} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 6990, "completion_tokens": 577, "total_tokens": 7567, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759125} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759154} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759155} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759155} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759155} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9336, "completion_tokens": 117, "total_tokens": 9453, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759214} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746759214} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795628} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795628} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 7628, "completion_tokens": 123, "total_tokens": 7751, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795637} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795698} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8182, "completion_tokens": 309, "total_tokens": 8491, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795705} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795754} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795755} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795755} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-05-06", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-preview-05-06", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795755} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795756} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746795756} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796457} +{"event": "model warning", "properties": {"main_model": "google/REDACTED", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "google/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796459} +{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796467} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796482} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796485} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796485} +{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "openrouter/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796485} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796486} +{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 8735, "completion_tokens": 10, "total_tokens": 8745, "cost": 0.01101875, "total_cost": 0.01101875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796490} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796491} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796529} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796530} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796530} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796530} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796536} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796540} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796589} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796617} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 26887, "completion_tokens": 185, "total_tokens": 27072, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796623} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796634} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796655} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 27130, "completion_tokens": 528, "total_tokens": 27658, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796666} +{"event": "command_reset", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796846} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796848} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796859} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 14018, "completion_tokens": 113, "total_tokens": 14131, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746796864} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798309} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798501} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798502} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798502} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798506} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798522} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798528} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798528} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798528} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798528} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9316, "completion_tokens": 152, "total_tokens": 9468, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798578} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798578} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798607} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798607} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798607} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798611} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798618} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798619} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798619} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798619} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798635} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7630, "completion_tokens": 132, "total_tokens": 7762, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798640} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798648} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798651} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798651} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798651} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798651} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798652} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798655} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798655} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798655} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798659} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798672} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798673} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798673} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798676} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798724} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798724} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798724} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798728} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798742} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798742} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798742} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798742} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798757} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798806} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798806} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798806} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798806} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798809} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798819} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9628, "completion_tokens": 60, "total_tokens": 9688, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798824} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798826} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 15462, "completion_tokens": 392, "total_tokens": 15854, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798833} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8163, "completion_tokens": 778, "total_tokens": 8941, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798847} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798856} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798865} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798865} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798865} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798869} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798877} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798877} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798877} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798880} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798886} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798887} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798887} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798890} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798929} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798929} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8014, "completion_tokens": 157, "total_tokens": 8171, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798936} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798958} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798990} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798990} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798990} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798994} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798997} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798998} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746798998} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799001} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799005} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799005} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799005} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799009} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8952, "completion_tokens": 611, "total_tokens": 9563, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799035} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799044} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 10212, "completion_tokens": 251, "total_tokens": 10463, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799050} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799051} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799051} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799051} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799055} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799058} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799058} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799058} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799061} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799071} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799072} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799072} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799074} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799084} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799085} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799085} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799089} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799137} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799137} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799137} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799141} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799173} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799174} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799174} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799177} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799196} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799196} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799196} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799207} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799207} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799207} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799216} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799223} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799224} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799224} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799236} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799295} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799296} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799296} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799312} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799313} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799313} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799326} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799329} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799330} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799330} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799358} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799358} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799358} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799362} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799371} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799372} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799372} +{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799375} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799385} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799385} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799385} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799385} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9371, "completion_tokens": 166, "total_tokens": 9537, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746799449} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803120} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803121} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803121} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803121} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803139} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9346, "completion_tokens": 233, "total_tokens": 9579, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803166} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803201} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803201} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803201} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803201} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803204} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803226} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803226} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 23451, "completion_tokens": 1189, "total_tokens": 24640, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803290} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803399} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803409} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803428} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 5344, "completion_tokens": 235, "total_tokens": 5579, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803433} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803437} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803440} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803440} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803440} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 47265, "completion_tokens": 1360, "total_tokens": 48625, "cost": 0.52705, "total_cost": 0.52705}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803472} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803472} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803523} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 5700, "completion_tokens": 275, "total_tokens": 5975, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803529} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803631} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 5985, "completion_tokens": 234, "total_tokens": 6219, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803637} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803643} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803646} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803646} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803646} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 47281, "completion_tokens": 1782, "total_tokens": 49063, "cost": 0.5440900000000001, "total_cost": 0.5440900000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803690} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803690} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803718} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803718} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803718} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803718} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 44733, "completion_tokens": 365, "total_tokens": 45098, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803787} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803787} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803791} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803791} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6662, "completion_tokens": 261, "total_tokens": 6923, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746803800} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804067} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804086} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804086} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804086} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804086} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804098} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 6018, "completion_tokens": 517, "total_tokens": 6535, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804107} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804368} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804368} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804370} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804370} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804370} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804370} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 32147, "completion_tokens": 247, "total_tokens": 32394, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804504} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804504} diff --git a/aider/website/docs/config/adv-model-settings.md b/aider/website/docs/config/adv-model-settings.md index e58228438..311dec9ce 100644 --- a/aider/website/docs/config/adv-model-settings.md +++ b/aider/website/docs/config/adv-model-settings.md @@ -1224,7 +1224,7 @@ cog.out("```\n") max_tokens: 8192 caches_by_default: true -- name: openrouter/google/gemini-2.5-pro-exp-03-25:free +- name: openrouter/google/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced weak_model_name: openrouter/google/gemini-2.0-flash-exp:free use_repo_map: true diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index 0bc54cfc5..9d846ab24 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,13 +264,9 @@ tr:hover { background-color: #f5f5f5; }
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25816,68243.6%
gemini/gemini-2.5-pro-preview-05-06582,75231.1%
o3316,72716.9%
openrouter/REDACTED131,7737.0%
gemini/gemini-2.5-pro-exp-03-25731,45638.9%
o3629,29133.5%
gemini/gemini-2.5-pro-preview-05-06389,85420.7%
openrouter/REDACTED106,6825.7%
gemini/gemini-2.5-pro-preview-03-2514,0120.7%
together_ai/REDACTED7,7070.4%
together_ai/Qwen/Qwen3-235B-A22B-fp8-tput1,9940.1%
- - - - - - - + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25731,45638.9%
o3629,29133.5%
gemini/gemini-2.5-pro-preview-05-06389,85420.7%
openrouter/REDACTED106,6825.7%
gemini/gemini-2.5-pro-preview-03-2514,0120.7%
together_ai/REDACTED7,7070.4%
together_ai/Qwen/Qwen3-235B-A22B-fp8-tput1,9940.1%
gemini/gemini-2.5-pro-exp-03-25988,28868.0%
o3455,62031.4%
openrouter/REDACTED8,7450.6%
{: .note :} diff --git a/scripts/history_prompts.py b/scripts/history_prompts.py index 5902b9f57..a494d0755 100644 --- a/scripts/history_prompts.py +++ b/scripts/history_prompts.py @@ -1,15 +1,17 @@ history_prompt = """ -Update the history doc with changes shown in the diffs. -Describe actual user-facing changes, not every single commit that was made implementing them. +Update the history markdown doc with changes shown in the diffs. +Succinctly describe actual user-facing changes, not every single commit or detail that was made implementing them. -Only add new items not already listed. +Only add new items not already listed in the history markdown. Do NOT edit or update existing history entries. Do NOT add duplicate entries for changes that have existing history entries. +Do NOT add additional entries for small tweaks to features which are already listed in the existing history. -Pay attention to see if changes are later modified or superseded. +Pay attention to see if changes are later modified or superseded in the commit logs. The history doc should only reflect the *final* version of changes which have evolved within a version's commit history. If the history doc already describes the final behavior, don't document the changes that led us there. +Bullet each item at the start of the line with `-`. End each bullet with a period. If the change was made by someone other than Paul Gauthier note it at the end of the bullet point as ", by XXX." @@ -19,6 +21,6 @@ Changes in the .x-dev version should be listed under a "### main branch" heading Start a new "### main branch" section at the top of the file if needed. -Also, add this as the last bullet under the "### main branch" section: +Also, add this as the last bullet under the "### main branch" section, replacing an existing version if present: {aider_line} """ # noqa From af9ae849bdcd0972206917630bbddd8d4a47a830 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 08:51:44 -0700 Subject: [PATCH 331/459] docs: Add HN testimonial to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 14db049f8..24359dd76 100644 --- a/README.md +++ b/README.md @@ -173,5 +173,6 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u - *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* — [Joshua D Vander Hook](https://x.com/jodavaho/status/1911154899057795218) - *"thanks to aider, i have started and finished three personal projects within the last two days"* — [joseph stalzyn](https://x.com/anitaheeder/status/1908338609645904160) - *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* — [koleok](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) +- *"Aider ... is the tool to benchmark against."* — [BeetleB](https://news.ycombinator.com/item?id=43930201) - *"aider is really cool"* — [kache (@yacineMTB)](https://x.com/yacineMTB/status/1911224442430124387) From c6ad5c8cd2ada5f5ef4f100cb255c1efc7b6c666 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 08:56:27 -0700 Subject: [PATCH 332/459] build: Drop support for Python 3.9 --- pyproject.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 40a52f566..e92d278d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,11 +12,10 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.9", "Programming Language :: Python", "Topic :: Software Development", ] -requires-python = ">=3.9,<3.13" +requires-python = ">=3.10,<3.13" dynamic = ["dependencies", "optional-dependencies", "version"] [project.urls] From f8c154edced8de05158ba17585486e11deea117a Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 08:57:08 -0700 Subject: [PATCH 333/459] drop pinned networx and scipy and therefore py3.9 support #3973 --- requirements/requirements.in | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index d1c49e35b..a29cdb033 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -35,14 +35,12 @@ google-generativeai # in matplotlib and a bunch of other deps # https://github.com/networkx/networkx/blob/d7132daa8588f653eacac7a5bae1ee85a183fa43/pyproject.toml#L57 # We really only need networkx itself and scipy for the repomap. -# Pin below v3.3 to retain python 3.9 compatibility. -networkx<3.3 +networkx # This is the one networkx dependency that we need. # Including it here explicitly because we # didn't specify networkx[default] above. -# Pin below 1.14 to retain python 3.9 compatibility. -scipy<1.14 +scipy # GitHub Release action failing on "KeyError: 'home-page'" # https://github.com/pypa/twine/blob/6fbf880ee60915cf1666348c4bdd78a10415f2ac/twine/__init__.py#L40 From f7a073961c68b4b7e3d3e2f55574eb6438901b37 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 08:59:16 -0700 Subject: [PATCH 334/459] ci: Drop Python 3.9 from CI matrix --- .github/workflows/check_pypi_version.yml | 2 +- .github/workflows/ubuntu-tests.yml | 2 +- .github/workflows/windows-tests.yml | 2 +- .github/workflows/windows_check_pypi_version.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check_pypi_version.yml b/.github/workflows/check_pypi_version.yml index ba99404d3..b383e87be 100644 --- a/.github/workflows/check_pypi_version.yml +++ b/.github/workflows/check_pypi_version.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/ubuntu-tests.yml b/.github/workflows/ubuntu-tests.yml index 632c03757..753470af0 100644 --- a/.github/workflows/ubuntu-tests.yml +++ b/.github/workflows/ubuntu-tests.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - name: Check out repository diff --git a/.github/workflows/windows-tests.yml b/.github/workflows/windows-tests.yml index 21799563e..f79f84b66 100644 --- a/.github/workflows/windows-tests.yml +++ b/.github/workflows/windows-tests.yml @@ -25,7 +25,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - name: Check out repository diff --git a/.github/workflows/windows_check_pypi_version.yml b/.github/workflows/windows_check_pypi_version.yml index 960241326..6bd48fdf6 100644 --- a/.github/workflows/windows_check_pypi_version.yml +++ b/.github/workflows/windows_check_pypi_version.yml @@ -15,7 +15,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] defaults: run: shell: pwsh # Use PowerShell for all run steps From 88fba5f20b70f80656a099d64190f3164a8942d3 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 09:01:27 -0700 Subject: [PATCH 335/459] bump deps while dropping py3.9 support --- requirements.txt | 4 ++-- requirements/common-constraints.txt | 6 +++--- requirements/requirements-help.txt | 6 +++--- requirements/requirements-playwright.txt | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index 5fcad0a8b..d26543ad1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -246,7 +246,7 @@ multidict==6.4.3 # -c requirements/common-constraints.txt # aiohttp # yarl -networkx==3.2.1 +networkx==3.4.2 # via # -c requirements/common-constraints.txt # -r requirements/requirements.in @@ -410,7 +410,7 @@ rsa==4.9.1 # via # -c requirements/common-constraints.txt # google-auth -scipy==1.13.1 +scipy==1.15.3 # via # -c requirements/common-constraints.txt # -r requirements/requirements.in diff --git a/requirements/common-constraints.txt b/requirements/common-constraints.txt index 3406f7f40..122473cc7 100644 --- a/requirements/common-constraints.txt +++ b/requirements/common-constraints.txt @@ -156,7 +156,7 @@ googleapis-common-protos==1.70.0 # via # google-api-core # grpcio-status -greenlet==3.2.1 +greenlet==3.2.2 # via # playwright # sqlalchemy @@ -273,7 +273,7 @@ narwhals==1.38.2 # via altair nest-asyncio==1.6.0 # via llama-index-core -networkx==3.2.1 +networkx==3.4.2 # via # -r requirements/requirements.in # llama-index-core @@ -473,7 +473,7 @@ safetensors==0.5.3 # via transformers scikit-learn==1.6.1 # via sentence-transformers -scipy==1.13.1 +scipy==1.15.3 # via # -r requirements/requirements.in # scikit-learn diff --git a/requirements/requirements-help.txt b/requirements/requirements-help.txt index b930a01ff..2559b273f 100644 --- a/requirements/requirements-help.txt +++ b/requirements/requirements-help.txt @@ -81,7 +81,7 @@ fsspec==2025.3.2 # huggingface-hub # llama-index-core # torch -greenlet==3.2.1 +greenlet==3.2.2 # via # -c requirements/common-constraints.txt # sqlalchemy @@ -163,7 +163,7 @@ nest-asyncio==1.6.0 # via # -c requirements/common-constraints.txt # llama-index-core -networkx==3.2.1 +networkx==3.4.2 # via # -c requirements/common-constraints.txt # llama-index-core @@ -236,7 +236,7 @@ scikit-learn==1.6.1 # via # -c requirements/common-constraints.txt # sentence-transformers -scipy==1.13.1 +scipy==1.15.3 # via # -c requirements/common-constraints.txt # scikit-learn diff --git a/requirements/requirements-playwright.txt b/requirements/requirements-playwright.txt index e16058c8b..bdbf6e954 100644 --- a/requirements/requirements-playwright.txt +++ b/requirements/requirements-playwright.txt @@ -1,6 +1,6 @@ # This file was autogenerated by uv via the following command: # uv pip compile --no-strip-extras --constraint=requirements/common-constraints.txt --output-file=requirements/requirements-playwright.txt requirements/requirements-playwright.in -greenlet==3.2.1 +greenlet==3.2.2 # via # -c requirements/common-constraints.txt # playwright From dbfba029af29dfd5f353bf581525598e92920a0e Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 09:02:42 -0700 Subject: [PATCH 336/459] copy --- HISTORY.md | 1 + aider/website/HISTORY.md | 1 + aider/website/assets/sample-analytics.jsonl | 126 ++++++++++---------- aider/website/docs/faq.md | 4 +- aider/website/index.html | 5 + 5 files changed, 72 insertions(+), 65 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index d54a409f9..6a560a5f0 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -33,6 +33,7 @@ - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. - Displayed token count progress and the name of the file or identifier being processed during repo map updates. - Extended the waiting spinner to also show for non-streaming responses and further enhanced its animation with console width clipping, cursor hiding, and a more continuous appearance. +- Dropped support for Python 3.9. - Aider wrote 55% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index 43a77b1a3..90e914e3a 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -57,6 +57,7 @@ cog.out(text) - The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. - Displayed token count progress and the name of the file or identifier being processed during repo map updates. - Extended the waiting spinner to also show for non-streaming responses and further enhanced its animation with console width clipping, cursor hiding, and a more continuous appearance. +- Dropped support for Python 3.9. - Aider wrote 55% of the code in this release. ### Aider v0.82.3 diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index b2c3425e3..f89c66245 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,66 +1,3 @@ -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740805} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740806} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740807} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740888} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} -{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740889} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740890} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740989} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746740989} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741045} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741116} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741117} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741117} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741117} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741128} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741128} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8311, "completion_tokens": 73, "total_tokens": 8384, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741133} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 34536, "completion_tokens": 239, "total_tokens": 34775, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741136} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741136} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741137} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 4178, "completion_tokens": 107, "total_tokens": 4285, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741140} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 35036, "completion_tokens": 455, "total_tokens": 35491, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741205} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741205} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741206} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741208} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741243} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741377} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741377} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741384} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741385} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741385} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741385} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741388} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741388} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 4335, "completion_tokens": 1387, "total_tokens": 5722, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741410} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741467} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6505, "completion_tokens": 1110, "total_tokens": 7615, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741488} {"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741511} @@ -998,3 +935,66 @@ {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804370} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 32147, "completion_tokens": 247, "total_tokens": 32394, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804504} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746804504} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805231} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805234} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805234} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805234} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805237} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805245} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805245} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805248} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805250} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805250} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805250} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805252} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805351} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7724, "completion_tokens": 21, "total_tokens": 7745, "cost": 0.07808, "total_cost": 0.07808}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805358} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805362} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805362} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805367} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805370} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805370} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805370} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805371} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805394} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7749, "completion_tokens": 21, "total_tokens": 7770, "cost": 0.07833, "total_cost": 0.07833}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805398} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805402} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805402} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805407} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805409} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805409} +{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805409} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805410} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805414} +{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7735, "completion_tokens": 85, "total_tokens": 7820, "cost": 0.08075, "total_cost": 0.08075}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805421} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805822} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805822} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805822} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805822} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805895} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8284, "completion_tokens": 277, "total_tokens": 8561, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805902} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805909} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746805909} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806175} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806176} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806176} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806176} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806181} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 4530, "completion_tokens": 172, "total_tokens": 4702, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806186} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806199} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806199} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 4468, "completion_tokens": 415, "total_tokens": 4883, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806221} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806245} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 10674, "completion_tokens": 489, "total_tokens": 11163, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806259} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806310} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806311} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806321} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 5866, "completion_tokens": 333, "total_tokens": 6199, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806328} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806333} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806333} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806333} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806336} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806342} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8939, "completion_tokens": 469, "total_tokens": 9408, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806353} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806360} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806382} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index 9d846ab24..86ba9ac74 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,8 +264,8 @@ tr:hover { background-color: #f5f5f5; } - - + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25988,28868.0%
o3455,62031.4%
gemini/gemini-2.5-pro-exp-03-25944,54765.9%
o3478,95533.4%
openrouter/REDACTED8,7450.6%
diff --git a/aider/website/index.html b/aider/website/index.html index f21b176d1..862d793c3 100644 --- a/aider/website/index.html +++ b/aider/website/index.html @@ -433,6 +433,11 @@ const testimonials = [ author: "koleok", link: "https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783" }, + { + text: "Aider ... is the tool to benchmark against.", + author: "BeetleB", + link: "https://news.ycombinator.com/item?id=43930201" + }, { text: "aider is really cool", author: "kache (@yacineMTB)", From fcc85a7ae699161356ba2e9b7bbf9fdfcfac9511 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 09:17:59 -0700 Subject: [PATCH 337/459] fix: Update test mocks for get_commit_message signature --- tests/basic/test_coder.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/basic/test_coder.py b/tests/basic/test_coder.py index c58ade1b2..22739ac35 100644 --- a/tests/basic/test_coder.py +++ b/tests/basic/test_coder.py @@ -649,7 +649,7 @@ TWO coder.partial_response_function_call = dict() return [] - def mock_get_commit_message(diffs, context): + def mock_get_commit_message(diffs, context, user_language=None): self.assertNotIn("one", diffs) self.assertNotIn("ONE", diffs) return "commit message" @@ -704,7 +704,7 @@ three saved_diffs = [] - def mock_get_commit_message(diffs, context): + def mock_get_commit_message(diffs, context, user_language=None): saved_diffs.append(diffs) return "commit message" @@ -782,7 +782,7 @@ two saved_diffs = [] - def mock_get_commit_message(diffs, context): + def mock_get_commit_message(diffs, context, user_language=None): saved_diffs.append(diffs) return "commit message" From 91d7fbd65906fd2ba6b01c7f435f40e3f5dd891b Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 09:51:44 -0700 Subject: [PATCH 338/459] fix: Catch KeyboardInterrupt in main and end spinner --- aider/utils.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 8721d438e..80cb0f38e 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -489,11 +489,15 @@ def printable_shell_command(cmd_list): def main(): spinner = Spinner("Running spinner...") - for _ in range(100): - time.sleep(0.15) - spinner.step() - spinner.end() - print("Success!") + try: + for _ in range(100): + time.sleep(0.15) + spinner.step() + print("Success!") + except KeyboardInterrupt: + print("\nInterrupted by user.") + finally: + spinner.end() if __name__ == "__main__": From c806f18698660232d49be0d58f3a5454800af02d Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 10:04:08 -0700 Subject: [PATCH 339/459] fix: Show cursor on KeyboardInterrupt exit --- aider/coders/base_coder.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index ab59600cf..95b450a8a 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -23,6 +23,7 @@ try: except ImportError: # Babel not installed – we will fall back to a small mapping Locale = None from json.decoder import JSONDecodeError +from rich.console import Console from pathlib import Path from typing import List @@ -981,6 +982,8 @@ class Coder: thresh = 2 # seconds if self.last_keyboard_interrupt and now - self.last_keyboard_interrupt < thresh: self.io.tool_warning("\n\n^C KeyboardInterrupt") + # Ensure cursor is visible on exit + Console().show_cursor(True) self.event("exit", reason="Control-C") sys.exit() From 0632c7a90f492a6a55b162949fc7b16447d18245 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 10:04:14 -0700 Subject: [PATCH 340/459] chore: reorder imports --- aider/coders/base_coder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 95b450a8a..f0873a922 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -23,10 +23,11 @@ try: except ImportError: # Babel not installed – we will fall back to a small mapping Locale = None from json.decoder import JSONDecodeError -from rich.console import Console from pathlib import Path from typing import List +from rich.console import Console + from aider import __version__, models, prompts, urls, utils from aider.analytics import Analytics from aider.commands import Commands From 1b2eeaff56d016f633bc2187ae34c56ad52af2c8 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 10:05:56 -0700 Subject: [PATCH 341/459] fix: Ensure cursor is shown on first Ctrl+C --- aider/coders/base_coder.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index f0873a922..fc40d818e 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -978,13 +978,14 @@ class Coder: return inp def keyboard_interrupt(self): + # Ensure cursor is visible on exit + Console().show_cursor(True) + now = time.time() thresh = 2 # seconds if self.last_keyboard_interrupt and now - self.last_keyboard_interrupt < thresh: self.io.tool_warning("\n\n^C KeyboardInterrupt") - # Ensure cursor is visible on exit - Console().show_cursor(True) self.event("exit", reason="Control-C") sys.exit() From 9d74e8c730edf1c32a7f47cff1d60abfe8554418 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 10:05:59 -0700 Subject: [PATCH 342/459] refactor: Handle KeyboardInterrupt in get_repo_map --- aider/coders/base_coder.py | 58 ++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index fc40d818e..4cec92d6f 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -704,42 +704,46 @@ class Coder: if not self.repo_map: return - cur_msg_text = self.get_cur_message_text() - mentioned_fnames = self.get_file_mentions(cur_msg_text) - mentioned_idents = self.get_ident_mentions(cur_msg_text) + try: + cur_msg_text = self.get_cur_message_text() + mentioned_fnames = self.get_file_mentions(cur_msg_text) + mentioned_idents = self.get_ident_mentions(cur_msg_text) - mentioned_fnames.update(self.get_ident_filename_matches(mentioned_idents)) + mentioned_fnames.update(self.get_ident_filename_matches(mentioned_idents)) - all_abs_files = set(self.get_all_abs_files()) - repo_abs_read_only_fnames = set(self.abs_read_only_fnames) & all_abs_files - chat_files = set(self.abs_fnames) | repo_abs_read_only_fnames - other_files = all_abs_files - chat_files + all_abs_files = set(self.get_all_abs_files()) + repo_abs_read_only_fnames = set(self.abs_read_only_fnames) & all_abs_files + chat_files = set(self.abs_fnames) | repo_abs_read_only_fnames + other_files = all_abs_files - chat_files - repo_content = self.repo_map.get_repo_map( - chat_files, - other_files, - mentioned_fnames=mentioned_fnames, - mentioned_idents=mentioned_idents, - force_refresh=force_refresh, - ) - - # fall back to global repo map if files in chat are disjoint from rest of repo - if not repo_content: repo_content = self.repo_map.get_repo_map( - set(), - all_abs_files, + chat_files, + other_files, mentioned_fnames=mentioned_fnames, mentioned_idents=mentioned_idents, + force_refresh=force_refresh, ) - # fall back to completely unhinted repo - if not repo_content: - repo_content = self.repo_map.get_repo_map( - set(), - all_abs_files, - ) + # fall back to global repo map if files in chat are disjoint from rest of repo + if not repo_content: + repo_content = self.repo_map.get_repo_map( + set(), + all_abs_files, + mentioned_fnames=mentioned_fnames, + mentioned_idents=mentioned_idents, + ) - return repo_content + # fall back to completely unhinted repo + if not repo_content: + repo_content = self.repo_map.get_repo_map( + set(), + all_abs_files, + ) + + return repo_content + except KeyboardInterrupt: + self.keyboard_interrupt() + return None def get_repo_messages(self): repo_messages = [] From 7f3032056646469d0f27a67ab48b29f12ca9de97 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 10:07:21 -0700 Subject: [PATCH 343/459] chore: Disable pretty printing in benchmark I/O --- benchmark/benchmark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/benchmark.py b/benchmark/benchmark.py index 3cfbe104d..bf09bafef 100755 --- a/benchmark/benchmark.py +++ b/benchmark/benchmark.py @@ -784,7 +784,7 @@ def run_test_real( instructions += prompts.instructions_addendum.format(file_list=file_list) io = InputOutput( - pretty=True, + pretty=False, yes=True, chat_history_file=history_fname, ) From ed262b8b06c6feeefda26dff57c9507b51052f90 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 10:27:22 -0700 Subject: [PATCH 344/459] Revert "refactor: Handle KeyboardInterrupt in get_repo_map" This reverts commit 9d74e8c730edf1c32a7f47cff1d60abfe8554418. --- aider/coders/base_coder.py | 58 ++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 4cec92d6f..fc40d818e 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -704,46 +704,42 @@ class Coder: if not self.repo_map: return - try: - cur_msg_text = self.get_cur_message_text() - mentioned_fnames = self.get_file_mentions(cur_msg_text) - mentioned_idents = self.get_ident_mentions(cur_msg_text) + cur_msg_text = self.get_cur_message_text() + mentioned_fnames = self.get_file_mentions(cur_msg_text) + mentioned_idents = self.get_ident_mentions(cur_msg_text) - mentioned_fnames.update(self.get_ident_filename_matches(mentioned_idents)) + mentioned_fnames.update(self.get_ident_filename_matches(mentioned_idents)) - all_abs_files = set(self.get_all_abs_files()) - repo_abs_read_only_fnames = set(self.abs_read_only_fnames) & all_abs_files - chat_files = set(self.abs_fnames) | repo_abs_read_only_fnames - other_files = all_abs_files - chat_files + all_abs_files = set(self.get_all_abs_files()) + repo_abs_read_only_fnames = set(self.abs_read_only_fnames) & all_abs_files + chat_files = set(self.abs_fnames) | repo_abs_read_only_fnames + other_files = all_abs_files - chat_files + repo_content = self.repo_map.get_repo_map( + chat_files, + other_files, + mentioned_fnames=mentioned_fnames, + mentioned_idents=mentioned_idents, + force_refresh=force_refresh, + ) + + # fall back to global repo map if files in chat are disjoint from rest of repo + if not repo_content: repo_content = self.repo_map.get_repo_map( - chat_files, - other_files, + set(), + all_abs_files, mentioned_fnames=mentioned_fnames, mentioned_idents=mentioned_idents, - force_refresh=force_refresh, ) - # fall back to global repo map if files in chat are disjoint from rest of repo - if not repo_content: - repo_content = self.repo_map.get_repo_map( - set(), - all_abs_files, - mentioned_fnames=mentioned_fnames, - mentioned_idents=mentioned_idents, - ) + # fall back to completely unhinted repo + if not repo_content: + repo_content = self.repo_map.get_repo_map( + set(), + all_abs_files, + ) - # fall back to completely unhinted repo - if not repo_content: - repo_content = self.repo_map.get_repo_map( - set(), - all_abs_files, - ) - - return repo_content - except KeyboardInterrupt: - self.keyboard_interrupt() - return None + return repo_content def get_repo_messages(self): repo_messages = [] From 28d87767cdae998598ed348112297e60e6fe1520 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 13:37:54 -0700 Subject: [PATCH 345/459] update discord invite link --- README.md | 2 +- aider/website/_config.yml | 4 ++-- aider/website/_includes/help.md | 2 +- aider/website/_includes/nav_footer_custom.html | 2 +- aider/website/index.html | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 24359dd76..d4677b58c 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u ### Community & Resources - [LLM Leaderboards](https://aider.chat/docs/leaderboards/) - [GitHub Repository](https://github.com/Aider-AI/aider) -- [Discord Community](https://discord.gg/Tv2uQnR88V) +- [Discord Community](https://discord.gg/Y7X7bhMQFV) - [Blog](https://aider.chat/blog/) ## Kind Words From Users diff --git a/aider/website/_config.yml b/aider/website/_config.yml index 20eebdd5e..c6e12f11e 100644 --- a/aider/website/_config.yml +++ b/aider/website/_config.yml @@ -32,7 +32,7 @@ aux_links: "GitHub": - "https://github.com/Aider-AI/aider" "Discord": - - "https://discord.gg/Tv2uQnR88V" + - "https://discord.gg/Y7X7bhMQFV" "Blog": - "/blog/" @@ -40,7 +40,7 @@ nav_external_links: - title: "GitHub" url: "https://github.com/Aider-AI/aider" - title: "Discord" - url: "https://discord.gg/Tv2uQnR88V" + url: "https://discord.gg/Y7X7bhMQFV" repository: Aider-AI/aider diff --git a/aider/website/_includes/help.md b/aider/website/_includes/help.md index 661af1043..f28a48273 100644 --- a/aider/website/_includes/help.md +++ b/aider/website/_includes/help.md @@ -2,7 +2,7 @@ If you need more help, please check our [GitHub issues](https://github.com/Aider-AI/aider/issues) and file a new issue if your problem isn't discussed. Or drop into our -[Discord](https://discord.gg/Tv2uQnR88V) +[Discord](https://discord.gg/Y7X7bhMQFV) to chat with us. When reporting problems, it is very helpful if you can provide: diff --git a/aider/website/_includes/nav_footer_custom.html b/aider/website/_includes/nav_footer_custom.html index 7c15832fa..bc2b06268 100644 --- a/aider/website/_includes/nav_footer_custom.html +++ b/aider/website/_includes/nav_footer_custom.html @@ -3,5 +3,5 @@ Aider is on GitHub and - Discord. + Discord. diff --git a/aider/website/index.html b/aider/website/index.html index 862d793c3..c632fbc6c 100644 --- a/aider/website/index.html +++ b/aider/website/index.html @@ -27,7 +27,7 @@ layout: none Features Getting Started Documentation - Discord + Discord GitHub
@@ -641,7 +641,7 @@ const testimonials = [
@@ -654,7 +654,7 @@ const testimonials = [ From 425fb6d7a8be99316244726349ea2015b648ecc6 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 13:38:17 -0700 Subject: [PATCH 346/459] copy --- aider/website/assets/sample-analytics.jsonl | 516 ++++++++++---------- aider/website/docs/faq.md | 6 +- 2 files changed, 261 insertions(+), 261 deletions(-) diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index f89c66245..db51c4c31 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,261 +1,3 @@ -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741467} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6505, "completion_tokens": 1110, "total_tokens": 7615, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741488} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741511} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741511} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741532} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741532} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 7902, "completion_tokens": 920, "total_tokens": 8822, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741538} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741601} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741601} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8862, "completion_tokens": 194, "total_tokens": 9056, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741609} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741671} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741671} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 9155, "completion_tokens": 462, "total_tokens": 9617, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741683} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741695} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9895, "completion_tokens": 88, "total_tokens": 9983, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741700} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741775} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741804} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741804} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741804} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741805} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741809} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741816} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741829} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741829} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 16879, "completion_tokens": 935, "total_tokens": 17814, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741873} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741906} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741908} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741912} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741912} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 12536, "completion_tokens": 933, "total_tokens": 13469, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746741942} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742038} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742108} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742115} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742120} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742120} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 11006, "completion_tokens": 326, "total_tokens": 11332, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742135} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742147} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742446} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742455} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742470} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 13513, "completion_tokens": 112, "total_tokens": 13625, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742482} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742487} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 22061, "completion_tokens": 1859, "total_tokens": 23920, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742513} -{"event": "command_reset", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742530} -{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742532} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742538} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742603} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742604} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742605} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742606} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742607} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742608} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742609} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742610} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742689} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} -{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742690} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742691} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742819} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742872} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742874} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742915} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8099, "completion_tokens": 195, "total_tokens": 8294, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746742987} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743000} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743044} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743046} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 35736, "completion_tokens": 428, "total_tokens": 36164, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743115} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743115} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743135} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8113, "completion_tokens": 2128, "total_tokens": 10241, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743267} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743309} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743316} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743338} -{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743354} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743365} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} -{"event": "repo", "properties": {"num_files": 623}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743458} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743493} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743503} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743506} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743510} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743518} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743527} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 10143, "completion_tokens": 12389, "total_tokens": 22532, "cost": 0.59699, "total_cost": 0.59699}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743568} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743572} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 26024, "completion_tokens": 1961, "total_tokens": 27985, "cost": 0.33868000000000004, "total_cost": 0.33868000000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743595} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743604} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743607} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 27270, "completion_tokens": 246, "total_tokens": 27516, "cost": 0.10878, "total_cost": 0.44746}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743612} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 11257, "completion_tokens": 2663, "total_tokens": 13920, "cost": 0.21909, "total_cost": 0.81608}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743647} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743701} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 11535, "completion_tokens": 1714, "total_tokens": 13249, "cost": 0.18391000000000002, "total_cost": 0.99999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743733} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743780} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743931} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743940} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743964} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743965} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743966} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743967} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743968} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} {"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} {"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} {"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} @@ -998,3 +740,261 @@ {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8939, "completion_tokens": 469, "total_tokens": 9408, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806353} {"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806360} {"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806382} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806577} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806581} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806581} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806581} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806581} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806581} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806582} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806583} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806584} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806585} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806586} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806587} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806588} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806589} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806589} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806589} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806589} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806589} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806680} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806681} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806797} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806805} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746806805} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807045} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807045} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807045} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807045} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807048} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807269} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807269} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807269} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807269} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807285} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807297} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807308} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807318} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807321} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807329} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807363} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807363} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807398} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807398} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 23026, "completion_tokens": 502, "total_tokens": 23528, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807420} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807470} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 23799, "completion_tokens": 166, "total_tokens": 23965, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746807477} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809445} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809445} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809445} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809445} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809475} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809482} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809482} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809482} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809482} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809497} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8097, "completion_tokens": 165, "total_tokens": 8262, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809502} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809516} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809724} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809985} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809986} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809986} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809986} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809996} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809997} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809997} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746809997} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810015} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810207} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810207} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810207} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810207} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810226} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810226} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810226} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810227} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810240} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 21143, "completion_tokens": 203, "total_tokens": 21346, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810247} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810275} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810275} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810280} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810281} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810281} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810281} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810324} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810324} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810324} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810325} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810335} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 22156, "completion_tokens": 681, "total_tokens": 22837, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810354} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810368} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810368} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810372} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810372} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810372} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810373} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810382} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810383} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810384} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810384} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810384} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810386} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810390} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810391} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810391} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810391} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810396} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810436} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810437} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810437} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810441} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810453} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810454} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810454} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810454} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810503} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810513} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810513} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810513} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810513} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8627, "completion_tokens": 44, "total_tokens": 8671, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810519} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810519} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810525} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810525} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810525} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810525} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8428, "completion_tokens": 48, "total_tokens": 8476, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810532} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810532} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810538} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810539} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810539} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810539} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746810545} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811483} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811483} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811483} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811483} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811485} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811519} +{"event": "repo", "properties": {"num_files": 614}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811520} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811520} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811520} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811526} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811526} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811526} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811526} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811531} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811540} +{"event": "repo", "properties": {"num_files": 614}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811540} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811540} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811540} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811542} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8329, "completion_tokens": 48, "total_tokens": 8377, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811547} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811552} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811566} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811567} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811567} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811567} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811569} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811575} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811575} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811575} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811575} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811595} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811608} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811613} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811614} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811614} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811614} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811615} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811618} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811618} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811618} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811618} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811620} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811628} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811628} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811652} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811653} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811653} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811653} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811654} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811658} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811662} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811662} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811703} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811703} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811703} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811703} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811705} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index 86ba9ac74..60d58efc7 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,9 +264,9 @@ tr:hover { background-color: #f5f5f5; } - - - + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25944,54765.9%
o3478,95533.4%
openrouter/REDACTED8,7450.6%
gemini/gemini-2.5-pro-exp-03-25890,05769.9%
o3373,75329.4%
openrouter/REDACTED8,7450.7%
{: .note :} From 09880ee8f4e0f59992e3fc31610e0efe5940ffb2 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 15:15:41 -0700 Subject: [PATCH 347/459] qwen3 official --- aider/website/_data/qwen3_leaderboard.yml | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/aider/website/_data/qwen3_leaderboard.yml b/aider/website/_data/qwen3_leaderboard.yml index 2e9eac1fc..5b8e3233d 100644 --- a/aider/website/_data/qwen3_leaderboard.yml +++ b/aider/website/_data/qwen3_leaderboard.yml @@ -213,3 +213,32 @@ versions: 0.82.4.dev seconds_per_case: 635.2 total_cost: 0.0000 + + +- dirname: 2025-05-09-17-02-02--qwen3-235b-a22b.unthink_16k_diff + test_cases: 225 + model: Qwen3 235B A22B no think, via official Alibaba API + edit_format: diff + commit_hash: 91d7fbd-dirty + pass_rate_1: 28.9 + pass_rate_2: 59.6 + pass_num_1: 65 + pass_num_2: 134 + percent_cases_well_formed: 92.9 + error_outputs: 22 + num_malformed_responses: 22 + num_with_malformed_responses: 16 + user_asks: 111 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2816192 + completion_tokens: 342062 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/qwen3-235b-a22b + date: 2025-05-09 + versions: 0.82.4.dev + seconds_per_case: 45.4 + total_cost: 0.0000 \ No newline at end of file From 23cb604e6e5c5b1afa9a7f1d582f4d9e6d90929b Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 15:41:04 -0700 Subject: [PATCH 348/459] version bump to 0.83.0 --- aider/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/__init__.py b/aider/__init__.py index 5b4532b97..12acdc951 100644 --- a/aider/__init__.py +++ b/aider/__init__.py @@ -1,6 +1,6 @@ from packaging import version -__version__ = "0.82.4.dev" +__version__ = "0.83.0" safe_version = __version__ try: From f928ffc3fc58fa184f517c6d9b09f584d5b7c54b Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 15:41:07 -0700 Subject: [PATCH 349/459] set version to 0.83.1.dev --- aider/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/__init__.py b/aider/__init__.py index 12acdc951..1e9327789 100644 --- a/aider/__init__.py +++ b/aider/__init__.py @@ -1,6 +1,6 @@ from packaging import version -__version__ = "0.83.0" +__version__ = "0.83.1.dev" safe_version = __version__ try: From 637a31e083cf665abff46cb7d6f9006afa6312c0 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 15:51:13 -0700 Subject: [PATCH 350/459] blame --- HISTORY.md | 2 +- README.md | 2 +- aider/website/HISTORY.md | 2 +- aider/website/_data/blame.yml | 159 +++++++++++++++++ aider/website/assets/sample-analytics.jsonl | 184 ++++++++++---------- aider/website/docs/faq.md | 6 +- aider/website/index.html | 2 +- 7 files changed, 258 insertions(+), 99 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 6a560a5f0..2ca9407ca 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,6 @@ # Release history -### main branch +### Aider v0.83.0 - Added support for `gemini-2.5-pro-preview-05-06` models. - Added support for `qwen3-235b` models. diff --git a/README.md b/README.md index d4677b58c..d3068ea70 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ src="https://img.shields.io/badge/📈%20Tokens%2Fweek-15B-3498db?style=flat-squ OpenRouter Ranking Singularity +src="https://img.shields.io/badge/🔄%20Singularity-54%25-e74c3c?style=flat-square&labelColor=555555"/>

diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index 90e914e3a..7606eff13 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -24,7 +24,7 @@ cog.out(text) ]]]--> -### main branch +### Aider v0.83.0 - Added support for `gemini-2.5-pro-preview-05-06` models. - Added support for `qwen3-235b` models. diff --git a/aider/website/_data/blame.yml b/aider/website/_data/blame.yml index a5d280d60..f84c6c444 100644 --- a/aider/website/_data/blame.yml +++ b/aider/website/_data/blame.yml @@ -4500,3 +4500,162 @@ Paul Gauthier (aider): 1567 start_tag: v0.81.0 total_lines: 1706 +- aider_percentage: 54.32 + aider_total: 1409 + end_date: '2025-05-09' + end_tag: v0.83.0 + file_counts: + .github/workflows/check_pypi_version.yml: + Paul Gauthier (aider): 1 + .github/workflows/pre-commit.yml: + MDW: 48 + .github/workflows/ubuntu-tests.yml: + Paul Gauthier (aider): 1 + .github/workflows/windows-tests.yml: + Paul Gauthier (aider): 1 + .github/workflows/windows_check_pypi_version.yml: + Paul Gauthier (aider): 1 + aider/__init__.py: + Paul Gauthier: 1 + aider/args.py: + Andrew Grigorev: 21 + Andrew Grigorev (aider): 5 + Paul Gauthier (aider): 38 + aider/coders/__init__.py: + Paul Gauthier (aider): 2 + aider/coders/base_coder.py: + Andrew Grigorev (aider): 2 + Paul Gauthier: 60 + Paul Gauthier (aider): 104 + aider/coders/editblock_coder.py: + Paul Gauthier: 10 + Paul Gauthier (aider): 7 + zjy1412: 2 + aider/coders/editblock_fenced_coder.py: + MDW: 1 + aider/coders/help_coder.py: + MDW: 1 + aider/coders/patch_coder.py: + Paul Gauthier (aider): 38 + aider/coders/shell.py: + Paul Gauthier: 37 + aider/coders/udiff_coder.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 9 + aider/coders/udiff_simple.py: + Paul Gauthier (aider): 14 + aider/commands.py: + Andrew Grigorev: 10 + Paul Gauthier: 7 + Paul Gauthier (aider): 1 + aider/gui.py: + Jon Keys: 2 + aider/io.py: + Kay Gosho: 1 + Paul Gauthier (aider): 5 + aider/linter.py: + Paul Gauthier: 1 + Titusz Pan: 1 + aider/main.py: + Paul Gauthier (aider): 9 + aider/mdstream.py: + Paul Gauthier (aider): 11 + aider/models.py: + Paul Gauthier: 4 + Paul Gauthier (aider): 66 + Stefan Hladnik: 4 + Stefan Hladnik (aider): 41 + aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm: + Andrey Popp: 98 + aider/queries/tree-sitter-languages/ocaml_interface-tags.scm: + Andrey Popp: 98 + aider/repo.py: + Andrew Grigorev: 115 + Andrew Grigorev (aider): 21 + Paul Gauthier: 6 + Paul Gauthier (aider): 33 + aider/repomap.py: + Paul Gauthier: 5 + Paul Gauthier (aider): 6 + aider/resources/model-settings.yml: + Paul Gauthier: 183 + Paul Gauthier (aider): 175 + cantalupo555: 1 + aider/scrape.py: + Jon Keys: 12 + aider/utils.py: + Paul Gauthier: 13 + Paul Gauthier (aider): 131 + Titusz Pan: 1 + aider/waiting.py: + Paul Gauthier: 1 + Paul Gauthier (aider): 54 + aider/watch.py: + Paul Gauthier: 6 + Paul Gauthier (aider): 7 + aider/website/_includes/leaderboard_table.js: + Paul Gauthier: 2 + Paul Gauthier (aider): 18 + aider/website/docs/leaderboards/index.md: + Paul Gauthier: 1 + Paul Gauthier (aider): 2 + aider/website/index.html: + Paul Gauthier: 13 + benchmark/benchmark.py: + Paul Gauthier: 3 + Paul Gauthier (aider): 42 + benchmark/docker.sh: + Paul Gauthier: 2 + benchmark/refactor_tools.py: + MDW: 1 + scripts/30k-image.py: + MDW: 1 + scripts/clean_metadata.py: + Paul Gauthier (aider): 258 + scripts/update-history.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 7 + tests/basic/test_coder.py: + Paul Gauthier (aider): 3 + tests/basic/test_commands.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 90 + tests/basic/test_editblock.py: + Paul Gauthier: 10 + zjy1412: 52 + tests/basic/test_io.py: + Paul Gauthier (aider): 132 + tests/basic/test_linter.py: + Paul Gauthier: 22 + Titusz Pan: 10 + tests/basic/test_repo.py: + Andrew Grigorev: 75 + Andrew Grigorev (aider): 65 + Paul Gauthier: 79 + Paul Gauthier (aider): 6 + tests/basic/test_repomap.py: + Andrey Popp: 7 + tests/basic/test_watch.py: + MDW: 1 + tests/fixtures/languages/ocaml_interface/test.mli: + Andrey Popp: 14 + tests/scrape/test_playwright_disable.py: + Andrew Grigorev: 111 + Paul Gauthier: 25 + Paul Gauthier (aider): 3 + grand_total: + Andrew Grigorev: 332 + Andrew Grigorev (aider): 93 + Andrey Popp: 217 + Jon Keys: 14 + Kay Gosho: 1 + MDW: 53 + Paul Gauthier: 497 + Paul Gauthier (aider): 1275 + Stefan Hladnik: 4 + Stefan Hladnik (aider): 41 + Titusz Pan: 12 + cantalupo555: 1 + zjy1412: 54 + start_tag: v0.82.0 + total_lines: 2594 diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index db51c4c31..7ddd3d688 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,95 +1,3 @@ -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743969} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743970} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746743984} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744009} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744009} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 24331, "completion_tokens": 1664, "total_tokens": 25995, "cost": 0.30987000000000003, "total_cost": 0.7573300000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744032} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744069} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 27682, "completion_tokens": 1547, "total_tokens": 29229, "cost": 0.3387, "total_cost": 1.09603}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744090} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744094} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744095} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744095} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744095} -{"event": "message_send_exception", "properties": {"exception": "'EditBlockCoder' object has no attribute '_stop_waiting_spinner'"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744108} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744159} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 28471, "completion_tokens": 1850, "total_tokens": 30321, "cost": 0.35871000000000003, "total_cost": 1.4547400000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744180} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744188} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744190} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744190} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744190} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 7494, "completion_tokens": 276, "total_tokens": 7770, "cost": 0.08598, "total_cost": 0.08598}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744195} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744195} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744208} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744210} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744210} -{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744210} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744256} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744302} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744304} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744421} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 8987, "completion_tokens": 7646, "total_tokens": 16633, "cost": 0.39571, "total_cost": 0.39571}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744517} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744547} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744591} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744640} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 10351, "completion_tokens": 2858, "total_tokens": 13209, "cost": 0.21783000000000002, "total_cost": 0.61354}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746744693} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745011} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745011} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745011} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745068} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745068} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745076} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7804, "completion_tokens": 185, "total_tokens": 7989, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745082} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745086} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745197} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745197} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745197} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745253} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745253} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745254} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745254} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-preview-04-17", "weak_model": "gemini/gemini-2.5-pro-exp-03-25", "editor_model": "gemini/gemini-2.5-flash-preview-04-17", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745254} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745257} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745257} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745302} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745304} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745304} -{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745304} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745308} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745311} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745329} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745329} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745367} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745368} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 22843, "completion_tokens": 1684, "total_tokens": 24527, "cost": 0.29579, "total_cost": 0.29579}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745376} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745384} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745444} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745444} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 6977, "completion_tokens": 1526, "total_tokens": 8503, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745473} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745513} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745513} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 23524, "completion_tokens": 4435, "total_tokens": 27959, "cost": 0.41264, "total_cost": 0.70843}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745514} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745539} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 27062, "completion_tokens": 4657, "total_tokens": 31719, "cost": 0.4569000000000001, "total_cost": 1.16533}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746745601} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746382} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 5471, "completion_tokens": 285, "total_tokens": 5756, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746417} {"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746417} {"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} {"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} @@ -998,3 +906,95 @@ {"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811703} {"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811703} {"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746811705} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830323} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830323} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830323} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830323} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830323} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830323} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830324} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830325} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830326} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830327} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830328} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830329} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830415} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830416} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830445} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830445} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830445} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index 60d58efc7..dc3923f20 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,9 +264,9 @@ tr:hover { background-color: #f5f5f5; } - - - + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25890,05769.9%
o3373,75329.4%
openrouter/REDACTED8,7450.7%
gemini/gemini-2.5-pro-exp-03-25867,80983.2%
o3166,39116.0%
openrouter/REDACTED8,7450.8%
{: .note :} diff --git a/aider/website/index.html b/aider/website/index.html index c632fbc6c..ea953b030 100644 --- a/aider/website/index.html +++ b/aider/website/index.html @@ -85,7 +85,7 @@ cog.out(text) 🔄 Singularity - 92% + 54% From cad31b638b6da5af75b5d5890d672e8425d95af8 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 15:57:04 -0700 Subject: [PATCH 351/459] copy --- aider/website/_posts/2025-05-08-qwen3.md | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md index 474ee5852..80b580d1c 100644 --- a/aider/website/_posts/2025-05-08-qwen3.md +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -277,6 +277,31 @@ const LEADERBOARD_CUSTOM_TITLE = "Qwen3 results on the aider polyglot benchmark" +## No think, via official Alibaba API + +These results were obtained running against `https://dashscope.aliyuncs.com/compatible-mode/v1` +with no thinking. + +```bash +export OPENAI_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1 +export OPENAI_API_KEY= +``` + +```yaml +- name: openai/qwen3-235b-a22b + use_temperature: 0.7 + streaming: false + extra_params: + stream: false + max_tokens: 16384 + top_p: 0.8 + top_k: 20 + temperature: 0.7 + enable_thinking: false + extra_body: + enable_thinking: false +``` + ## OpenRouter only TogetherAI, recommended /no_think settings These results were obtained with the From 3dcb23c1936601e1b8616a47b7cb3e590ac58cc3 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 18:03:17 -0700 Subject: [PATCH 352/459] qwen3 whole official api --- aider/website/_data/polyglot_leaderboard.yml | 37 ++++++++++---------- aider/website/_data/qwen3_leaderboard.yml | 30 +++++++++++++++- 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/aider/website/_data/polyglot_leaderboard.yml b/aider/website/_data/polyglot_leaderboard.yml index 92cac000a..561a25517 100644 --- a/aider/website/_data/polyglot_leaderboard.yml +++ b/aider/website/_data/polyglot_leaderboard.yml @@ -1279,30 +1279,31 @@ seconds_per_case: 372.2 total_cost: 0.7603 -- dirname: 2025-05-08-03-22-37--qwen3-235b-defaults +- dirname: 2025-05-09-17-02-02--qwen3-235b-a22b.unthink_16k_diff test_cases: 225 - model: Qwen3 235B A22B + model: Qwen3 235B A22B diff, no think, Alibaba API edit_format: diff - commit_hash: aaacee5-dirty - pass_rate_1: 17.3 - pass_rate_2: 49.8 - pass_num_1: 39 - pass_num_2: 112 - percent_cases_well_formed: 91.6 - error_outputs: 58 - num_malformed_responses: 29 - num_with_malformed_responses: 19 - user_asks: 102 + commit_hash: 91d7fbd-dirty + pass_rate_1: 28.9 + pass_rate_2: 59.6 + pass_num_1: 65 + pass_num_2: 134 + percent_cases_well_formed: 92.9 + error_outputs: 22 + num_malformed_responses: 22 + num_with_malformed_responses: 16 + user_asks: 111 lazy_comments: 0 syntax_errors: 0 indentation_errors: 0 exhausted_context_windows: 0 - prompt_tokens: 0 - completion_tokens: 0 + prompt_tokens: 2816192 + completion_tokens: 342062 test_timeouts: 1 total_tests: 225 - command: aider --model openrouter/qwen/qwen3-235b-a22b - date: 2025-05-08 + command: aider --model openai/qwen3-235b-a22b + date: 2025-05-09 versions: 0.82.4.dev - seconds_per_case: 428.1 - total_cost: 1.8037 \ No newline at end of file + seconds_per_case: 45.4 + total_cost: 0.0000 + \ No newline at end of file diff --git a/aider/website/_data/qwen3_leaderboard.yml b/aider/website/_data/qwen3_leaderboard.yml index 5b8e3233d..68233c26f 100644 --- a/aider/website/_data/qwen3_leaderboard.yml +++ b/aider/website/_data/qwen3_leaderboard.yml @@ -217,7 +217,7 @@ - dirname: 2025-05-09-17-02-02--qwen3-235b-a22b.unthink_16k_diff test_cases: 225 - model: Qwen3 235B A22B no think, via official Alibaba API + model: Qwen3 235B A22B diff, no think, via official Alibaba API edit_format: diff commit_hash: 91d7fbd-dirty pass_rate_1: 28.9 @@ -241,4 +241,32 @@ date: 2025-05-09 versions: 0.82.4.dev seconds_per_case: 45.4 + total_cost: 0.0000 + +- dirname: 2025-05-09-23-01-22--qwen3-235b-a22b.unthink_16k_whole + test_cases: 225 + model: Qwen3 235B A22B whole, no think, via official Alibaba API + edit_format: whole + commit_hash: 425fb6d + pass_rate_1: 26.7 + pass_rate_2: 61.8 + pass_num_1: 60 + pass_num_2: 139 + percent_cases_well_formed: 100.0 + error_outputs: 0 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 175 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2768173 + completion_tokens: 384000 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/qwen3-235b-a22b + date: 2025-05-09 + versions: 0.82.4.dev + seconds_per_case: 50.8 total_cost: 0.0000 \ No newline at end of file From 3daf7d4df33bf590d4be04ae541216b67b6e3087 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 9 May 2025 18:04:04 -0700 Subject: [PATCH 353/459] copy --- aider/website/assets/sample-analytics.jsonl | 36 ++++++++++----------- aider/website/docs/faq.md | 4 +-- aider/website/docs/leaderboards/index.md | 2 +- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 7ddd3d688..a8c7941a3 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,21 +1,3 @@ -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746417} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746432} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7626, "completion_tokens": 3778, "total_tokens": 11404, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746468} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746468} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746594} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 38859, "completion_tokens": 263, "total_tokens": 39122, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746724} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746724} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746902} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746906} {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746919} {"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746928} {"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746928} @@ -998,3 +980,21 @@ {"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830445} {"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830445} {"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746830445} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831441} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831441} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831441} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831442} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831491} +{"event": "command_reset", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831603} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831605} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831623} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831655} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7988, "completion_tokens": 533, "total_tokens": 8521, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831752} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831771} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8860, "completion_tokens": 177, "total_tokens": 9037, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831775} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831828} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9164, "completion_tokens": 422, "total_tokens": 9586, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831865} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831893} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831893} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 10158, "completion_tokens": 449, "total_tokens": 10607, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831934} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746838826} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index dc3923f20..351b010cd 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,8 +264,8 @@ tr:hover { background-color: #f5f5f5; } - - + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25867,80983.2%
o3166,39116.0%
gemini/gemini-2.5-pro-exp-03-25855,03483.0%
o3166,39116.2%
openrouter/REDACTED8,7450.8%
diff --git a/aider/website/docs/leaderboards/index.md b/aider/website/docs/leaderboards/index.md index 865f73b3a..1485ce532 100644 --- a/aider/website/docs/leaderboards/index.md +++ b/aider/website/docs/leaderboards/index.md @@ -285,6 +285,6 @@ mod_dates = [get_last_modified_date(file) for file in files] latest_mod_date = max(mod_dates) cog.out(f"{latest_mod_date.strftime('%B %d, %Y.')}") ]]]--> -May 08, 2025. +May 09, 2025.

From 49b3f85cc5a9e1dd5ae61d8d076f8c8a9abf745d Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 18:07:00 -0700 Subject: [PATCH 354/459] feat: Add spinner when generating commit message --- aider/repo.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index 0723c6c14..e60a2f20e 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -20,6 +20,7 @@ import pathspec from aider import prompts, utils +from .waiting import WaitingSpinner from .dump import dump # noqa: F401 ANY_GIT_ERROR += [ @@ -342,14 +343,15 @@ class GitRepo: ] commit_message = None - for model in self.models: - num_tokens = model.token_count(messages) - max_tokens = model.info.get("max_input_tokens") or 0 - if max_tokens and num_tokens > max_tokens: - continue - commit_message = model.simple_send_with_retries(messages) - if commit_message: - break + with WaitingSpinner("Generating commit message"): + for model in self.models: + num_tokens = model.token_count(messages) + max_tokens = model.info.get("max_input_tokens") or 0 + if max_tokens and num_tokens > max_tokens: + continue + commit_message = model.simple_send_with_retries(messages) + if commit_message: + break if not commit_message: self.io.tool_error("Failed to generate commit message!") From 43cd0164e0263f64414e186f52651852cef4590b Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 18:07:05 -0700 Subject: [PATCH 355/459] style: Apply linter formatting --- aider/repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/repo.py b/aider/repo.py index e60a2f20e..bbea704e7 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -20,8 +20,8 @@ import pathspec from aider import prompts, utils -from .waiting import WaitingSpinner from .dump import dump # noqa: F401 +from .waiting import WaitingSpinner ANY_GIT_ERROR += [ OSError, From a9cb1a9d611f17b37932c11a33fdb6d5493c9af4 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 18:07:58 -0700 Subject: [PATCH 356/459] chore: Move commit message spinner into model loop and show model name --- aider/repo.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index bbea704e7..375d2309e 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -343,15 +343,16 @@ class GitRepo: ] commit_message = None - with WaitingSpinner("Generating commit message"): - for model in self.models: + for model in self.models: + spinner_text = f"Waiting for {model.name} to generate commit message" + with WaitingSpinner(spinner_text): num_tokens = model.token_count(messages) max_tokens = model.info.get("max_input_tokens") or 0 if max_tokens and num_tokens > max_tokens: continue commit_message = model.simple_send_with_retries(messages) if commit_message: - break + break # Found a model that could generate the message if not commit_message: self.io.tool_error("Failed to generate commit message!") From c11d21a23031162e0bf177d1afbfa048d32efa6f Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 9 May 2025 18:08:04 -0700 Subject: [PATCH 357/459] style: apply linter fixes --- aider/repo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/repo.py b/aider/repo.py index 375d2309e..e0f7ed185 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -352,7 +352,7 @@ class GitRepo: continue commit_message = model.simple_send_with_retries(messages) if commit_message: - break # Found a model that could generate the message + break # Found a model that could generate the message if not commit_message: self.io.tool_error("Failed to generate commit message!") From 0b112e948f6ea1690f9e93f10e6ba8c4cfbd1a92 Mon Sep 17 00:00:00 2001 From: saviour Date: Sat, 10 May 2025 21:38:08 +0900 Subject: [PATCH 358/459] feat: Enable file completion for all file-related arguments --- aider/args.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/aider/args.py b/aider/args.py index 1543bb07e..bb81cae01 100644 --- a/aider/args.py +++ b/aider/args.py @@ -43,7 +43,7 @@ def get_parser(default_config_files, git_root): group = parser.add_argument_group("Main model") group.add_argument( "files", metavar="FILE", nargs="*", help="files to edit with an LLM (optional)" - ) + ).complete = shtab.FILE group.add_argument( "--model", metavar="MODEL", @@ -110,13 +110,13 @@ def get_parser(default_config_files, git_root): metavar="MODEL_SETTINGS_FILE", default=".aider.model.settings.yml", help="Specify a file with aider model settings for unknown models", - ) + ).complete = shtab.FILE group.add_argument( "--model-metadata-file", metavar="MODEL_METADATA_FILE", default=".aider.model.metadata.json", help="Specify a file with context window and costs for unknown models", - ) + ).complete = shtab.FILE group.add_argument( "--alias", action="append", @@ -262,13 +262,13 @@ def get_parser(default_config_files, git_root): metavar="INPUT_HISTORY_FILE", default=default_input_history_file, help=f"Specify the chat input history file (default: {default_input_history_file})", - ) + ).complete = shtab.FILE group.add_argument( "--chat-history-file", metavar="CHAT_HISTORY_FILE", default=default_chat_history_file, help=f"Specify the chat history file (default: {default_chat_history_file})", - ) + ).complete = shtab.FILE group.add_argument( "--restore-chat-history", action=argparse.BooleanOptionalAction, @@ -280,7 +280,7 @@ def get_parser(default_config_files, git_root): metavar="LLM_HISTORY_FILE", default=None, help="Log the conversation with the LLM to this file (for example, .aider.llm.history)", - ) + ).complete = shtab.FILE ########## group = parser.add_argument_group("Output settings") @@ -552,7 +552,7 @@ def get_parser(default_config_files, git_root): "--analytics-log", metavar="ANALYTICS_LOG_FILE", help="Specify a file to log analytics events", - ) + ).complete = shtab.FILE group.add_argument( "--analytics-disable", action="store_true", @@ -619,7 +619,7 @@ def get_parser(default_config_files, git_root): "Specify a file containing the message to send the LLM, process reply, then exit" " (disables chat mode)" ), - ) + ).complete = shtab.FILE group.add_argument( "--gui", "--browser", @@ -637,7 +637,7 @@ def get_parser(default_config_files, git_root): "--apply", metavar="FILE", help="Apply the changes from the given file instead of running the chat (debug)", - ) + ).complete = shtab.FILE group.add_argument( "--apply-clipboard-edits", action="store_true", @@ -698,13 +698,13 @@ def get_parser(default_config_files, git_root): action="append", metavar="FILE", help="specify a file to edit (can be used multiple times)", - ) + ).complete = shtab.FILE group.add_argument( "--read", action="append", metavar="FILE", help="specify a read-only file (can be used multiple times)", - ) + ).complete = shtab.FILE group.add_argument( "--vim", action="store_true", @@ -734,7 +734,7 @@ def get_parser(default_config_files, git_root): "--load", metavar="LOAD_FILE", help="Load and execute /commands from a file on launch", - ) + ).complete = shtab.FILE group.add_argument( "--encoding", default="utf-8", @@ -755,7 +755,7 @@ def get_parser(default_config_files, git_root): "Specify the config file (default: search for .aider.conf.yml in git root, cwd" " or home directory)" ), - ) + ).complete = shtab.FILE # This is a duplicate of the argument in the preparser and is a no-op by this time of # argument parsing, but it's here so that the help is displayed as expected. group.add_argument( @@ -763,7 +763,7 @@ def get_parser(default_config_files, git_root): metavar="ENV_FILE", default=default_env_file(git_root), help="Specify the .env file to load (default: .env in git root)", - ) + ).complete = shtab.FILE group.add_argument( "--suggest-shell-commands", action=argparse.BooleanOptionalAction, From 8c755bf0326aa1b4025db03c9e2864042478868e Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sat, 10 May 2025 07:10:12 -0700 Subject: [PATCH 359/459] refactor: move Spinner class to waiting module --- aider/utils.py | 167 +---------------------------------------------- aider/waiting.py | 166 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 166 insertions(+), 167 deletions(-) diff --git a/aider/utils.py b/aider/utils.py index 80cb0f38e..dabafe041 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -7,9 +7,9 @@ import time from pathlib import Path import oslex -from rich.console import Console from aider.dump import dump # noqa: F401 +from aider.waiting import Spinner IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".webp", ".pdf"} @@ -251,154 +251,6 @@ def run_install(cmd): return False, output -class Spinner: - """ - Minimal spinner that scans a single marker back and forth across a line. - - The animation is pre-rendered into a list of frames. If the terminal - cannot display unicode the frames are converted to plain ASCII. - """ - - last_frame_idx = 0 # Class variable to store the last frame index - - def __init__(self, text: str, width: int = 7): - self.text = text - self.start_time = time.time() - self.last_update = 0.0 - self.visible = False - self.is_tty = sys.stdout.isatty() - self.console = Console() - - # Pre-render the animation frames using pure ASCII so they will - # always display, even on very limited terminals. - ascii_frames = [ - "#= ", # C1 C2 space(8) - "=# ", # C2 C1 space(8) - " =# ", # space(1) C2 C1 space(7) - " =# ", # space(2) C2 C1 space(6) - " =# ", # space(3) C2 C1 space(5) - " =# ", # space(4) C2 C1 space(4) - " =# ", # space(5) C2 C1 space(3) - " =# ", # space(6) C2 C1 space(2) - " =# ", # space(7) C2 C1 space(1) - " =#", # space(8) C2 C1 - " #=", # space(8) C1 C2 - " #= ", # space(7) C1 C2 space(1) - " #= ", # space(6) C1 C2 space(2) - " #= ", # space(5) C1 C2 space(3) - " #= ", # space(4) C1 C2 space(4) - " #= ", # space(3) C1 C2 space(5) - " #= ", # space(2) C1 C2 space(6) - " #= ", # space(1) C1 C2 space(7) - ] - - self.unicode_palette = "░█" - xlate_from, xlate_to = ("=#", self.unicode_palette) - - # If unicode is supported, swap the ASCII chars for nicer glyphs. - if self._supports_unicode(): - translation_table = str.maketrans(xlate_from, xlate_to) - frames = [f.translate(translation_table) for f in ascii_frames] - self.scan_char = xlate_to[xlate_from.find("#")] - else: - frames = ascii_frames - self.scan_char = "#" - - # Bounce the scanner back and forth. - self.frames = frames - self.frame_idx = Spinner.last_frame_idx # Initialize from class variable - self.width = len(frames[0]) - 2 # number of chars between the brackets - self.animation_len = len(frames[0]) - self.last_display_len = 0 # Length of the last spinner line (frame + text) - - def _supports_unicode(self) -> bool: - if not self.is_tty: - return False - try: - out = self.unicode_palette - out += "\b" * len(self.unicode_palette) - out += " " * len(self.unicode_palette) - out += "\b" * len(self.unicode_palette) - sys.stdout.write(out) - sys.stdout.flush() - return True - except UnicodeEncodeError: - return False - except Exception: - return False - - def _next_frame(self) -> str: - frame = self.frames[self.frame_idx] - self.frame_idx = (self.frame_idx + 1) % len(self.frames) - Spinner.last_frame_idx = self.frame_idx # Update class variable - return frame - - def step(self, text: str = None) -> None: - if text is not None: - self.text = text - - if not self.is_tty: - return - - now = time.time() - if not self.visible and now - self.start_time >= 0.5: - self.visible = True - self.last_update = 0.0 - if self.is_tty: - self.console.show_cursor(False) - - if not self.visible or now - self.last_update < 0.1: - return - - self.last_update = now - frame_str = self._next_frame() - - # Determine the maximum width for the spinner line - # Subtract 2 as requested, to leave a margin or prevent cursor wrapping issues - max_spinner_width = self.console.width - 2 - if max_spinner_width < 0: # Handle extremely narrow terminals - max_spinner_width = 0 - - current_text_payload = f" {self.text}" - line_to_display = f"{frame_str}{current_text_payload}" - - # Truncate the line if it's too long for the console width - if len(line_to_display) > max_spinner_width: - line_to_display = line_to_display[:max_spinner_width] - - len_line_to_display = len(line_to_display) - - # Calculate padding to clear any remnants from a longer previous line - padding_to_clear = " " * max(0, self.last_display_len - len_line_to_display) - - # Write the spinner frame, text, and any necessary clearing spaces - sys.stdout.write(f"\r{line_to_display}{padding_to_clear}") - self.last_display_len = len_line_to_display - - # Calculate number of backspaces to position cursor at the scanner character - scan_char_abs_pos = frame_str.find(self.scan_char) - - # Total characters written to the line (frame + text + padding) - total_chars_written_on_line = len_line_to_display + len(padding_to_clear) - - # num_backspaces will be non-positive if scan_char_abs_pos is beyond - # total_chars_written_on_line (e.g., if the scan char itself was truncated). - # (e.g., if the scan char itself was truncated). - # In such cases, (effectively) 0 backspaces are written, - # and the cursor stays at the end of the line. - num_backspaces = total_chars_written_on_line - scan_char_abs_pos - sys.stdout.write("\b" * num_backspaces) - sys.stdout.flush() - - def end(self) -> None: - if self.visible and self.is_tty: - clear_len = self.last_display_len # Use the length of the last displayed content - sys.stdout.write("\r" + " " * clear_len + "\r") - sys.stdout.flush() - self.console.show_cursor(True) - self.visible = False - - def find_common_root(abs_fnames): try: if len(abs_fnames) == 1: @@ -485,20 +337,3 @@ def printable_shell_command(cmd_list): str: Shell-escaped command string. """ return oslex.join(cmd_list) - - -def main(): - spinner = Spinner("Running spinner...") - try: - for _ in range(100): - time.sleep(0.15) - spinner.step() - print("Success!") - except KeyboardInterrupt: - print("\nInterrupted by user.") - finally: - spinner.end() - - -if __name__ == "__main__": - main() diff --git a/aider/waiting.py b/aider/waiting.py index 8068551bb..d79754364 100644 --- a/aider/waiting.py +++ b/aider/waiting.py @@ -14,11 +14,159 @@ Use it like: """ import threading +import sys import time -from aider.utils import Spinner +from rich.console import Console +class Spinner: + """ + Minimal spinner that scans a single marker back and forth across a line. + + The animation is pre-rendered into a list of frames. If the terminal + cannot display unicode the frames are converted to plain ASCII. + """ + + last_frame_idx = 0 # Class variable to store the last frame index + + def __init__(self, text: str, width: int = 7): + self.text = text + self.start_time = time.time() + self.last_update = 0.0 + self.visible = False + self.is_tty = sys.stdout.isatty() + self.console = Console() + + # Pre-render the animation frames using pure ASCII so they will + # always display, even on very limited terminals. + ascii_frames = [ + "#= ", # C1 C2 space(8) + "=# ", # C2 C1 space(8) + " =# ", # space(1) C2 C1 space(7) + " =# ", # space(2) C2 C1 space(6) + " =# ", # space(3) C2 C1 space(5) + " =# ", # space(4) C2 C1 space(4) + " =# ", # space(5) C2 C1 space(3) + " =# ", # space(6) C2 C1 space(2) + " =# ", # space(7) C2 C1 space(1) + " =#", # space(8) C2 C1 + " #=", # space(8) C1 C2 + " #= ", # space(7) C1 C2 space(1) + " #= ", # space(6) C1 C2 space(2) + " #= ", # space(5) C1 C2 space(3) + " #= ", # space(4) C1 C2 space(4) + " #= ", # space(3) C1 C2 space(5) + " #= ", # space(2) C1 C2 space(6) + " #= ", # space(1) C1 C2 space(7) + ] + + self.unicode_palette = "░█" + xlate_from, xlate_to = ("=#", self.unicode_palette) + + # If unicode is supported, swap the ASCII chars for nicer glyphs. + if self._supports_unicode(): + translation_table = str.maketrans(xlate_from, xlate_to) + frames = [f.translate(translation_table) for f in ascii_frames] + self.scan_char = xlate_to[xlate_from.find("#")] + else: + frames = ascii_frames + self.scan_char = "#" + + # Bounce the scanner back and forth. + self.frames = frames + self.frame_idx = Spinner.last_frame_idx # Initialize from class variable + self.width = len(frames[0]) - 2 # number of chars between the brackets + self.animation_len = len(frames[0]) + self.last_display_len = 0 # Length of the last spinner line (frame + text) + + def _supports_unicode(self) -> bool: + if not self.is_tty: + return False + try: + out = self.unicode_palette + out += "\b" * len(self.unicode_palette) + out += " " * len(self.unicode_palette) + out += "\b" * len(self.unicode_palette) + sys.stdout.write(out) + sys.stdout.flush() + return True + except UnicodeEncodeError: + return False + except Exception: + return False + + def _next_frame(self) -> str: + frame = self.frames[self.frame_idx] + self.frame_idx = (self.frame_idx + 1) % len(self.frames) + Spinner.last_frame_idx = self.frame_idx # Update class variable + return frame + + def step(self, text: str = None) -> None: + if text is not None: + self.text = text + + if not self.is_tty: + return + + now = time.time() + if not self.visible and now - self.start_time >= 0.5: + self.visible = True + self.last_update = 0.0 + if self.is_tty: + self.console.show_cursor(False) + + if not self.visible or now - self.last_update < 0.1: + return + + self.last_update = now + frame_str = self._next_frame() + + # Determine the maximum width for the spinner line + # Subtract 2 as requested, to leave a margin or prevent cursor wrapping issues + max_spinner_width = self.console.width - 2 + if max_spinner_width < 0: # Handle extremely narrow terminals + max_spinner_width = 0 + + current_text_payload = f" {self.text}" + line_to_display = f"{frame_str}{current_text_payload}" + + # Truncate the line if it's too long for the console width + if len(line_to_display) > max_spinner_width: + line_to_display = line_to_display[:max_spinner_width] + + len_line_to_display = len(line_to_display) + + # Calculate padding to clear any remnants from a longer previous line + padding_to_clear = " " * max(0, self.last_display_len - len_line_to_display) + + # Write the spinner frame, text, and any necessary clearing spaces + sys.stdout.write(f"\r{line_to_display}{padding_to_clear}") + self.last_display_len = len_line_to_display + + # Calculate number of backspaces to position cursor at the scanner character + scan_char_abs_pos = frame_str.find(self.scan_char) + + # Total characters written to the line (frame + text + padding) + total_chars_written_on_line = len_line_to_display + len(padding_to_clear) + + # num_backspaces will be non-positive if scan_char_abs_pos is beyond + # total_chars_written_on_line (e.g., if the scan char itself was truncated). + # (e.g., if the scan char itself was truncated). + # In such cases, (effectively) 0 backspaces are written, + # and the cursor stays at the end of the line. + num_backspaces = total_chars_written_on_line - scan_char_abs_pos + sys.stdout.write("\b" * num_backspaces) + sys.stdout.flush() + + def end(self) -> None: + if self.visible and self.is_tty: + clear_len = self.last_display_len # Use the length of the last displayed content + sys.stdout.write("\r" + " " * clear_len + "\r") + sys.stdout.flush() + self.console.show_cursor(True) + self.visible = False + class WaitingSpinner: """Background spinner that can be started/stopped safely.""" @@ -53,3 +201,19 @@ class WaitingSpinner: def __exit__(self, exc_type, exc_val, exc_tb): self.stop() + +def main(): + spinner = Spinner("Running spinner...") + try: + for _ in range(100): + time.sleep(0.15) + spinner.step() + print("Success!") + except KeyboardInterrupt: + print("\nInterrupted by user.") + finally: + spinner.end() + + +if __name__ == "__main__": + main() From 7d3c8176640c4647b4afb5f8395e323fef762fa6 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sat, 10 May 2025 07:10:19 -0700 Subject: [PATCH 360/459] style: apply code formatting --- aider/waiting.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aider/waiting.py b/aider/waiting.py index d79754364..4d2164f4f 100644 --- a/aider/waiting.py +++ b/aider/waiting.py @@ -13,8 +13,8 @@ Use it like: spinner.stop() """ -import threading import sys +import threading import time from rich.console import Console @@ -167,6 +167,7 @@ class Spinner: self.console.show_cursor(True) self.visible = False + class WaitingSpinner: """Background spinner that can be started/stopped safely.""" @@ -202,6 +203,7 @@ class WaitingSpinner: def __exit__(self, exc_type, exc_val, exc_tb): self.stop() + def main(): spinner = Spinner("Running spinner...") try: From ee4e9c971196eada72e363458662ab8c1a496c17 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sat, 10 May 2025 07:10:28 -0700 Subject: [PATCH 361/459] refactor: Remove unused time import --- aider/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aider/utils.py b/aider/utils.py index dabafe041..fd534c315 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -3,7 +3,6 @@ import platform import subprocess import sys import tempfile -import time from pathlib import Path import oslex From 97379aa02fc95ab9d752e11c4ab1c6baee74989b Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sat, 10 May 2025 07:11:08 -0700 Subject: [PATCH 362/459] fix: Update Spinner import path --- aider/repomap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/repomap.py b/aider/repomap.py index 6328a701f..5c40c469b 100644 --- a/aider/repomap.py +++ b/aider/repomap.py @@ -19,7 +19,7 @@ from tqdm import tqdm from aider.dump import dump from aider.special import filter_important_files -from aider.utils import Spinner +from aider.waiting import Spinner # tree_sitter is throwing a FutureWarning warnings.simplefilter("ignore", category=FutureWarning) From 34409311a3d62e9f795b5c566c894191e7e696a3 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 10 May 2025 07:21:21 -0700 Subject: [PATCH 363/459] chore: Adjust spinner text and spinner timing --- aider/repo.py | 2 +- aider/waiting.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aider/repo.py b/aider/repo.py index e0f7ed185..01652b15f 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -344,7 +344,7 @@ class GitRepo: commit_message = None for model in self.models: - spinner_text = f"Waiting for {model.name} to generate commit message" + spinner_text = f"Generating commit message with {model.name}" with WaitingSpinner(spinner_text): num_tokens = model.token_count(messages) max_tokens = model.info.get("max_input_tokens") or 0 diff --git a/aider/waiting.py b/aider/waiting.py index 4d2164f4f..9c2f72bc7 100644 --- a/aider/waiting.py +++ b/aider/waiting.py @@ -179,8 +179,8 @@ class WaitingSpinner: def _spin(self): while not self._stop_event.is_set(): - time.sleep(self.delay) self.spinner.step() + time.sleep(self.delay) self.spinner.end() def start(self): @@ -192,7 +192,7 @@ class WaitingSpinner: """Request the spinner to stop and wait briefly for the thread to exit.""" self._stop_event.set() if self._thread.is_alive(): - self._thread.join(timeout=0.1) + self._thread.join(timeout=self.delay) self.spinner.end() # Allow use as a context-manager From 2a410fab81d7f0ff6b05850ee663da832886bb96 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sat, 10 May 2025 07:24:33 -0700 Subject: [PATCH 364/459] docs: Add platform/community to kind words in README --- README.md | 70 +++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index d3068ea70..e36f5d09d 100644 --- a/README.md +++ b/README.md @@ -140,39 +140,39 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u ## Kind Words From Users -- *"My life has changed... There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* — [Eric S. Raymond](https://x.com/esrtweet/status/1910809356381413593) -- *"The best free open source AI coding assistant."* — [IndyDevDan](https://youtu.be/YALpX8oOn78) -- *"The best AI coding assistant so far."* — [Matthew Berman](https://www.youtube.com/watch?v=df8afeb1FY8) -- *"Aider ... has easily quadrupled my coding productivity."* — [SOLAR_FIELDS](https://news.ycombinator.com/item?id=36212100) -- *"It's a cool workflow... Aider's ergonomics are perfect for me."* — [qup](https://news.ycombinator.com/item?id=38185326) -- *"It's really like having your senior developer live right in your Git repo - truly amazing!"* — [rappster](https://github.com/Aider-AI/aider/issues/124) -- *"What an amazing tool. It's incredible."* — [valyagolev](https://github.com/Aider-AI/aider/issues/6#issue-1722897858) -- *"Aider is such an astounding thing!"* — [cgrothaus](https://github.com/Aider-AI/aider/issues/82#issuecomment-1631876700) -- *"It was WAY faster than I would be getting off the ground and making the first few working versions."* — [Daniel Feldman](https://twitter.com/d_feldman/status/1662295077387923456) -- *"THANK YOU for Aider! It really feels like a glimpse into the future of coding."* — [derwiki](https://news.ycombinator.com/item?id=38205643) -- *"It's just amazing. It is freeing me to do things I felt were out my comfort zone before."* — [Dougie](https://discord.com/channels/1131200896827654144/1174002618058678323/1174084556257775656) -- *"This project is stellar."* — [funkytaco](https://github.com/Aider-AI/aider/issues/112#issuecomment-1637429008) -- *"Amazing project, definitely the best AI coding assistant I've used."* — [joshuavial](https://github.com/Aider-AI/aider/issues/84) -- *"I absolutely love using Aider ... It makes software development feel so much lighter as an experience."* — [principalideal0](https://discord.com/channels/1131200896827654144/1133421607499595858/1229689636012691468) -- *"I have been recovering from multiple shoulder surgeries ... and have used aider extensively. It has allowed me to continue productivity."* — [codeninja](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) -- *"I am an aider addict. I'm getting so much more work done, but in less time."* — [dandandan](https://discord.com/channels/1131200896827654144/1131200896827654149/1135913253483069470) -- *"After wasting $100 on tokens trying to find something better, I'm back to Aider. It blows everything else out of the water hands down, there's no competition whatsoever."* — [SystemSculpt](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) -- *"Aider is amazing, coupled with Sonnet 3.5 it's quite mind blowing."* — [Josh Dingus](https://discord.com/channels/1131200896827654144/1133060684540813372/1262374225298198548) -- *"Hands down, this is the best AI coding assistant tool so far."* — [IndyDevDan](https://www.youtube.com/watch?v=MPYFPvxfGZs) -- *"[Aider] changed my daily coding workflows. It's mind-blowing how a single Python application can change your life."* — [maledorak](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) -- *"Best agent for actual dev work in existing codebases."* — [Nick Dobos](https://twitter.com/NickADobos/status/1690408967963652097?s=20) -- *"One of my favorite pieces of software. Blazing trails on new paradigms!"* — [Chris Wall](https://x.com/chris65536/status/1905053299251798432) -- *"Aider has been revolutionary for me and my work."* — [Starry Hope](https://x.com/starryhopeblog/status/1904985812137132056) -- *"Try aider! One of the best ways to vibe code."* — [Chris Wall](https://x.com/Chris65536/status/1905053418961391929) -- *"Aider is hands down the best. And it's free and opensource."* — [AriyaSavakaLurker](https://www.reddit.com/r/ChatGPTCoding/comments/1ik16y6/whats_your_take_on_aider/mbip39n/) -- *"Aider is also my best friend."* — [jzn21](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) -- *"Try Aider, it's worth it."* — [jorgejhms](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) -- *"I like aider :)"* — [Chenwei Cui](https://x.com/ccui42/status/1904965344999145698) -- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* — [Reilly Sweetland](https://x.com/rsweetland/status/1904963807237259586) -- *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) -- *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* — [Joshua D Vander Hook](https://x.com/jodavaho/status/1911154899057795218) -- *"thanks to aider, i have started and finished three personal projects within the last two days"* — [joseph stalzyn](https://x.com/anitaheeder/status/1908338609645904160) -- *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* — [koleok](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) -- *"Aider ... is the tool to benchmark against."* — [BeetleB](https://news.ycombinator.com/item?id=43930201) -- *"aider is really cool"* — [kache (@yacineMTB)](https://x.com/yacineMTB/status/1911224442430124387) +- *"My life has changed... There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* — [Eric S. Raymond](https://x.com/esrtweet/status/1910809356381413593) on X +- *"The best free open source AI coding assistant."* — [IndyDevDan](https://youtu.be/YALpX8oOn78) on YouTube +- *"The best AI coding assistant so far."* — [Matthew Berman](https://www.youtube.com/watch?v=df8afeb1FY8) on YouTube +- *"Aider ... has easily quadrupled my coding productivity."* — [SOLAR_FIELDS](https://news.ycombinator.com/item?id=36212100) on Hacker News +- *"It's a cool workflow... Aider's ergonomics are perfect for me."* — [qup](https://news.ycombinator.com/item?id=38185326) on Hacker News +- *"It's really like having your senior developer live right in your Git repo - truly amazing!"* — [rappster](https://github.com/Aider-AI/aider/issues/124) on GitHub +- *"What an amazing tool. It's incredible."* — [valyagolev](https://github.com/Aider-AI/aider/issues/6#issue-1722897858) on GitHub +- *"Aider is such an astounding thing!"* — [cgrothaus](https://github.com/Aider-AI/aider/issues/82#issuecomment-1631876700) on GitHub +- *"It was WAY faster than I would be getting off the ground and making the first few working versions."* — [Daniel Feldman](https://twitter.com/d_feldman/status/1662295077387923456) on X +- *"THANK YOU for Aider! It really feels like a glimpse into the future of coding."* — [derwiki](https://news.ycombinator.com/item?id=38205643) on Hacker News +- *"It's just amazing. It is freeing me to do things I felt were out my comfort zone before."* — [Dougie](https://discord.com/channels/1131200896827654144/1174002618058678323/1174084556257775656) on Discord +- *"This project is stellar."* — [funkytaco](https://github.com/Aider-AI/aider/issues/112#issuecomment-1637429008) on GitHub +- *"Amazing project, definitely the best AI coding assistant I've used."* — [joshuavial](https://github.com/Aider-AI/aider/issues/84) on GitHub +- *"I absolutely love using Aider ... It makes software development feel so much lighter as an experience."* — [principalideal0](https://discord.com/channels/1131200896827654144/1133421607499595858/1229689636012691468) on Discord +- *"I have been recovering from multiple shoulder surgeries ... and have used aider extensively. It has allowed me to continue productivity."* — [codeninja](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) on Reddit +- *"I am an aider addict. I'm getting so much more work done, but in less time."* — [dandandan](https://discord.com/channels/1131200896827654144/1131200896827654149/1135913253483069470) on Discord +- *"After wasting $100 on tokens trying to find something better, I'm back to Aider. It blows everything else out of the water hands down, there's no competition whatsoever."* — [SystemSculpt](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) on Discord +- *"Aider is amazing, coupled with Sonnet 3.5 it's quite mind blowing."* — [Josh Dingus](https://discord.com/channels/1131200896827654144/1133060684540813372/1262374225298198548) on Discord +- *"Hands down, this is the best AI coding assistant tool so far."* — [IndyDevDan](https://www.youtube.com/watch?v=MPYFPvxfGZs) on YouTube +- *"[Aider] changed my daily coding workflows. It's mind-blowing how a single Python application can change your life."* — [maledorak](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) on Discord +- *"Best agent for actual dev work in existing codebases."* — [Nick Dobos](https://twitter.com/NickADobos/status/1690408967963652097?s=20) on X +- *"One of my favorite pieces of software. Blazing trails on new paradigms!"* — [Chris Wall](https://x.com/chris65536/status/1905053299251798432) on X +- *"Aider has been revolutionary for me and my work."* — [Starry Hope](https://x.com/starryhopeblog/status/1904985812137132056) on X +- *"Try aider! One of the best ways to vibe code."* — [Chris Wall](https://x.com/Chris65536/status/1905053418961391929) on X +- *"Aider is hands down the best. And it's free and opensource."* — [AriyaSavakaLurker](https://www.reddit.com/r/ChatGPTCoding/comments/1ik16y6/whats_your_take_on_aider/mbip39n/) on Reddit +- *"Aider is also my best friend."* — [jzn21](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) on Reddit +- *"Try Aider, it's worth it."* — [jorgejhms](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) on Reddit +- *"I like aider :)"* — [Chenwei Cui](https://x.com/ccui42/status/1904965344999145698) on X +- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* — [Reilly Sweetland](https://x.com/rsweetland/status/1904963807237259586) on X +- *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) on Discord +- *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* — [Joshua D Vander Hook](https://x.com/jodavaho/status/1911154899057795218) on X +- *"thanks to aider, i have started and finished three personal projects within the last two days"* — [joseph stalzyn](https://x.com/anitaheeder/status/1908338609645904160) on X +- *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* — [koleok](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) on Discord +- *"Aider ... is the tool to benchmark against."* — [BeetleB](https://news.ycombinator.com/item?id=43930201) on Hacker News +- *"aider is really cool"* — [kache (@yacineMTB)](https://x.com/yacineMTB/status/1911224442430124387) on X From 883aa9e03db7ea03df1c50a6c085c1856293a77f Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sat, 10 May 2025 07:45:43 -0700 Subject: [PATCH 365/459] docs: Include platform in testimonial link text --- README.md | 70 +++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index e36f5d09d..c82646780 100644 --- a/README.md +++ b/README.md @@ -140,39 +140,39 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u ## Kind Words From Users -- *"My life has changed... There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* — [Eric S. Raymond](https://x.com/esrtweet/status/1910809356381413593) on X -- *"The best free open source AI coding assistant."* — [IndyDevDan](https://youtu.be/YALpX8oOn78) on YouTube -- *"The best AI coding assistant so far."* — [Matthew Berman](https://www.youtube.com/watch?v=df8afeb1FY8) on YouTube -- *"Aider ... has easily quadrupled my coding productivity."* — [SOLAR_FIELDS](https://news.ycombinator.com/item?id=36212100) on Hacker News -- *"It's a cool workflow... Aider's ergonomics are perfect for me."* — [qup](https://news.ycombinator.com/item?id=38185326) on Hacker News -- *"It's really like having your senior developer live right in your Git repo - truly amazing!"* — [rappster](https://github.com/Aider-AI/aider/issues/124) on GitHub -- *"What an amazing tool. It's incredible."* — [valyagolev](https://github.com/Aider-AI/aider/issues/6#issue-1722897858) on GitHub -- *"Aider is such an astounding thing!"* — [cgrothaus](https://github.com/Aider-AI/aider/issues/82#issuecomment-1631876700) on GitHub -- *"It was WAY faster than I would be getting off the ground and making the first few working versions."* — [Daniel Feldman](https://twitter.com/d_feldman/status/1662295077387923456) on X -- *"THANK YOU for Aider! It really feels like a glimpse into the future of coding."* — [derwiki](https://news.ycombinator.com/item?id=38205643) on Hacker News -- *"It's just amazing. It is freeing me to do things I felt were out my comfort zone before."* — [Dougie](https://discord.com/channels/1131200896827654144/1174002618058678323/1174084556257775656) on Discord -- *"This project is stellar."* — [funkytaco](https://github.com/Aider-AI/aider/issues/112#issuecomment-1637429008) on GitHub -- *"Amazing project, definitely the best AI coding assistant I've used."* — [joshuavial](https://github.com/Aider-AI/aider/issues/84) on GitHub -- *"I absolutely love using Aider ... It makes software development feel so much lighter as an experience."* — [principalideal0](https://discord.com/channels/1131200896827654144/1133421607499595858/1229689636012691468) on Discord -- *"I have been recovering from multiple shoulder surgeries ... and have used aider extensively. It has allowed me to continue productivity."* — [codeninja](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) on Reddit -- *"I am an aider addict. I'm getting so much more work done, but in less time."* — [dandandan](https://discord.com/channels/1131200896827654144/1131200896827654149/1135913253483069470) on Discord -- *"After wasting $100 on tokens trying to find something better, I'm back to Aider. It blows everything else out of the water hands down, there's no competition whatsoever."* — [SystemSculpt](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) on Discord -- *"Aider is amazing, coupled with Sonnet 3.5 it's quite mind blowing."* — [Josh Dingus](https://discord.com/channels/1131200896827654144/1133060684540813372/1262374225298198548) on Discord -- *"Hands down, this is the best AI coding assistant tool so far."* — [IndyDevDan](https://www.youtube.com/watch?v=MPYFPvxfGZs) on YouTube -- *"[Aider] changed my daily coding workflows. It's mind-blowing how a single Python application can change your life."* — [maledorak](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) on Discord -- *"Best agent for actual dev work in existing codebases."* — [Nick Dobos](https://twitter.com/NickADobos/status/1690408967963652097?s=20) on X -- *"One of my favorite pieces of software. Blazing trails on new paradigms!"* — [Chris Wall](https://x.com/chris65536/status/1905053299251798432) on X -- *"Aider has been revolutionary for me and my work."* — [Starry Hope](https://x.com/starryhopeblog/status/1904985812137132056) on X -- *"Try aider! One of the best ways to vibe code."* — [Chris Wall](https://x.com/Chris65536/status/1905053418961391929) on X -- *"Aider is hands down the best. And it's free and opensource."* — [AriyaSavakaLurker](https://www.reddit.com/r/ChatGPTCoding/comments/1ik16y6/whats_your_take_on_aider/mbip39n/) on Reddit -- *"Aider is also my best friend."* — [jzn21](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) on Reddit -- *"Try Aider, it's worth it."* — [jorgejhms](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) on Reddit -- *"I like aider :)"* — [Chenwei Cui](https://x.com/ccui42/status/1904965344999145698) on X -- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* — [Reilly Sweetland](https://x.com/rsweetland/status/1904963807237259586) on X -- *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) on Discord -- *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* — [Joshua D Vander Hook](https://x.com/jodavaho/status/1911154899057795218) on X -- *"thanks to aider, i have started and finished three personal projects within the last two days"* — [joseph stalzyn](https://x.com/anitaheeder/status/1908338609645904160) on X -- *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* — [koleok](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) on Discord -- *"Aider ... is the tool to benchmark against."* — [BeetleB](https://news.ycombinator.com/item?id=43930201) on Hacker News -- *"aider is really cool"* — [kache (@yacineMTB)](https://x.com/yacineMTB/status/1911224442430124387) on X +- *"My life has changed... There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* — [Eric S. Raymond on X](https://x.com/esrtweet/status/1910809356381413593) +- *"The best free open source AI coding assistant."* — [IndyDevDan on YouTube](https://youtu.be/YALpX8oOn78) +- *"The best AI coding assistant so far."* — [Matthew Berman on YouTube](https://www.youtube.com/watch?v=df8afeb1FY8) +- *"Aider ... has easily quadrupled my coding productivity."* — [SOLAR_FIELDS on Hacker News](https://news.ycombinator.com/item?id=36212100) +- *"It's a cool workflow... Aider's ergonomics are perfect for me."* — [qup on Hacker News](https://news.ycombinator.com/item?id=38185326) +- *"It's really like having your senior developer live right in your Git repo - truly amazing!"* — [rappster on GitHub](https://github.com/Aider-AI/aider/issues/124) +- *"What an amazing tool. It's incredible."* — [valyagolev on GitHub](https://github.com/Aider-AI/aider/issues/6#issue-1722897858) +- *"Aider is such an astounding thing!"* — [cgrothaus on GitHub](https://github.com/Aider-AI/aider/issues/82#issuecomment-1631876700) +- *"It was WAY faster than I would be getting off the ground and making the first few working versions."* — [Daniel Feldman on X](https://twitter.com/d_feldman/status/1662295077387923456) +- *"THANK YOU for Aider! It really feels like a glimpse into the future of coding."* — [derwiki on Hacker News](https://news.ycombinator.com/item?id=38205643) +- *"It's just amazing. It is freeing me to do things I felt were out my comfort zone before."* — [Dougie on Discord](https://discord.com/channels/1131200896827654144/1174002618058678323/1174084556257775656) +- *"This project is stellar."* — [funkytaco on GitHub](https://github.com/Aider-AI/aider/issues/112#issuecomment-1637429008) +- *"Amazing project, definitely the best AI coding assistant I've used."* — [joshuavial on GitHub](https://github.com/Aider-AI/aider/issues/84) +- *"I absolutely love using Aider ... It makes software development feel so much lighter as an experience."* — [principalideal0 on Discord](https://discord.com/channels/1131200896827654144/1133421607499595858/1229689636012691468) +- *"I have been recovering from multiple shoulder surgeries ... and have used aider extensively. It has allowed me to continue productivity."* — [codeninja on Reddit](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) +- *"I am an aider addict. I'm getting so much more work done, but in less time."* — [dandandan on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1135913253483069470) +- *"After wasting $100 on tokens trying to find something better, I'm back to Aider. It blows everything else out of the water hands down, there's no competition whatsoever."* — [SystemSculpt on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) +- *"Aider is amazing, coupled with Sonnet 3.5 it's quite mind blowing."* — [Josh Dingus on Discord](https://discord.com/channels/1131200896827654144/1133060684540813372/1262374225298198548) +- *"Hands down, this is the best AI coding assistant tool so far."* — [IndyDevDan on YouTube](https://www.youtube.com/watch?v=MPYFPvxfGZs) +- *"[Aider] changed my daily coding workflows. It's mind-blowing how a single Python application can change your life."* — [maledorak on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) +- *"Best agent for actual dev work in existing codebases."* — [Nick Dobos on X](https://twitter.com/NickADobos/status/1690408967963652097?s=20) +- *"One of my favorite pieces of software. Blazing trails on new paradigms!"* — [Chris Wall on X](https://x.com/chris65536/status/1905053299251798432) +- *"Aider has been revolutionary for me and my work."* — [Starry Hope on X](https://x.com/starryhopeblog/status/1904985812137132056) +- *"Try aider! One of the best ways to vibe code."* — [Chris Wall on X](https://x.com/Chris65536/status/1905053418961391929) +- *"Aider is hands down the best. And it's free and opensource."* — [AriyaSavakaLurker on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1ik16y6/whats_your_take_on_aider/mbip39n/) +- *"Aider is also my best friend."* — [jzn21 on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) +- *"Try Aider, it's worth it."* — [jorgejhms on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) +- *"I like aider :)"* — [Chenwei Cui on X](https://x.com/ccui42/status/1904965344999145698) +- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* — [Reilly Sweetland on X](https://x.com/rsweetland/status/1904963807237259586) +- *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) +- *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* — [Joshua D Vander Hook on X](https://x.com/jodavaho/status/1911154899057795218) +- *"thanks to aider, i have started and finished three personal projects within the last two days"* — [joseph stalzyn on X](https://x.com/anitaheeder/status/1908338609645904160) +- *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* — [koleok on Discord](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) +- *"Aider ... is the tool to benchmark against."* — [BeetleB on Hacker News](https://news.ycombinator.com/item?id=43930201) +- *"aider is really cool"* — [kache (@yacineMTB) on X](https://x.com/yacineMTB/status/1911224442430124387) From f815f0377e7b608b350580753e12c65c09d8d269 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 10 May 2025 07:52:39 -0700 Subject: [PATCH 366/459] copy --- README.md | 12 +- aider/website/assets/sample-analytics.jsonl | 316 ++++++++++---------- aider/website/docs/faq.md | 4 +- aider/website/index.html | 80 ++--- 4 files changed, 206 insertions(+), 206 deletions(-) diff --git a/README.md b/README.md index c82646780..b380b56f8 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u ## Kind Words From Users -- *"My life has changed... There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* — [Eric S. Raymond on X](https://x.com/esrtweet/status/1910809356381413593) +- *"My life has changed... Aider... It's going to rock your world."* — [Eric S. Raymond on X](https://x.com/esrtweet/status/1910809356381413593) - *"The best free open source AI coding assistant."* — [IndyDevDan on YouTube](https://youtu.be/YALpX8oOn78) - *"The best AI coding assistant so far."* — [Matthew Berman on YouTube](https://www.youtube.com/watch?v=df8afeb1FY8) - *"Aider ... has easily quadrupled my coding productivity."* — [SOLAR_FIELDS on Hacker News](https://news.ycombinator.com/item?id=36212100) @@ -154,12 +154,12 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u - *"This project is stellar."* — [funkytaco on GitHub](https://github.com/Aider-AI/aider/issues/112#issuecomment-1637429008) - *"Amazing project, definitely the best AI coding assistant I've used."* — [joshuavial on GitHub](https://github.com/Aider-AI/aider/issues/84) - *"I absolutely love using Aider ... It makes software development feel so much lighter as an experience."* — [principalideal0 on Discord](https://discord.com/channels/1131200896827654144/1133421607499595858/1229689636012691468) -- *"I have been recovering from multiple shoulder surgeries ... and have used aider extensively. It has allowed me to continue productivity."* — [codeninja on Reddit](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) +- *"I have been recovering from ... surgeries ... aider ... has allowed me to continue productivity."* — [codeninja on Reddit](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) - *"I am an aider addict. I'm getting so much more work done, but in less time."* — [dandandan on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1135913253483069470) -- *"After wasting $100 on tokens trying to find something better, I'm back to Aider. It blows everything else out of the water hands down, there's no competition whatsoever."* — [SystemSculpt on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) +- *"Aider... blows everything else out of the water hands down, there's no competition whatsoever."* — [SystemSculpt on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) - *"Aider is amazing, coupled with Sonnet 3.5 it's quite mind blowing."* — [Josh Dingus on Discord](https://discord.com/channels/1131200896827654144/1133060684540813372/1262374225298198548) - *"Hands down, this is the best AI coding assistant tool so far."* — [IndyDevDan on YouTube](https://www.youtube.com/watch?v=MPYFPvxfGZs) -- *"[Aider] changed my daily coding workflows. It's mind-blowing how a single Python application can change your life."* — [maledorak on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) +- *"[Aider] changed my daily coding workflows. It's mind-blowing how ...(it)... can change your life."* — [maledorak on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) - *"Best agent for actual dev work in existing codebases."* — [Nick Dobos on X](https://twitter.com/NickADobos/status/1690408967963652097?s=20) - *"One of my favorite pieces of software. Blazing trails on new paradigms!"* — [Chris Wall on X](https://x.com/chris65536/status/1905053299251798432) - *"Aider has been revolutionary for me and my work."* — [Starry Hope on X](https://x.com/starryhopeblog/status/1904985812137132056) @@ -168,11 +168,11 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u - *"Aider is also my best friend."* — [jzn21 on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) - *"Try Aider, it's worth it."* — [jorgejhms on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) - *"I like aider :)"* — [Chenwei Cui on X](https://x.com/ccui42/status/1904965344999145698) -- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* — [Reilly Sweetland on X](https://x.com/rsweetland/status/1904963807237259586) +- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes ... while keeping the developer in control."* — [Reilly Sweetland on X](https://x.com/rsweetland/status/1904963807237259586) - *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) - *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* — [Joshua D Vander Hook on X](https://x.com/jodavaho/status/1911154899057795218) - *"thanks to aider, i have started and finished three personal projects within the last two days"* — [joseph stalzyn on X](https://x.com/anitaheeder/status/1908338609645904160) - *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* — [koleok on Discord](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) - *"Aider ... is the tool to benchmark against."* — [BeetleB on Hacker News](https://news.ycombinator.com/item?id=43930201) -- *"aider is really cool"* — [kache (@yacineMTB) on X](https://x.com/yacineMTB/status/1911224442430124387) +- *"aider is really cool"* — [kache on X](https://x.com/yacineMTB/status/1911224442430124387) diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index a8c7941a3..817d29e29 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,161 +1,3 @@ -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746919} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746928} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746928} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8141, "completion_tokens": 527, "total_tokens": 8668, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746942} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746970} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746982} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 8145, "completion_tokens": 2, "total_tokens": 8147, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746983} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746995} -{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746746997} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747003} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 7199, "completion_tokens": 21, "total_tokens": 7220, "cost": 0.07283, "total_cost": 0.07283}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747008} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747072} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747080} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747082} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747082} -{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747082} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747084} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 11919, "completion_tokens": 805, "total_tokens": 12724, "cost": 0.15139, "total_cost": 0.15139}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747100} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747106} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747108} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747109} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 9564, "completion_tokens": 21, "total_tokens": 9585, "cost": 0.09648, "total_cost": 0.24786999999999998}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747113} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747123} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747123} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747123} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747127} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747190} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747190} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747194} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747196} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747196} -{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747196} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747197} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747206} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7646, "completion_tokens": 85, "total_tokens": 7731, "cost": 0.07986, "total_cost": 0.07986}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747210} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747215} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747217} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7642, "completion_tokens": 466, "total_tokens": 8108, "cost": 0.09506, "total_cost": 0.17492000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747228} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747234} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747234} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747328} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747329} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747329} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747332} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747432} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747433} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747433} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747436} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747449} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747450} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747450} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747450} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747451} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747481} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747490} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747491} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747491} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747494} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747526} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747527} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747527} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747527} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747531} -{"event": "command_tokens", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747534} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747541} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747560} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 10472, "completion_tokens": 1189, "total_tokens": 11661, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747572} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 94725, "completion_tokens": 673, "total_tokens": 95398, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747633} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746747648} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748758} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748759} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748759} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748772} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748773} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748773} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748784} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748785} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748785} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748803} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748803} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748803} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748819} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748820} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748820} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748824} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748824} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748824} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748828} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748828} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748828} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748846} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748846} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748846} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748889} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748889} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748889} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748898} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748898} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748898} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748901} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748902} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748902} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748908} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748909} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748909} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748912} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748912} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748912} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748920} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748921} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748921} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748951} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748951} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748951} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748955} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748959} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748959} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748959} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748963} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748965} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748966} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748966} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746748969} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749018} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749020} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749020} -{"event": "cli session", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749020} -{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749045} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749151} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749161} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749165} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749166} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749166} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749169} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749187} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749187} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749187} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749191} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749193} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749194} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749194} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749197} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749200} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749201} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749201} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749204} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749204} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749208} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749208} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749208} -{"event": "exit", "properties": {"reason": "Showed repo map"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749211} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} -{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749216} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749217} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8495, "completion_tokens": 17, "total_tokens": 8512, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749222} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749225} {"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749225} {"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749229} {"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746749229} @@ -998,3 +840,161 @@ {"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831893} {"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 10158, "completion_tokens": 449, "total_tokens": 10607, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746831934} {"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746838826} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839126} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839127} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839127} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839127} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839130} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839139} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 13706, "completion_tokens": 1014, "total_tokens": 14720, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839189} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839206} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839209} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839210} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839211} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 8921, "completion_tokens": 278, "total_tokens": 9199, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839217} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839271} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 9279, "completion_tokens": 217, "total_tokens": 9496, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746839276} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746885923} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746885923} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886094} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886094} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886094} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886094} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886097} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886098} +{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886116} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886119} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886119} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886145} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886146} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886146} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886146} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886151} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7995, "completion_tokens": 3927, "total_tokens": 11922, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886209} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886223} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 12135, "completion_tokens": 67, "total_tokens": 12202, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886226} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886237} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886249} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886251} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 38347, "completion_tokens": 118, "total_tokens": 38465, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886266} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886274} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886281} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886311} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886311} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886311} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886311} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886311} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886311} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886312} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886313} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886314} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886315} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886316} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886317} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886320} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886401} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886402} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886402} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886402} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886402} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886402} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886403} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886403} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886403} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886428} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886428} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886428} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886428} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886429} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886440} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886455} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886508} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 23524, "completion_tokens": 1213, "total_tokens": 24737, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886681} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886870} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886870} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886874} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886875} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886875} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886881} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886942} +{"event": "repo", "properties": {"num_files": 624}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886942} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886942} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886942} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746886992} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746887005} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 7718, "completion_tokens": 3544, "total_tokens": 11262, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746887071} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746888114} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746888123} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746888123} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 17890, "completion_tokens": 743, "total_tokens": 18633, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746888152} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746888161} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746888237} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.5-flash-preview-04-17", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff-simple", "prompt_tokens": 25004, "completion_tokens": 3849, "total_tokens": 28853, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1746888341} diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index 351b010cd..43f52233e 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,8 +264,8 @@ tr:hover { background-color: #f5f5f5; } - - + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-25855,03483.0%
o3166,39116.2%
gemini/gemini-2.5-pro-exp-03-25902,13787.4%
o3121,02311.7%
openrouter/REDACTED8,7450.8%
diff --git a/aider/website/index.html b/aider/website/index.html index ea953b030..e681a168c 100644 --- a/aider/website/index.html +++ b/aider/website/index.html @@ -269,178 +269,178 @@ cog.out(text)