Compare commits

...

3464 Commits

Author SHA1 Message Date
Paul Gauthier
01a9b88df1 set version to 0.86.1.dev 2025-08-09 12:55:11 -03:00
Paul Gauthier
a4be6ccd87 version bump to 0.86.0 2025-08-09 12:54:51 -03:00
Paul Gauthier
4cd71acebe copy 2025-08-09 12:35:59 -03:00
Paul Gauthier
3d8290cdef copy 2025-08-09 12:29:10 -03:00
Paul Gauthier
b782437918 copy 2025-08-09 12:22:31 -03:00
Paul Gauthier
f3d5f20ad7 blame 2025-08-09 11:23:25 -03:00
Paul Gauthier
f57c0f624a feat: blame: Detect aider commits using co-authored-by
Co-authored-by: aider (gpt-5) <aider@aider.chat>
2025-08-09 09:55:52 -03:00
Paul Gauthier
071d177309 feat: Add OpenAI and OpenRouter GPT-5 model settings
Co-authored-by: aider (gpt-5) <aider@aider.chat>
2025-08-09 09:53:34 -03:00
Paul Gauthier
4e7c9f2fcd fix: Remove editor settings from models using gpt-5 nano weak model
Co-authored-by: aider (gpt-5) <aider@aider.chat>
2025-08-08 10:24:33 -03:00
Paul Gauthier
a14cb222c0 feat: Add GPT-5 model family settings
Co-authored-by: aider (gpt-5) <aider@aider.chat>
2025-08-08 09:37:44 -03:00
Paul Gauthier
3b919646a5 set version to 0.85.6.dev 2025-08-07 17:54:56 -03:00
Paul Gauthier
9702b1c199 version bump to 0.85.5 2025-08-07 17:54:54 -03:00
Paul Gauthier
7440a01015 copy 2025-08-07 17:10:47 -03:00
Paul Gauthier
3a6f217dcd feat: Add reasoning_effort setting support for GPT-5 models 2025-08-07 17:04:44 -03:00
Paul Gauthier
ceb81369ea feat: Enforce diff edit format for GPT-5 models 2025-08-07 17:03:10 -03:00
Paul Gauthier
ad49e56b24 fix: Accurately match gpt-5 and gpt-5-2025-08-07 models
Co-authored-by: aider (gpt-5) <aider@aider.chat>
2025-08-07 16:58:47 -03:00
Paul Gauthier
53c14329bf set version to 0.85.5.dev 2025-08-07 15:33:44 -03:00
Paul Gauthier
0b13b27b51 version bump to 0.85.4 2025-08-07 15:33:43 -03:00
Paul Gauthier
d9d13f23b3 copy 2025-08-07 15:31:28 -03:00
Paul Gauthier
8c982f83ce feat: Disable temperature for GPT-5 models
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-08-07 15:26:20 -03:00
Paul Gauthier
ac7e274fe0 fix: Adapt to new PostHog SDK capture method signature
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-08-07 15:26:02 -03:00
Paul Gauthier
c23ebfe688 set version to 0.85.4.dev 2025-08-07 10:42:13 -03:00
Paul Gauthier
9d778bfdac version bump to 0.85.3 2025-08-07 10:42:12 -03:00
Paul Gauthier
70f2bbb796 copy 2025-08-07 10:17:58 -03:00
Paul Gauthier
6c7870dbcf copy 2025-08-07 10:16:46 -03:00
Paul Gauthier
ece9803fdc bump deps without llama-index-core==0.12.26 2025-08-07 09:18:12 -03:00
Paul Gauthier
ad39fdb2d1 bump deps 2025-08-07 09:00:03 -03:00
Paul Gauthier
8904e2966d Merge branch 'main' of github.com:Aider-AI/aider 2025-08-07 08:50:45 -03:00
Paul Gauthier
3c9e180b54 bump deps 2025-08-07 08:50:39 -03:00
paul-gauthier
1af0e59149 Merge pull request #4410 from liam61/main
chore: prettier scripting usage for faq
2025-08-05 08:29:08 -03:00
liam.liu
3402b151f7 chore: prettier scripting usage for faq 2025-08-05 19:18:16 +08:00
Paul Gauthier
f38200c511 copy 2025-07-18 11:05:51 +00:00
Paul Gauthier
89ad2ba2cb copy 2025-07-17 20:26:38 +00:00
Paul Gauthier
9d6ddcd0fc chore: Remove Kimi K2 model metadata and add test results 2025-07-17 18:03:14 +00:00
paul-gauthier
915ebffc8e Update polyglot_leaderboard.yml 2025-07-17 09:34:34 +00:00
Paul Gauthier
b336dee9b0 set version to 0.85.3.dev 2025-07-15 23:22:15 +00:00
Paul Gauthier
853532c48c version bump to 0.85.2 2025-07-15 23:22:12 +00:00
Paul Gauthier
1a0ef64011 copy 2025-07-15 23:20:34 +00:00
Paul Gauthier
fe3f77176e copy 2025-07-15 23:18:53 +00:00
Paul Gauthier
2a18a186b4 copy 2025-07-15 23:17:07 +00:00
Paul Gauthier
102f6ef284 feat: Add Kimi K2 model data to polyglot leaderboard 2025-07-15 19:44:40 +00:00
paul-gauthier
90dffa9eae Merge pull request #4342 from sentienthouseplant/bau-add-kimi-k2 2025-07-12 13:26:26 -03:00
Jack Harrington
63d3dbcc9b Add source for openrouter kimi-k2 information. Remove reminder: sys. 2025-07-12 17:10:35 +01:00
Jack Harrington
c3f0bdd391 Add kimi-k2 to model resources. 2025-07-12 16:51:17 +01:00
Jack Harrington
c24c2c862d Update model-metadata.json 2025-07-12 16:11:31 +01:00
Paul Gauthier
7bc2e4e911 feat: Add Grok-4 and Gemini Flash Lite, enhance CLI, fix model settings 2025-07-11 19:36:06 -03:00
Paul Gauthier
f7870b6d03 Merge branch 'main' of github.com:Aider-AI/aider 2025-07-10 12:10:01 -03:00
Paul Gauthier
bd78b9fe9d feat: Add openrouter/x-ai/grok-4 model setting
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-07-10 11:35:25 -03:00
Paul Gauthier
eab51242bb feat: Add xai/grok-4 model settings 2025-07-10 11:35:24 -03:00
paul-gauthier
6a28864c22 Merge pull request #4324 from tamirzb/main
Add gemini 2.5 flash lite preview 06-17
2025-07-09 12:18:56 -03:00
Tamir Zahavi-Brunner
ef59ecbcd8 Add gemini 2.5 flash lite preview 06-17 2025-07-09 23:08:55 +08:00
Paul Gauthier
6c16498de1 fix: Display first line of commit messages in /undo output
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-07-08 11:29:59 -03:00
paul-gauthier
f22fbf9b3a Merge pull request #4321 from yzx9/missing-cmd-output
fix: add missing output for clear command
2025-07-08 08:05:07 -03:00
Zexin Yuan
1a57730884 fix: add missing output for clear command 2025-07-08 11:28:34 +08:00
paul-gauthier
0967024304 Merge pull request #4307 from o-nix/patch-1 2025-07-04 16:47:06 -03:00
Kirill Vergun
456db697f0 Remove extra duplicated line in default commit instructions 2025-07-04 21:03:54 +02:00
paul-gauthier
3db4d378eb Merge pull request #4300 from ei-grad/robust-model-settings-override
fix: Remove existing model settings before adding new ones
2025-07-01 11:12:13 -03:00
Andrew Grigorev
02c27732af fix: Remove existing model settings before adding new ones
Fix #4298

Co-authored-by: aider (vertex_ai/gemini-2.5-pro) <aider@aider.chat>
2025-07-01 11:59:14 +03:00
Paul Gauthier
966cf2b9fb copy 2025-06-30 09:52:19 -03:00
Paul Gauthier
ac46e14ce4 set version to 0.85.2.dev 2025-06-30 09:51:05 -03:00
Paul Gauthier
9c9c6fe0b8 version bump to 0.85.1 2025-06-30 09:51:03 -03:00
Paul Gauthier
59a5190267 copy 2025-06-30 09:49:49 -03:00
Paul Gauthier
302b0cb5f9 chore: Add latest polyglot leaderboard results and adjust display cap 2025-06-30 09:49:21 -03:00
Paul Gauthier
f4605b2a86 feat: Display model announcements with no-arg /model command
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-06-29 09:01:10 -07:00
Paul Gauthier
3fec90340b chore: Remove commented out extra_params from model settings 2025-06-28 06:46:35 -07:00
Paul Gauthier
531838096b chore: Update polyglot leaderboard data 2025-06-27 17:33:58 -07:00
Paul Gauthier
540b27b577 blame 2025-06-27 17:03:14 -07:00
Paul Gauthier
4f4f00f37c set version to 0.85.1.dev 2025-06-27 16:39:50 -07:00
Paul Gauthier
a544112ff3 version bump to 0.85.0 2025-06-27 16:39:48 -07:00
Paul Gauthier
e0e2cb109a chore: Ignore Docker bash history file 2025-06-27 16:37:31 -07:00
Paul Gauthier
66cdfdefd5 copy 2025-06-27 16:37:02 -07:00
Paul Gauthier
d5785b57a4 copy 2025-06-27 16:36:27 -07:00
Paul Gauthier
ae539fb1f5 copy 2025-06-25 15:30:36 -07:00
Paul Gauthier
f5a512ba65 refactor: Remove -n short flag from benchmark --new option 2025-06-25 14:04:48 -07:00
Paul Gauthier
c48fea64a1 copy 2025-06-25 13:20:51 -07:00
Paul Gauthier
68f05f5b4f bump deps 2025-06-25 13:08:34 -07:00
Paul Gauthier
323910be11 test: Improve summary test with list-aware token counting mock 2025-06-25 12:57:59 -07:00
Paul Gauthier
19a7864168 refactor: Remove unused head variable in ChatSummary 2025-06-25 11:53:24 -07:00
Paul Gauthier
320ee06cc3 style: Add trailing commas to improve formatting 2025-06-25 11:52:31 -07:00
Paul Gauthier
8fe52d7b0d Merge branch 'main' of github.com:Aider-AI/aider 2025-06-25 11:51:28 -07:00
Paul Gauthier
338cfb46e4 Revert "bump deps"
This reverts commit 63a7d261ae.
2025-06-25 11:51:22 -07:00
paul-gauthier
63c92771f2 Merge pull request #3764 from jayeshthk/main
Optimize head‑truncation loop in summarize_real()
2025-06-25 11:51:07 -07:00
paul-gauthier
a0ffc5761c Merge pull request #3870 from susliko/custom-posthog-instance
feat: add configurable PostHog host and API key parameters
2025-06-25 11:47:18 -07:00
Paul Gauthier
d47cb40518 test: Add Clojure language repomap test fixture
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-06-25 11:40:26 -07:00
Paul Gauthier
d9e3ede000 Merge branch 'main' of github.com:Aider-AI/aider 2025-06-25 11:37:02 -07:00
paul-gauthier
ba97c83be6 Merge pull request #4028 from garrett-hopper/clojure-repomap
Add Clojure repomap queries
2025-06-25 11:36:53 -07:00
Paul Gauthier
22cdacc8e2 copy 2025-06-25 11:36:38 -07:00
Paul Gauthier
15806aa6ab feat: Enable co-authored-by by default
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-06-25 11:33:40 -07:00
Paul Gauthier
74ee340101 chore: Increase Deepseek v3 max tokens to 65536
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
2025-06-25 11:28:24 -07:00
Paul Gauthier
63a7d261ae bump deps 2025-06-25 11:26:17 -07:00
Paul Gauthier
e2d3fc4594 fix: Update Co-authored-by email to aider@aider.chat 2025-06-25 11:17:07 -07:00
Paul Gauthier (aider)
14af218ea2 fix: Create parent directories for history files and improve error handling 2025-06-25 11:12:24 -07:00
Paul Gauthier
5b317e5ec0 copy 2025-06-25 11:10:21 -07:00
Paul Gauthier
75f1a33292 Merge branch 'main' of github.com:Aider-AI/aider 2025-06-25 11:08:15 -07:00
Paul Gauthier
32cdb7cfad copy 2025-06-25 11:07:59 -07:00
paul-gauthier
d022f4ac63 Merge pull request #4264 from FeepingCreature/fix/4277-accept-taggy-diff
refactor: update HEAD regex to accept optional closing tag in search blocks
2025-06-25 10:57:35 -07:00
Paul Gauthier
b787e17924 Revert "feat: better place to create history file dirs (InputOutput ctr)"
This reverts commit f695e71398.
2025-06-25 10:53:55 -07:00
Paul Gauthier
5e9daa3c56 Revert "fix: check for input_history_file none"
This reverts commit fb4d2f90c1.
2025-06-25 10:53:49 -07:00
Paul Gauthier
d5ae9eff88 Merge branch 'main' of github.com:Aider-AI/aider 2025-06-25 10:51:42 -07:00
paul-gauthier
856d94c1dc Merge pull request #4271 from contributor/chat-history-files-auto-create-dir
fix: Auto-create parent directories for chat history files
2025-06-25 06:29:10 -07:00
contributor
fb4d2f90c1 fix: check for input_history_file none 2025-06-25 16:09:40 +03:00
paul-gauthier
d85078a610 Merge pull request #4257 from contributor/chat-history-files-auto-create-dir 2025-06-25 04:57:04 -07:00
contributor
f695e71398 feat: better place to create history file dirs (InputOutput ctr)
this decreases number of IO operations
2025-06-25 13:48:38 +03:00
Paul Gauthier
d90936662b copy 2025-06-24 16:00:13 -07:00
paul-gauthier
6a00d8ff5f Merge pull request #4269 from iamFIREcracker/fix-for-literal-read-only-files 2025-06-24 12:34:14 -07:00
Matteo Landi
c4b9f14b90 fix: Resolve literal paths correctly in /read-only command 2025-06-24 20:58:43 +02:00
paul-gauthier
a785b0f463 Merge pull request #4268 from therealmarv/add-gemini-2.5-vertex-general-availability 2025-06-24 09:09:45 -07:00
Paul Gauthier
90ecde4da9 copy 2025-06-24 08:23:08 -07:00
Paul Gauthier
37b7a7b44f Merge branch 'main' of github.com:Aider-AI/aider 2025-06-24 08:22:33 -07:00
Paul Gauthier
89356e897e copy 2025-06-24 08:22:30 -07:00
therealmarv
05ca9e5c24 add Gemini 2.5 non-preview Vertex models 2025-06-24 17:07:01 +02:00
Mathis Beer (aider)
7c9cff2f6e refactor: update HEAD regex to accept optional closing tag in search blocks
When working with HTML text, the network has a strong bias to go "well, this is '<' followed by text, it's a tag! I should close it with '>'." Then the edit would be ignored.
2025-06-24 10:23:25 +02:00
paul-gauthier
f9fc2c6a44 Merge pull request #4260 from mtofano/add-matlab-repomap-support 2025-06-23 14:10:55 -07:00
Matthew Tofano
20429b6852 add MATLAB tags to enable repo map support 2025-06-23 21:24:52 +01:00
contributor
52d04430db feat: Auto-create parent directories for chat history files
This prevents aider startup errors like:
```
Warning: Unable to write to chat history file .chat/.aider.chat.history.md.
[Errno 2] No such file or directory: '.chat/.aider.chat.history.md'
```
2025-06-23 14:22:10 +03:00
Paul Gauthier (aider)
f16110717b fix: Ensure pip is available before installation 2025-06-20 14:23:04 -07:00
Paul Gauthier
a2d345fe3d docs: Condense docstring for think_tokens command 2025-06-20 14:08:41 -07:00
Paul Gauthier (aider)
1bdd4f0269 style: Format code 2025-06-20 14:08:09 -07:00
Paul Gauthier (aider)
9188cedc72 style: Fix line length in cmd_think_tokens docstring 2025-06-20 14:08:05 -07:00
Paul Gauthier (aider)
fdb49e18cd docs: Add Hacker News quote to Kind Words section 2025-06-20 14:01:47 -07:00
Paul Gauthier (aider)
ae927d85f0 style: Use triple quotes for docstring 2025-06-20 13:45:31 -07:00
Paul Gauthier
a1c2eeb88a style: Line wrap long string literals 2025-06-20 13:45:12 -07:00
Paul Gauthier
caf212c8d1 bump deps 2025-06-20 13:43:37 -07:00
Paul Gauthier
a29ae3ef37 Merge branch 'main' of github.com:Aider-AI/aider 2025-06-20 13:43:04 -07:00
paul-gauthier
90f9c813a0 Update analytics.md 2025-06-20 05:39:56 -07:00
paul-gauthier
9fdc6d4a44 Merge pull request #4254 from KennyDizi/main 2025-06-20 05:34:18 -07:00
Trung Dinh
bb1b9e8e2d Add meta data for openrouter/google/gemini-2.5-pro 2025-06-20 17:04:30 +07:00
Trung Dinh
0c480b7ea4 Support model openrouter/google/gemini-2.5-pro official 2025-06-20 17:04:13 +07:00
paul-gauthier
3cb120e0a9 Merge pull request #4242 from nims11/update-gemini
Update gemini models in model-settings.yml
2025-06-19 14:56:39 -07:00
Nimesh Ghelani
1677db3ca7 Add gemini model metadata 2025-06-19 12:42:26 +00:00
Nimesh Ghelani
ae94521242 Update gemini models in model-settings.yml 2025-06-18 12:46:34 +00:00
paul-gauthier
f8855ebc58 Merge pull request #4236 from daniel-sc/patch-1 2025-06-17 03:31:09 -07:00
Daniel Schreiber
262117d124 doc: add correct path for github copilot token for windows users 2025-06-17 11:39:18 +02:00
paul-gauthier
72c23800a9 Merge pull request #4228 from maliayas/reset-thinking-tokens 2025-06-15 16:52:38 -07:00
Ali Ayas (claude-sonnet-4-20250514)
e91efda8fe feat: add support for disabling thinking tokens with value 0 2025-06-16 01:13:47 +03:00
Paul Gauthier
1daeb01ff0 Merge branch 'main' of github.com:Aider-AI/aider 2025-06-13 06:15:28 -07:00
paul-gauthier
2df4beb6e9 Merge pull request #4022 from ei-grad/fix-vertex-ai 2025-06-12 09:27:20 -07:00
Andrew Grigorev
e54ac087cb fix: Vertex AI model names use vertex_ai/ prefix
Don't be confused with `llm_provider` which is `vertex_ai-language-models`
340a0453d3/litellm/__init__.py (L509)
2025-06-12 18:54:21 +03:00
paul-gauthier
17d40a62c9 Merge pull request #4210 from solatis/main 2025-06-10 19:28:54 -07:00
Leon Mergen
67e190c8d1 Adds support for openai/o3-pro 2025-06-11 08:53:20 +07:00
Paul Gauthier
5562caae0c copy 2025-06-09 06:41:04 -07:00
Paul Gauthier
d55beb5f24 fix: Adjust analytics repo file count condition 2025-06-09 06:39:11 -07:00
Paul Gauthier
df5b780d6c Merge branch 'main' of github.com:Aider-AI/aider 2025-06-09 06:38:00 -07:00
paul-gauthier
3e07d068ad Merge pull request #4199 from holoskii/large-repo-speedup
Skip expensive `get_tracked_files` call if `skip_sanity_check_repo` is true
2025-06-09 06:37:53 -07:00
Paul Gauthier
47ddce3e1b chore: Add DeepSeek R1 benchmark results 2025-06-09 06:34:26 -07:00
Paul Gauthier
e256ffd2c6 chore: Add Gemini 2.5 Pro results to leaderboard 2025-06-09 06:28:12 -07:00
Makar Ivashko
7a83f038d8 Skip expensive get_tracked_files call if skip_sanity_check_repo is true 2025-06-09 10:09:06 +03:00
Paul Gauthier (aider)
990a0566bb fix: Remove unused mock_stdout in tests 2025-06-08 10:19:47 -07:00
Paul Gauthier (aider)
0ac6068e1d fix: Remove unused mock_stdout in test_main 2025-06-08 10:19:01 -07:00
Paul Gauthier (aider)
1953c9815a fix: Remove unused mock_stdout in tests 2025-06-08 10:17:45 -07:00
Paul Gauthier
cc8be1453f style: Add whitespace in tests 2025-06-08 10:17:28 -07:00
Paul Gauthier
789aab8417 Merge branch 'main' of github.com:Aider-AI/aider 2025-06-08 10:17:09 -07:00
Paul Gauthier
226e23f06d chore: update max tokens for deepseek-coder 2025-06-08 10:17:02 -07:00
paul-gauthier
150711d7e0 Merge pull request #4182 from wietsevenema/main
fix: Correct Vertex AI model name prefixes in settings
2025-06-08 10:16:28 -07:00
paul-gauthier
8d48def24d Merge pull request #4193 from tanavamsikrishna/main 2025-06-08 07:11:31 -07:00
Vamsi Talupula
4c50fc6d69 Let 'rich' use code_theme as inline_code_theme 2025-06-08 17:30:12 +05:30
Wietse Venema
e67c9327fd fix: Correct Vertex AI model name prefixes in settings 2025-06-07 14:31:00 +02:00
paul-gauthier
837b8a93e9 Merge pull request #3609 from omarcinkonis/main 2025-06-07 05:16:45 -07:00
Paul Gauthier
4c161f9e12 build: Pin networkx to <3.5 for py3.10 compatibility 2025-06-06 09:43:25 -07:00
Paul Gauthier
f827f22f7a cleanup 2025-06-06 09:31:34 -07:00
Paul Gauthier
3064477cb8 bump deps 2025-06-06 09:30:56 -07:00
Paul Gauthier (aider)
a7ccdaf279 feat: Add thinking_tokens setting to Gemini 2.5 Pro 06-05 models 2025-06-06 09:29:13 -07:00
Paul Gauthier
2bc71cfd71 copy 2025-06-06 09:28:24 -07:00
Paul Gauthier
6b7a0565e9 Merge branch 'main' of github.com:Aider-AI/aider 2025-06-06 09:28:12 -07:00
Paul Gauthier (aider)
8c1ae95f87 chore: Add metadata for gemini-2.5-pro-preview-06-05 2025-06-06 09:27:54 -07:00
Paul Gauthier (aider)
c0509add21 chore: Update gemini alias to use 06-05 model 2025-06-06 06:54:19 -07:00
Paul Gauthier (aider)
77472e5913 feat: Add gemini-2.5-pro-preview-06-05 model settings 2025-06-06 06:53:57 -07:00
paul-gauthier
836aaece4f Merge pull request #4172 from jesstelford/patch-1 2025-06-05 07:51:45 -07:00
Jess Telford
c4fcc5ad70 VSCode Copilot no longer writes out tokens 2025-06-05 16:55:21 +10:00
Paul Gauthier
b259226770 lint 2025-06-03 09:27:57 -07:00
Paul Gauthier
db0f7d158d Merge branch 'main' of github.com:Aider-AI/aider 2025-06-03 09:27:42 -07:00
paul-gauthier
b9a9b4cf61 Merge pull request #4163 from vinnymac/vt/copilot-token-debug 2025-06-03 09:22:51 -07:00
Vincent Taverna
29874f1222 feat: validation and errors for copilot requests 2025-06-03 11:50:37 -04:00
paul-gauthier
7897d027d4 Merge pull request #4161 from lreeves/main
Use system prompt prefix for commit messages
2025-06-03 08:13:57 -07:00
Luke Reeves
09b2d49f11 Use system prompt prefix for commit messages
I've been using Qwen3 with reasoning disabled via a /no_think in the
system prompt prefix. I found that the commit message generation was
ignoring this setting. This change updates the commit message generation
loop to incorporate that setting if defined.
2025-06-03 10:30:42 -04:00
paul-gauthier
295122fc97 Merge pull request #4057 from emmanuel-ferdman/main 2025-06-02 14:03:17 -07:00
paul-gauthier
fa0aa9459b Merge pull request #4156 from stackbuilders/always_pass_extra_headers_to_copilot_models 2025-06-02 07:06:10 -07:00
Sebastian Estrella
c67f6905a5 fix: Always pass extra_headers to Copilot models 2025-06-02 08:39:48 -05:00
paul-gauthier
3266eaca91 Merge pull request #4150 from muravvv/fix_encoding
Fix issues on repositories with non-Unicode encodings
2025-06-01 12:46:17 -07:00
muravvv
bfaad12cac add missing encoding conversion for diff contents 2025-06-01 22:31:43 +03:00
muravvv
395188043b set fixed utf-8 encoding for llm history log 2025-06-01 20:15:51 +03:00
paul-gauthier
484b8a3603 Merge pull request #4146 from ktakayama/issues/4049-commit-language 2025-06-01 05:20:22 -07:00
Kyosuke Takayama
6eaf75f760 test: add test for commit-language option 2025-06-01 19:29:28 +09:00
Kyosuke Takayama
91f34e37f7 docs: add commit-language option to config and documentation files 2025-06-01 19:09:39 +09:00
Kyosuke Takayama
7ffd9c1859 feat: add commit language option for commit message localization 2025-06-01 18:52:38 +09:00
Paul Gauthier (aider)
0bb0f169d2 docs: Add link to release notes 2025-05-30 17:11:21 -07:00
Paul Gauthier
45ad3cdf47 copy 2025-05-30 16:32:21 -07:00
Paul Gauthier
fc30409f74 blame 2025-05-30 16:31:26 -07:00
Paul Gauthier
6d872b6dc0 copy 2025-05-30 16:30:10 -07:00
Paul Gauthier
6fdc956b9e set version to 0.84.1.dev 2025-05-30 16:27:25 -07:00
Paul Gauthier
196721d27d version bump to 0.84.0 2025-05-30 16:27:24 -07:00
Paul Gauthier (aider)
e331a967a6 fix: Update expected OpenRouter costs in tests 2025-05-30 15:57:45 -07:00
Paul Gauthier (aider)
48376e59c2 style: Apply formatting 2025-05-30 15:07:32 -07:00
Paul Gauthier (aider)
52510c7da5 test: Update OpenRouter default model expectations 2025-05-30 15:07:29 -07:00
Paul Gauthier
c24798c44f Merge branch 'main' of github.com:Aider-AI/aider 2025-05-30 14:46:36 -07:00
Paul Gauthier
6085be5883 copy 2025-05-30 14:46:28 -07:00
Paul Gauthier (aider)
05c56fe904 fix: Fix OpenRouter token cost calculation 2025-05-30 14:33:34 -07:00
Paul Gauthier
a7afbd0708 feat: Add claude-opus-4 and update default OpenRouter models 2025-05-30 14:30:10 -07:00
Paul Gauthier (aider)
3f2c403cf0 feat: Add openrouter/anthropic/claude-opus-4 model config 2025-05-30 14:26:50 -07:00
Paul Gauthier
d7504bed21 copy 2025-05-30 14:25:35 -07:00
paul-gauthier
119a44debe Merge pull request #4114 from therealmarv/increase-deepseek-v3-openrouter-context
increase context window of Deepseek V3 to new OpenRouter limits
2025-05-27 13:33:42 -07:00
therealmarv
87dee0a5f2 reduce output tokens again 2025-05-27 23:18:45 +03:00
therealmarv
1d0e463d83 increase context window of Deepseek V3 to new OpenRouter limits 2025-05-27 23:02:11 +03:00
Paul Gauthier
8304029b92 lint 2025-05-26 16:29:28 -07:00
Paul Gauthier
ef2986a231 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-26 16:29:14 -07:00
Paul Gauthier
b79a777936 copy 2025-05-26 16:29:10 -07:00
Paul Gauthier
9c9eedd9c5 chore: Update polyglot leaderboard data for gemini-2.5-flash 2025-05-26 12:18:22 -07:00
paul-gauthier
ebaad9d865 Merge pull request #4092 from noitcudni/main 2025-05-26 10:43:53 -07:00
paul-gauthier
d922023815 Merge pull request #4096 from KennyDizi/main 2025-05-26 10:41:33 -07:00
Paul Gauthier
acebc11237 chore: Update model names in polyglot leaderboard 2025-05-26 08:56:35 -07:00
Paul Gauthier
214b811ef9 chore: Add new polyglot benchmark results 2025-05-26 08:56:01 -07:00
Trung Dinh
de9df51b47 Change max_tokens to 32000 for claude-sonnet-4-20250514 family model 2025-05-26 11:17:50 +07:00
Paul Gauthier
3194a35230 feat: Add Gemini 2.5 Flash model and leaderboard data 2025-05-25 16:00:07 -07:00
Paul Gauthier
a8568c3c4f build: Update website source path in Dockerfile 2025-05-25 15:30:30 -07:00
Paul Gauthier (aider)
114ec42563 feat: Add Claude Opus 4 provider variants to model-settings.yml 2025-05-25 15:03:41 -07:00
Paul Gauthier (aider)
f7df96d224 feat: Add missing Sonnet 4 models to settings 2025-05-25 15:01:43 -07:00
Paul Gauthier
79edb0e1e0 added opus polyglot 2025-05-25 14:57:49 -07:00
Lih Chen
5a0951caaf Refresh Github's open api key automatically 2025-05-25 14:54:03 -07:00
Paul Gauthier (aider)
6b2bcf651e fix: Update expected model name for 'opus' alias test 2025-05-25 13:15:15 -07:00
Paul Gauthier (aider)
fea0ff189f test: Update sonnet model alias test 2025-05-25 13:14:47 -07:00
Paul Gauthier
803a8db60c noop 2025-05-25 12:52:47 -07:00
Paul Gauthier
414b4e3882 feat: Add new Claude models and update aliases 2025-05-25 12:51:45 -07:00
Paul Gauthier (aider)
a17599152f feat: Add Claude Sonnet 4 settings for multiple providers 2025-05-25 12:49:51 -07:00
Paul Gauthier
7b9d8e6ba7 feat: add claude-opus-4-20250514 model settings 2025-05-25 12:49:47 -07:00
Paul Gauthier
9ef3211365 proper pin for configargparse 2025-05-24 15:44:31 -07:00
Paul Gauthier
d9bf69041c Revert "bump deps"
This reverts commit ef3f8bb301.
2025-05-24 15:43:50 -07:00
Paul Gauthier
e3cb907767 claude-sonnet-4-20250514 ex-user 2025-05-24 15:06:57 -07:00
Paul Gauthier
ef3f8bb301 bump deps 2025-05-24 13:33:19 -07:00
Paul Gauthier
03a489ea35 set version to 0.83.3.dev 2025-05-23 16:02:30 -07:00
Paul Gauthier
81389b87d7 version bump to 0.83.2 2025-05-23 16:02:26 -07:00
Paul Gauthier
0d8ff295d6 copy 2025-05-23 15:48:36 -07:00
Paul Gauthier
6176a8dee3 Patch yanked configargparse 1.7 #4072 2025-05-23 15:24:03 -07:00
Paul Gauthier
299e6ae7a2 Revert "bump deps"
This reverts commit cb88b7e62a.
2025-05-23 15:20:40 -07:00
Paul Gauthier
0b1d49d630 Revert "drop pin of torch"
This reverts commit 2b9e669930.
2025-05-23 15:20:27 -07:00
Paul Gauthier
037a36edba Revert "unpin llama-index-core"
This reverts commit 66bc9cf292.
2025-05-23 15:20:13 -07:00
Paul Gauthier
66bc9cf292 unpin llama-index-core 2025-05-23 14:59:09 -07:00
Paul Gauthier
2b9e669930 drop pin of torch 2025-05-23 14:42:09 -07:00
Paul Gauthier
cb88b7e62a bump deps 2025-05-23 14:29:57 -07:00
Paul Gauthier
4e9943f2aa copy 2025-05-23 14:29:42 -07:00
Emmanuel Ferdman
999c292482 fix: display marker on error
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-05-21 17:15:45 -07:00
Paul Gauthier
9f5018e89e YAML -> yaml 2025-05-21 09:58:54 -07:00
Garrett Hopper
59dbce8575 Add Clojure repomap queries 2025-05-15 12:39:23 -05:00
Paul Gauthier (aider)
3caab85931 fix: Mark unused variable in test 2025-05-13 13:44:59 -07:00
Paul Gauthier
756372809e test: Update tests for git integration 2025-05-13 13:44:23 -07:00
Paul Gauthier (aider)
6aa05ab11c style: Format test file 2025-05-13 13:42:04 -07:00
Paul Gauthier (aider)
9cf373039e test: Add test for skipping gitignored files on init 2025-05-13 13:41:58 -07:00
Paul Gauthier (aider)
bc1272f029 fix: base coder not ignoring gitignore if --file is used. 2025-05-13 13:38:18 -07:00
Paul Gauthier
0049e78250 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-12 13:20:59 -07:00
paul-gauthier
56b45ce1d3 Merge pull request #4008 from facelezzzz/main
fix: Fix #3987 Pass the coder object to repo.commit
2025-05-12 09:44:39 -07:00
wangboxue
bdd67eb229 fix: Fix #3987 Pass the coder object to repo.commit 2025-05-12 11:56:39 +08:00
Paul Gauthier (aider)
57020a2d5e test: Assert specific stderr messages for invalid edit format 2025-05-11 08:16:08 -07:00
Paul Gauthier (aider)
6b9045a2a2 fix: Fix F841 unused variable in test 2025-05-11 08:15:19 -07:00
Paul Gauthier (aider)
5f24a0013a test: Fix invalid edit format test assertion 2025-05-11 08:15:03 -07:00
Paul Gauthier (aider)
b79052501d style: Shorten comment to fix E501 2025-05-11 08:13:27 -07:00
Paul Gauthier (aider)
9e0d7d9c46 style: Fix code style in test 2025-05-11 08:13:18 -07:00
Paul Gauthier (aider)
a53ab7d937 fix: Correct test for invalid --edit-format argument 2025-05-11 08:13:11 -07:00
Paul Gauthier
c055602c6f Merge branch 'main' into completions 2025-05-11 08:01:15 -07:00
Paul Gauthier
170e8fc9a1 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-11 08:01:03 -07:00
paul-gauthier
ee177054b8 Merge pull request #3993 from savioursho/file-path-completion
feat: Enable file completion for all file-related arguments
2025-05-11 08:00:49 -07:00
Paul Gauthier
f018b5fab5 include pip in uv installs 2025-05-11 07:56:55 -07:00
savioursho
5a29ba03dc Merge branch 'Aider-AI:main' into file-path-completion 2025-05-11 20:06:30 +09:00
Paul Gauthier (aider)
035d99d3d3 fix: Remove unused import Coder 2025-05-10 19:45:04 -07:00
Paul Gauthier (aider)
702eff1033 refactor: Get edit format choices from coder classes 2025-05-10 19:44:44 -07:00
Paul Gauthier (aider)
97f3885357 chore: Apply linter rules 2025-05-10 19:42:28 -07:00
Paul Gauthier (aider)
f8653613bc feat: Add shell completion for edit format options 2025-05-10 19:42:22 -07:00
Paul Gauthier (aider)
b1d47c47d9 chore: Add shtab file completions to args 2025-05-10 17:56:29 -07:00
Paul Gauthier
2c4a126093 copy 2025-05-10 17:13:36 -07:00
Paul Gauthier (aider)
cdd1546243 docs: Improve GitHub Copilot connection docs tone and structure 2025-05-10 17:12:55 -07:00
Paul Gauthier
6a3bb0f4ec docs: Remove closing line and clarify Copilot billing 2025-05-10 17:12:52 -07:00
Paul Gauthier (aider)
24c0fbd326 docs: Add doc page for GitHub Copilot model access 2025-05-10 17:10:25 -07:00
Paul Gauthier
7b9eae117f docs: Add GitHub LLM docs 2025-05-10 17:10:23 -07:00
Paul Gauthier (aider)
512b4d891b chore: Remove unused imports in test_openrouter.py 2025-05-10 12:57:14 -07:00
Paul Gauthier (aider)
a6b0f43dce chore: Run linter 2025-05-10 12:56:13 -07:00
Paul Gauthier (aider)
e8d9ae9a1f test: add tests for OpenRouter model info handling 2025-05-10 12:56:08 -07:00
Paul Gauthier
2ab0074915 test: Add OpenRouter tests 2025-05-10 12:56:06 -07:00
Paul Gauthier (aider)
225e01717c feat: Show active model metadata in /settings command 2025-05-10 12:54:11 -07:00
Paul Gauthier (aider)
4d39b88110 style: Reorder imports in models.py 2025-05-10 12:50:41 -07:00
Paul Gauthier (aider)
5052150e2e feat: Add local cache for OpenRouter models 2025-05-10 12:50:34 -07:00
Paul Gauthier
d8fbd9cbd3 feat: Add OpenRouter API support 2025-05-10 12:50:32 -07:00
Paul Gauthier
53cda2cc10 set version to 0.83.2.dev 2025-05-10 12:36:47 -07:00
Paul Gauthier
543e5570ae version bump to 0.83.1 2025-05-10 12:36:45 -07:00
Paul Gauthier
62c7e15a36 copy 2025-05-10 12:33:40 -07:00
Paul Gauthier
17a2773a22 refactor: Validate locale language result 2025-05-10 12:28:51 -07:00
Paul Gauthier (aider)
b8758ca791 test: Fix mock for babel.Locale in test_normalize_language 2025-05-10 11:55:03 -07:00
Paul Gauthier (aider)
bf9522a2fb style: Format test file 2025-05-10 11:53:08 -07:00
Paul Gauthier (aider)
ddc8621d6e fix: Correctly normalize hyphenated language codes 2025-05-10 11:53:00 -07:00
Paul Gauthier (aider)
7875de078a fix: Remove unused import/var and fix line length in test 2025-05-10 11:46:49 -07:00
Paul Gauthier (aider)
ea1189b8ec style: Format test_coder.py 2025-05-10 11:46:27 -07:00
Paul Gauthier (aider)
1127b8b559 test: Add tests for user language detection and normalization 2025-05-10 11:46:17 -07:00
Paul Gauthier
64f218a06e ask prompt 2025-05-10 11:43:37 -07:00
Paul Gauthier (aider)
efde8e867e fix: Prevent "Reply in C." instruction for C/POSIX locales 2025-05-10 11:43:35 -07:00
Paul Gauthier
f815f0377e copy 2025-05-10 07:52:39 -07:00
Paul Gauthier (aider)
883aa9e03d docs: Include platform in testimonial link text 2025-05-10 07:45:43 -07:00
Paul Gauthier (aider)
2a410fab81 docs: Add platform/community to kind words in README 2025-05-10 07:24:33 -07:00
Paul Gauthier
34409311a3 chore: Adjust spinner text and spinner timing 2025-05-10 07:21:21 -07:00
Paul Gauthier (aider)
97379aa02f fix: Update Spinner import path 2025-05-10 07:11:08 -07:00
Paul Gauthier (aider)
ee4e9c9711 refactor: Remove unused time import 2025-05-10 07:10:28 -07:00
Paul Gauthier (aider)
7d3c817664 style: apply code formatting 2025-05-10 07:10:19 -07:00
Paul Gauthier (aider)
8c755bf032 refactor: move Spinner class to waiting module 2025-05-10 07:10:12 -07:00
saviour
0b112e948f feat: Enable file completion for all file-related arguments 2025-05-10 21:38:08 +09:00
Paul Gauthier (aider)
c11d21a230 style: apply linter fixes 2025-05-09 18:08:04 -07:00
Paul Gauthier (aider)
a9cb1a9d61 chore: Move commit message spinner into model loop and show model name 2025-05-09 18:07:58 -07:00
Paul Gauthier (aider)
43cd0164e0 style: Apply linter formatting 2025-05-09 18:07:05 -07:00
Paul Gauthier (aider)
49b3f85cc5 feat: Add spinner when generating commit message 2025-05-09 18:07:00 -07:00
Paul Gauthier
3daf7d4df3 copy 2025-05-09 18:04:04 -07:00
Paul Gauthier
3dcb23c193 qwen3 whole official api 2025-05-09 18:03:17 -07:00
Paul Gauthier
cad31b638b copy 2025-05-09 15:57:04 -07:00
Paul Gauthier
7fbe0d25f5 Merge branch 'main' into qwen3 2025-05-09 15:51:55 -07:00
Paul Gauthier
637a31e083 blame 2025-05-09 15:51:13 -07:00
Paul Gauthier
f928ffc3fc set version to 0.83.1.dev 2025-05-09 15:41:07 -07:00
Paul Gauthier
23cb604e6e version bump to 0.83.0 2025-05-09 15:41:04 -07:00
Paul Gauthier
09880ee8f4 qwen3 official 2025-05-09 15:15:41 -07:00
Paul Gauthier
425fb6d7a8 copy 2025-05-09 13:38:17 -07:00
Paul Gauthier
28d87767cd update discord invite link 2025-05-09 13:37:54 -07:00
Paul Gauthier
ed262b8b06 Revert "refactor: Handle KeyboardInterrupt in get_repo_map"
This reverts commit 9d74e8c730.
2025-05-09 10:27:22 -07:00
Paul Gauthier
7f30320566 chore: Disable pretty printing in benchmark I/O 2025-05-09 10:07:21 -07:00
Paul Gauthier (aider)
9d74e8c730 refactor: Handle KeyboardInterrupt in get_repo_map 2025-05-09 10:05:59 -07:00
Paul Gauthier
1b2eeaff56 fix: Ensure cursor is shown on first Ctrl+C 2025-05-09 10:05:56 -07:00
Paul Gauthier (aider)
0632c7a90f chore: reorder imports 2025-05-09 10:04:14 -07:00
Paul Gauthier (aider)
c806f18698 fix: Show cursor on KeyboardInterrupt exit 2025-05-09 10:04:08 -07:00
Paul Gauthier (aider)
91d7fbd659 fix: Catch KeyboardInterrupt in main and end spinner 2025-05-09 09:51:44 -07:00
Paul Gauthier (aider)
fcc85a7ae6 fix: Update test mocks for get_commit_message signature 2025-05-09 09:17:59 -07:00
Paul Gauthier
dbfba029af copy 2025-05-09 09:02:42 -07:00
Paul Gauthier
88fba5f20b bump deps while dropping py3.9 support 2025-05-09 09:01:27 -07:00
Paul Gauthier (aider)
f7a073961c ci: Drop Python 3.9 from CI matrix 2025-05-09 08:59:16 -07:00
Paul Gauthier
f8c154edce drop pinned networx and scipy and therefore py3.9 support #3973 2025-05-09 08:57:08 -07:00
Paul Gauthier (aider)
c6ad5c8cd2 build: Drop support for Python 3.9 2025-05-09 08:56:27 -07:00
Paul Gauthier (aider)
af9ae849bd docs: Add HN testimonial to README 2025-05-09 08:51:44 -07:00
Paul Gauthier
64b4d13880 improve history prompt 2025-05-09 08:29:33 -07:00
Paul Gauthier (aider)
6620141420 chore: Remove plain git log from update-history script 2025-05-09 08:21:52 -07:00
Paul Gauthier
d79bc2c05b refactor: Move blame calculation after line counts 2025-05-09 08:21:50 -07:00
Paul Gauthier
9978f6c51e copy 2025-05-09 08:19:20 -07:00
Paul Gauthier
5be642fbec show repomap token progress 2025-05-09 08:18:31 -07:00
Paul Gauthier (aider)
9f1ef3f49f chore: Display line counts before calling aider 2025-05-09 08:14:02 -07:00
Paul Gauthier
a3562d1d62 feat: Forward script args to aider command 2025-05-09 08:14:00 -07:00
Paul Gauthier (aider)
4e608dbd77 refactor: Use sys.argv instead of argparse for model arg 2025-05-09 08:12:11 -07:00
Paul Gauthier (aider)
3f49acf390 feat: Allow specifying aider model in update-history.py 2025-05-09 08:10:39 -07:00
Paul Gauthier
77deb35022 chore: Add model option to update history script 2025-05-09 08:10:36 -07:00
Paul Gauthier (aider)
1a7960810c style: Fix E501 line length in spinner comments 2025-05-09 06:57:32 -07:00
Paul Gauthier (aider)
766a41d5de style: Apply formatting 2025-05-09 06:57:23 -07:00
Paul Gauthier (aider)
df967e4b41 feat: Clip spinner output to console width 2025-05-09 06:57:18 -07:00
Paul Gauthier (aider)
781ed90653 fix: Clear to end of line when spinner updates 2025-05-09 06:54:10 -07:00
Paul Gauthier (aider)
b9885bb76d refactor: refactor 'Updating repo map' text to constant 2025-05-09 06:53:58 -07:00
Paul Gauthier
11480f6110 chore: Add item name to repo map progress 2025-05-09 06:53:57 -07:00
Paul Gauthier (aider)
2bc9386876 feat: Add optional text param to Spinner.step 2025-05-09 06:50:42 -07:00
Paul Gauthier
04cbe87caa style: Update spinner unicode palette 2025-05-09 06:48:26 -07:00
Paul Gauthier (aider)
4c959f4542 chore: Print messages when verbose in simple_send 2025-05-09 06:21:05 -07:00
Paul Gauthier (aider)
8652fcf86e style: Remove empty lines 2025-05-09 06:17:55 -07:00
Paul Gauthier (aider)
23714d7db6 feat: Add user language instruction to commit prompt 2025-05-09 06:17:49 -07:00
Paul Gauthier (aider)
81b86441fd feat: Hide cursor when spinner is active 2025-05-09 06:01:48 -07:00
Paul Gauthier (aider)
edb3bf84cc chore: Adjust spinner ascii frame width 2025-05-08 19:52:12 -07:00
Paul Gauthier
4d5852a30e chore: Refine ASCII spinner animation 2025-05-08 19:49:19 -07:00
Paul Gauthier (aider)
7a5877ea50 style: Format spinner frames 2025-05-08 19:28:35 -07:00
Paul Gauthier (aider)
52ae22bcf8 Refactor: Update spinner frames definition 2025-05-08 19:28:30 -07:00
Paul Gauthier
4fb2d78011 spinner 2025-05-08 19:21:28 -07:00
Paul Gauthier
c93c22ec98 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-08 17:55:14 -07:00
paul-gauthier
a26a3145ba Merge pull request #3983 from KebobZ/patch-1
Add Qwen3-235B-A22B-Q5_K_M to qwen3_leaderboard.yml
2025-05-08 17:54:39 -07:00
paul-gauthier
055a3d795a Merge pull request #3982 from cantalupo555/main
refactor: Update OpenRouter Gemini 2.5 Pro Exp model ID
2025-05-08 17:53:44 -07:00
Paul Gauthier
2d34b738bc chore: Update waiting spinner 2025-05-08 17:47:41 -07:00
KebobZ
292aa9bded Add Qwen3-235B-A22B-Q5_K_M to qwen3_leaderboard.yml 2025-05-08 17:36:22 -07:00
Paul Gauthier
4e86a82a08 copy 2025-05-08 17:21:48 -07:00
Paul Gauthier (aider)
784ac79da1 style: Apply formatting 2025-05-08 17:17:07 -07:00
Paul Gauthier (aider)
647f556582 refactor: Use str.translate for spinner unicode mapping 2025-05-08 17:17:02 -07:00
Paul Gauthier
aad6838e15 chore: Improve spinner ASCII animation 2025-05-08 17:17:01 -07:00
Paul Gauthier
95cc362c07 fix: Fix spinner backspace calculation 2025-05-08 17:12:28 -07:00
Paul Gauthier (aider)
9ef506dc25 feat: Continue spinner animation across instances 2025-05-08 17:09:43 -07:00
Paul Gauthier
b236e0c801 style: Improve spinner display order and output 2025-05-08 17:08:07 -07:00
Paul Gauthier
c706663841 fix: Ensure spinner ends on stop 2025-05-08 16:32:07 -07:00
cantalupo555
d7e091f315 refactor: Update OpenRouter Gemini 2.5 Pro Exp model ID 2025-05-08 20:32:00 -03:00
Paul Gauthier
37601eb4b7 copy 2025-05-08 16:27:51 -07:00
Paul Gauthier (aider)
a22772b388 style: remove trailing whitespace 2025-05-08 16:06:50 -07:00
Paul Gauthier (aider)
befff1f22e refactor: Centralize spinner logic in BaseCoder 2025-05-08 16:06:44 -07:00
Paul Gauthier
0864a7ca76 refactor: Prune spinner animation frames and char assignments 2025-05-08 16:00:53 -07:00
Paul Gauthier (aider)
01592afac3 fix: Remove unused variables in Spinner 2025-05-08 15:58:04 -07:00
Paul Gauthier
3a5a46253d feat: redesign spinner animation with tail 2025-05-08 15:57:56 -07:00
Paul Gauthier (aider)
5bb891b2bb refactor: Use pre-defined ASCII frames for spinner animation 2025-05-08 15:51:37 -07:00
Paul Gauthier (aider)
18f702b95a refactor: Simplify spinner animation by pre-rendering frames 2025-05-08 15:48:40 -07:00
Paul Gauthier (aider)
e6a35be5b7 style: Run linter 2025-05-08 15:43:52 -07:00
Paul Gauthier (aider)
6351964bcd fix: Make _stop_waiting_spinner a method of Coder 2025-05-08 15:43:03 -07:00
Paul Gauthier (aider)
ede3061fe0 style: Format imports in base_coder.py 2025-05-08 15:42:30 -07:00
Paul Gauthier (aider)
f1121e3b7c feat: add waiting spinner for non-streaming pretty mode 2025-05-08 15:41:43 -07:00
Paul Gauthier
a1cb86dca3 Revert "feat: Enhance spinner with head and trailing effect"
This reverts commit d3931f67ca.
2025-05-08 15:38:34 -07:00
Paul Gauthier
cf1d58745e Revert "style: Run linter"
This reverts commit 540b2519c2.
2025-05-08 15:38:19 -07:00
Paul Gauthier (aider)
98dc8e5d57 fix: Remove unused threading import 2025-05-08 15:33:34 -07:00
Paul Gauthier (aider)
21a05ead4e refactor: Extract WaitingSpinner to its own module 2025-05-08 15:33:19 -07:00
Paul Gauthier
80f78ee85d feat: add waiting module 2025-05-08 15:33:17 -07:00
Paul Gauthier (aider)
540b2519c2 style: Run linter 2025-05-08 15:32:56 -07:00
Paul Gauthier (aider)
d3931f67ca feat: Enhance spinner with head and trailing effect 2025-05-08 15:32:50 -07:00
Paul Gauthier
b6a32d8682 copy 2025-05-08 15:28:45 -07:00
Paul Gauthier (aider)
023e939798 style: Address flake8 errors 2025-05-08 15:15:17 -07:00
Paul Gauthier
38e7f04e60 lint 2025-05-08 15:13:38 -07:00
Paul Gauthier
b40baaceea do codespell the website 2025-05-08 15:12:57 -07:00
Paul Gauthier
ff549cf9ba Merge branch 'main' of github.com:Aider-AI/aider 2025-05-08 15:09:33 -07:00
paul-gauthier
2c1685bb36 Merge pull request #3823 from mdeweerd/pre-commit-wf
ci: add pre-commit.yml for GitHub Actions
2025-05-08 15:09:16 -07:00
Paul Gauthier
2a61494442 copy 2025-05-08 14:55:53 -07:00
Paul Gauthier (aider)
0af5563e77 style: Fix F841 unused variable in tests 2025-05-08 14:44:07 -07:00
Paul Gauthier
c147571b18 feat: add shell-completions option 2025-05-08 14:43:56 -07:00
Paul Gauthier (aider)
311981f4e5 test: Use os.path.samefile for robust read-only file assertion 2025-05-08 14:39:14 -07:00
Paul Gauthier
79923c954b Revert "fix: Preserve original read-only files across symlinks"
This reverts commit c3d4fdb4c1.
2025-05-08 14:35:08 -07:00
Paul Gauthier
0b4430f228 Revert "fix: Preserve original path spelling for read-only files"
This reverts commit 9297ee982d.
2025-05-08 14:34:56 -07:00
Paul Gauthier (aider)
ee9ad75509 style: apply linter fixes 2025-05-08 14:32:08 -07:00
Paul Gauthier (aider)
920b20b17d feat: add --shell-completions arg for shell completion scripts 2025-05-08 14:31:56 -07:00
Paul Gauthier (aider)
9297ee982d fix: Preserve original path spelling for read-only files 2025-05-08 14:30:31 -07:00
Paul Gauthier
1d5c3c3a2b add shtab 2025-05-08 14:30:27 -07:00
Paul Gauthier (aider)
217b45ae88 fix: Set parser.prog for shtab completion compatibility 2025-05-08 14:29:40 -07:00
MDW
1f6f480864 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.
2025-05-08 23:29:38 +02:00
MDW
40a5a88d56 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`
2025-05-08 23:29:18 +02:00
Paul Gauthier (aider)
30097ab859 fix: Exit with status code from main() 2025-05-08 14:29:01 -07:00
MDW
09acfc8147 style(pre-commit): apply python style from pre-commit hooks 2025-05-08 23:28:18 +02:00
Paul Gauthier (aider)
a2ecc5883b feat: add shell completion generation using shtab 2025-05-08 14:28:11 -07:00
MDW
d127d45669 chore: update codespell skip patterns
Update the `skip` patterns in the `pyproject.toml` file to exclude
`tests/fixtures/*` and `aider/website/*`.
2025-05-08 23:27:39 +02:00
MDW
2ebb2103b8 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.
2025-05-08 23:27:34 +02:00
Paul Gauthier (aider)
c3d4fdb4c1 fix: Preserve original read-only files across symlinks 2025-05-08 14:25:14 -07:00
Paul Gauthier
e1ab9cc0ab fix: Correct spinner erasure and update animation 2025-05-08 14:19:26 -07:00
Paul Gauthier (aider)
15317a9f4b style: Run linter and apply fixes 2025-05-08 14:09:38 -07:00
Paul Gauthier (aider)
62dc55dd77 feat: Position cursor on scanner char in spinner animation 2025-05-08 14:09:34 -07:00
Paul Gauthier (aider)
20faadcbd9 style: Apply linter fixes 2025-05-08 14:08:11 -07:00
Paul Gauthier (aider)
8f0fa6684d feat: implement Knight Rider style spinner animation 2025-05-08 14:08:06 -07:00
Paul Gauthier (aider)
7a3805d39f test: add tests for /reset and /drop with cloned coder 2025-05-08 14:02:46 -07:00
Paul Gauthier (aider)
4709a539c6 fix: Preserve original read-only files when cloning Commands 2025-05-08 14:01:28 -07:00
Paul Gauthier
8172125931 copy 2025-05-08 13:52:37 -07:00
Paul Gauthier
b8f9d459fb copy 2025-05-08 13:48:58 -07:00
Paul Gauthier
96bc57167f feat: Improve ask prompt to elide unchanging code 2025-05-08 12:35:10 -07:00
Paul Gauthier
606e27a337 copy 2025-05-08 12:35:02 -07:00
Paul Gauthier (aider)
1d7c56b8c5 chore: Reorder imports in mdstream.py 2025-05-08 12:30:11 -07:00
Paul Gauthier (aider)
6e1327f66d feat: Show spinner while waiting for first stream content 2025-05-08 12:30:06 -07:00
Paul Gauthier
82f33c1220 copy 2025-05-08 12:14:41 -07:00
Paul Gauthier
cd7567fcf6 chore: Refine ask mode prompt instructions 2025-05-08 12:08:14 -07:00
Paul Gauthier
e4274aa4f6 copy 2025-05-08 12:08:05 -07:00
Paul Gauthier
acd7309b78 copy 2025-05-08 11:41:51 -07:00
Paul Gauthier
d5ea078f24 copy 2025-05-08 11:34:42 -07:00
Paul Gauthier
8776830306 copy 2025-05-08 11:32:24 -07:00
Paul Gauthier
43dd9ef8a5 tweak qwen3 settings 2025-05-08 11:32:11 -07:00
Paul Gauthier (aider)
f047b2928b style: Format models.py 2025-05-08 11:31:14 -07:00
Paul Gauthier (aider)
d89d500eab chore: Update default settings for Qwen3 235b model 2025-05-08 11:31:07 -07:00
Paul Gauthier (aider)
35fe1df499 feat: Make leaderboard title configurable and set custom title in post 2025-05-08 11:05:40 -07:00
Paul Gauthier
d32d0b7909 chore: Remove last updated date cog code 2025-05-08 11:05:37 -07:00
Paul Gauthier
0a5c1960b3 cleanup 2025-05-08 11:01:15 -07:00
Paul Gauthier (aider)
eef0051b93 chore: Remove temporary comments 2025-05-08 11:01:03 -07:00
Paul Gauthier
b5cde63b37 initial 2025-05-08 11:00:41 -07:00
Paul Gauthier (aider)
043c42b2b4 feat: Create Qwen3 leaderboard data file 2025-05-08 10:59:49 -07:00
Paul Gauthier (aider)
758fa6f67e feat: Add Qwen3 benchmark blog post with leaderboard table 2025-05-08 10:58:26 -07:00
Paul Gauthier
c2fce2699e feat: Add blog post about Qwen3 2025-05-08 10:58:24 -07:00
Paul Gauthier
328584e5f4 together only on OR 2025-05-08 10:39:09 -07:00
Paul Gauthier
f12395f4d3 together 2025-05-08 10:33:50 -07:00
Paul Gauthier
024c3ed46e Merge branch 'main' into qwen3 2025-05-08 09:54:08 -07:00
Paul Gauthier (aider)
3ed897c665 fix: Correct Columns call count assertions in io tests 2025-05-08 09:43:36 -07:00
Paul Gauthier (aider)
bfcff84b28 fix: Patch rich.columns.Columns where it is used 2025-05-08 09:42:18 -07:00
Paul Gauthier (aider)
4124cee722 test: Fix TestInputOutputFormatFiles method signatures 2025-05-08 09:39:22 -07:00
Paul Gauthier (aider)
d18a9f32bc fix: Fix flaky tests for pretty file list formatting 2025-05-08 09:38:21 -07:00
Paul Gauthier (aider)
aef3863c4a fix: Remove unused import in test_io.py 2025-05-08 09:36:33 -07:00
Paul Gauthier (aider)
f31128706d style: Format test_io.py 2025-05-08 09:36:20 -07:00
Paul Gauthier (aider)
1307215b8f test: Test io.format_files_for_input pretty output 2025-05-08 09:36:15 -07:00
Paul Gauthier (aider)
cb380b423e fix: Use rich Text for filenames in prompt header 2025-05-08 09:34:31 -07:00
Paul Gauthier
86d338c811 no_think 2025-05-08 08:53:38 -07:00
Paul Gauthier
dd3ef07881 copy 2025-05-08 08:13:14 -07:00
Paul Gauthier
69f14ace01 copy 2025-05-08 07:58:01 -07:00
Paul Gauthier (aider)
08220f598c style: Format long line in fetch_openrouter_model_info docstring 2025-05-08 07:49:55 -07:00
Paul Gauthier (aider)
9badb711ff style: Run linter on aider/models.py 2025-05-08 07:49:38 -07:00
Paul Gauthier (aider)
90b5f897f9 feat: Add generic rule for qwen3 235b models with diff and repomap 2025-05-08 07:49:33 -07:00
Paul Gauthier
4a14aeb7d9 copy 2025-05-08 07:35:55 -07:00
Paul Gauthier
fef0f1fa3a cleanup 2025-05-08 07:27:08 -07:00
Paul Gauthier
a39cec8e1d feat: Add model settings for openrouter/qwen/qwen3-235b-a22b 2025-05-08 06:52:41 -07:00
Paul Gauthier
c89ac40f56 fix system_prompt_prefix 2025-05-08 06:50:57 -07:00
Paul Gauthier
114a0e5ab9 feat: Add qwen3 leaderboard data for 32b and 235b models 2025-05-08 06:42:12 -07:00
Paul Gauthier
371c82e5bb Merge branch 'main' into qwen3 2025-05-08 06:41:38 -07:00
Paul Gauthier
71338a679e cleanup 2025-05-08 06:41:36 -07:00
Paul Gauthier
aeaf259021 2.5-pro does not support thinking_budget 2025-05-07 21:16:14 -07:00
Paul Gauthier (aider)
bdec02e290 style: Run linter on base_coder.py 2025-05-07 21:08:37 -07:00
Paul Gauthier (aider)
5090f28151 feat: Track total tokens and use in benchmark stats 2025-05-07 21:08:29 -07:00
Paul Gauthier (aider)
a98b531bcc feat: add prompt_tokens and completion_tokens to results summary 2025-05-07 21:02:00 -07:00
Paul Gauthier
8727ffbe68 feat: Add thinking_tokens to Gemini 2.5 model settings 2025-05-07 20:54:58 -07:00
Paul Gauthier
e7de5382fb feat: Add reasoning_effort to Gemini 2.5 models in model_settings.yml 2025-05-07 20:32:11 -07:00
Paul Gauthier
8956eef339 copy 2025-05-07 20:28:50 -07:00
Paul Gauthier
0c236d0035 except 2025-05-07 20:28:46 -07:00
Paul Gauthier
aaacee5d4d copy 2025-05-07 19:28:02 -07:00
Paul Gauthier
da00455388 Merge branch 'main' into gemini0506 2025-05-07 19:22:36 -07:00
Paul Gauthier
03acee1ed2 copy 2025-05-07 19:19:21 -07:00
Paul Gauthier
4ab8faf21e copy 2025-05-07 18:27:35 -07:00
Paul Gauthier
2f45023f59 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-07 18:23:31 -07:00
Paul Gauthier
1d2818a064 cleanup 2025-05-07 18:23:18 -07:00
paul-gauthier
582da0ee44 Merge pull request #3564 from shladnik/auto_openrouter
OpenRouter models parameters fetching directly from their website
2025-05-07 18:23:02 -07:00
Paul Gauthier
592dea0f8c chore: Update weak model name for gemini to 2.5 flash preview 2025-05-07 18:17:16 -07:00
Paul Gauthier
dd8db78680 feat: Add model settings for openrouter qwen3 models 2025-05-07 18:13:44 -07:00
Paul Gauthier
23ce877bd2 feat: Add Qwen3 235B and 32B leaderboard data 2025-05-07 18:12:13 -07:00
Paul Gauthier
8bb971c15d copy 2025-05-07 18:11:09 -07:00
Paul Gauthier
fe20e528b0 pick up grep-ast 0.9.0 for ml/mli 2025-05-07 18:09:09 -07:00
Paul Gauthier
8dd8fb52f4 copy 2025-05-07 18:08:00 -07:00
paul-gauthier
af9fcdcfa8 Merge pull request #3381 from jkeys089/scraper-main-use-playwright
use playwright if available when invoking scraper via cli
2025-05-07 17:30:59 -07:00
paul-gauthier
9990965e82 Merge pull request #3679 from andreypopp/main
feat: add repomap support for ocaml/ocaml_interface
2025-05-07 17:29:47 -07:00
Paul Gauthier
5b52063446 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-07 17:27:04 -07:00
paul-gauthier
b2e3d47d14 Merge pull request #3806 from ei-grad/disable-playwright
feat: Add --disable-playwright flag to prevent Playwright installation and prompts
2025-05-07 17:26:00 -07:00
Paul Gauthier
67cbda3bd5 docs: Explain --attribute-co-authored-by and its interaction 2025-05-07 17:25:29 -07:00
Paul Gauthier
84d6cf937b chore: Mark Gemini 2.5 Pro previews as overeager 2025-05-07 17:13:36 -07:00
Paul Gauthier (aider)
765ac2a14d Feat: Add gemini-2.5-pro-preview-05-06 model entries 2025-05-07 17:11:03 -07:00
Paul Gauthier
1167700a53 copy 2025-05-07 17:09:05 -07:00
paul-gauthier
c6954f9972 Merge pull request #3789 from ei-grad/attribute-co-authored-by
feat: Add Co-authored-by attribution for AI commits
2025-05-07 16:54:46 -07:00
Paul Gauthier
c72e5fcc5e feat: Improve history, faq, and linter tests for Windows and special chars 2025-05-07 16:53:18 -07:00
Paul Gauthier
4ec075d290 copy 2025-05-07 16:44:40 -07:00
Paul Gauthier
60a1a3a8c8 drop pip, bump deps 2025-05-07 16:44:15 -07:00
Paul Gauthier
bf38754846 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-07 16:33:10 -07:00
Paul Gauthier
94197cb25d feat: Add model settings for openrouter/google/gemini-2.5-pro-preview-03-25 2025-05-07 16:32:57 -07:00
paul-gauthier
cbaaf96324 Merge pull request #3869 from titusz/fix/shlex
Fix shlex.quote() use in linter on Windows
2025-05-07 16:23:53 -07:00
Paul Gauthier
96899a140b bump deps 2025-05-07 16:19:19 -07:00
Paul Gauthier (aider)
c756b080e8 style: Run linter on aider/models.py 2025-05-07 16:07:23 -07:00
Paul Gauthier (aider)
a61fb1e23b refactor: Move OpenRouter reasoning params to extra_body 2025-05-07 16:07:19 -07:00
Paul Gauthier (aider)
9660d95ceb feat: Support thinking_tokens and reasoning_effort for OpenRouter models 2025-05-07 16:04:57 -07:00
Paul Gauthier
eabc98b64a copy 2025-05-07 13:57:24 -07:00
Paul Gauthier
5ff3d1a0c5 feat: Update Gemini model aliases to 05-06 preview 2025-05-07 13:40:40 -07:00
Paul Gauthier
b6587de389 chore: Update polyglot leaderboard data 2025-05-07 13:38:50 -07:00
Paul Gauthier
4d9f4e0202 copy 2025-05-07 13:31:40 -07:00
Paul Gauthier
e9d2f527a1 copy 2025-05-07 13:27:13 -07:00
Paul Gauthier
98e6939c48 copy 2025-05-07 13:12:28 -07:00
Paul Gauthier
e3911f8621 copy 2025-05-07 13:08:08 -07:00
Paul Gauthier
efd5f79368 copy 2025-05-07 13:07:06 -07:00
Paul Gauthier
8e84b5c0b1 cleanup 2025-05-07 13:06:04 -07:00
Paul Gauthier
c1dc473ed8 copy 2025-05-07 12:59:57 -07:00
Paul Gauthier
3b08327792 copy 2025-05-07 12:29:44 -07:00
Paul Gauthier (aider)
8b08c5a5f3 fix: Replace placeholders with UTC timestamps in gemini-pricing.md 2025-05-07 12:24:49 -07:00
Paul Gauthier
eedea62ac1 docs: Explain Gemini 2.5 Pro Preview 0325 benchmark pricing error 2025-05-07 12:24:49 -07:00
Paul Gauthier
146f62abcc copy 2025-05-07 12:04:06 -07:00
Paul Gauthier
1c854f2e83 Merge branch 'main' into pricing 2025-05-07 11:54:29 -07:00
Paul Gauthier
d27bb56cf3 try to use litellm.completion_cost 2025-05-07 11:18:19 -07:00
Paul Gauthier
28aeb17cbe copy 2025-05-07 10:07:16 -07:00
Paul Gauthier
b3cf318c5e copy 2025-05-07 09:47:52 -07:00
Paul Gauthier (aider)
4acf65fcfb docs: Link commit hashes to aider and litellm github repos 2025-05-07 09:28:53 -07:00
Paul Gauthier
4c871c6f50 docs: Audit gemini pricing in 0325 benchmark results 2025-05-07 09:28:52 -07:00
Paul Gauthier
d56ce3ae56 copy 2025-05-07 09:17:29 -07:00
Paul Gauthier
5225d7f50c Merge branch 'main' into pricing 2025-05-07 09:11:52 -07:00
Paul Gauthier
41392a1c6e copy 2025-05-07 09:11:48 -07:00
Paul Gauthier (aider)
ca714157b8 fix: Correct typo in gemini pricing post 2025-05-07 09:09:14 -07:00
Paul Gauthier (aider)
9dd2d2a3b1 fix: Update timeline to show UTC time and original timestamp 2025-05-07 09:09:12 -07:00
Paul Gauthier
e53f2f7674 docs: Add post about Gemini pricing 2025-05-07 09:09:11 -07:00
Paul Gauthier
edbfec0ce4 copy 2025-05-07 07:42:25 -07:00
Paul Gauthier
d294e8cd49 add gemini-2.5-pro-preview-05-06 2025-05-07 07:41:51 -07:00
Paul Gauthier
2229bb9817 copy 2025-05-07 07:41:23 -07:00
Titusz
7ef7b6e042 Merge branch 'main' into fix/shlex 2025-05-07 09:28:15 +02:00
Paul Gauthier
8159cbf7d3 set version to 0.82.4.dev 2025-05-05 20:23:46 -07:00
Paul Gauthier
c23e609902 version bump to 0.82.3 2025-05-05 20:23:43 -07:00
Paul Gauthier
2d9ea25273 fix: Add newline after "Reply in {user_lang}" reminder 2025-05-05 19:17:36 -07:00
Paul Gauthier
7773bbc908 copy 2025-05-05 19:13:49 -07:00
Paul Gauthier
72476f0967 bump deps 2025-05-05 19:05:11 -07:00
Paul Gauthier
a9883ccc25 copy 2025-05-05 19:03:32 -07:00
Paul Gauthier
3b9b93a8a4 Merge branch 'main' of github.com:Aider-AI/aider 2025-05-05 19:03:07 -07:00
Paul Gauthier
f90b7bfb09 better 2025-05-05 19:02:43 -07:00
Titusz
edc941eb9e Merge branch 'main' into fix/shlex 2025-05-04 13:11:19 +02:00
paul-gauthier
5e7ef6c50e Merge pull request #3931 from elohmeier/main 2025-05-02 07:21:29 -07:00
Enno Richter
fdc7be1318 docs: update lint/test pre-commit shell script example to use "$@" for proper argument handling 2025-05-02 05:49:02 +02:00
paul-gauthier
f00c1bf61b Merge pull request #3930 from erykwieliczko/main 2025-05-01 20:03:17 -07:00
Eryk Wieliczko
09030de0b5 Show dates on "Release history" chart 2025-05-02 04:38:38 +02:00
Paul Gauthier
bdba0ca1c5 refactor: Move shell command prompts to shell.py, add final reminders 2025-05-01 17:31:22 -07:00
Paul Gauthier (aider)
e17c7d938c refactor: add normalize_language and improve get_user_language to return readable names 2025-05-01 17:29:14 -07:00
Paul Gauthier (aider)
433f2908a0 feat: add language normalization to convert locale codes to names using Babel or fallback map 2025-05-01 17:28:56 -07:00
Paul Gauthier
9fa5f5ace1 refactor: remove redundant dump call from prompt formatting in base_coder.py 2025-05-01 17:28:55 -07:00
Paul Gauthier
849a379a8c refactor: Move lazy/overeager prompts to final reminders in system prompt 2025-05-01 17:24:14 -07:00
Vasil Markoukin (aider)
98ee78edf0 feat: add configurable PostHog host and API key parameters 2025-04-30 14:46:54 +03:00
Paul Gauthier
e205629a94 Merge branch 'main' of github.com:Aider-AI/aider 2025-04-28 07:53:31 -07:00
Paul Gauthier
9351f37935 add google-generativeai, bump deps 2025-04-28 07:53:20 -07:00
paul-gauthier
7d185bb710 Merge pull request #3898 from acro5piano/main
fix: add suffix "md" when opening editor in InputOutput class
2025-04-27 06:59:11 -07:00
Kay Gosho
07759813ed fix: add suffix "md" when opening editor in InputOutput class 2025-04-27 16:06:32 +09:00
Paul Gauthier
591d294052 feat: Print changed file path and check before reading content 2025-04-25 07:58:51 -07:00
Paul Gauthier (aider)
df1a0c5b8d style: Apply linter to aider/watch.py 2025-04-25 07:54:35 -07:00
Paul Gauthier (aider)
e743394537 feat: Skip scanning files larger than 1MB for AI comments 2025-04-25 07:54:32 -07:00
Paul Gauthier
22f140ac05 feat: Add common file patterns to default gitignore spec 2025-04-25 07:54:31 -07:00
Paul Gauthier (aider)
25a303935c fix: Add overeager setting to Gemini 2.5 Pro models in model-settings.yml 2025-04-24 19:51:35 -07:00
Paul Gauthier (aider)
3bf20d4f7a feat: Set gemini 2.5 pro models to overeager: true 2025-04-24 19:51:14 -07:00
Paul Gauthier
45413ce815 copy 2025-04-24 07:18:35 -07:00
Titusz Pan
8ffe466257 Replace shlex with cross-platform oslex - fixes Aider-AI/aider#3746 2025-04-23 14:40:43 +02:00
Titusz Pan
d9aa3cb2d4 Replace shlex with cross-platform oslex 2025-04-23 14:33:01 +02:00
Titusz Pan
5251a2452c Add test to reproduce linting failure on windows 2025-04-23 14:18:23 +02:00
Titusz Pan
6df2c1595f fix: remove branch filter from Windows tests workflow 2025-04-23 11:20:08 +02:00
Paul Gauthier
c56e4a08d3 copy 2025-04-20 19:53:32 -07:00
Paul Gauthier (aider)
80515b69c1 fix: Strip b/ prefix when a path is /dev/null in diffs 2025-04-20 17:34:36 -07:00
Paul Gauthier
303645cffa copy 2025-04-20 17:30:06 -07:00
Paul Gauthier
b3d32f65d3 fixed quote 2025-04-20 17:29:42 -07:00
Paul Gauthier
7c0aac7454 chore: Update Gemini flash model alias to preview version 2025-04-20 16:43:35 -07:00
Paul Gauthier
7719eae023 copy 2025-04-20 16:41:58 -07:00
Paul Gauthier
5e210c700d fix: Handle filenames starting with fences or triple backticks correctly 2025-04-20 16:36:36 -07:00
Paul Gauthier (aider)
c6ce871700 style: Apply linter to editblock_coder.py 2025-04-20 16:25:59 -07:00
Paul Gauthier (aider)
f28504a2eb fix: Properly handle filenames starting with triple backticks 2025-04-20 16:25:55 -07:00
Paul Gauthier
48733a315b fix: Handle filenames starting with fence chars in editblock coder 2025-04-20 16:25:54 -07:00
Paul Gauthier (aider)
16fbff8de1 Feat: Add gemini-2.5-flash-preview-04-17 as editor/weak model name 2025-04-20 16:04:04 -07:00
Paul Gauthier (aider)
bbab0cea5e feat: Add model settings for gemini-2.5-flash-preview-04-17 models 2025-04-20 16:01:03 -07:00
Paul Gauthier
19de93ae39 fix: Update weak model name for gemini-2.5-pro-exp-03-25 2025-04-20 15:58:54 -07:00
Paul Gauthier
230e5065c1 feat: Add gemini-2.5-flash-preview-04-17 model and leaderboard entry 2025-04-20 15:47:34 -07:00
Paul Gauthier
c94340d493 less ram 2025-04-20 13:18:57 -07:00
Paul Gauthier
ac1ff231e0 better prompt 2025-04-20 12:38:09 -07:00
Paul Gauthier (aider)
5423ffe518 feat: Add UnifiedDiffSimpleCoder to coders module 2025-04-20 11:34:10 -07:00
Paul Gauthier (aider)
ba4d613cbc feat: Give udiff-simple its own prompts, inheriting from udiff prompts 2025-04-20 11:32:42 -07:00
Paul Gauthier
ab11118c8a feat: Add simple prompts for unified diff coder 2025-04-20 11:32:41 -07:00
Paul Gauthier (aider)
3ca3f39f1d feat: Add UnifiedDiffSimpleCoder with simpler prompt for code edits 2025-04-20 11:31:55 -07:00
Paul Gauthier
8c3f167e8c feat: Add simple unified diff coder 2025-04-20 11:31:55 -07:00
Paul Gauthier (aider)
1a4d3927e7 feat: Add --thinking-tokens option to benchmark script 2025-04-20 11:29:33 -07:00
Paul Gauthier
20a29e5cd1 copy 2025-04-20 11:12:54 -07:00
Paul Gauthier
51e0fff822 cleanup metadata that is now in litellm 2025-04-20 11:12:20 -07:00
Paul Gauthier (aider)
13b3e75d0e style: Apply linting to clean_metadata.py 2025-04-20 11:11:01 -07:00
Paul Gauthier (aider)
de28178369 feat: Add dummy key to JSON dumps for diffing, then remove it. 2025-04-20 11:10:58 -07:00
Paul Gauthier (aider)
2f38cd184c style: Format clean_metadata.py with black linter 2025-04-20 11:08:57 -07:00
Paul Gauthier (aider)
d8caa76bc8 feat: Compare dicts directly to avoid spurious diffs in metadata cleaning 2025-04-20 11:08:53 -07:00
Paul Gauthier (aider)
506c3c928e refactor: Remove unused variable in find_block_lines function 2025-04-20 11:06:20 -07:00
Paul Gauthier (aider)
48ac1de8d3 fix: Remove unused variables and fix whitespace in clean_metadata.py 2025-04-20 11:05:56 -07:00
Paul Gauthier (aider)
ebfce5b0f2 style: Run linter on clean_metadata.py 2025-04-20 11:05:39 -07:00
Paul Gauthier (aider)
58f4db4e52 feat: Implement surgical removal of JSON blocks from metadata file 2025-04-20 11:05:36 -07:00
Paul Gauthier
ba2c4d1eb7 chore: Make clean_metadata.py executable 2025-04-20 11:05:35 -07:00
Paul Gauthier (aider)
6656b5d973 style: Apply linting to clean_metadata.py 2025-04-20 11:03:44 -07:00
Paul Gauthier (aider)
b4673fdc85 Refactor: Remove keys immediately in clean_metadata.py 2025-04-20 11:03:41 -07:00
Paul Gauthier (aider)
ce1266be68 style: Run linter on clean_metadata.py 2025-04-20 11:02:40 -07:00
Paul Gauthier (aider)
226108d05d feat: Prompt user to remove entries from model-metadata.json 2025-04-20 11:02:37 -07:00
Paul Gauthier (aider)
b2d541f1eb style: Fix line length in clean_metadata.py for flake8 compliance 2025-04-20 11:02:00 -07:00
Paul Gauthier (aider)
758020c574 fix: Flip diff order to be from aider -> litellm in script 2025-04-20 11:01:40 -07:00
Paul Gauthier (aider)
876569613b style: Apply linting to clean_metadata.py 2025-04-20 11:00:52 -07:00
Paul Gauthier (aider)
82b26daf37 feat: display matching entries side-by-side with diff highlighting 2025-04-20 11:00:49 -07:00
Paul Gauthier (aider)
be44b65095 style: Apply linting to clean_metadata.py 2025-04-20 11:00:03 -07:00
Paul Gauthier (aider)
8596f0d4a3 feat: Use json5 to load model metadata for lenient parsing 2025-04-20 11:00:00 -07:00
Paul Gauthier
19a94e5f15 fix: Update litellm_path to correctly locate JSON file 2025-04-20 10:59:59 -07:00
Paul Gauthier (aider)
7bde345b83 feat: Add script to find common models in metadata files. 2025-04-20 10:58:38 -07:00
Paul Gauthier
d45a5747ea feat: Add script to clean metadata from files 2025-04-20 10:58:37 -07:00
Paul Gauthier
e560ab61b6 copy 2025-04-20 10:48:39 -07:00
Paul Gauthier
84c3ac93ef copy 2025-04-20 10:37:14 -07:00
Paul Gauthier (aider)
7a50b7779a docs: Update boto3 install instructions for Bedrock 2025-04-20 10:34:13 -07:00
Paul Gauthier
328a3c3178 docs: Improve Amazon Bedrock setup instructions 2025-04-20 10:34:12 -07:00
Paul Gauthier (aider)
21fa54d792 Refactor: Update LLM docs to match gemini.md structure 2025-04-20 10:28:01 -07:00
Paul Gauthier
ec7ac60cfc copy 2025-04-20 08:54:44 -07:00
Paul Gauthier
c2d8d5dc82 set version to 0.82.3.dev 2025-04-20 08:26:25 -07:00
Paul Gauthier
20a7e3552c version bump to 0.82.2 2025-04-20 08:26:22 -07:00
Paul Gauthier
888168f044 copy 2025-04-20 08:21:33 -07:00
Paul Gauthier
851642a1bd copy 2025-04-20 08:13:04 -07:00
Paul Gauthier
f7bdebfba9 Merge branch 'main' of github.com:Aider-AI/aider 2025-04-19 18:50:34 -07:00
Paul Gauthier
a4d3222108 feat: Add openhands-lm-32b-v0.1 to polyglot leaderboard data 2025-04-19 11:27:50 -07:00
paul-gauthier
f1caab9de0 Merge pull request #3828 from zjy1412/main
fix: correctly detect edit blocks in diff-fenced mode
2025-04-19 10:03:31 -07:00
Paul Gauthier (aider)
c08336fdb0 feat: Update prompts to request one block per file in patches 2025-04-17 20:23:16 -07:00
Paul Gauthier (aider)
541b496d09 feat: Allow multiple update/delete actions for the same file in patch coder 2025-04-17 20:19:52 -07:00
Paul Gauthier
622bf349c5 chore: Add num_ctx and sleep to run_test_threaded.gather arguments 2025-04-17 20:08:57 -07:00
Paul Gauthier (aider)
05eaf82b36 feat: Pass verbose flag to Model class for detailed output 2025-04-17 20:02:31 -07:00
Paul Gauthier (aider)
5c8150fd16 fix: Change reasoning_effort type to string in benchmark script 2025-04-17 20:02:09 -07:00
Paul Gauthier (aider)
ec9327dcb4 style: Apply linter to benchmark.py 2025-04-17 20:01:30 -07:00
Paul Gauthier (aider)
8e689d35af Feat: Add --reasoning-effort switch to benchmark script 2025-04-17 20:01:26 -07:00
Paul Gauthier
50fd544070 Merge branch 'main' of github.com:Aider-AI/aider 2025-04-17 13:26:06 -07:00
paul-gauthier
4f8bd2e06d Merge pull request #3831 from VariousForks/main
docs: update editor usage instructions in multi-line guide
2025-04-17 11:46:57 -07:00
Greg OmniMind
6f1b6f5f31 docs: update editor usage instructions in multi-line guide
* Added keybinding `Ctrl-X Ctrl-E` for invoking editor via terminal compatibility.
* Enhances user ergonomics for terminals supporting this shortcut, streamlining workflow.
* Maintains reference to editor configuration documentation.
2025-04-17 20:42:34 +02:00
Paul Gauthier
bdfda399cb copy 2025-04-17 09:29:35 -07:00
Paul Gauthier
a08ffc3513 scale 2025-04-17 09:28:07 -07:00
Paul Gauthier
21beee2fe1 Merge branch 'arch-o3-41' 2025-04-17 08:29:47 -07:00
zjy1412
a564f94bf3 Added two test cases 2025-04-17 16:50:54 +08:00
zjy1412
9e54898866 fix: correctly detect edit blocks in diff-fenced mode 2025-04-17 14:30:13 +08:00
Paul Gauthier
739e01da95 copy 2025-04-16 19:10:24 -07:00
Paul Gauthier
3e0af2cc84 copy 2025-04-16 19:04:13 -07:00
Paul Gauthier
9ff13740f2 Merge branch 'main' into arch-o3-41 2025-04-16 19:02:45 -07:00
Paul Gauthier
00e5c33444 copy 2025-04-16 19:02:19 -07:00
Paul Gauthier
57abaf7500 add o3+4.1 2025-04-16 19:02:09 -07:00
Paul Gauthier (aider)
ed14be4e70 refactor: Use constant for max display cost cap in leaderboard table 2025-04-16 19:00:18 -07:00
Paul Gauthier
80909e17c7 set version to 0.82.2.dev 2025-04-16 18:16:55 -07:00
Paul Gauthier
52697ea884 version bump to 0.82.1 2025-04-16 18:16:52 -07:00
Paul Gauthier
9f01c8d0d6 no stream main o3 2025-04-16 18:16:33 -07:00
Paul Gauthier
e91d7e74ae copy 2025-04-16 18:12:22 -07:00
Paul Gauthier
20ca0463ea feat: Disable streaming for o3 models due to token issue 2025-04-16 18:12:04 -07:00
Paul Gauthier
5e40f469bf copy 2025-04-16 18:10:15 -07:00
Paul Gauthier
7f28d63c33 add o4-mini (high) 2025-04-16 17:24:55 -07:00
Paul Gauthier (aider)
bb1fa24971 feat: Add o4-mini model settings for openai, openrouter, and azure 2025-04-16 17:24:14 -07:00
Paul Gauthier
ffbbaa06d7 chore: Comment out reasoning_effort extra_params 2025-04-16 17:24:13 -07:00
Paul Gauthier (aider)
14e1b96f05 feat: Add azure/gpt-4.1-mini and azure/gpt-4.1 models 2025-04-16 15:45:41 -07:00
Paul Gauthier (aider)
d8c781b66b Feat: Add azure/o3 model settings 2025-04-16 15:44:57 -07:00
Paul Gauthier
2fbec8545c feat: Enable examples_as_sys_msg and set reasoning_effort to high 2025-04-16 15:44:56 -07:00
Paul Gauthier (aider)
b66901fc75 Feat: Add openai/o3 and openrouter/openai/o3 model settings 2025-04-16 15:00:43 -07:00
Paul Gauthier
d569bca520 cleanup 2025-04-16 15:00:32 -07:00
Paul Gauthier
efbefc669f add o3 2025-04-16 14:58:04 -07:00
Paul Gauthier (aider)
24805ff85d fix: Use $10 increments for cost ticks in leaderboard table 2025-04-14 22:02:11 -07:00
Paul Gauthier (aider)
8b917d5716 Refactor: Swap Select and Detail tabs in leaderboard UI 2025-04-14 21:27:45 -07:00
Paul Gauthier (aider)
3502f335ec style: Apply linter to udiff_coder.py 2025-04-14 21:27:10 -07:00
Paul Gauthier (aider)
758979e4f3 fix: Handle git diff prefixes in udiff file paths correctly 2025-04-14 21:27:06 -07:00
Paul Gauthier
8b5fc801da fix: Extract correct filename from unified diff hunk 2025-04-14 21:27:05 -07:00
Paul Gauthier
f5c4214c93 copy 2025-04-14 16:46:57 -07:00
Andrew Grigorev
f106993cd1 fix: add --disable-playwright option to suppress Playwright prompts and usage
Co-authored-by: aider (openai/gpt-4.1) <noreply@aider.chat>
2025-04-15 02:35:25 +03:00
Paul Gauthier
270e84287a copy 2025-04-14 16:32:26 -07:00
Paul Gauthier
daec7cf3f4 set version to 0.82.1.dev 2025-04-14 16:24:22 -07:00
Paul Gauthier
bb42d1e9a5 version bump to 0.82.0 2025-04-14 16:24:19 -07:00
Paul Gauthier (aider)
23f182aab3 feat: Dynamically adjust cost scale and ticks based on visible entries 2025-04-14 16:16:14 -07:00
Paul Gauthier
119fbc995c add gpt-4.1-nano 2025-04-14 16:00:42 -07:00
Paul Gauthier
3081f49179 copy 2025-04-14 15:52:10 -07:00
Paul Gauthier
8cf1874453 added gpt-4.1 and mini 2025-04-14 15:52:06 -07:00
Paul Gauthier (aider)
31b4bd5bcf feat: Apply generic settings for gpt-4.1 and gpt-4.1-mini models 2025-04-14 15:47:01 -07:00
Paul Gauthier
71d1591cc1 cleanup 2025-04-14 15:43:45 -07:00
Paul Gauthier (aider)
134a2d60fe style: Apply linter to patch_flex_coder.py 2025-04-14 15:35:39 -07:00
Paul Gauthier (aider)
152b8912ae refactor: Adapt PatchFlexCoder to use (path, ParsedEdit) tuples 2025-04-14 15:35:35 -07:00
Paul Gauthier (aider)
36f23c101d feat: Add PatchFlexCoder to coders init 2025-04-14 15:33:30 -07:00
Paul Gauthier (aider)
0e40510295 fix: Shorten long comment line in patch_flex_coder.py 2025-04-14 15:32:32 -07:00
Paul Gauthier (aider)
db0d0768d7 style: Remove unused import and reorder imports 2025-04-14 15:32:26 -07:00
Paul Gauthier (aider)
c68cade9f2 Refactor: Use do_replace in PatchFlexCoder instead of flexible_search 2025-04-14 15:32:22 -07:00
Paul Gauthier (aider)
14928727eb refactor: Remove unused remap arg and editblock_strategies var 2025-04-14 15:31:07 -07:00
Paul Gauthier (aider)
67b9345929 fix: Address linting errors in patch_coder and search_replace 2025-04-14 15:30:56 -07:00
Paul Gauthier (aider)
dae1a376a2 fix: Shorten comment to avoid exceeding line length limit. 2025-04-14 15:30:02 -07:00
Paul Gauthier (aider)
1e359f1dcf fix: Improve error message for invalid add file line in diff 2025-04-14 15:29:50 -07:00
Paul Gauthier (aider)
1c54857422 fix: Improve handling of interleaved +/- lines in patch parsing 2025-04-14 15:29:46 -07:00
Paul Gauthier (aider)
0f78a0ac5c style: Fix linting errors in patch_flex_coder.py 2025-04-14 15:29:30 -07:00
Paul Gauthier (aider)
4e1e77890b style: Run linter on patch_flex_coder.py 2025-04-14 15:29:14 -07:00
Paul Gauthier (aider)
5573cdfba1 feat: Create PatchFlexCoder using flexible search and replace for updates 2025-04-14 15:29:10 -07:00
Paul Gauthier
14028d3758 copy 2025-04-14 15:22:22 -07:00
Paul Gauthier
3ab673b398 copy 2025-04-14 15:17:10 -07:00
Paul Gauthier (aider)
861f51f6c3 fix: Define EditResult after PatchAction to resolve flake8 error 2025-04-14 15:08:41 -07:00
Paul Gauthier (aider)
64f5d0d388 refactor: Adapt PatchCoder to return List[Tuple[str, PatchAction]] 2025-04-14 15:08:28 -07:00
Paul Gauthier (aider)
9059af8d5f style: Reorder imports in aider/coders/__init__.py 2025-04-14 15:02:28 -07:00
Paul Gauthier (aider)
c3a543b99d feat: Add PatchCoder to the list of available coders 2025-04-14 15:02:25 -07:00
Paul Gauthier (aider)
c85cd783e5 feat: Use PatchPrompts class in PatchCoder 2025-04-14 15:01:36 -07:00
Paul Gauthier (aider)
af2d241c99 feat: Connect PatchCoder with PatchPrompts 2025-04-14 15:01:22 -07:00
Paul Gauthier (aider)
30839a5273 style: Run linter on patch_prompts.py 2025-04-14 14:58:50 -07:00
Paul Gauthier (aider)
8baa99b7ef refactor: Update PatchPrompts to use V4A diff format 2025-04-14 14:58:46 -07:00
Paul Gauthier
d1e5572343 feat: Add patch prompts for aider coders 2025-04-14 14:52:03 -07:00
Paul Gauthier (aider)
96aa648e17 chore: Fix linting issues: remove unused import, shorten long lines 2025-04-14 14:45:24 -07:00
Paul Gauthier (aider)
1ae5f23dc8 style: Run linter on patch_coder.py 2025-04-14 14:45:14 -07:00
Paul Gauthier (aider)
f565f72679 refactor: Integrate core logic from apply_patch.py into PatchCoder 2025-04-14 14:45:09 -07:00
Paul Gauthier (aider)
78e76648d0 feat: Add openai/gpt-4.1-mini and openrouter/openai/gpt-4.1-mini models 2025-04-14 14:42:20 -07:00
Paul Gauthier
8e1e2210dd feat: Add model settings for gpt-4.1-mini 2025-04-14 14:42:20 -07:00
Paul Gauthier (aider)
e8c43c36d7 fix: Shorten long comment line in patch_coder.py 2025-04-14 14:37:03 -07:00
Paul Gauthier (aider)
97e2a7bae0 fix: Correct spacing in patch_coder.py for accurate matching 2025-04-14 14:36:54 -07:00
Paul Gauthier (aider)
6b75a578ac style: Fix linting errors in patch_coder.py 2025-04-14 14:36:42 -07:00
Paul Gauthier (aider)
8b9238ebc9 style: Run linter on patch_coder.py 2025-04-14 14:36:27 -07:00
Paul Gauthier (aider)
8cc8027b40 feat: Create PatchCoder for applying patch-formatted code edits 2025-04-14 14:36:24 -07:00
Paul Gauthier (aider)
ffb743e108 feat: Add openai/gpt-4.1 and openrouter/openai/gpt-4.1 model settings 2025-04-14 14:26:48 -07:00
Paul Gauthier
0f805752d3 feat: Add gpt-4.1 model settings 2025-04-14 14:26:18 -07:00
Paul Gauthier (aider)
4e9de4d51b style: Add margin below leaderboard title for better spacing 2025-04-14 14:08:52 -07:00
Paul Gauthier (aider)
a4e9539040 feat: Dynamically update leaderboard title based on view mode 2025-04-14 14:04:35 -07:00
Paul Gauthier
0c383dfb11 copy 2025-04-13 13:55:34 -07:00
Paul Gauthier (aider)
11d2b7ca98 style: Adjust tear line height and position in leaderboard table 2025-04-13 13:54:37 -07:00
Paul Gauthier (aider)
e38be2f280 feat: Add dashed tear line to leaderboard bar transition 2025-04-13 13:54:03 -07:00
Paul Gauthier (aider)
febdd3c0d0 style: Extend striped cap on leaderboard bars to 15% 2025-04-13 13:52:32 -07:00
Paul Gauthier (aider)
0b08ca64a8 feat: Add diagonal stripes to large cost bars for hazard pattern 2025-04-13 13:50:59 -07:00
Paul Gauthier (aider)
0f8e7fbd34 feat: Remove cost bar tear line, keep dark end cap 2025-04-13 13:44:23 -07:00
Paul Gauthier (aider)
1a080ba71c feat: Remove numeric labels below cost bars in leaderboard table 2025-04-13 13:43:32 -07:00
Paul Gauthier (aider)
1622531d85 feat: Remove cost exceeded marker from leaderboard table 2025-04-13 13:42:35 -07:00
Paul Gauthier
7d0a9c7233 fix: Adjust cost tear marker position in leaderboards 2025-04-13 13:42:34 -07:00
Paul Gauthier (aider)
53a64c88ad feat: Color the cost bar past the tear marker darker blue 2025-04-13 13:37:56 -07:00
Paul Gauthier (aider)
27b51d51d8 feat: Draw tear across cost bar for exceeded costs on leaderboard 2025-04-13 13:37:01 -07:00
Paul Gauthier
bec35e0538 docs: Shorten "Cost (max $50)" to "Cost" in leaderboards table header 2025-04-13 13:37:00 -07:00
Paul Gauthier (aider)
f65e6a3bb1 feat: Limit cost bar to $50, mark bars exceeding, add tick labels 2025-04-13 13:35:47 -07:00
Paul Gauthier (aider)
fd94f1a5f9 fix: Remove log scale from leaderboard cost column header 2025-04-13 13:34:11 -07:00
Paul Gauthier (aider)
09fc037d4d feat: stop using log-scale for costs on the leaderboard 2025-04-13 13:34:06 -07:00
Paul Gauthier (aider)
cf0e6dac61 style: Set height on table rows instead of min-height on cells 2025-04-13 12:44:02 -07:00
Paul Gauthier (aider)
3b10e3bcb5 style: Use min-height for leaderboard table data cells 2025-04-13 12:43:18 -07:00
Paul Gauthier (aider)
4c17784444 style: Set consistent row height in leaderboards table 2025-04-13 12:41:28 -07:00
Paul Gauthier
6616f0886d copy 2025-04-13 11:59:09 -07:00
Paul Gauthier (aider)
dcafab2764 style: Improve leaderboard layout on narrow screens 2025-04-13 11:58:03 -07:00
Paul Gauthier
3b6146301f fix: Improve leaderboard table layout for better readability 2025-04-13 11:58:02 -07:00
Paul Gauthier
42e09b3c7f docs: Improve leaderboard column header for edit format 2025-04-13 11:52:48 -07:00
Paul Gauthier (aider)
73da42bee6 feat: Use percent_cases_well_formed for leaderboard conform rate 2025-04-13 11:51:24 -07:00
Paul Gauthier (aider)
415b1cf5f0 feat: Update label for conform_rate_2 to be more descriptive 2025-04-13 11:50:45 -07:00
Paul Gauthier (aider)
c011285904 feat: Add % conform and edit format columns to leaderboard table 2025-04-13 11:50:09 -07:00
Paul Gauthier
4314b4fefb copy 2025-04-13 11:22:53 -07:00
Paul Gauthier (aider)
d686f6844d style: Apply left border only to the first column in view mode 2025-04-13 11:08:49 -07:00
Paul Gauthier (aider)
65a0e5f771 style: Apply left border and subtle background to highlighted rows 2025-04-13 11:08:18 -07:00
Paul Gauthier
5ca6d8ce67 style: Change leaderboard highlight color to light yellow 2025-04-13 11:08:17 -07:00
Paul Gauthier (aider)
688c2b9ee5 style: Change leaderboard highlight color to light peach 2025-04-13 10:53:40 -07:00
Paul Gauthier (aider)
271f39505c style: Change view-highlighted background to light yellow 2025-04-13 10:53:11 -07:00
Paul Gauthier (aider)
3e8367ea3b style: Use light green for highlighted leaderboard rows 2025-04-13 10:52:21 -07:00
Paul Gauthier (aider)
67a1e52259 docs: Add kind words from kache (@yacineMTB) 2025-04-13 10:43:24 -07:00
Paul Gauthier
7561687b7b copy 2025-04-13 10:35:27 -07:00
Paul Gauthier
93fc7acbe3 copy 2025-04-13 10:34:33 -07:00
Paul Gauthier (aider)
72dc67950f docs: Fix link to reasoning settings documentation 2025-04-13 10:33:36 -07:00
Paul Gauthier (aider)
e2bebd1d51 docs: Note Grok 3 Mini supports --reasoning-effort flag 2025-04-13 10:33:11 -07:00
Paul Gauthier
03560d3386 docs: Add trailing newline to xai.md 2025-04-13 10:33:10 -07:00
Paul Gauthier (aider)
a3a3303a83 docs: List all Grok-3 and Grok-3-mini models in xai.md 2025-04-13 10:32:42 -07:00
Paul Gauthier
232a6f87d2 docs: Update xAI model names and usage instructions 2025-04-13 10:32:41 -07:00
Paul Gauthier (aider)
ab71ea0a65 feat: Add grok-3-fast and grok-3-mini-fast model configurations 2025-04-13 10:31:53 -07:00
Paul Gauthier (aider)
1302224f39 style: Make close button smaller and more compact 2025-04-13 09:54:18 -07:00
Paul Gauthier (aider)
733bf0dcdf feat: Add close button to hide leaderboard controls container 2025-04-13 09:52:32 -07:00
Paul Gauthier (aider)
4ed48178a9 fix: Improve leaderboard toggle button responsiveness on iOS Safari 2025-04-13 09:50:47 -07:00
Paul Gauthier
8cffb975d9 docs: Clarify Aider's LLM evaluation criteria and add polyglot link 2025-04-13 09:47:32 -07:00
Paul Gauthier
97b18797a4 copy 2025-04-13 09:16:18 -07:00
Paul Gauthier (aider)
579794b265 feat: Show only selected rows in 'View' mode if selections exist 2025-04-13 09:15:00 -07:00
Paul Gauthier (aider)
bea746595e feat: Hide first column in leaderboard table when in 'View' mode 2025-04-13 09:13:42 -07:00
Paul Gauthier (aider)
87711b048a feat: Implement three-state mode (View/Select/Detail) for leaderboard 2025-04-13 09:11:54 -07:00
Paul Gauthier
0b468ebd85 copy 2025-04-13 08:57:33 -07:00
Paul Gauthier
aefc250e30 move 2025-04-13 08:57:12 -07:00
Paul Gauthier (aider)
4a86fea86b refactor: Move script tags to markdown, include only js code 2025-04-13 08:56:36 -07:00
Paul Gauthier (aider)
fe6e2e1ea7 Refactor: Embed leaderboard script using Jekyll include tag 2025-04-13 08:55:44 -07:00
Paul Gauthier (aider)
09d90b9b70 Refactor: Move leaderboard table JS to external file for better caching. 2025-04-13 08:55:14 -07:00
Paul Gauthier
14eb7b46a2 feat: Add leaderboard table javascript file 2025-04-13 08:55:13 -07:00
Paul Gauthier (aider)
66077fe3a4 feat: Implement row highlighting in view mode for leaderboards 2025-04-13 08:52:58 -07:00
Paul Gauthier (aider)
d50cf806db feat: Add row click listener for checkbox toggle in select mode 2025-04-13 08:50:32 -07:00
Paul Gauthier (aider)
95edae9bd1 style: Style active leaderboard mode button with JS, remove CSS rule 2025-04-13 08:48:43 -07:00
Paul Gauthier (aider)
a6c35305ed style: Adjust active mode toggle button colors for contrast 2025-04-13 08:48:00 -07:00
Paul Gauthier (aider)
b382005a4c style: Remove inline background color from "View" button 2025-04-13 08:46:02 -07:00
Paul Gauthier (aider)
a71b90bdd6 feat: Implement toggle buttons for view mode selection 2025-04-13 08:44:49 -07:00
Paul Gauthier (aider)
d4a68c80bc feat: Replace dropdown with segmented button group for view mode 2025-04-13 08:44:36 -07:00
Paul Gauthier (aider)
fcf44cbebe fix: Only apply row-selected class in 'select' mode 2025-04-13 08:41:12 -07:00
Paul Gauthier (aider)
51d8cb063a feat: Simplify leaderboard modes to 'View' and 'Select' 2025-04-13 08:40:30 -07:00
Paul Gauthier (aider)
cdc86565cc Refactor: Update leaderboard dropdown option text for clarity 2025-04-13 08:39:05 -07:00
Paul Gauthier (aider)
1c54907b30 style: Improve leaderboard controls appearance with CSS styling 2025-04-13 08:38:13 -07:00
Paul Gauthier (aider)
b6d4246e18 feat: Replace segmented buttons with dropdown for view mode selection 2025-04-13 08:37:47 -07:00
Paul Gauthier (aider)
cc1a984c7e feat: Replace clear selection button with select all checkbox 2025-04-13 08:35:37 -07:00
Paul Gauthier (aider)
52d39657ab feat: Implement table view modes, row selection, and search filter 2025-04-13 08:33:14 -07:00
Paul Gauthier (aider)
363ec82a48 feat: Implement leaderboard view mode toggle (All/Select/Selected) 2025-04-13 08:32:54 -07:00
Paul Gauthier (aider)
f164b0e3eb style: Adjust font size of numbers in leaderboard bars 2025-04-13 08:12:10 -07:00
Paul Gauthier (aider)
3aaf7a69ec style: Adjust leaderboard number positioning in bar cells 2025-04-13 01:20:41 -07:00
Paul Gauthier (aider)
6d2828bc3c style: Update cost bar color in leaderboards docs 2025-04-13 00:46:57 -07:00
Paul Gauthier (aider)
dd6e2051a8 Style: Improve leaderboard table borders for visual clarity 2025-04-13 00:44:12 -07:00
Paul Gauthier (aider)
ef440972bb Refactor: Remove chart and add margin to post date in leaderboard 2025-04-13 00:42:37 -07:00
Paul Gauthier (aider)
da96888669 style: Hide command column on small screens in leaderboards 2025-04-13 00:41:44 -07:00
Paul Gauthier (aider)
75639059e1 style: Make toggle symbols more subtle by changing their color 2025-04-13 00:40:44 -07:00
Paul Gauthier (aider)
0a15dd311a feat: Use Unicode triangles for leaderboard toggle button 2025-04-13 00:40:19 -07:00
Paul Gauthier (aider)
434a1c6710 feat: Replace +/- with chevron icons for leaderboard details toggle 2025-04-13 00:39:24 -07:00
Paul Gauthier (aider)
f961eecab6 Feat: Add toggleable detail view to leaderboard table 2025-04-12 23:44:43 -07:00
Paul Gauthier (aider)
d33a571f7d Refactor: Remove edit-format column from leaderboards 2025-04-12 23:40:54 -07:00
Paul Gauthier
ea1239efef Docs: Clarify polyglot benchmark measures edits without intervention. 2025-04-12 23:40:53 -07:00
Paul Gauthier (aider)
19c7c7a9dc Docs: Make leaderboards intro text more concise 2025-04-12 23:37:16 -07:00
Paul Gauthier (aider)
49e4af4fab fix: Display '?' for zero or rounded-to-zero costs in leaderboards 2025-04-12 23:32:35 -07:00
Paul Gauthier (aider)
3e27c1bb17 feat: Only add cost ticks if the cost is greater than zero 2025-04-12 23:32:01 -07:00
Paul Gauthier (aider)
0f8d196741 style: Increase font size of leaderboard bar chart numbers 2025-04-12 23:30:29 -07:00
Paul Gauthier
4c45f0e44b style: Improve leaderboard bar chart tick visibility 2025-04-12 23:30:28 -07:00
Paul Gauthier (aider)
e39eef1ed7 style: Align ticks with bottom edge of leaderboard bars 2025-04-12 23:26:21 -07:00
Paul Gauthier
c9c7aea1c4 docs: Improve leaderboard cost visualization and table layout 2025-04-12 23:26:05 -07:00
Paul Gauthier (aider)
18ff9eb2b4 style: Make tick color lighter in leaderboards 2025-04-12 23:23:36 -07:00
Paul Gauthier (aider)
b2f3d2cd84 style: Improve visibility of ticks in leaderboard progress bars 2025-04-12 23:23:03 -07:00
Paul Gauthier (aider)
5e0832cb8b feat: Add percentage ticks to leaderboard percentage columns 2025-04-12 23:21:38 -07:00
Paul Gauthier (aider)
a14c0ccac6 style: Align cost-tick height with bar height in leaderboards 2025-04-12 23:20:56 -07:00
Paul Gauthier (aider)
278f90acdd fix: Add tick at base of cost column bars in leaderboards 2025-04-12 23:20:08 -07:00
Paul Gauthier (aider)
8e8b18e9a9 fix: Align ticks in bar table cells to 0%, 10%, 20%, etc. 2025-04-12 23:18:47 -07:00
Paul Gauthier (aider)
a277d74869 feat: Add dynamic cost ticks to leaderboards page cost bars 2025-04-12 23:14:21 -07:00
Paul Gauthier (aider)
7ca3b6455d feat: Add tick marks to leaderboard % correct and cost columns 2025-04-12 23:14:08 -07:00
Paul Gauthier (aider)
5ec6f69037 feat: Add tick marks to table bar graph cells 2025-04-12 23:13:04 -07:00
Paul Gauthier (aider)
39962ba5eb style: Remove internal cell borders from leaderboards table 2025-04-12 23:10:55 -07:00
Paul Gauthier (aider)
51fa1f9abd Refactor: Remove "Percent using correct edit format" column 2025-04-12 23:10:18 -07:00
Paul Gauthier
47af5d463c docs: Clarify cost column in leaderboards is log scale 2025-04-12 23:10:17 -07:00
Paul Gauthier (aider)
33f0b0b41c fix: Remove invalid Liquid comment from leaderboards page 2025-04-12 23:08:57 -07:00
Paul Gauthier (aider)
48038b1f5e feat: Use log scale for cost bar in leaderboards table 2025-04-12 23:08:28 -07:00
Paul Gauthier (aider)
323698d387 style: Remove box-shadow from bar graph numeric text container 2025-04-12 20:53:06 -07:00
Paul Gauthier (aider)
1f702beb74 style: Improve legibility of numbers in leaderboard table cells 2025-04-12 20:49:12 -07:00
Paul Gauthier
7d34c28af1 style: Reduce height of leaderboard progress bars 2025-04-12 20:47:02 -07:00
Paul Gauthier (aider)
d26be77010 feat: Hide cost bar if cost is 0 or unknown in leaderboards table 2025-04-12 20:45:29 -07:00
Paul Gauthier (aider)
3b96d1bd57 fix: Adjust bar-viz height in leaderboards page CSS 2025-04-12 20:43:07 -07:00
Paul Gauthier (aider)
48fd0e71d5 style: Increase bar height and fix colors in leaderboards 2025-04-12 20:42:58 -07:00
Paul Gauthier
bcb35ccf44 style: Reduce leaderboard bar height for better readability 2025-04-12 20:42:58 -07:00
Paul Gauthier (aider)
a663ff7fa8 style: Make leaderboard bars 2x taller 2025-04-12 20:40:46 -07:00
Paul Gauthier (aider)
813d34a0e9 style: Fix inconsistent bar heights in leaderboards table 2025-04-12 20:40:18 -07:00
Paul Gauthier (aider)
a4074a13c4 fix: Swap colors of leaderboard columns for correct display 2025-04-12 20:25:35 -07:00
Paul Gauthier (aider)
249f329b07 fix: Correct leaderboard bar colors and logic for accuracy 2025-04-12 20:24:51 -07:00
Paul Gauthier (aider)
cf160a8f84 fix: Swap colors of leaderboard columns 2 and 3 2025-04-12 20:23:45 -07:00
Paul Gauthier (aider)
4db963182d feat: Add color variation to cost bars in leaderboards 2025-04-12 20:21:38 -07:00
Paul Gauthier (aider)
199b59fdb9 feat: Improve table-as-bar-graph with color variation based on value 2025-04-12 20:21:08 -07:00
Paul Gauthier (aider)
2d09bfa0f3 feat: Implement dedicated bar element inside table cells for visualization 2025-04-12 20:15:28 -07:00
Paul Gauthier (aider)
729285e8a2 refactor: Move cost column in leaderboards table to be after percent 2025-04-12 20:13:05 -07:00
Paul Gauthier (aider)
afd17bd96a style: Improve leaderboard table styling with padding and bar adjustments 2025-04-12 20:11:09 -07:00
Paul Gauthier (aider)
380d8570dc fix: Remove visible Liquid comment from leaderboard page 2025-04-12 20:09:38 -07:00
Paul Gauthier (aider)
e711eaa810 feat: Add horizontal bar graphs to leaderboard numerical columns 2025-04-12 20:08:35 -07:00
Paul Gauthier
7dfdc2094e refactor: Use EditBlockFencedPrompts directly in EditorDiffFencedPrompts 2025-04-12 20:04:04 -07:00
Paul Gauthier (aider)
838646ac5b refactor: EditorDiffFencedCoder inherits from EditBlockFencedCoder 2025-04-12 19:57:10 -07:00
Paul Gauthier (aider)
507f07575b feat: Add diff-fenced to copy-paste edit format prefixing 2025-04-12 19:55:53 -07:00
Paul Gauthier (aider)
f5e8808770 feat: Add "diff-fenced" to editor edit format options. 2025-04-12 19:55:35 -07:00
Paul Gauthier (aider)
ae5b6e88a5 feat: Enable EditorDiffFencedCoder by adding it to __init__.py 2025-04-12 19:55:10 -07:00
Paul Gauthier (aider)
b45186dde0 feat: Add editor-diff-fenced coder and prompts classes 2025-04-12 19:52:43 -07:00
Paul Gauthier
38be8aa0da copy 2025-04-12 17:12:10 -07:00
Paul Gauthier (aider)
816d4ba206 docs: Add kind words from koleok to README 2025-04-12 17:10:29 -07:00
Paul Gauthier
ede59e4d2a docs: Fix typo in README quote from joseph stalzyn 2025-04-12 17:10:28 -07:00
Paul Gauthier (aider)
ce0931a3c8 docs: Add kind words from users to README 2025-04-12 17:08:37 -07:00
Paul Gauthier
a44e148818 feat: Add go_ahead_tip and rename_with_shell to editblock prompts 2025-04-12 17:04:12 -07:00
Paul Gauthier
71115c6558 feat: Add editor-diff and editor-whole edit formats 2025-04-12 16:44:13 -07:00
Paul Gauthier
8ae837e98b copy 2025-04-12 15:49:42 -07:00
Paul Gauthier
9518193d0a set version to 0.81.4.dev 2025-04-12 13:25:55 -07:00
Paul Gauthier
60a2b799e6 version bump to 0.81.3 2025-04-12 13:25:52 -07:00
Andrew Grigorev
1d42690824 fix: update co-authored-by domain to aider.chat
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 20:52:55 +03:00
Andrew Grigorev
3f94fd5e4e refactor: Simplify access to attribute_co_authored_by
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 20:38:25 +03:00
Andrew Grigorev
165e237be7 chore: remove unnecessary comment in repo.py
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 20:25:01 +03:00
Andrew Grigorev
38dfd6f4f9 docs: clarify --attribute-co-authored-by precedence 2025-04-12 20:07:33 +03:00
Andrew Grigorev
5851d66174 test: improve test clarity with skipIf and assertion messages
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 20:00:44 +03:00
Andrew Grigorev
6a970c3515 test: remove redundant co-authored-by precedence test
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 19:58:29 +03:00
Andrew Grigorev
9e91e8f1b2 test: remove redundant commit attribution tests
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 19:58:06 +03:00
Andrew Grigorev
3e1bc77bf2 test: add tests for commit author/committer attribution logic
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 19:56:18 +03:00
Andrew Grigorev
d991cb6721 test: cover user commit with no committer attribution
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 19:54:56 +03:00
Andrew Grigorev
37a252748a test: Fix commit result assertion in test_noop_commit 2025-04-12 19:47:18 +03:00
Andrew Grigorev
5664b5b195 test: Assert commit return value in more tests
Co-authored-by: aider (vertex_ai/gemini-2.0-flash-lite-001) <noreply@aider.dev>
2025-04-12 19:41:24 +03:00
Andrew Grigorev
278a596bfa docs: clarify commit author/committer/co-authored-by logic
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 19:21:03 +03:00
Andrew Grigorev
ea74f31b3e feat: Explicit author/committer flags override co-authored-by
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 19:09:46 +03:00
Paul Gauthier
9d7dc00f25 copy 2025-04-12 08:58:50 -07:00
Paul Gauthier
882e7b6716 bump deps 2025-04-12 08:58:09 -07:00
Paul Gauthier
8ba29ee8e6 copy 2025-04-12 08:57:18 -07:00
Andrew Grigorev
dd4b61da20 test: add test for co-authored-by precedence over author/committer
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 18:26:46 +03:00
Andrew Grigorev
c56e836d22 refactor: simplify commit logic and use context manager for git env
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 18:19:55 +03:00
Andrew Grigorev
427f9c5b00 Revert "chore: Add test comment to dump function"
This reverts commit e951164399.
2025-04-12 18:14:09 +03:00
Andrew Grigorev
aa07e16f18 Revert "chore: Add test comment"
This reverts commit 482e0c2d0b.
2025-04-12 18:14:09 +03:00
Andrew Grigorev
7b8c7edfd5 Revert "chore: Add test comment"
This reverts commit d5671c2879.
2025-04-12 18:14:08 +03:00
Andrew Grigorev
cf7b35f90d Revert "test: add comment for testing"
This reverts commit 072bd30443.
2025-04-12 18:14:08 +03:00
Andrew Grigorev
02bc9a85c0 Revert "chore: add test comment to dump function"
This reverts commit ff8e9850ba.
2025-04-12 18:14:08 +03:00
Andrew Grigorev
e1820522db Revert "chore: add debug prints for attribute_co_authored_by"
This reverts commit d1437b7666.
2025-04-12 18:14:07 +03:00
Andrew Grigorev
0a59c38f31 Revert "chore: add another test comment to prompts"
This reverts commit 15d623f2c0.
2025-04-12 18:14:07 +03:00
Andrew Grigorev
66fdeceb3b Revert "chore: add third test comment"
This reverts commit 316d8f8e9b.
2025-04-12 18:14:06 +03:00
Paul Gauthier
3f67c41759 copy 2025-04-12 08:09:46 -07:00
Paul Gauthier
7fbeafa1cf copy 2025-04-12 08:06:39 -07:00
Andrew Grigorev
316d8f8e9b chore: add third test comment
Co-authored-by: aider (vertex_ai/gemini-2.5-pro-exp-03-25) <noreply@aider.dev>
2025-04-12 18:06:09 +03:00
Andrew Grigorev (aider)
15d623f2c0 chore: add another test comment to prompts 2025-04-12 17:57:44 +03:00
Andrew Grigorev (aider)
d1437b7666 chore: add debug prints for attribute_co_authored_by 2025-04-12 17:57:04 +03:00
Andrew Grigorev (aider)
ff8e9850ba chore: add test comment to dump function 2025-04-12 17:55:54 +03:00
Andrew Grigorev (aider)
f648a018a2 fix: Pass attribute_co_authored_by arg to GitRepo constructor 2025-04-12 17:55:13 +03:00
Andrew Grigorev (aider)
072bd30443 test: add comment for testing 2025-04-12 17:53:11 +03:00
Andrew Grigorev (aider)
48f89f226f fix: prevent name modification when using co-authored-by 2025-04-12 17:51:58 +03:00
Andrew Grigorev (aider)
d5671c2879 chore: Add test comment 2025-04-12 17:50:16 +03:00
Andrew Grigorev (aider)
80114e7a24 chore: revert intentional break introduced for testing 2025-04-12 17:48:52 +03:00
Andrew Grigorev (aider)
dede701423 test: intentionally break co-authored-by logic 2025-04-12 17:47:20 +03:00
Andrew Grigorev (aider)
43cb4d68f7 test: Temporarily disable co-author attribution to verify test failure 2025-04-12 17:45:48 +03:00
Andrew Grigorev (aider)
4783ad3a73 feat: add attribute-co-authored-by option for commit attribution 2025-04-12 17:39:49 +03:00
Andrew Grigorev (aider)
482e0c2d0b chore: Add test comment 2025-04-12 17:37:00 +03:00
Andrew Grigorev (aider)
e951164399 chore: Add test comment to dump function 2025-04-12 17:35:45 +03:00
Andrew Grigorev (aider)
c73b987cd0 fix: fix syntax error in commit logic 2025-04-12 17:32:57 +03:00
Andrew Grigorev (aider)
b22c9b8542 feat: implement Co-authored-by attribution option 2025-04-12 17:32:15 +03:00
Andrew Grigorev (aider)
a5327af5e9 test: fix mock setup for co-authored-by commit test 2025-04-12 17:19:04 +03:00
Andrew Grigorev (aider)
192f8bec26 test: fix mock model name setup in co-authored-by test 2025-04-12 17:09:12 +03:00
Andrew Grigorev (aider)
eb28e22891 test: fix mock setup for model name in co-authored-by test 2025-04-12 17:07:41 +03:00
Andrew Grigorev (aider)
b6b8f30378 test: add tests for co-authored-by commit attribution 2025-04-12 16:57:21 +03:00
Andrew Grigorev (aider)
67bb4f9552 feat: add co-authored-by commit attribution 2025-04-12 16:52:45 +03:00
Paul Gauthier
028257480b copy 2025-04-11 14:26:04 +12:00
Paul Gauthier
e42a0c45b6 Merge branch 'main' of github.com:Aider-AI/aider 2025-04-11 14:18:07 +12:00
Paul Gauthier
1e7f8549ff add grok3mini high 2025-04-11 14:11:39 +12:00
paul-gauthier
668de71f9d Merge pull request #3776 from peterhadlaw/master
Do not lowercase the _entirety_ of the commit message
2025-04-11 14:01:03 +12:00
Paul Gauthier
067245b810 chore: update grok model settings to remove/comment out params 2025-04-11 13:41:11 +12:00
Peter Hadlaw
8f236c69e1 fix: Do not lowercase the entirety of the commit message 2025-04-10 20:08:40 -05:00
Paul Gauthier
8ee33da114 copy 2025-04-11 09:08:06 +12:00
Paul Gauthier (aider)
2fedc2e699 feat: update openrouter badges to link to options menu 2025-04-11 08:38:22 +12:00
Paul Gauthier
1961543e2f set version to 0.81.3.dev 2025-04-11 08:37:59 +12:00
Paul Gauthier
b4f65734a5 version bump to 0.81.2 2025-04-11 08:37:56 +12:00
Paul Gauthier (aider)
0eb80553f6 style: Apply linter to versionbump.py 2025-04-11 08:37:37 +12:00
Paul Gauthier (aider)
110c63ae95 feat: Add --force flag to skip pre-push checks 2025-04-11 08:37:33 +12:00
Paul Gauthier
57304536bf copy 2025-04-11 08:23:16 +12:00
Paul Gauthier
a9ca5da139 feat: add grok-3-mini-beta to model settings with reasoning_effort 2025-04-11 08:22:44 +12:00
Paul Gauthier
947aebfbe0 copy 2025-04-11 08:13:15 +12:00
Paul Gauthier
fafc9268d4 feat: set grok-3-mini-beta edit_format to whole 2025-04-11 08:12:38 +12:00
Paul Gauthier
65a5d55436 feat: add grok-3-beta and grok-3-mini-beta model settings 2025-04-11 08:10:18 +12:00
Paul Gauthier (aider)
96b350400f feat: make highlight parameter case-insensitive in leaderboard 2025-04-11 07:28:01 +12:00
Paul Gauthier
7983b4caf2 copy 2025-04-11 07:25:10 +12:00
Paul Gauthier (aider)
e44122f1be fix: correct groq to grok typo in model settings yaml 2025-04-11 07:23:16 +12:00
Paul Gauthier (aider)
42618d7ec6 fix: correct groq to grok typos in model names and aliases 2025-04-11 07:23:05 +12:00
Paul Gauthier
1d0167bbf4 feat: add polyglot leaderboard entries for grok3 and optimus alpha 2025-04-11 07:17:56 +12:00
Paul Gauthier (aider)
43d4b21b23 feat: add "optimus" alias for openrouter model 2025-04-11 07:12:27 +12:00
Paul Gauthier (aider)
562171c548 feat: add grok3 alias for xai/groq-3-beta 2025-04-11 07:12:09 +12:00
Paul Gauthier (aider)
8dccecdd9f feat: add xai/groq-3-beta and xai/groq-3-mini-beta models 2025-04-11 07:10:23 +12:00
Paul Gauthier
940ae364d7 feat: add model settings for grok-3-beta, grok-3-mini-beta, optimus-alpha 2025-04-11 07:09:27 +12:00
Paul Gauthier (aider)
532bc454c5 feat: add openrouter/openrouter/optimus-alpha model metadata 2025-04-11 06:54:12 +12:00
Paul Gauthier (aider)
14ffe7782c feat: add openrouter/x-ai/grok-3-mini-beta model metadata 2025-04-11 06:37:33 +12:00
Paul Gauthier (aider)
2dd40fce44 feat: add openrouter/x-ai/grok-3-beta model metadata 2025-04-10 16:18:22 +12:00
Paul Gauthier (aider)
0c8bc46e28 fix: strip trailing } from urls extracted from error messages 2025-04-10 16:06:07 +12:00
jayesh thakare
23c9d9c34d Merge branch 'Aider-AI:main' into main 2025-04-10 02:35:41 +05:30
jayeshthk
188e9e1114 Optimize head‑truncation loop in summarize_real 2025-04-10 02:29:40 +05:30
Paul Gauthier
7d0dd29937 Merge branch 'main' of github.com:Aider-AI/aider 2025-04-08 18:33:41 +12:00
Paul Gauthier
349cd77821 copy 2025-04-08 08:10:21 +12:00
paul-gauthier
dc2d7b1dfe Merge pull request #3752 from tylersatre/main 2025-04-08 06:31:41 +12:00
Tyler Satre
be30329288 Update azure documentation 2025-04-07 11:04:15 -04:00
Paul Gauthier
71446d9f3c fix: get_file_mentions skips pure basenames with duplicates 2025-04-07 13:22:05 +12:00
Paul Gauthier (aider)
c9d4c8d09b fix: allow adding files by full path with existing basename 2025-04-07 13:19:25 +12:00
Paul Gauthier (aider)
c580ffdb70 test: add test for multiline backtick file mentions 2025-04-07 13:14:27 +12:00
Paul Gauthier
f46deb4eb7 improve diff-fenced prompts 2025-04-07 08:54:01 +12:00
Paul Gauthier
b3215bed48 copy 2025-04-07 08:13:22 +12:00
Paul Gauthier
2a9ab02753 chore: update polyglot leaderboard data 2025-04-07 08:12:37 +12:00
Paul Gauthier (aider)
0da586154d fix: quote values with '#' in sample aider.conf.yml config 2025-04-07 08:09:33 +12:00
Paul Gauthier
26d736551d Merge branch 'main' of github.com:Aider-AI/aider 2025-04-07 08:05:15 +12:00
paul-gauthier
9445a3118b Merge pull request #3733 from banjo/main 2025-04-06 07:28:56 +12:00
paul-gauthier
a2c46c7436 Merge pull request #3735 from KennyDizi/main 2025-04-06 07:20:22 +12:00
paul-gauthier
8df7a0960e Merge pull request #3736 from FelixLisczyk/tl-173 2025-04-06 07:19:30 +12:00
Felix Lisczyk
e7f35e7a35 Add Fireworks AI model 'deepseek-v3-0324' 2025-04-05 16:33:09 +02:00
Kenny Dizi
088e80e38b Add support model openrouter/google/gemini-2.5-pro-preview-03-25 2025-04-05 20:53:06 +07:00
Kenny Dizi
2d65c7f387 Remove trailing spaces 2025-04-05 20:51:11 +07:00
Anton Ödman
94db758eb7 fix: follow conventional commits examples by going all lowercase 2025-04-05 13:07:34 +02:00
Paul Gauthier
2bfb615d68 set version to 0.81.2.dev 2025-04-05 09:01:12 +13:00
Paul Gauthier
87275140f9 version bump to 0.81.1 2025-04-05 09:01:09 +13:00
Paul Gauthier
0672a68ba4 copy 2025-04-05 08:58:10 +13:00
Paul Gauthier (aider)
246e3ccfad refactor: Rename gemini-free alias to gemini-exp in MODEL_ALIASES 2025-04-05 08:56:56 +13:00
Paul Gauthier (aider)
b275ee919f feat: Update gemini model alias and add gemini-free alias 2025-04-05 08:56:35 +13:00
Paul Gauthier (aider)
eda796d5e0 feat: Add metadata and settings for gemini-2.5-pro-preview-03-25 2025-04-05 08:54:45 +13:00
Paul Gauthier
d1b3917309 copy 2025-04-04 22:08:49 +13:00
Paul Gauthier
ffee2b971f blame 2025-04-04 22:08:08 +13:00
Paul Gauthier
b9a80f9c8c set version to 0.81.1.dev 2025-04-04 22:02:37 +13:00
Paul Gauthier
980f673ce2 version bump to 0.81.0 2025-04-04 22:02:34 +13:00
Paul Gauthier
55767a0003 copy 2025-04-04 21:56:25 +13:00
Paul Gauthier
fb44bebe40 copy 2025-04-04 21:53:47 +13:00
Paul Gauthier (aider)
b79f072499 feat: Add alias "quasar" for openrouter/openrouter/quasar-alpha 2025-04-04 21:53:12 +13:00
Paul Gauthier (aider)
d65a2e8b51 fix: Exclude double quotes from detected URLs 2025-04-04 21:48:17 +13:00
Paul Gauthier (aider)
e0b42d51db fix: Do not retry litellm.APIError for insufficient credits. 2025-04-04 21:45:56 +13:00
Paul Gauthier (aider)
c057dc9466 Feat: Add model metadata for openrouter/openrouter/quasar-alpha 2025-04-04 21:43:19 +13:00
Paul Gauthier (aider)
fff53a94d3 fix: Import offer_openrouter_oauth from aider/onboarding.py 2025-04-04 21:41:40 +13:00
Paul Gauthier (aider)
12beedd0a6 style: Run linter to fix line lengths and formatting issues 2025-04-04 21:40:47 +13:00
Paul Gauthier (aider)
80f60a7394 feat: Offer OpenRouter OAuth if model specified but API key is missing 2025-04-04 21:40:41 +13:00
Paul Gauthier
2359348505 copy 2025-04-04 21:39:47 +13:00
Paul Gauthier
63e3e06a8c copy 2025-04-04 18:53:12 +13:00
Paul Gauthier
dca92b580c add openrouter/openrouter/quasar-alpha 2025-04-04 18:52:59 +13:00
Paul Gauthier
24e2960092 add openrouter/openrouter/quasar-alpha 2025-04-04 18:52:16 +13:00
Paul Gauthier (aider)
be1a52c5c1 feat: Read highlight model from query string 2025-04-04 16:11:54 +13:00
Paul Gauthier
8a34a6c8f4 set version to 0.80.5.dev 2025-04-04 15:34:08 +13:00
Paul Gauthier
7924ea9bb9 version bump to 0.80.4 2025-04-04 15:34:04 +13:00
Paul Gauthier
a3a17ae792 copy 2025-04-04 15:31:04 +13:00
Paul Gauthier
f8801d811b feat: Remove max_tokens from deepseek model settings 2025-04-04 15:25:36 +13:00
Paul Gauthier
425284ac62 copy 2025-04-04 15:09:08 +13:00
Paul Gauthier
4872cdf905 copy 2025-04-04 15:08:21 +13:00
Paul Gauthier
88cd81c692 set version to 0.80.4.dev 2025-04-04 08:30:42 +13:00
Paul Gauthier
d45ecd0800 version bump to 0.80.3 2025-04-04 08:30:39 +13:00
Paul Gauthier
4bfcef60f4 copy 2025-04-04 07:58:59 +13:00
Paul Gauthier
e9b7e933f5 copy 2025-04-04 07:54:07 +13:00
Paul Gauthier
e5301cef49 copy 2025-04-04 07:52:16 +13:00
Paul Gauthier
01ca552174 copy 2025-04-04 07:49:36 +13:00
Paul Gauthier
4529d73bf3 feat: Add model metadata for openrouter/google/gemini-2.0-flash-exp:free 2025-04-03 08:43:19 +13:00
Paul Gauthier
0798906a51 Merge branch 'main' into gemini-weak-flash 2025-04-03 08:34:41 +13:00
Paul Gauthier
8547c24dac set version to 0.80.3.dev 2025-04-03 08:33:40 +13:00
Paul Gauthier
0e1e1aae2e version bump to 0.80.2 2025-04-03 08:33:36 +13:00
Paul Gauthier (aider)
9cc31e4087 feat: Configure weak models for Gemini 2.5 Pro 2025-04-03 08:12:27 +13:00
Paul Gauthier
e9c7555bb9 chore: Add TODO comment for Gemini 2.5 Pro models 2025-04-03 08:12:20 +13:00
Paul Gauthier
6f897fec59 copy 2025-04-03 08:10:13 +13:00
Paul Gauthier
8c3d77f4c7 bump deps to pickup https://github.com/BerriAI/litellm/pull/9667 2025-04-03 08:07:30 +13:00
Paul Gauthier
f9b60d83ac copy 2025-04-02 20:15:37 +13:00
Paul Gauthier (aider)
3992681b84 ci: Add Windows workflow to check PyPI version 2025-04-01 21:19:14 +13:00
Paul Gauthier
340bd78259 Revert "ci: Add Windows to check_pypi_version matrix and improve compatibility"
This reverts commit 12a46275a2.
2025-04-01 21:18:31 +13:00
Paul Gauthier (aider)
12a46275a2 ci: Add Windows to check_pypi_version matrix and improve compatibility 2025-04-01 21:17:28 +13:00
Paul Gauthier
b56234f1c9 copy 2025-04-01 21:15:25 +13:00
Paul Gauthier (aider)
60859ec2b9 ci: Fix latest tag detection to exclude dev tags 2025-04-01 21:14:24 +13:00
Paul Gauthier
0a840860f1 docs: Add comment explaining PyPI check workflow purpose 2025-04-01 21:14:17 +13:00
Paul Gauthier (aider)
cebae18dd6 ci: Correct version extraction in check_pypi_version workflow 2025-04-01 21:12:24 +13:00
Paul Gauthier (aider)
9c9c6b6591 ci: Improve robustness of aider version check in CI 2025-04-01 21:10:36 +13:00
Paul Gauthier (aider)
ca0ffc66d1 ci: Run check_pypi_version job across Python 3.9-3.12 2025-04-01 21:08:17 +13:00
Paul Gauthier (aider)
b0623f04fe ci: Add GitHub Action to verify PyPI version matches latest tag 2025-04-01 21:03:20 +13:00
Paul Gauthier
2dec862ea6 copy 2025-04-01 17:08:27 +13:00
Paul Gauthier
f18fe53a9a set version to 0.80.2.dev 2025-04-01 17:06:41 +13:00
Paul Gauthier
73348de2b4 version bump to 0.80.1 2025-04-01 17:06:37 +13:00
Paul Gauthier
f4a418bfcd copy 2025-04-01 17:03:58 +13:00
Paul Gauthier
50588800f5 copy 2025-04-01 16:15:19 +13:00
Paul Gauthier
2762215d66 copy 2025-04-01 16:14:02 +13:00
Paul Gauthier
4e53797aac Merge branch 'main' of github.com:Aider-AI/aider 2025-04-01 16:13:21 +13:00
Paul Gauthier
b24ac4b3a2 pin to avoid yanked versions #3699 2025-04-01 16:13:13 +13:00
paul-gauthier
88ab6afd3e Merge pull request #3698 from aj47/patch-1
Update benchmark README.md to specify how to config other settings
2025-04-01 15:27:38 +13:00
Paul Gauthier
5c5db0a961 noop 2025-04-01 15:27:05 +13:00
AJ (@techfren)
587186d96c Update benchmark README.md to specify how to config other settings 2025-03-31 17:05:53 -07:00
Paul Gauthier
d9ddf93f83 copy 2025-04-01 08:37:08 +13:00
Paul Gauthier
d3882d3513 Merge branch 'main' of github.com:Aider-AI/aider 2025-04-01 08:28:00 +13:00
paul-gauthier
a458215bbb Merge pull request #3692 from claui/requests 2025-04-01 06:53:26 +13:00
Claudia Pellegrino
7ae0fa3775 chore: remove redundant code
1. The module already imports `requests`, so by the time this check is
   called, the module is already loaded.

2. Even if the code path were taken, it would fail anyway, because the
   `aider[oauth]` extra was hallucinated and does not exist.

3. Downstream distributions usually have managed Python environments,
   where pip cannot be used at all.
   That means distros must patch out every such pip invocation
   (example: [1]; full disclosure: I maintain this but other distros
   will eventually bump into the same issues). Restricting at-runtime
   pip usage to the minimum necessary is friendlier to distro
   maintainers.

[1]: https://aur.archlinux.org/cgit/aur.git/tree/archlinux-use-system.patch?h=aider-chat&id=7f8156946857215104bce151454ad0101ade4a48
2025-03-31 19:13:41 +02:00
Paul Gauthier
f1695f8b15 copy 2025-03-31 19:56:59 +13:00
Paul Gauthier
4c08bbb9e5 copy 2025-03-31 19:34:36 +13:00
Paul Gauthier
9b55ff8c4c copy 2025-03-31 19:32:36 +13:00
Paul Gauthier
2096d2b786 copy 2025-03-31 19:27:29 +13:00
Paul Gauthier
70196cd6fd copy 2025-03-31 16:24:13 +13:00
Paul Gauthier
c2cba97722 copy 2025-03-31 14:32:36 +13:00
Paul Gauthier
7534ebd145 blame 2025-03-31 14:28:44 +13:00
Paul Gauthier
6b2331340b set version to 0.80.1.dev 2025-03-31 14:19:36 +13:00
Paul Gauthier
da7b5005fe version bump to 0.80.0 2025-03-31 14:19:32 +13:00
Paul Gauthier
9210e12316 copy 2025-03-31 14:13:54 +13:00
Paul Gauthier (aider)
2c47a79c38 ci: Skip languages.md in codespell check 2025-03-31 14:13:12 +13:00
Paul Gauthier
48cebef974 copy 2025-03-31 14:10:11 +13:00
Paul Gauthier (aider)
52952efd33 test: verify load_dotenv_files override behavior 2025-03-31 11:49:20 +13:00
Paul Gauthier
30dfd28ac4 copy 2025-03-31 11:46:37 +13:00
Paul Gauthier
b5a04f05f3 copy 2025-03-31 11:44:13 +13:00
Paul Gauthier (aider)
d5a34dcbc5 style: Fix trailing whitespace in homepage script 2025-03-31 11:42:47 +13:00
Paul Gauthier (aider)
fc6a05ced6 fix: Improve testimonial parsing for different dash formats 2025-03-31 11:42:40 +13:00
Paul Gauthier (aider)
2d3162a90b style: Remove trailing whitespace 2025-03-31 11:41:51 +13:00
Paul Gauthier (aider)
83c599e741 fix: Improve testimonial parsing from README 2025-03-31 11:41:44 +13:00
Paul Gauthier (aider)
c7f1671d5a feat: Generate testimonials JS in homepage script 2025-03-31 11:39:57 +13:00
Paul Gauthier
9f2d945691 kind words 2025-03-31 11:34:40 +13:00
Paul Gauthier
36ff099145 llama-index-core==0.12.26 2025-03-31 11:32:31 +13:00
Paul Gauthier
120e010e48 llama-index-core==0.12.24.post1 2025-03-31 11:25:07 +13:00
Paul Gauthier
2887816cf0 remove copilot 2025-03-31 11:22:14 +13:00
Paul Gauthier
9848479306 bump deps 2025-03-31 11:20:17 +13:00
Paul Gauthier
b662e6b9eb fix: Handle GitCommandNotFound error 2025-03-31 10:50:01 +13:00
Paul Gauthier
258f1f0848 copy 2025-03-31 10:42:52 +13:00
Paul Gauthier (aider)
a07f312089 style: Apply linter fixes 2025-03-31 10:33:00 +13:00
Paul Gauthier (aider)
605d8fe59a fix: Fix ColorParseError by ensuring hex colors have # prefix 2025-03-31 10:32:48 +13:00
Paul Gauthier (aider)
1c7db4da0d style: Apply linter fixes 2025-03-31 10:27:12 +13:00
Paul Gauthier (aider)
b0acc95b01 fix: Add missing ColorParseError import 2025-03-31 10:27:02 +13:00
Paul Gauthier (aider)
5bcad73515 refactor: Validate color settings once during initialization 2025-03-31 10:26:08 +13:00
Paul Gauthier (aider)
db05754d29 style: Apply linter formatting 2025-03-31 10:17:31 +13:00
Paul Gauthier (aider)
dfe3457906 test: Add test for cmd_test returning output on failure 2025-03-31 10:17:21 +13:00
Paul Gauthier (aider)
7dbb1a2aa8 fix: Return test errors from cmd_run to enable auto-fixing 2025-03-31 10:15:14 +13:00
Paul Gauthier (aider)
83dac4aae2 style: Improve formatting of OpenRouter key exchange error message 2025-03-31 09:17:32 +13:00
Paul Gauthier (aider)
75b79fa002 fix: Correct HTTPError status code access in onboarding 2025-03-31 09:17:26 +13:00
Paul Gauthier (aider)
27c1fd0262 fix: Handle FileNotFoundError in find_common_root 2025-03-31 09:15:26 +13:00
Paul Gauthier (aider)
8069e06f43 feat: Add openrouter deepseek-chat-v3-0324:free model 2025-03-31 09:12:39 +13:00
Paul Gauthier (aider)
8cd106fc8a fix: Prevent UnboundLocalError in get_tracked_files on IndexError 2025-03-31 09:10:29 +13:00
Paul Gauthier (aider)
a9c9877580 feat: Add free DeepSeek chat model configuration to model metadata 2025-03-31 09:08:51 +13:00
Paul Gauthier
19e1201c8a add google-cloud-bigquery as dev dep 2025-03-31 09:04:41 +13:00
Paul Gauthier (aider)
912f98e6eb fix: Remove unused import mock_open 2025-03-31 09:04:26 +13:00
Paul Gauthier (aider)
b6808e3700 test: Remove failing OpenRouter OAuth flow test 2025-03-31 08:53:21 +13:00
Paul Gauthier (aider)
a4f78b60e0 fix: Fix unused import and variable in onboarding tests 2025-03-31 08:51:19 +13:00
Paul Gauthier (aider)
6c9906c639 style: Fix whitespace and formatting in onboarding tests 2025-03-31 08:50:59 +13:00
Paul Gauthier (aider)
8a90af6779 fix: Remove redundant threading patch in onboarding test 2025-03-31 08:50:51 +13:00
Paul Gauthier
9831a13284 test: Simplify OpenRouter OAuth flow test 2025-03-31 08:50:45 +13:00
Paul Gauthier (aider)
d2386bc1f6 test: mock and assert offer_openrouter_oauth call in no-key test 2025-03-31 08:50:32 +13:00
Paul Gauthier
5b10af7b1a test: Disable streaming in main test call 2025-03-31 08:50:28 +13:00
Paul Gauthier (aider)
eacf3cc4ed test: Fix assertion failure and type error in onboarding tests 2025-03-31 08:44:32 +13:00
Paul Gauthier (aider)
87090139f6 test: Refactor onboarding test imports 2025-03-31 08:42:03 +13:00
Paul Gauthier (aider)
650c4cf948 style: Fix flake8 errors in onboarding tests 2025-03-31 08:41:35 +13:00
Paul Gauthier (aider)
24c074eeaa style: Apply linter fixes to onboarding tests 2025-03-31 08:41:11 +13:00
Paul Gauthier (aider)
b54629addb test: Add unit tests for onboarding functions 2025-03-31 08:41:05 +13:00
Paul Gauthier
cd67d11ecf test: Add onboarding tests 2025-03-31 08:40:59 +13:00
Paul Gauthier (aider)
16bb0c93e7 feat: Warn when using --stream and --cache-prompts together 2025-03-31 08:40:17 +13:00
Paul Gauthier
7c40c3a61c copy 2025-03-31 08:38:30 +13:00
Paul Gauthier
b8e8b7496d Merge branch 'main' of github.com:Aider-AI/aider 2025-03-31 08:36:57 +13:00
Paul Gauthier
d29d5e3a47 copy 2025-03-31 08:24:03 +13:00
Andrey Popp
e980973621 feat: add repomap support for ocaml/ocaml_interface 2025-03-30 22:09:06 +04:00
paul-gauthier
db261d0fa4 Merge pull request #2980 from ivnvxd/fix-completion-menu-styling 2025-03-29 17:17:53 -10:00
Paul Gauthier
b7f6b847d6 Revert "bump deps"
This reverts commit 61147dfecf.
2025-03-30 11:05:38 +13:00
Paul Gauthier
5311a842a5 Revert "limit sentence-transformers<4 since 4.0.1 fails in GitHub Actions ubuntu and windows?"
This reverts commit e288f59da7.
2025-03-30 11:05:24 +13:00
Paul Gauthier
e288f59da7 limit sentence-transformers<4 since 4.0.1 fails in GitHub Actions ubuntu and windows? 2025-03-30 10:56:04 +13:00
Paul Gauthier
c62ceb5db1 test: Fix expected edit format in /model command tests 2025-03-28 20:27:12 -10:00
Paul Gauthier (aider)
35decf122d test: Add test for /model updating default edit format 2025-03-28 20:21:58 -10:00
Paul Gauthier (aider)
2adfe1507b test: Add tests for /model command edit_format behavior 2025-03-28 20:21:39 -10:00
Paul Gauthier (aider)
5516e6b279 feat: Update edit format on /model switch if using default 2025-03-28 20:20:46 -10:00
Paul Gauthier (aider)
8b811c610a refactor: Use get_raw_thinking_tokens in cmd_think_tokens 2025-03-28 20:12:04 -10:00
Paul Gauthier
23348f8e65 refactor: Remove redundant model arg from get_thinking/reasoning calls 2025-03-28 20:10:43 -10:00
Paul Gauthier (aider)
e1c3a2f8cf fix: Use self instead of model argument in get_reasoning_effort 2025-03-28 20:09:38 -10:00
Paul Gauthier (aider)
0b0493fa21 style: Remove unnecessary parentheses in conditions 2025-03-28 20:09:11 -10:00
Paul Gauthier (aider)
14d1742869 fix: Use self instead of model in get_raw_thinking_tokens 2025-03-28 20:09:05 -10:00
Paul Gauthier
96aa77288b refactor: Separate raw thinking token retrieval and fix self access 2025-03-28 20:09:01 -10:00
Paul Gauthier
a4c9c10029 style: Allow horizontal x-axis labels on leaderboard chart 2025-03-28 19:49:23 -10:00
Paul Gauthier (aider)
c9d561e7ad fix: Prevent leaderboard x-axis labels from disappearing 2025-03-28 19:43:26 -10:00
Paul Gauthier
87ba63c14c docs: Add chatgpt-4o-latest benchmark results 2025-03-28 19:36:06 -10:00
Paul Gauthier
0decbad7d0 Merge branch 'main' of github.com:Aider-AI/aider 2025-03-28 19:22:57 -10:00
Paul Gauthier
0e647dbc0e move 2025-03-28 19:21:44 -10:00
Paul Gauthier
2540d28b34 docs: Update Copilot documentation 2025-03-28 19:21:30 -10:00
Paul Gauthier (aider)
19a5e5bb00 docs: Add docs for Github Copilot models 2025-03-28 19:16:48 -10:00
Paul Gauthier
f22afc6458 docs: Add copilot.md 2025-03-28 19:16:44 -10:00
Paul Gauthier
ab00415ca1 Merge branch 'main' into feat/add_copilot 2025-03-28 19:13:54 -10:00
paul-gauthier
8df5406986 Merge pull request #3192 from miradnanali/fix-filename-quoting-for-lint
fix: Use shlex.quote() to enable linting filepaths containing shell metacharacters
2025-03-28 19:07:53 -10:00
Paul Gauthier
7f05159f0f Merge branch 'main' of github.com:Aider-AI/aider 2025-03-28 19:03:40 -10:00
Paul Gauthier
61147dfecf bump deps 2025-03-28 19:02:23 -10:00
paul-gauthier
06da133aac Merge pull request #3633 from susliko/scala-repomap
feat: add repomap support for Scala
2025-03-28 19:00:50 -10:00
Paul Gauthier
ff1d047048 docs: Add documentation for Ctrl-X Ctrl-E editor binding 2025-03-28 19:00:43 -10:00
paul-gauthier
4a8b17cb84 Merge pull request #3659 from iamFIREcracker/cx-ce-editor-key-binding
Invoke the editor by pressing `C-x C-e`
2025-03-28 18:58:13 -10:00
Paul Gauthier
fbafc09e6a copy 2025-03-28 18:54:20 -10:00
Paul Gauthier
c3c960383e feat: Offer OpenRouter OAuth if no model detected 2025-03-28 18:51:35 -10:00
Paul Gauthier
9e3adf0bf8 fix: Temporarily disable OpenRouter OAuth onboarding flow 2025-03-28 18:46:39 -10:00
Paul Gauthier
2bc0aa1777 docs: Fix docstring for check_openrouter_tier failure case 2025-03-28 18:45:31 -10:00
Paul Gauthier (aider)
3bc4064b61 fix: Default to free tier if OpenRouter tier check fails 2025-03-28 18:44:57 -10:00
Paul Gauthier (aider)
b4f9258f3c fix: Remove unused exception variable in webbrowser.open call 2025-03-28 18:29:26 -10:00
Paul Gauthier (aider)
ad844cce5c style: Fix linting issues in onboarding.py 2025-03-28 18:29:14 -10:00
Paul Gauthier (aider)
c73b064133 feat: Add OpenRouter tier-based model selection logic 2025-03-28 18:29:08 -10:00
Paul Gauthier
bd9b63a1aa refactor: Simplify OpenRouter OAuth flow messages and error handling 2025-03-28 18:29:05 -10:00
Paul Gauthier (aider)
2d87431aeb style: Apply linter formatting to onboarding.py 2025-03-28 18:03:10 -10:00
Paul Gauthier (aider)
3f3b1fb657 refactor: Update OpenRouter OAuth flow timeout to 5 minutes 2025-03-28 18:03:05 -10:00
Paul Gauthier
477f9eb4ec refactor: Update OpenRouter onboarding messages and flow 2025-03-28 18:03:04 -10:00
Paul Gauthier (aider)
91497dc2ee feat: Append OpenRouter API key to oauth-keys.env instead of overwriting 2025-03-28 17:57:26 -10:00
Paul Gauthier
928b78d9f6 feat: Simplify default model selection and improve OpenRouter OAuth key saving 2025-03-28 17:57:24 -10:00
Paul Gauthier (aider)
51825663b9 refactor: Extract model selection and OAuth logic into separate functions 2025-03-28 17:53:15 -10:00
Paul Gauthier
01fdbda728 refactor: Restructure model selection logic with new helper functions 2025-03-28 17:53:13 -10:00
Paul Gauthier
fa3c68fccd fix: Use print for auth URL and refine missing key message 2025-03-28 17:46:12 -10:00
Paul Gauthier (aider)
189977e4c7 fix: Update OpenRouter OAuth callback URL path to /callback/aider 2025-03-28 17:35:26 -10:00
Paul Gauthier (aider)
290fd99b6d feat: Load OAuth keys from ~/.aider/oauth-keys.env 2025-03-28 17:33:30 -10:00
Paul Gauthier (aider)
15cec5bd50 feat: Save OpenRouter API key to ~/.aider/oauth-keys.env 2025-03-28 17:32:39 -10:00
Paul Gauthier (aider)
f53db636e1 style: Format comments 2025-03-28 17:28:00 -10:00
Paul Gauthier (aider)
47d3802ffe feat: Handle user interruption during OpenRouter OAuth flow 2025-03-28 17:27:54 -10:00
Paul Gauthier (aider)
e98ffb5ae0 fix: Fix OAuth server premature shutdown on callback 2025-03-28 17:25:02 -10:00
Paul Gauthier (aider)
5d77eb1314 feat: Redirect callback URL to website if code param is missing 2025-03-28 17:23:21 -10:00
Paul Gauthier
f124cdbb6f refactor: Remove stream argument from Coder in onboarding 2025-03-28 17:21:04 -10:00
Paul Gauthier (aider)
1649d084d2 fix: Remove unused sys import 2025-03-28 17:16:28 -10:00
Paul Gauthier (aider)
36ca790c3d style: Sort imports alphabetically 2025-03-28 17:16:09 -10:00
Paul Gauthier (aider)
a91a8216b7 test: Add main function to test OpenRouter OAuth flow 2025-03-28 17:16:03 -10:00
Paul Gauthier (aider)
8cae7b20e7 fix: Remove unused variable found_key_env_var 2025-03-28 17:14:40 -10:00
Paul Gauthier (aider)
a537119f3d fix: Address flake8 linting errors in onboarding 2025-03-28 17:14:15 -10:00
Paul Gauthier (aider)
15fe0afe62 style: Run linter on onboarding module 2025-03-28 17:13:48 -10:00
Paul Gauthier (aider)
1b2a4db1ed feat: Add OpenRouter OAuth PKCE flow for authentication 2025-03-28 17:13:42 -10:00
Paul Gauthier (aider)
88a02723fa refactor: Extract default model selection logic to onboarding module 2025-03-28 16:54:10 -10:00
Paul Gauthier
7d013f35e2 rename 2025-03-28 16:51:58 -10:00
Paul Gauthier (aider)
e881d33bea docs: Update README cog import for homepage.py 2025-03-28 16:51:46 -10:00
Paul Gauthier (aider)
38da91becd refactor: Rename badges.py to homepage.py and update imports 2025-03-28 16:51:05 -10:00
Paul Gauthier
c99d96a700 copy 2025-03-28 16:46:08 -10:00
Paul Gauthier (aider)
fa89a6950b test: Update default Gemini model assertion 2025-03-28 16:43:39 -10:00
Paul Gauthier
cde08da282 refactor: Simplify model selection warning and analytics event logging 2025-03-28 16:42:12 -10:00
Paul Gauthier
8619bd4e84 refactor: Update auto_model_selection analytics event properties 2025-03-28 16:35:30 -10:00
Paul Gauthier (aider)
f49449b520 style: Remove trailing whitespace 2025-03-28 16:32:54 -10:00
Paul Gauthier (aider)
2fe79ac6a3 feat: Add analytics for auto-commits and auto-model selection 2025-03-28 16:32:47 -10:00
Paul Gauthier
d8830c43c5 fix: Clarify cost estimate warning for streaming/caching 2025-03-28 16:32:44 -10:00
Paul Gauthier (aider)
4ac945da70 feat: boost repomap ranking for files with mentioned path components 2025-03-28 16:23:35 -10:00
Paul Gauthier (aider)
ee0019e25f fix: Correct typo in streaming warning message 2025-03-28 16:21:05 -10:00
Paul Gauthier (aider)
f37b814570 feat: Improve streaming cost warning display 2025-03-28 16:20:23 -10:00
Paul Gauthier
e559bc8694 docs: Update model usage statistics in FAQ 2025-03-28 16:10:19 -10:00
Paul Gauthier (aider)
f7618440e7 chore: Remove unused VERTEX_AI_API_KEY entry 2025-03-28 16:10:08 -10:00
Paul Gauthier (aider)
7bc62cb674 feat: add VERTEXAI_PROJECT support for Gemini 2.5 Pro model 2025-03-28 16:09:59 -10:00
Paul Gauthier (aider)
db77e2e9b9 feat: prioritize gemini-2.5-pro when GEMINI or VERTEX keys present 2025-03-28 16:07:54 -10:00
Paul Gauthier (aider)
083b49f3c4 style: Improve testimonial card spacing and readability 2025-03-28 16:04:53 -10:00
Paul Gauthier (aider)
f3f0416d31 feat: maintain consistent height for testimonial cards 2025-03-28 16:02:54 -10:00
Paul Gauthier (aider)
775a9f86a1 style: Add CSS transitions for testimonial cards 2025-03-28 16:01:13 -10:00
Paul Gauthier (aider)
e2bfdc444a feat: replace flip animation with elegant fade transition for testimonials 2025-03-28 16:00:43 -10:00
Paul Gauthier
3c7783585e feat: Speed up testimonials rotation and add script tags 2025-03-28 15:57:53 -10:00
Paul Gauthier (aider)
761a297903 feat: include script tags in testimonials JS output 2025-03-28 15:53:53 -10:00
Paul Gauthier
6d30094a93 chore: Remove commented code from index.html 2025-03-28 15:53:47 -10:00
Paul Gauthier (aider)
d8e1816774 fix: Properly indent cog directive in index.html 2025-03-28 15:51:18 -10:00
Paul Gauthier
ae371cb362 feat: Add new testimonials to website 2025-03-28 15:51:11 -10:00
Paul Gauthier (aider)
73c46e8e24 fix: Remove unnecessary f-string in testimonials formatting 2025-03-28 15:49:14 -10:00
Paul Gauthier (aider)
ef4c40c692 style: Format code with linter 2025-03-28 15:48:48 -10:00
Paul Gauthier (aider)
04b3ada7f7 feat: dynamically load testimonials from README using cog 2025-03-28 15:48:39 -10:00
Paul Gauthier
424b43b3d3 copy 2025-03-28 15:45:04 -10:00
Paul Gauthier (aider)
9a9255d6f9 docs: add more user testimonials to README 2025-03-28 15:42:48 -10:00
Paul Gauthier
d9e52e41ff fix: Replace self.print_error with print for timeout message 2025-03-28 15:36:25 -10:00
Paul Gauthier (aider)
a038bc002a feat: Include URL in page timeout warning message 2025-03-28 15:35:01 -10:00
Paul Gauthier (aider)
fa256eb1a7 feat: Change timeout error to warning and continue scraping 2025-03-28 15:34:18 -10:00
Paul Gauthier (aider)
6689f001cf docs: Add positive user quotes to kind words section 2025-03-28 15:33:47 -10:00
Paul Gauthier
cc043bab9c Merge branch 'main' of github.com:Aider-AI/aider 2025-03-28 15:30:15 -10:00
Vasil Markoukin
5af73b1dcf feat: add repomap support for Scala
Resolves #3578
2025-03-28 10:07:57 +03:00
Paul Gauthier
85925a2dc6 copy 2025-03-27 18:40:09 -10:00
paul-gauthier
fb23b6c26f Merge pull request #3662 from schpet/markdown-headings-left 2025-03-27 11:58:31 -10:00
Peter Schilling (aider)
d5cec5f71e aider: chore: Remove unnecessary comment in mdstream.py 2025-03-27 14:08:04 -07:00
Peter Schilling (aider)
13b62e3d06 aider: fix: Use correct token type for markdown heading alignment 2025-03-27 13:59:58 -07:00
Peter Schilling (aider)
779f07f072 aider: fix: Align headings left while preserving h1/h2 styling 2025-03-27 13:58:05 -07:00
Peter Schilling (aider)
b923d63700 aider: style: Left-align markdown headings 2025-03-27 13:48:12 -07:00
Paul Gauthier
7e2dd9bc04 copy 2025-03-27 09:47:30 -10:00
Paul Gauthier
ef1f869b73 set version to 0.79.3.dev 2025-03-27 09:35:00 -10:00
Paul Gauthier
959d6334db version bump to 0.79.2 2025-03-27 09:34:57 -10:00
Paul Gauthier
d7b00b93c7 copy 2025-03-27 09:28:01 -10:00
Paul Gauthier
eec084c842 copy 2025-03-27 09:27:05 -10:00
Paul Gauthier
87b504a58f copy 2025-03-27 09:03:40 -10:00
Paul Gauthier (aider)
243d4d0727 feat: add openrouter/deepseek-chat-v3-0324 model config 2025-03-27 09:02:55 -10:00
Paul Gauthier (aider)
673acf4308 feat: enable retries for OpenRouter choices errors 2025-03-27 07:01:10 -10:00
Paul Gauthier (aider)
fd180ebff5 style: Format test_exceptions.py with linter 2025-03-27 06:58:46 -10:00
Paul Gauthier (aider)
61705ce7fc test: add coverage for OpenRouter API error detection 2025-03-27 06:58:38 -10:00
Paul Gauthier (aider)
6e1dd4474b feat: add OpenRouter API error detection 2025-03-27 06:56:28 -10:00
Matteo Landi (aider)
7924657584 feat: Improve C-x C-e editor keybinding to handle cursor and newline 2025-03-27 10:35:03 +01:00
Matteo Landi (aider)
4f5ed8ace0 feat: Add C-x C-e keybinding to edit input in external editor 2025-03-27 08:33:50 +01:00
Paul Gauthier (aider)
8737220fb6 feat: update Gemini 2.5 Pro max output tokens to 64k 2025-03-26 08:42:28 -10:00
Paul Gauthier
bcb01e8c1b Merge branch 'main' of github.com:Aider-AI/aider 2025-03-26 08:37:58 -10:00
Paul Gauthier
41f669bb89 feat: Add 'gemini' alias for gemini-2.5-pro model 2025-03-26 08:37:51 -10:00
Paul Gauthier
983bc199b3 cleanup 2025-03-26 08:37:40 -10:00
paul-gauthier
8f15269bd0 Merge pull request #3647 from iamFIREcracker/lisp-comments
Add support for Lisp-style comments in file watcher
2025-03-26 08:36:56 -10:00
Paul Gauthier (aider)
6ffe3e7067 style: Format code with linter 2025-03-26 07:11:22 -10:00
Paul Gauthier (aider)
51bf6035f7 feat: add footer safe zone for GitHub URL in confetti image 2025-03-26 07:11:15 -10:00
Paul Gauthier (aider)
249a6fc9b1 chore: remove yellow hexagon confettis below stars line 2025-03-26 07:10:36 -10:00
Paul Gauthier (aider)
c6d4337855 style: Fix whitespace in 30k-image.py 2025-03-26 07:09:28 -10:00
Paul Gauthier (aider)
9fa3636c57 feat: add safe zone for text in confetti generation 2025-03-26 07:09:20 -10:00
Paul Gauthier
a417e6e644 style: Fix trailing whitespace in SVG generation script 2025-03-26 07:07:16 -10:00
Paul Gauthier (aider)
999eb86d7a fix: Add missing math import in 30k-image.py 2025-03-26 07:01:51 -10:00
Paul Gauthier (aider)
7b97f93051 style: Reformat code with linter 2025-03-26 07:01:19 -10:00
Paul Gauthier (aider)
02bc926d75 feat: add script to generate 30k GitHub stars celebration SVG 2025-03-26 07:01:11 -10:00
Paul Gauthier
48ee3cdf98 feat: Add script to generate 30k images 2025-03-26 07:01:05 -10:00
Paul Gauthier (aider)
2556a912d3 style: Format SVG elements with consistent line breaks 2025-03-26 06:59:45 -10:00
Paul Gauthier (aider)
487674b1c5 feat: enhance celebration image with GitHub branding and animations 2025-03-26 06:59:37 -10:00
Paul Gauthier (aider)
347fbf6471 style: Format code with linter 2025-03-26 06:55:12 -10:00
Paul Gauthier (aider)
3eff70a3bc feat: enhance celebration image with decorations and glow effects 2025-03-26 06:55:04 -10:00
Paul Gauthier (aider)
ad7c708039 style: Format code with linter 2025-03-26 06:51:43 -10:00
Paul Gauthier (aider)
f993c1f22c feat: Improve celebration image with glow effect and tighter spacing 2025-03-26 06:51:36 -10:00
Paul Gauthier (aider)
75b714a1ad fix: Resolve flake8 errors in generate_celebration_image.py 2025-03-26 06:47:40 -10:00
Paul Gauthier (aider)
0636d40909 style: Fix linting issues in generate_celebration_image.py 2025-03-26 06:47:20 -10:00
Paul Gauthier (aider)
cbb3660a17 feat: Convert celebration image generator to SVG format 2025-03-26 06:47:13 -10:00
Paul Gauthier (aider)
42363beb72 style: Format code with linter 2025-03-26 06:45:10 -10:00
Paul Gauthier (aider)
efa36a7196 feat: add script to generate 30k stars celebration image 2025-03-26 06:45:03 -10:00
Matteo Landi (aider)
fab713a6a8 fix: Handle Lisp semicolon comments in watch.py 2025-03-26 13:01:53 +01:00
Matteo Landi (aider)
7d5f1143af test: Add Lisp-style comment tests to file watcher 2025-03-26 08:17:29 +01:00
Matteo Landi (aider)
f05f8df44c refactor: Add support for Lisp-style comments in file watcher 2025-03-26 08:13:09 +01:00
Paul Gauthier
c89a1a8021 set version to 0.79.2.dev 2025-03-25 15:06:16 -10:00
Paul Gauthier
db7c679e74 version bump to 0.79.1 2025-03-25 15:06:13 -10:00
Paul Gauthier (aider)
71cbbf545b style: Format test_ssl_verification.py with linter 2025-03-25 14:56:59 -10:00
Paul Gauthier (aider)
6809a7ec3e fix: mock fuzzy_match_models in SSL verification test 2025-03-25 14:56:51 -10:00
Paul Gauthier
70847a74c2 test: update model listing test to use metadata-only model 2025-03-25 14:51:24 -10:00
Paul Gauthier (aider)
6933bc8add style: Fix whitespace and formatting in test file 2025-03-25 14:46:55 -10:00
Paul Gauthier (aider)
a6cbaad5a2 test: fix test_list_models_with_direct_resource_patch to mock correct resource loading 2025-03-25 14:46:47 -10:00
Paul Gauthier (aider)
899972e22f fix: add --no-gitignore flag to failing list-models tests 2025-03-25 14:30:13 -10:00
Paul Gauthier
820b925b78 copy 2025-03-25 13:42:35 -10:00
Paul Gauthier (aider)
5457b43a89 docs: Add gemini-2.5-pro command to docs 2025-03-25 13:42:02 -10:00
Paul Gauthier (aider)
0adbc9678f fix: add mode attribute to test model metadata 2025-03-25 13:38:53 -10:00
Paul Gauthier
8d6a2ecf0e test: update model metadata test with new flags and provider format 2025-03-25 13:38:47 -10:00
Paul Gauthier (aider)
6acbd80cee style: Format test data with consistent indentation 2025-03-25 13:34:34 -10:00
Paul Gauthier (aider)
2331224157 fix: include local model metadata in fuzzy matching and update tests 2025-03-25 13:34:25 -10:00
Paul Gauthier (aider)
5d2aea434c style: Fix line length in test comment 2025-03-25 13:30:40 -10:00
Paul Gauthier (aider)
798f6983e4 style: Fix whitespace and formatting in test file 2025-03-25 13:30:19 -10:00
Paul Gauthier (aider)
a428fdc951 test: add tests for model listing with metadata sources 2025-03-25 13:30:10 -10:00
Paul Gauthier
ccacc09ff0 refactor: Reorder model listing and expand fuzzy matching 2025-03-25 13:28:53 -10:00
Paul Gauthier
40cc155aad copy 2025-03-25 11:27:25 -10:00
Paul Gauthier
645e0de971 blame 2025-03-25 11:26:54 -10:00
Paul Gauthier
325eb5968d set version to 0.79.1.dev 2025-03-25 11:15:03 -10:00
Paul Gauthier
65a7583731 version bump to 0.79.0 2025-03-25 11:14:59 -10:00
Paul Gauthier (aider)
6d8e4e8fb1 style: Fix string quote consistency in test_coder.py 2025-03-25 11:05:58 -10:00
Paul Gauthier (aider)
4716cce208 fix: pre-calculate Windows paths to avoid f-string backslash issues 2025-03-25 11:05:49 -10:00
Paul Gauthier
c67bbe6c00 copy 2025-03-25 11:04:25 -10:00
Paul Gauthier (aider)
1272e21603 style: Fix string quotes in test_coder.py 2025-03-25 11:01:54 -10:00
Paul Gauthier (aider)
7302280417 test: Add Windows path handling in file mention tests 2025-03-25 11:01:44 -10:00
Paul Gauthier (aider)
871c6d56dc refactor: Move windows_path variable outside test cases tuple 2025-03-25 11:01:21 -10:00
Paul Gauthier (aider)
eb0389938c fix: handle Windows path formatting in test cases 2025-03-25 10:59:45 -10:00
Paul Gauthier (aider)
e6c191bdc6 fix: Use raw string for backslash in f-string expression 2025-03-25 10:59:29 -10:00
Paul Gauthier
2727eb6dd7 copy 2025-03-25 10:58:00 -10:00
Paul Gauthier
821087bcce copy 2025-03-25 10:55:17 -10:00
Paul Gauthier
f1955577bc feat: Add Gemini Pro 2.5 test results to leaderboard 2025-03-25 10:43:05 -10:00
Paul Gauthier (aider)
966686cd5d feat: add gemini-2.5-pro model alias 2025-03-25 10:15:10 -10:00
Paul Gauthier
79d3d50de6 copy 2025-03-25 10:11:49 -10:00
Paul Gauthier
da59f0a0db add gemini 2.5 pro 2025-03-25 10:11:00 -10:00
Paul Gauthier
bdc00e5dd4 copy 2025-03-25 09:59:17 -10:00
Paul Gauthier
9854a4f92e feat: Add Gemini 2.5 Pro model settings 2025-03-25 09:27:36 -10:00
Paul Gauthier
33413ecfe9 copy 2025-03-25 07:01:10 -10:00
Paul Gauthier (aider)
c7e8d297a4 feat: Make SVG icons link to corresponding docs pages 2025-03-24 16:31:53 -10:00
Paul Gauthier (aider)
3619953f83 style: change icon colors from blue to green 2025-03-24 16:30:35 -10:00
Paul Gauthier (aider)
b20753c3ac style: update SVG icons to match site color scheme 2025-03-24 16:28:50 -10:00
Paul Gauthier
4fd6b7a608 initial 2025-03-24 16:26:02 -10:00
Paul Gauthier (aider)
1de8e477b9 docs: Update README to use local icon paths 2025-03-24 16:24:04 -10:00
Paul Gauthier (aider)
6c50645213 style: Reformat dl_icons.py with consistent spacing 2025-03-24 16:23:05 -10:00
Paul Gauthier (aider)
5aeea0c228 feat: add script to download SVG icons for local use 2025-03-24 16:22:57 -10:00
Paul Gauthier
86ceeb554d feat: Add script to download icons 2025-03-24 16:22:51 -10:00
Paul Gauthier (aider)
ca121e0e28 docs: update README icons to match index.html 2025-03-24 13:46:21 -10:00
Paul Gauthier (aider)
d1fef7fd17 docs: update icons in README to match index.html 2025-03-24 13:45:09 -10:00
Paul Gauthier (aider)
25d157afdc style: Move feature icons below headers in README 2025-03-24 13:42:34 -10:00
Paul Gauthier (aider)
97afe3cd0b style: Add valign=middle to README icon images 2025-03-24 13:41:42 -10:00
Paul Gauthier (aider)
2923304bdb style: improve README features section layout with larger icons 2025-03-24 13:40:07 -10:00
Paul Gauthier
10d741b6df copy 2025-03-24 13:34:35 -10:00
Paul Gauthier
12cd115ae4 Revert "docs: format features section with table layout for better readability"
This reverts commit d1def13cd1.
2025-03-24 13:33:34 -10:00
Paul Gauthier (aider)
d1def13cd1 docs: format features section with table layout for better readability 2025-03-24 13:32:53 -10:00
Paul Gauthier (aider)
127c305b1a style: increase icon sizes in README from 16px to 24px 2025-03-24 13:30:45 -10:00
Paul Gauthier (aider)
fd06db18a0 style: remove bullet points from README features section 2025-03-24 13:29:00 -10:00
Paul Gauthier (aider)
387b392c18 chore: Swap git and map icons between README and index 2025-03-24 13:27:17 -10:00
Paul Gauthier
964022f7b5 cleanupo 2025-03-24 13:25:51 -10:00
Paul Gauthier (aider)
9edc346c2c refactor: replace local icons with MDI CDN references 2025-03-24 13:25:05 -10:00
Paul Gauthier (aider)
2fe671744b style: Replace DNA icon with MDI brain icon 2025-03-24 13:22:34 -10:00
Paul Gauthier (aider)
fb8daa5607 feat: Replace inline SVGs with external icon files for GitHub compatibility 2025-03-24 13:21:07 -10:00
Paul Gauthier (aider)
65e0da72b8 style: Replace emojis with SVG icons in README 2025-03-24 13:16:27 -10:00
Paul Gauthier (aider)
3d5924e2f5 style: Increase icon size and enhance hover animation in feature cards 2025-03-24 13:12:10 -10:00
Paul Gauthier (aider)
5b2e2d630b refactor: Replace weather-cloudy icon with brain icon in feature card 2025-03-24 13:10:57 -10:00
Paul Gauthier (aider)
6a96cb6ba7 refactor: Replace SVG icon with MDI icon for images feature 2025-03-24 13:09:50 -10:00
Paul Gauthier (aider)
43ece9c644 refactor: Replace inline SVGs with Material Design Icons 2025-03-24 13:09:21 -10:00
Paul Gauthier (aider)
46cef723b7 style: Increase feature icon size and hover effect scale 2025-03-24 13:03:11 -10:00
Paul Gauthier (aider)
9b19dac569 style: Update feature icons to use secondary color for better distinction 2025-03-24 13:01:20 -10:00
Paul Gauthier (aider)
54eb642726 style: replace Git icon with standard Git branching icon 2025-03-24 12:59:10 -10:00
Paul Gauthier (aider)
5bb664657c fix: Replace broken cloud icon with proper Material Design icon 2025-03-24 12:56:57 -10:00
Paul Gauthier (aider)
dea4d16e87 style: replace emoji icons with material design SVGs and hover effects 2025-03-24 12:54:19 -10:00
Paul Gauthier
059cd23543 feat: add DeepSeek V3 (0324) to polyglot leaderboard 2025-03-24 12:44:25 -10:00
Paul Gauthier
502b8630a2 copy 2025-03-22 18:38:10 -07:00
Paul Gauthier (aider)
b2444b43a6 refactor: Pass placeholder to _generic_chat_command instead of special-casing context 2025-03-22 18:36:10 -07:00
Paul Gauthier (aider)
be87ff0193 feat: Set placeholder with args in /context command 2025-03-22 18:33:50 -07:00
Paul Gauthier (aider)
c7fe86021c style: Replace single quotes with double quotes in main.py 2025-03-22 18:32:32 -07:00
Paul Gauthier (aider)
99b0209c89 feat: Add placeholder parameter to SwitchCoder 2025-03-22 18:32:25 -07:00
Paul Gauthier (aider)
4d61b596ff style: Remove trailing whitespace in commands.py 2025-03-22 18:15:17 -07:00
Paul Gauthier (aider)
0549e7079d feat: Add /edit as an alias for /editor command 2025-03-22 18:15:11 -07:00
Paul Gauthier
b591b64d3f refactor: Update context handling and repo map logic 2025-03-22 16:20:23 -07:00
omarcinkonis
3447f06208 feat: Add --add-gitignore-files flag 2025-03-23 01:15:16 +02:00
Paul Gauthier (aider)
a3377686fa style: Remove unnecessary blank line in repomap.py 2025-03-22 14:59:01 -07:00
Paul Gauthier (aider)
d23bba5d9f feat: Increase weight for snake_case and camelCase identifiers 2025-03-22 14:58:56 -07:00
Paul Gauthier
5e8fc3e4c8 refactor: Simplify and optimize weight calculation in RepoMap 2025-03-22 14:58:55 -07:00
Paul Gauthier (aider)
04e76ad6ff chore: Remove unused import from context_coder.py 2025-03-22 14:19:29 -07:00
Paul Gauthier (aider)
3a18a9296b style: Format code with consistent spacing in comments 2025-03-22 14:19:10 -07:00
Paul Gauthier (aider)
3e9a6ffbca chore: Comment out debug print statements in ContextCoder 2025-03-22 14:19:06 -07:00
Paul Gauthier
0b06e56182 refactor: Simplify file mention handling logic in ContextCoder 2025-03-22 14:19:05 -07:00
Paul Gauthier (aider)
fb5a32f429 style: Fix trailing whitespace and comma consistency 2025-03-22 14:16:55 -07:00
Paul Gauthier (aider)
75dfd4505b feat: Add /context command for contextually-aware edits 2025-03-22 14:16:49 -07:00
Paul Gauthier
5661d1428e refactor: Enhance file mention handling and context coder logic 2025-03-22 13:57:15 -07:00
Paul Gauthier (aider)
f543c1ee1c style: Break long line in test_coder.py to comply with flake8 E501 2025-03-22 13:37:11 -07:00
Paul Gauthier
74254cdbd5 feat: Add ContextCoder for identifying relevant files in requests 2025-03-22 13:36:58 -07:00
Paul Gauthier (aider)
a5c8c534c1 fix: Remove unnecessary f-string prefix in test case 2025-03-22 13:26:19 -07:00
Paul Gauthier (aider)
24159dda58 style: Format test_coder.py for readability 2025-03-22 13:26:03 -07:00
Paul Gauthier (aider)
ad0a2b3260 test: Add test cases for bold format file mentions 2025-03-22 13:25:58 -07:00
Paul Gauthier (aider)
7e51c68fde style: Format code according to linter rules 2025-03-22 13:23:52 -07:00
Paul Gauthier (aider)
3b376a15b7 test: Add comprehensive test for get_file_mentions with various formats 2025-03-22 13:23:46 -07:00
Paul Gauthier (aider)
8e5f311708 style: Remove trailing whitespace in base_prompts.py 2025-03-22 08:22:39 -07:00
Paul Gauthier (aider)
02c48fa8c3 style: Break long line in base_prompts.py to comply with flake8 E501 2025-03-22 08:22:20 -07:00
Paul Gauthier
51fa2eb103 feat: Add overeager model setting and prompt for precise request handling 2025-03-22 08:22:07 -07:00
Paul Gauthier (aider)
0fd08fe667 chore: Add overeager flag to all Claude 3.7 Sonnet model configurations 2025-03-22 08:20:53 -07:00
Paul Gauthier
0da65c6169 chore: Add overeager flag to anthropic/claude-3-7-sonnet-20250219 model settings 2025-03-22 08:20:51 -07:00
Paul Gauthier (aider)
d2c6db0680 style: Replace single quotes with double quotes in base_coder.py 2025-03-22 08:16:14 -07:00
Paul Gauthier (aider)
5b73938e29 refactor: improve model prompt selection logic in fmt_system_prompt 2025-03-22 08:16:07 -07:00
Paul Gauthier
2540933921 refactor: Simplify lazy_prompt assignment in fmt_system_prompt 2025-03-22 08:16:06 -07:00
Paul Gauthier
e75e2272f7 initial 2025-03-22 08:09:26 -07:00
Paul Gauthier
64b8fc80e8 refactor: Extract prompt prefix logic in InputOutput class 2025-03-21 20:40:29 -07:00
Paul Gauthier (aider)
033c149737 style: Break long comment line to comply with flake8 E501 2025-03-21 20:25:14 -07:00
Paul Gauthier
a6bce6d5f1 refactor: Change multiline input prompt from ". " to "> " 2025-03-21 20:25:04 -07:00
Paul Gauthier
94016c87fd refactor: Simplify asciinema command in tmux_record.sh 2025-03-21 20:19:08 -07:00
Paul Gauthier (aider)
4b6424f631 style: Format code with consistent spacing and indentation 2025-03-21 15:24:26 -07:00
Paul Gauthier (aider)
9bf70d8641 refactor: Enhance git blame detection with specific similarity thresholds 2025-03-21 15:24:22 -07:00
Paul Gauthier (aider)
0eb26fffe1 style: Improve typography with scale, spacing, and mobile optimizations 2025-03-21 13:56:07 -07:00
Paul Gauthier
279e7e1456 style: Adjust hero h1 font size to 2.5rem 2025-03-21 13:56:05 -07:00
Paul Gauthier (aider)
099fc7b31e style: Improve typography with better font stack, spacing, and hierarchy 2025-03-21 13:50:02 -07:00
Paul Gauthier (aider)
f1e070cc1e style: Format description text inline with title links 2025-03-21 13:30:39 -07:00
Paul Gauthier (aider)
36f2458f2e feat: Add page descriptions to table of contents with inline styling 2025-03-21 13:29:22 -07:00
Paul Gauthier
29db4231ee copy 2025-03-21 13:27:02 -07:00
Paul Gauthier (aider)
74926578a2 chore: Exclude homepage from main navigation 2025-03-21 13:21:32 -07:00
Paul Gauthier
5b8ae368bd docs: Remove redundant sections from index.md 2025-03-21 13:21:31 -07:00
Paul Gauthier (aider)
b3e368237e fix: Simplify table of contents Liquid syntax to avoid errors 2025-03-21 13:18:23 -07:00
Paul Gauthier (aider)
3ee5dc131d feat: Add hierarchical table of contents to documentation homepage 2025-03-21 13:17:34 -07:00
Paul Gauthier
2765d2fe66 docs: Add initial website documentation index 2025-03-21 13:10:59 -07:00
Paul Gauthier
f50fee407a copy 2025-03-21 12:13:32 -07:00
Paul Gauthier (aider)
f3295d7c1d style: Swap badge colors for Tokens/week and Singularity metrics 2025-03-21 12:12:54 -07:00
Paul Gauthier (aider)
dd02803f1f style: Swap colors of tokens/week and singularity badges 2025-03-21 12:12:29 -07:00
Paul Gauthier
d4e44d7555 copy 2025-03-21 12:09:59 -07:00
Paul Gauthier
f2b8d36d9e set version to 0.78.1.dev 2025-03-21 11:57:37 -07:00
Paul Gauthier
8d43d4ee21 version bump to 0.78.0 2025-03-21 11:57:34 -07:00
Paul Gauthier
b54af5dbe3 copy 2025-03-21 11:55:23 -07:00
Paul Gauthier (aider)
4980e901a0 feat: Add plain git log to update-history script context 2025-03-21 11:38:46 -07:00
Paul Gauthier
cd32311c1f copy 2025-03-21 11:37:49 -07:00
Paul Gauthier (aider)
b97997b009 fix: Remove unused imports in badges.py 2025-03-21 11:36:43 -07:00
Paul Gauthier (aider)
4aad9fbdd4 style: Format code with linter 2025-03-21 11:36:28 -07:00
Paul Gauthier (aider)
ac2439e25b feat: add 24-hour cache for BigQuery download stats 2025-03-21 11:36:24 -07:00
Paul Gauthier (aider)
ddc1556ae0 style: Reformat code to comply with linter rules 2025-03-21 11:25:13 -07:00
Paul Gauthier (aider)
0d75c4d0e3 test: add exponential backoff retry for help command test 2025-03-21 11:25:10 -07:00
Paul Gauthier
f3a042dcdf refactor: Simplify exception handling in platform info retrieval 2025-03-21 11:24:10 -07:00
Paul Gauthier (aider)
f9e0a99064 style: Remove trailing whitespace in base_coder.py 2025-03-21 11:23:57 -07:00
Paul Gauthier (aider)
d6906fb100 fix: Handle KeyError in platform info retrieval with clear message 2025-03-21 11:23:50 -07:00
Paul Gauthier (aider)
821662abcb style: Remove trailing whitespace in base_coder.py 2025-03-21 11:22:00 -07:00
Paul Gauthier (aider)
cf496abec0 fix: Handle platform info retrieval errors gracefully 2025-03-21 11:21:53 -07:00
Paul Gauthier
e245d39216 copy 2025-03-21 11:18:42 -07:00
paul-gauthier
44f87c2c17 Merge pull request #3553 from lentil32/main
fix: Redundant warning when `AWS_PROFILE` set for Bedrock
2025-03-21 11:16:27 -07:00
Paul Gauthier
a6fd0de762 copy 2025-03-21 11:16:10 -07:00
Carles Sala (aider)
072ecba4c5 feat: Add commands to switch main, editor, and weak models 2025-03-21 11:09:33 -07:00
Paul Gauthier (aider)
3ad5d75bee refactor: Remove unused variable in test_main.py 2025-03-21 11:05:35 -07:00
Paul Gauthier (aider)
8679c425e0 style: Remove trailing whitespace in test_main.py 2025-03-21 11:04:58 -07:00
Paul Gauthier (aider)
1ec257278e refactor: Move resolve_aiderignore_path to top level and add tests 2025-03-21 11:04:51 -07:00
paul-gauthier
ffe89362ab Merge pull request #3478 from mopemope/fix-ignore
refactor: enhance --aiderignore argument to resolve absolute and relative paths
2025-03-21 11:02:04 -07:00
paul-gauthier
a82c0f9e49 Merge pull request #3485 from codefromthecrypt/patch-1
ollama: suggest higher minimum context length
2025-03-21 09:36:06 -07:00
Paul Gauthier
413271e82a copy 2025-03-21 09:23:45 -07:00
Paul Gauthier (aider)
60b926b698 refactor: Remove redundant imports in completions methods 2025-03-21 09:21:59 -07:00
Paul Gauthier (aider)
98be67442e chore: Run linter and fix import order in commands.py 2025-03-21 09:21:01 -07:00
Paul Gauthier (aider)
8e9c75b6f8 chore: Add CommandCompletionException import to commands.py 2025-03-21 09:20:54 -07:00
Paul Gauthier (aider)
8c65604b29 style: Format docstring and multiline condition for better readability 2025-03-21 09:20:22 -07:00
Paul Gauthier (aider)
930923c211 style: Format code to comply with linter rules 2025-03-21 09:19:34 -07:00
Paul Gauthier (aider)
710d540dcd feat: Add CommandCompletionException class for autocompletion handling 2025-03-21 09:19:29 -07:00
Paul Gauthier (aider)
ddef8c2499 refactor: Add CommandCompletionException for autocompletion handling 2025-03-21 09:19:13 -07:00
Paul Gauthier
c6289c2bea refactor: Add comment for command completion handling in AutoCompleter 2025-03-21 09:19:12 -07:00
Paul Gauthier (aider)
b624bb6fb8 refactor: raise exceptions to use normal autocompleter 2025-03-21 09:18:22 -07:00
Paul Gauthier (aider)
4e03f4165d feat: Add autocompletion for /ask, /code and /architect commands 2025-03-21 09:16:26 -07:00
paul-gauthier
2f6ea2f499 Merge pull request #3579 from marcomayer/main
feat: vi-like behavior when pressing enter in multiline-mode
2025-03-21 09:06:52 -07:00
Paul Gauthier
8c47d1f9c0 copy 2025-03-21 09:03:48 -07:00
Paul Gauthier (aider)
e31be8d3c9 feat: Print source used in get_total_downloads function 2025-03-21 09:01:50 -07:00
Paul Gauthier
2069ad62d1 refactor: Remove badges markdown generation from main function 2025-03-21 09:01:48 -07:00
Paul Gauthier (aider)
2993e285c8 style: Format code in badges.py for better readability 2025-03-21 08:58:10 -07:00
Paul Gauthier (aider)
4ee9cee52a refactor: extract credentials_path from USE_BIGQUERY environment variable 2025-03-21 08:58:04 -07:00
Paul Gauthier (aider)
0e555699bd feat: exclude CI downloads from PyPI download count 2025-03-21 08:53:59 -07:00
Paul Gauthier (aider)
aad6c63206 style: Format code according to linter rules 2025-03-21 08:52:04 -07:00
Paul Gauthier (aider)
8c78e09f03 feat: Add BigQuery support for fetching PyPI download statistics 2025-03-21 08:52:00 -07:00
Paul Gauthier (aider)
25d1eac0f5 docs: Add Ctrl-Y keybinding to Emacs commands documentation 2025-03-21 08:48:28 -07:00
Paul Gauthier
26daf2cd31 copy 2025-03-21 07:38:48 -07:00
Paul Gauthier
280bd44ba3 copy 2025-03-21 07:33:00 -07:00
Paul Gauthier
c9d87fef71 copy 2025-03-21 07:31:00 -07:00
Paul Gauthier (aider)
649742f02a style: Format code according to linter rules 2025-03-21 07:27:57 -07:00
Paul Gauthier (aider)
245ee84c2d feat: Add OpenRouter support to set_thinking_tokens method 2025-03-21 07:27:52 -07:00
Paul Gauthier
76c09205d0 copy 2025-03-20 19:10:59 -07:00
Paul Gauthier
d365b5248c copy 2025-03-20 19:08:21 -07:00
Paul Gauthier
3dd91bc6f2 copy 2025-03-20 15:29:47 -07:00
Paul Gauthier (aider)
3dc5a48fcc fix: Handle newline in git commit message assertion 2025-03-20 15:23:41 -07:00
Paul Gauthier (aider)
bff077f855 style: Remove trailing whitespace in test_repo.py 2025-03-20 15:23:20 -07:00
Paul Gauthier (aider)
6022b09437 fix: Move pre-commit hook creation after initial commit in test 2025-03-20 15:23:15 -07:00
Paul Gauthier (aider)
62b52a78fe style: Remove trailing whitespace in test_repo.py 2025-03-20 15:22:07 -07:00
Paul Gauthier (aider)
e33dc9355d test: Add test for --git-commit-verify option 2025-03-20 15:22:03 -07:00
Paul Gauthier
834da07736 copy 2025-03-20 15:14:08 -07:00
Paul Gauthier (aider)
fe795cc2d5 chore: Change default git commit verify flag to False 2025-03-20 15:08:44 -07:00
Paul Gauthier (aider)
593de47438 docs: Add --no-git-commit-verify flag documentation 2025-03-20 15:07:51 -07:00
Paul Gauthier (aider)
ac231e43ad feat: Add --git-commit-verify flag to control git hook verification 2025-03-20 15:06:44 -07:00
Paul Gauthier
aca64071c8 copy 2025-03-20 14:31:03 -07:00
Paul Gauthier (aider)
5c205cd753 fix: use rounding instead of truncation for star counts 2025-03-20 14:29:57 -07:00
Paul Gauthier (aider)
57ce2c48b8 fix: round GitHub stars to whole numbers in HTML output 2025-03-20 14:28:58 -07:00
Paul Gauthier
0937b34983 chore: Update badges and stats in README and website 2025-03-20 14:25:24 -07:00
Paul Gauthier (aider)
291c4eb258 style: Remove trailing whitespace and standardize string quotes 2025-03-20 14:23:07 -07:00
Paul Gauthier (aider)
a8744708a0 feat: Add HTML-formatted badges generation function 2025-03-20 14:23:02 -07:00
Paul Gauthier (aider)
3010b94a64 refactor: move tooltip text to global constants 2025-03-20 14:21:35 -07:00
Paul Gauthier (aider)
9c4d173b1f style: Add whitespace around arithmetic operators in format_number 2025-03-20 14:20:45 -07:00
Paul Gauthier (aider)
cca155c5c6 refactor: Move tokens/week value to global constant TOKENS_PER_WEEK 2025-03-20 14:20:09 -07:00
Paul Gauthier (aider)
a93e7108e6 style: Format code with linter 2025-03-20 14:18:50 -07:00
Paul Gauthier (aider)
d26df6c178 feat: add get_badges_md() function to generate badges markdown 2025-03-20 14:18:41 -07:00
Paul Gauthier
e915964d81 style: Add noqa comment to badges.py for flake8 compliance 2025-03-20 14:18:36 -07:00
Paul Gauthier (aider)
1304ca2425 style: Remove trailing whitespace in badges.py 2025-03-20 14:15:14 -07:00
Paul Gauthier (aider)
894f6b6d1d feat: Add function to generate markdown badges with formatted stats 2025-03-20 14:15:08 -07:00
Paul Gauthier (aider)
6605a9b22a style: Remove trailing whitespace in badges.py 2025-03-20 14:12:34 -07:00
Paul Gauthier (aider)
b5d963d151 fix: properly identify latest release by parsing version numbers 2025-03-20 14:12:31 -07:00
Paul Gauthier (aider)
8f840ae0b1 refactor: Rename function and emphasize LATEST release in output 2025-03-20 14:11:08 -07:00
Paul Gauthier (aider)
7942ca9206 style: Format code and fix import order in badges.py 2025-03-20 14:10:43 -07:00
Paul Gauthier (aider)
a5614bfe40 feat: Add Aider contribution percentage to badges script 2025-03-20 14:10:39 -07:00
Paul Gauthier (aider)
eaac00ad3f style: Format code according to linter rules 2025-03-20 14:07:58 -07:00
Paul Gauthier (aider)
6687cc9465 feat: Add GitHub stars fetching to badges script 2025-03-20 14:07:52 -07:00
Paul Gauthier (aider)
5b9464ed31 style: Format code with linter in badges.py 2025-03-20 14:06:20 -07:00
Paul Gauthier (aider)
4c7d99b26c feat: Add .env support for PEPY_API_KEY in badges script 2025-03-20 14:06:16 -07:00
Paul Gauthier
5bf248164a chore: Make badges.py executable 2025-03-20 14:06:15 -07:00
Paul Gauthier (aider)
4eeae967db chore: Remove unused json import in badges.py 2025-03-20 14:05:38 -07:00
Paul Gauthier (aider)
0ac2a85a3e style: Reformat code and fix import order in badges.py 2025-03-20 14:05:26 -07:00
Paul Gauthier (aider)
71884e58d4 feat: Add script to fetch total downloads from pepy.tech API 2025-03-20 14:05:22 -07:00
Paul Gauthier
37b2f9617c feat: Add badges generation script 2025-03-20 14:05:21 -07:00
Paul Gauthier (aider)
01af14693c chore: Add Jekyll front matter to index.html for templating support 2025-03-20 13:50:37 -07:00
Paul Gauthier
90e2929fc5 copy 2025-03-20 13:47:13 -07:00
Paul Gauthier (aider)
8f260aa544 docs: Add tooltips to README badges 2025-03-20 13:44:34 -07:00
Paul Gauthier (aider)
ee72a09278 feat: Add tooltips to explain stats badges 2025-03-20 13:43:16 -07:00
Paul Gauthier
e6a422b6c2 copy 2025-03-20 11:45:50 -07:00
Paul Gauthier
d29aff919b copy 2025-03-20 11:20:01 -07:00
Paul Gauthier (aider)
5023bbe8c0 style: Fix lint issues by removing unused import and adding whitespace 2025-03-20 11:09:15 -07:00
Paul Gauthier
c08e3daf29 slim down logo svg 2025-03-20 11:08:31 -07:00
Paul Gauthier (aider)
9cf194b52b style: Format code with consistent spacing and line breaks 2025-03-20 11:07:55 -07:00
Paul Gauthier (aider)
1b0ba71ef0 refactor: Subset font to include only needed characters in SVG logo 2025-03-20 11:07:51 -07:00
Paul Gauthier
de5ab102b7 refactor: Update internal links to use relative paths 2025-03-20 11:04:16 -07:00
Paul Gauthier
4e2c7c3329 copy 2025-03-20 09:28:44 -07:00
Paul Gauthier (aider)
b62840c347 feat: Add SVG logo with progressive enhancement to Jekyll pages 2025-03-20 08:11:48 -07:00
Paul Gauthier
674379fe30 blame includes home page 2025-03-20 08:09:56 -07:00
Paul Gauthier
004ffb9f60 copy 2025-03-20 08:07:56 -07:00
Paul Gauthier (aider)
bed836b15a feat: Add progressive enhancement for SVG logo in header 2025-03-20 08:06:28 -07:00
Paul Gauthier
bbf219ecd2 refactor: Adjust Gaussian blur stdDeviation in SVG filter 2025-03-20 08:00:30 -07:00
Paul Gauthier (aider)
022bf4bdcc feat: Make SVG logo blur effect more transparent 2025-03-20 07:57:40 -07:00
Paul Gauthier
d8ed90a2c0 refactor: Adjust SVG glow filter parameters in logo_svg.py 2025-03-20 07:56:44 -07:00
Paul Gauthier (aider)
e5d9d91b01 style: Extend horizontal glow effect in logo SVG filter 2025-03-20 07:54:45 -07:00
Paul Gauthier (aider)
c8f6576cd7 feat: Add glow effect to SVG logo using Gaussian blur filter 2025-03-20 07:54:02 -07:00
Paul Gauthier
14f140fdc5 copy 2025-03-19 21:56:42 -07:00
Paul Gauthier (aider)
fdbe169423 refactor: Make SVG logo background transparent instead of white 2025-03-19 21:56:21 -07:00
Paul Gauthier (aider)
e4ec370e2a feat: Add bash syntax highlighting to code block using Prism.js 2025-03-19 21:54:34 -07:00
Paul Gauthier
dfbdb43c31 copy 2025-03-19 21:48:16 -07:00
Paul Gauthier (aider)
9b8606535d style: Vertically center text in SVG logo 2025-03-19 21:46:25 -07:00
Paul Gauthier (aider)
0b79fd0a8e style: Center text horizontally in SVG logo 2025-03-19 21:45:58 -07:00
Paul Gauthier
f032606f32 style: Change background color to black in SVG logo 2025-03-19 21:45:56 -07:00
Paul Gauthier
b652a8416d copy 2025-03-19 21:43:33 -07:00
Paul Gauthier
8f7b50f3df copy 2025-03-19 21:43:09 -07:00
Paul Gauthier
2adafad4e2 copy 2025-03-19 21:42:39 -07:00
Paul Gauthier (aider)
99a5862bc9 chore: Remove unused Path import from logo_svg.py 2025-03-19 21:40:48 -07:00
Paul Gauthier
6dda54f431 chore: Remove unused .logo-svg CSS class and add new logo SVG file 2025-03-19 21:40:37 -07:00
Paul Gauthier (aider)
8e187a913f docs: Add Aider logo to README.md 2025-03-19 21:38:48 -07:00
Paul Gauthier (aider)
8935c87d7a style: Format code with consistent quotes and line breaks 2025-03-19 21:36:20 -07:00
Paul Gauthier (aider)
c6e544750b feat: Add script to generate SVG logo with embedded font 2025-03-19 21:36:15 -07:00
Paul Gauthier
c14d406f59 feat: Add script for generating logo in SVG format 2025-03-19 21:36:14 -07:00
Paul Gauthier
4edfe39449 copy 2025-03-19 21:28:44 -07:00
Paul Gauthier (aider)
1239d77c88 docs: Add icons to feature list in README 2025-03-19 21:28:33 -07:00
Paul Gauthier
7d4b0b20e8 copy 2025-03-19 21:26:07 -07:00
Paul Gauthier
1f42cdd762 copy 2025-03-19 21:24:37 -07:00
Paul Gauthier (aider)
f182b81e0f docs: Add feature documentation links to README 2025-03-19 21:22:52 -07:00
Paul Gauthier
3f2256d4c4 rename 2025-03-19 21:21:29 -07:00
Paul Gauthier (aider)
e4b1b12b26 docs: Update README with polished content from index.html 2025-03-19 21:19:22 -07:00
Paul Gauthier
35477e0a5a docs: Add README.new.md 2025-03-19 21:19:21 -07:00
Paul Gauthier
f752c9c8a9 copy 2025-03-19 21:16:17 -07:00
Paul Gauthier (aider)
d5dd7b0a96 chore: Update badge text from "Codes Itself" to "Singularity" in README.md 2025-03-19 21:16:12 -07:00
Paul Gauthier
4e16eba6b0 docs: Update copy/paste feature description and button labels 2025-03-19 21:16:06 -07:00
Paul Gauthier (aider)
4f129e1c9d feat: Add feature cards for voice-to-code, linting/testing, and copy/paste 2025-03-19 21:06:04 -07:00
Paul Gauthier
ffbbb5539d docs: Update supported languages and API key placeholders in index.html 2025-03-19 21:06:03 -07:00
Paul Gauthier (aider)
30e5b48461 feat: Add CTA section to homepage with install and docs buttons 2025-03-19 20:45:37 -07:00
Paul Gauthier
0dc31011f5 chore: Update website text and remove redundant content 2025-03-19 20:45:35 -07:00
Paul Gauthier
479df00a3b chore: Update badge label from "Codes Itself" to "Inception" 2025-03-19 20:38:12 -07:00
Paul Gauthier (aider)
06f3e15ce9 style: Reduce vertical space between video and badges on mobile 2025-03-19 20:35:01 -07:00
Paul Gauthier
2f7fde163a docs: Update website copy for clarity and consistency 2025-03-19 20:33:06 -07:00
Paul Gauthier (aider)
71d26c2ec5 style: Reduce hero section padding on mobile devices 2025-03-19 20:32:18 -07:00
Paul Gauthier
acf8b40a28 copy 2025-03-19 18:07:56 -07:00
Paul Gauthier (aider)
318027d9e1 docs: Add icons to README badges 2025-03-19 17:49:30 -07:00
Paul Gauthier (aider)
3116e833a7 docs: Add "Codes Itself" badge to README 2025-03-19 17:46:39 -07:00
Paul Gauthier (aider)
1cb71b33fa feat: Rename "Self-Coded" badge to "Codes Itself" and link to HISTORY.html 2025-03-19 17:45:47 -07:00
Paul Gauthier (aider)
7e76b8d0c3 style: Replace self-coded icon with brain and increase stats container width 2025-03-19 17:44:51 -07:00
Paul Gauthier (aider)
e0e78cd879 feat: Add "Self-Coded: 72%" badge to stats section 2025-03-19 17:43:01 -07:00
Paul Gauthier
82e4dcf40f copy 2025-03-19 17:07:31 -07:00
Paul Gauthier
22b77ad14f copy 2025-03-19 17:04:30 -07:00
Paul Gauthier
9b23975f09 copy 2025-03-19 17:00:07 -07:00
Paul Gauthier (aider)
584c3a65f5 docs: Add FAQ link to More Info resources 2025-03-19 16:58:42 -07:00
Paul Gauthier
db4d6c4419 docs: Update feature titles and descriptions on website 2025-03-19 16:58:40 -07:00
Paul Gauthier
92cb1c60d1 copy 2025-03-19 16:05:34 -07:00
Paul Gauthier (aider)
ca72d0ca5b style: Standardize feature card title capitalization 2025-03-19 14:24:31 -07:00
Paul Gauthier (aider)
ba7f245d88 fix: Center hero content horizontally on narrow screens 2025-03-19 14:17:57 -07:00
Marco Mayer
ef67ba5cf4 feat: vi-like behavior when pressing enter in multiline-mode while in vi normal/navigation-mode 2025-03-19 22:11:26 +01:00
Paul Gauthier (aider)
1f630a03b9 style: Update feature cards with blue underline instead of shaded header 2025-03-19 14:09:21 -07:00
Paul Gauthier (aider)
5f71cdc497 style: Remove blue vertical line from hero content 2025-03-19 14:08:32 -07:00
Paul Gauthier (aider)
b85226b8a5 style: Adjust hero section alignment, spacing, and visual hierarchy 2025-03-19 14:07:43 -07:00
Paul Gauthier (aider)
af4acccf9f style: Update video container background to match gradient better 2025-03-19 14:03:24 -07:00
Paul Gauthier (aider)
3a3bc9898d fix: maintain video aspect ratio using padding-bottom technique 2025-03-19 13:59:06 -07:00
Paul Gauthier (aider)
5349c99c74 fix: Add aspect-ratio to video container and preload metadata 2025-03-19 13:55:50 -07:00
Paul Gauthier
68d175f1c5 style: Update section title capitalization in index.html 2025-03-19 13:55:48 -07:00
Paul Gauthier
352f1f31d2 copy 2025-03-19 13:49:20 -07:00
Paul Gauthier (aider)
c51ef714ad style: Remove whitespace around badge <img> tags in README.md 2025-03-19 13:49:12 -07:00
Paul Gauthier
5ae68a3c48 docs: Update README.md with clearer project description 2025-03-19 13:49:11 -07:00
Paul Gauthier
d2c7e51fac copy 2025-03-19 13:47:16 -07:00
Paul Gauthier (aider)
d9aa3fb973 style: Increase top margin of stats-container to 50px 2025-03-19 13:44:43 -07:00
Paul Gauthier
e1b79ddd69 style: Adjust hero h1 font size to 2.5rem 2025-03-19 13:43:30 -07:00
Paul Gauthier (aider)
3270a8737c refactor: Move stats-container below hero-grid in HTML layout 2025-03-19 13:42:58 -07:00
Paul Gauthier
cbe8d320fa style: Update hero heading to lowercase in website index.html 2025-03-19 13:42:57 -07:00
Paul Gauthier (aider)
78ce63e71e refactor: Move hero heading into 40% split container 2025-03-19 13:38:53 -07:00
Paul Gauthier (aider)
1bb396bea5 feat: implement two-column layout for More Information section 2025-03-19 13:37:13 -07:00
Paul Gauthier (aider)
16304beeab style: Keep buttons side-by-side on narrow screens with responsive CSS 2025-03-19 13:34:28 -07:00
Paul Gauthier
d2cfd541ed margin 2025-03-19 13:31:54 -07:00
Paul Gauthier
8b1aaf690c gradient 2025-03-19 13:31:00 -07:00
Paul Gauthier
f1ca8f594c style: Adjust gradient colors in testimonial-card 2025-03-19 13:26:59 -07:00
Paul Gauthier (aider)
78d2e0aa25 style: Reduce mobile nav bar height and adjust logo size 2025-03-19 13:08:07 -07:00
Paul Gauthier
4a3d239082 copy 2025-03-19 12:47:22 -07:00
Paul Gauthier
94eaee8d39 copy 2025-03-19 12:46:28 -07:00
Paul Gauthier (aider)
471f03ab4f style: Reduce feature card padding on mobile devices 2025-03-19 12:45:18 -07:00
Paul Gauthier
9df9af822c style: Adjust code block font size in home.css 2025-03-19 12:45:16 -07:00
Paul Gauthier (aider)
7b49623b31 style: Reduce font sizes for mobile responsiveness 2025-03-19 12:41:25 -07:00
Paul Gauthier
12bda2b8d0 copy 2025-03-19 12:37:59 -07:00
Paul Gauthier
2022f214aa Merge branch 'home' 2025-03-19 12:37:42 -07:00
Paul Gauthier (aider)
786738ba81 refactor: Move CSS styles to separate home.css file 2025-03-19 12:36:02 -07:00
Paul Gauthier
e4f1b59475 feat: Add home.css for website assets 2025-03-19 12:33:55 -07:00
Paul Gauthier
7cb302f571 move home to / 2025-03-19 12:32:54 -07:00
Paul Gauthier
8bae91cf6e initial 2025-03-19 12:30:30 -07:00
Paul Gauthier
44a145fc86 copy 2025-03-19 12:30:21 -07:00
Paul Gauthier
a1fa62adef copy 2025-03-19 12:28:51 -07:00
Paul Gauthier (aider)
fe247a8f6a style: Lighten sidebar gradient color in head_custom.html 2025-03-19 12:24:46 -07:00
Paul Gauthier (aider)
54e70eff13 style: Lighten sidebar gradient color in head_custom.html 2025-03-19 12:23:45 -07:00
Paul Gauthier (aider)
5453f4a85d style: Update sidebar gradient end color to #F5F6FA 2025-03-19 12:19:22 -07:00
Paul Gauthier (aider)
f2654390e7 style: Add gradient to sidebar matching hero section 2025-03-19 12:18:03 -07:00
Paul Gauthier
777903f7da copy 2025-03-19 12:14:29 -07:00
Paul Gauthier (aider)
2f7892561f style: update .site-title font to match "aider" logo styling 2025-03-19 12:13:36 -07:00
Paul Gauthier (aider)
6d79000d6c style: Add custom CSS for .site-title in head_custom.html 2025-03-19 12:11:20 -07:00
Paul Gauthier (aider)
284911cd6b style: Increase font size in Getting Started section for better readability 2025-03-19 12:04:46 -07:00
Paul Gauthier
70b6da108c docs: Update testimonials section title in home.html 2025-03-19 12:04:45 -07:00
Paul Gauthier (aider)
6de3b2b262 style: Adjust testimonial card gradient to use more blue with hint of green 2025-03-19 12:03:45 -07:00
Paul Gauthier (aider)
e7554c5413 refactor: Remove quotes from testimonial text in home.html 2025-03-19 11:59:34 -07:00
Paul Gauthier (aider)
2facd2ab16 style: Add fancy typographic quotes to testimonials using CSS 2025-03-19 11:59:19 -07:00
Paul Gauthier (aider)
20ba252c56 feat: Add gradient backgrounds to testimonial cards 2025-03-19 11:58:15 -07:00
Paul Gauthier (aider)
eba123e381 style: Update hero gradient to incorporate blue palette and green logo color 2025-03-19 11:45:59 -07:00
Paul Gauthier (aider)
3bb57af331 style: Darken main "aider" logo font color 2025-03-19 11:44:02 -07:00
Paul Gauthier
aeb991fdf3 chore: Update logo text to lowercase in home.html 2025-03-19 11:44:00 -07:00
Paul Gauthier
75a14380ef refactor: Update font path in home.html to use assets directory 2025-03-19 11:42:55 -07:00
Paul Gauthier (aider)
0aeecf4d9a style: Update "Aider" logo to use terminal font and green color 2025-03-19 11:39:18 -07:00
Paul Gauthier (aider)
447347c760 style: Enhance hero section background with richer gradient and effects 2025-03-19 11:36:43 -07:00
Paul Gauthier
79619de045 docs: Update language support description in home.html 2025-03-19 11:36:42 -07:00
Paul Gauthier (aider)
1af423e2df style: Adjust hero section layout and background for better visual emphasis 2025-03-19 11:27:41 -07:00
Paul Gauthier
92fcf9a159 badges in main readme 2025-03-19 11:23:33 -07:00
Paul Gauthier (aider)
d1b1cc5c14 docs: Add stats badges to README.md 2025-03-19 11:19:17 -07:00
Paul Gauthier (aider)
b9514ad82a style: Update language support icon to use styled "</>" 2025-03-19 11:15:35 -07:00
Paul Gauthier (aider)
7b3411b236 docs: Update feature card to highlight language support 2025-03-19 11:13:23 -07:00
Paul Gauthier (aider)
915e87e88e feat: Make feature cards fully clickable with external links 2025-03-19 11:12:08 -07:00
Paul Gauthier (aider)
face505f0d style: Enhance feature card visual hierarchy with borders and spacing 2025-03-19 11:10:27 -07:00
Paul Gauthier
dada307e79 refactor: Simplify feature titles in home.html 2025-03-19 11:10:26 -07:00
Paul Gauthier (aider)
5124c512c9 style: Replace header border with shaded background in feature cards 2025-03-19 11:08:36 -07:00
Paul Gauthier (aider)
89f579c1ba refactor: add card header with icon and title for better visual integration 2025-03-19 11:07:49 -07:00
Paul Gauthier (aider)
0035f28035 chore: Update Git integration icon from 🔄 to 🔀 2025-03-19 11:02:42 -07:00
Paul Gauthier
4d556d9235 chore: Update token statistics label and value in home.html 2025-03-19 11:02:41 -07:00
Paul Gauthier (aider)
dd5ef29355 refactor: Reorder feature cards with LLM, Map, Multifile in first row 2025-03-19 10:59:51 -07:00
Paul Gauthier
ca9922ef0a refactor: Simplify paragraph in home.html 2025-03-19 10:59:50 -07:00
Paul Gauthier (aider)
b674a0a5e8 feat: Replace Voice Coding card with LLM compatibility card using brain icon 2025-03-19 10:57:49 -07:00
Paul Gauthier (aider)
541d0e6f5c docs: Add installation and usage links to home page paragraph 2025-03-19 10:56:29 -07:00
Paul Gauthier (aider)
fc96e980fb docs: Add link to LLM connection documentation in home page 2025-03-19 10:55:42 -07:00
Paul Gauthier
1425e3e6c7 chore: Update documentation links to point to install.html 2025-03-19 10:54:52 -07:00
Paul Gauthier (aider)
b9d3c11032 chore: Update documentation links to point to /docs/usage.html 2025-03-19 10:52:21 -07:00
Paul Gauthier
81b65e0de3 refactor: Remove "Top Tier Performance" section from home.html 2025-03-19 10:52:20 -07:00
Paul Gauthier
0f80f6af27 copy 2025-03-19 10:48:40 -07:00
Paul Gauthier (aider)
5eedf98aae refactor: Restructure hero section layout with full-width title and badges 2025-03-19 10:33:34 -07:00
Paul Gauthier (aider)
8f45a2ef3d style: Update responsive layout for mobile devices in home.html 2025-03-19 10:31:36 -07:00
Paul Gauthier (aider)
9d51d4a572 refactor: Reorganize hero section into two-column layout 2025-03-19 10:31:22 -07:00
Paul Gauthier (aider)
9978c8ea48 refactor: Replace link with div for Token Processed badge 2025-03-19 10:29:00 -07:00
Paul Gauthier
e779358429 chore: Update token badge label and value in home.html 2025-03-19 10:28:59 -07:00
Paul Gauthier (aider)
8d663cc3d6 style: restyle stats section to use GitHub badges format 2025-03-19 10:23:55 -07:00
Paul Gauthier (aider)
a98ca30438 fix: prevent recently removed testimonials from immediate reuse 2025-03-19 10:16:44 -07:00
Paul Gauthier (aider)
589cb2ac79 feat: prevent consecutive flips of the same testimonial card 2025-03-19 10:14:59 -07:00
Paul Gauthier (aider)
d973be8fea feat: Add 3D card flip animation to testimonials 2025-03-19 10:14:11 -07:00
Paul Gauthier (aider)
41c3b59755 refactor: change testimonial rotation to random selection 2025-03-19 10:12:51 -07:00
Paul Gauthier (aider)
8bf168da47 feat: Update testimonials to rotate one at a time with fade animation 2025-03-19 10:11:30 -07:00
Paul Gauthier
0d85c06be2 refactor: Adjust testimonial rotation interval in home.html 2025-03-19 10:11:26 -07:00
Paul Gauthier (aider)
fadede7305 feat: Add dynamic rotating testimonials with user links 2025-03-19 10:09:21 -07:00
Paul Gauthier
a24d31fbba docs: Update feature title in home.html to "Map Of Your Code" 2025-03-19 10:09:08 -07:00
Paul Gauthier (aider)
c9d463443a style: Update IDE feature card icon to desktop emoji 2025-03-19 10:03:51 -07:00
Paul Gauthier (aider)
0e3d486658 docs: Update feature card to highlight IDE integration 2025-03-19 10:02:24 -07:00
Paul Gauthier (aider)
574ab6bdda feat: Add links to feature descriptions in home.html 2025-03-19 09:29:47 -07:00
Paul Gauthier
a172d15463 refactor: Update stats section in home.html with new icons and labels 2025-03-19 09:29:45 -07:00
Paul Gauthier (aider)
a1362b946a style: Enhance stats section with modern cards and hover effects 2025-03-19 09:04:05 -07:00
Paul Gauthier (aider)
6ecb4c5ece feat: Add stats section to home page 2025-03-19 09:02:36 -07:00
Paul Gauthier
63c1320f36 feat: Add initial home.html for Aider website 2025-03-19 09:02:34 -07:00
Paul Gauthier
bf484ce4c4 chore: Remove home.html file 2025-03-19 08:59:59 -07:00
Paul Gauthier
1700212f30 copy 2025-03-19 08:54:22 -07:00
Paul Gauthier
751ca3bf75 copy 2025-03-19 08:22:46 -07:00
Paul Gauthier (aider)
01be8bc64e style: Make macos-backdrop padding responsive using clamp() 2025-03-19 08:20:07 -07:00
Paul Gauthier
a9e8005b14 style: Adjust padding comment in macos-backdrop CSS class 2025-03-19 08:20:05 -07:00
Paul Gauthier (aider)
871cff6232 feat: Add stylish HTML landing page for Aider 2025-03-19 08:16:25 -07:00
Paul Gauthier
1de8f5ceda feat: Add home.html for website 2025-03-19 08:16:21 -07:00
Paul Gauthier
dd4d2420df copy 2025-03-18 19:07:03 -07:00
Paul Gauthier (aider)
e9b1a98314 fix: Adjust z-index and opacity for backdrop decorative lines 2025-03-18 19:00:24 -07:00
Paul Gauthier (aider)
f0f48e8e30 fix: Ensure decorative lines only appear in backdrop, not terminal area 2025-03-18 18:59:29 -07:00
Paul Gauthier (aider)
89b008e1eb style: Add decorative curved lines to macos-backdrop background 2025-03-18 18:58:05 -07:00
Paul Gauthier (aider)
fb3f8439e2 style: Increase top/bottom padding of .macos-backdrop by 50% 2025-03-18 18:57:30 -07:00
Paul Gauthier (aider)
f0e66d2bfb feat: Add macOS-like colorful backdrop to terminal display 2025-03-18 18:53:11 -07:00
Paul Gauthier
65ec254c1b copy 2025-03-18 18:42:23 -07:00
Paul Gauthier
47c0d95bd4 refactor: Add missing --read flag in update-history.py 2025-03-18 18:26:08 -07:00
Paul Gauthier
55d7bed563 copy 2025-03-18 18:25:57 -07:00
Paul Gauthier (aider)
9a4f3b8d8e style: Format code and add whitespace for readability 2025-03-18 18:23:45 -07:00
Paul Gauthier (aider)
d9c5ce15f3 refactor: Separate git log and diff in update-history script 2025-03-18 18:23:42 -07:00
Paul Gauthier (aider)
292908288b chore: Remove unused import of __version__ from aider 2025-03-18 18:18:51 -07:00
Paul Gauthier (aider)
7fec2661fc style: Standardize string quotes in update-history.py 2025-03-18 18:18:39 -07:00
Paul Gauthier (aider)
0cee8bc6ac refactor: Use latest version header in HISTORY.md for git log range 2025-03-18 18:18:34 -07:00
Paul Gauthier
37d867e47e better 2025-03-18 18:15:08 -07:00
Paul Gauthier
c1338fe92f copy 2025-03-18 18:09:25 -07:00
Paul Gauthier
1e90a679c0 copy 2025-03-18 18:06:41 -07:00
Paul Gauthier (aider)
ddb7b9cb8b docs: Expand explanation of accepts_settings behavior in reasoning docs 2025-03-18 17:45:19 -07:00
Paul Gauthier (aider)
31e1604d99 docs: Update reasoning settings documentation for accepts_settings and --no-check-model-accepts-settings 2025-03-18 17:45:06 -07:00
Paul Gauthier
e11c32bca5 refactor: Simplify model setting warning message in main.py 2025-03-18 17:43:57 -07:00
Paul Gauthier
16309dc077 test: Update test assertions and model in test_main.py 2025-03-18 17:40:26 -07:00
Paul Gauthier (aider)
8a1b496cd5 style: Format test_main.py with linter 2025-03-18 17:37:01 -07:00
Paul Gauthier (aider)
99cf99e014 test: update test for --check-model-accepts-settings flag 2025-03-18 17:36:55 -07:00
Paul Gauthier (aider)
f2e9b06dbd fix: Update tests and logic for model settings acceptance checks 2025-03-18 17:36:30 -07:00
Paul Gauthier (aider)
6cce7c34c2 style: Format test_main.py with linter 2025-03-18 17:33:58 -07:00
Paul Gauthier (aider)
dd2efac3ae test: verify Model.set_ methods are called appropriately in tests 2025-03-18 17:33:52 -07:00
Paul Gauthier (aider)
14c0e50721 style: Format warning message in main.py for readability 2025-03-18 17:22:31 -07:00
Paul Gauthier (aider)
68e218d002 refactor: ignore unsupported model parameters with warning instead of prompt 2025-03-18 17:22:25 -07:00
Paul Gauthier
0a026e71b7 copy 2025-03-18 14:43:36 -07:00
Paul Gauthier
5175a8c7ca copy 2025-03-18 14:42:12 -07:00
Paul Gauthier
661e0cfc71 copy 2025-03-18 14:30:22 -07:00
Paul Gauthier
9ff6f35330 copy 2025-03-18 14:13:08 -07:00
Paul Gauthier
ab5a066780 feat: Add controls to video player in recording.js 2025-03-18 14:05:06 -07:00
Paul Gauthier (aider)
c2d649e655 refactor: Use Jekyll templating for recordings list generation 2025-03-18 14:04:29 -07:00
Paul Gauthier (aider)
f82bb65810 docs: Add descriptions to recording pages using text from index 2025-03-18 14:03:03 -07:00
Paul Gauthier
e76c54b18e docs: Add empty description field to model-accepts-settings.md 2025-03-18 14:03:02 -07:00
Paul Gauthier
43658055d3 copy 2025-03-18 13:58:31 -07:00
Paul Gauthier (aider)
0b71fded7f docs: Add entry for model-accepts-settings recording to index 2025-03-18 13:56:43 -07:00
Paul Gauthier
03d1bada2a add model-accepts-settings recording 2025-03-18 13:53:16 -07:00
Paul Gauthier (aider)
ad76355299 feat: make toast notifications persist until audio/speech completes 2025-03-18 13:32:59 -07:00
Paul Gauthier (aider)
c98d409f0a fix: prevent duplicate speech synthesis fallback 2025-03-18 13:30:31 -07:00
Paul Gauthier
9084673fd7 copy 2025-03-18 12:39:01 -07:00
Paul Gauthier
8d7300a522 docs: Update reasoning model compatibility and settings documentation 2025-03-18 12:36:27 -07:00
Paul Gauthier (aider)
7c10600044 docs: Update reasoning model settings documentation with compatibility details 2025-03-18 12:32:22 -07:00
Paul Gauthier
277da37047 refactor: Simplify warning message in main.py 2025-03-18 12:30:47 -07:00
Paul Gauthier (aider)
f6d697ed2b refactor: rename warned to warn_setting for clarity 2025-03-18 12:28:41 -07:00
Paul Gauthier (aider)
f247927244 style: Format code to comply with linter rules 2025-03-18 12:27:54 -07:00
Paul Gauthier (aider)
7097e62582 refactor: Consolidate model setting checks into a loop 2025-03-18 12:27:48 -07:00
Paul Gauthier (aider)
e577bab263 refactor: Improve model settings warning logic and fix tmux recording script 2025-03-18 12:27:33 -07:00
Paul Gauthier (aider)
274c40793f refactor: Use warn_setting variable for model setting warnings 2025-03-18 12:27:28 -07:00
Paul Gauthier
afbe9266e7 refactor: Simplify warning messages and confirmation prompt 2025-03-18 12:27:27 -07:00
Paul Gauthier (aider)
195ed3e6b6 style: Remove trailing whitespace and format confirm_ask call 2025-03-18 12:24:13 -07:00
Paul Gauthier (aider)
ed8ace7884 feat: Add confirmation prompt for unsupported model parameters 2025-03-18 12:24:06 -07:00
Paul Gauthier (aider)
14761ebec2 fix: Update test_thinking_tokens_option to check correct thinking tokens location 2025-03-18 12:22:13 -07:00
Paul Gauthier (aider)
50d8a19397 style: Format test_main.py with consistent line breaks 2025-03-18 12:18:57 -07:00
Paul Gauthier (aider)
719324981d test: Add tests for accepts_settings configuration and thinking_tokens option 2025-03-18 12:18:52 -07:00
Paul Gauthier (aider)
182c06107f fix: move model setting warnings after settings are resolved 2025-03-18 12:13:55 -07:00
Paul Gauthier (aider)
d4d4852a0c feat: Add thinking_tokens and reasoning_effort settings to models 2025-03-18 12:08:52 -07:00
Paul Gauthier (aider)
f352fed313 style: Remove trailing whitespace in models.py 2025-03-18 12:05:23 -07:00
Paul Gauthier (aider)
5dfce2d199 feat: Add reasoning_effort and thinking_tokens settings to specific models 2025-03-18 12:05:17 -07:00
Paul Gauthier
6aafac544b refactor: Remove accepts_settings from model configurations 2025-03-18 12:05:11 -07:00
Paul Gauthier (aider)
2589c29b1c style: Format code to comply with linter rules 2025-03-18 12:01:55 -07:00
Paul Gauthier (aider)
076c38526a feat: Add --check-model-accepts-settings flag with default true 2025-03-18 12:01:45 -07:00
Paul Gauthier (aider)
9fd5cfa777 fix: warn when model settings are empty or missing specific keys 2025-03-18 12:00:36 -07:00
Paul Gauthier (aider)
c01db8783d style: Format warning messages to adhere to line length limit 2025-03-18 11:57:38 -07:00
Paul Gauthier (aider)
77101a96a1 feat: Add model setting validation for reasoning features 2025-03-18 11:57:31 -07:00
Paul Gauthier (aider)
46863b470c feat: Add terminal size output to tmux_record.sh 2025-03-18 11:53:28 -07:00
Paul Gauthier
736c1f7e1e chore: Make tmux_record.sh executable 2025-03-18 11:53:26 -07:00
Paul Gauthier (aider)
4cf9679334 feat: add check for exactly one active tmux window 2025-03-18 11:50:12 -07:00
Paul Gauthier
89c9290602 refactor: Simplify asciinema command in tmux_record.sh 2025-03-18 11:50:10 -07:00
Paul Gauthier (aider)
3ba75c5a62 feat: Add dynamic tmux window size detection to recording script 2025-03-18 11:49:25 -07:00
Paul Gauthier
4ceaed7183 feat: Add tmux recording script 2025-03-18 11:49:24 -07:00
Paul Gauthier
f310497d47 copy 2025-03-18 09:55:47 -07:00
Stefan Hladnik (aider)
b3d9e0d1b0 fix: Return empty dict instead of exiting on model availability error 2025-03-18 13:03:32 +07:00
Stefan Hladnik
7c3d96d0e7 fix: Remove debug print statement from ModelInfoManager class 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
cdd730e627 feat: Print error message in red for unavailable models 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
21cca34392 fix: Allow arbitrary characters in model availability check regex 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
d64427d726 feat: Add error handling for unavailable model in response text 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
87ccacb99f fix: Return empty dict if any required parameters are missing 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
b37773c630 style: Update import location and add SSL verification in fetch_openrouter_model_info() 2025-03-18 13:03:32 +07:00
Stefan Hladnik
4765a90f97 fix: Adjust input and output cost calculations to use million scale 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
29587cd07c fix: Update return keys in fetch_openrouter_model_info() to match JSON metadata 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
2651d99676 feat: Update cost extraction to capture non-zero input/output costs 2025-03-18 13:03:32 +07:00
Stefan Hladnik
44e5525e6f style: Remove unnecessary blank lines in ModelInfoManager class 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
5e48f6898d fix: Improve print statement to include model name in parameters output 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
08d48f42ad refactor: Remove BeautifulSoup dependency and use regex to strip HTML tags 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
4600dbcda5 feat: Print parsed model parameters in fetch_openrouter_model_info() method 2025-03-18 13:03:32 +07:00
Stefan Hladnik (aider)
c1b2ff20de feat: Add method to fetch model info from openrouter pages 2025-03-18 13:03:32 +07:00
Paul Gauthier
94bcaa71e6 copy 2025-03-17 21:24:34 -07:00
Paul Gauthier
67bdccbda6 refactor: Adjust padding in NoInsetCodeBlock syntax rendering 2025-03-17 21:17:02 -07:00
Paul Gauthier (aider)
f89dabbd0a refactor: Replace make_elements() with class var in NoInsetMarkdown 2025-03-17 21:15:30 -07:00
Paul Gauthier
76eee60ad5 refactor: Update NoInsetMarkdown to use NoInsetCodeBlock for fence elements 2025-03-17 21:15:28 -07:00
Paul Gauthier (aider)
ac4e4959eb style: Format code according to linter rules 2025-03-17 21:10:17 -07:00
Paul Gauthier (aider)
7316635aba feat: Remove padding from markdown code blocks using NoInsetMarkdown 2025-03-17 21:10:12 -07:00
Paul Gauthier
feb277049f copy 2025-03-17 19:43:50 -07:00
Paul Gauthier
35d5febd7d copy 2025-03-17 19:05:31 -07:00
Paul Gauthier
97a3bfca4e set version to 0.77.2.dev 2025-03-17 18:07:22 -07:00
Paul Gauthier
cf58133e06 version bump to 0.77.1 2025-03-17 18:07:19 -07:00
Paul Gauthier
0d1811a4ae chore: Update exclude patterns in help_pats.py 2025-03-17 18:03:59 -07:00
Paul Gauthier
2a8bb715f0 copy 2025-03-17 17:29:54 -07:00
Paul Gauthier
cf93869d3f gemma3b 2025-03-17 16:39:45 -07:00
Paul Gauthier
77976a5253 copy 2025-03-17 10:24:07 -07:00
Paul Gauthier
5af46aaa2e bump deps 2025-03-17 10:23:21 -07:00
lentil32 (aider)
679c634459 test: Add tests for AWS credential handling with AWS_PROFILE 2025-03-16 16:09:32 +09:00
lentil32 (aider)
cc33fc2822 feat: Handle AWS_PROFILE for Bedrock models in validate_environment 2025-03-16 16:00:15 +09:00
Paul Gauthier (aider)
4f4b10fd86 feat: Hide keyboard shortcuts on devices without physical keyboards 2025-03-14 19:43:16 -07:00
Paul Gauthier (aider)
26789115b6 fix: improve iOS audio playback with global audio element and better fallback 2025-03-14 19:40:27 -07:00
Paul Gauthier
87a28dcb9f copy 2025-03-14 19:17:51 -07:00
Paul Gauthier
1ad99f39e2 formatting 2025-03-14 19:14:22 -07:00
Paul Gauthier (aider)
dfbeec199e style: Properly indent HTML divs in recording.md 2025-03-14 19:13:32 -07:00
Paul Gauthier
41a99ec29d use better TTS 2025-03-14 19:10:35 -07:00
Paul Gauthier (aider)
7cee3aa1f1 fix: prevent duplicate speech synthesis fallback in recording.js 2025-03-14 19:07:53 -07:00
Paul Gauthier (aider)
b86d8099f1 fix: Remove unused import and convert f-strings without placeholders 2025-03-14 18:55:58 -07:00
Paul Gauthier (aider)
9c4a0043dd style: Format code to comply with linter rules 2025-03-14 18:55:36 -07:00
Paul Gauthier (aider)
5cde755976 feat: compress MP3 files using FFmpeg with configurable bitrate 2025-03-14 18:55:31 -07:00
Paul Gauthier (aider)
51aab7b656 feat: Print audio directory path on script launch 2025-03-14 18:53:31 -07:00
Paul Gauthier (aider)
791dc213fa style: Format code with linter 2025-03-14 18:52:47 -07:00
Paul Gauthier (aider)
8404165db3 feat: Add metadata tracking and TTS fallback improvements 2025-03-14 18:52:41 -07:00
Paul Gauthier (aider)
aee52c01a3 style: Remove trailing whitespace in recording_audio.py 2025-03-14 18:49:16 -07:00
Paul Gauthier (aider)
58e16b0c48 fix: Remove global VOICE usage and pass voice parameter directly 2025-03-14 18:49:12 -07:00
Paul Gauthier
3225ac88c0 chore: Make recording_audio.py executable 2025-03-14 18:49:10 -07:00
Paul Gauthier (aider)
38b8b85ec2 style: Format code with linter 2025-03-14 18:47:12 -07:00
Paul Gauthier (aider)
278f748c1c feat: Add OpenAI TTS audio generation and playback for recordings 2025-03-14 18:47:06 -07:00
Paul Gauthier
874df40303 feat: Add audio recording script 2025-03-14 18:47:04 -07:00
Paul Gauthier
0465d8ce80 chore: Simplify recording markdown files and update model settings 2025-03-14 18:37:13 -07:00
Paul Gauthier (aider)
e9b3f5fd43 refactor: Move recording code to shared include file 2025-03-14 18:34:19 -07:00
Paul Gauthier
c49bc2418b chore: Refactor recording script and comments into separate file 2025-03-14 18:34:17 -07:00
Paul Gauthier
fd21f5195d chore: Update polyglot leaderboard entry with new test results 2025-03-14 18:19:20 -07:00
Paul Gauthier
a1aa63fa06 copy 2025-03-14 15:15:34 -07:00
Paul Gauthier
b0a619c714 copy 2025-03-14 14:19:51 -07:00
Paul Gauthier
ec648f2c6f copy 2025-03-14 14:14:54 -07:00
Paul Gauthier
7ac7c72e03 refactor: Simplify terminal event processing in redact-cast.py 2025-03-14 13:34:21 -07:00
Paul Gauthier
f1d00dbd7f better 2025-03-14 11:59:25 -07:00
Paul Gauthier (aider)
f644aba7a8 docs: Suppress Jekyll TOC in recordings index 2025-03-14 11:53:40 -07:00
Paul Gauthier (aider)
ed75287c8c docs: Add detailed descriptions to screen recordings index 2025-03-14 11:53:06 -07:00
Paul Gauthier
a035c73c41 docs: Add screen recordings index page 2025-03-14 11:53:03 -07:00
Paul Gauthier
781a619262 moved 2025-03-14 11:43:52 -07:00
Paul Gauthier
e08b63cc9f initial 2025-03-14 11:42:05 -07:00
Paul Gauthier
97ed57a252 initial 2025-03-14 11:25:24 -07:00
Paul Gauthier
71f1779c8c refac 2025-03-14 11:18:19 -07:00
Paul Gauthier (aider)
116f44cade feat: Focus player on page load for immediate keyboard control 2025-03-14 10:05:14 -07:00
Paul Gauthier (aider)
2ebdd689ab chore: Replace double dashes with em dashes in keyboard shortcuts 2025-03-14 10:03:08 -07:00
Paul Gauthier
beecc1a718 docs: Update keyboard shortcuts formatting in tree-sitter-language-pack.md 2025-03-14 10:03:07 -07:00
Paul Gauthier
557ba2adc1 copy 2025-03-14 10:01:31 -07:00
Paul Gauthier (aider)
89780c1283 feat: Add keyboard shortcuts info below terminal with styling 2025-03-14 10:00:21 -07:00
Paul Gauthier
411e7f86c1 copy 2025-03-14 09:56:32 -07:00
Paul Gauthier
610fce67e1 copy 2025-03-14 09:49:26 -07:00
Paul Gauthier
d9350cd3ed Merge branch 'main' of github.com:Aider-AI/aider 2025-03-14 09:41:54 -07:00
Paul Gauthier
54d6643a1f copy 2025-03-14 09:41:37 -07:00
Paul Gauthier (aider)
f664420628 refactor: Update JavaScript to use "Commentary" instead of "Transcript" 2025-03-14 09:40:11 -07:00
Paul Gauthier (aider)
d4d4c6de68 style: Add margin-top to terminal-container class 2025-03-14 09:38:10 -07:00
Paul Gauthier
b4313599f8 rename 2025-03-14 09:37:27 -07:00
Paul Gauthier (aider)
6866f8f0a9 style: Add whitespace above terminal-container in HTML 2025-03-14 09:37:23 -07:00
Paul Gauthier
3cb478214b docs: Add tree-sitter-language-pack example transcript 2025-03-14 09:37:21 -07:00
Paul Gauthier
8d7b4d6446 copy 2025-03-14 09:35:29 -07:00
Paul Gauthier
cc6b0bcd72 copy 2025-03-14 09:33:05 -07:00
Paul Gauthier (aider)
831564cf48 fix: prevent auto-scroll when highlighting playback timestamps 2025-03-14 09:23:10 -07:00
Paul Gauthier
4e59b62026 docs: Update recording transcript with language pack integration details 2025-03-14 08:58:33 -07:00
Paul Gauthier (aider)
f345b9b0ff feat: Make entire transcript list items clickable 2025-03-14 08:56:30 -07:00
Paul Gauthier (aider)
d4fb88a8c4 feat: Highlight last-played marker in transcript 2025-03-14 08:55:15 -07:00
Paul Gauthier (aider)
2cb1b6be46 feat: Add toast and speech triggers on timestamp click 2025-03-14 08:54:08 -07:00
Paul Gauthier (aider)
feda315c2b feat: make transcript timestamps clickable to seek player 2025-03-14 08:53:07 -07:00
Paul Gauthier (aider)
41219a7d85 feat: Automatically parse transcript section to generate markers 2025-03-14 08:27:21 -07:00
Paul Gauthier
813a201b6a refactor: Move markers definition to recording.md and simplify recording.js 2025-03-14 08:27:20 -07:00
Paul Gauthier (aider)
1bc40d48fe refactor: Move CSS and JS to separate files and include them using Jekyll 2025-03-14 08:22:32 -07:00
Paul Gauthier
ddb4e51938 feat: Add recording.js and recording.css for website 2025-03-14 08:22:30 -07:00
Paul Gauthier (aider)
9ee67c343d fix: Show toast notifications in fullscreen mode 2025-03-14 08:13:11 -07:00
Paul Gauthier
bb816eae83 style: Adjust button min-width and update video markers in recording.md 2025-03-14 08:10:26 -07:00
Paul Gauthier (aider)
92bd446d09 style: Adjust toast notification size to fit marker text 2025-03-14 08:06:06 -07:00
Paul Gauthier
a7526fa9c4 docs: Update example recording marker text 2025-03-14 08:06:05 -07:00
Paul Gauthier (aider)
9b6ff487da fix: Prevent line breaks in toast notifications with CSS adjustments 2025-03-14 08:03:35 -07:00
Paul Gauthier (aider)
9d61490743 style: Make toast width adapt to text content 2025-03-14 07:52:24 -07:00
paul-gauthier
9cce6e41fa Merge pull request #3528 from bexelbie/patch-1 2025-03-14 06:49:10 -07:00
Brian Exelbierd
a56dbdf502 Update Benchmark README.md
Use a consistent clone url to help those who don't use ssh with GitHub.  This should not break for those who do.
2025-03-14 09:05:04 +01:00
Paul Gauthier (aider)
7d5f27fa34 style: Adjust toast notification width, padding, and font size 2025-03-13 19:42:51 -07:00
Paul Gauthier (aider)
a61ba0db22 feat: Replace transcript box with toast notifications for marker text 2025-03-13 19:42:19 -07:00
Paul Gauthier
7f02a889e2 style: Remove flexbox styling from recording.md layout 2025-03-13 19:42:17 -07:00
Paul Gauthier (aider)
88d388a574 refactor: Move page-container inline styles to CSS section 2025-03-13 19:39:59 -07:00
Paul Gauthier
4d5a659e1e style: Adjust container styles in recording.md 2025-03-13 19:39:55 -07:00
Paul Gauthier
ecfcf1071d style: Simplify page-container styling in recording.md 2025-03-13 19:30:14 -07:00
Paul Gauthier (aider)
ec385d45e9 style: Replace fixed max-width with aspect-ratio in page container 2025-03-13 19:29:08 -07:00
Paul Gauthier (aider)
985107bb4b style: Limit page-container width to 1200px and center it 2025-03-13 19:28:12 -07:00
Paul Gauthier
eb340c74ac style: Adjust max-height styling in recording example page 2025-03-13 19:28:09 -07:00
Paul Gauthier (aider)
9a16b33f00 feat: Add speech synthesis for marker labels in transcript 2025-03-13 19:14:54 -07:00
Paul Gauthier (aider)
0acebc5916 fix: resolve null reference in AsciinemaPlayer initialization 2025-03-13 18:05:14 -07:00
Paul Gauthier (aider)
8442d9fe5f feat: Add marker labels to transcript on separate lines 2025-03-13 18:04:16 -07:00
Paul Gauthier
5318dd1a80 feat: Add markers and event listener to recording example 2025-03-13 18:04:16 -07:00
Paul Gauthier
d916180ec8 refactor: Simplify transcript content in recording.md 2025-03-13 17:54:42 -07:00
Paul Gauthier (aider)
6e5aa08ee0 feat: Add transcript section below demo div in recording.md 2025-03-13 17:50:21 -07:00
Paul Gauthier
83e115cde5 docs: Add poster time to recording example 2025-03-13 17:50:19 -07:00
Paul Gauthier (aider)
a3a92cd5dd style: Reduce terminal header height and button sizes 2025-03-13 17:46:29 -07:00
Paul Gauthier
16fc10fb0f docs: Update terminal title in recording example 2025-03-13 17:46:27 -07:00
Paul Gauthier (aider)
6bba8b57d4 feat: Add macOS-style terminal header to demo div 2025-03-13 17:44:13 -07:00
Paul Gauthier (aider)
f45c75a137 style: Update demo div styling and background color 2025-03-13 17:42:39 -07:00
Paul Gauthier
3348df0652 style: Update terminal background color and theme in recording example 2025-03-13 17:42:37 -07:00
Paul Gauthier (aider)
3b6a01b63d fix: bind Jekyll to all interfaces in docker container 2025-03-13 17:39:51 -07:00
Paul Gauthier (aider)
a3554a95c5 perf: optimize Jekyll build with incremental and livereload options 2025-03-13 17:38:25 -07:00
Paul Gauthier (aider)
6fa9af20c0 style: Wrap CSS in <style> tags in recording.md 2025-03-13 17:37:31 -07:00
Paul Gauthier (aider)
e23437dfa4 style: Update terminal colors to match tmux window style 2025-03-13 17:37:06 -07:00
Paul Gauthier
dcf9eaad77 style: Add custom Asciinema player theme and set default theme 2025-03-13 17:37:05 -07:00
Paul Gauthier (aider)
768df05692 style: Limit asciinema player height to 80% of viewport 2025-03-13 17:30:07 -07:00
Paul Gauthier
e0d5d35e32 docs: Update recording example with new asciinema player config 2025-03-13 17:30:05 -07:00
Paul Gauthier
a718a05414 initial 2025-03-13 17:20:47 -07:00
Paul Gauthier
953391d9d0 refactor: Optimize terminal emulator initialization in redact-cast.py 2025-03-13 16:30:41 -07:00
Paul Gauthier (aider)
4ca229fd42 refactor: Use regex to check for ordered "Atuin" characters in line 2025-03-13 16:19:31 -07:00
Paul Gauthier
693a43efc8 refactor: Simplify JSON parsing logic in redact-cast.py 2025-03-13 16:19:29 -07:00
Paul Gauthier (aider)
f3d4c931f5 style: Remove trailing whitespace in redact-cast.py 2025-03-13 16:14:00 -07:00
Paul Gauthier (aider)
ece21315b1 perf: Skip JSON parsing when terminal checking isn't needed 2025-03-13 16:13:56 -07:00
Paul Gauthier
318cc57ffe refactor: Simplify terminal feed logic in redact-cast.py 2025-03-13 16:13:55 -07:00
Paul Gauthier (aider)
ba17924174 style: Remove trailing whitespace in redact-cast.py 2025-03-13 16:11:44 -07:00
Paul Gauthier (aider)
6bc9daa6ee perf: Optimize terminal emulation by checking for "Atuin" first 2025-03-13 16:11:41 -07:00
Paul Gauthier (aider)
2d8bc95bae style: Format code with consistent quotes and spacing 2025-03-13 16:08:57 -07:00
Paul Gauthier (aider)
520eb4a932 perf: Optimize asciinema cast processing with line-by-line streaming and early exit 2025-03-13 16:08:53 -07:00
Paul Gauthier
03733516cc refactor: Simplify "Atuin" visibility check in redact-cast.py 2025-03-13 16:08:52 -07:00
Paul Gauthier (aider)
e561130336 style: Remove trailing whitespace in redact-cast.py 2025-03-13 16:04:16 -07:00
Paul Gauthier (aider)
169fa2e7b7 feat: Print terminal dimensions after parsing header 2025-03-13 16:04:12 -07:00
Paul Gauthier (aider)
6d6db996fb style: Remove trailing whitespace in redact-cast.py 2025-03-13 16:03:30 -07:00
Paul Gauthier (aider)
f8642bfd94 perf: Stream filtered events directly to output file for memory efficiency 2025-03-13 16:03:27 -07:00
Paul Gauthier (aider)
dfdd6bf533 style: Remove trailing whitespace in redact-cast.py 2025-03-13 16:02:52 -07:00
Paul Gauthier (aider)
91cef71048 feat: set screen size from asciinema cast header 2025-03-13 16:02:48 -07:00
Paul Gauthier (aider)
3daf632384 feat: Add tqdm progress bar for event processing 2025-03-13 16:01:47 -07:00
Paul Gauthier (aider)
dba5fb9dfa style: Format code with consistent quotes and spacing 2025-03-13 16:00:40 -07:00
Paul Gauthier (aider)
70d10a0bb2 feat: Add script to filter asciinema cast files for "Atuin" visibility 2025-03-13 16:00:35 -07:00
Paul Gauthier
97291b806a refactor: Simplify redact-cast.py by removing custom logic and importing pyte 2025-03-13 16:00:34 -07:00
Paul Gauthier (aider)
c583f008e9 style: Make demo div full width in recording.md 2025-03-13 15:31:48 -07:00
Paul Gauthier
b182eba56f docs: Add recording example to website 2025-03-13 15:31:47 -07:00
Paul Gauthier
de5da0e7ce copy 2025-03-13 15:06:00 -07:00
Paul Gauthier
f2a893c0d4 set version to 0.77.1.dev 2025-03-13 14:44:50 -07:00
Paul Gauthier
371a03c794 version bump to 0.77.0 2025-03-13 14:44:47 -07:00
Paul Gauthier
88e3d48be5 copy 2025-03-13 14:24:19 -07:00
Paul Gauthier
e8a8681a75 chore: Update polyglot leaderboard YAML files with new test case data 2025-03-13 14:16:20 -07:00
Paul Gauthier
b541eec3b8 chore: Add new model settings to model-settings.yml 2025-03-13 14:08:36 -07:00
Paul Gauthier (aider)
ce3f732645 style: Format Model class constructor for readability 2025-03-13 14:00:27 -07:00
Paul Gauthier (aider)
1b3cae1ed5 feat: Add verbose flag to conditionally dump kwargs in Model.send 2025-03-13 14:00:20 -07:00
Paul Gauthier
024b9130a0 copy 2025-03-12 16:22:26 -07:00
Paul Gauthier
61a8b6020f copy 2025-03-12 16:07:38 -07:00
Paul Gauthier
d25877aace Merge branch 'tsl-pack-add' 2025-03-12 15:58:28 -07:00
Paul Gauthier
c3c2d4dc22 bump deps 2025-03-12 15:57:21 -07:00
Paul Gauthier
7454154599 copy 2025-03-12 15:56:33 -07:00
Paul Gauthier (aider)
04ecea614b refactor: Simplify _test_language_repo_map signature and use self.fixtures_dir 2025-03-12 15:38:07 -07:00
Paul Gauthier (aider)
084a14b640 style: Remove unnecessary blank lines in test_repomap.py 2025-03-12 15:36:18 -07:00
Paul Gauthier (aider)
a477759a49 refactor: Update fixtures_dir references to use self.fixtures_dir 2025-03-12 15:36:13 -07:00
Paul Gauthier
d4df207612 refactor: Move fixtures_dir initialization to setUp in TestRepoMapAllLanguages 2025-03-12 15:36:12 -07:00
Paul Gauthier (aider)
57d492d4b8 style: Remove trailing whitespace in test_repomap.py 2025-03-12 15:34:28 -07:00
Paul Gauthier (aider)
fb7413436c refactor: Split language tests into individual test methods 2025-03-12 15:34:24 -07:00
Paul Gauthier
2cc8105e68 refactor: Split language tests into individual cases in test_repomap.py 2025-03-12 15:34:22 -07:00
Paul Gauthier (aider)
a83d5ff123 style: Format test_repomap.py with linter 2025-03-12 15:32:20 -07:00
Paul Gauthier (aider)
a709d650df refactor: Extract language test loop into helper method 2025-03-12 15:32:16 -07:00
Paul Gauthier
570e8eae31 refactor: Extract loop logic into helper method in test_repomap.py 2025-03-12 15:32:15 -07:00
Paul Gauthier (aider)
22f1703bee test: Update udev fixture to match query patterns 2025-03-12 15:30:23 -07:00
Paul Gauthier (aider)
14037eaeb8 test: add udev test case to TestRepoMapAllLanguages 2025-03-12 15:22:56 -07:00
Paul Gauthier (aider)
189d64dc3d test: Add Swift test case to TestRepoMapAllLanguages 2025-03-12 15:22:16 -07:00
Paul Gauthier (aider)
315f8093c6 test: Add Solidity test case and fixture to TestRepoMapAllLanguages 2025-03-12 15:21:45 -07:00
Paul Gauthier (aider)
a776d70e0d test: add Racket test case and fixture 2025-03-12 15:18:47 -07:00
Paul Gauthier (aider)
1ab6c70ac7 feat: Add R language test case and fixture for repository mapping 2025-03-12 15:16:02 -07:00
Paul Gauthier (aider)
73eb8701dd feat: Add properties language test case and fixture file 2025-03-12 15:13:56 -07:00
Paul Gauthier (aider)
a503f291e7 feat: Add Pony language test case and fixture 2025-03-12 15:12:56 -07:00
Paul Gauthier (aider)
b54d800024 feat: Add Lua language support to TestRepoMapAllLanguages 2025-03-12 15:11:31 -07:00
Paul Gauthier (aider)
d74068464d feat: Add Gleam language support to TestRepoMapAllLanguages 2025-03-12 15:09:43 -07:00
Paul Gauthier (aider)
86a5e8dbe1 feat: Add Elm fixture with Person type and main function 2025-03-12 15:08:36 -07:00
Paul Gauthier (aider)
24d2b683c8 feat: Add Dart language support to TestRepoMapAllLanguages 2025-03-12 15:06:27 -07:00
Paul Gauthier (aider)
9451f0abe4 feat: Add D language test fixture and update test mapping 2025-03-12 15:05:05 -07:00
Paul Gauthier (aider)
544d58ddbd feat: Add CommonLisp language support to TestRepoMapAllLanguages 2025-03-12 15:02:55 -07:00
Paul Gauthier (aider)
7c1d2d75e0 feat: Add chatito language support with test fixture 2025-03-12 14:40:43 -07:00
Paul Gauthier (aider)
0b949f47d9 feat: Add C language test fixture for repository mapping 2025-03-12 14:39:59 -07:00
Paul Gauthier (aider)
393b45dd21 feat: Add Arduino fixture file for language recognition test 2025-03-12 14:38:43 -07:00
Paul Gauthier (aider)
6bb43555dc feat: Add Arduino language support to TestRepoMapAllLanguages 2025-03-12 14:37:55 -07:00
Paul Gauthier (aider)
ba03b07602 refactor: Update udev-tags.scm with more specific @name tags 2025-03-12 14:27:50 -07:00
Paul Gauthier (aider)
0ac4c0b97d refactor: Update swift-tags.scm to use more specific @name.definition tags 2025-03-12 14:27:29 -07:00
Paul Gauthier
41e93a4d94 initial 2025-03-12 14:27:11 -07:00
Paul Gauthier (aider)
a0b5b19d38 refactor: Update solidity-tags.scm with more specific @name tags 2025-03-12 14:27:04 -07:00
Paul Gauthier (aider)
65fad5ae30 refactor: Update Rust tags to use more specific @name.definition and @name.reference tags 2025-03-12 14:26:32 -07:00
Paul Gauthier (aider)
a689f2116c refactor: Update ruby-tags.scm to use more specific tag names 2025-03-12 14:25:57 -07:00
Paul Gauthier (aider)
68b5c90d95 refactor: Update Racket tags to use @name.definition and @name.reference formats 2025-03-12 14:25:30 -07:00
Paul Gauthier (aider)
44eb9af7bc refactor: Update r-tags.scm to use more specific name tags 2025-03-12 14:25:12 -07:00
Paul Gauthier (aider)
9e824e6070 refactor: Update python-tags.scm with more specific name tags 2025-03-12 14:24:53 -07:00
Paul Gauthier (aider)
ba6bb527a7 refactor: Update properties-tags.scm to use more specific name tags 2025-03-12 14:24:32 -07:00
Paul Gauthier (aider)
3525eeae54 refactor: Update Pony tags to use .reference and .definition prefixes 2025-03-12 14:24:14 -07:00
Paul Gauthier (aider)
e535e01e83 refactor: Update Lua tags to use more specific reference and definition tags 2025-03-12 14:23:45 -07:00
Paul Gauthier (aider)
3b1c81e50e refactor: Enhance Java tags with specific definition and reference annotations 2025-03-12 14:23:12 -07:00
Paul Gauthier (aider)
89406e5b7d refactor: Update go-tags.scm to use more specific @name tags 2025-03-12 14:22:49 -07:00
Paul Gauthier (aider)
d5cc855c0f refactor: Update gleam-tags.scm to use more specific @name tags 2025-03-12 14:22:16 -07:00
Paul Gauthier (aider)
2ed61eaf92 refactor: Update Elm tags to use .reference and .definition namespaces 2025-03-12 14:21:35 -07:00
Paul Gauthier (aider)
865f71e2cc refactor: Update elixir-tags.scm to use more specific @name.reference and @name.definition tags 2025-03-12 14:21:05 -07:00
Paul Gauthier (aider)
08a75808df refactor: Update elisp-tags.scm to use more specific name tags 2025-03-12 14:20:39 -07:00
Paul Gauthier (aider)
c9dd37db8e refactor: Update dart-tags.scm to use @name.reference and @name.definition tags 2025-03-12 14:20:23 -07:00
Paul Gauthier (aider)
7e86c8a90c refactor: Update d-tags.scm to use more specific @name.reference and @name.definition tags 2025-03-12 14:19:38 -07:00
Paul Gauthier (aider)
b87a5496e9 refactor: Update cpp-tags.scm to use more specific name tags 2025-03-12 14:19:06 -07:00
Paul Gauthier (aider)
9a88363437 refactor: Update CommonLisp tags to use more specific @name.* tags 2025-03-12 14:18:40 -07:00
Paul Gauthier (aider)
c0b9665cfc refactor: Update chatito-tags.scm with explicit definition and reference tags 2025-03-12 14:18:12 -07:00
Paul Gauthier (aider)
70284ce1c2 refactor: Update c-tags.scm to use more specific @name.definition tags 2025-03-12 14:17:54 -07:00
Paul Gauthier (aider)
48621dadaa refactor: Update Arduino tags to use more specific @name.reference and @name.definition tags 2025-03-12 14:17:35 -07:00
Paul Gauthier
e69bad57e4 initial 2025-03-12 14:14:13 -07:00
Paul Gauthier (aider)
f55099e969 feat: Update script to download Tree-Sitter language tags to specific directory 2025-03-12 14:10:14 -07:00
Paul Gauthier (aider)
76994facec style: Apply linter formatting to tsl_pack_langs.py script 2025-03-12 13:55:52 -07:00
Paul Gauthier (aider)
2d843f6e79 feat: Add skip mechanism for existing tags.scm files in language download script 2025-03-12 13:55:47 -07:00
Paul Gauthier (aider)
e15518dd29 style: Fix linter formatting in tsl_pack_langs.py 2025-03-12 13:55:23 -07:00
Paul Gauthier (aider)
011e0fd109 feat: Print GitHub URL when processing each language 2025-03-12 13:55:17 -07:00
Paul Gauthier (aider)
5f125c1812 style: Format Python script with linter 2025-03-12 13:54:36 -07:00
Paul Gauthier (aider)
a6ebed8d16 feat: Improve language tag download script with multi-branch support 2025-03-12 13:54:31 -07:00
Paul Gauthier
849e02cbfb chore: Make tsl_pack_langs.py script executable 2025-03-12 13:54:27 -07:00
Paul Gauthier (aider)
1ab5238405 refactor: Simplify tags URL construction and remove unused import 2025-03-12 13:52:55 -07:00
Paul Gauthier (aider)
ae6192111d style: Format Python script with linter 2025-03-12 13:52:44 -07:00
Paul Gauthier (aider)
59af4114dd feat: Add script to fetch tags.scm files from GitHub repositories 2025-03-12 13:52:39 -07:00
Paul Gauthier
4491b88763 feat: Add script for packing translation languages 2025-03-12 13:52:35 -07:00
Paul Gauthier
92377fc390 fix: Add missing MagicMock import in test_coder.py 2025-03-12 13:45:10 -07:00
Paul Gauthier (aider)
79b8e50412 fix: Mock InputOutput object correctly in test_architect_coder_auto_accept_true 2025-03-12 13:42:27 -07:00
Paul Gauthier (aider)
b5cd39cc50 fix: Add mock for confirm_ask method in test_architect_coder_auto_accept_true 2025-03-12 13:41:39 -07:00
Paul Gauthier (aider)
63c2a98f3c fix: Add missing summarizer mock to ArchitectCoder tests 2025-03-12 13:41:10 -07:00
Paul Gauthier (aider)
c168f78a13 fix: Initialize cur_messages and done_messages in ArchitectCoder test cases 2025-03-12 13:40:15 -07:00
Paul Gauthier (aider)
42d45b4037 fix: Remove unused import of ANY from unittest.mock 2025-03-12 13:39:42 -07:00
Paul Gauthier (aider)
c41df63629 style: Reorder imports and fix whitespace in test_coder.py 2025-03-12 13:38:48 -07:00
Paul Gauthier (aider)
330bb81206 test: Add tests for auto_accept_architect feature in ArchitectCoder 2025-03-12 13:38:41 -07:00
Paul Gauthier (aider)
d84c755ee8 style: Apply linter formatting to redact-cast.py script 2025-03-12 13:28:06 -07:00
Paul Gauthier (aider)
a24ff28031 refactor: Remove 'env' key from .cast file header 2025-03-12 13:28:01 -07:00
Paul Gauthier (aider)
3a837c472e style: Apply linter formatting to redact-cast.py script 2025-03-12 13:25:08 -07:00
Paul Gauthier (aider)
f4880e2ef3 feat: Add ANSI escape sequence stripping for Atuin version detection 2025-03-12 13:25:03 -07:00
Paul Gauthier
a2e4022e31 copy 2025-03-12 13:12:18 -07:00
Paul Gauthier (aider)
5668b41daa feat: Add auto-accept option for architect coder edits 2025-03-12 13:09:41 -07:00
Paul Gauthier (aider)
c052270048 feat: Add --auto-accept-architect option with default true 2025-03-12 13:08:59 -07:00
Paul Gauthier (aider)
70547171ca style: Fix linter formatting in io.py 2025-03-12 12:50:04 -07:00
Paul Gauthier (aider)
881868bf17 refactor: Require 3 characters for autocomplete, except for commands 2025-03-12 12:49:57 -07:00
Paul Gauthier (aider)
e90eb39a9b style: Add whitespace around arithmetic operator in redact-cast.py 2025-03-11 19:30:57 -07:00
Paul Gauthier
9513d307a1 refactor: Reorganize redact script and improve code formatting 2025-03-11 19:30:46 -07:00
Paul Gauthier
533e5ec03f Merge remote-tracking branch 'source-repo/main' into redact 2025-03-11 19:29:57 -07:00
Paul Gauthier (aider)
55f63395c7 fix: Remove unused mock variables and split long comment lines in test_commands.py 2025-03-11 19:25:46 -07:00
Paul Gauthier (aider)
4253d98a73 style: Remove trailing whitespaces in test_commands.py 2025-03-11 19:25:24 -07:00
Paul Gauthier (aider)
0c4af58866 test: Add tests for /reset preserving original read-only files 2025-03-11 19:25:17 -07:00
Paul Gauthier
a5919bd27d copy 2025-03-11 19:12:35 -07:00
Paul Gauthier
5e40974fdd fix: Ensure default model is set only if not already specified 2025-03-11 19:07:53 -07:00
Paul Gauthier (aider)
a27f4d0e04 feat: Add speed-up factor to recording timestamps in redact.py 2025-03-11 17:54:12 -07:00
Paul Gauthier (aider)
1bb3041298 feat: Compress long timestamp gaps to 0.5 seconds in asciinema cast processing 2025-03-11 17:44:20 -07:00
Paul Gauthier
dc6040adda copy 2025-03-11 17:39:08 -07:00
Paul Gauthier
864725ff3d feat: Add command aliases and preserve read-only files in /drop 2025-03-11 17:38:13 -07:00
Paul Gauthier (aider)
0fcbea03e5 style: Format code and remove trailing whitespaces 2025-03-11 17:35:28 -07:00
Paul Gauthier (aider)
2ce63e6ad3 test: Add tests for preserving original read-only files during drop command 2025-03-11 17:35:21 -07:00
Paul Gauthier (aider)
d45af94cee refactor: Simplify original read-only files check in _drop_all_files method 2025-03-11 17:33:57 -07:00
Paul Gauthier (aider)
1f874b654d style: Format code with linter and improve readability 2025-03-11 17:31:22 -07:00
Paul Gauthier (aider)
a7a21757bc feat: Preserve original read-only files when using bare /drop command 2025-03-11 17:31:14 -07:00
Paul Gauthier (aider)
1bed4e8972 feat: Add 0.5 second pause after skipped sections in redaction script 2025-03-11 17:05:54 -07:00
Paul Gauthier (aider)
efcda12dda refactor: Maintain consistent timestamps during section skipping 2025-03-11 17:04:47 -07:00
Paul Gauthier (aider)
d7b4079ab5 refactor: Update redact.py to handle asciinema cast v2 JSON format 2025-03-11 17:03:19 -07:00
Paul Gauthier
2eb1513612 initial 2025-03-11 17:01:26 -07:00
Paul Gauthier
87bcbe0420 copy 2025-03-11 13:00:33 -07:00
Paul Gauthier (aider)
26b0c6e6da style: Add mobile-friendly CSS to hide command and edit columns 2025-03-11 12:51:38 -07:00
Paul Gauthier
8cfbc9b827 Revert "refactor: Improve chart responsiveness with dynamic mobile height"
This reverts commit 46eee9e642.
2025-03-11 12:37:56 -07:00
Paul Gauthier (aider)
46eee9e642 refactor: Improve chart responsiveness with dynamic mobile height 2025-03-11 12:33:45 -07:00
Paul Gauthier
7d902d2f3e test: Update token budget parsing test cases 2025-03-11 12:24:42 -07:00
Paul Gauthier
3d05007024 fix: Correct token budget message formatting in test case 2025-03-11 12:20:47 -07:00
Paul Gauthier (aider)
a2bf2e2910 style: Format long line in test_commands.py for better readability 2025-03-11 12:18:18 -07:00
Paul Gauthier (aider)
9cf4286cee fix: Update test to handle lowercase token budget input 2025-03-11 12:18:10 -07:00
Paul Gauthier (aider)
c9ddca3a16 feat: Update tests for /think and /reason to handle no-argument case 2025-03-11 12:16:54 -07:00
Paul Gauthier
06370cb096 copy 2025-03-11 12:14:47 -07:00
Paul Gauthier (aider)
342586519d fix: Update method calls to use main_model for get_thinking_tokens and get_reasoning_effort 2025-03-11 12:13:52 -07:00
Paul Gauthier (aider)
89174bb524 style: Format code with linter and improve whitespace 2025-03-11 12:12:20 -07:00
Paul Gauthier (aider)
1fa3bc4018 feat: Add display of current values for /think and /reason commands when called without arguments 2025-03-11 12:12:12 -07:00
Paul Gauthier (aider)
d68e2b33fb style: Remove trailing whitespaces in commands.py 2025-03-11 12:11:15 -07:00
Paul Gauthier (aider)
1313cd8216 refactor: Update thinking tokens and reasoning effort display with helper methods 2025-03-11 12:11:08 -07:00
Paul Gauthier (aider)
7afc8c760c feat: Add /think and /reason command aliases for think-tokens and reasoning-effort 2025-03-11 12:10:19 -07:00
Paul Gauthier (aider)
79f714ab16 refactor: Extract thinking tokens and reasoning effort methods into separate functions 2025-03-11 12:09:41 -07:00
Paul Gauthier
e21bab2d17 copy 2025-03-11 11:52:02 -07:00
Paul Gauthier (aider)
4288cf2a39 style: Apply linter formatting to test_commands.py 2025-03-11 11:49:46 -07:00
Paul Gauthier (aider)
9d570a9cb1 feat: Update test values to use 1024 base for k and M suffixes 2025-03-11 11:49:39 -07:00
Paul Gauthier (aider)
333ddfb37a style: Format Python code with linter 2025-03-11 11:48:21 -07:00
Paul Gauthier (aider)
10a5250527 test: Add tests for /think-tokens and /reasoning-effort commands 2025-03-11 11:48:13 -07:00
Paul Gauthier (aider)
fd57eccdca style: Remove trailing whitespaces in commands.py 2025-03-11 11:45:30 -07:00
Paul Gauthier (aider)
1432be9be6 feat: Add announcements output for /think and /reason commands 2025-03-11 11:45:23 -07:00
Paul Gauthier (aider)
1773bbf759 style: Shorten docstring to fix line length flake8 error 2025-03-11 11:43:59 -07:00
Paul Gauthier (aider)
5c94624186 style: Format code with linter 2025-03-11 11:43:47 -07:00
Paul Gauthier (aider)
dc06c2fab3 refactor: Update reasoning effort command to accept string values 2025-03-11 11:43:40 -07:00
Paul Gauthier (aider)
f37799b39c style: Fix linter formatting in base_coder.py 2025-03-11 11:42:46 -07:00
Paul Gauthier (aider)
cc84f590fe feat: Add reasoning effort display in get_announcements output 2025-03-11 11:42:38 -07:00
Paul Gauthier
afcf3e77b5 refactor: Reorder model info output for better readability 2025-03-11 11:42:36 -07:00
Paul Gauthier (aider)
0406dda2a6 feat: Add /reasoning-effort command to set model reasoning effort level 2025-03-11 11:41:46 -07:00
Paul Gauthier (aider)
935227f7e7 refactor: Use 1024 instead of 1000 for token budget formatting 2025-03-11 11:38:11 -07:00
Paul Gauthier (aider)
67ebb2566d style: Use lowercase 'k' for token budget display 2025-03-11 11:37:30 -07:00
Paul Gauthier (aider)
1c736161c5 feat: Omit decimal point for whole number token budget values 2025-03-11 11:37:01 -07:00
Paul Gauthier (aider)
a348c2d013 feat: Change --thinking-tokens argument type to string 2025-03-11 11:36:17 -07:00
Paul Gauthier (aider)
444a95bc6c style: Add whitespace around arithmetic operators in budget formatting 2025-03-11 11:35:49 -07:00
Paul Gauthier (aider)
c38cdef220 style: Format code with linter and improve readability 2025-03-11 11:35:31 -07:00
Paul Gauthier (aider)
5608db0892 feat: Add thinking token budget display in model details 2025-03-11 11:35:23 -07:00
Paul Gauthier
98b3722a02 refactor: Simplify thinking token budget display logic 2025-03-11 11:33:45 -07:00
Paul Gauthier (aider)
2d623ff196 style: Apply linter formatting to commands.py 2025-03-11 11:32:39 -07:00
Paul Gauthier (aider)
703e124277 feat: Add /think-tokens command to set thinking token budget 2025-03-11 11:32:32 -07:00
Paul Gauthier (aider)
68c27f885f style: Fix linting issues in test_models.py 2025-03-11 11:30:28 -07:00
Paul Gauthier (aider)
58cd190ca9 test: Add comprehensive tests for token parsing and thinking tokens methods 2025-03-11 11:30:23 -07:00
Paul Gauthier (aider)
2c5c2b2f67 style: Format code with linter and fix whitespace 2025-03-11 11:29:44 -07:00
Paul Gauthier (aider)
e10fe50c6f feat: Add flexible token parsing for set_thinking_tokens method 2025-03-11 11:29:38 -07:00
Paul Gauthier
b8ad0b15e8 copy 2025-03-11 09:38:28 -07:00
Paul Gauthier (aider)
1b81fb0fdf refactor: Modify git push to stream output directly to terminal 2025-03-11 09:25:44 -07:00
Paul Gauthier
703cb8849d set version to 0.76.3.dev 2025-03-11 09:25:11 -07:00
Paul Gauthier
55f856b23c version bump to 0.76.2 2025-03-11 09:25:07 -07:00
Paul Gauthier (aider)
93c284a67d fix: Handle JSONDecodeError when loading model cache file 2025-03-11 08:33:18 -07:00
Paul Gauthier (aider)
38fd715247 style: Fix linter warnings in main.py 2025-03-11 08:27:23 -07:00
Paul Gauthier (aider)
987d024847 fix: Handle GitCommandError when retrieving git user config 2025-03-11 08:27:17 -07:00
Paul Gauthier
a3c0d628a1 fix: Remove unnecessary default flag in git config retrieval 2025-03-11 08:27:15 -07:00
Paul Gauthier
3cb6ec9ddb set version to 0.76.2.dev 2025-03-10 17:41:32 -07:00
Paul Gauthier
c21619608e version bump to 0.76.1 2025-03-10 17:41:29 -07:00
Paul Gauthier
76a8789bc1 faster versionbump 2025-03-10 17:39:22 -07:00
Paul Gauthier
bbf538e06c copy 2025-03-10 17:15:29 -07:00
Paul Gauthier
d94ab3395b bump deps to pickup litellm bugfix for streaming openrouter resoning 2025-03-10 17:13:55 -07:00
Paul Gauthier
6d8457a61f copy 2025-03-10 16:28:57 -07:00
Paul Gauthier
303f8e1bc9 Merge branch 'main' of github.com:Aider-AI/aider 2025-03-10 16:27:32 -07:00
paul-gauthier
e638116a2f Merge pull request #3495 from maledorak/docs/remote-notifications
docs: Add remote notifications docs
2025-03-10 16:27:16 -07:00
Mariusz Korzekwa
5bac9133e6 docs: Add remote notifications docs 2025-03-11 00:19:51 +01:00
paul-gauthier
6fde4041ba Merge pull request #3488 from mopemope/ignore-permission-err
refactor: add ignore_permission_denied option to watch function
2025-03-10 13:47:12 -07:00
Paul Gauthier
d0c8b38ffc copy 2025-03-10 08:58:42 -07:00
Paul Gauthier
be7888ab18 copy 2025-03-10 08:51:05 -07:00
Paul Gauthier
11b71fa28c set version to 0.76.1.dev 2025-03-10 08:49:40 -07:00
Paul Gauthier
c838f9bfd5 version bump to 0.76.0 2025-03-10 08:47:14 -07:00
Paul Gauthier
8d073ce221 copy 2025-03-10 08:26:08 -07:00
Yutaka Matsubara
0be5d39453 refactor: add ignore_permission_denied option to watch function 2025-03-10 21:55:00 +09:00
Adrian Cole
10d599f26a ollama: suggest higher minimum context length
This updates the doc with the new ENV variable ollama supports since [v0.5.13](https://github.com/ollama/ollama/releases/tag/v0.5.13)
2025-03-10 15:32:53 +08:00
Yutaka Matsubara
6b76ed8098 refactor: enhance --aiderignore argument to resolve absolute and relative paths 2025-03-10 08:41:49 +09:00
Paul Gauthier
74ecdf2d3f copy 2025-03-09 13:43:41 -07:00
Paul Gauthier
20eacfab0f copy 2025-03-09 09:03:41 -07:00
Paul Gauthier
0396e15a3b refactor: remove unused debug dump() call 2025-03-09 08:49:30 -07:00
Paul Gauthier
3432a936ea copy 2025-03-09 08:47:41 -07:00
Paul Gauthier
87cd2b5dfe refactor: Remove deprecated reasoning_content attribute in test mock 2025-03-09 08:46:45 -07:00
Paul Gauthier (aider)
313b91edbe style: Fix trailing whitespace in test docstring 2025-03-09 08:43:51 -07:00
Paul Gauthier (aider)
a1f104cb4d style: wrap long lines in test docstrings and comments 2025-03-09 08:43:45 -07:00
Paul Gauthier (aider)
eadb8d5d0a style: fix linting issues in test_reasoning.py 2025-03-09 08:43:23 -07:00
Paul Gauthier (aider)
41ae947885 test: add tests for reasoning attribute handling in streaming and non-streaming cases 2025-03-09 08:43:18 -07:00
Paul Gauthier (aider)
84f610c0e9 style: Fix linting issues in test_reasoning.py 2025-03-09 08:40:40 -07:00
Paul Gauthier (aider)
0df959cf68 test: add reasoning attribute handling to MockStreamingChunk 2025-03-09 08:40:26 -07:00
Paul Gauthier
a15d10ea1e refactor: Simplify reasoning content handling in stream processing 2025-03-09 08:30:56 -07:00
Paul Gauthier (aider)
a37d6e86df feat: add support for both reasoning and reasoning_content fields 2025-03-09 08:24:12 -07:00
Paul Gauthier
a405063385 fix: Add fallback for reasoning_content attribute access 2025-03-09 08:24:09 -07:00
Paul Gauthier
f5a5b85e9d do not lint when updating history 2025-03-08 17:59:22 -08:00
Paul Gauthier
ba7d941e5b copy 2025-03-08 17:51:55 -08:00
Paul Gauthier
804a2d1af9 docs: improve deprecation warning message for remove_reasoning setting 2025-03-08 17:41:31 -08:00
Paul Gauthier (aider)
c1bc6e161e feat: add deprecation warning for remove_reasoning attribute 2025-03-08 17:40:03 -08:00
Paul Gauthier
af1b728b90 refactor: standardize reasoning_tag property name across model settings 2025-03-08 17:39:01 -08:00
Paul Gauthier (aider)
14e37a82ab fix: maintain backward compatibility for remove_reasoning field 2025-03-08 17:37:37 -08:00
Paul Gauthier (aider)
f8a7854efa fix: update model property name from remove_reasoning to reasoning_tag 2025-03-08 17:36:28 -08:00
Paul Gauthier (aider)
072ce87051 refactor: rename remove_reasoning to reasoning_tag in test files 2025-03-08 17:34:43 -08:00
Paul Gauthier (aider)
cac9b4460e style: fix whitespace in models.py 2025-03-08 17:33:44 -08:00
Paul Gauthier (aider)
67bf90a149 refactor: rename remove_reasoning to reasoning_tag with backward compatibility 2025-03-08 17:33:37 -08:00
Paul Gauthier
af8558b19e copy 2025-03-08 17:30:56 -08:00
Paul Gauthier
1903542f11 copy 2025-03-08 17:27:01 -08:00
Paul Gauthier (aider)
3ed16fb796 style: fix whitespace and format code 2025-03-08 17:26:20 -08:00
Paul Gauthier (aider)
6f99392eda feat: add thinking token budget configuration option 2025-03-08 17:26:09 -08:00
Paul Gauthier (aider)
680dbfbf77 style: fix whitespace in models.py 2025-03-08 17:20:06 -08:00
Paul Gauthier (aider)
51a72b497b refactor: move reasoning effort logic into Model class method 2025-03-08 17:19:58 -08:00
Paul Gauthier
d6e57dd194 chore: add comment about moving reasoning effort to Model class 2025-03-08 17:19:56 -08:00
Paul Gauthier (aider)
e92ab55da6 style: sort imports alphabetically in test_reasoning.py 2025-03-08 17:17:04 -08:00
Paul Gauthier (aider)
c78b3e0204 test: update reasoning tag tests to use imported constants 2025-03-08 17:16:59 -08:00
Paul Gauthier
ac1c05389a refactor: move deprecated model args to dedicated group 2025-03-08 17:13:50 -08:00
Paul Gauthier (aider)
95583fe2cd The changes look good. Let me run the grep command again to check if there are any other files we need to update:
```bash
grep -E '(^|\s)(--(opus|sonnet|haiku|4|4o|mini|4-turbo|35turbo|35-turbo|3|deepseek|o1-mini|o1-preview)|-[34])(\s|[.,)]|$)' --include="*.md" -r aider/website/docs | grep -v "model.*model"
```

If there are any remaining instances of deprecated switches, we should add those files to the chat and update them as well.
2025-03-08 17:12:05 -08:00
Paul Gauthier
ddedda9233 test: update model alias and add debug dump in deprecated tests 2025-03-08 17:09:04 -08:00
Paul Gauthier
d30b9d1513 test: simplify deprecated model flag tests 2025-03-08 17:06:45 -08:00
Paul Gauthier (aider)
4c35f88ea0 test: add variant flag formats for model switches 2025-03-08 13:47:31 -08:00
Paul Gauthier (aider)
e6623ae0a8 test: mock URL launches in deprecated args tests 2025-03-08 13:45:44 -08:00
Paul Gauthier (aider)
4755578822 style: format test_deprecated.py with black 2025-03-08 13:44:16 -08:00
Paul Gauthier (aider)
319d543ac2 fix: update deprecated model tests to handle multiple warnings 2025-03-08 13:44:11 -08:00
Paul Gauthier (aider)
9e668cda7f style: Format test_deprecated.py with black 2025-03-08 13:42:21 -08:00
Paul Gauthier (aider)
5447483da2 test: add tests for deprecated model argument handling 2025-03-08 13:42:16 -08:00
Paul Gauthier
8e22a8d107 test: add tests for deprecated functionality 2025-03-08 13:42:12 -08:00
Paul Gauthier (aider)
18d27ab4e4 style: fix linting issues and whitespace cleanup 2025-03-08 13:38:17 -08:00
Paul Gauthier (aider)
fe60832492 refactor: move model shortcut args to deprecated module with warnings 2025-03-08 13:38:06 -08:00
Paul Gauthier
6bf683409f copy 2025-03-08 08:30:25 -08:00
Paul Gauthier
634bfb1eae bump deps 2025-03-08 08:14:53 -08:00
Paul Gauthier
c9d597d2b1 update repomap fixture 2025-03-08 08:13:16 -08:00
Paul Gauthier
92c616f717 copy 2025-03-08 08:10:00 -08:00
Son H. Nguyen
a1286d0d4d doc: add example command for github copilot models 2025-03-08 14:18:48 +07:00
Son H. Nguyen
eef3a3afeb feat: add copilot models to model list 2025-03-08 14:07:15 +07:00
Paul Gauthier
b1e8d29ae0 style: update reasoning tag formatting for better readability 2025-03-07 19:38:43 -08:00
Paul Gauthier
e0cef55fcd copy 2025-03-07 19:09:13 -08:00
Paul Gauthier
9aacf5c7db refactor: Remove unused parameter from remove_reasoning_content function 2025-03-07 19:06:15 -08:00
Paul Gauthier (aider)
4858749a20 style: Apply linter fixes to test_models.py 2025-03-07 17:54:34 -08:00
Paul Gauthier (aider)
b53c0b982a refactor: Move reasoning content removal tests to test_reasoning.py 2025-03-07 17:54:28 -08:00
Paul Gauthier (aider)
2aac9ff9c5 refactor: Remove unused re import from models.py 2025-03-07 17:51:25 -08:00
Paul Gauthier (aider)
bdaa70ada5 style: Apply linter formatting to remove extra whitespaces 2025-03-07 17:51:11 -08:00
Paul Gauthier (aider)
ca6abdfc61 refactor: Move remove_reasoning_content from Model to reasoning_tags.py 2025-03-07 17:50:57 -08:00
Paul Gauthier
e18593fe88 refactor: Remove commented-out code about reasoning tags 2025-03-07 17:42:22 -08:00
Paul Gauthier
08401aff26 refactor: Modify reasoning content removal method to update partial_response_content directly 2025-03-07 17:32:57 -08:00
Paul Gauthier (aider)
cddc67ad69 refactor: Extract reasoning content removal to helper method 2025-03-07 17:30:15 -08:00
Paul Gauthier
586af2a435 refactor: Extract reasoning content removal to a helper method 2025-03-07 17:30:13 -08:00
Paul Gauthier
97091fab60 refactor: Extract reasoning content removal to a helper method 2025-03-07 17:28:49 -08:00
Paul Gauthier (aider)
5f2cf75be8 style: Fix linting issues in test_reasoning.py 2025-03-07 17:20:11 -08:00
Paul Gauthier (aider)
37c7b81c95 test: Ensure partial_response_content contains only main content 2025-03-07 17:20:03 -08:00
Paul Gauthier (aider)
779a266713 style: Apply linter formatting to test_reasoning.py 2025-03-07 17:18:38 -08:00
Paul Gauthier (aider)
ebaedc6f05 fix: Resolve JSON serialization issue in test_send_with_think_tags_stream 2025-03-07 17:18:33 -08:00
Paul Gauthier (aider)
08a392787a style: Apply linter fixes to test_reasoning.py 2025-03-07 17:16:56 -08:00
Paul Gauthier (aider)
883bf74bad feat: Add streaming test for <think> tags in reasoning process 2025-03-07 17:16:50 -08:00
Paul Gauthier
80de3335b7 refactor: Move reasoning content flags initialization to send method 2025-03-07 17:15:44 -08:00
Paul Gauthier (aider)
794072bdf8 style: Format code with linter to improve readability 2025-03-07 17:06:14 -08:00
Paul Gauthier (aider)
e28fdb9cb1 refactor: Update test_send_with_reasoning_content_stream to be more robust 2025-03-07 17:06:09 -08:00
Paul Gauthier (aider)
7873d1c6b3 style: Fix linter warnings in test_reasoning.py 2025-03-07 17:04:07 -08:00
Paul Gauthier (aider)
f8c069132e fix: Add mdstream mock to resolve WholeFileCoder test failure 2025-03-07 17:04:03 -08:00
Paul Gauthier (aider)
c53833072f style: Format code with linter and remove trailing whitespaces 2025-03-07 17:03:21 -08:00
Paul Gauthier (aider)
16d7cf7a52 feat: Add test for streaming reasoning content with proper formatting and output 2025-03-07 17:03:16 -08:00
Paul Gauthier (aider)
3b9c2b9729 style: Organize and clean up import statements in test_reasoning.py 2025-03-07 17:00:25 -08:00
Paul Gauthier (aider)
b230fea66f feat: Add test for processing reasoning content in <think> tags 2025-03-07 17:00:19 -08:00
Paul Gauthier
f9b6501af1 refactor: Update test to use assistant_output instead of ai_output 2025-03-07 17:00:17 -08:00
Paul Gauthier (aider)
0cd8e3701d refactor: Move reasoning_content to choices[0].message in MockCompletion 2025-03-07 16:55:09 -08:00
Paul Gauthier (aider)
8545672839 fix: Add missing attributes to MockCompletion for test compatibility 2025-03-07 16:54:24 -08:00
Paul Gauthier
4a6c4b95f1 fix: Disable streaming for Coder in test_reasoning to ensure consistent output 2025-03-07 16:54:22 -08:00
Paul Gauthier (aider)
c893bc21ab style: Apply linter formatting to test_reasoning.py 2025-03-07 16:53:31 -08:00
Paul Gauthier (aider)
c8c5cbf8cc fix: Add mock hash object to resolve NoneType hexdigest error in test 2025-03-07 16:53:27 -08:00
Paul Gauthier (aider)
54ef8a1e19 fix: Update test mocking to match send_completion method signature 2025-03-07 16:52:51 -08:00
Paul Gauthier
82df218bcb test: Update test_reasoning to use generator and print partial response 2025-03-07 16:52:49 -08:00
Paul Gauthier (aider)
f613ad6c05 fix: Remove unused 'result' variable in test_reasoning.py 2025-03-07 16:50:36 -08:00
Paul Gauthier (aider)
4e732d0379 style: Apply linter formatting to test_reasoning.py 2025-03-07 16:50:19 -08:00
Paul Gauthier (aider)
ad8b5c9d29 refactor: Update test to simulate multi-response content formatting flow 2025-03-07 16:50:15 -08:00
Paul Gauthier (aider)
1ab4bf14dc fix: Remove unsupported 'stream' parameter from InputOutput initialization in test 2025-03-07 16:49:17 -08:00
Paul Gauthier (aider)
068a0b4576 refactor: Remove unused imports from test_reasoning.py 2025-03-07 16:48:52 -08:00
Paul Gauthier (aider)
5f694f228f style: Format code with linter and improve import sorting 2025-03-07 16:48:33 -08:00
Paul Gauthier (aider)
2ffe49130d feat: Add test for reasoning content formatting in Coder.send() method 2025-03-07 16:48:27 -08:00
Paul Gauthier
f7d18ef976 test: Add test_reasoning.py for basic reasoning tests 2025-03-07 16:48:23 -08:00
Paul Gauthier
8233eb6007 refactor: Simplify reasoning tag handling in base coder 2025-03-07 16:43:21 -08:00
Paul Gauthier
de4693cdf3 refactor: Simplify reasoning tag handling and remove unused function 2025-03-07 16:26:47 -08:00
Paul Gauthier (aider)
8fb235c3f5 refactor: Remove unused imports from reasoning_tags 2025-03-07 16:11:34 -08:00
Paul Gauthier (aider)
6feb00dcd9 style: Reorder imports and format code with linter 2025-03-07 16:10:57 -08:00
Paul Gauthier (aider)
4fc1847a70 refactor: Update reasoning tag formatting to use standalone function 2025-03-07 16:10:49 -08:00
Paul Gauthier (aider)
e7f16f07f7 refactor: Extract reasoning tag handling to separate module 2025-03-07 16:10:21 -08:00
Paul Gauthier
d9551b3106 refactor: Simplify reasoning tag handling and remove debug print statements 2025-03-07 16:08:11 -08:00
Paul Gauthier (aider)
854428795b style: Format code with linter and improve readability 2025-03-07 16:04:40 -08:00
Paul Gauthier (aider)
5c3b4bd987 refactor: Update reasoning tag handling in live_incremental_response method 2025-03-07 16:04:32 -08:00
Paul Gauthier (aider)
9d686d3e52 refactor: Update reasoning tag handling in base_coder.py 2025-03-07 16:04:19 -08:00
Paul Gauthier (aider)
b62e00b935 refactor: Use class attribute for reasoning tag name in replace_reasoning_tags method 2025-03-07 16:03:58 -08:00
Paul Gauthier
634745c818 fix: Adjust reasoning tag spacing to improve readability 2025-03-07 16:03:56 -08:00
Paul Gauthier (aider)
490c6d9a28 style: Apply linter formatting to base_coder.py 2025-03-07 16:00:47 -08:00
Paul Gauthier (aider)
e6dd9978cb refactor: Improve reasoning tag replacement with consistent newline handling 2025-03-07 16:00:40 -08:00
Paul Gauthier
240a5613a5 refactor: Simplify reasoning tag formatting in base_coder.py 2025-03-07 16:00:38 -08:00
Paul Gauthier (aider)
fb96cbcaaf feat: Apply reasoning tag formatting in non-pretty streaming output 2025-03-07 15:59:05 -08:00
Paul Gauthier
b58f879db7 refactor: Simplify reasoning tag replacement in live_incremental_response method 2025-03-07 15:59:02 -08:00
Paul Gauthier (aider)
1585c6095e style: Format code with linter and improve readability 2025-03-07 15:57:24 -08:00
Paul Gauthier (aider)
30a630412d refactor: Improve reasoning tag handling in base_coder.py 2025-03-07 15:57:16 -08:00
Paul Gauthier
e5ca79cd51 refactor: Prepare for AI tag conversion in incremental response rendering 2025-03-07 15:57:14 -08:00
Paul Gauthier (aider)
148353aca4 refactor: Revert reasoning content tag changes to original implementation 2025-03-07 15:56:13 -08:00
Paul Gauthier (aider)
7a098ce740 style: Apply linter formatting to base_coder.py 2025-03-07 15:54:00 -08:00
Paul Gauthier (aider)
f3b9831a0c refactor: Add helper function to replace reasoning tags in base_coder.py 2025-03-07 15:53:53 -08:00
Paul Gauthier
01454674c8 refactor: Update reasoning content formatting with improved XML-like tags 2025-03-07 15:53:50 -08:00
Paul Gauthier
5093b18ecc Merge branch 'main' into show-thinking 2025-03-07 10:29:44 -08:00
Paul Gauthier
c16cfd0668 copy 2025-03-07 09:30:43 -08:00
Paul Gauthier
1674cd5db9 Merge branch 'main' of github.com:Aider-AI/aider 2025-03-07 09:30:27 -08:00
Paul Gauthier
f111ab48fb chore: Update polyglot leaderboard data with new model test results 2025-03-07 09:26:32 -08:00
paul-gauthier
65309854ac Update README.md 2025-03-06 19:43:46 -08:00
paul-gauthier
cf0aff8c40 Update README.md 2025-03-06 19:43:16 -08:00
Paul Gauthier
16b768485a feat: Update reasoning tag and add reasoning content handling in Coder 2025-03-06 19:05:57 -08:00
Paul Gauthier
c2e7b533d3 feat: Add reasoning content indicators in response handling 2025-03-06 18:28:47 -08:00
Paul Gauthier
539859f1ab fix: Update reasoning tag message and comment out dump function 2025-03-06 18:21:45 -08:00
Paul Gauthier
d1d40a9a76 feat: Add reasoning content handling in Coder and Model classes 2025-03-06 18:16:44 -08:00
Paul Gauthier
52162a5604 initial 2025-03-06 17:19:45 -08:00
Paul Gauthier
84e84207a5 copy 2025-03-06 17:12:21 -08:00
Paul Gauthier (aider)
a4e1745eca fix: Remove unnecessary f-strings in args_formatter.py 2025-03-06 17:09:39 -08:00
Paul Gauthier
5931979b74 style: Update color configuration comments to use quotes 2025-03-06 17:09:29 -08:00
Paul Gauthier
a412a65315 bump 2025-03-06 17:00:13 -08:00
Paul Gauthier
25da0674bb special case tree-sitter deps 2025-03-06 16:50:05 -08:00
Paul Gauthier
c823bf4fbb refactor: Remove debug dump calls from repomap.py 2025-03-06 16:40:08 -08:00
Paul Gauthier
cfd0e67a6b feat: Add C# tree-sitter query with class definition and reference tags 2025-03-06 16:36:37 -08:00
Paul Gauthier (aider)
94f3af57f1 refactor: Update csharp-tags.scm to use @name.definition and @name.reference patterns 2025-03-06 16:34:22 -08:00
Paul Gauthier
0050a3fe6c feat: Add C# language tags query for tree-sitter parsing 2025-03-06 16:34:20 -08:00
Paul Gauthier
0e65ddee37 fix ruby with ts 0.23 2025-03-06 16:26:41 -08:00
Paul Gauthier
101f7de889 re-ran pip-compile.sh, now ts is 0.23.2? 2025-03-06 15:17:40 -08:00
Paul Gauthier
a21c1ff92d cleanup 2025-03-06 14:53:17 -08:00
Paul Gauthier
f9bb2e498e pin ts per python version 2025-03-06 13:20:59 -08:00
Paul Gauthier
f6bb803be5 copy 2025-03-06 13:10:37 -08:00
Paul Gauthier
204a88c171 fix: Improve LLM empty response handling with clearer warning messages 2025-03-06 13:07:27 -08:00
Paul Gauthier (aider)
012afc0708 feat: Add warning for empty LLM streaming responses 2025-03-06 12:52:32 -08:00
Paul Gauthier
cf089abb64 switch to tslp 2025-03-06 12:32:06 -08:00
Paul Gauthier
40e463cdc1 copy 2025-03-06 12:25:43 -08:00
Paul Gauthier (aider)
6a1284a5ca docs: Add documentation for new notifications feature 2025-03-06 12:24:17 -08:00
Paul Gauthier
60522ee474 docs: Add notifications documentation page 2025-03-06 12:24:15 -08:00
Paul Gauthier (aider)
0045641db7 fix: Move module-level constant after imports to resolve flake8 E402 errors 2025-03-06 12:17:33 -08:00
Paul Gauthier (aider)
97b5b1b669 style: Fix linter formatting in io.py 2025-03-06 12:14:50 -08:00
Paul Gauthier (aider)
448de8519a refactor: Extract notification message into a constant 2025-03-06 12:14:44 -08:00
Paul Gauthier (aider)
95e1fe0446 style: Format code with linter and improve whitespace consistency 2025-03-06 12:14:20 -08:00
Paul Gauthier (aider)
47254be254 feat: Add terminal-notifier support for macOS notifications 2025-03-06 12:14:14 -08:00
Paul Gauthier
3da15bfd19 fix: Handle NO_COLOR environment variable for disabling colored output 2025-03-06 12:14:11 -08:00
Paul Gauthier (aider)
c79db2581b style: Reformat code to improve linter compliance 2025-03-06 12:04:23 -08:00
Paul Gauthier (aider)
93b86a8800 feat: Add OS-specific default notification commands with custom message 2025-03-06 12:04:14 -08:00
Paul Gauthier (aider)
56ba7ef411 refactor: Remove redundant subprocess import in ring_bell method 2025-03-06 12:02:00 -08:00
Paul Gauthier (aider)
e2117fd8a9 feat: Add subprocess import for notifications command 2025-03-06 12:01:03 -08:00
Paul Gauthier (aider)
e817c76e38 style: Format code with linter and improve line breaks 2025-03-06 12:00:33 -08:00
Paul Gauthier (aider)
65e059a7d2 feat: Add notifications-command option to run custom notification commands 2025-03-06 12:00:21 -08:00
Paul Gauthier
f661025acc feat: Add notifications parameter to coder initialization 2025-03-06 12:00:19 -08:00
Paul Gauthier (aider)
2fe1b1e16e feat: Add --notifications flag to control terminal bell 2025-03-06 11:55:32 -08:00
Paul Gauthier
665ffe3984 Revert "feat: Add notification parameter to InputOutput initialization"
This reverts commit 09e998523f.
2025-03-06 11:54:05 -08:00
Paul Gauthier
c3401047e0 Revert "feat: Add desktop notification support with notify-py package"
This reverts commit 38e8d27416.
2025-03-06 11:53:58 -08:00
Paul Gauthier
996177ceaf add qwq32b 2025-03-06 11:46:32 -08:00
Paul Gauthier (aider)
09e998523f feat: Add notification parameter to InputOutput initialization 2025-03-06 11:45:59 -08:00
Paul Gauthier (aider)
38e8d27416 feat: Add desktop notification support with notify-py package 2025-03-06 11:45:37 -08:00
Paul Gauthier (aider)
813de04596 style: Remove trailing whitespaces in base_coder.py and io.py 2025-03-06 11:41:58 -08:00
Paul Gauthier (aider)
3c0eae4180 feat: Add terminal bell notification when LLM processing is complete 2025-03-06 11:41:32 -08:00
Paul Gauthier
99424a9f53 feat: Add configuration for Qwen 2.5 32b model with specific settings 2025-03-06 09:53:09 -08:00
Paul Gauthier
51d118fdb5 bump deps 2025-03-06 06:13:33 -08:00
Paul Gauthier
a26509a1fd Merge branch 'main' of github.com:Aider-AI/aider 2025-03-06 06:13:14 -08:00
paul-gauthier
0db70379e8 Merge pull request #3451 from claui/add-uv-dependency 2025-03-06 05:38:16 -08:00
Claudia Pellegrino
c612b5d17b fix: add uv as development dependency
`uv` is used in `pip-compile.sh`, so add it as a dev dependency.
2025-03-06 08:57:40 +01:00
Paul Gauthier
1b469cce49 copy 2025-03-05 18:59:33 -08:00
Paul Gauthier (aider)
c62cbd2d77 style: Fix linter warnings in test_main.py 2025-03-05 18:55:37 -08:00
Paul Gauthier (aider)
da1bc19052 fix: Correct indentation in test_no_verify_ssl_sets_model_info_manager test 2025-03-05 18:55:32 -08:00
Paul Gauthier (aider)
8e2246ec5c fix: Resolve MagicMock TypeError in test_no_verify_ssl_sets_model_info_manager 2025-03-05 18:55:17 -08:00
Paul Gauthier
5cf6945bcb pick up lox==0.13.0 for #3391 2025-03-05 18:46:46 -08:00
Paul Gauthier (aider)
7132ae47d7 test: Mock offer_url to prevent URL opening in SSL verification tests 2025-03-05 18:44:47 -08:00
Paul Gauthier (aider)
96bde4ad03 style: Format code with linter 2025-03-05 18:42:13 -08:00
Paul Gauthier (aider)
85b9bdd8f4 fix: Resolve TypeError in SSL verification tests by mocking Model class 2025-03-05 18:42:03 -08:00
Paul Gauthier (aider)
e5a85108d7 refactor: Remove unused result variable in test_verify_ssl_setting_before_cache_loading 2025-03-05 18:40:03 -08:00
Paul Gauthier (aider)
aaa3a8ebda style: Remove trailing whitespaces and fix code formatting 2025-03-05 18:39:29 -08:00
Paul Gauthier (aider)
9ceb766a67 feat: Add comprehensive tests for SSL verification in ModelInfoManager and main 2025-03-05 18:39:17 -08:00
Paul Gauthier (aider)
f894240fbb style: Remove trailing whitespaces in models.py 2025-03-05 18:37:47 -08:00
Paul Gauthier (aider)
4bac8e2ebe refactor: Lazy-load model cache to respect SSL verification settings 2025-03-05 18:37:40 -08:00
Paul Gauthier (aider)
d3ad1fd384 fix: Remove unused configparser import in main.py 2025-03-05 18:35:13 -08:00
Paul Gauthier (aider)
ed0e4189e4 style: Fix linting issues in models.py 2025-03-05 18:34:56 -08:00
Paul Gauthier (aider)
5f147242be refactor: Add SSL verification control to ModelInfoManager 2025-03-05 18:34:48 -08:00
Paul Gauthier
c7b4c22b94 fix: Add SSL verification option for model info request 2025-03-05 18:31:39 -08:00
Paul Gauthier (aider)
667bacf81e style: Remove unused imports from test_sanity_check_repo.py 2025-03-05 18:28:40 -08:00
Paul Gauthier
e896b0ea96 refactor: Remove corrupt index test and related function from sanity check test 2025-03-05 18:28:30 -08:00
Paul Gauthier (aider)
3b0a5a8b41 style: Format code with linter and remove extra whitespaces 2025-03-05 18:20:56 -08:00
Paul Gauthier (aider)
81d39e9bde test: Add tests for ensure_hash_prefix and color initialization 2025-03-05 18:20:50 -08:00
Paul Gauthier (aider)
59eabf03a6 style: Reformat color configuration lines for improved readability 2025-03-05 18:20:16 -08:00
Paul Gauthier (aider)
4fc4987c43 feat: Add helper function to ensure hex color values have a # prefix 2025-03-05 18:20:10 -08:00
Paul Gauthier
dbf5bb149a chore: Add sphinx version constraint to development requirements 2025-03-05 18:17:50 -08:00
Paul Gauthier (aider)
38acbf6970 fix: Handle ANY_GIT_ERROR when reading staged files in repo.py 2025-03-05 17:40:04 -08:00
Paul Gauthier
ad4bd91751 docs: Add comment about potential error in index.entries.keys usage 2025-03-05 17:39:53 -08:00
Paul Gauthier
1a6f290979 copy 2025-03-05 17:15:00 -08:00
Paul Gauthier
c6e02a620a test: Add unit tests for model dependency checks and sanity checks 2025-03-05 17:11:15 -08:00
Paul Gauthier (aider)
90efaa41c2 test: Add tests for check_for_dependencies function 2025-03-05 17:07:43 -08:00
Paul Gauthier (aider)
51a73ad8b5 style: Fix linter formatting in models.py 2025-03-05 17:07:01 -08:00
Paul Gauthier (aider)
93f2387d1b refactor: Move check_pip_install_extra import to top of file 2025-03-05 17:06:56 -08:00
Paul Gauthier (aider)
207a631a65 style: Fix linting issues in models.py 2025-03-05 17:06:39 -08:00
Paul Gauthier (aider)
74e60e98b7 refactor: Simplify model dependency checks with new check_for_dependencies function 2025-03-05 17:06:33 -08:00
Paul Gauthier (aider)
6ca6bf7457 refactor: Extract model-specific dependency checks into dedicated function 2025-03-05 17:06:23 -08:00
Paul Gauthier
ea49cdeb17 feat: Add google-cloud-aiplatform dependency to Dockerfile 2025-03-05 16:59:41 -08:00
Paul Gauthier (aider)
bcc8b1917a style: Fix linter warnings in models.py 2025-03-05 16:57:56 -08:00
Paul Gauthier (aider)
67b12d4416 feat: Add Vertex AI model package check for google-cloud-aiplatform 2025-03-05 16:57:51 -08:00
Paul Gauthier (aider)
dc02daecee style: Break long comment into two lines to fix flake8 line length issue 2025-03-05 16:56:55 -08:00
Paul Gauthier (aider)
6212b38ea6 style: Format code and remove unnecessary whitespace 2025-03-05 16:55:56 -08:00
Paul Gauthier (aider)
ce7e5726e7 feat: Add boto3 check for Bedrock models in sanity_check_model 2025-03-05 16:55:51 -08:00
Paul Gauthier
1156b3f22e feat: Add Pillow library to project requirements 2025-03-05 16:39:42 -08:00
Paul Gauthier
66097f3507 make torch 2.2.2 pin explicit 2025-03-05 16:34:45 -08:00
Paul Gauthier
146f02d314 refactor: Remove redundant numpy version constraint from requirements files 2025-03-05 16:32:16 -08:00
Paul Gauthier
77e5882ce7 Merge branch 'main' of github.com:Aider-AI/aider 2025-03-05 16:29:50 -08:00
Paul Gauthier
d44850a4f3 pickup pillow 11.1.0 2025-03-05 16:29:40 -08:00
paul-gauthier
e6e692dc43 Merge pull request #3423 from akirak/git-config
Retrieve the identity using git-config command
2025-03-05 16:21:00 -08:00
Paul Gauthier
dc65770ae3 Add qwq32b on fireworks 2025-03-05 16:19:19 -08:00
Paul Gauthier (aider)
8c15802277 refactor: Add comment explaining closing tag splitting logic 2025-03-05 16:03:00 -08:00
Paul Gauthier (aider)
3d666d9929 style: Apply linter formatting to models.py 2025-03-05 16:02:14 -08:00
Paul Gauthier (aider)
c0c960ec2e refactor: Enhance remove_reasoning_content to handle incomplete tag patterns 2025-03-05 16:02:08 -08:00
Paul Gauthier
2bb4db127c fix: Normalize path separators for git config include path on Windows 2025-03-05 15:51:45 -08:00
Paul Gauthier (aider)
dd1a5d4f58 fix: Improve git config include path handling for Windows tests 2025-03-05 15:50:06 -08:00
Paul Gauthier (aider)
961fdf7029 fix: Normalize git config include path for cross-platform compatibility 2025-03-05 15:37:30 -08:00
Paul Gauthier (aider)
ff3d2b006f refactor: Handle EOFError gracefully in confirm_ask and prompt_ask methods 2025-03-05 15:30:44 -08:00
Paul Gauthier (aider)
d7efbad3df fix: Update git config include directive assertion in test 2025-03-05 15:20:30 -08:00
Paul Gauthier (aider)
d70995bb1a fix: Remove unused variable and fix f-string in test_git_config_include_directive 2025-03-05 15:19:42 -08:00
Paul Gauthier (aider)
1b58e95dce style: Fix linting issues in test_main.py 2025-03-05 15:19:23 -08:00
Paul Gauthier (aider)
780f70d5c6 test: Enhance git config include tests with manual config file verification 2025-03-05 15:19:18 -08:00
Paul Gauthier (aider)
a01e1f96fa refactor: Remove unused original_config variable in git config setup 2025-03-05 15:17:35 -08:00
Paul Gauthier (aider)
3adb443ca5 style: Fix linting issues in test_main.py 2025-03-05 15:16:49 -08:00
Paul Gauthier (aider)
dc9ff3a004 feat: Add test for git config include directive in repository config 2025-03-05 15:16:43 -08:00
Paul Gauthier (aider)
f879f4f432 style: Fix linting issues in test_main.py 2025-03-05 15:15:15 -08:00
Paul Gauthier (aider)
183f831a7e test: Add test for git config include to verify aider respects user settings 2025-03-05 15:15:09 -08:00
Paul Gauthier
3c361be621 refactor: Simplify pip-compile script by removing annotation-style flag 2025-03-05 14:49:40 -08:00
Paul Gauthier (aider)
5764d44faf feat: Add verbosity and annotations to pip-compile script 2025-03-05 14:45:42 -08:00
Paul Gauthier
ce86677faa Merge branch 'main' of github.com:Aider-AI/aider 2025-03-05 14:43:26 -08:00
Paul Gauthier
17d93b39d5 bump deps with new uv compile 2025-03-05 14:38:41 -08:00
Paul Gauthier (aider)
1357b85a3d feat: Add --no-strip-extras flag to uv pip compile commands 2025-03-05 14:37:27 -08:00
Paul Gauthier (aider)
c67cb5c604 refactor: Replace pip-compile with uv pip compile in dependency management script 2025-03-05 09:24:43 -08:00
paul-gauthier
6ffb0df6cb Merge pull request #3443 from gmoz22/main 2025-03-05 00:37:01 -08:00
gmoz22
032b40c78d Merge branch 'main' of https://github.com/gmoz22/aider into main 2025-03-05 00:11:37 -06:00
gmoz22
742aea115b Adding OpenRouter deepseek-chat:free (V3) 2025-03-05 00:08:36 -06:00
gmoz22
0f16cd46f9 Adding OpenRouter deepseek-chat:free (V3) 2025-03-05 00:03:00 -06:00
Paul Gauthier
eea64cf272 copy 2025-03-04 14:03:10 -08:00
Paul Gauthier (aider)
3d5c5f8054 refactor: Rename check_push_access to check_ok_to_push 2025-03-04 14:02:30 -08:00
Paul Gauthier
748099a324 refactor: Improve git push access check logging and error handling 2025-03-04 14:02:27 -08:00
Paul Gauthier (aider)
9c1d050d8b feat: Add git command output display in check_push_access function 2025-03-04 14:00:51 -08:00
Paul Gauthier
4ef834e295 copy 2025-03-04 13:59:34 -08:00
Paul Gauthier (aider)
50bead172b style: Apply linter formatting to versionbump.py script 2025-03-04 13:57:07 -08:00
Paul Gauthier (aider)
ee4508af03 refactor: Move check functions to top level of script 2025-03-04 13:57:01 -08:00
Paul Gauthier
6638959d66 Merge branch 'claui-fix-requirements-conflicts' 2025-03-04 13:35:10 -08:00
Paul Gauthier
f266a9d25d bumped deps 2025-03-04 13:31:25 -08:00
Paul Gauthier
6cb8e1a518 Merge branch 'fix-requirements-conflicts' of github.com:claui/aider into claui-fix-requirements-conflicts 2025-03-04 13:28:56 -08:00
Paul Gauthier (aider)
85375359ed style: Apply linter formatting to versionbump.py script 2025-03-04 13:24:28 -08:00
Paul Gauthier (aider)
17c9ba2c68 feat: Add git push dry-run check before version bump 2025-03-04 13:24:22 -08:00
Paul Gauthier
34334ad8b8 chore: Add dry run git push check before version bump 2025-03-04 13:24:18 -08:00
Paul Gauthier
4527714094 set version to 0.75.3.dev 2025-03-04 13:23:17 -08:00
Paul Gauthier
b43d74dbb7 version bump to 0.75.2 2025-03-04 13:20:35 -08:00
Paul Gauthier
0c4140ff02 copy 2025-03-04 13:20:31 -08:00
Paul Gauthier
b074c02fa2 bump deps 2025-03-04 12:45:00 -08:00
Paul Gauthier
7636c97f9f copy 2025-03-04 12:42:36 -08:00
Paul Gauthier
4211ab28b0 Merge branch 'main' of github.com:Aider-AI/aider 2025-03-04 12:41:29 -08:00
paul-gauthier
cecfbc7e20 Merge pull request #3435 from matfat55/main 2025-03-03 15:14:25 -08:00
Mattias
31a6aff932 update default model to 3.7 sonnet 2025-03-03 18:07:25 -05:00
Claudia Pellegrino
c4a67c4356 chore: bump dependencies according to latest fix
Now that the fix from the previous commit is active, sync up the
dependencies via `scripts/pip-compile.sh --upgrade`.
2025-03-03 22:02:22 +01:00
Akira Komamura
9f5765134b fix: Use git command to get the identity
This takes the global git configuration into account, so it will become
unnecessary to set a local identity in every repository.
2025-03-03 19:19:01 +09:00
Paul Gauthier
0c5b51d2ac copy 2025-03-02 07:47:39 -08:00
Claudia Pellegrino
31c4198cee fix: let fewer conflicts occur across requirements
**tl;dr** Introduce a common umbrella constraints file (that works
across requirement extras) to avoid package version conflicts and
to reduce the need for manual pinning in `*.in` files.

Previously, spurious package version conflicts could sometimes occur
across requirements for `pip install -e .`, `pip install -e .[help]`,
`pip install -e .[playwright]`, and so on. Here’s why:

- There are five different requirement configs: the set of base
  requirements (`requirements.txt`) and four additional requirement sets\
  (aka "extras"): `dev`, `help`, `browser`, and `playwright`.

- Each of those five configurations spans its own tree of dependencies
  [1]. Those five trees can slightly overlap. (For example, `greenlet`
  is a transitive requirement for both the `help` and `playwright`
  trees, respectively.)

- If you want to resolve those dependency trees so you get concrete
  version numbers, you can’t just look at each tree independently.
  This is because when trees overlap, they sometimes pull in the same
  package for different reasons, respectively, and maybe with different
  version constraints.
  For example, the `help` tree pulls in `greenlet`, because `sqlalchemy`
  requires it. At the same time, the `playwright` tree also pulls in
  `greenlet` because it’s needed by the `playwright` package.
  Resolving those constraints strictly individually (i.e., per tree) is
  usually a mistake. It may work for a while, but occasionally you’re
  going to end up with two conflicting versions of the same package.

To prevent those version conflicts from occurring, the five
`pip-compile` invocations were designed as a chain.
The process starts at the smallest tree (i.e., the base
`requirements.in` file). It calculates the version numbers for the tree,
remembers the result, and feeds it into the calculation of the next
tree.

The chain design somewhat helped mitigate conflicts, but not always.
The reason for that is that the chain works like a greedy algorithm:
once a decision has been made for a given package in a tree, that
decision is immediately final, and the compilation process isn’t allowed
to go back and change that decision if it learns new information.
New information comes in all the time, because larger trees usually have
more complex constraints than smaller trees, and the process visits
larger trees later, facing additional constraints as it hops from tree
to tree. Sometimes it bumps into a new constraint against a package for
which it has already made a decision earlier (i.e., it has pinned the
concrete version number in the `requirements*.txt` file of an earlier
tree).

That’s why the greedy chain-based method, even though it mostly works
just fine, can never avoid spurious conflicts entirely.
To help mitigate those conflicts, pinning entries were manually added to
`requirements.in` files on a case-by-case basis as conflicts occurred.
Those entries can make the file difficult to reason about, and they must
be kept in sync manually as packages get upgraded. That’s a maintenance
burden.

Turning the chain into an umbrella may help. Instead of hopping from
tree to tree, look at the entire forest at once, calculate all the
concrete version numbers for all trees in one fell swoop, and save the
results in a common, all-encompassing umbrella file.

Armed with the umbrella file (called `common-constraints.txt`), visit
each tree (in any order – it no longer matters) and feed it just the
umbrella file as a constraint, along with its own `*.in` file as the
input.
Chaining is no longer necessary, because the umbrella file already
contains all version constraints for all the packages one tree could
possibly need, and then some.

This technique should reduce manual pinning inside `*.in` files, and
makes sure that computed version numbers no longer contradict each other
across trees.

[1]: From a graph theory point of view, I’m being blatantly incorrect
here; those dependency graphs are usually not trees, because they have
cycles. I’m still going to call them "trees" for the sake of this
discussion, because the word "tree" feels less abstract and intimidating
and hopefully more relatable.
2025-03-02 02:50:03 +01:00
Paul Gauthier
a94c4b4ce4 pricing 2025-02-27 14:34:47 -08:00
Paul Gauthier (aider)
088dd99ec1 refactor: Change cost chart to scatter plot with markers 2025-02-27 14:15:23 -08:00
Paul Gauthier (aider)
4f9b907b4d feat: Conditionally plot cost data only when non-zero 2025-02-27 14:12:59 -08:00
Paul Gauthier (aider)
e7dc3e6062 feat: Add line plot of total costs with right y-axis scale 2025-02-27 13:43:30 -08:00
Paul Gauthier
53055e78eb Merge branch 'main' of github.com:Aider-AI/aider 2025-02-27 13:19:56 -08:00
Paul Gauthier
9a9c34aa18 add gpt-4.5 to leaderboard 2025-02-27 13:07:07 -08:00
Paul Gauthier
2f1384840c feat: Add metadata and settings for GPT-4.5-preview and GPT-4o models 2025-02-27 13:01:52 -08:00
Paul Gauthier
b462e55799 feat: Add gpt-4.5-preview model metadata and settings 2025-02-27 12:20:15 -08:00
paul-gauthier
263ec60ba6 Merge pull request #3399 from pcgeek86/patch-1
Update Aider documentation for Amazon Bedrock 📄
2025-02-27 10:08:32 -08:00
Trevor Sullivan
8d44a57200 Update Aider documentation for Amazon Bedrock 📄 2025-02-27 10:33:06 -07:00
Paul Gauthier (aider)
976722c129 refactor: Update problem_stats.py to use polyglot_leaderboard.yml 2025-02-27 08:56:54 -08:00
Paul Gauthier
4a9447d344 bump deps 2025-02-26 09:07:15 -08:00
Paul Gauthier
ac2ed9aa87 copy 2025-02-26 09:05:46 -08:00
Paul Gauthier
51cf241dae copy 2025-02-26 09:05:16 -08:00
Paul Gauthier
f239b8e26d copy 2025-02-26 09:03:53 -08:00
Paul Gauthier (aider)
ab9f4161ea refactor: Update weak_model_name to match main model name pattern 2025-02-26 09:03:38 -08:00
Paul Gauthier (aider)
1d10e649b7 feat: Add Claude 3.7 Sonnet models to model-settings.yml 2025-02-26 08:59:45 -08:00
Paul Gauthier (aider)
a95b40aac6 docs: Update LM Studio example commands with dummy key and default URL 2025-02-26 08:54:46 -08:00
Paul Gauthier
1b5777821f Merge branch 'main' of github.com:Aider-AI/aider 2025-02-26 08:53:52 -08:00
paul-gauthier
587d469193 Merge pull request #3388 from jklina/clarify-llm-studio-instructions
Add clarifying instructions to LM Studio config
2025-02-26 08:53:38 -08:00
Paul Gauthier
6c3e30f3ea copy 2025-02-26 07:50:52 -08:00
Paul Gauthier
91dbcae9e2 Merge branch 'main' of github.com:Aider-AI/aider 2025-02-26 07:50:43 -08:00
Paul Gauthier
fb5db4f6b7 copy 2025-02-26 07:50:30 -08:00
Paul Gauthier
a1e029a825 added settings for openrouter/anthropic/claude-3.7-sonnet:beta 2025-02-26 07:49:55 -08:00
paul-gauthier
54dbf9b6f2 Merge pull request #3389 from filiptrplan/patch-1 2025-02-26 07:28:31 -08:00
Filip Trplan
b6344951fe add gemini-2.0-pro-exp-02-05 polyglot benchmark 2025-02-26 15:04:48 +01:00
Josh Klina
ea972118b5 Add clarifying instructions to LM Studio config
There are a few small gotchas when configuring LM Studio to work with aider. This adds a few clarifying instructions.
2025-02-26 08:59:39 -05:00
Jon Keys
c980fd0e77 use playwright if available when invoking scraper via cli 2025-02-25 19:08:02 -08:00
paul-gauthier
2fccd4799d Merge pull request #3363 from MatthewZMD/typo 2025-02-25 07:40:56 -08:00
Paul Gauthier
a3937e4d0d copy 2025-02-25 06:35:35 -08:00
Mingde (Matthew) Zeng
acb022d5d5 Fix typo 2025-02-25 02:46:29 -05:00
Paul Gauthier
b6e46d6101 copy 2025-02-24 20:20:55 -08:00
Paul Gauthier
347f75f804 copy 2025-02-24 17:23:14 -08:00
Paul Gauthier
4005ced505 copy 2025-02-24 17:17:34 -08:00
Paul Gauthier
c748c35b37 set version to 0.75.2.dev 2025-02-24 15:41:02 -08:00
Paul Gauthier
a73836ca43 version bump to 0.75.1 2025-02-24 15:39:16 -08:00
Paul Gauthier
b357fab326 copy 2025-02-24 15:39:02 -08:00
Paul Gauthier
16a3000451 feat: Add OpenRouter Claude 3.7 Sonnet model configuration 2025-02-24 15:36:25 -08:00
Paul Gauthier
c4fac2d179 added sonnet 37 w/32k think 2025-02-24 15:15:24 -08:00
Paul Gauthier
60d11a6eba use LONG_TIMEOUT 2025-02-24 13:51:21 -08:00
Paul Gauthier
93edbda984 copy 2025-02-24 13:29:22 -08:00
Paul Gauthier
75bd94d757 updated blame 2025-02-24 12:53:46 -08:00
Paul Gauthier
a5cf0b6ef5 set version to 0.75.1.dev 2025-02-24 12:34:55 -08:00
Paul Gauthier
506280d645 version bump to 0.75.0 2025-02-24 12:33:23 -08:00
Paul Gauthier (aider)
2f79b4fde7 test: Update sonnet model name in test_models.py 2025-02-24 12:32:47 -08:00
Paul Gauthier
846f98628d copy 2025-02-24 12:28:11 -08:00
Paul Gauthier
eed9be5a9e added sonnet 37 to leaderboard 2025-02-24 12:16:14 -08:00
Paul Gauthier
27c77afafc copy 2025-02-24 12:13:47 -08:00
Paul Gauthier
c156b2f817 feat: Update Claude Sonnet model to latest version 2025-02-24 12:11:49 -08:00
Paul Gauthier (aider)
96fcc5df6b fix: Resolve Windows path escaping issue in test_editor.py 2025-02-24 12:09:33 -08:00
Paul Gauthier (aider)
3c775fd5de fix: Resolve Windows path handling and editor command test issues 2025-02-24 12:09:26 -08:00
Paul Gauthier
75e9ee6528 added claude 37 2025-02-24 11:53:07 -08:00
Paul Gauthier
ea0ee96398 test: Add error message to editor file extension assertion 2025-02-24 11:45:48 -08:00
Paul Gauthier (aider)
3fd4a2841a fix: Use separate temp file for log in editor test script 2025-02-24 10:39:16 -08:00
Paul Gauthier (aider)
6ecf44c87a refactor: Remove unused shlex import from editor.py 2025-02-24 10:22:04 -08:00
Paul Gauthier
031e8cea6e feat: Add pipe_editor function for system editor interaction 2025-02-24 10:21:59 -08:00
Paul Gauthier (aider)
757fbb0124 refactor: Remove unused pytest import in test_editor.py 2025-02-24 10:21:51 -08:00
Paul Gauthier
d65e3f73df refactor: Simplify editor discovery and command handling logic 2025-02-24 10:21:45 -08:00
Paul Gauthier (aider)
5b13105d58 fix: Update tests to match string return type of discover_editor() 2025-02-24 10:20:46 -08:00
Paul Gauthier (aider)
c8745afb37 fix: Preserve Windows paths in editor command parsing 2025-02-24 10:18:22 -08:00
Paul Gauthier (aider)
85189c0bde fix: Update temporary script logging to use f-string and full sys.argv 2025-02-24 10:11:58 -08:00
Paul Gauthier (aider)
a8635bade2 fix: Improve test_pipe_editor_with_fake_editor reliability by using explicit log file path 2025-02-24 10:11:45 -08:00
Paul Gauthier (aider)
4560572ff2 style: Fix code formatting in test_editor.py 2025-02-24 09:47:24 -08:00
Paul Gauthier (aider)
c7fa57fd14 refactor: Make test_pipe_editor cross-platform using Python script 2025-02-24 09:47:20 -08:00
Paul Gauthier (aider)
54965fdf2e style: Fix linter warnings in test_editor.py 2025-02-24 09:46:33 -08:00
Paul Gauthier (aider)
30361aa685 fix: Remove unused 'result' variable in test_pipe_editor_with_shell_script 2025-02-24 09:46:29 -08:00
Paul Gauthier (aider)
8be93b72c4 style: Format code and organize imports in test_editor.py 2025-02-24 09:46:20 -08:00
Paul Gauthier (aider)
c7e9d645e5 test: Add test for pipe_editor with shell script logging arguments 2025-02-24 09:46:16 -08:00
Paul Gauthier
fe6a3c89f3 copy 2025-02-24 09:44:57 -08:00
Paul Gauthier
686a32cbc0 refactor: Remove debug dump call in pipe_editor function 2025-02-24 09:28:31 -08:00
Paul Gauthier (aider)
55d7397ff5 style: Organize imports and remove unused import 2025-02-24 09:22:40 -08:00
Paul Gauthier (aider)
3714d554df refactor: Update subprocess call to use shell=True with properly quoted command string 2025-02-24 09:22:34 -08:00
Paul Gauthier
0415de853b fix: Remove shell=True and add debug dump in pipe_editor 2025-02-24 09:22:28 -08:00
Paul Gauthier
0ba1e8f904 set version to 0.74.4.dev 2025-02-23 08:54:05 -08:00
Paul Gauthier
58bfcb0953 version bump to 0.74.3 2025-02-23 08:52:31 -08:00
Paul Gauthier
fa281d89d2 copy 2025-02-23 08:52:06 -08:00
Paul Gauthier
908b10dae0 copy 2025-02-23 08:50:49 -08:00
paul-gauthier
ea03f9def0 Merge pull request #3333 from akaihola/editor-test-fix 2025-02-22 05:22:52 -08:00
Antti Kaihola
3510799fca fix: test for get_environment_editor()
The test for `EDITOR` preference failed to clean up any existing value
of `VISUAL` which may be present in the environment pytest is run in.
2025-02-22 10:12:08 +02:00
Paul Gauthier
1f4a63d6db add socksio dep #3048 2025-02-19 14:37:48 -08:00
Paul Gauthier
dd94a444d2 feat: Add OpenRouter O3 Mini High model configuration to metadata and settings 2025-02-19 13:51:51 -08:00
Paul Gauthier
50fafc9ff6 bump deps; downgrade streamlit per #3221 2025-02-19 13:47:21 -08:00
Paul Gauthier
47fc6a689d Revert "fix: Ignore decoding errors when reading text files"
This reverts commit f67ea5d010.
2025-02-19 13:18:17 -08:00
paul-gauthier
86175a1827 Merge pull request #3127 from FeepingCreature/fix/sort-file-tokens
refactor: Sort files by token count in cmd_tokens
2025-02-18 11:50:36 -08:00
FeepingCreature (aider)
6d6e25df4e refactor: Sort files by token count in cmd_tokens 2025-02-18 20:11:50 +01:00
paul-gauthier
5402ed112c Merge pull request #3283 from ffluk3/add-build-gradle-kts
fix: add build.gradle.kts to special.py
2025-02-17 08:07:41 -08:00
Lucas Shadler
235b83d02e fix: add build.gradle.kts to special.py
Now that aider supports Kotlin syntax, this change will allow for indexing of kotlin-based gradle project files
2025-02-17 06:22:43 -08:00
Paul Gauthier
6ffbec969a copy 2025-02-15 12:01:40 -08:00
Paul Gauthier
185ea71646 Merge branch 'main' of github.com:Aider-AI/aider 2025-02-15 12:00:47 -08:00
Paul Gauthier
69fcc3acd7 fix: Change file reading error handling from "ignore" to "replace" 2025-02-15 12:00:39 -08:00
paul-gauthier
da94cf4aab Merge pull request #3252 from devriesd/editor-shell-true
subprocess called with shell true
2025-02-14 09:15:17 -08:00
Daniel de Vries
8799cf95b4 subprocess now called with shell true 2025-02-14 11:47:45 -05:00
Paul Gauthier (aider)
108ce18d51 style: Fix linting issues in io.py file 2025-02-13 12:12:40 -08:00
Paul Gauthier (aider)
f67ea5d010 fix: Ignore decoding errors when reading text files 2025-02-13 12:12:35 -08:00
Paul Gauthier
dd857aeccf fix: Handle file reading with encoding, ignore decoding errors 2025-02-13 12:12:33 -08:00
Paul Gauthier
44b1acd385 feat: Add tree-sitter language pack configuration and version pinning 2025-02-10 14:25:42 -08:00
Paul Gauthier
b2f6018e05 Merge branch 'main' into ts-pack 2025-02-10 13:59:10 -08:00
Paul Gauthier
bca6507f11 bump deps 2025-02-10 11:48:19 -08:00
Paul Gauthier (aider)
30332c2ba5 style: Apply linter formatting to issues.py script 2025-02-10 11:37:35 -08:00
Paul Gauthier (aider)
17919d7503 refactor: Add priority label check to prevent bot actions on priority issues 2025-02-10 11:37:30 -08:00
Paul Gauthier
42237ced80 feat: Add CLI option to install tree-sitter language pack 2025-02-09 17:19:19 -08:00
Paul Gauthier
737021ccdf Merge branch 'main' into ts-pack 2025-02-09 17:13:53 -08:00
Paul Gauthier
22ed9d8d7c set version to 0.74.3.dev 2025-02-09 15:27:49 -08:00
Paul Gauthier
49dcd11813 version bump to 0.74.2 2025-02-09 15:26:05 -08:00
Paul Gauthier
7c30086d78 copy 2025-02-09 15:25:49 -08:00
Paul Gauthier
e2dbfdc537 feat: Add configurable cache keepalive delay and pings option 2025-02-09 15:22:19 -08:00
Mir Adnan ALI
3e8f9aa31c fix: Use shlex.quote() to lint filepaths containing shell metacharacters 2025-02-08 17:31:01 -05:00
Paul Gauthier
674eb109c2 copy 2025-02-08 06:49:14 -08:00
Paul Gauthier
927b5bc8cc Merge branch 'main' into ts-pack 2025-02-07 18:10:37 -08:00
Paul Gauthier
f7dd0fc582 refactor: Modify cache warming mechanism with ok_to_warm_cache flag 2025-02-07 16:39:35 -08:00
Paul Gauthier (aider)
35f30bde04 style: Apply linter formatting to base_coder.py 2025-02-07 16:26:09 -08:00
Paul Gauthier (aider)
a682b50fd4 refactor: Improve cache warming thread cleanup in Coder class 2025-02-07 16:26:02 -08:00
Paul Gauthier
3b5024749f fix: Modify cache warming logic with debug dump statements 2025-02-07 16:26:00 -08:00
Paul Gauthier
2a56d892d7 works with both tsl and tsl-pack 2025-02-07 16:18:09 -08:00
Paul Gauthier
e3d5eaf388 reorg scm files 2025-02-07 15:29:28 -08:00
Paul Gauthier (aider)
5d1f50117b refactor: Improve file lookup logic in get_scm_fname 2025-02-07 15:23:50 -08:00
Paul Gauthier
f6a2ec15d7 refactor: Update get_scm_fname to support multiple query subdirectories 2025-02-07 15:23:48 -08:00
Paul Gauthier
64a8d56725 reorg scm files 2025-02-07 15:17:59 -08:00
Paul Gauthier
71caea32e7 cleanup 2025-02-07 15:11:21 -08:00
Paul Gauthier
17993ef9ff works 2025-02-07 14:26:59 -08:00
Paul Gauthier
b0aa4ef4c8 wip 2025-02-07 11:34:33 -08:00
Paul Gauthier
5c4aaa27d9 Merge branch 'main' into ts-pack 2025-02-07 11:15:10 -08:00
Paul Gauthier
53586d95d0 updated blame 2025-02-07 11:06:30 -08:00
Paul Gauthier (aider)
3877ab1f00 style: Apply linter formatting to blame.py 2025-02-07 10:57:42 -08:00
Paul Gauthier (aider)
2425322e8d refactor: Improve test file filtering logic in blame script 2025-02-07 10:57:38 -08:00
Paul Gauthier (aider)
3f80a113d1 style: Lint and format blame.py script 2025-02-07 10:56:50 -08:00
Paul Gauthier (aider)
9ad20849d3 feat: Include language test files in blame script 2025-02-07 10:56:46 -08:00
Paul Gauthier
c8c58280d8 refactor: Modify file filtering logic in blame script 2025-02-07 10:56:44 -08:00
Paul Gauthier
d40505cd16 copy 2025-02-07 10:55:10 -08:00
Paul Gauthier
25c5f84090 rename 2025-02-07 10:55:01 -08:00
Paul Gauthier (aider)
a58293f04b feat: Add sample Terraform code for HCL language testing 2025-02-07 10:53:28 -08:00
Paul Gauthier
1408fb41b8 feat: Add Terraform HCL fixture file for testing 2025-02-07 10:53:27 -08:00
Paul Gauthier
cb7cb8e527 Add attribution 2025-02-07 10:51:00 -08:00
Paul Gauthier
d750dbc703 bump deps to pickup grep-ast 0.5.0 2025-02-07 10:50:49 -08:00
paul-gauthier
91b417138a Merge pull request #3173 from krewenki/main
Add support for terraform/hcl repomaps
2025-02-07 10:49:02 -08:00
Warren Krewenki
db5eabd927 Add hcl queries and bump required grep-ast 2025-02-07 14:42:19 -04:00
Paul Gauthier
cbcc0fde04 copy 2025-02-07 08:56:02 -08:00
Paul Gauthier
cca3b98a09 set version to 0.74.2.dev 2025-02-07 08:55:43 -08:00
Paul Gauthier
e63b8ff35d version bump to 0.74.1 2025-02-07 08:54:04 -08:00
Paul Gauthier
b6a37bf0e2 copy 2025-02-07 08:51:29 -08:00
Paul Gauthier
249ca4fd75 remove useless tests 2025-02-07 08:51:20 -08:00
Paul Gauthier (aider)
d382869b98 style: Apply linter formatting to test_coder.py 2025-02-07 08:47:39 -08:00
Paul Gauthier (aider)
41a3c27aba feat: Update system prompt prefix tests to check first line 2025-02-07 08:47:33 -08:00
Paul Gauthier (aider)
af48c46c30 style: Fix linting issues in test_coder.py 2025-02-07 08:39:39 -08:00
Paul Gauthier (aider)
52bc51a197 test: Add tests for system_prompt_prefix functionality 2025-02-07 08:39:33 -08:00
Paul Gauthier (aider)
57ca9cc840 feat: Add continuation prompt for multiline input in prompt_toolkit 2025-02-07 08:36:52 -08:00
Paul Gauthier
56d6a47ad3 remove ". " from multiline input 2025-02-07 08:34:16 -08:00
Paul Gauthier
b806360a49 copy 2025-02-06 16:47:41 -08:00
Paul Gauthier
739a88ed00 Add -DEXERCISM_RUN_ALL_TESTS to cpp tests 2025-02-06 16:41:59 -08:00
Paul Gauthier (aider)
38d4341e59 build: Add libboost-all-dev to Dockerfile for C++ support 2025-02-06 16:41:45 -08:00
Paul Gauthier
6118d91922 improve unit tests in benchmark 2025-02-06 16:27:29 -08:00
Paul Gauthier
71ac7efafe copy 2025-02-06 15:35:10 -08:00
Paul Gauthier
cf0710225c Tell o1 & o3-mini to use markdown 2025-02-06 15:32:21 -08:00
Paul Gauthier
21e96df85a copy 2025-02-06 14:56:58 -08:00
Paul Gauthier
79f32c2ebd set version to 0.74.1.dev 2025-02-06 14:36:46 -08:00
Paul Gauthier
492a1f69b3 version bump to 0.74.0 2025-02-06 14:35:10 -08:00
Paul Gauthier
32b962e186 copy 2025-02-06 14:32:59 -08:00
Paul Gauthier
37beb8e6b2 copy 2025-02-06 14:29:02 -08:00
Paul Gauthier
1ee9f3815d copy 2025-02-06 14:28:56 -08:00
Paul Gauthier
65a5e8721c copy 2025-02-06 14:28:07 -08:00
Paul Gauthier (aider)
036c7a2117 fix: Remove unnecessary f-string without placeholders 2025-02-06 14:15:17 -08:00
Paul Gauthier
229e8e1ad1 refactor: Update file addition confirmation message and add TimeoutError to git error handling 2025-02-06 14:15:09 -08:00
Paul Gauthier
390bb1bdc5 copy 2025-02-06 14:11:18 -08:00
Paul Gauthier
83b401b241 feat: Add dot after newline in multiline input mode 2025-02-06 14:10:22 -08:00
Paul Gauthier (aider)
cfb2c1f62a style: Format code with linter 2025-02-06 14:07:38 -08:00
Paul Gauthier (aider)
4ad7df746e style: Move imports to top of file to fix E402 errors 2025-02-06 14:07:33 -08:00
Paul Gauthier (aider)
a218b1d3d0 style: Run linter on aider/io.py 2025-02-06 14:06:42 -08:00
Paul Gauthier (aider)
6f61aff735 fix: Replace bare except and reorganize imports in io.py 2025-02-06 14:06:36 -08:00
Paul Gauthier (aider)
4893f78286 style: Format code with linter 2025-02-06 14:05:55 -08:00
Paul Gauthier (aider)
97296f3169 fix: Remove unused variable and add missing decorator 2025-02-06 14:05:47 -08:00
Paul Gauthier (aider)
ebcf4364f5 fix: Restore multiline mode after interruptions using decorator 2025-02-06 14:05:14 -08:00
Paul Gauthier (aider)
6d0078d39b style: Remove trailing whitespace in test_io.py 2025-02-06 13:56:22 -08:00
Paul Gauthier (aider)
9b80b693c1 test: add tests for multiline mode restoration after prompt interrupts 2025-02-06 13:56:14 -08:00
Paul Gauthier
2e1e26fdb9 copy 2025-02-06 13:45:23 -08:00
Paul Gauthier
ddeb43783c refactor: Update model switching to preserve weak model configuration 2025-02-06 13:43:58 -08:00
Paul Gauthier
b61e527baa copy 2025-02-06 13:25:05 -08:00
Paul Gauthier
53ce96b48f refactor: Remove redundant test case for request timeout in send_completion 2025-02-06 11:48:55 -08:00
Paul Gauthier (aider)
36ea166c20 test: add request_timeout tests for Model class 2025-02-06 11:47:57 -08:00
Paul Gauthier (aider)
f9fd4c71f1 fix: Add missing timeout parameter to test assertion 2025-02-06 11:47:08 -08:00
Paul Gauthier (aider)
44171417e3 fix: Update test assertions to include timeout parameter 2025-02-06 11:46:39 -08:00
Paul Gauthier
b554a46a4c copy 2025-02-06 11:41:03 -08:00
Paul Gauthier (aider)
19a2c37678 style: Apply linting to models.py file 2025-02-06 11:37:52 -08:00
Paul Gauthier (aider)
23d74040ed refactor: Improve timeout handling in litellm.completion method 2025-02-06 11:37:47 -08:00
Paul Gauthier
685e63b9da fix: Adjust timeout handling in litellm.completion method 2025-02-06 11:37:44 -08:00
Paul Gauthier
39855f4d2b refactor: Change timeout handling to use float type and global request_timeout 2025-02-06 11:36:15 -08:00
Paul Gauthier
ae6fc41ca9 feat: Add new OpenAI model names to supported models list 2025-02-06 11:21:18 -08:00
Paul Gauthier
1bb41bec2a copy 2025-02-06 09:55:12 -08:00
Paul Gauthier
041d679a54 refactor: Remove debug dump call in LiteLLMExceptions class 2025-02-06 09:53:53 -08:00
Paul Gauthier
46058c275c refactor: Simplify exception handling and remove redundant validation in LiteLLMExceptions 2025-02-06 09:53:42 -08:00
Paul Gauthier
b9e15a1340 copy 2025-02-06 09:53:31 -08:00
Paul Gauthier (aider)
f9eb4ffee2 style: Remove trailing whitespace in exceptions.py 2025-02-06 09:51:38 -08:00
Paul Gauthier (aider)
419952f33b refactor: Convert exception_names to dict mapping names to ExInfo 2025-02-06 09:51:33 -08:00
Paul Gauthier
af8bdcd9e0 refactor: Simplify exception validation logic in LiteLLMExceptions 2025-02-06 09:51:31 -08:00
Paul Gauthier (aider)
54122af9d7 style: Reorder imports in exceptions.py 2025-02-06 09:49:44 -08:00
Paul Gauthier (aider)
5e4852bd32 refactor: Optimize exception lookup using a set in LiteLLMExceptions 2025-02-06 09:49:40 -08:00
Paul Gauthier
3714f9fdbd refactor: Add dump import and debug output in LiteLLMExceptions 2025-02-06 09:49:37 -08:00
Paul Gauthier (aider)
a9dd6e0f3d style: Remove trailing whitespace in test_models.py 2025-02-06 09:33:30 -08:00
Paul Gauthier (aider)
3c9f4ee555 test: Add tests for use_temperature behavior in Model class 2025-02-06 09:33:23 -08:00
Paul Gauthier
7ff0b4c6b9 copy 2025-02-06 08:52:50 -08:00
Paul Gauthier
648662469b copy 2025-02-06 08:51:24 -08:00
Paul Gauthier
c37ddd7872 refactor: Update test_get_roots_to_watch to include .gitignore in watched roots 2025-02-06 08:50:49 -08:00
Paul Gauthier (aider)
17f35cde19 refactor: Move MinimalCoder class definition to module level in test_watch.py 2025-02-06 08:43:26 -08:00
Paul Gauthier (aider)
b5d17b99df style: Format code and fix whitespace issues 2025-02-06 08:43:11 -08:00
Paul Gauthier (aider)
5c9746e209 refactor: Split watch_files() into testable components and add tests 2025-02-06 08:43:04 -08:00
Paul Gauthier (aider)
51938affc2 style: Format test_models.py with linter 2025-02-06 08:36:38 -08:00
Paul Gauthier (aider)
856006a68d test: add tests for remove_reasoning_content and simple_send_with_retries 2025-02-06 08:36:33 -08:00
Paul Gauthier (aider)
a2622263ce test: add cases for 's'/'skip' and 'a'/'all' in confirm_ask without group 2025-02-06 08:29:00 -08:00
Paul Gauthier (aider)
7db1613b1a test: Add provider-prefixed deepseek model test cases 2025-02-06 08:25:59 -08:00
Paul Gauthier
3add686e9b test: Remove gpt-4-turbo test case from test_models.py 2025-02-06 08:25:38 -08:00
Paul Gauthier (aider)
a9f0983f0f test: add tests for configure_model_settings covering all cases 2025-02-06 08:23:34 -08:00
Paul Gauthier (aider)
3b16d6c291 fix: Update test_ollama_uses_existing_num_ctx to match actual call parameters 2025-02-06 08:22:19 -08:00
Paul Gauthier (aider)
85399bd6e2 style: Format code with linter in test_models.py 2025-02-06 08:21:48 -08:00
Paul Gauthier (aider)
aef2b95d41 fix: Reset MODEL_SETTINGS between tests to prevent parameter leakage 2025-02-06 08:21:42 -08:00
Paul Gauthier (aider)
11a233da84 fix: Update test assertions to match actual model completion call parameters 2025-02-06 08:20:38 -08:00
Paul Gauthier (aider)
016aa87e34 style: Format strings with double quotes in test_models.py 2025-02-06 08:19:25 -08:00
Paul Gauthier (aider)
9094af565f test: add tests for Ollama model num_ctx handling 2025-02-06 08:19:19 -08:00
Paul Gauthier
d7de908c66 copy 2025-02-06 08:13:46 -08:00
Paul Gauthier
a3985ac94c copy 2025-02-06 08:07:05 -08:00
Paul Gauthier
b48f26020a Merge branch 'main' of github.com:Aider-AI/aider 2025-02-06 07:52:43 -08:00
Paul Gauthier
630d3679b5 copy 2025-02-06 07:51:08 -08:00
Paul Gauthier
78c89eb29b refactor: Expand valid responses and options for user prompts 2025-02-06 07:50:47 -08:00
Paul Gauthier
7fe4996bbe add gemini/gemini-2.0-flash 2025-02-06 07:50:39 -08:00
paul-gauthier
370deda5a7 Merge pull request #3152 from daysm/patch-1 2025-02-06 06:05:14 -08:00
Dayyan Smith
d0d8ff8313 Fix typo 2025-02-06 10:27:06 +01:00
Paul Gauthier
550b9ebf4d limit benchmark docker memory 2025-02-05 16:40:03 -08:00
Paul Gauthier
2265456bda copy 2025-02-05 13:45:32 -08:00
Paul Gauthier
b0f1cde33f copy 2025-02-05 13:02:26 -08:00
Paul Gauthier
cdd150be42 cleanup 2025-02-05 13:02:16 -08:00
Paul Gauthier (aider)
0d24d75d8f style: Format code with linter for improved readability 2025-02-05 13:01:04 -08:00
Paul Gauthier (aider)
5c866c67b5 fix: Handle summarizer failure gracefully with fallback and warning 2025-02-05 13:00:57 -08:00
Paul Gauthier
b49fea87ab quad_backtick_reminder 2025-02-05 12:59:15 -08:00
Paul Gauthier
1c262d22ce add test case for #2879 2025-02-05 12:53:32 -08:00
Paul Gauthier
0dde77009e re-enabled quad-backticks, but allow triple-backticks as fences when searching for filenames #2879 2025-02-05 12:50:02 -08:00
Paul Gauthier
3e71c35fdd stop using quad-backticks: LLMs ignore and revert to triple-backtick, causing #2879 2025-02-05 12:42:19 -08:00
Paul Gauthier
10f1fc5e92 Merge branch 'main' of github.com:Aider-AI/aider 2025-02-04 17:04:01 -08:00
Paul Gauthier
8fbad757bf copy 2025-02-04 16:34:21 -08:00
Paul Gauthier
5755aa3eb8 feat: Improve model metadata handling and startup performance 2025-02-04 16:34:07 -08:00
Paul Gauthier (aider)
f76d14f613 chore: Run linter on test_main.py for code quality improvements 2025-02-04 16:30:06 -08:00
Paul Gauthier (aider)
0c3470bab2 feat: Update test_model_metadata_file to reset local model metadata 2025-02-04 16:30:01 -08:00
Paul Gauthier
315ad06ecc docs: Add comment to reset model_info_manager in test_model_metadata_file 2025-02-04 16:29:52 -08:00
Paul Gauthier (aider)
c1627612cf refactor: Move LOCAL_MODEL_METADATA to ModelInfoManager as an instance attribute 2025-02-04 16:28:10 -08:00
Paul Gauthier
b5cfceeed6 refactor: Rename LITELLM_MODEL_DEFS to LOCAL_MODEL_METADATA for clarity 2025-02-04 16:21:56 -08:00
Paul Gauthier
7fe7dd743c refactor: Remove debug logging and simplify model data retrieval 2025-02-04 16:13:28 -08:00
Paul Gauthier
3e36f27987 feat: Add Fireworks AI API key support to model configuration 2025-02-04 16:12:02 -08:00
Paul Gauthier (aider)
b9f4f3f71c style: Apply linter formatting to models.py 2025-02-04 16:10:56 -08:00
Paul Gauthier (aider)
ff1230c3ae feat: Add API key mappings for various model providers 2025-02-04 16:10:51 -08:00
Paul Gauthier
e71ec574e1 refactor: Improve model environment key validation and detection 2025-02-04 16:10:49 -08:00
Paul Gauthier
c2e716ec4a refactor: Change LITELLM_MODEL_DEFS from list to dict for efficient model registration 2025-02-04 16:00:20 -08:00
Paul Gauthier (aider)
5ad8bb1830 refactor: Defer litellm registration to improve loading performance 2025-02-04 15:56:18 -08:00
paul-gauthier
751e78baa9 Merge pull request #3137 from aroffe99/patch-1 2025-02-04 14:12:30 -08:00
Ari Roffe
be620bd437 Update adv-model-settings.md 2025-02-04 16:09:11 -06:00
Paul Gauthier
44365651a6 copy 2025-02-04 14:03:00 -08:00
Paul Gauthier
7b557c0586 refactor: Change default temperature to None and remove debug dump 2025-02-04 14:00:25 -08:00
Paul Gauthier (aider)
495a27c0a7 refactor: Make use_temperature support both bool and float types 2025-02-04 13:58:54 -08:00
Paul Gauthier
e07fddb20b refactor: Update temperature handling in Model class 2025-02-04 13:58:53 -08:00
Paul Gauthier
56eb1d106f default to remove_reasoning:think for any unknown r1 model 2025-02-04 13:51:05 -08:00
Paul Gauthier (aider)
c8b6d61ae2 fix: Add missing 're' import for regex operations 2025-02-04 13:37:50 -08:00
Paul Gauthier
47e91e943c refactor: Modify response content handling and reasoning removal logic 2025-02-04 13:37:43 -08:00
Paul Gauthier
4f8c52f09e copy 2025-02-04 13:23:05 -08:00
Paul Gauthier
f20b32b01b refactor: Remove debug dump statement from file watcher 2025-02-04 13:14:45 -08:00
Paul Gauthier (aider)
37cbb5ed01 style: Format code to comply with linter standards 2025-02-04 13:14:27 -08:00
Paul Gauthier (aider)
289e13cb46 fix: Convert paths to POSIX format for .gitignore matching on Windows 2025-02-04 13:14:23 -08:00
Paul Gauthier (aider)
fb03c4c311 style: Run linter and format code in FileWatcher class 2025-02-04 13:12:13 -08:00
Paul Gauthier (aider)
a65aecaf74 fix: Append trailing slash for directory paths in roots_to_watch filtering 2025-02-04 13:12:10 -08:00
Paul Gauthier
da9ba0a26a refactor: Update dump to filter roots_to_watch for tmp.benchmarks 2025-02-04 13:12:09 -08:00
Paul Gauthier (aider)
8440e881c0 fix: Use relative path for matching files against .gitignore patterns 2025-02-04 13:10:45 -08:00
Paul Gauthier
85fa8a4761 feat: Add debug statement to log presence of 'tmp.benchmarks' in roots_to_watch 2025-02-04 13:10:43 -08:00
Paul Gauthier (aider)
5c8c78ca69 style: Format code with linter adjustments for readability 2025-02-04 13:03:32 -08:00
Paul Gauthier (aider)
e9097c3b29 feat: Filter top-level directories based on .gitignore in file watcher 2025-02-04 13:03:29 -08:00
Paul Gauthier (aider)
d53ee24741 build: Add boto3 to Dockerfile pip install commands 2025-02-04 12:52:05 -08:00
Paul Gauthier
6517cb15ef copy 2025-02-04 12:47:33 -08:00
Paul Gauthier (aider)
7b78f92feb refactor: Remove unused proceed variable in check_tokens method 2025-02-04 12:45:59 -08:00
Paul Gauthier
0af6dc3838 refactor: Simplify context window handling and remove Ollama-specific warnings 2025-02-04 12:45:44 -08:00
Paul Gauthier (aider)
e313a2ea45 feat: Update kwargs to include num_ctx for ollama if not set 2025-02-04 12:31:48 -08:00
Paul Gauthier
f21ef30482 feat: Add methods to identify deepseek and ollama models 2025-02-04 12:31:10 -08:00
Paul Gauthier (aider)
606fce65ab test: Fix assertion errors in commit message tests for mock calls 2025-02-04 12:22:09 -08:00
Paul Gauthier (aider)
b4084484ff fix: Update test patches to mock simple_send_with_retries correctly 2025-02-04 12:20:13 -08:00
Paul Gauthier (aider)
80062908d9 test: Fix mocking setup for simple_send_with_retries in tests 2025-02-04 12:17:45 -08:00
Paul Gauthier (aider)
af8f7e95b0 test: Mock simple_send_with_retries method in test setup 2025-02-04 12:11:43 -08:00
Paul Gauthier (aider)
9553478384 test: Fix patch target for simple_send_with_retries in tests 2025-02-04 12:06:59 -08:00
Paul Gauthier (aider)
535b3ce286 refactor: Update calls to simple_send_with_retries to use model method 2025-02-04 12:04:25 -08:00
Paul Gauthier (aider)
cfe9c86edd fix: Remove unused import from test_sendchat.py 2025-02-04 12:03:10 -08:00
Paul Gauthier (aider)
ee66044425 refactor: Update send_completion calls to use model method syntax 2025-02-04 12:02:38 -08:00
Paul Gauthier
30d56e1af0 refactor: Simplify model completion parameters and remove extra configuration 2025-02-04 11:50:42 -08:00
Paul Gauthier (aider)
354630770b style: Run linter and fix import formatting in base_coder.py and models.py 2025-02-04 11:45:49 -08:00
Paul Gauthier (aider)
74da63e3ca refactor: Move RETRY_TIMEOUT constant to models.py 2025-02-04 11:45:40 -08:00
Paul Gauthier
faa438bc51 refactor: Simplify send_completion method by removing extra_params argument 2025-02-04 11:45:39 -08:00
Paul Gauthier (aider)
6de6fb1932 chore: Run linter and fix import order in base_coder.py 2025-02-04 11:45:09 -08:00
Paul Gauthier (aider)
6a8acefa30 fix: Import RETRY_TIMEOUT to resolve undefined name error 2025-02-04 11:45:05 -08:00
Paul Gauthier
ddec8325e7 fix: Simplify temperature handling in model completion call 2025-02-04 11:45:04 -08:00
Paul Gauthier (aider)
b1852526f5 style: Run linter and format import statements in models.py 2025-02-04 11:38:30 -08:00
Paul Gauthier (aider)
20aaf58ee9 refactor: Move aider.sendchat imports to the top of the file 2025-02-04 11:38:26 -08:00
Paul Gauthier (aider)
b3db597c4b fix: Remove unused import of simple_send_with_retries in history.py 2025-02-04 11:37:15 -08:00
Paul Gauthier (aider)
d302f228f9 fix: Update method call to use model's simple_send_with_retries 2025-02-04 11:37:01 -08:00
Paul Gauthier (aider)
74d5e2b0c1 style: Run linter and fix formatting issues in repo.py 2025-02-04 11:36:16 -08:00
Paul Gauthier (aider)
dd42d24d8a fix: Remove unused import of simple_send_with_retries in repo.py 2025-02-04 11:36:13 -08:00
Paul Gauthier (aider)
5692fb32cd fix: Remove unused imports from repo.py and base_coder.py 2025-02-04 11:35:58 -08:00
Paul Gauthier (aider)
dbf80d564b refactor: Update method calls to use model's instance methods 2025-02-04 11:35:35 -08:00
Paul Gauthier (aider)
72b82a8d19 style: Run linter and fix whitespace issues in models.py and sendchat.py 2025-02-04 11:34:45 -08:00
Paul Gauthier (aider)
c3beaedaa6 chore: remove CACHE logic from sendchat and models files 2025-02-04 11:34:38 -08:00
Paul Gauthier (aider)
db694b20df style: Run linter and fix import order in models.py and sendchat.py 2025-02-04 11:33:49 -08:00
Paul Gauthier (aider)
34227ce738 fix: Remove unused imports from sendchat.py and add hashlib import in models.py 2025-02-04 11:33:43 -08:00
Paul Gauthier (aider)
24b1360eb8 style: Run linter and fix whitespace issues in models.py and sendchat.py 2025-02-04 11:33:05 -08:00
Paul Gauthier (aider)
60aff26d94 refactor: Move send_completion and simple_send_with_retries to Model class 2025-02-04 11:32:58 -08:00
Paul Gauthier
144bdf7dc7 cleanup 2025-02-04 11:28:40 -08:00
Paul Gauthier (aider)
8db4bb298e style: Apply linter fixes to models.py 2025-02-04 11:25:09 -08:00
Paul Gauthier (aider)
028477f34d refactor: Prevent overwriting existing num_ctx for Ollama models 2025-02-04 11:25:04 -08:00
Paul Gauthier
6725c9e3cd feat: Add Ollama model context size configuration in model settings 2025-02-04 11:25:02 -08:00
paul-gauthier
a14dee5b8d Merge pull request #3136 from szepeviktor/typos
Correct a typo
2025-02-04 11:02:35 -08:00
Paul Gauthier
2f8a1fc58f copy 2025-02-04 10:59:14 -08:00
Viktor Szépe
f250c4310e Correct a typo 2025-02-04 18:57:42 +00:00
Paul Gauthier
ad46e8a5e0 feat: Add model-specific configuration settings for various AI models 2025-02-04 10:44:50 -08:00
Paul Gauthier
1e7031e5f4 copy 2025-02-04 09:50:25 -08:00
Paul Gauthier
8c736e979d copy 2025-02-04 09:48:40 -08:00
Paul Gauthier
335742a023 copy 2025-02-04 09:46:26 -08:00
Paul Gauthier
384ff3484c copy 2025-02-04 09:33:56 -08:00
Paul Gauthier (aider)
e17c29c258 style: Fix linter warnings in main.py 2025-02-04 08:04:23 -08:00
Paul Gauthier (aider)
e7d979ca74 feat: Conditionally add .env to .gitignore based on file existence 2025-02-04 08:04:17 -08:00
Paul Gauthier
bc2f38c790 refactor: Simplify gitignore check and error handling logic 2025-02-04 08:04:16 -08:00
Paul Gauthier (aider)
88ee089d86 style: Apply linter formatting to main.py 2025-02-04 07:59:32 -08:00
Paul Gauthier (aider)
d9adaa5020 fix: Handle git errors in check_gitignore function 2025-02-04 07:59:26 -08:00
Paul Gauthier (aider)
4a963adbcb refactor: Simplify check_gitignore function and remove AI comments 2025-02-04 07:58:32 -08:00
Paul Gauthier
56ac57b4cf feat: Enhance gitignore checking with improved repo ignore detection and pattern handling 2025-02-04 07:58:28 -08:00
Paul Gauthier
cdbe2393c4 copy 2025-02-04 07:55:01 -08:00
Paul Gauthier
2f4490d059 fix: Update Dockerfile HOME env to persist container data in host filesystem 2025-02-04 07:51:00 -08:00
Paul Gauthier
447660504c added azure/o3-mini 2025-02-04 07:50:06 -08:00
Paul Gauthier
5e44d18d54 feat: Enhance gitignore prompt with option to skip check 2025-02-03 19:02:51 -08:00
Paul Gauthier
7a9edae227 copy 2025-02-03 18:58:25 -08:00
Paul Gauthier (aider)
81b7bd35f4 fix: Adjust permissions for directories to allow writing with -u switch 2025-02-03 18:53:16 -08:00
Paul Gauthier
4b946a23ca chore: Set HOME environment variable in Dockerfile 2025-02-03 18:53:15 -08:00
Paul Gauthier
5ab92b1833 chat:free -> r1:free 2025-02-03 10:28:07 -08:00
Paul Gauthier
1a6a16e061 chore: Update polyglot leaderboard with new test run data 2025-01-31 15:13:34 -08:00
Paul Gauthier
061b602334 feat: Add OpenRouter O3-Mini and GPT-4O-Mini model configurations 2025-01-31 15:09:40 -08:00
Paul Gauthier
f7deb02560 copy 2025-01-31 14:00:43 -08:00
Paul Gauthier
9dfe85eca3 copy 2025-01-31 14:00:22 -08:00
Paul Gauthier
cd5823d9f6 set version to 0.73.1.dev 2025-01-31 13:48:42 -08:00
Paul Gauthier
1af0a6cc8f version bump to 0.73.0 2025-01-31 13:46:55 -08:00
Paul Gauthier
9ed8ebab78 refactor: Use getattr with default for checking main_model.extra_params 2025-01-31 13:40:54 -08:00
Paul Gauthier
7f82a33bf5 copy 2025-01-31 13:36:04 -08:00
Paul Gauthier
41a7e5c915 copy 2025-01-31 13:32:39 -08:00
Paul Gauthier
8d22c0ba90 add o3mini high 2025-01-31 13:32:30 -08:00
Paul Gauthier (aider)
4636ae7237 feat: Add total cost column to polyglot leaderboard table 2025-01-31 13:24:27 -08:00
Paul Gauthier (aider)
ee9d0c4a99 style: Format code with linter and improve readability 2025-01-31 13:13:10 -08:00
Paul Gauthier (aider)
476a0ad6ad test: Add test for --reasoning-effort CLI option 2025-01-31 13:13:05 -08:00
Paul Gauthier
14612fc116 better arg desc 2025-01-31 13:10:19 -08:00
Paul Gauthier (aider)
5c87787351 style: Apply linter formatting to main.py 2025-01-31 13:07:15 -08:00
Paul Gauthier (aider)
3fa796382e feat: Add --reasoning-effort CLI parameter to control model reasoning effort 2025-01-31 13:07:08 -08:00
Paul Gauthier
f4f4761517 feat: Add CLI parameter for reasoning effort in main model configuration 2025-01-31 13:07:06 -08:00
Paul Gauthier
c78de41ccf copy 2025-01-31 12:51:33 -08:00
Paul Gauthier
b0d58d10bd o3-mini 2025-01-31 12:37:10 -08:00
Paul Gauthier
f778741ee3 added o3-mini 2025-01-31 12:35:49 -08:00
Paul Gauthier
2fb517b293 copy 2025-01-31 09:13:50 -08:00
Paul Gauthier
aecc32fbfb copy 2025-01-31 09:13:36 -08:00
Paul Gauthier
64c8c0590c copy 2025-01-31 09:06:48 -08:00
Paul Gauthier
24dc436122 copy 2025-01-31 09:04:40 -08:00
Paul Gauthier
1e1fef52c4 fix: Improve default input handling and model selection logic 2025-01-31 09:04:27 -08:00
Paul Gauthier (aider)
c8b9e2ff37 fix: Update model name assertion tests to use partial matching 2025-01-31 09:02:00 -08:00
Paul Gauthier (aider)
34a6902986 style: Format test code with consistent line breaks and indentation 2025-01-31 09:01:14 -08:00
Paul Gauthier (aider)
0c47b0eb53 test: Add tests for default model selection and API key precedence 2025-01-31 09:01:09 -08:00
Paul Gauthier (aider)
5d4ef7d009 fix: Remove incorrect self. reference in main() function 2025-01-31 08:59:36 -08:00
Paul Gauthier
31d23bc9a7 feat: Add model and API key validation with documentation link 2025-01-31 08:59:26 -08:00
Paul Gauthier
b4b54d1796 feat: Add support for OpenRouter and GPT-4o model selection with improved model detection 2025-01-31 08:46:16 -08:00
Paul Gauthier (aider)
5023dfeb24 refactor: Replace if/else chain with list of tuples for model selection 2025-01-31 08:42:25 -08:00
Paul Gauthier (aider)
dad3092d8d feat: Add dynamic model selection based on available API keys 2025-01-31 08:42:02 -08:00
Paul Gauthier
ab77c032de feat: Add dynamic model selection based on available API keys 2025-01-31 08:42:00 -08:00
Paul Gauthier
778e54ef32 copy 2025-01-30 08:44:32 -08:00
Paul Gauthier
699db63615 copy 2025-01-30 08:38:38 -08:00
Paul Gauthier
01d0e13884 chore: Update polyglot leaderboard with Qwen Max test results 2025-01-30 08:38:28 -08:00
Paul Gauthier
d743c196be undo 2025-01-30 08:38:19 -08:00
Paul Gauthier (aider)
c60ec18f34 feat: Update leaderboard highlight to extract model from URL query 2025-01-30 08:37:01 -08:00
Paul Gauthier
1be1274d40 fix: Update default highlight model in leaderboard documentation 2025-01-30 08:36:53 -08:00
Paul Gauthier (aider)
a65b49ea30 feat: Use URL query parameter for highlighting models in leaderboard 2025-01-30 08:35:13 -08:00
Paul Gauthier
762d14c5a1 docs: Add comment about potential highlight parameter usage in leaderboard 2025-01-30 08:35:10 -08:00
Paul Gauthier
bd44c52cbb copy 2025-01-30 08:23:43 -08:00
Paul Gauthier
4cbdd27862 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-30 08:22:32 -08:00
Paul Gauthier
62cf42efb4 feat: Add DeepSeek R1 Distill LLaMA 70B model configuration 2025-01-30 08:22:01 -08:00
paul-gauthier
47dc30ea79 Merge pull request #3074 from kennyfrc/fireworks_ai
Add `fireworks_ai/deepseek` models
2025-01-30 08:21:20 -08:00
kennyfrc
55abdff58c feat: Add extra_params with max_tokens to model settings configuration 2025-01-30 21:38:45 +08:00
kennyfrc
27cde532be feat: Add model metadata and settings for fireworks_ai/deepseek 2025-01-30 21:08:51 +08:00
Paul Gauthier
9c2bd58488 refactor: Update OpenRouter model metadata with zero token costs 2025-01-29 13:31:57 -08:00
Paul Gauthier
a3c898fc4f Merge branch 'main' of github.com:Aider-AI/aider 2025-01-29 13:29:50 -08:00
paul-gauthier
da380119ef Merge pull request #3061 from bphd/addingDeepSeekR1Free
Adding deep seek r1 free
2025-01-29 13:29:38 -08:00
Paul Gauthier
db631e3d57 copy 2025-01-29 13:27:52 -08:00
paul-gauthier
fb63f9cc92 Merge pull request #3064 from bphd/addingDirectoriesAutoCreation
Adding directories auto creation
2025-01-29 13:15:37 -08:00
xqyz
31e738a5a3 Merge branch 'Aider-AI:main' into addingDirectoriesAutoCreation 2025-01-29 18:12:57 +00:00
xqyz
f3b1b351e8 Update HISTORY.md: Adding R1 free 2025-01-29 17:41:49 +00:00
xqyz
149ecb380b Update model-metadata.json: Adding R1 free 2025-01-29 17:40:42 +00:00
xqyz
67a43ff549 Update model-settings.yml: Adding R1 free 2025-01-29 17:40:01 +00:00
xqyz
69f29d6fac Update adv-model-settings.md: Adding R1 free 2025-01-29 17:39:11 +00:00
xqyz
51c12ef745 Update infinite-output.md: Adding R1 free 2025-01-29 17:38:19 +00:00
xqyz
d0e89ec72a Update HISTORY.md: R1 free 2025-01-29 17:37:44 +00:00
Paul Gauthier
74c8b381e6 copy 2025-01-29 08:43:53 -08:00
Paul Gauthier
ddbd4236ab Merge branch 'main' of github.com:Aider-AI/aider 2025-01-29 08:43:38 -08:00
Paul Gauthier
c0cbb5c75d copy 2025-01-29 08:43:29 -08:00
paul-gauthier
717d00e64a Merge pull request #3054 from zhyu/patch-1 2025-01-29 05:58:00 -08:00
Yu Zhang
19e9e52c4f remove redundant extra_params 2025-01-29 15:27:32 +09:00
Yu Zhang
1df2465222 Fix docs regarding extra_body 2025-01-29 15:18:59 +09:00
Paul Gauthier (aider)
70883d7fdc refactor: Remove total cost column from markdown table 2025-01-28 19:05:55 -08:00
Paul Gauthier
f3f5f0f896 docs: Remove total cost column from DeepSeek performance table 2025-01-28 19:05:53 -08:00
Paul Gauthier
a7828809e9 copy 2025-01-28 19:05:05 -08:00
Paul Gauthier (aider)
b80a2b0bc2 feat: Add Hyperbolic section with DeepSeek V3 configuration details 2025-01-28 19:01:12 -08:00
Paul Gauthier
88d897eb14 copy 2025-01-28 18:47:17 -08:00
Paul Gauthier
2e9f562329 copy 2025-01-28 18:44:45 -08:00
Paul Gauthier
7aa6a30169 fix: Update Ollama context window handling and input confirmation logic 2025-01-28 18:44:34 -08:00
Paul Gauthier
298f713e9b copy 2025-01-28 16:33:25 -08:00
Paul Gauthier
aa339d0851 refactor: Improve text processing by stripping whitespace after removing reasoning tags 2025-01-28 14:16:02 -08:00
Paul Gauthier
ebb8596f03 move model settings to resources/yml 2025-01-28 13:36:31 -08:00
Paul Gauthier (aider)
fb57d3beef refactor: Sort MODEL_SETTINGS by name in get_model_settings_as_yaml 2025-01-28 13:35:35 -08:00
Paul Gauthier
8488175ee8 refactor: Sort model settings by name in get_model_settings_as_yaml 2025-01-28 13:35:33 -08:00
Paul Gauthier (aider)
e68191dcd9 fix: Move importlib.resources import to top of file 2025-01-28 13:31:49 -08:00
Paul Gauthier (aider)
0019a1f7dc style: Apply linter formatting to models.py 2025-01-28 13:31:38 -08:00
Paul Gauthier (aider)
5095a9e1c3 feat: Load model settings from package resource using importlib.resources 2025-01-28 13:31:32 -08:00
Paul Gauthier
ddbaa8b32b refactor: Move model settings to external YAML configuration file 2025-01-28 13:31:31 -08:00
Paul Gauthier
9f7275eced copy 2025-01-28 13:28:10 -08:00
Paul Gauthier
3d8e6823f7 copy 2025-01-28 13:23:11 -08:00
Paul Gauthier (aider)
1368348cd9 refactor: Optimize model settings YAML generation by omitting default values 2025-01-28 13:20:57 -08:00
Paul Gauthier
b31cf90596 refactor: Optimize model settings YAML generation by skipping default values 2025-01-28 13:20:55 -08:00
Paul Gauthier
66025a06d5 copy 2025-01-28 13:06:40 -08:00
Paul Gauthier
65c8504141 copy 2025-01-28 13:00:35 -08:00
Paul Gauthier
cd16e001f6 verbose 2025-01-28 11:52:07 -08:00
Paul Gauthier
77d2bc58fd copy 2025-01-28 11:30:22 -08:00
Paul Gauthier
bfc57459e1 copy 2025-01-28 11:24:32 -08:00
Paul Gauthier
3422718415 copy 2025-01-28 11:22:09 -08:00
Paul Gauthier
0b5e0a1113 copy 2025-01-28 11:16:48 -08:00
Paul Gauthier (aider)
b6b44e0f2d feat: Add table of contents to DeepSeek V3 providers post 2025-01-28 11:15:35 -08:00
Paul Gauthier
b642543600 docs: Add Ollama model configuration instructions to DeepSeek post 2025-01-28 11:15:31 -08:00
Paul Gauthier (aider)
095a05a8e1 feat: Add Ollama setup instructions for DeepSeek V3 in documentation 2025-01-28 11:13:57 -08:00
Paul Gauthier
4783204f31 docs: Add Ollama configuration details for DeepSeek V3 model 2025-01-28 11:13:55 -08:00
Paul Gauthier
82d819a6c7 copy 2025-01-28 11:04:01 -08:00
Paul Gauthier
10e7875680 copy 2025-01-28 11:03:38 -08:00
Paul Gauthier (aider)
2aad566857 docs: Add Fireworks API key setup instructions for aider 2025-01-28 10:59:52 -08:00
Paul Gauthier
a3e0a3ff1a docs: Update DeepSeek V3 alternative providers article 2025-01-28 10:59:50 -08:00
paul-gauthier
8fe9ad80bb Merge pull request #3043 from andreakeesys/patch-1
Update deepseek.md
2025-01-28 10:55:25 -08:00
Paul Gauthier
531262387d copy 2025-01-28 10:53:18 -08:00
Paul Gauthier
a73cd87b50 copy 2025-01-28 10:50:18 -08:00
Paul Gauthier
4601940f8d copy 2025-01-28 10:49:44 -08:00
Paul Gauthier
6e5b2c7368 cleanup 2025-01-28 10:49:40 -08:00
Paul Gauthier
8a3cc6041d sync model settings 2025-01-28 10:49:21 -08:00
Paul Gauthier
25687c2db1 bump deps 2025-01-28 10:49:09 -08:00
Paul Gauthier (aider)
871229d0c5 style: Remove duplicate import of re module 2025-01-28 10:08:48 -08:00
Paul Gauthier (aider)
74d179e479 refactor: Move re import to top and remove AI comment 2025-01-28 10:08:42 -08:00
Paul Gauthier
910d384ed8 refactor: Move re import comment for clarity 2025-01-28 10:08:38 -08:00
Paul Gauthier (aider)
da89d6ab9c style: Format code with linter and improve readability 2025-01-28 10:06:29 -08:00
Paul Gauthier (aider)
8d2159761f refactor: Implement reasoning removal with regex in base_coder 2025-01-28 10:06:21 -08:00
Paul Gauthier
d434f8641d refactor: Prepare for potential reasoning tag removal in text merging 2025-01-28 10:06:19 -08:00
Paul Gauthier (aider)
f49733d1d2 feat: Add remove_reasoning setting to ModelSettings 2025-01-28 10:04:12 -08:00
Paul Gauthier (aider)
a3726d72f5 fix: Update DeepSeek model name from v3 to chat in documentation 2025-01-28 09:58:50 -08:00
Paul Gauthier (aider)
fe89ae13af docs: Add API key configuration methods for OpenRouter 2025-01-28 09:58:21 -08:00
Paul Gauthier (aider)
6b90cd1277 feat: Add Fireworks configuration example and provider adaptation guidance 2025-01-28 09:54:27 -08:00
Paul Gauthier (aider)
ce64ec5397 docs: Add documentation for configuring model settings and provider selection 2025-01-28 09:53:51 -08:00
Paul Gauthier (aider)
bf6ca2dc78 docs: Update article to address DeepSeek API reliability issues and provide alternatives 2025-01-28 09:52:20 -08:00
Paul Gauthier (aider)
204c68d475 feat: Add blog post template for DeepSeek V3 polyglot benchmark results 2025-01-28 09:51:26 -08:00
Paul Gauthier
5a7e59d833 docs: Add blog post about DeepSeek model downtime 2025-01-28 09:51:24 -08:00
Paul Gauthier (aider)
0336a982ff feat: Add model settings loading and registration to benchmark script 2025-01-28 09:39:39 -08:00
Paul Gauthier (aider)
aa18b63c16 refactor: Simplify model settings loading in benchmark script 2025-01-28 09:38:57 -08:00
Paul Gauthier (aider)
3f890551e7 fix: Add missing read_model_settings parameter to run_test_real function 2025-01-28 09:33:14 -08:00
Paul Gauthier (aider)
823127c87e style: Apply linter formatting to benchmark.py 2025-01-28 09:32:55 -08:00
Paul Gauthier (aider)
cf2c9c6dc7 feat: Add --read-model-settings option to benchmark for loading model settings 2025-01-28 09:32:46 -08:00
Paul Gauthier
9b63b90ec4 refactor: Remove unnecessary blank line in benchmark.py 2025-01-28 09:32:35 -08:00
Paul Gauthier
a0ba140895 copy 2025-01-28 09:27:40 -08:00
Andrea Bergamasco
588f2502ec Update deepseek.md
Added API key instructions
2025-01-28 12:08:55 +01:00
Paul Gauthier
ae7d4592e1 copy 2025-01-27 18:29:52 -08:00
Paul Gauthier
24c7d145ea copy 2025-01-27 17:01:59 -08:00
Paul Gauthier
f1e7d68415 copy 2025-01-27 17:01:44 -08:00
Paul Gauthier
91f1528149 copy 2025-01-27 16:47:14 -08:00
Paul Gauthier (aider)
4f19f89d4c docs: Add link to advanced model settings in OpenRouter documentation 2025-01-27 16:46:03 -08:00
Paul Gauthier (aider)
60b8bccd37 feat: Add documentation for controlling OpenRouter provider selection in model settings 2025-01-27 16:45:00 -08:00
Paul Gauthier
674dcba53c copy 2025-01-27 09:29:49 -08:00
Paul Gauthier
3dec9e531f refactor: improve context window size handling for Ollama models 2025-01-26 19:09:27 -08:00
Paul Gauthier
980197cb05 copy 2025-01-26 19:05:52 -08:00
Paul Gauthier
5d30c71ccf copy 2025-01-26 19:02:55 -08:00
Paul Gauthier
1dcc5ca9f3 proceed unless ollama 2025-01-26 19:01:07 -08:00
Paul Gauthier
1eb24981c6 copy 2025-01-26 18:58:43 -08:00
Paul Gauthier
cb6b8ea5ac refactor: Improve token limit error messages and fix typo in warning method 2025-01-26 18:53:31 -08:00
Paul Gauthier (aider)
546a662a30 refactor: change token limit suggestions from tool_error to tool_output 2025-01-26 18:51:59 -08:00
Paul Gauthier
ef84c4dfad refactor: Add comment for future tool output conversion 2025-01-26 18:51:57 -08:00
Paul Gauthier (aider)
8ca81d0991 fix: handle missing extra_params attribute in Ollama model 2025-01-26 18:50:12 -08:00
Paul Gauthier (aider)
02e8158918 style: fix line wrapping in Ollama context window message 2025-01-26 18:49:28 -08:00
Paul Gauthier (aider)
37cbe6c488 feat: add Ollama context window size warning with documentation link 2025-01-26 18:49:21 -08:00
Paul Gauthier (aider)
58d763f971 feat: add confirmation prompt when token limits are exceeded 2025-01-26 18:47:39 -08:00
Paul Gauthier (aider)
3d2700d29d feat: add token limit check before sending messages to LLM 2025-01-26 18:46:42 -08:00
Paul Gauthier (aider)
e14ea94b0d style: fix line length in keyboard interrupt message handling 2025-01-26 18:46:11 -08:00
Paul Gauthier (aider)
17fde3df0c fix: remove extra bracket causing syntax error in base_coder.py 2025-01-26 18:46:05 -08:00
Paul Gauthier (aider)
162204f28f feat: improve keyboard interrupt message handling 2025-01-26 18:45:51 -08:00
Paul Gauthier
491fb14eaa feat: append keyboard interrupt message to last user message 2025-01-26 18:45:49 -08:00
Paul Gauthier
f4d7fe8850 copy 2025-01-26 13:54:06 -08:00
Paul Gauthier
4af583e5d5 copy 2025-01-26 13:49:22 -08:00
Paul Gauthier
282887368a Merge branch 'main' of github.com:Aider-AI/aider 2025-01-26 08:23:36 -08:00
paul-gauthier
94e372d8f2 Merge pull request #3004 from tao12345666333/fix-ds-link 2025-01-26 07:39:39 -08:00
Jintao Zhang
3cb67939e4 docs: clean DeepSeek Coder v2
Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2025-01-26 23:11:14 +08:00
paul-gauthier
f3197d2618 Merge pull request #3000 from tao12345666333/update-deepseek-doc 2025-01-26 06:28:50 -08:00
Jintao Zhang
3785f7621c docs: update DeepSeek v2 Coder to v3 Chat
Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2025-01-26 15:29:54 +08:00
Paul Gauthier
2b59badde7 copy 2025-01-25 08:46:40 -08:00
Paul Gauthier
54162b43c8 refactor: Reorder model settings and update FAQ token statistics 2025-01-25 08:46:28 -08:00
Paul Gauthier (aider)
1933cdc28c style: Reformat code to comply with linter rules 2025-01-25 08:43:46 -08:00
Paul Gauthier (aider)
f2512d1ff1 refactor: ensure 'name' field appears first in YAML output 2025-01-25 08:43:40 -08:00
Paul Gauthier (aider)
d54b13e80a style: Format code with consistent string quotes 2025-01-25 08:38:28 -08:00
Paul Gauthier (aider)
8ed5e81bdb refactor: order YAML output with name first and add blank lines 2025-01-25 08:38:21 -08:00
Paul Gauthier
f0fc83372b refactor: Reorder YAML output to prioritize "name" field and add spacing 2025-01-25 08:38:19 -08:00
Paul Gauthier
081504edab copy 2025-01-25 08:37:07 -08:00
Paul Gauthier
b939123e84 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-25 08:32:29 -08:00
Paul Gauthier
f008d9dd19 feat: Add Azure O1 model configuration to MODEL_SETTINGS 2025-01-25 08:31:10 -08:00
Paul Gauthier
d2386af523 copy 2025-01-25 08:31:00 -08:00
paul-gauthier
41b9024e28 Merge pull request #2989 from hstoklosa/fix-typo
fix typo in README.md
2025-01-25 08:29:29 -08:00
Paul Gauthier
50c17bd5e4 set version to 0.72.4.dev 2025-01-25 08:15:36 -08:00
Paul Gauthier
1882c43389 version bump to 0.72.3 2025-01-25 08:13:57 -08:00
Paul Gauthier
d7027887cc copy 2025-01-25 08:13:38 -08:00
Paul Gauthier
7d8c9df252 copy 2025-01-25 08:08:44 -08:00
hstoklosa
e1e465dc51 fix typo in README.md 2025-01-25 06:07:31 +00:00
Paul Gauthier
b276d48ecf copy 2025-01-24 18:36:01 -08:00
Paul Gauthier
0c13734f7a copy 2025-01-24 15:50:04 -08:00
Paul Gauthier (aider)
de788266eb style: Format test_sendchat.py with consistent newlines 2025-01-24 09:19:21 -08:00
Paul Gauthier (aider)
eb879a743e test: add tests for ensure_alternating_roles function 2025-01-24 09:19:16 -08:00
Paul Gauthier (aider)
231bceeabb style: Fix whitespace in docstring 2025-01-24 09:14:55 -08:00
Paul Gauthier (aider)
387b7602cf style: Break long lines to comply with flake8 E501 2025-01-24 09:14:51 -08:00
Paul Gauthier
d8c14c04e3 refactor: standardize string quotes and improve model name handling 2025-01-24 09:14:37 -08:00
paul-gauthier
33f981d8f1 Merge pull request #2982 from miradnanali/ensure-alternating-roles-for-deepseek-reasoner
Ensure alternating roles for deepseek-reasoner
2025-01-24 09:11:58 -08:00
Paul Gauthier
6188b89ff0 copy 2025-01-24 09:06:59 -08:00
Paul Gauthier
2d424e078e copy 2025-01-24 09:05:53 -08:00
Paul Gauthier
ee5d72301a copy 2025-01-24 08:47:25 -08:00
Paul Gauthier
ddb02adbb4 copy 2025-01-24 08:35:29 -08:00
Paul Gauthier
b6b05f79a1 copy 2025-01-24 08:32:41 -08:00
Paul Gauthier
4a438e4799 copy 2025-01-24 08:29:40 -08:00
Paul Gauthier
31dc69da42 copy 2025-01-24 08:26:29 -08:00
Paul Gauthier (aider)
35dfd13ddd feat: make chart legend visibility configurable via show_legend assign 2025-01-24 08:24:01 -08:00
Paul Gauthier (aider)
b4535bd29b feat: hide legend in leaderboard chart 2025-01-24 08:23:28 -08:00
Paul Gauthier
5a30ec1806 docs: Add comment to hide legend in leaderboard script 2025-01-24 08:23:26 -08:00
Paul Gauthier
d7bb80468b copy 2025-01-24 08:22:13 -08:00
Mir Adnan ALI
92f6d31f33 Updated patch to avoid KeyError on malformed dict 2025-01-24 05:25:21 -05:00
Mir Adnan ALI
421bc93765 Ensure alternating roles for deepseek-reasoner 2025-01-24 03:58:08 -05:00
Paul Gauthier (aider)
9d6a692054 feat: Show "?" when total cost is 0 in table 2025-01-23 15:31:42 -08:00
Paul Gauthier (aider)
278c7bfc53 fix: Correct currency formatting in table cells using Liquid filters 2025-01-23 15:29:20 -08:00
Paul Gauthier (aider)
ad23c0e03e feat: format total_cost as $x.xx in table display 2025-01-23 15:28:33 -08:00
Paul Gauthier (aider)
ca8274dbe8 feat: Add total_cost column to results table 2025-01-23 15:28:00 -08:00
Paul Gauthier
1234fbf5f4 feat: Add new blog post for January 23, 2025 2025-01-23 15:27:58 -08:00
Andrey Ivanov
afebfe5f4f fix[io.py]: completion menu current item color styling 2025-01-23 23:09:17 +00:00
Paul Gauthier
e64ed4c27f copy 2025-01-23 11:35:11 -08:00
Paul Gauthier (aider)
a4b7236289 refactor: preserve original case in model name matching 2025-01-23 11:34:16 -08:00
Paul Gauthier
16c4374f7a refactor: lowercase model names for fuzzy matching while preserving original case 2025-01-23 11:34:14 -08:00
Paul Gauthier
05a77c7406 copy 2025-01-22 15:32:25 -08:00
Paul Gauthier
fceead7cbe copy 2025-01-22 15:16:02 -08:00
Paul Gauthier
3d81bdd281 copy 2025-01-22 15:08:56 -08:00
Paul Gauthier
56ab8de968 copy 2025-01-22 15:07:58 -08:00
Paul Gauthier
30b150dbfc refactor: Simplify test assertions and remove redundant checks 2025-01-22 10:17:21 -08:00
Paul Gauthier (aider)
40ee3b1b45 style: Reorder imports in test_coder.py 2025-01-22 10:05:02 -08:00
Paul Gauthier (aider)
c79217dd75 fix: Add missing imports for FinishReasonLength and sanity_check_messages 2025-01-22 10:04:58 -08:00
Paul Gauthier (aider)
075d4d4210 test: add tests for message integrity after interrupts and token limits 2025-01-22 10:03:51 -08:00
Paul Gauthier
216b679e4b set version to 0.72.3.dev 2025-01-22 10:01:02 -08:00
Paul Gauthier
c5fe81f4e6 version bump to 0.72.2 2025-01-22 09:59:23 -08:00
Paul Gauthier
0c464d0220 copy 2025-01-22 09:55:18 -08:00
Paul Gauthier
02f28d12e3 fix: Correct condition for adding assistant reply in Coder class 2025-01-22 09:53:32 -08:00
Paul Gauthier
13d24278f2 feat: Add assistant reply for token limit exhaustion in base_coder 2025-01-22 09:30:05 -08:00
Paul Gauthier
42ef4352f4 refactor: Handle KeyboardInterrupt with user-assistant message pair and add env check for sanity_check_messages 2025-01-22 09:03:09 -08:00
Paul Gauthier
843720a671 copy 2025-01-20 17:44:36 -08:00
Paul Gauthier
0884dd88d6 docs: Update usage documentation for config & text files 2025-01-20 17:44:17 -08:00
Paul Gauthier (aider)
4262fa8637 docs: add Jekyll front matter to not-code.md 2025-01-20 17:39:05 -08:00
Paul Gauthier (aider)
29a2db6552 docs: add examples for editing non-code files with aider 2025-01-20 17:35:42 -08:00
Paul Gauthier
06fa0c17a4 docs: Add usage documentation for non-code interactions 2025-01-20 17:35:40 -08:00
Paul Gauthier
cfdca6a894 copy 2025-01-20 17:28:54 -08:00
Paul Gauthier
2873f6c193 copy 2025-01-20 14:25:36 -08:00
Paul Gauthier
8b963ed63c set version to 0.72.2.dev 2025-01-20 14:24:39 -08:00
Paul Gauthier
adb951426a version bump to 0.72.1 2025-01-20 14:23:06 -08:00
Paul Gauthier
9ced96a1c9 copy 2025-01-20 14:23:00 -08:00
Paul Gauthier
7e155dc87b copy 2025-01-20 14:21:05 -08:00
Paul Gauthier
c5e2d80fc0 blame 2025-01-20 14:20:56 -08:00
Paul Gauthier
b0fa646de9 fix litellm_provider 2025-01-20 14:19:30 -08:00
Paul Gauthier
83f08cffee copy 2025-01-20 11:51:32 -08:00
Paul Gauthier
03652a0030 set version to 0.72.1.dev 2025-01-20 11:51:13 -08:00
Paul Gauthier
1c3e0ba656 version bump to 0.72.0 2025-01-20 11:48:46 -08:00
Paul Gauthier
48f80b947b copy 2025-01-20 11:43:38 -08:00
Paul Gauthier
d7873de4e8 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-20 11:42:04 -08:00
Paul Gauthier
32d025bcf2 r1 leaderboard 2025-01-20 11:37:09 -08:00
Paul Gauthier
61ab5d1652 disable sanity check 2025-01-20 11:35:54 -08:00
Paul Gauthier
f5fd6833e2 copy 2025-01-20 11:30:21 -08:00
Paul Gauthier
163e6f56df re-enable summaries 2025-01-20 11:26:19 -08:00
Paul Gauthier
5650697475 no turn errors, with upd_cur_msgs fix and summarizer disabled 2025-01-20 11:10:43 -08:00
Paul Gauthier
2968087d37 more deepseek config 2025-01-20 10:09:48 -08:00
Paul Gauthier
e7ec80f58a Merge branch 'main' into deepseek-reasoner 2025-01-20 09:50:35 -08:00
Paul Gauthier
f0ba699463 copy 2025-01-20 09:49:48 -08:00
Paul Gauthier
06d5b14b86 sanity_check_messages 2025-01-20 09:43:01 -08:00
Paul Gauthier
dff544cd5d refactor: Split summarize method and add model metadata handling 2025-01-20 09:38:45 -08:00
Paul Gauthier (aider)
73bc0f6258 style: Remove trailing whitespace in sendchat.py 2025-01-20 08:35:24 -08:00
Paul Gauthier (aider)
7e5e180000 feat: verify last non-system message is from user in sanity_check_messages 2025-01-20 08:35:21 -08:00
Paul Gauthier (aider)
fc431df2b4 style: Add blank lines for better readability in sendchat.py 2025-01-20 08:34:44 -08:00
Paul Gauthier (aider)
bb61be630a feat: add message role validation function 2025-01-20 08:34:40 -08:00
Paul Gauthier
cdc9ec2854 refactor: Add comment for sanity_check_messages function in sendchat.py 2025-01-20 08:34:38 -08:00
Paul Gauthier
21d3703b69 feat: Add deepseek-reasoner model settings and enable caching for deepseek-chat 2025-01-20 08:14:12 -08:00
paul-gauthier
c395be252e Merge pull request #2895 from pauldw/pwalker/2025-01-17_add_tags_scm_for_kotlin 2025-01-19 09:49:44 -08:00
Paul Walker
293c350fb7 Add tags.scm for Kotlin 2025-01-17 21:18:55 -05:00
Paul Gauthier
a777f336e1 chore: Update polyglot leaderboard test results and metadata 2025-01-17 13:37:02 -08:00
Paul Gauthier
5b6c186125 copy 2025-01-17 13:35:36 -08:00
Paul Gauthier
6451d59deb bump deps 2025-01-16 12:29:12 -08:00
Paul Gauthier (aider)
c912b66a8f ci: Update GitHub Actions workflow to use github.event_name for build conditions 2025-01-16 11:52:34 -08:00
Paul Gauthier (aider)
d62c43bc95 ci: Fix GitHub Actions workflow syntax for secret conditions 2025-01-16 11:51:10 -08:00
Paul Gauthier (aider)
3b7b9b6ed1 ci: Update Docker build workflow to use DockerHub secret conditions 2025-01-16 11:48:59 -08:00
Paul Gauthier (aider)
9822a6ed5d feat: Modify Docker workflow to separate PR and push build steps 2025-01-16 11:47:29 -08:00
Paul Gauthier
a06f4dfad6 copy 2025-01-16 10:30:14 -08:00
Paul Gauthier
b92df87400 publish 2025-01-16 09:03:09 -08:00
Paul Gauthier
d7921c0111 chore: Update GitHub Actions workflow with artifact path and deploy pages version 2025-01-16 09:01:01 -08:00
Paul Gauthier (aider)
af09c3e62a chore: Update artifact upload path in GitHub Pages workflow 2025-01-16 08:57:51 -08:00
Paul Gauthier (aider)
0ed42f657d feat: Add build output listing step to debug artifact upload 2025-01-16 08:54:57 -08:00
Paul Gauthier (aider)
ed7fbabd1c ci: Update pull_request workflow triggers with consistent path ignores 2025-01-16 08:51:24 -08:00
Paul Gauthier (aider)
bd03563fcb ci: Ignore workflow file changes except for self-modification 2025-01-16 08:50:53 -08:00
Paul Gauthier (aider)
05ffc7f8d6 feat: Add trigger for pages.yml workflow file changes 2025-01-16 08:38:38 -08:00
Paul Gauthier (aider)
ebc475d278 feat: Update GitHub Pages artifact upload path 2025-01-16 08:38:19 -08:00
Paul Gauthier
2813437515 chore: Update GitHub Actions upload-pages-artifact to v3 2025-01-16 08:35:13 -08:00
Paul Gauthier
ea2e885505 Revert "chore: Update upload-pages-artifact action to v4"
This reverts commit a7fadc3a45.
2025-01-16 08:32:46 -08:00
Paul Gauthier (aider)
a7fadc3a45 chore: Update upload-pages-artifact action to v4 2025-01-16 08:28:18 -08:00
Paul Gauthier
8040a20f71 add uv article 2025-01-16 08:25:02 -08:00
Paul Gauthier
0e87854819 copy 2025-01-16 08:24:47 -08:00
Paul Gauthier
3bc6c641de copy 2025-01-16 08:24:31 -08:00
Paul Gauthier
4abb6e17ba Merge branch 'main' of github.com:Aider-AI/aider 2025-01-16 08:24:21 -08:00
Paul Gauthier
1986f08cf9 ci: Conditionally push Docker images only on non-pull request events 2025-01-16 08:24:02 -08:00
paul-gauthier
620ae5cf1d Merge pull request #2877 from golergka/docs/file-editing-troubleshooting-architect-mode 2025-01-15 15:55:10 -08:00
Max Yankov (aider)
590ee5a248 docs: Add architect mode section to edit errors troubleshooting guide 2025-01-15 20:50:53 -03:00
Paul Gauthier
a08326ab60 enable all java tests 2025-01-15 15:18:46 -08:00
Paul Gauthier
63cf99361d ensure no loading of any other files 2025-01-15 13:57:54 -08:00
Paul Gauthier
1e54ca82b8 refactor: encapsulate rsync logic in function and add continuous sync loop 2025-01-13 15:47:49 -08:00
Paul Gauthier
2ec576e110 use examples_as_sys_msg=True for 4o models 2025-01-13 15:46:36 -08:00
Paul Gauthier
4251e976b3 copy 2025-01-13 14:28:34 -08:00
Paul Gauthier
d831e2f3a4 copy 2025-01-13 14:26:24 -08:00
Paul Gauthier
21f20417d6 copy 2025-01-13 11:39:22 -08:00
Paul Gauthier
e1c914d9bb chore: Update polyglot leaderboard with new test results for Codestral 25.01 2025-01-13 11:21:34 -08:00
Paul Gauthier
4b03b0a93a Merge branch 'main' of github.com:Aider-AI/aider 2025-01-13 11:18:31 -08:00
Paul Gauthier
bbcde55a9e copy 2025-01-13 10:18:34 -08:00
Paul Gauthier (aider)
0cba898280 fix: Make line endings validation test order-independent 2025-01-13 09:38:36 -08:00
Paul Gauthier (aider)
b9edec069a fix: Update test to match error message format for line endings validation 2025-01-13 09:38:13 -08:00
paul-gauthier
939cb7958a Merge pull request #2857 from titusz/improve-read-errors
refactor: Reorder exception handling in file reading method
2025-01-13 09:37:38 -08:00
Paul Gauthier (aider)
ebb38c6518 style: Format test_io.py to comply with linter rules 2025-01-13 09:36:31 -08:00
Paul Gauthier (aider)
fa80d2f3cc test: add line endings validation tests for InputOutput 2025-01-13 09:36:26 -08:00
Paul Gauthier (aider)
869f37cd89 style: Format code for better readability in io.py 2025-01-13 09:35:07 -08:00
Paul Gauthier (aider)
c22202585d fix: validate line_endings parameter in InputOutput initialization 2025-01-13 09:35:01 -08:00
Titusz Pan
f28c912d5a refactor: Reorder exception handling in file reading method 2025-01-13 18:29:04 +01:00
paul-gauthier
a0e56c5282 Merge pull request #2856 from titusz/configurable-line-endings
feat: Add line endings configuration option for file writing - fixes #1102
2025-01-13 09:26:57 -08:00
Paul Gauthier
de7da1e806 copy 2025-01-13 09:12:56 -08:00
Paul Gauthier
add2f6f669 copy 2025-01-13 09:00:21 -08:00
Paul Gauthier
b06e765e68 copy 2025-01-13 08:58:26 -08:00
Titusz Pan
c3952cb985 feat: Add line endings configuration option for file writing 2025-01-13 17:51:02 +01:00
xqyz
d5469a64d2 Handle new path creation
To handle cases where a path, a file, or both need to be created, you can enhance the `fname.touch()` code as follows:

```python
try:
    # Create parent directories if they don't exist
    fname.parent.mkdir(parents=True, exist_ok=True)
    # Create the file
    fname.touch()
    all_matched_files.add(str(fname))
    self.io.tool_output(f"Created file: {fname}")
except OSError as e:
    self.io.tool_error(f"Error creating file {fname}: {e}")
```

This code ensures that any necessary parent directories are created before attempting to create the file itself.
2025-01-12 07:29:45 +00:00
Paul Gauthier
ac26fc6d5f set version to 0.71.2.dev 2025-01-11 16:07:56 -08:00
Paul Gauthier
122088712d version bump to 0.71.1 2025-01-11 16:06:25 -08:00
Paul Gauthier
9fb09ce14d copy 2025-01-11 16:04:53 -08:00
Paul Gauthier (aider)
392fb21946 fix: ensure integer indices for list slicing in repomap.py 2025-01-11 15:49:58 -08:00
Paul Gauthier (aider)
e94b05851f style: Format test_io.py with consistent string quotes and spacing 2025-01-11 15:48:10 -08:00
Paul Gauthier (aider)
571a5962b7 test: update test to use invalid Unicode that triggers encoding error 2025-01-11 15:48:05 -08:00
Paul Gauthier (aider)
8b6863dc40 style: Format test_io.py with consistent quotes and spacing 2025-01-11 15:46:33 -08:00
Paul Gauthier (aider)
01af629399 test: add test for Unicode to ASCII fallback in tool messages 2025-01-11 15:46:28 -08:00
Paul Gauthier (aider)
4ece6d2a9b fix: handle Text objects properly in io.py for Windows Unicode encoding 2025-01-11 15:40:24 -08:00
Paul Gauthier
18d1d7af33 no chown for COPY 2025-01-11 07:46:23 -08:00
Paul Gauthier
5ada250a66 refactor: Add period to read-only file message in base_coder.py 2025-01-11 07:39:29 -08:00
Paul Gauthier (aider)
308c7ab670 feat: Add read-only file announcements to chat 2025-01-11 07:27:50 -08:00
Paul Gauthier
89d35e020a refactor: Add comment for read-only file message in base_coder.py 2025-01-11 07:27:49 -08:00
Paul Gauthier (aider)
6729570799 refactor: Simplify docker-build-test.yml to mirror release workflow with dev tags 2025-01-11 07:16:02 -08:00
Paul Gauthier (aider)
f72f5f6438 ci: Add dev tag publishing to Docker build test workflow 2025-01-11 07:12:56 -08:00
Paul Gauthier
a02e11e0bc Revert "ci: Add Docker image tests with --yes --exit args"
This reverts commit fdddfc6b1f.
2025-01-11 07:06:08 -08:00
Paul Gauthier
9ff15e1506 copy 2025-01-11 06:53:44 -08:00
Paul Gauthier (aider)
fdddfc6b1f ci: Add Docker image tests with --yes --exit args 2025-01-11 06:52:29 -08:00
Paul Gauthier (aider)
78ebb6295d fix: Restore site-packages permissions in Dockerfile for appuser access 2025-01-11 06:48:26 -08:00
Paul Gauthier
73c89e8c00 copy 2025-01-10 15:53:17 -08:00
Paul Gauthier (aider)
fcc499e401 refactor: normalize deepseek model names to deepseek-chat 2025-01-10 15:51:53 -08:00
Paul Gauthier
6e8efe22aa refactor: Combine deepseek/deepseek-coder into chat AI in model stats 2025-01-10 15:51:52 -08:00
Paul Gauthier
f9c5cb73a2 copy 2025-01-10 15:08:15 -08:00
Paul Gauthier
c939521f5f copy 2025-01-10 15:04:54 -08:00
Paul Gauthier
2640e05307 set version to 0.71.1.dev 2025-01-10 15:01:41 -08:00
Paul Gauthier
c1a371e3d3 version bump to 0.71.0 2025-01-10 15:00:02 -08:00
Paul Gauthier
5a4871155a copy 2025-01-10 14:54:42 -08:00
Paul Gauthier (aider)
d8e6dbf788 docs: clarify dual purpose of /ask, /code, and /architect commands 2025-01-10 14:51:25 -08:00
Paul Gauthier
7ea69ae4b4 refactor: Simplify map_tokens assignment logic in main.py 2025-01-10 14:49:16 -08:00
Paul Gauthier
d238ead451 copy 2025-01-10 14:44:00 -08:00
Paul Gauthier (aider)
e6b449f24d test: add tests for get_repo_map_tokens method 2025-01-10 14:39:50 -08:00
Paul Gauthier (aider)
41018d05a8 fix: remove unused max_tokens variable in get_repo_map_tokens 2025-01-10 14:38:22 -08:00
Paul Gauthier
d48008e13d refactor: Update repo map token handling and improve warning message 2025-01-10 14:38:12 -08:00
Paul Gauthier
a9cf438100 refactor: Update terminal detection message to include pretty output 2025-01-10 14:26:06 -08:00
Paul Gauthier (aider)
6c7a0d21d2 style: Remove trailing whitespace in io.py 2025-01-10 14:25:04 -08:00
Paul Gauthier (aider)
d887db4c18 fix: disable pretty output for dumb terminals 2025-01-10 14:24:59 -08:00
Paul Gauthier (aider)
e6be69ec6d test: add test case for TERM=dumb terminal handling 2025-01-10 14:24:27 -08:00
Paul Gauthier
c1ba7db8a1 refactor: Update placeholder text in cmd_run for better clarity 2025-01-10 14:23:42 -08:00
Paul Gauthier
dc5b5896a9 copy 2025-01-10 14:20:50 -08:00
Paul Gauthier
38678fafc1 refactor: Simplify fence pattern matching in base_coder.py 2025-01-10 14:20:02 -08:00
Paul Gauthier
7611211d1c copy 2025-01-10 14:19:51 -08:00
Paul Gauthier
0d9c2cd902 copy 2025-01-10 14:09:22 -08:00
Paul Gauthier (aider)
1a84c109fc feat: allow /ask, /code, /architect without args to switch modes 2025-01-10 14:07:24 -08:00
Paul Gauthier (aider)
cbedf3f8cc fix: Correct typo in variable name from model_metatdata_files to model_metadata_files 2025-01-10 14:04:54 -08:00
Paul Gauthier
50436e3106 docs: Update model usage statistics and dumb terminal message 2025-01-10 14:04:41 -08:00
Paul Gauthier (aider)
62498ec867 style: Reorder imports and fix whitespace in aider/io.py 2025-01-10 14:03:57 -08:00
Paul Gauthier (aider)
91b94bb16c feat: add dumb terminal detection and fallback handling 2025-01-10 14:03:53 -08:00
Paul Gauthier
c2bbdc503c copy 2025-01-10 13:33:00 -08:00
Paul Gauthier
babae0fa6e refactor: conditionally set stream based on main_model.streaming 2025-01-10 13:31:55 -08:00
Paul Gauthier
f047882ac1 refactor: Add InvalidGitRepositoryError to ANY_GIT_ERROR list 2025-01-09 15:01:36 -08:00
Paul Gauthier
b818d6a921 copy 2025-01-09 12:07:00 -08:00
Paul Gauthier
ba631c8451 copy 2025-01-09 12:03:17 -08:00
Paul Gauthier
2c963b389c include author in history updates 2025-01-09 12:03:05 -08:00
Paul Gauthier
8437fbc314 cleanup 2025-01-09 12:02:48 -08:00
Paul Gauthier (aider)
76404004a4 feat: include author info in git log output for history updates 2025-01-09 11:57:23 -08:00
Paul Gauthier
1b64514c2c copy 2025-01-09 11:44:40 -08:00
Paul Gauthier
6efea7d365 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-09 11:44:19 -08:00
Paul Gauthier (aider)
e1a3b77d67 feat: add rootless container support with dedicated appuser 2025-01-09 11:26:06 -08:00
Paul Gauthier
cfc7ad5627 copy 2025-01-09 09:56:49 -08:00
paul-gauthier
b3cbf14ad6 Merge pull request #2809 from hydai/fix_missing_link 2025-01-09 06:39:40 -08:00
hydai
51cfbe6b00 docs: fix missing link
Signed-off-by: hydai <z54981220@gmail.com>
2025-01-09 18:46:14 +08:00
paul-gauthier
155f397d0b Merge pull request #2798 from schpet/improve-watch-description 2025-01-07 15:02:52 -08:00
Peter Schilling
4b53b8b6a1 2025-01-07 14:00:49 -08:00
Peter Schilling (aider)
dbea4a1787 aider: feat: Update watch.md description for IDE usage 2025-01-07 13:57:39 -08:00
Peter Schilling
5b6da85e68 docs: Update watch.md documentation description and comments 2025-01-07 13:57:38 -08:00
Paul Gauthier
61671e9d3f cleanup 2025-01-07 10:49:21 -08:00
Paul Gauthier
f94e05e04e Merge branch 'main' of github.com:Aider-AI/aider 2025-01-07 10:04:17 -08:00
Paul Gauthier
b5cad9a8cc copy 2025-01-07 09:58:20 -08:00
paul-gauthier
3a97d8cc82 Merge pull request #2795 from nims11/fix-discard
Fix files not being excluded in benchmark.py
2025-01-07 09:57:35 -08:00
Paul Gauthier
3c099465da refactor: Add AssertionError to ANY_GIT_ERROR tuple 2025-01-07 09:50:28 -08:00
Paul Gauthier (aider)
fcdb2591b6 fix: check prompt session is active before interrupting input 2025-01-07 09:46:48 -08:00
Paul Gauthier
b67a16e9af fix: Add AttributeError to ANY_GIT_ERROR tuple 2025-01-07 09:45:53 -08:00
Paul Gauthier (aider)
1d672616be fix: correct file export path in voice format conversion 2025-01-07 09:43:49 -08:00
Nimesh Ghelani
ed9d70903d Fix files not being excluded in benchmark.py
`.discard()` removes an item from the set. `.difference_update()` is the
correct call here.
2025-01-07 17:35:29 +00:00
Paul Gauthier
8a9bab8a46 copy 2025-01-07 09:33:00 -08:00
Paul Gauthier
fdc6a08eb4 copy 2025-01-07 09:28:34 -08:00
Paul Gauthier
154309912d delay renedering md when it gets slow 2025-01-07 06:57:38 -08:00
Paul Gauthier
a84fea86b8 copy 2025-01-07 06:57:20 -08:00
Paul Gauthier (aider)
609998bc18 style: Format floating-point division in mdstream.py 2025-01-07 06:51:59 -08:00
Paul Gauthier (aider)
891868b061 perf: adjust min_delay based on markdown render time for smoother updates 2025-01-07 06:51:56 -08:00
Paul Gauthier
3fc5cf8b9f refactor: Replace hardcoded min_delay with 1./20 for 20fps in MarkdownStream 2025-01-07 06:51:54 -08:00
Paul Gauthier (aider)
6048ed5bc1 style: Remove trailing whitespace from Lorem Ipsum text lines 2025-01-07 06:44:35 -08:00
Paul Gauthier (aider)
a1a007134c style: Break long Lorem Ipsum text into multiple lines to comply with line length limit 2025-01-07 06:44:10 -08:00
Paul Gauthier
d82f9fa432 refactor: Multiply _text by 10 in mdstream.py for testing 2025-01-07 06:44:09 -08:00
Paul Gauthier (aider)
c0074301a3 style: Remove extra blank line in mdstream.py 2025-01-07 06:42:52 -08:00
Paul Gauthier (aider)
9c2c05ad44 refactor: read io.py source file in mdstream.py main block 2025-01-07 06:42:48 -08:00
Paul Gauthier
fad230c02e refactor: Split markdown text into prefix and suffix variables 2025-01-07 06:42:46 -08:00
Paul Gauthier (aider)
ad3c95f273 style: Fix whitespace and formatting in mdstream.py 2025-01-07 06:11:58 -08:00
Paul Gauthier (aider)
684fdb6095 refactor: extract markdown rendering logic into helper method 2025-01-07 06:11:54 -08:00
Paul Gauthier
8e64f171b8 refactor: improve markdown streaming with stable/unstable line handling 2025-01-07 06:11:52 -08:00
Paul Gauthier (aider)
d616c3fed7 style: Remove trailing whitespace in MarkdownStream class docstring 2025-01-07 05:58:45 -08:00
Paul Gauthier (aider)
e07e6cd2a3 docs: Format docstring to comply with line length limits 2025-01-07 05:58:41 -08:00
Paul Gauthier (aider)
f1bd5cdb52 style: Fix whitespace and formatting in MarkdownStream class 2025-01-07 05:57:39 -08:00
Paul Gauthier (aider)
be82b6bed9 docs: add comments to explain MarkdownStream class and methods 2025-01-07 05:57:35 -08:00
Paul Gauthier
37ad4758a1 refactor: Move fname_path assignment inside try block in GitRepo.ignored_file_raw 2025-01-04 12:36:07 -08:00
Paul Gauthier (aider)
e4a238a05c style: Format code with consistent string quotes and remove trailing whitespace 2025-01-04 12:27:11 -08:00
Paul Gauthier (aider)
e5ca922ce8 fix: handle empty paths and dotfiles in get_ident_filename_matches 2025-01-04 12:27:04 -08:00
Paul Gauthier
6a1f4431d0 docs: Update HISTORY.md and FAQ.md with latest changes and model usage stats 2025-01-04 12:22:45 -08:00
Paul Gauthier (aider)
d67eda24d2 style: Remove trailing whitespace and format confirm_ask prompt 2025-01-04 12:09:53 -08:00
Paul Gauthier (aider)
bba0cc8dc5 feat: show token count in command output confirmation prompt 2025-01-04 12:09:48 -08:00
Paul Gauthier
884b52b710 refactor: Add comment for tokenizing command output in Commands class 2025-01-04 12:09:45 -08:00
Paul Gauthier
01ef2351b3 refactor: Use temporary variable for audio format to avoid state mutation 2025-01-04 12:08:05 -08:00
Paul Gauthier
de1d566e9e refactor: Simplify audio file handling and conversion logic 2025-01-04 12:06:07 -08:00
Paul Gauthier (aider)
19114a61ae style: Format print statement in voice.py for better readability 2025-01-04 12:04:13 -08:00
Paul Gauthier (aider)
36e5599ead feat: Add file size logging after audio conversion 2025-01-04 12:04:09 -08:00
Paul Gauthier (aider)
f5a82e575c style: Format print statement in voice.py for better readability 2025-01-04 12:03:32 -08:00
Paul Gauthier (aider)
1851de323d feat: add error handling and feedback for audio conversion 2025-01-04 12:03:25 -08:00
Paul Gauthier
f9408640a3 refactor: Simplify audio file size check and format conversion logic 2025-01-04 12:03:24 -08:00
Paul Gauthier (aider)
73837730fa feat: Add file size check and mp3 conversion for large audio files 2025-01-04 11:59:42 -08:00
Paul Gauthier
9b46991721 refactor: Add comment for handling large file uploads in voice.py 2025-01-04 11:59:40 -08:00
Paul Gauthier
606cd0368f refactor: remove redundant exception handling in GitRepo 2025-01-04 11:09:55 -08:00
Paul Gauthier
d9ef23ad99 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-04 11:09:25 -08:00
Paul Gauthier
48b8f54c12 refactor: Move message and style initialization before try block in InputOutput 2025-01-04 11:04:32 -08:00
Paul Gauthier (aider)
cec9f90c1c style: Standardize string quotes in InputOutput class 2025-01-04 11:03:43 -08:00
Paul Gauthier (aider)
44d36f140a fix: handle UnicodeEncodeError in console output with ASCII fallback 2025-01-04 11:03:38 -08:00
paul-gauthier
f88adcfa85 Merge pull request #2764 from caseymcc/repo_index
Ignore directories in repo that have index errors
2025-01-04 13:59:32 -05:00
Paul Gauthier (aider)
c5919f0c15 refactor: improve cleanup error handling and verbose logging 2025-01-04 10:55:11 -08:00
Paul Gauthier
ac160cac12 chore: Ignore exceptions during Rust target directory cleanup 2025-01-04 10:55:09 -08:00
Paul Gauthier
867aaa5864 copy 2025-01-04 06:36:22 -08:00
Paul Gauthier
0b26505a20 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-04 06:33:49 -08:00
paul-gauthier
98ad513621 Merge pull request #2753 from aweis89/fix-linting-cmd
fix: lint command with nested spaced strings
2025-01-04 09:33:38 -05:00
Paul Gauthier
591edbb003 improve prompts so that switching between ask/code works better with deepseek 2025-01-04 06:28:20 -08:00
Paul Gauthier
a17b1c2ab7 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-04 06:27:42 -08:00
Paul Gauthier
648f14d95b copy 2025-01-04 06:25:19 -08:00
Paul Gauthier (aider)
2e4c2422b1 feat: Add voice format and input device initialization in Commands 2025-01-04 06:21:19 -08:00
Paul Gauthier
463fdb1ed9 refactor: Increase max chat history tokens limit from 4k to 8k 2025-01-04 06:19:38 -08:00
Paul Gauthier (aider)
d6b612a4a3 style: Break long comment line to comply with flake8 E501 2025-01-04 06:18:40 -08:00
Paul Gauthier (aider)
d24376608e refactor: generalize token calculation using division in Model class 2025-01-04 06:18:15 -08:00
Paul Gauthier
ff41f9bd9a refactor: adjust max_chat_history_tokens calculation based on max_input_tokens 2025-01-04 06:18:12 -08:00
paul-gauthier
6d3dd5c484 Merge pull request #2767 from apaz-cli/ap/suppress_streamlit
Disable streamlit email prompt
2025-01-03 16:02:02 -05:00
apaz-cli
f0bc8983b8 Disable streamlit email prompt 2025-01-03 14:43:18 -06:00
Paul Gauthier (aider)
729354b038 chore: Add cleanup for node_modules directories in benchmark tests 2025-01-03 14:19:06 -05:00
Paul Gauthier (aider)
c0be857f37 chore: Add Java build directory cleanup to test runner 2025-01-03 14:16:51 -05:00
Paul Gauthier
98b0e88ace refactor: simplify Rust target directory cleanup logic 2025-01-03 14:16:49 -05:00
Paul Gauthier (aider)
3d501df21f chore: Clean up Rust target/debug directory after all test attempts 2025-01-03 14:14:44 -05:00
Paul Gauthier
1b4abb747d style: Add blank line for readability in benchmark.py 2025-01-03 14:14:42 -05:00
Paul Gauthier
b1d418f7fb copy 2025-01-03 12:26:55 -04:00
Paul Gauthier
a702b4752b copy 2025-01-03 12:25:03 -04:00
Paul Gauthier
684ba7c0cb Merge branch 'main' of github.com:Aider-AI/aider 2025-01-03 12:16:43 -04:00
Krazer
1bcc27d2be little clean up 2025-01-03 09:07:27 -06:00
Krazer
50d3b305d4 make it a warning 2025-01-03 09:01:34 -06:00
Krazer
a341c98ec6 handle repo index errors 2025-01-03 08:58:42 -06:00
paul-gauthier
fa5c8a00e4 Merge pull request #2706 from Hambaobao/polyglot-qwen2.5-coder-32b-instruct-whole-results
Polyglot Qwen2.5-Coder-32B-Instruct Results [Whole]
2025-01-03 09:35:20 -04:00
paul-gauthier
42f6c20ada Merge branch 'main' into polyglot-qwen2.5-coder-32b-instruct-whole-results 2025-01-03 09:35:14 -04:00
paul-gauthier
787738094d Update README.md 2025-01-02 21:50:30 -04:00
Paul Gauthier
a44ebfe99f copy 2025-01-02 17:26:14 -04:00
Paul Gauthier
c5959664e4 Merge branch 'main' of github.com:Aider-AI/aider 2025-01-02 17:23:42 -04:00
Paul Gauthier
9b581268de copy 2025-01-02 17:23:10 -04:00
Aaron Weisberg
acf654c984 fix: lint command with nested spaced strings 2025-01-02 17:27:33 +01:00
paul-gauthier
94f83eb9e3 Merge pull request #2750 from bkowalik/patch-1
Document boto3 install process with aider installed by uv or one-liner
2025-01-02 09:44:22 -04:00
Bartek Kowalik
07c675ed06 Document boto3 install process with uv 2025-01-02 08:39:20 +01:00
Paul Gauthier
f292e01980 Merge branch 'main' of github.com:Aider-AI/aider 2024-12-30 14:37:27 -04:00
Paul Gauthier (aider)
61f9123147 style: Run linter 2024-12-30 14:21:39 -04:00
Paul Gauthier (aider)
60708a7fd7 fix: Remove unused imports in commands.py 2024-12-30 14:21:35 -04:00
Paul Gauthier
761fb93aba refactor: Move test_cmd_load_with_switch_coder to test file 2024-12-30 14:21:28 -04:00
Paul Gauthier (aider)
20bc718bdc style: Format voice init for readability 2024-12-30 14:19:21 -04:00
Paul Gauthier (aider)
07337d2f41 feat: Handle voice-format command line argument 2024-12-30 14:19:14 -04:00
Paul Gauthier (aider)
3d2de00f49 style: Apply linter fixes 2024-12-30 14:17:25 -04:00
Paul Gauthier (aider)
a7242ca846 refactor: Pass voice settings to Commands as params 2024-12-30 14:17:16 -04:00
paul-gauthier
d3298ac5f2 Merge pull request #2725 from joshvera/fix-benchmark-java-ca-pkg
Install ca-certificates before openjdk-21 to resolve cacerts error
2024-12-29 15:07:51 -04:00
Josh Vera
e486243c06 Install ca-certificates before openjdk-21 to resolve cacerts error 2024-12-29 10:55:09 -08:00
Paul Gauthier (aider)
8eaefb57d3 feat: Add RevCumulative column to problem stats 2024-12-28 11:45:41 -04:00
Paul Gauthier
c21f7afdcb Merge branch 'main' of github.com:Aider-AI/aider 2024-12-28 10:24:22 -04:00
Paul Gauthier
d734dee589 copy 2024-12-28 10:24:17 -04:00
Paul Gauthier (aider)
f035c4c01a fix: Remove max_apply_update_errors from threaded call 2024-12-27 16:36:58 -04:00
Paul Gauthier (aider)
8fcdcecf36 refactor: Remove deprecated max_apply_update_errors 2024-12-27 16:36:47 -04:00
Paul Gauthier
3f9ee1ac2e refactor: Remove deprecated max_apply_update_errors 2024-12-27 16:36:46 -04:00
Paul Gauthier
188e1f788d chore: Rename exercism dir to polyglot-benchmark 2024-12-27 16:33:04 -04:00
paul-gauthier
98a0f1cf5b Merge pull request #2698 from paulmaunders/fix-macos-go-tests
Fix Go installation and benchmark tests for Apple Silicon
2024-12-27 12:31:36 -05:00
Paul Gauthier
1467a673b9 style: Remove mobile height override for blame chart 2024-12-26 20:11:14 -04:00
Paul Gauthier
889eb86d89 fix: Correct chart legend position and reverse order 2024-12-26 20:09:09 -04:00
Paul Gauthier (aider)
125da0e2db feat: Move chart legend to top-left 2024-12-26 20:04:37 -04:00
Paul Gauthier
14b274c707 style: Reduce blame chart height on website 2024-12-26 20:04:37 -04:00
Paul Gauthier (aider)
dedbc20ac6 feat: Make charts responsive and taller on mobile 2024-12-26 20:02:11 -04:00
Paul Gauthier (aider)
36cf2348d0 style: Change human bar color to light grey 2024-12-26 19:57:59 -04:00
Paul Gauthier
a19f8996b8 fix: Improve blame chart labels and stacking 2024-12-26 19:57:57 -04:00
Paul Gauthier (aider)
7293263773 fix: Stack x-axis for full width bars 2024-12-26 19:55:33 -04:00
Paul Gauthier (aider)
ed5b07374d fix: Use minus filter for subtraction in liquid template 2024-12-26 19:54:09 -04:00
Paul Gauthier (aider)
07b96bef95 feat: Create stacked bar chart for lines of code by author 2024-12-26 19:50:21 -04:00
Paul Gauthier
5c3cca157d switch to deepseek-chat instead of deepseek-coder 2024-12-26 19:40:06 -04:00
Paul Gauthier
f1f66a9b9d copy 2024-12-26 19:28:14 -04:00
Paul Gauthier
f4007210c1 set version to 0.70.1.dev 2024-12-26 19:19:51 -04:00
Paul Gauthier
77962dbd4c version bump to 0.70.0 2024-12-26 19:18:21 -04:00
Paul Gauthier
419cbae55f copy 2024-12-26 10:55:14 -05:00
Paul Gauthier
5233789c40 docs: Improve watch_code_prompt instructions 2024-12-26 10:54:25 -05:00
Paul Gauthier (aider)
70731719f7 style: Fix formatting in io.py 2024-12-26 10:52:21 -05:00
Paul Gauthier (aider)
cf4aa68f98 refactor: Use shorter abs/rel paths for readonly files 2024-12-26 10:52:16 -05:00
Paul Gauthier
6bfd89074c fix: Display shorter path for readonly files 2024-12-26 10:48:04 -05:00
Paul Gauthier
acc4893a7f fix: Update deepseek-chat max tokens 2024-12-26 10:45:14 -05:00
Paul Gauthier
ab61ae2b36 copy 2024-12-26 10:18:19 -05:00
Paul Gauthier
514b9c1c7d copy 2024-12-26 10:13:56 -05:00
Paul Gauthier
44f2cf2b24 Merge branch 'main' of github.com:Aider-AI/aider 2024-12-26 10:12:36 -05:00
paul-gauthier
9befec5cd1 Merge pull request #2692 from mdklab/fix-issue-1802-unicode-error
Fix issue #1802: Handle UnicodeDecodeError in repo file paths
2024-12-26 10:12:33 -05:00
Paul Gauthier
7efdfe5639 added OR o1 and fix OR deepseek-chat 2024-12-26 10:11:40 -05:00
Paul Gauthier (aider)
be6811b29a fix: Correct import path for Coder in commands.py 2024-12-26 09:59:05 -05:00
Paul Gauthier (aider)
f160b8df04 fix: Move Coder import to avoid circular dependency 2024-12-26 09:58:45 -05:00
Paul Gauthier (aider)
158471b218 style: Reorder imports in aider/commands.py 2024-12-26 09:58:15 -05:00
Paul Gauthier (aider)
a383cece53 fix: Import missing modules for test 2024-12-26 09:58:11 -05:00
Paul Gauthier (aider)
0901e6ab77 fix: Correctly format long error message string 2024-12-26 09:57:56 -05:00
Paul Gauthier (aider)
e1485971d8 test: Add test for cmd_load with SwitchCoder 2024-12-26 09:57:51 -05:00
Paul Gauthier (aider)
91c9b1bfe7 fix: Handle SwitchCoder exception in cmd_load 2024-12-26 09:57:09 -05:00
Paul Gauthier
befe6be86c fix: Catch switchcoder exception in run_commands 2024-12-26 09:57:07 -05:00
Paul Gauthier
79428cf4ed copy 2024-12-26 09:49:02 -05:00
Paul Gauthier
7bde5fe893 copy 2024-12-26 09:48:18 -05:00
Paul Gauthier
2f7e024387 Merge branch 'main' of github.com:Aider-AI/aider 2024-12-26 09:47:16 -05:00
paul-gauthier
9235cfa739 Merge pull request #2695 from gengjiawen/patch-1
add yi-lightning result
2024-12-26 07:05:41 -05:00
paul-gauthier
f1e623ec5a Merge branch 'main' into patch-1 2024-12-26 07:05:33 -05:00
柏枫
7c86dc9ac6 add polyglot-qwen2.5-coder-32b-instruct-whole-results 2024-12-26 15:01:45 +08:00
Paul Gauthier
ec2da0a399 add deepseek v3 2024-12-25 09:01:43 -05:00
Paul Gauthier
dd9b2a872c copy 2024-12-25 08:11:04 -05:00
Paul Gauthier
9767759033 Merge branch 'main' of github.com:Aider-AI/aider 2024-12-25 08:05:55 -05:00
Paul Gauthier
7537d79311 fix: Remove .bash_history from rsync 2024-12-25 08:05:46 -05:00
Paul Maunders
b68f34eb9e feat: Fix Go installation for Apple Silicon and add tmp.benchmarks to gitignore 2024-12-24 17:30:41 +00:00
Paul Gauthier (aider)
0a23c4abd6 feat: Configure bash history to save commands immediately 2024-12-24 08:03:01 -05:00
paul-gauthier
b51768b08e Update 2024-12-21-polyglot.md 2024-12-23 18:01:03 -08:00
Jiawen Geng
4561f0c79e add yi-lightning result 2024-12-23 16:39:25 -08:00
mdk
5c92491bc0 Fix issue #1802: Handle UnicodeDecodeError in repo file paths
Added error handling for UnicodeDecodeError when decoding paths in the Git repository.
This issue arises when paths are encoded in formats other than the expected system encoding.

The error handler now provides a detailed error message, helping users identify potential encoding mismatches.

Closes #1802
2024-12-23 20:01:08 +01:00
paul-gauthier
083605e2d7 Merge pull request #2690 from apaz-cli/ap/rephrase_dirwarning 2024-12-23 08:27:59 -08:00
apaz-cli
d28e2f0f56 Rephrase home dir warning 2024-12-23 08:50:25 -06:00
Paul Gauthier
87a964355b copy 2024-12-23 08:00:25 -05:00
Paul Gauthier
fbc3f0cef5 copy 2024-12-22 21:23:39 -05:00
Paul Gauthier
2b1625e3a8 copy 2024-12-22 18:07:25 -05:00
Paul Gauthier (aider)
6230df749e fix: Create table rows if they don't exist 2024-12-22 18:04:01 -05:00
Paul Gauthier
e62003c0ce copy 2024-12-22 17:52:57 -05:00
Paul Gauthier
d0f092f7ae copy 2024-12-22 17:51:38 -05:00
Paul Gauthier
9e2e07e8a7 copy 2024-12-22 16:58:29 -05:00
Paul Gauthier
4154d47c07 copy 2024-12-22 16:56:38 -05:00
Paul Gauthier
62e0cba7bd copy 2024-12-22 16:52:51 -05:00
Paul Gauthier
39d5c785d5 copy 2024-12-22 16:51:44 -05:00
Paul Gauthier
e5cb81c11f copy 2024-12-22 16:47:58 -05:00
Paul Gauthier
3abb8d38ec copy 2024-12-22 16:46:41 -05:00
Paul Gauthier
7f0860d5d0 copy 2024-12-22 16:41:20 -05:00
Paul Gauthier
8c74c8ab6f add o1-mini 2024-12-22 16:39:18 -05:00
Paul Gauthier
37df899ada copy 2024-12-22 16:17:16 -05:00
Paul Gauthier
f55181e447 copy 2024-12-22 16:14:33 -05:00
Paul Gauthier
b1bc2f8c5c test: Remove user_id check from need_to_ask test 2024-12-22 09:52:45 -05:00
Paul Gauthier (aider)
350df7ca55 fix: Test check_gitignore with and without .env file 2024-12-22 09:51:20 -05:00
Paul Gauthier
8768a8aca6 copy 2024-12-22 09:15:59 -05:00
Paul Gauthier (aider)
0f8bb016f4 fix: Correct misspelled HIGHLIGHT_MODEL in leaderboard.js 2024-12-22 09:07:10 -05:00
Paul Gauthier (aider)
eb30791ff4 feat: Make highlight model configurable via assign 2024-12-22 09:06:05 -05:00
Paul Gauthier
7b37bf0f48 copy 2024-12-22 09:02:01 -05:00
Paul Gauthier
fff67a5917 Merge branch 'main' of github.com:Aider-AI/aider 2024-12-22 09:00:52 -05:00
paul-gauthier
3dbe91577c Merge pull request #2675 from apaz-cli/ap/dotenv_dne
Don't add .env to gitignore when it doesn't exist.
2024-12-22 06:00:47 -08:00
Paul Gauthier
0e05b64ebc copy 2024-12-22 08:59:38 -05:00
Paul Gauthier
c895e99306 copy 2024-12-22 08:43:59 -05:00
Paul Gauthier
6d7e8beaaa other o1 variants 2024-12-21 14:14:21 -08:00
Paul Gauthier
8b62d8a6c5 copy 2024-12-21 14:11:54 -08:00
Paul Gauthier
ec44850646 copy 2024-12-21 14:11:21 -08:00
Paul Gauthier
2ea5a98ee0 rename 2024-12-21 11:53:43 -08:00
Paul Gauthier
80928b90a5 cleanup 2024-12-21 11:52:18 -08:00
Paul Gauthier
b28174aba1 delete refac js 2024-12-21 11:51:23 -08:00
Paul Gauthier (aider)
da170bab3a fix: Use configured pass_rate for graph data in search 2024-12-21 11:49:36 -08:00
Paul Gauthier (aider)
49a2f998dd refactor: Unify leaderboard scripts and use config variables 2024-12-21 11:47:29 -08:00
Paul Gauthier
4efdc8b4f7 refactor: Rename benchmark dir, improve rsync, fix problem stats 2024-12-21 11:09:52 -08:00
Paul Gauthier (aider)
a75507980a fix: Pass stats_languages to summarize_results and show_stats 2024-12-20 16:04:00 -08:00
Paul Gauthier (aider)
8d0decc17a style: Apply linter formatting 2024-12-20 16:03:44 -08:00
Paul Gauthier (aider)
e334cbb5d4 fix: Correct indentation in load_results function 2024-12-20 16:03:40 -08:00
Paul Gauthier (aider)
e3ac8ab19d feat: Add --stats-languages option to filter results 2024-12-20 16:03:19 -08:00
Paul Gauthier
bddf6e9017 fix: Handle missing attributes in show_stats and empty models 2024-12-20 16:03:19 -08:00
apaz-cli
bcdc0217b3 Don't add .env to gitignore when it doesn't exist. 2024-12-20 10:09:07 -06:00
Paul Gauthier
521841b447 fix: Skip redoing tests if results exist 2024-12-19 16:25:54 -08:00
Paul Gauthier (aider)
c53cd336f9 style: Fix linting issues 2024-12-19 15:59:03 -08:00
Paul Gauthier (aider)
a8226989c8 feat: Remove @Disabled annotations from Java test files 2024-12-19 15:58:59 -08:00
Paul Gauthier
114b156d74 fix: Use relative paths for ignored files, remove redundant try 2024-12-19 15:56:16 -08:00
Paul Gauthier (aider)
def2d4bac9 style: Fix string formatting in problem stats 2024-12-19 15:50:14 -08:00
Paul Gauthier (aider)
250e2ab6aa feat: Print never solved exercises with full path 2024-12-19 15:50:11 -08:00
Paul Gauthier
6185ddf76a feat: Print never solved exercises and remove dumps 2024-12-19 15:50:10 -08:00
Paul Gauthier (aider)
dddf192e5a fix: Check for testcase key in results 2024-12-19 15:49:16 -08:00
Paul Gauthier (aider)
2d32f77ed0 feat: Print list of exercises never solved by any model 2024-12-19 15:49:13 -08:00
Paul Gauthier
7eb7533d42 fix: Handle missing testcase in results and bad json 2024-12-19 15:49:12 -08:00
Paul Gauthier (aider)
bb711fe255 style: Run linter 2024-12-19 14:39:23 -08:00
Paul Gauthier (aider)
14a8759b82 feat: Disqualify exercises with >=4 parse errors 2024-12-19 14:39:18 -08:00
Paul Gauthier
5a0d4eff71 fix: Correctly handle zero hard set problems 2024-12-19 14:39:17 -08:00
Paul Gauthier (aider)
805d6bbc8c chore: Create remote ~/aider dir before rsync 2024-12-19 12:03:37 -08:00
Paul Gauthier
a0004ab892 chore: Make rsync.sh executable and add remote dir creation 2024-12-19 12:03:36 -08:00
Paul Gauthier (aider)
46a444dc21 fix: Improve docker group addition and instructions 2024-12-19 11:56:03 -08:00
Paul Gauthier (aider)
aefb5c37fe feat: Add newgrp to apply docker group changes in session 2024-12-19 11:53:44 -08:00
Paul Gauthier (aider)
2216978726 feat: Start and enable docker service after install 2024-12-19 11:52:23 -08:00
Paul Gauthier
3a2d8edb53 chore: Make install-docker-ubuntu.sh executable 2024-12-19 11:52:22 -08:00
Paul Gauthier (aider)
e0d57b7713 feat: Add script to install docker on ubuntu 2024-12-19 11:51:06 -08:00
Paul Gauthier
3a9912c01e feat: Add install docker script for ubuntu 2024-12-19 11:51:05 -08:00
Paul Gauthier (aider)
6cadee31bf feat: Create script to clone exercism repos 2024-12-19 11:47:16 -08:00
Paul Gauthier
678845dfda feat: Add clone-exercism benchmark script 2024-12-19 11:47:15 -08:00
Paul Gauthier (aider)
7f7e218504 feat: Add rsync script to sync repo to remote host 2024-12-19 11:43:51 -08:00
Paul Gauthier
256a9951f5 feat: Add rsync benchmark script 2024-12-19 11:43:50 -08:00
Paul Gauthier (aider)
370b45bb35 feat: Ignore files in .meta and .docs directories 2024-12-19 07:23:28 -08:00
Paul Gauthier
616c4a9a53 chore: Add comment about ignoring meta and docs files 2024-12-19 07:23:27 -08:00
Paul Gauthier
821f7d6694 fix: Use extra_body for reasoning_effort, fix test counts 2024-12-19 07:10:20 -08:00
Paul Gauthier (aider)
bc89be6187 feat: Add OpenJDK 21 and TBB dev packages to Dockerfile 2024-12-19 07:01:01 -08:00
Paul Gauthier (aider)
86b6a4cefd fix: Only create build dir if it doesn't exist 2024-12-19 06:49:18 -08:00
Paul Gauthier
1f9a53a454 feat: Add cpp benchmark test script 2024-12-19 06:49:18 -08:00
Paul Gauthier (aider)
f22d112da2 feat: Add cmake to Dockerfile 2024-12-19 06:46:44 -08:00
Paul Gauthier
c36c06ab99 fix: Retry tests on parse or timeout, add gpt-4o params 2024-12-18 15:56:38 -08:00
Paul Gauthier
a915c60999 feat: Add pass_num to benchmark results, fix hard set percent 2024-12-18 13:36:37 -08:00
Paul Gauthier (aider)
6ddb8a7d88 feat: Add hard set problem counts by language 2024-12-18 13:18:31 -08:00
Paul Gauthier (aider)
50bb2cb1e6 feat: Add total column to unsolved problems table 2024-12-18 13:17:38 -08:00
Paul Gauthier (aider)
e1571dda9b style: Run linter 2024-12-18 13:16:45 -08:00
Paul Gauthier (aider)
7410c6216c feat: Count and display copied exercises per language 2024-12-18 13:16:41 -08:00
Paul Gauthier (aider)
8f84df44ab style: Run linter 2024-12-18 13:16:08 -08:00
Paul Gauthier (aider)
82f21b6734 fix: Copy hard set problems by language and exercise 2024-12-18 13:16:04 -08:00
Paul Gauthier (aider)
892fd5a6ef style: Run linter 2024-12-18 13:13:55 -08:00
Paul Gauthier (aider)
3069db0cfd feat: Add --copy-hard-set switch to copy hard set problems 2024-12-18 13:13:51 -08:00
Paul Gauthier (aider)
b71c9d539e feat: Calculate and display unsolved problem percentages by language 2024-12-18 13:11:20 -08:00
Paul Gauthier (aider)
78e643970d style: Fix linting issues 2024-12-18 13:09:46 -08:00
Paul Gauthier (aider)
34da3dd3d7 feat: Show percent of unsolved problems per language 2024-12-18 13:09:42 -08:00
Paul Gauthier (aider)
817cb0d363 fix: Remove unused List, Optional imports 2024-12-18 13:09:13 -08:00
Paul Gauthier (aider)
01088e214c style: Run linter on problem_stats.py 2024-12-18 13:08:51 -08:00
Paul Gauthier (aider)
3e4500f9fd feat: Print hard set problem counts by language 2024-12-18 13:08:48 -08:00
Paul Gauthier
d4b62608a9 chore: Move HARD_SET_NUM definition 2024-12-18 13:08:47 -08:00
Paul Gauthier (aider)
e6bfc1c2fc refactor: Use constant for hard set threshold 2024-12-18 13:06:03 -08:00
Paul Gauthier
051cabed69 style: Adjust model column width in problem stats 2024-12-18 13:06:02 -08:00
Paul Gauthier (aider)
04916a6e97 style: Run linter on problem_stats.py 2024-12-18 13:03:31 -08:00
Paul Gauthier (aider)
f3be2fa66b feat: Add hard set analysis to problem_stats.py 2024-12-18 13:03:27 -08:00
Paul Gauthier (aider)
c36087cc0c style: Apply linter formatting 2024-12-18 12:55:47 -08:00
Paul Gauthier (aider)
e35909ac7d refactor: Subsort exercises by name when solve rates are equal 2024-12-18 12:55:43 -08:00
Paul Gauthier
e5a693ab94 fix: Correctly format testcase/language in stats 2024-12-18 12:55:42 -08:00
Paul Gauthier (aider)
9e9cfb4600 fix: Calculate max name length after cleaning paths 2024-12-18 12:49:23 -08:00
Paul Gauthier (aider)
5dddaac006 style: Fix linting issues in problem_stats.py 2024-12-18 12:48:44 -08:00
Paul Gauthier (aider)
14af6f1fba fix: Remove duplicate language prefix in problem stats 2024-12-18 12:48:40 -08:00
Paul Gauthier (aider)
e88064fdc9 style: Run linter 2024-12-18 12:47:17 -08:00
Paul Gauthier (aider)
6badf5ea1d feat: Add cumulative sum column to distribution table 2024-12-18 12:47:14 -08:00
Paul Gauthier
20f5f3da24 chore: Remove unused import 2024-12-18 12:47:13 -08:00
Paul Gauthier (aider)
8c1b147705 style: Fix string formatting in problem stats 2024-12-18 12:46:02 -08:00
Paul Gauthier (aider)
366155b828 fix: Correct language lookup in problem_stats.py 2024-12-18 12:45:58 -08:00
Paul Gauthier (aider)
2c7d1897eb style: Fix linting issues in problem_stats.py 2024-12-18 12:43:08 -08:00
Paul Gauthier (aider)
26ccb23402 feat: Add table showing exercise solution distribution 2024-12-18 12:43:04 -08:00
Paul Gauthier
d9e2471fcd refactor: Remove unused dump calls in benchmark script 2024-12-18 12:43:03 -08:00
Paul Gauthier (aider)
8302b351dd style: Fix line length in problem_stats.py 2024-12-18 12:38:45 -08:00
Paul Gauthier (aider)
b8647c0481 feat: Show exercises solved by all and total breakdown 2024-12-18 12:38:41 -08:00
Paul Gauthier
a168403d68 fix: Correctly extract language and testcase from results 2024-12-18 12:38:40 -08:00
Paul Gauthier (aider)
42d8650058 fix: Remove "exercises/" prefix from testcase output 2024-12-18 12:33:41 -08:00
Paul Gauthier (aider)
7ad0d46c11 style: Format problem_stats.py with linter 2024-12-18 12:31:54 -08:00
Paul Gauthier (aider)
58812f7f1f refactor: Sort all exercises by solve rate, not by language 2024-12-18 12:31:50 -08:00
Paul Gauthier (aider)
65133b2aef fix: Handle missing testcase key in problem stats 2024-12-18 12:29:38 -08:00
Paul Gauthier (aider)
291d8cd335 style: Run linter 2024-12-18 12:29:20 -08:00
Paul Gauthier (aider)
7a27e2b94b fix: Handle missing testcase key in problem stats 2024-12-18 12:29:15 -08:00
Paul Gauthier
57a8eab1c3 chore: Add dump for debugging 2024-12-18 12:29:14 -08:00
Paul Gauthier (aider)
236a7f68e9 fix: Handle empty results in problem_stats.py 2024-12-18 12:26:51 -08:00
Paul Gauthier (aider)
81d424f475 fix: Remove unused max_lang_len variable 2024-12-18 12:25:47 -08:00
Paul Gauthier (aider)
687ba8c9a2 style: Apply linter fixes 2024-12-18 12:25:39 -08:00
Paul Gauthier (aider)
6d74a564e6 feat: Handle new exercise dir layout and add language info 2024-12-18 12:25:33 -08:00
Paul Gauthier (aider)
0a3e0665ab style: Apply linter formatting 2024-12-18 12:21:19 -08:00
Paul Gauthier (aider)
a19f1fbc67 feat: Allow specifying dirs on cmd line for problem_stats 2024-12-18 12:21:13 -08:00
Paul Gauthier
2aa4615c78 feat: Add openrouter/openai/o1 model and update prompts 2024-12-18 06:59:14 -08:00
Paul Gauthier (aider)
7dd1346878 fix: Remove stray ] causing syntax error 2024-12-17 20:34:33 -08:00
Paul Gauthier (aider)
31f8c7d9cb fix: Handle JSON decode errors when loading results 2024-12-17 20:34:21 -08:00
Paul Gauthier
914ce0b94d feat: Add total_tests to summary, handle JSON decode errors 2024-12-17 20:34:20 -08:00
Paul Gauthier (aider)
664f09111e feat: Pass original_dname to tests, copy test files 2024-12-17 20:11:58 -08:00
Paul Gauthier (aider)
6141f414fd chore: Remove comment from run_unit_tests 2024-12-17 20:11:29 -08:00
Paul Gauthier
8911f0f217 fix: Correctly find benchmark markdown files 2024-12-17 20:11:29 -08:00
Paul Gauthier (aider)
5af108ccee style: Format benchmark code with black 2024-12-17 20:01:45 -08:00
Paul Gauthier (aider)
94e4169445 fix: Update stats to handle nested exercise directories 2024-12-17 20:01:40 -08:00
Paul Gauthier
479b5b7064 fix: Use shell=True for npm test and fix path 2024-12-17 20:01:39 -08:00
Paul Gauthier (aider)
674e935cf5 fix: Create symlinks only if they don't exist 2024-12-17 19:07:09 -08:00
Paul Gauthier
6b4982d75b chore: Add npm test benchmark script 2024-12-17 19:07:08 -08:00
Paul Gauthier (aider)
4167743a34 feat: Install npm packages in /npm-install directory 2024-12-17 19:01:24 -08:00
Paul Gauthier
ba289f6db4 build: Install nodejs and npm packages in Dockerfile 2024-12-17 19:01:22 -08:00
Paul Gauthier (aider)
422fd11f4d feat: Install all npm dependencies in Dockerfile 2024-12-17 18:50:04 -08:00
Paul Gauthier (aider)
614d9c9b0d feat: Install jest in Dockerfile 2024-12-17 18:40:30 -08:00
Paul Gauthier
f91be86662 build: Use uv for faster pip installs in Dockerfile 2024-12-17 18:40:28 -08:00
Paul Gauthier (aider)
72f05544e8 feat: Install Node.js in Dockerfile 2024-12-17 18:26:16 -08:00
Paul Gauthier (aider)
81f55820be refactor: Use ADD to fetch rustup installer in Dockerfile 2024-12-17 18:24:38 -08:00
Paul Gauthier (aider)
b9c14e1d65 feat: Add Go installation to Dockerfile 2024-12-17 18:22:41 -08:00
Paul Gauthier (aider)
5c55453a0e fix: Correctly calculate and display never solved exercises 2024-12-17 18:14:48 -08:00
Paul Gauthier
12491c4983 wip 2024-12-17 17:47:17 -08:00
Paul Gauthier (aider)
77d379c021 refactor: Use full path for test names in benchmark 2024-12-17 17:43:52 -08:00
Paul Gauthier (aider)
1a12a59e91 chore: Remove comment about test_dnames 2024-12-17 17:41:29 -08:00
Paul Gauthier
0b970dd9c7 fix: Ensure test_dnames include full path 2024-12-17 17:41:27 -08:00
Paul Gauthier (aider)
93ac2bd53e feat: Copy only practice subdirs with exercises 2024-12-17 17:36:03 -08:00
Paul Gauthier (aider)
f9646ac47a chore: Remove comment about practice subdirs 2024-12-17 17:35:17 -08:00
Paul Gauthier
e8ed3b9e23 chore: Add comment about copying practice subdirs 2024-12-17 17:35:16 -08:00
Paul Gauthier (aider)
6238a07c8f style: Run linter on benchmark.py 2024-12-17 17:33:28 -08:00
Paul Gauthier (aider)
1fb33f0c47 feat: Add language filter and multi-lang support 2024-12-17 17:33:23 -08:00
Paul Gauthier (aider)
a842f41627 style: Fix linting issues in benchmark.py 2024-12-17 16:49:50 -08:00
Paul Gauthier (aider)
c4c135e678 refactor: Use dict for test commands based on file extensions 2024-12-17 16:49:46 -08:00
Paul Gauthier (aider)
f36f2fdea2 style: Fix typo in test file extension check 2024-12-17 16:48:37 -08:00
Paul Gauthier (aider)
e3f0a67584 feat: Choose test command based on file extensions 2024-12-17 16:48:32 -08:00
Paul Gauthier
f6f05fa0c6 fix: Use cargo test for rust tests 2024-12-17 16:48:31 -08:00
Paul Gauthier (aider)
54ca7ceac8 feat: Use buildpack-deps, python3.12, and rust in Dockerfile 2024-12-17 16:39:30 -08:00
Paul Gauthier (aider)
cf5b38d4f5 style: Fix linting issues in benchmark.py 2024-12-17 16:35:20 -08:00
Paul Gauthier (aider)
b23669400f fix: Correct syntax error in cleanup_test_output 2024-12-17 16:35:16 -08:00
Paul Gauthier
aaacd00ecf refactor: Use pytest instead of unittest for running tests 2024-12-17 16:35:08 -08:00
Paul Gauthier (aider)
03aa22ba84 feat: Read config.json, copy solution/test files, no fallback 2024-12-17 16:18:10 -08:00
Paul Gauthier
1493b8703f fix: Skip unparseable results files in real test 2024-12-17 16:18:09 -08:00
Paul Gauthier (aider)
59308c20c6 feat: Number exercises in the table 2024-12-17 14:15:40 -08:00
Paul Gauthier (aider)
cac5d8e716 style: Apply linter formatting 2024-12-17 14:15:06 -08:00
Paul Gauthier (aider)
7f16757bbe fix: Handle missing results in topn leaderboard calculation 2024-12-17 14:15:02 -08:00
Paul Gauthier (aider)
674e3846e2 fix: Correctly sort leaderboard by pass rate 2024-12-17 14:13:43 -08:00
Paul Gauthier (aider)
3a0be0cca9 style: Apply linter formatting 2024-12-17 14:13:19 -08:00
Paul Gauthier (aider)
00d7c3a05a feat: Add --topn argument to limit models by pass rate 2024-12-17 14:13:16 -08:00
Paul Gauthier (aider)
91f5fca5e9 feat: Include never solved exercises in stats 2024-12-17 14:10:47 -08:00
Paul Gauthier (aider)
1d7cb0c119 feat: Format problem stats output as a table with percentages 2024-12-17 14:10:00 -08:00
Paul Gauthier (aider)
24599aa64f style: Run linter on problem_stats.py 2024-12-17 14:09:20 -08:00
Paul Gauthier (aider)
54c1553892 refactor: Remove distribution of solutions table 2024-12-17 14:09:17 -08:00
Paul Gauthier (aider)
0ae53ce1a1 feat: Output per-exercise stats, sort by solvers 2024-12-17 14:08:47 -08:00
Paul Gauthier
c69ffe02f8 chore: Make problem_stats.py executable 2024-12-17 14:08:46 -08:00
Paul Gauthier (aider)
7bfc2e0e74 style: Run linter on benchmark script 2024-12-17 14:06:56 -08:00
Paul Gauthier (aider)
9cc674c283 feat: Add script to analyze exercise solution stats 2024-12-17 14:06:53 -08:00
Paul Gauthier
66e597a05c feat: Add problem stats benchmark 2024-12-17 14:06:52 -08:00
Paul Gauthier
074c636e53 copy 2024-12-17 14:03:46 -08:00
Paul Gauthier
4ec44936f6 analytics to 10% 2024-12-17 14:01:13 -08:00
Paul Gauthier
eb9c41f2a0 feat: Enable complete_while_typing in prompt_session 2024-12-17 13:42:59 -08:00
Paul Gauthier (aider)
04afb99c54 fix: Use module-level function in test_is_uuid_in_percentage 2024-12-17 13:33:33 -08:00
Paul Gauthier
2124e7b221 copy 2024-12-17 13:30:30 -08:00
Paul Gauthier
2416a8bf96 fix: Handle empty file content in FileWatcher 2024-12-17 13:30:10 -08:00
Paul Gauthier (aider)
408a40f78b style: Format with linter 2024-12-17 13:24:55 -08:00
Paul Gauthier (aider)
195ae5ce4b feat: Pass cwd as root to FileWatcher when subtree_only 2024-12-17 13:24:50 -08:00
Paul Gauthier
9bebb1e9a9 fix: Pass root to FileWatcher 2024-12-17 13:24:49 -08:00
Paul Gauthier
e7bec5be1d feat: Allow setting root path for file watcher 2024-12-17 13:23:55 -08:00
Paul Gauthier
c708e8ba8e refactor: Move PERCENT constant to top level 2024-12-17 13:02:07 -08:00
Paul Gauthier (aider)
60f26cc067 refactor: Move is_uuid_in_percentage and fix import 2024-12-17 12:55:43 -08:00
Paul Gauthier (aider)
64fa058bc7 style: Apply linter fixes 2024-12-17 12:55:29 -08:00
Paul Gauthier (aider)
9a770eeae9 refactor: Move uuid percentage check to standalone functions 2024-12-17 12:55:26 -08:00
Paul Gauthier
ffc2c5a26e refactor: Move uuid percentage check to function 2024-12-17 12:55:24 -08:00
Paul Gauthier
b6c5bd552e Merge branch 'main' of github.com:Aider-AI/aider 2024-12-17 12:39:07 -08:00
paul-gauthier
05147a3199 Merge pull request #2652 from evannjohnson/docs-code-themes
Document that Pygments styles can be used for --code-theme
2024-12-17 12:39:04 -08:00
Evan Johnson
7f0d08ad77 doc that Pygments styles can be used for --code-theme 2024-12-17 13:18:31 -07:00
Paul Gauthier
64f95af833 copy 2024-12-17 10:56:23 -08:00
Paul Gauthier
7cd2662355 disable website analytics 2024-12-17 08:48:47 -08:00
Paul Gauthier (aider)
154d485c9e feat: Add analytics config and toggle to _config.yml 2024-12-17 08:32:12 -08:00
Paul Gauthier
5f6821c7e2 copy 2024-12-17 08:28:51 -08:00
Paul Gauthier (aider)
59cf823d56 style: Run linter on blame.py 2024-12-17 08:25:08 -08:00
Paul Gauthier (aider)
70312c58be feat: Add exclude_files list and filter in blame script 2024-12-17 08:25:04 -08:00
Paul Gauthier
4942366271 feat: Add exclude_files list to blame script 2024-12-17 08:25:03 -08:00
Paul Gauthier
f237d0f212 copy 2024-12-16 19:57:10 -08:00
Paul Gauthier
9b424e0fe7 copy 2024-12-16 16:29:43 -08:00
Paul Gauthier
81b75d178b copy 2024-12-16 16:27:55 -08:00
Paul Gauthier
410e732eb3 copy 2024-12-16 16:21:55 -08:00
Paul Gauthier
2ca93cd93d copy 2024-12-16 16:18:50 -08:00
Paul Gauthier
50c806286e copy 2024-12-16 16:12:30 -08:00
Paul Gauthier
59de835b42 copy 2024-12-16 16:08:02 -08:00
Paul Gauthier
ecbac76cba copy 2024-12-16 16:06:06 -08:00
Paul Gauthier (aider)
9b16f2139d feat: Install aider-chat using uv after uv install 2024-12-16 16:02:49 -08:00
Paul Gauthier
ef14df5ba2 feat: Add install script for website 2024-12-16 16:02:48 -08:00
Paul Gauthier
b4be9875b2 copy 2024-12-16 15:58:29 -08:00
Paul Gauthier
8d0c962f42 copy 2024-12-16 15:57:13 -08:00
Paul Gauthier
5e0cb8d658 add install.ps1 2024-12-16 15:34:08 -08:00
Paul Gauthier
1869ab94fe copy 2024-12-16 13:01:25 -08:00
Paul Gauthier
2627c5baaf refac leaderboard 2024-12-16 12:57:56 -08:00
Paul Gauthier (aider)
e4e16b8f77 fix: Correctly select table body element 2024-12-16 12:56:49 -08:00
Paul Gauthier
85218d74d4 don't block pre-commit for faq cog 2024-12-16 12:47:06 -08:00
Paul Gauthier
47d5b66986 copy 2024-12-16 12:44:21 -08:00
Paul Gauthier
ecfb133de2 copy 2024-12-16 12:40:29 -08:00
Paul Gauthier
23c95d24f1 copy 2024-12-16 12:38:01 -08:00
Paul Gauthier
b37d89bd08 copy 2024-12-16 12:37:10 -08:00
Paul Gauthier
5c848d59b2 set version to 0.69.2.dev 2024-12-16 12:36:28 -08:00
Paul Gauthier
b1c04dece9 version bump to 0.69.1 2024-12-16 12:34:51 -08:00
Paul Gauthier
b87c7987bb copy 2024-12-16 12:29:10 -08:00
Paul Gauthier
0bef52ae7d fix: Only show AI comment help once per file add 2024-12-16 12:27:19 -08:00
Paul Gauthier (aider)
9ae04cf1ec style: Format tool output message 2024-12-16 12:13:35 -08:00
Paul Gauthier (aider)
0f7c4a8d4f feat: Add help message for first-time AI usage 2024-12-16 12:13:32 -08:00
Paul Gauthier
07353207c0 feat: Output "Use AI!" if no action triggered 2024-12-16 12:13:31 -08:00
Paul Gauthier
d89be83414 copy 2024-12-16 12:10:34 -08:00
Paul Gauthier
01382527f5 cleanup cog of toml 2024-12-16 12:08:08 -08:00
Paul Gauthier
dece2193fc Switch to MANIFEST.in to exclude aider/website/assets/ and other from whl build file 2024-12-16 12:07:02 -08:00
Paul Gauthier
d298f864fa works? 2024-12-16 11:55:24 -08:00
Paul Gauthier (aider)
ff37d8c691 feat: Add include-package-data to pyproject.toml 2024-12-16 08:28:10 -08:00
Paul Gauthier
f7f305a564 fix: Update include pattern for assets 2024-12-16 08:28:09 -08:00
Paul Gauthier (aider)
86f38e11cd feat: Add MANIFEST.in to exclude website assets 2024-12-16 08:27:02 -08:00
Paul Gauthier
0b60c48253 fixed gemini metadata keys 2024-12-15 16:00:40 -08:00
Paul Gauthier
024b9840f0 copy 2024-12-15 09:34:51 -08:00
Paul Gauthier
2f4f59d82f copy 2024-12-15 09:29:21 -08:00
Paul Gauthier
830d5ee763 copy 2024-12-15 09:27:22 -08:00
Paul Gauthier
5bc63f7a33 copy 2024-12-15 09:25:29 -08:00
Paul Gauthier
b54f970e12 copy 2024-12-15 09:16:42 -08:00
Paul Gauthier
0cc8c54152 copy 2024-12-15 09:01:13 -08:00
Paul Gauthier
241e1e27d0 copy 2024-12-15 08:50:28 -08:00
Paul Gauthier
0145e86202 Merge branch 'main' of github.com:Aider-AI/aider 2024-12-15 08:48:12 -08:00
Paul Gauthier
4d50e1e373 copy 2024-12-15 08:46:44 -08:00
Paul Gauthier
4b6ae34800 updated keys config docs 2024-12-15 08:46:20 -08:00
Paul Gauthier
2feb85e831 api keys 2024-12-15 08:40:02 -08:00
Paul Gauthier
a67ac81265 updated install instructions 2024-12-15 08:39:53 -08:00
paul-gauthier
dab536c9e8 Merge pull request #2633 from you-n-g/patch-1 2024-12-15 07:04:51 -08:00
you-n-g
64cf298521 docs: Update watch.md 2024-12-15 13:35:14 +08:00
Paul Gauthier
10b5aaa6a5 copy 2024-12-14 20:52:20 -08:00
Paul Gauthier
8c79e5ccfb copy 2024-12-14 20:09:51 -08:00
Paul Gauthier
2ef536a342 copy 2024-12-14 17:42:22 -08:00
Paul Gauthier
85b1303460 fix: Remove always-true condition for Windows env var message 2024-12-14 09:50:26 -08:00
Paul Gauthier
60aca3a241 Merge branch 'no-git' 2024-12-14 09:49:41 -08:00
Paul Gauthier
db98381a86 refactor: Move git check after env loading 2024-12-14 09:44:42 -08:00
Paul Gauthier
f62ef34715 fix: Handle missing git module gracefully 2024-12-14 09:42:54 -08:00
Paul Gauthier
f95a6c1a5a recommend aider-install 2024-12-14 09:42:32 -08:00
Paul Gauthier
65555b5dd0 copy 2024-12-13 13:43:15 -08:00
Paul Gauthier
9f6331a35e copy 2024-12-13 13:34:18 -08:00
Paul Gauthier (aider)
8c10cb6230 style: Fix linting issues in my_models.py 2024-12-13 13:22:59 -08:00
Paul Gauthier (aider)
c8894bcead feat: Conditionally add redacted model note to script 2024-12-13 13:22:55 -08:00
Paul Gauthier
edc602c33a copy 2024-12-13 12:55:33 -08:00
Paul Gauthier (aider)
abfb2ca810 fix: Correct import path for my_models in faq.md 2024-12-13 12:49:01 -08:00
Paul Gauthier (aider)
9967efe45a fix: Correct import path in cog block for model stats 2024-12-13 12:48:29 -08:00
Paul Gauthier
e77d80bda5 docs: Add FAQ about LLMs used to build aider 2024-12-13 12:48:28 -08:00
Paul Gauthier (aider)
a691d1750a style: Apply linter formatting 2024-12-13 12:34:34 -08:00
Paul Gauthier (aider)
834e2f9304 refactor: Separate data, text, and HTML formatting into functions 2024-12-13 12:34:31 -08:00
Paul Gauthier (aider)
66e5e9c1ce feat: Add percentage column to model token usage summary 2024-12-13 12:33:14 -08:00
Paul Gauthier (aider)
2d5f613984 feat: Process only last 1000 lines of analytics file 2024-12-13 12:32:28 -08:00
Paul Gauthier (aider)
868e7a278f feat: Sort model token usage by count descending 2024-12-13 12:31:38 -08:00
Paul Gauthier
f953d17889 chore: Make my_models.py executable 2024-12-13 12:31:37 -08:00
Paul Gauthier (aider)
3473969aae fix: Remove unused os import in my_models.py 2024-12-13 12:31:09 -08:00
Paul Gauthier (aider)
ec11ae7c40 style: Fix linting issues in my_models.py 2024-12-13 12:31:03 -08:00
Paul Gauthier (aider)
8217ee1bbb feat: Add script to analyze model token usage 2024-12-13 12:30:59 -08:00
Paul Gauthier
1ad3ee0aec feat: Add my_models.py script 2024-12-13 12:30:59 -08:00
Paul Gauthier (aider)
b3e9a2fede feat: Allow version arg for blame script, default to v0.1.0 2024-12-13 11:49:15 -08:00
Paul Gauthier
2f5d6bf909 feat: Take version as optional arg for blame script 2024-12-13 11:49:14 -08:00
Paul Gauthier
cd79f479e9 copy 2024-12-13 11:48:14 -08:00
Paul Gauthier
12c0f675ce copy 2024-12-13 11:46:44 -08:00
Paul Gauthier
ee837889db Merge branch 'main' into ts-pack 2024-11-27 08:54:03 -08:00
Paul Gauthier
a5f4cba72f wip 2024-11-27 08:53:41 -08:00
474 changed files with 41388 additions and 7191 deletions

View File

@@ -0,0 +1,86 @@
name: Check PyPI Version
# Check to be sure `pip install aider-chat` installs the most recently published version.
# If dependencies get yanked, it may render the latest version uninstallable.
# See https://github.com/Aider-AI/aider/issues/3699 for example.
on:
schedule:
# Run once a day at midnight UTC
- cron: '0 0 * * *'
workflow_dispatch: # Allows manual triggering
jobs:
check_version:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install aider-chat
run: pip install aider-chat
- name: Get installed aider version
id: installed_version
run: |
set -x # Enable debugging output
aider_version_output=$(aider --version)
if [ $? -ne 0 ]; then
echo "Error: 'aider --version' command failed."
exit 1
fi
echo "Raw aider --version output: $aider_version_output"
# Extract version number (format X.Y.Z)
version_num=$(echo "$aider_version_output" | grep -oP '\d+\.\d+\.\d+')
# Check if grep found anything
if [ -z "$version_num" ]; then
echo "Error: Could not extract version number using grep -oP '\d+\.\d+\.\d+' from output: $aider_version_output"
exit 1
fi
echo "Extracted version number: $version_num"
echo "version=$version_num" >> $GITHUB_OUTPUT
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all tags
- name: Get latest tag
id: latest_tag
run: |
set -x # Enable debugging output
# Fetch all tags from remote just in case
git fetch --tags origin main
# Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev)
# List all tags, sort by version descending, filter for exact pattern, take the first one
latest_tag=$(git tag --sort=-v:refname | grep -P '^v\d+\.\d+\.\d+$' | head -n 1)
if [ -z "$latest_tag" ]; then
echo "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'"
exit 1
fi
echo "Latest non-dev tag: $latest_tag"
# Remove 'v' prefix for comparison
tag_num=${latest_tag#v}
echo "Extracted tag number: $tag_num"
echo "tag=$tag_num" >> $GITHUB_OUTPUT
- name: Compare versions
run: |
echo "Installed version: ${{ steps.installed_version.outputs.version }}"
echo "Latest tag version: ${{ steps.latest_tag.outputs.tag }}"
if [ "${{ steps.installed_version.outputs.version }}" != "${{ steps.latest_tag.outputs.tag }}" ]; then
echo "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})."
exit 1
fi
echo "Versions match."

View File

@@ -4,23 +4,25 @@ on:
push:
paths-ignore:
- 'aider/website/**'
- README.md
- HISTORY.md
- 'README.md'
- 'HISTORY.md'
- '.github/workflows/*'
- '!.github/workflows/docker-build-test.yml'
branches:
- main
pull_request:
paths-ignore:
- 'aider/website/**'
- README.md
- 'README.md'
- 'HISTORY.md'
- '.github/workflows/*'
- '!.github/workflows/docker-build-test.yml'
branches:
- main
# copy most of these steps from release.yml, but push: false and no tags:
jobs:
build:
docker_build_and_push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -29,11 +31,19 @@ jobs:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker standard image
- name: Login to DockerHub
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Build Docker images (PR)
if: ${{ github.event_name == 'pull_request' }}
uses: docker/build-push-action@v5
with:
context: .
@@ -42,7 +52,19 @@ jobs:
push: false
target: aider
- name: Build Docker full image
- name: Build Docker images (Push)
if: ${{ github.event_name != 'pull_request' }}
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/aider:dev
target: aider
- name: Build Docker full image (PR)
if: ${{ github.event_name == 'pull_request' }}
uses: docker/build-push-action@v5
with:
context: .
@@ -50,3 +72,14 @@ jobs:
platforms: linux/amd64,linux/arm64
push: false
target: aider-full
- name: Build Docker full image (Push)
if: ${{ github.event_name != 'pull_request' }}
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/aider-full:dev
target: aider-full

View File

@@ -12,6 +12,7 @@ on:
- "main"
paths:
- "aider/website/**"
- ".github/workflows/pages.yml"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
@@ -55,10 +56,9 @@ jobs:
env:
JEKYLL_ENV: production
- name: Upload artifact
# Automatically uploads an artifact from the './_site' directory by default
uses: actions/upload-pages-artifact@v1
uses: actions/upload-pages-artifact@v3
with:
path: "aider/website/_site/"
path: "aider/website/_site"
# Deployment job
deploy:
@@ -70,7 +70,7 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
uses: actions/deploy-pages@v4
- name: Set up Python 3.12
uses: actions/setup-python@v5

48
.github/workflows/pre-commit.yml vendored Normal file
View File

@@ -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

View File

@@ -4,14 +4,19 @@ on:
push:
paths-ignore:
- 'aider/website/**'
- README.md
- HISTORY.md
- 'README.md'
- 'HISTORY.md'
- '.github/workflows/*'
- '!.github/workflows/ubuntu-tests.yml'
branches:
- main
pull_request:
paths-ignore:
- 'aider/website/**'
- README.md
- 'README.md'
- 'HISTORY.md'
- '.github/workflows/*'
- '!.github/workflows/ubuntu-tests.yml'
branches:
- main
@@ -20,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

View File

@@ -4,14 +4,19 @@ on:
push:
paths-ignore:
- 'aider/website/**'
- README.md
- HISTORY.md
- 'README.md'
- 'HISTORY.md'
- '.github/workflows/*'
- '!.github/workflows/windows-tests.yml'
branches:
- main
pull_request:
paths-ignore:
- 'aider/website/**'
- README.md
- 'README.md'
- 'HISTORY.md'
- '.github/workflows/*'
- '!.github/workflows/windows-tests.yml'
branches:
- main
@@ -20,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

View File

@@ -0,0 +1,90 @@
name: Windows Check PyPI Version
# Check to be sure `pip install aider-chat` installs the most recently published version on Windows.
# If dependencies get yanked, it may render the latest version uninstallable.
# See https://github.com/Aider-AI/aider/issues/3699 for example.
on:
schedule:
# Run once a day at 1 AM UTC (offset from Ubuntu check)
- cron: '0 1 * * *'
workflow_dispatch: # Allows manual triggering
jobs:
check_version:
runs-on: windows-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]
defaults:
run:
shell: pwsh # Use PowerShell for all run steps
steps:
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install aider-chat
run: pip install aider-chat
- name: Get installed aider version
id: installed_version
run: |
Write-Host "Running 'aider --version'..."
$aider_version_output = aider --version
if ($LASTEXITCODE -ne 0) {
Write-Error "Error: 'aider --version' command failed."
exit 1
}
Write-Host "Raw aider --version output: $aider_version_output"
# Extract version number (format X.Y.Z) using PowerShell regex
$match = [regex]::Match($aider_version_output, '\d+\.\d+\.\d+')
if (-not $match.Success) {
Write-Error "Error: Could not extract version number using regex '\d+\.\d+\.\d+' from output: $aider_version_output"
exit 1
}
$version_num = $match.Value
Write-Host "Extracted version number: $version_num"
echo "version=$version_num" >> $env:GITHUB_OUTPUT
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all tags
- name: Get latest tag
id: latest_tag
run: |
Write-Host "Fetching tags..."
# Fetch all tags from remote just in case
git fetch --tags origin main
Write-Host "Getting latest non-dev tag..."
# Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev)
# List all tags, sort by version descending, filter for exact pattern, take the first one
$latest_tag = (git tag --sort=-v:refname | Select-String -Pattern '^v\d+\.\d+\.\d+$' | Select-Object -First 1).Line
if (-not $latest_tag) {
Write-Error "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'"
exit 1
}
Write-Host "Latest non-dev tag: $latest_tag"
# Remove 'v' prefix for comparison
$tag_num = $latest_tag.Substring(1)
Write-Host "Extracted tag number: $tag_num"
echo "tag=$tag_num" >> $env:GITHUB_OUTPUT
- name: Compare versions
run: |
Write-Host "Installed version: ${{ steps.installed_version.outputs.version }}"
Write-Host "Latest tag version: ${{ steps.latest_tag.outputs.tag }}"
if ("${{ steps.installed_version.outputs.version }}" -ne "${{ steps.latest_tag.outputs.tag }}") {
Write-Error "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})."
exit 1
}
Write-Host "Versions match."

2
.gitignore vendored
View File

@@ -15,3 +15,5 @@ aider/_version.py
.venv/
.#*
.gitattributes
tmp.benchmarks/
.docker_bash_history

View File

@@ -18,5 +18,6 @@ repos:
rev: v2.2.6
hooks:
- id: codespell
args: ["--skip", "aider/website/docs/languages.md"]
additional_dependencies:
- tomli

View File

@@ -56,13 +56,6 @@ It is recommended to create a virtual environment outside of the repository to k
python -m venv /path/to/venv
```
#### Using `virtualenv` (for older Python versions)
```
pip install virtualenv
virtualenv /path/to/venv
```
### Activate the Virtual Environment
#### On Windows

View File

@@ -1,5 +1,478 @@
# Release history
### main branch
- Expanded GPT-5 model support across family variants and providers (OpenAI, Azure, OpenRouter), including dated and chat/mini/nano variants.
- Aider wrote 88% of the code in this release.
### Aider v0.85.5
- Enforced diff edit format for GPT-5 models.
- Added support for the reasoning_effort setting for GPT-5 models.
- Fixed model detection to correctly apply GPT-5 settings to versioned names (gpt-5 and gpt-5-2025-08-07).
### Aider v0.85.4
- Added support for openai/gpt-5
- Fixed analytics to support the latest PostHog SDK event-capture API.
- Disabled temperature when using GPT-5 models for more deterministic outputs.
### Aider v0.85.3
- Bumped dependencies to pick up latest litellm==1.75.0.
### Aider v0.85.2
- Added support for Grok-4 via `xai/grok-4` and `openrouter/x-ai/grok-4` model names.
- Added support for `gemini/gemini-2.5-flash-lite-preview-06-17` model, by Tamir Zahavi-Brunner.
- `/clear` now prints “All chat history cleared.” so you know it worked, by Zexin Yuan.
- `/undo` output now shows only the first line of each commit message, making it easier to read.
- Fixed an issue where new settings for an existing model didn't replace the old ones, by Andrew Grigorev.
- Added support for `openrouter/moonshotai/kimi-k2` model, by Jack Harrington.
### Aider v0.85.1
- Display model announcements with no-arg `/model` command.
### Aider v0.85.0
- Support for Responses API models like o1-pro, o3-pro.
- Updated pricing for o3.
- Added support for new Gemini models including `gemini-2.5-pro`, `gemini-2.5-flash`, and `gemini-2.5-pro-preview-06-05` with thinking tokens support.
- Updated model aliases: `flash` now points to `gemini-2.5-flash` and `gemini` now points to `gemini-2.5-pro`.
- Added `--add-gitignore-files` flag to enable adding files listed in .gitignore to Aider's editing scope, by omarcinkonis.
- Added `--commit-language` option to specify the language for commit messages, by Kyosuke Takayama.
- Enhanced thinking tokens support: can now be disabled by setting to 0, and improved help text with examples.
- Added MATLAB language support for repository maps, by Matthew Tofano.
- Added support for OpenAI o3-pro model across multiple providers.
- Improved GitHub Copilot token handling with better validation and error messages, by Vincent Taverna and Sebastian Estrella.
- Fixed encoding issues in git diff output and LLM history logging.
- Enhanced commit message generation to use system prompt prefixes, by Luke Reeves.
- Improved inline code rendering in Rich markdown output, by Vamsi Talupula.
- Fixed Vertex AI model name prefixes in settings, by Wietse Venema.
- Improved `/read-only` command to resolve literal paths correctly, by Matteo Landi.
- Skip expensive file tracking operations when `--skip-sanity-check-repo` is enabled for better performance, by Makar Ivashko.
- Ensure pip is available before package installation.
- Auto-create parent directories for chat history files to prevent startup errors, by contributor.
- Fixed search block regex to accept optional closing tags when working with HTML content, by Mathis Beer.
- Co-authored-by attribution is now enabled by default for commit messages.
- Added Clojure language support for repository maps, by Garrett Hopper.
- Added custom PostHog analytics configuration options with `--analytics-posthog-host` and `--analytics-posthog-project-api-key` flags, by Vasil Markoukin.
- Optimized chat history summarization performance, by jayeshthk.
- Improved kebab-case identifier recognition in repository maps for better code analysis.
- Increased max tokens for Deepseek models to 65536 for better performance.
- Aider wrote 21% of the code in this release.
### Aider v0.84.0
- Added support for new Claude models including the Sonnet 4 and Opus 4 series (e.g., `claude-sonnet-4-20250514`,
`claude-opus-4-20250514`) across various providers. The default `sonnet` and `opus` aliases were updated to these newer
versions.
- Added support for the `vertex_ai/gemini-2.5-flash-preview-05-20` model.
- Fixed OpenRouter token cost calculation for improved accuracy.
- Updated default OpenRouter models during onboarding to `deepseek/deepseek-r1:free` for the free tier and
`anthropic/claude-sonnet-4` for paid tiers.
- Automatically refresh GitHub Copilot tokens when used as OpenAI API keys, by Lih Chen.
- Aider wrote 79% of the code in this release.
### Aider v0.83.2
- Bumped configargparse to 1.7.1 as 1.7 was pulled.
- Added shell tab completion for file path arguments (by saviour) and for `--edit-format`/`--editor-edit-format` options.
- Improved OpenRouter model metadata handling by introducing a local cache, increasing reliability and performance.
- The `/settings` command now displays detailed metadata for active main, editor, and weak models.
- Fixed an issue where files explicitly added via the command line were not correctly ignored if listed in `.gitignore`.
- Improved automatic commit messages by providing more context during their generation, by wangboxue.
### Aider v0.83.1
- Improved user language detection by correctly normalizing hyphenated language codes (e.g., `en-US` to `en`) and enhancing the validation of locale results.
- Prevented Aider from instructing the LLM to reply in 'C' or 'POSIX' when these are detected as the system locale.
- Displayed a spinner with the model name when generating commit messages.
### Aider v0.83.0
- 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.
- 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.
- Added tracking of total tokens sent and received, now included in benchmark statistics.
- Automatically fetch model parameters (context window, pricing) for OpenRouter models directly from their website, by Stefan Hladnik.
- Enabled support for `thinking_tokens` and `reasoning_effort` parameters for OpenRouter models.
- Improved cost calculation using `litellm.completion_cost` where available.
- Added model settings for `openrouter/google/gemini-2.5-pro-preview-03-25`.
- Added `--disable-playwright` flag to prevent Playwright installation prompts and usage, by Andrew Grigorev.
- 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.
- 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.
- 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.
- 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
- Add support for `gemini-2.5-flash-preview-04-17` models.
- Improved robustness of edit block parsing when filenames start with backticks or fences.
- 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`.
- Instruct models to reply in the user's detected system language.
- Fix parsing of diffs for newly created files (`--- /dev/null`).
- Add markdown syntax highlighting support when editing multi-line commit messages via `/commit`, by Kay Gosho.
- 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`).
### 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.
- Fixed handling of file paths in unified diffs, especially those generated by git.
### Aider v0.82.0
- Support for GPT 4.1, mini and nano.
- Added new `patch` edit format for OpenAI's GPT-4.1 model.
- Improved support for using architect mode with Gemini 2.5 Pro.
- Added new `editor-diff`, `editor-whole`, and `editor-diff-fenced` edit formats.
- Bugfix for automatically selecting the best edit format to use in architect mode.
- Added support for `grok-3-fast-beta` and `grok-3-mini-fast-beta` models.
- Aider wrote 92% of the code in this release.
### Aider v0.81.3
- Commit messages generated by aider are no longer forced to be entirely lowercase, by Peter Hadlaw.
- Updated default settings for Grok models.
### Aider v0.81.2
- Add support for `xai/grok-3-beta`, `xai/grok-3-mini-beta`, `openrouter/x-ai/grok-3-beta`, `openrouter/x-ai/grok-3-mini-beta`, and `openrouter/openrouter/optimus-alpha` models.
- Add alias "grok3" for `xai/grok-3-beta`.
- Add alias "optimus" for `openrouter/openrouter/optimus-alpha`.
- Fix URL extraction from error messages.
- Allow adding files by full path even if a file with the same basename is already in the chat.
- Fix quoting of values containing '#' in the sample `aider.conf.yml`.
- Add support for Fireworks AI model 'deepseek-v3-0324', by Felix Lisczyk.
- Commit messages generated by aider are now lowercase, by Anton Ödman.
### Aider v0.81.1
- Added support for the `gemini/gemini-2.5-pro-preview-03-25` model.
- Updated the `gemini` alias to point to `gemini/gemini-2.5-pro-preview-03-25`.
- Added the `gemini-exp` alias for `gemini/gemini-2.5-pro-exp-03-25`.
### Aider v0.81.0
- Added support for the `openrouter/openrouter/quasar-alpha` model.
- Run with `aider --model quasar`
- Offer OpenRouter OAuth authentication if an OpenRouter model is specified but the API key is missing.
- Prevent retrying API calls when the provider reports insufficient credits.
- Improve URL detection to exclude trailing double quotes.
- Aider wrote 86% of the code in this release.
### Aider v0.80.4
- Bumped deps to pickup litellm change to properly display the root cause of OpenRouter "choices" errors.
### Aider v0.80.3
- Improve error message for OpenRouter API connection issues to mention potential rate limiting or upstream provider issues.
- Configure weak models (`gemini/gemini-2.0-flash` and `openrouter/google/gemini-2.0-flash-exp:free`) for Gemini 2.5 Pro models.
- Add model metadata for `openrouter/google/gemini-2.0-flash-exp:free`.
### Aider v0.80.2
- Bumped deps.
### Aider v0.80.1
- Updated deps for yanked fsspec and aiohttp packages #3699
- Removed redundant dependency check during OpenRouter OAuth flow, by Claudia Pellegrino.
### Aider v0.80.0
- OpenRouter OAuth integration:
- Offer to OAuth against OpenRouter if no model and keys are provided.
- Select OpenRouter default model based on free/paid tier status if `OPENROUTER_API_KEY` is set and no model is specified.
- Prioritize `gemini/gemini-2.5-pro-exp-03-25` if `GEMINI_API_KEY` is set, and `vertex_ai/gemini-2.5-pro-exp-03-25` if `VERTEXAI_PROJECT` is set, when no model is specified.
- Validate user-configured color settings on startup and warn/disable invalid ones.
- Warn at startup if `--stream` and `--cache-prompts` are used together, as cost estimates may be inaccurate.
- Boost repomap ranking for files whose path components match identifiers mentioned in the chat.
- Change web scraping timeout from an error to a warning, allowing scraping to continue with potentially incomplete content.
- Left-align markdown headings in the terminal output, by Peter Schilling.
- Update edit format to the new model's default when switching models with `/model`, if the user was using the old model's default format.
- Add `Ctrl-X Ctrl-E` keybinding to edit the current input buffer in an external editor, by Matteo Landi.
- Fix linting errors for filepaths containing shell metacharacters, by Mir Adnan ALI.
- Add the `openrouter/deepseek-chat-v3-0324:free` model.
- Add repomap support for the Scala language, by Vasil Markoukin.
- Fixed bug in `/run` that was preventing auto-testing.
- Fix bug preventing `UnboundLocalError` during git tree traversal.
- Handle `GitCommandNotFound` error if git is not installed or not in PATH.
- Handle `FileNotFoundError` if the current working directory is deleted while aider is running.
- Fix completion menu current item color styling, by Andrey Ivanov.
- Aider wrote 87% of the code in this release.
### Aider v0.79.2
- Added 'gemini' alias for gemini-2.5-pro model.
- Updated Gemini 2.5 Pro max output tokens to 64k.
- Added support for Lisp-style semicolon comments in file watcher, by Matteo Landi.
- Added OpenRouter API error detection and retries.
- Added openrouter/deepseek-chat-v3-0324 model.
- Aider wrote 93% of the code in this release.
### Aider v0.79.1
- Improved model listing to include all models in fuzzy matching, including those provided by aider (not litellm).
### Aider v0.79.0
- Added support for Gemini 2.5 Pro models.
- Added support for DeepSeek V3 0324 model.
- Added a new `/context` command that automatically identifies which files need to be edited for a given request.
- Added `/edit` as an alias for the `/editor` command.
- Added "overeager" mode for Claude 3.7 Sonnet models to try and keep it working within the requested scope.
- Aider wrote 65% of the code in this release.
### Aider v0.78.0
- Added support for thinking tokens for OpenRouter Sonnet 3.7.
- Added commands to switch between model types: `/editor-model` for Editor Model, and `/weak-model` for Weak Model, by csala.
- Added model setting validation to ignore `--reasoning-effort` and `--thinking-tokens` if the model doesn't support them.
- Added `--check-model-accepts-settings` flag (default: true) to force unsupported model settings.
- Annotated which models support reasoning_effort and thinking_tokens settings in the model settings data.
- Improved code block rendering in markdown output with better padding using NoInsetMarkdown.
- Added `--git-commit-verify` flag (default: False) to control whether git commit hooks are bypassed.
- Fixed autocompletion for `/ask`, `/code`, and `/architect` commands, by shladnik.
- Added vi-like behavior when pressing enter in multiline-mode while in vi normal/navigation-mode, by Marco Mayer.
- Added AWS_PROFILE support for Bedrock models, allowing use of AWS profiles instead of explicit credentials, by lentil32.
- Enhanced `--aiderignore` argument to resolve both absolute and relative paths, by mopemope.
- Improved platform information handling to gracefully handle retrieval errors.
- Aider wrote 92% of the code in this release.
### Aider v0.77.1
- Bumped dependencies to pickup litellm fix for Ollama.
- Added support for `openrouter/google/gemma-3-27b-it` model.
- Updated exclude patterns for help documentation.
### Aider v0.77.0
- Big upgrade in [programming languages supported](https://aider.chat/docs/languages.html) by adopting [tree-sitter-language-pack](https://github.com/Goldziher/tree-sitter-language-pack/).
- 130 new languages with linter support.
- 20 new languages with repo-map support.
- Added `/think-tokens` command to set thinking token budget with support for human-readable formats (8k, 10.5k, 0.5M).
- Added `/reasoning-effort` command to control model reasoning level.
- The `/think-tokens` and `/reasoning-effort` commands display current settings when called without arguments.
- Display of thinking token budget and reasoning effort in model information.
- Changed `--thinking-tokens` argument to accept string values with human-readable formats.
- Added `--auto-accept-architect` flag (default: true) to automatically accept changes from architect coder format without confirmation.
- Added support for `cohere_chat/command-a-03-2025` and `gemini/gemma-3-27b-it`
- The bare `/drop` command now preserves original read-only files provided via args.read.
- Fixed a bug where default model would be set by deprecated `--shortcut` switches even when already specified in the command line.
- Improved AutoCompleter to require 3 characters for autocompletion to reduce noise.
- Aider wrote 72% of the code in this release.
### Aider v0.76.2
- Fixed handling of JSONDecodeError when loading model cache file.
- Fixed handling of GitCommandError when retrieving git user configuration.
- Aider wrote 75% of the code in this release.
### Aider v0.76.1
- Added ignore_permission_denied option to file watcher to prevent errors when accessing restricted files, by Yutaka Matsubara.
- Aider wrote 0% of the code in this release.
### Aider v0.76.0
- Improved support for thinking/reasoningmodels:
- Added `--thinking-tokens` CLI option to control token budget for models that support thinking.
- Display thinking/reasoning content from LLMs which return it.
- Enhanced handling of reasoning tags to better clean up model responses.
- Added deprecation warning for `remove_reasoning` setting, now replaced by `reasoning_tag`.
- Aider will notify you when it's completed the last request and needs your input:
- Added [notifications when LLM responses are ready](https://aider.chat/docs/usage/notifications.html) with `--notifications` flag.
- Specify desktop notification command with `--notifications-command`.
- Added support for QWQ 32B.
- Switch to `tree-sitter-language-pack` for tree sitter support.
- Improved error handling for EOF (Ctrl+D) in user input prompts.
- Added helper function to ensure hex color values have a # prefix.
- Fixed handling of Git errors when reading staged files.
- Improved SSL verification control for model information requests.
- Improved empty LLM response handling with clearer warning messages.
- Fixed Git identity retrieval to respect global configuration, by Akira Komamura.
- Offer to install dependencies for Bedrock and Vertex AI models.
- Deprecated model shortcut args (like --4o, --opus) in favor of the --model flag.
- Aider wrote 85% of the code in this release.
### Aider v0.75.3
- Support for V3 free on OpenRouter: `--model openrouter/deepseek/deepseek-chat:free`.
### Aider v0.75.2
- Added support for Claude 3.7 Sonnet models on OpenRouter, Bedrock and Vertex AI.
- Updated default model to Claude 3.7 Sonnet on OpenRouter.
- Added support for GPT-4.5-preview model.
- Added support for Claude 3.7 Sonnet:beta on OpenRouter.
- Fixed weak_model_name patterns to match main model name patterns for some models.
### Aider v0.75.1
- Added support for `openrouter/anthropic/claude-3.7-sonnet`
### Aider v0.75.0
- Basic support for Claude 3.7 Sonnet
- Use `--model sonnet` to use the new 3.7
- Thinking support coming soon.
- Bugfix to `/editor` command.
- Aider wrote 46% of the code in this release.
### Aider v0.74.3
- Downgrade streamlit dependency to avoid threading bug.
- Added support for tree-sitter language pack.
- Added openrouter/o3-mini-high model configuration.
- Added build.gradle.kts to special files for Kotlin project support, by Lucas Shadler.
### Aider v0.74.2
- Prevent more than one cache warming thread from becoming active.
- Fixed continuation prompt ". " for multiline input.
- Added HCL (Terraform) syntax support, by Warren Krewenki.
### Aider v0.74.1
- Have o1 & o3-mini generate markdown by sending the magic "Formatting re-enabled." string.
- Bugfix for multi-line inputs, which should not include the ". " continuation prompt.
### Aider v0.74.0
- Dynamically changes the Ollama context window to hold the current chat.
- Better support for o3-mini, DeepSeek V3 & R1, o1-mini, o1 especially via third-party API providers.
- Remove `<think>` tags from R1 responses for commit messages (and other weak model uses).
- Can now specify `use_temperature: <float>` in model settings, not just true/false.
- The full docker container now includes `boto3` for Bedrock.
- Docker containers now set `HOME=/app` which is the normal project mount-point, to persist `~/.aider`.
- Bugfix to prevent creating incorrect filenames like `python`, `php`, etc.
- Bugfix for `--timeout`
- Bugfix so that `/model` now correctly reports that the weak model is not changed.
- Bugfix so that multi-line mode persists through ^C at confirmation prompts.
- Watch files now fully ignores top-level directories named in ignore files, to reduce the chance of hitting OS watch limits. Helpful to ignore giant subtrees like `node_modules`.
- Fast startup with more providers and when model metadata provided in local files.
- Improved .gitignore handling:
- Honor ignores already in effect regardless of how they've been configured.
- Check for .env only when the file exists.
- Yes/No prompts now accept All/Skip as alias for Y/N even when not processing a group of confirmations.
- Aider wrote 77% of the code in this release.
### Aider v0.73.0
- Full support for o3-mini: `aider --model o3-mini`
- New `--reasoning-effort` argument: low, medium, high.
- Improved handling of context window size limits, with better messaging and Ollama-specific guidance.
- Added support for removing model-specific reasoning tags from responses with `remove_reasoning: tagname` model setting.
- Auto-create parent directories when creating new files, by xqyz.
- Support for R1 free on OpenRouter: `--model openrouter/deepseek/deepseek-r1:free`
- Aider wrote 69% of the code in this release.
### Aider v0.72.3
- Enforce user/assistant turn order to avoid R1 errors, by miradnanali.
- Case-insensitive model name matching while preserving original case.
### Aider v0.72.2
- Harden against user/assistant turn order problems which cause R1 errors.
### Aider v0.72.1
- Fix model metadata for `openrouter/deepseek/deepseek-r1`
### Aider v0.72.0
- Support for DeepSeek R1.
- Use shortcut: `--model r1`
- Also via OpenRouter: `--model openrouter/deepseek/deepseek-r1`
- Added Kotlin syntax support to repo map, by Paul Walker.
- Added `--line-endings` for file writing, by Titusz Pan.
- Added examples_as_sys_msg=True for GPT-4o models, improves benchmark scores.
- Bumped all dependencies, to pick up litellm support for o1 system messages.
- Bugfix for turn taking when reflecting lint/test errors.
- Aider wrote 52% of the code in this release.
### Aider v0.71.1
- Fix permissions issue in Docker images.
- Added read-only file announcements.
- Bugfix: ASCII fallback for unicode errors.
- Bugfix: integer indices for list slicing in repomap calculations.
### Aider v0.71.0
- Prompts to help DeepSeek work better when alternating between `/ask` and `/code`.
- Streaming pretty LLM responses is smoother and faster for long replies.
- Streaming automatically turns of for model that don't support it
- Can now switch to/from `/model o1` and a streaming model
- Pretty output remains enabled even when editing files with triple-backtick fences
- Bare `/ask`, `/code` and `/architect` commands now switch the chat mode.
- Increased default size of the repomap.
- Increased max chat history tokens limit from 4k to 8k.
- Turn off fancy input and watch files if terminal is dumb.
- Added support for custom voice format and input device settings.
- Disabled Streamlit email prompt, by apaz-cli.
- Docker container runs as non-root user.
- Fixed lint command handling of nested spaced strings, by Aaron Weisberg.
- Added token count feedback when adding command output to chat.
- Improved error handling for large audio files with automatic format conversion.
- Improved handling of git repo index errors, by Krazer.
- Improved unicode handling in console output with ASCII fallback.
- Added AssertionError, AttributeError to git error handling.
- Aider wrote 60% of the code in this release.
### Aider v0.70.0
- Full support for o1 models.
- Watch files now honors `--subtree-only`, and only watches that subtree.
- Improved prompting for watch files, to work more reliably with more models.
- New install methods via uv, including one-liners.
- Support for openrouter/deepseek/deepseek-chat model.
- Better error handling when interactive commands are attempted via `/load` or `--load`.
- Display read-only files with abs path if its shorter than rel path.
- Ask 10% of users to opt-in to analytics.
- Bugfix for auto-suggest.
- Gracefully handle unicode errors in git path names.
- Aider wrote 74% of the code in this release.
### Aider v0.69.1
- Fix for gemini model names in model metadata.
- Show hints about AI! and AI? when user makes AI comments.
- Support for running without git installed.
- Improved environment variable setup messages on Windows.
### Aider v0.69.0
- [Watch files](https://aider.chat/docs/usage/watch.html) improvements:
@@ -14,14 +487,14 @@
- Ask 5% of users if they want to opt-in to analytics.
- `/voice` now lets you edit the transcribed text before sending.
- Disabled auto-complete in Y/N prompts.
- Aider wrote 60% of the code in this release.
- Aider wrote 68% of the code in this release.
### Aider v0.68.0
- [Aider works with LLM web chat UIs](https://aider.chat/docs/usage/copypaste.html).
- New `--copy-paste` mode.
- New `/copy-context` command.
- [Set API keys and other environment variables for all providers from command line or yaml conf file](https://aider.chat/docs/config/aider_conf.html#storing-llm-keys).
- [Set API keys and other environment variables for all providers from command line or YAML conf file](https://aider.chat/docs/config/aider_conf.html#storing-llm-keys).
- New `--api-key provider=key` setting.
- New `--set-env VAR=value` setting.
- Added bash and zsh support to `--watch-files`.
@@ -189,7 +662,7 @@
### Aider v0.59.1
- Check for obsolete `yes: true` in yaml config, show helpful error.
- Check for obsolete `yes: true` in YAML config, show helpful error.
- Model settings for openrouter/anthropic/claude-3.5-sonnet:beta
### Aider v0.59.0
@@ -199,7 +672,7 @@
- Still auto-completes the full paths of the repo files like `/add`.
- Now supports globs like `src/**/*.py`
- Renamed `--yes` to `--yes-always`.
- Now uses `AIDER_YES_ALWAYS` env var and `yes-always:` yaml key.
- Now uses `AIDER_YES_ALWAYS` env var and `yes-always:` YAML key.
- Existing YAML and .env files will need to be updated.
- Can still abbreviate to `--yes` on the command line.
- Config file now uses standard YAML list syntax with ` - list entries`, one per line.
@@ -406,7 +879,7 @@
- Use `--map-refresh <always|files|manual|auto>` to configure.
- Improved cost estimate logic for caching.
- Improved editing performance on Jupyter Notebook `.ipynb` files.
- Show which config yaml file is loaded with `--verbose`.
- Show which config YAML file is loaded with `--verbose`.
- Bumped dependency versions.
- Bugfix: properly load `.aider.models.metadata.json` data.
- Bugfix: Using `--msg /ask ...` caused an exception.

20
MANIFEST.in Normal file
View File

@@ -0,0 +1,20 @@
# This needs to sync with aider/help_pats.py
global-exclude .DS_Store
recursive-exclude aider/website/examples *
recursive-exclude aider/website/_posts *
exclude aider/website/HISTORY.md
exclude aider/website/docs/benchmarks*.md
exclude aider/website/docs/ctags.md
exclude aider/website/docs/unified-diffs.md
exclude aider/website/install.ps1
exclude aider/website/install.sh
recursive-exclude aider/website/docs/leaderboards *
recursive-exclude aider/website/assets *
recursive-exclude aider/website *.js
recursive-exclude aider/website *.html
recursive-exclude aider/website *.yml

258
README.md
View File

@@ -1,136 +1,180 @@
<p align="center">
<a href="https://aider.chat/"><img src="https://aider.chat/assets/logo.svg" alt="Aider Logo" width="300"></a>
</p>
<!-- Edit README.md, not index.md -->
<h1 align="center">
AI Pair Programming in Your Terminal
</h1>
# Aider is AI pair programming in your terminal
Aider lets you pair program with LLMs,
to edit code in your local git repository.
Start a new project or work with an existing git repo.
Aider works best with GPT-4o & Claude 3.5 Sonnet and can
[connect to almost any LLM](https://aider.chat/docs/llms.html).
<p align="center">
Aider lets you pair program with LLMs to start a new project or build on your existing codebase.
</p>
<!-- SCREENCAST START -->
<p align="center">
<img
src="https://aider.chat/assets/screencast.svg"
alt="aider screencast"
>
</p>
<!-- SCREENCAST END -->
<!-- VIDEO START
<p align="center">
<video style="max-width: 100%; height: auto;" autoplay loop muted playsinline>
<source src="/assets/shell-cmds-small.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</p>
VIDEO END -->
<p align="center">
<a href="https://discord.gg/Tv2uQnR88V">
<img src="https://img.shields.io/badge/Join-Discord-blue.svg"/>
</a>
<a href="https://aider.chat/docs/install.html">
<img src="https://img.shields.io/badge/Read-Docs-green.svg"/>
</a>
</p>
## Getting started
<!--[[[cog
# We can't "include" here.
# Because this page is rendered by GitHub as the repo README
cog.out(open("aider/website/_includes/get-started.md").read())
from scripts.homepage import get_badges_md
text = get_badges_md()
cog.out(text)
]]]-->
You can get started quickly like this:
```bash
python -m pip install -U aider-chat
# Change directory into a git repo
cd /to/your/git/repo
# Work with Claude 3.5 Sonnet on your repo
export ANTHROPIC_API_KEY=your-key-goes-here
aider
# Work with GPT-4o on your repo
export OPENAI_API_KEY=your-key-goes-here
aider
```
<!--[[[end]]]-->
See the
[installation instructions](https://aider.chat/docs/install.html)
and other
[documentation](https://aider.chat/docs/usage.html)
for more details.
<a href="https://github.com/Aider-AI/aider/stargazers"><img alt="GitHub Stars" title="Total number of GitHub stars the Aider project has received"
src="https://img.shields.io/github/stars/Aider-AI/aider?style=flat-square&logo=github&color=f1c40f&labelColor=555555"/></a>
<a href="https://pypi.org/project/aider-chat/"><img alt="PyPI Downloads" title="Total number of installations via pip from PyPI"
src="https://img.shields.io/badge/📦%20Installs-3.0M-2ecc71?style=flat-square&labelColor=555555"/></a>
<img alt="Tokens per week" title="Number of tokens processed weekly by Aider users"
src="https://img.shields.io/badge/📈%20Tokens%2Fweek-15B-3498db?style=flat-square&labelColor=555555"/>
<a href="https://openrouter.ai/#options-menu"><img alt="OpenRouter Ranking" title="Aider's ranking among applications on the OpenRouter platform"
src="https://img.shields.io/badge/🏆%20OpenRouter-Top%2020-9b59b6?style=flat-square&labelColor=555555"/></a>
<a href="https://aider.chat/HISTORY.html"><img alt="Singularity" title="Percentage of the new code in Aider's last release written by Aider itself"
src="https://img.shields.io/badge/🔄%20Singularity-23%25-e74c3c?style=flat-square&labelColor=555555"/></a>
<!--[[[end]]]-->
</p>
## Features
- Run aider with the files you want to edit: `aider <file1> <file2> ...`
- Ask for changes:
- Add new features or test cases.
- Describe a bug.
- Paste in an error message or or GitHub issue URL.
- Refactor code.
- Update docs.
- Aider will edit your files to complete your request.
- Aider [automatically git commits](https://aider.chat/docs/git.html) changes with a sensible commit message.
- Aider works with [most popular languages](https://aider.chat/docs/languages.html): python, javascript, typescript, php, html, css, and more...
- Aider works best with GPT-4o & Claude 3.5 Sonnet and can [connect to almost any LLM](https://aider.chat/docs/llms.html).
- Aider can edit multiple files at once for complex requests.
- Aider uses a [map of your entire git repo](https://aider.chat/docs/repomap.html), which helps it work well in larger codebases.
- Edit files in your editor while chatting with aider,
and it will always use the latest version.
Pair program with AI.
- [Add images to the chat](https://aider.chat/docs/usage/images-urls.html) (GPT-4o, Claude 3.5 Sonnet, etc).
- [Add URLs to the chat](https://aider.chat/docs/usage/images-urls.html) and aider will read their content.
- [Code with your voice](https://aider.chat/docs/usage/voice.html).
### [Cloud and local LLMs](https://aider.chat/docs/llms.html)
<a href="https://aider.chat/docs/llms.html"><img src="https://aider.chat/assets/icons/brain.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Aider works best with Claude 3.7 Sonnet, DeepSeek R1 & Chat V3, OpenAI o1, o3-mini & GPT-4o, but can connect to almost any LLM, including local models.
## Top tier performance
<br>
[Aider has one of the top scores on SWE Bench](https://aider.chat/2024/06/02/main-swe-bench.html).
SWE Bench is a challenging software engineering benchmark where aider
solved *real* GitHub issues from popular open source
projects like django, scikitlearn, matplotlib, etc.
### [Maps your codebase](https://aider.chat/docs/repomap.html)
## More info
<a href="https://aider.chat/docs/repomap.html"><img src="https://aider.chat/assets/icons/map-outline.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Aider makes a map of your entire codebase, which helps it work well in larger projects.
- [Documentation](https://aider.chat/)
- [Installation](https://aider.chat/docs/install.html)
- [Usage](https://aider.chat/docs/usage.html)
- [Tutorial videos](https://aider.chat/docs/usage/tutorials.html)
<br>
### [100+ code languages](https://aider.chat/docs/languages.html)
<a href="https://aider.chat/docs/languages.html"><img src="https://aider.chat/assets/icons/code-tags.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Aider works with most popular programming languages: python, javascript, rust, ruby, go, cpp, php, html, css, and dozens more.
<br>
### [Git integration](https://aider.chat/docs/git.html)
<a href="https://aider.chat/docs/git.html"><img src="https://aider.chat/assets/icons/source-branch.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Aider automatically commits changes with sensible commit messages. Use familiar git tools to easily diff, manage and undo AI changes.
<br>
### [Use in your IDE](https://aider.chat/docs/usage/watch.html)
<a href="https://aider.chat/docs/usage/watch.html"><img src="https://aider.chat/assets/icons/monitor.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Use aider from within your favorite IDE or editor. Ask for changes by adding comments to your code and aider will get to work.
<br>
### [Images & web pages](https://aider.chat/docs/usage/images-urls.html)
<a href="https://aider.chat/docs/usage/images-urls.html"><img src="https://aider.chat/assets/icons/image-multiple.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Add images and web pages to the chat to provide visual context, screenshots, reference docs, etc.
<br>
### [Voice-to-code](https://aider.chat/docs/usage/voice.html)
<a href="https://aider.chat/docs/usage/voice.html"><img src="https://aider.chat/assets/icons/microphone.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Speak with aider about your code! Request new features, test cases or bug fixes using your voice and let aider implement the changes.
<br>
### [Linting & testing](https://aider.chat/docs/usage/lint-test.html)
<a href="https://aider.chat/docs/usage/lint-test.html"><img src="https://aider.chat/assets/icons/check-all.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Automatically lint and test your code every time aider makes changes. Aider can fix problems detected by your linters and test suites.
<br>
### [Copy/paste to web chat](https://aider.chat/docs/usage/copypaste.html)
<a href="https://aider.chat/docs/usage/copypaste.html"><img src="https://aider.chat/assets/icons/content-copy.svg" width="32" height="32" align="left" valign="middle" style="margin-right:10px"></a>
Work with any LLM via its web chat interface. Aider streamlines copy/pasting code context and edits back and forth with a browser.
## Getting Started
```bash
python -m pip install aider-install
aider-install
# Change directory into your codebase
cd /to/your/project
# DeepSeek
aider --model deepseek --api-key deepseek=<key>
# Claude 3.7 Sonnet
aider --model sonnet --api-key anthropic=<key>
# o3-mini
aider --model o3-mini --api-key openai=<key>
```
See the [installation instructions](https://aider.chat/docs/install.html) and [usage documentation](https://aider.chat/docs/usage.html) for more details.
## More Information
### Documentation
- [Installation Guide](https://aider.chat/docs/install.html)
- [Usage Guide](https://aider.chat/docs/usage.html)
- [Tutorial Videos](https://aider.chat/docs/usage/tutorials.html)
- [Connecting to LLMs](https://aider.chat/docs/llms.html)
- [Configuration](https://aider.chat/docs/config.html)
- [Configuration Options](https://aider.chat/docs/config.html)
- [Troubleshooting](https://aider.chat/docs/troubleshooting.html)
- [FAQ](https://aider.chat/docs/faq.html)
### Community & Resources
- [LLM Leaderboards](https://aider.chat/docs/leaderboards/)
- [GitHub](https://github.com/Aider-AI/aider)
- [Discord](https://discord.gg/Tv2uQnR88V)
- [GitHub Repository](https://github.com/Aider-AI/aider)
- [Discord Community](https://discord.gg/Y7X7bhMQFV)
- [Release notes](https://aider.chat/HISTORY.html)
- [Blog](https://aider.chat/blog/)
## Kind Words From Users
## Kind words from users
- *"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)
- *"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 ... 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)
- *"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 ...(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)
- *"Try aider! One of the best ways to vibe code."* — [Chris Wall on X](https://x.com/Chris65536/status/1905053418961391929)
- *"Freaking love Aider."* — [hztar on Hacker News](https://news.ycombinator.com/item?id=44035015)
- *"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 ... 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 on X](https://x.com/yacineMTB/status/1911224442430124387)
- *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 its 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)

View File

@@ -1,6 +1,6 @@
from packaging import version
__version__ = "0.69.1.dev"
__version__ = "0.86.1.dev"
safe_version = __version__
try:

View File

@@ -12,6 +12,46 @@ from aider import __version__
from aider.dump import dump # noqa: F401
from aider.models import model_info_manager
PERCENT = 10
def compute_hex_threshold(percent):
"""Convert percentage to 6-digit hex threshold.
Args:
percent: Percentage threshold (0-100)
Returns:
str: 6-digit hex threshold
"""
return format(int(0xFFFFFF * percent / 100), "06x")
def is_uuid_in_percentage(uuid_str, percent):
"""Check if a UUID string falls within the first X percent of the UUID space.
Args:
uuid_str: UUID string to test
percent: Percentage threshold (0-100)
Returns:
bool: True if UUID falls within the first X percent
"""
if not (0 <= percent <= 100):
raise ValueError("Percentage must be between 0 and 100")
if not uuid_str:
return False
# Convert percentage to hex threshold (1% = "04...", 10% = "1a...", etc)
# Using first 6 hex digits
if percent == 0:
return False
threshold = compute_hex_threshold(percent)
return uuid_str[:6] <= threshold
mixpanel_project_token = "6da9a43058a5d1b9f3353153921fb04d"
posthog_project_api_key = "phc_99T7muzafUMMZX15H8XePbMSreEUzahHbtWjy3l5Qbv"
posthog_host = "https://us.i.posthog.com"
@@ -30,9 +70,17 @@ class Analytics:
# ephemeral
logfile = None
def __init__(self, logfile=None, permanently_disable=False):
def __init__(
self,
logfile=None,
permanently_disable=False,
posthog_host=None,
posthog_project_api_key=None,
):
self.logfile = logfile
self.get_or_create_uuid()
self.custom_posthog_host = posthog_host
self.custom_posthog_project_api_key = posthog_project_api_key
if self.permanently_disable or permanently_disable or not self.asked_opt_in:
self.disable(permanently_disable)
@@ -52,8 +100,8 @@ class Analytics:
# self.mp = Mixpanel(mixpanel_project_token)
self.ph = Posthog(
project_api_key=posthog_project_api_key,
host=posthog_host,
project_api_key=self.custom_posthog_project_api_key or posthog_project_api_key,
host=self.custom_posthog_host or posthog_host,
on_error=self.posthog_error,
enable_exception_autocapture=True,
super_properties=self.get_system_info(), # Add system info to all events
@@ -84,31 +132,7 @@ class Analytics:
if not self.user_id:
return False
PERCENT = 5
return self.is_uuid_in_percentage(self.user_id, PERCENT)
def is_uuid_in_percentage(self, uuid_str, percent):
"""Check if a UUID string falls within the first X percent of the UUID space.
Args:
uuid_str: UUID string to test
percent: Percentage threshold (0-100)
Returns:
bool: True if UUID falls within the first X percent
"""
if not (0 <= percent <= 100):
raise ValueError("Percentage must be between 0 and 100")
if not uuid_str:
return False
# Convert percentage to hex threshold (1% = "04...", 10% = "1a...", etc)
# Using first 6 hex digits
if percent == 0:
return False
threshold = format(int(0xFFFFFF * percent / 100), "06x")
return uuid_str[:6] <= threshold
return is_uuid_in_percentage(self.user_id, PERCENT)
def get_data_file_path(self):
try:
@@ -213,7 +237,7 @@ class Analytics:
self.mp = None # Disable mixpanel on connection errors
if self.ph:
self.ph.capture(self.user_id, event_name, dict(properties))
self.ph.capture(event_name, distinct_id=self.user_id, properties=dict(properties))
if self.logfile:
log_entry = {
@@ -228,3 +252,7 @@ class Analytics:
f.write("\n")
except OSError:
pass # Ignore OS errors when writing to logfile
if __name__ == "__main__":
dump(compute_hex_threshold(PERCENT))

View File

@@ -3,8 +3,10 @@
import argparse
import os
import sys
from pathlib import Path
import configargparse
import shtab
from aider import __version__
from aider.args_formatter import (
@@ -12,10 +14,20 @@ from aider.args_formatter import (
MarkdownHelpFormatter,
YamlHelpFormatter,
)
from aider.deprecated import add_deprecated_model_args
from .dump import dump # noqa: F401
def resolve_aiderignore_path(path_str, git_root=None):
path = Path(path_str)
if path.is_absolute():
return str(path)
elif git_root:
return str(Path(git_root) / path)
return str(path)
def default_env_file(git_root):
return os.path.join(git_root, ".env") if git_root else ".env"
@@ -28,108 +40,28 @@ def get_parser(default_config_files, git_root):
config_file_parser_class=configargparse.YAMLConfigFileParser,
auto_env_var_prefix="AIDER_",
)
# List of valid edit formats for argparse validation & shtab completion.
# Dynamically gather them from the registered coder classes so the list
# stays in sync if new formats are added.
from aider import coders as _aider_coders
edit_format_choices = sorted(
{
c.edit_format
for c in _aider_coders.__all__
if hasattr(c, "edit_format") and c.edit_format is not None
}
)
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",
default=None,
help="Specify the model to use for the main chat",
)
opus_model = "claude-3-opus-20240229"
group.add_argument(
"--opus",
action="store_const",
dest="model",
const=opus_model,
help=f"Use {opus_model} model for the main chat",
)
sonnet_model = "claude-3-5-sonnet-20241022"
group.add_argument(
"--sonnet",
action="store_const",
dest="model",
const=sonnet_model,
help=f"Use {sonnet_model} model for the main chat",
)
haiku_model = "claude-3-5-haiku-20241022"
group.add_argument(
"--haiku",
action="store_const",
dest="model",
const=haiku_model,
help=f"Use {haiku_model} model for the main chat",
)
gpt_4_model = "gpt-4-0613"
group.add_argument(
"--4",
"-4",
action="store_const",
dest="model",
const=gpt_4_model,
help=f"Use {gpt_4_model} model for the main chat",
)
gpt_4o_model = "gpt-4o"
group.add_argument(
"--4o",
action="store_const",
dest="model",
const=gpt_4o_model,
help=f"Use {gpt_4o_model} model for the main chat",
)
gpt_4o_mini_model = "gpt-4o-mini"
group.add_argument(
"--mini",
action="store_const",
dest="model",
const=gpt_4o_mini_model,
help=f"Use {gpt_4o_mini_model} model for the main chat",
)
gpt_4_turbo_model = "gpt-4-1106-preview"
group.add_argument(
"--4-turbo",
action="store_const",
dest="model",
const=gpt_4_turbo_model,
help=f"Use {gpt_4_turbo_model} model for the main chat",
)
gpt_3_model_name = "gpt-3.5-turbo"
group.add_argument(
"--35turbo",
"--35-turbo",
"--3",
"-3",
action="store_const",
dest="model",
const=gpt_3_model_name,
help=f"Use {gpt_3_model_name} model for the main chat",
)
deepseek_model = "deepseek/deepseek-coder"
group.add_argument(
"--deepseek",
action="store_const",
dest="model",
const=deepseek_model,
help=f"Use {deepseek_model} model for the main chat",
)
o1_mini_model = "o1-mini"
group.add_argument(
"--o1-mini",
action="store_const",
dest="model",
const=o1_mini_model,
help=f"Use {o1_mini_model} model for the main chat",
)
o1_preview_model = "o1-preview"
group.add_argument(
"--o1-preview",
action="store_const",
dest="model",
const=o1_preview_model,
help=f"Use {o1_preview_model} model for the main chat",
)
##########
group = parser.add_argument_group("API Keys and settings")
@@ -190,19 +122,32 @@ 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",
metavar="ALIAS:MODEL",
help="Add a model alias (can be used multiple times)",
)
group.add_argument(
"--reasoning-effort",
type=str,
help="Set the reasoning_effort API parameter (default: not set)",
)
group.add_argument(
"--thinking-tokens",
type=str,
help=(
"Set the thinking token budget for models that support it. Use 0 to disable. (default:"
" not set)"
),
)
group.add_argument(
"--verify-ssl",
action=argparse.BooleanOptionalAction,
@@ -211,7 +156,7 @@ def get_parser(default_config_files, git_root):
)
group.add_argument(
"--timeout",
type=int,
type=float,
default=None,
help="Timeout in seconds for API calls (default: None)",
)
@@ -219,6 +164,7 @@ def get_parser(default_config_files, git_root):
"--edit-format",
"--chat-mode",
metavar="EDIT_FORMAT",
choices=edit_format_choices,
default=None,
help="Specify what edit format the LLM should use (default depends on model)",
)
@@ -229,6 +175,12 @@ def get_parser(default_config_files, git_root):
const="architect",
help="Use architect edit format for the main chat",
)
group.add_argument(
"--auto-accept-architect",
action=argparse.BooleanOptionalAction,
default=True,
help="Enable/disable automatic acceptance of architect changes (default: True)",
)
group.add_argument(
"--weak-model",
metavar="WEAK_MODEL",
@@ -247,6 +199,7 @@ def get_parser(default_config_files, git_root):
group.add_argument(
"--editor-edit-format",
metavar="EDITOR_EDIT_FORMAT",
choices=edit_format_choices,
default=None,
help="Specify the edit format for the editor model (default: depends on editor model)",
)
@@ -256,6 +209,14 @@ def get_parser(default_config_files, git_root):
default=True,
help="Only work with models that have meta-data available (default: True)",
)
group.add_argument(
"--check-model-accepts-settings",
action=argparse.BooleanOptionalAction,
default=True,
help=(
"Check if model accepts settings like reasoning_effort/thinking_tokens (default: True)"
),
)
group.add_argument(
"--max-chat-history-tokens",
type=int,
@@ -287,7 +248,7 @@ def get_parser(default_config_files, git_root):
"--map-tokens",
type=int,
default=None,
help="Suggested number of tokens to use for repo map, use 0 to disable (default: 1024)",
help="Suggested number of tokens to use for repo map, use 0 to disable",
)
group.add_argument(
"--map-refresh",
@@ -318,13 +279,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,
@@ -336,7 +297,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")
@@ -427,7 +388,8 @@ def get_parser(default_config_files, git_root):
default="default",
help=(
"Set the markdown code theme (default: default, other options include monokai,"
" solarized-dark, solarized-light)"
" solarized-dark, solarized-light, or a Pygments builtin style,"
" see https://pygments.org/styles for available themes)"
),
)
group.add_argument(
@@ -451,15 +413,23 @@ def get_parser(default_config_files, git_root):
default=True,
help="Enable/disable adding .aider* to .gitignore (default: True)",
)
group.add_argument(
"--add-gitignore-files",
action=argparse.BooleanOptionalAction,
default=False,
help="Enable/disable the addition of files listed in .gitignore to Aider's editing scope.",
)
default_aiderignore_file = (
os.path.join(git_root, ".aiderignore") if git_root else ".aiderignore"
)
group.add_argument(
"--aiderignore",
metavar="AIDERIGNORE",
type=lambda path_str: resolve_aiderignore_path(path_str, git_root),
default=default_aiderignore_file,
help="Specify the aider ignore file (default: .aiderignore in git root)",
)
).complete = shtab.FILE
group.add_argument(
"--subtree-only",
action="store_true",
@@ -481,14 +451,20 @@ def get_parser(default_config_files, git_root):
group.add_argument(
"--attribute-author",
action=argparse.BooleanOptionalAction,
default=True,
help="Attribute aider code changes in the git author name (default: True)",
default=None,
help=(
"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",
@@ -502,6 +478,22 @@ 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=True,
help=(
"Attribute aider edits using the Co-authored-by trailer in the commit message"
" (default: True). 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",
action=argparse.BooleanOptionalAction,
default=False,
help="Enable/disable git pre-commit hooks with --no-verify (default: False)",
)
group.add_argument(
"--commit",
action="store_true",
@@ -583,13 +575,23 @@ 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",
help="Permanently disable analytics",
default=False,
)
group.add_argument(
"--analytics-posthog-host",
metavar="ANALYTICS_POSTHOG_HOST",
help="Send analytics to custom PostHog instance",
)
group.add_argument(
"--analytics-posthog-project-api-key",
metavar="ANALYTICS_POSTHOG_PROJECT_API_KEY",
help="Send analytics to custom PostHog project",
)
#########
group = parser.add_argument_group("Upgrading")
@@ -650,7 +652,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",
@@ -668,7 +670,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",
@@ -718,18 +720,24 @@ 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",
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",
@@ -742,6 +750,12 @@ def get_parser(default_config_files, git_root):
default=None,
help="Specify the language to use in the chat (default: None, uses system settings)",
)
group.add_argument(
"--commit-language",
metavar="COMMIT_LANGUAGE",
default=None,
help="Specify the language to use in the commit message (default: None, user language)",
)
group.add_argument(
"--yes-always",
action="store_true",
@@ -759,12 +773,18 @@ 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",
help="Specify the encoding for input and output (default: utf-8)",
)
group.add_argument(
"--line-endings",
choices=["platform", "lf", "crlf"],
default="platform",
help="Line endings to use when writing files (default: platform)",
)
group.add_argument(
"-c",
"--config",
@@ -774,7 +794,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(
@@ -782,7 +802,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,
@@ -801,6 +821,24 @@ def get_parser(default_config_files, git_root):
default=False,
help="Enable/disable multi-line input mode with Meta-Enter to submit (default: False)",
)
group.add_argument(
"--notifications",
action=argparse.BooleanOptionalAction,
default=False,
help=(
"Enable/disable terminal bell notifications when LLM responses are ready (default:"
" False)"
),
)
group.add_argument(
"--notifications-command",
metavar="COMMAND",
default=None,
help=(
"Specify a command to run for notifications instead of the terminal bell. If not"
" specified, a default command for your OS may be used."
),
)
group.add_argument(
"--detect-urls",
action=argparse.BooleanOptionalAction,
@@ -812,6 +850,22 @@ 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
add_deprecated_model_args(parser, group)
return parser
@@ -855,13 +909,34 @@ 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)
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 <shell_name>", 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())

View File

@@ -96,7 +96,7 @@ class YamlHelpFormatter(argparse.HelpFormatter):
# Place in your home dir, or at the root of your git repo.
##########################################################
# Note: You can only put OpenAI and Anthropic API keys in the yaml
# Note: You can only put OpenAI and Anthropic API keys in the YAML
# config file. Keys for all APIs can be stored in a .env file
# https://aider.chat/docs/config/dotenv.html
@@ -143,16 +143,22 @@ class YamlHelpFormatter(argparse.HelpFormatter):
default = "true"
if default:
parts.append(f"#{switch}: {default}\n")
if "#" in default:
parts.append(f'#{switch}: "{default}"\n')
else:
parts.append(f"#{switch}: {default}\n")
elif action.nargs in ("*", "+") or isinstance(action, argparse._AppendAction):
parts.append(f"#{switch}: xxx")
parts.append("## Specify multiple values like this:")
parts.append(f"#{switch}:")
parts.append(f"# - xxx")
parts.append(f"# - yyy")
parts.append(f"# - zzz")
parts.append("# - xxx")
parts.append("# - yyy")
parts.append("# - zzz")
else:
parts.append(f"#{switch}: xxx\n")
if switch.endswith("color"):
parts.append(f'#{switch}: "xxx"\n')
else:
parts.append(f"#{switch}: xxx\n")
###
# parts.append(str(action))

View File

@@ -1,12 +1,16 @@
from .architect_coder import ArchitectCoder
from .ask_coder import AskCoder
from .base_coder import Coder
from .context_coder import ContextCoder
from .editblock_coder import EditBlockCoder
from .editblock_fenced_coder import EditBlockFencedCoder
from .editor_diff_fenced_coder import EditorDiffFencedCoder
from .editor_editblock_coder import EditorEditBlockCoder
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
@@ -18,9 +22,13 @@ __all__ = [
EditBlockCoder,
EditBlockFencedCoder,
WholeFileCoder,
PatchCoder,
UnifiedDiffCoder,
UnifiedDiffSimpleCoder,
# SingleWholeFileFunctionCoder,
ArchitectCoder,
EditorEditBlockCoder,
EditorWholeFileCoder,
EditorDiffFencedCoder,
ContextCoder,
]

View File

@@ -6,6 +6,7 @@ from .base_coder import Coder
class ArchitectCoder(AskCoder):
edit_format = "architect"
gpt_prompts = ArchitectPrompts()
auto_accept_architect = False
def reply_completed(self):
content = self.partial_response_content
@@ -13,7 +14,7 @@ class ArchitectCoder(AskCoder):
if not content or not content.strip():
return
if not self.io.confirm_ask("Edit the files?"):
if not self.auto_accept_architect and not self.io.confirm_ask("Edit the files?"):
return
kwargs = dict()

View File

@@ -7,6 +7,8 @@ class AskPrompts(CoderPrompts):
main_system = """Act as an expert code analyst.
Answer questions about the supplied code.
Always reply to the user in {language}.
If you need to describe code changes, do so *briefly*.
"""
example_messages = []
@@ -30,4 +32,4 @@ Here are summaries of some files present in my git repo.
If you need to see the full contents of any files to answer my questions, ask me to *add them to the chat*.
"""
system_reminder = ""
system_reminder = "{final_reminders}"

File diff suppressed because it is too large Load Diff

View File

@@ -12,6 +12,11 @@ class CoderPrompts:
lazy_prompt = """You are diligent and tireless!
You NEVER leave comments describing code without implementing it!
You always COMPLETELY IMPLEMENT the needed code!
"""
overeager_prompt = """Pay careful attention to the scope of the user's request.
Do what they ask, but no more.
Do not improve, comment, fix or modify unrelated parts of the code in any way!
"""
example_messages = []
@@ -50,3 +55,6 @@ Do not edit these files!
shell_cmd_reminder = ""
no_shell_cmd_prompt = ""
no_shell_cmd_reminder = ""
rename_with_shell = ""
go_ahead_tip = ""

View File

@@ -0,0 +1,53 @@
from .base_coder import Coder
from .context_prompts import ContextPrompts
class ContextCoder(Coder):
"""Identify which files need to be edited for a given request."""
edit_format = "context"
gpt_prompts = ContextPrompts()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if not self.repo_map:
return
self.repo_map.refresh = "always"
self.repo_map.max_map_tokens *= self.repo_map.map_mul_no_files
self.repo_map.map_mul_no_files = 1.0
def reply_completed(self):
content = self.partial_response_content
if not content or not content.strip():
return True
# dump(repr(content))
current_rel_fnames = set(self.get_inchat_relative_files())
mentioned_rel_fnames = set(self.get_file_mentions(content, ignore_current=True))
# dump(current_rel_fnames)
# dump(mentioned_rel_fnames)
# dump(current_rel_fnames == mentioned_rel_fnames)
if mentioned_rel_fnames == current_rel_fnames:
return True
if self.num_reflections >= self.max_reflections - 1:
return True
self.abs_fnames = set()
for fname in mentioned_rel_fnames:
self.add_rel_fname(fname)
# dump(self.get_inchat_relative_files())
self.reflected_message = self.gpt_prompts.try_again
# mentioned_idents = self.get_ident_mentions(cur_msg_text)
# if mentioned_idents:
return True
def check_for_file_mentions(self, content):
pass

View File

@@ -0,0 +1,75 @@
# flake8: noqa: E501
from .base_prompts import CoderPrompts
class ContextPrompts(CoderPrompts):
main_system = """Act as an expert code analyst.
Understand the user's question or request, solely to determine ALL the existing sources files which will need to be modified.
Return the *complete* list of files which will need to be modified based on the user's request.
Explain why each file is needed, including names of key classes/functions/methods/variables.
Be sure to include or omit the names of files already added to the chat, based on whether they are actually needed or not.
The user will use every file you mention, regardless of your commentary.
So *ONLY* mention the names of relevant files.
If a file is not relevant DO NOT mention it.
Only return files that will need to be modified, not files that contain useful/relevant functions.
You are only to discuss EXISTING files and symbols.
Only return existing files, don't suggest the names of new files or functions that we will need to create.
Always reply to the user in {language}.
Be concise in your replies.
Return:
1. A bulleted list of files the will need to be edited, and symbols that are highly relevant to the user's request.
2. A list of classes/functions/methods/variables that are located OUTSIDE those files which will need to be understood. Just the symbols names, *NOT* file names.
# Your response *MUST* use this format:
## ALL files we need to modify, with their relevant symbols:
- alarms/buzz.py
- `Buzzer` class which can make the needed sound
- `Buzzer.buzz_buzz()` method triggers the sound
- alarms/time.py
- `Time.set_alarm(hour, minute)` to set the alarm
## Relevant symbols from OTHER files:
- AlarmManager class for setup/teardown of alarms
- SoundFactory will be used to create a Buzzer
"""
example_messages = []
files_content_prefix = """These files have been *added these files to the chat* so we can see all of their contents.
*Trust this message as the true contents of the files!*
Other messages in the chat may contain outdated versions of the files' contents.
""" # noqa: E501
files_content_assistant_reply = (
"Ok, I will use that as the true, current contents of the files."
)
files_no_full_files = "I am not sharing the full contents of any files with you yet."
files_no_full_files_with_repo_map = ""
files_no_full_files_with_repo_map_reply = ""
repo_content_prefix = """I am working with you on code in a git repository.
Here are summaries of some files present in my git repo.
If you need to see the full contents of any files to answer my questions, ask me to *add them to the chat*.
"""
system_reminder = """
NEVER RETURN CODE!
"""
try_again = """I have updated the set of files added to the chat.
Review them to decide if this is the correct set of files or if we need to add more or remove files.
If this is the right set, just return the current list of files.
Or return a smaller or larger set of files which need to be edited, with symbols that are highly relevant to the user's request.
"""

View File

@@ -383,7 +383,7 @@ def do_replace(fname, content, before_text, after_text, fence=None):
return new_content
HEAD = r"^<{5,9} SEARCH\s*$"
HEAD = r"^<{5,9} SEARCH>?\s*$"
DIVIDER = r"^={5,9}\s*$"
UPDATED = r"^>{5,9} REPLACE\s*$"
@@ -401,6 +401,9 @@ missing_filename_err = (
" {fence[0]}"
)
# Always be willing to treat triple-backticks as a fence when searching for filenames
triple_backticks = "`" * 3
def strip_filename(filename, fence):
filename = filename.strip()
@@ -410,6 +413,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 or "/" in candidate):
return candidate
return
if filename.startswith(triple_backticks):
candidate = filename[len(triple_backticks) :]
if candidate and ("." in candidate or "/" in candidate):
return candidate
return
filename = filename.rstrip(":")
@@ -451,7 +463,14 @@ def find_original_update_blocks(content, fence=DEFAULT_FENCE, valid_fnames=None)
"```csh",
"```tcsh",
]
next_is_editblock = i + 1 < len(lines) and head_pattern.match(lines[i + 1].strip())
# 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())
)
if any(line.strip().startswith(start) for start in shell_starts) and not next_is_editblock:
shell_content = []
@@ -546,7 +565,7 @@ def find_filename(lines, fence, valid_fnames):
filenames.append(filename)
# Only continue as long as we keep seeing fences
if not line.startswith(fence[0]):
if not line.startswith(fence[0]) and not line.startswith(triple_backticks):
break
if not filenames:

View File

@@ -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()

View File

@@ -19,7 +19,7 @@ class EditBlockFencedPrompts(EditBlockPrompts):
Here are the *SEARCH/REPLACE* blocks:
{fence[0]}
{fence[0]}python
mathweb/flask/app.py
<<<<<<< SEARCH
from flask import Flask
@@ -29,7 +29,7 @@ from flask import Flask
>>>>>>> REPLACE
{fence[1]}
{fence[0]}
{fence[0]}python
mathweb/flask/app.py
<<<<<<< SEARCH
def factorial(n):
@@ -44,7 +44,7 @@ def factorial(n):
>>>>>>> REPLACE
{fence[1]}
{fence[0]}
{fence[0]}python
mathweb/flask/app.py
<<<<<<< SEARCH
return str(factorial(n))
@@ -68,7 +68,7 @@ mathweb/flask/app.py
Here are the *SEARCH/REPLACE* blocks:
{fence[0]}
{fence[0]}python
hello.py
<<<<<<< SEARCH
=======
@@ -79,7 +79,7 @@ def hello():
>>>>>>> REPLACE
{fence[1]}
{fence[0]}
{fence[0]}python
main.py
<<<<<<< SEARCH
def hello():
@@ -93,3 +93,51 @@ from hello import hello
""",
),
]
system_reminder = """
# *SEARCH/REPLACE block* Rules:
Every *SEARCH/REPLACE block* must use this format:
1. The opening fence and code language, eg: {fence[0]}python
2. The *FULL* file path alone on a line, verbatim. No bold asterisks, no quotes around it, no escaping of characters, etc.
3. The start of search block: <<<<<<< SEARCH
4. A contiguous chunk of lines to search for in the existing source code
5. The dividing line: =======
6. The lines to replace into the source code
7. The end of the replace block: >>>>>>> REPLACE
8. The closing fence: {fence[1]}
Use the *FULL* file path, as shown to you by the user.
{quad_backtick_reminder}
Every *SEARCH* section must *EXACTLY MATCH* the existing file content, character for character, including all comments, docstrings, etc.
If the file contains code or other data wrapped/escaped in json/xml/quotes or other containers, you need to propose edits to the literal contents of the file, including the container markup.
*SEARCH/REPLACE* blocks will *only* replace the first match occurrence.
Including multiple unique *SEARCH/REPLACE* blocks if needed.
Include enough lines in each SEARCH section to uniquely match each set of lines that need to change.
Keep *SEARCH/REPLACE* blocks concise.
Break large *SEARCH/REPLACE* blocks into a series of smaller blocks that each change a small portion of the file.
Include just the changing lines, and a few surrounding lines if needed for uniqueness.
Do not include long runs of unchanging lines in *SEARCH/REPLACE* blocks.
Only create *SEARCH/REPLACE* blocks for files that the user has added to the chat!
To move code within a file, use 2 *SEARCH/REPLACE* blocks: 1 to delete it from its current location, 1 to insert it in the new location.
Pay attention to which filenames the user wants you to edit, especially if they are asking you to create a new file.
If you want to put code in a new file, use a *SEARCH/REPLACE block* with:
- A new file path, including dir name if needed
- An empty `SEARCH` section
- The new file's contents in the `REPLACE` section
To rename files which have been added to the chat, use shell commands at the end of your response.
If the user just says something like "ok" or "go ahead" or "do that" they probably want you to make SEARCH/REPLACE blocks for the code changes you just proposed.
The user will say when they've applied your edits. If they haven't explicitly confirmed the edits have been applied, they probably want proper SEARCH/REPLACE blocks.
{final_reminders}
ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*!
{shell_cmd_reminder}
"""

View File

@@ -1,5 +1,6 @@
# flake8: noqa: E501
from . import shell
from .base_prompts import CoderPrompts
@@ -7,7 +8,7 @@ class EditBlockPrompts(CoderPrompts):
main_system = """Act as an expert software developer.
Always use best practices when coding.
Respect and use existing conventions, libraries, etc that are already present in the code base.
{lazy_prompt}
{final_reminders}
Take requests for changes to the supplied code.
If the request is ambiguous, ask questions.
@@ -28,32 +29,6 @@ You can keep asking if you then decide you need to edit more files.
All changes to files must use this *SEARCH/REPLACE block* format.
ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*!
{shell_cmd_prompt}
"""
shell_cmd_prompt = """
4. *Concisely* suggest any shell commands the user might want to run in ```bash blocks.
Just suggest shell commands this way, not example code.
Only suggest complete shell commands that are ready to execute, without placeholders.
Only suggest at most a few shell commands at a time, not more than 1-3, one per line.
Do not suggest multi-line shell commands.
All shell commands will run from the root directory of the user's project.
Use the appropriate shell based on the user's system info:
{platform}
Examples of when to suggest shell commands:
- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content.
- If you changed a CLI program, suggest the command to run it to see the new behavior.
- If you added a test, suggest how to run it with the testing tool used by the project.
- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations.
- If your code changes add new dependencies, suggest the command to install them.
- Etc.
"""
no_shell_cmd_prompt = """
Keep in mind these details about the user's platform and environment:
{platform}
"""
example_messages = [
dict(
@@ -157,7 +132,7 @@ Every *SEARCH/REPLACE block* must use this format:
8. The closing fence: {fence[1]}
Use the *FULL* file path, as shown to you by the user.
{quad_backtick_reminder}
Every *SEARCH* section must *EXACTLY MATCH* the existing file content, character for character, including all comments, docstrings, etc.
If the file contains code or other data wrapped/escaped in json/xml/quotes or other containers, you need to propose edits to the literal contents of the file, including the container markup.
@@ -181,20 +156,19 @@ If you want to put code in a new file, use a *SEARCH/REPLACE block* with:
- An empty `SEARCH` section
- The new file's contents in the `REPLACE` section
To rename files which have been added to the chat, use shell commands at the end of your response.
{lazy_prompt}
ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*!
{rename_with_shell}{go_ahead_tip}{final_reminders}ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*!
{shell_cmd_reminder}
"""
shell_cmd_reminder = """
Examples of when to suggest shell commands:
rename_with_shell = """To rename files which have been added to the chat, use shell commands at the end of your response.
- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content.
- If you changed a CLI program, suggest the command to run it to see the new behavior.
- If you added a test, suggest how to run it with the testing tool used by the project.
- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations.
- If your code changes add new dependencies, suggest the command to install them.
- Etc.
"""
go_ahead_tip = """If the user just says something like "ok" or "go ahead" or "do that" they probably want you to make SEARCH/REPLACE blocks for the code changes you just proposed.
The user will say when they've applied your edits. If they haven't explicitly confirmed the edits have been applied, they probably want proper SEARCH/REPLACE blocks.
"""
shell_cmd_prompt = shell.shell_cmd_prompt
no_shell_cmd_prompt = shell.no_shell_cmd_prompt
shell_cmd_reminder = shell.shell_cmd_reminder

View File

@@ -0,0 +1,9 @@
from .editblock_fenced_coder import EditBlockFencedCoder
from .editor_diff_fenced_prompts import EditorDiffFencedPrompts
class EditorDiffFencedCoder(EditBlockFencedCoder):
"A coder that uses search/replace blocks, focused purely on editing files."
edit_format = "editor-diff-fenced"
gpt_prompts = EditorDiffFencedPrompts()

View File

@@ -0,0 +1,11 @@
# flake8: noqa: E501
from .editblock_fenced_prompts import EditBlockFencedPrompts
class EditorDiffFencedPrompts(EditBlockFencedPrompts):
shell_cmd_prompt = ""
no_shell_cmd_prompt = ""
shell_cmd_reminder = ""
go_ahead_tip = ""
rename_with_shell = ""

View File

@@ -5,7 +5,7 @@ from .editblock_prompts import EditBlockPrompts
class EditorEditBlockPrompts(EditBlockPrompts):
main_system = """Act as an expert software developer who edits source code.
{lazy_prompt}
{final_reminders}
Describe each change with a *SEARCH/REPLACE block* per the examples below.
All changes to files must use this *SEARCH/REPLACE block* format.
ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*!
@@ -14,3 +14,5 @@ ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*!
shell_cmd_prompt = ""
no_shell_cmd_prompt = ""
shell_cmd_reminder = ""
go_ahead_tip = ""
rename_with_shell = ""

View File

@@ -5,6 +5,6 @@ from .wholefile_prompts import WholeFilePrompts
class EditorWholeFilePrompts(WholeFilePrompts):
main_system = """Act as an expert software developer and make changes to source code.
{lazy_prompt}
{final_reminders}
Output a copy of each file that needs changes.
"""

View File

@@ -5,6 +5,7 @@ from .help_prompts import HelpPrompts
class HelpCoder(Coder):
"""Interactive help and documentation about aider."""
edit_format = "help"
gpt_prompts = HelpPrompts()

706
aider/coders/patch_coder.py Normal file
View File

@@ -0,0 +1,706 @@
import pathlib
from dataclasses import dataclass, field
from enum import Enum
from typing import Dict, List, Optional, Tuple
from .base_coder import Coder
from .patch_prompts import PatchPrompts
# --------------------------------------------------------------------------- #
# Domain objects & Exceptions (Adapted from apply_patch.py)
# --------------------------------------------------------------------------- #
class DiffError(ValueError):
"""Any problem detected while parsing or applying a patch."""
class ActionType(str, Enum):
ADD = "Add"
DELETE = "Delete"
UPDATE = "Update"
@dataclass
class Chunk:
orig_index: int = -1 # Line number in the *original* file block where the change starts
del_lines: List[str] = field(default_factory=list)
ins_lines: List[str] = field(default_factory=list)
@dataclass
class PatchAction:
type: ActionType
path: str
# For ADD:
new_content: Optional[str] = None
# For UPDATE:
chunks: List[Chunk] = field(default_factory=list)
move_path: Optional[str] = None
# Type alias for the return type of get_edits
EditResult = Tuple[str, PatchAction]
@dataclass
class Patch:
actions: Dict[str, PatchAction] = field(default_factory=dict)
fuzz: int = 0 # Track fuzziness used during parsing
# --------------------------------------------------------------------------- #
# Helper functions (Adapted from apply_patch.py)
# --------------------------------------------------------------------------- #
def _norm(line: str) -> str:
"""Strip CR so comparisons work for both LF and CRLF input."""
return line.rstrip("\r")
def find_context_core(lines: List[str], context: List[str], start: int) -> Tuple[int, int]:
"""Finds context block, returns start index and fuzz level."""
if not context:
return start, 0
# Exact match
for i in range(start, len(lines) - len(context) + 1):
if lines[i : i + len(context)] == context:
return i, 0
# Rstrip match
norm_context = [s.rstrip() for s in context]
for i in range(start, len(lines) - len(context) + 1):
if [s.rstrip() for s in lines[i : i + len(context)]] == norm_context:
return i, 1 # Fuzz level 1
# Strip match
norm_context_strip = [s.strip() for s in context]
for i in range(start, len(lines) - len(context) + 1):
if [s.strip() for s in lines[i : i + len(context)]] == norm_context_strip:
return i, 100 # Fuzz level 100
return -1, 0
def find_context(lines: List[str], context: List[str], start: int, eof: bool) -> Tuple[int, int]:
"""Finds context, handling EOF marker."""
if eof:
# If EOF marker, first try matching at the very end
if len(lines) >= len(context):
new_index, fuzz = find_context_core(lines, context, len(lines) - len(context))
if new_index != -1:
return new_index, fuzz
# If not found at end, search from `start` as fallback
new_index, fuzz = find_context_core(lines, context, start)
return new_index, fuzz + 10_000 # Add large fuzz penalty if EOF wasn't at end
# Normal case: search from `start`
return find_context_core(lines, context, start)
def peek_next_section(lines: List[str], index: int) -> Tuple[List[str], List[Chunk], int, bool]:
"""
Parses one section (context, -, + lines) of an Update block.
Returns: (context_lines, chunks_in_section, next_index, is_eof)
"""
context_lines: List[str] = []
del_lines: List[str] = []
ins_lines: List[str] = []
chunks: List[Chunk] = []
mode = "keep" # Start by expecting context lines
start_index = index
while index < len(lines):
line = lines[index]
norm_line = _norm(line)
# Check for section terminators
if norm_line.startswith(
(
"@@",
"*** End Patch",
"*** Update File:",
"*** Delete File:",
"*** Add File:",
"*** End of File", # Special terminator
)
):
break
if norm_line == "***": # Legacy/alternative terminator? Handle just in case.
break
if norm_line.startswith("***"): # Invalid line
raise DiffError(f"Invalid patch line found in update section: {line}")
index += 1
last_mode = mode
# Determine line type and strip prefix
if line.startswith("+"):
mode = "add"
line_content = line[1:]
elif line.startswith("-"):
mode = "delete"
line_content = line[1:]
elif line.startswith(" "):
mode = "keep"
line_content = line[1:]
elif line.strip() == "": # Treat blank lines in patch as context ' '
mode = "keep"
line_content = "" # Keep it as a blank line
else:
# Assume lines without prefix are context if format is loose,
# but strict format requires ' '. Raise error for strictness.
raise DiffError(f"Invalid line prefix in update section: {line}")
# If mode changes from add/delete back to keep, finalize the previous chunk
if mode == "keep" and last_mode != "keep":
if del_lines or ins_lines:
chunks.append(
Chunk(
# orig_index is relative to the start of the *context* block found
orig_index=len(context_lines) - len(del_lines),
del_lines=del_lines,
ins_lines=ins_lines,
)
)
del_lines, ins_lines = [], []
# Collect lines based on mode
if mode == "delete":
del_lines.append(line_content)
context_lines.append(line_content) # Deleted lines are part of the original context
elif mode == "add":
ins_lines.append(line_content)
elif mode == "keep":
context_lines.append(line_content)
# Finalize any pending chunk at the end of the section
if del_lines or ins_lines:
chunks.append(
Chunk(
orig_index=len(context_lines) - len(del_lines),
del_lines=del_lines,
ins_lines=ins_lines,
)
)
# Check for EOF marker
is_eof = False
if index < len(lines) and _norm(lines[index]) == "*** End of File":
index += 1
is_eof = True
if index == start_index and not is_eof: # Should not happen if patch is well-formed
raise DiffError("Empty patch section found.")
return context_lines, chunks, index, is_eof
def identify_files_needed(text: str) -> List[str]:
"""Extracts file paths from Update and Delete actions."""
lines = text.splitlines()
paths = set()
for line in lines:
norm_line = _norm(line)
if norm_line.startswith("*** Update File: "):
paths.add(norm_line[len("*** Update File: ") :].strip())
elif norm_line.startswith("*** Delete File: "):
paths.add(norm_line[len("*** Delete File: ") :].strip())
return list(paths)
# --------------------------------------------------------------------------- #
# PatchCoder Class Implementation
# --------------------------------------------------------------------------- #
class PatchCoder(Coder):
"""
A coder that uses a custom patch format for code modifications,
inspired by the format described in tmp.gpt41edits.txt.
Applies patches using logic adapted from the reference apply_patch.py script.
"""
edit_format = "patch"
gpt_prompts = PatchPrompts()
def get_edits(self) -> List[EditResult]:
"""
Parses the LLM response content (containing the patch) into a list of
tuples, where each tuple contains the file path and the PatchAction object.
"""
content = self.partial_response_content
if not content or not content.strip():
return []
# Check for patch sentinels
lines = content.splitlines()
if (
len(lines) < 2
or not _norm(lines[0]).startswith("*** Begin Patch")
# Allow flexible end, might be EOF or just end of stream
# or _norm(lines[-1]) != "*** End Patch"
):
# Tolerate missing sentinels if content looks like a patch action
is_patch_like = any(
_norm(line).startswith(
("@@", "*** Update File:", "*** Add File:", "*** Delete File:")
)
for line in lines
)
if not is_patch_like:
# If it doesn't even look like a patch, return empty
self.io.tool_warning("Response does not appear to be in patch format.")
return []
# If it looks like a patch but lacks sentinels, try parsing anyway but warn.
self.io.tool_warning(
"Patch format warning: Missing '*** Begin Patch'/'*** End Patch' sentinels."
)
start_index = 0
else:
start_index = 1 # Skip "*** Begin Patch"
# Identify files needed for context lookups during parsing
needed_paths = identify_files_needed(content)
current_files: Dict[str, str] = {}
for rel_path in needed_paths:
abs_path = self.abs_root_path(rel_path)
try:
# Use io.read_text to handle potential errors/encodings
file_content = self.io.read_text(abs_path)
if file_content is None:
raise DiffError(
f"File referenced in patch not found or could not be read: {rel_path}"
)
current_files[rel_path] = file_content
except FileNotFoundError:
raise DiffError(f"File referenced in patch not found: {rel_path}")
except IOError as e:
raise DiffError(f"Error reading file {rel_path}: {e}")
try:
# Parse the patch text using adapted logic
patch_obj = self._parse_patch_text(lines, start_index, current_files)
# Convert Patch object actions dict to a list of tuples (path, action)
# for compatibility with the base Coder's prepare_to_edit method.
results = []
for path, action in patch_obj.actions.items():
results.append((path, action))
return results
except DiffError as e:
# Raise as ValueError for consistency with other coders' error handling
raise ValueError(f"Error parsing patch content: {e}")
except Exception as e:
# Catch unexpected errors during parsing
raise ValueError(f"Unexpected error parsing patch: {e}")
def _parse_patch_text(
self, lines: List[str], start_index: int, current_files: Dict[str, str]
) -> Patch:
"""
Parses patch content lines into a Patch object.
Adapted from the Parser class in apply_patch.py.
"""
patch = Patch()
index = start_index
fuzz_accumulator = 0
while index < len(lines):
line = lines[index]
norm_line = _norm(line)
if norm_line == "*** End Patch":
index += 1
break # Successfully reached end
# ---------- UPDATE ---------- #
if norm_line.startswith("*** Update File: "):
path = norm_line[len("*** Update File: ") :].strip()
index += 1
if not path:
raise DiffError("Update File action missing path.")
# Optional move target
move_to = None
if index < len(lines) and _norm(lines[index]).startswith("*** Move to: "):
move_to = _norm(lines[index])[len("*** Move to: ") :].strip()
index += 1
if not move_to:
raise DiffError("Move to action missing path.")
if path not in current_files:
raise DiffError(f"Update File Error - missing file content for: {path}")
file_content = current_files[path]
existing_action = patch.actions.get(path)
if existing_action is not None:
# Merge additional UPDATE block into the existing one
if existing_action.type != ActionType.UPDATE:
raise DiffError(f"Conflicting actions for file: {path}")
new_action, index, fuzz = self._parse_update_file_sections(
lines, index, file_content
)
existing_action.chunks.extend(new_action.chunks)
if move_to:
if existing_action.move_path and existing_action.move_path != move_to:
raise DiffError(f"Conflicting move targets for file: {path}")
existing_action.move_path = move_to
fuzz_accumulator += fuzz
else:
# First UPDATE block for this file
action, index, fuzz = self._parse_update_file_sections(
lines, index, file_content
)
action.path = path
action.move_path = move_to
patch.actions[path] = action
fuzz_accumulator += fuzz
continue
# ---------- DELETE ---------- #
elif norm_line.startswith("*** Delete File: "):
path = norm_line[len("*** Delete File: ") :].strip()
index += 1
if not path:
raise DiffError("Delete File action missing path.")
existing_action = patch.actions.get(path)
if existing_action:
if existing_action.type == ActionType.DELETE:
# Duplicate delete ignore the extra block
self.io.tool_warning(f"Duplicate delete action for file: {path} ignored.")
continue
else:
raise DiffError(f"Conflicting actions for file: {path}")
if path not in current_files:
raise DiffError(
f"Delete File Error - file not found: {path}"
) # Check against known files
patch.actions[path] = PatchAction(type=ActionType.DELETE, path=path)
continue
# ---------- ADD ---------- #
elif norm_line.startswith("*** Add File: "):
path = norm_line[len("*** Add File: ") :].strip()
index += 1
if not path:
raise DiffError("Add File action missing path.")
if path in patch.actions:
raise DiffError(f"Duplicate action for file: {path}")
# Check if file exists in the context provided (should not for Add).
# Note: We only have needed files, a full check requires FS access.
# if path in current_files:
# raise DiffError(f"Add File Error - file already exists: {path}")
action, index = self._parse_add_file_content(lines, index)
action.path = path # Ensure path is set
patch.actions[path] = action
continue
# If we are here, the line is unexpected
# Allow blank lines between actions
if not norm_line.strip():
index += 1
continue
raise DiffError(f"Unknown or misplaced line while parsing patch: {line}")
# Check if we consumed the whole input or stopped early
# Tolerate missing "*** End Patch" if we processed actions
# if index < len(lines) and _norm(lines[index-1]) != "*** End Patch":
# raise DiffError("Patch parsing finished unexpectedly before end of input.")
patch.fuzz = fuzz_accumulator
return patch
def _parse_update_file_sections(
self, lines: List[str], index: int, file_content: str
) -> Tuple[PatchAction, int, int]:
"""Parses all sections (@@, context, -, +) for a single Update File action."""
action = PatchAction(type=ActionType.UPDATE, path="") # Path set by caller
orig_lines = file_content.splitlines() # Use splitlines for consistency
current_file_index = 0 # Track position in original file content
total_fuzz = 0
while index < len(lines):
norm_line = _norm(lines[index])
# Check for terminators for *this* file update
if norm_line.startswith(
(
"*** End Patch",
"*** Update File:",
"*** Delete File:",
"*** Add File:",
)
):
break # End of this file's update section
# Handle @@ scope lines (optional)
scope_lines = []
while index < len(lines) and _norm(lines[index]).startswith("@@"):
scope_line_content = lines[index][len("@@") :].strip()
if scope_line_content: # Ignore empty @@ lines?
scope_lines.append(scope_line_content)
index += 1
# Find the scope in the original file if specified
if scope_lines:
# Simple scope finding: search from current position
# A more robust finder could handle nested scopes like the reference @@ @@
found_scope = False
temp_index = current_file_index
while temp_index < len(orig_lines):
# Check if all scope lines match sequentially from temp_index
match = True
for i, scope in enumerate(scope_lines):
if (
temp_index + i >= len(orig_lines)
or _norm(orig_lines[temp_index + i]).strip() != scope
):
match = False
break
if match:
current_file_index = temp_index + len(scope_lines)
found_scope = True
break
temp_index += 1
if not found_scope:
# Try fuzzy scope matching (strip whitespace)
temp_index = current_file_index
while temp_index < len(orig_lines):
match = True
for i, scope in enumerate(scope_lines):
if (
temp_index + i >= len(orig_lines)
or _norm(orig_lines[temp_index + i]).strip() != scope.strip()
):
match = False
break
if match:
current_file_index = temp_index + len(scope_lines)
found_scope = True
total_fuzz += 1 # Add fuzz for scope match difference
break
temp_index += 1
if not found_scope:
scope_txt = "\n".join(scope_lines)
raise DiffError(f"Could not find scope context:\n{scope_txt}")
# Peek and parse the next context/change section
context_block, chunks_in_section, next_index, is_eof = peek_next_section(lines, index)
# Find where this context block appears in the original file
found_index, fuzz = find_context(orig_lines, context_block, current_file_index, is_eof)
total_fuzz += fuzz
if found_index == -1:
ctx_txt = "\n".join(context_block)
marker = "*** End of File" if is_eof else ""
raise DiffError(
f"Could not find patch context {marker} starting near line"
f" {current_file_index}:\n{ctx_txt}"
)
# Adjust chunk original indices to be absolute within the file
for chunk in chunks_in_section:
# chunk.orig_index from peek is relative to context_block start
# We need it relative to the file start
chunk.orig_index += found_index
action.chunks.append(chunk)
# Advance file index past the matched context block
current_file_index = found_index + len(context_block)
# Advance line index past the processed section in the patch
index = next_index
return action, index, total_fuzz
def _parse_add_file_content(self, lines: List[str], index: int) -> Tuple[PatchAction, int]:
"""Parses the content (+) lines for an Add File action."""
added_lines: List[str] = []
while index < len(lines):
line = lines[index]
norm_line = _norm(line)
# Stop if we hit another action or end marker
if norm_line.startswith(
(
"*** End Patch",
"*** Update File:",
"*** Delete File:",
"*** Add File:",
)
):
break
# Expect lines to start with '+'
if not line.startswith("+"):
# Tolerate blank lines? Or require '+'? Reference implies '+' required.
if norm_line.strip() == "":
# Treat blank line as adding a blank line
added_lines.append("")
else:
raise DiffError(f"Invalid Add File line (missing '+'): {line}")
else:
added_lines.append(line[1:]) # Strip leading '+'
index += 1
action = PatchAction(type=ActionType.ADD, path="", new_content="\n".join(added_lines))
return action, index
def apply_edits(self, edits: List[PatchAction]):
"""
Applies the parsed PatchActions to the corresponding files.
"""
if not edits:
return
# Group edits by original path? Not strictly needed if processed sequentially.
# Edits are now List[Tuple[str, PatchAction]]
for _path_tuple_element, action in edits:
# action is the PatchAction object
# action.path is the canonical path within the action logic
full_path = self.abs_root_path(action.path)
path_obj = pathlib.Path(full_path)
try:
if action.type == ActionType.ADD:
# Check existence *before* writing
if path_obj.exists():
raise DiffError(f"ADD Error: File already exists: {action.path}")
if action.new_content is None:
# Parser should ensure this doesn't happen
raise DiffError(f"ADD change for {action.path} has no content")
self.io.tool_output(f"Adding {action.path}")
path_obj.parent.mkdir(parents=True, exist_ok=True)
# Ensure single trailing newline, matching reference behavior
content_to_write = action.new_content
if not content_to_write.endswith("\n"):
content_to_write += "\n"
self.io.write_text(full_path, content_to_write)
elif action.type == ActionType.DELETE:
self.io.tool_output(f"Deleting {action.path}")
if not path_obj.exists():
self.io.tool_warning(
f"DELETE Warning: File not found, skipping: {action.path}"
)
else:
path_obj.unlink()
elif action.type == ActionType.UPDATE:
if not path_obj.exists():
raise DiffError(f"UPDATE Error: File does not exist: {action.path}")
current_content = self.io.read_text(full_path)
if current_content is None:
# Should have been caught during parsing if file was needed
raise DiffError(f"Could not read file for UPDATE: {action.path}")
# Apply the update logic using the parsed chunks
new_content = self._apply_update(current_content, action, action.path)
target_full_path = (
self.abs_root_path(action.move_path) if action.move_path else full_path
)
target_path_obj = pathlib.Path(target_full_path)
if action.move_path:
self.io.tool_output(
f"Updating and moving {action.path} to {action.move_path}"
)
# Check if target exists before overwriting/moving
if target_path_obj.exists() and full_path != target_full_path:
self.io.tool_warning(
"UPDATE Warning: Target file for move already exists, overwriting:"
f" {action.move_path}"
)
else:
self.io.tool_output(f"Updating {action.path}")
# Ensure parent directory exists for target
target_path_obj.parent.mkdir(parents=True, exist_ok=True)
self.io.write_text(target_full_path, new_content)
# Remove original file *after* successful write to new location if moved
if action.move_path and full_path != target_full_path:
path_obj.unlink()
else:
# Should not happen
raise DiffError(f"Unknown action type encountered: {action.type}")
except (DiffError, FileNotFoundError, IOError, OSError) as e:
# Raise a ValueError to signal failure, consistent with other coders.
raise ValueError(f"Error applying action '{action.type}' to {action.path}: {e}")
except Exception as e:
# Catch unexpected errors during application
raise ValueError(
f"Unexpected error applying action '{action.type}' to {action.path}: {e}"
)
def _apply_update(self, text: str, action: PatchAction, path: str) -> str:
"""
Applies UPDATE chunks to the given text content.
Adapted from _get_updated_file in apply_patch.py.
"""
if action.type is not ActionType.UPDATE:
# Should not be called otherwise, but check for safety
raise DiffError("_apply_update called with non-update action")
orig_lines = text.splitlines() # Use splitlines to handle endings consistently
dest_lines: List[str] = []
current_orig_line_idx = 0 # Tracks index in orig_lines processed so far
# Sort chunks by their original index to apply them sequentially
sorted_chunks = sorted(action.chunks, key=lambda c: c.orig_index)
for chunk in sorted_chunks:
# chunk.orig_index is the absolute line number where the change starts
# (where the first deleted line was, or where inserted lines go if no deletes)
chunk_start_index = chunk.orig_index
if chunk_start_index < current_orig_line_idx:
# This indicates overlapping chunks or incorrect indices from parsing
raise DiffError(
f"{path}: Overlapping or out-of-order chunk detected."
f" Current index {current_orig_line_idx}, chunk starts at {chunk_start_index}."
)
# Add lines from original file between the last chunk and this one
dest_lines.extend(orig_lines[current_orig_line_idx:chunk_start_index])
# Verify that the lines to be deleted actually match the original file content
# (The parser should have used find_context, but double-check here)
num_del = len(chunk.del_lines)
actual_deleted_lines = orig_lines[chunk_start_index : chunk_start_index + num_del]
# Use the same normalization as find_context_core for comparison robustness
norm_chunk_del = [_norm(s).strip() for s in chunk.del_lines]
norm_actual_del = [_norm(s).strip() for s in actual_deleted_lines]
if norm_chunk_del != norm_actual_del:
# This indicates the context matching failed or the file changed since parsing
# Provide detailed error message
expected_str = "\n".join(f"- {s}" for s in chunk.del_lines)
actual_str = "\n".join(f" {s}" for s in actual_deleted_lines)
raise DiffError(
f"{path}: Mismatch applying patch near line {chunk_start_index + 1}.\n"
f"Expected lines to remove:\n{expected_str}\n"
f"Found lines in file:\n{actual_str}"
)
# Add the inserted lines from the chunk
dest_lines.extend(chunk.ins_lines)
# Advance the original line index past the lines processed (deleted lines)
current_orig_line_idx = chunk_start_index + num_del
# Add any remaining lines from the original file after the last chunk
dest_lines.extend(orig_lines[current_orig_line_idx:])
# Join lines and ensure a single trailing newline
result = "\n".join(dest_lines)
if result or orig_lines: # Add newline unless result is empty and original was empty
result += "\n"
return result

View File

@@ -0,0 +1,161 @@
# flake8: noqa: E501
from .base_prompts import CoderPrompts
from .editblock_prompts import EditBlockPrompts
class PatchPrompts(EditBlockPrompts):
# --------------------------------------------------------------------- #
# SYSTEM PROMPT
# --------------------------------------------------------------------- #
main_system = """Act as an expert software developer.
Always use best practices when coding.
Respect and use existing conventions, libraries, etc that are already present in the code base.
{final_reminders}
Take requests for changes to the supplied code.
If the request is ambiguous, ask questions.
Always reply to the user in {language}.
Once you understand the request you MUST:
1. Decide if you need to propose edits to any files that haven't been added to the chat. You can create new files without asking!
• If you need to propose edits to existing files not already added to the chat, you *MUST* tell the user their full path names and ask them to *add the files to the chat*.
• End your reply and wait for their approval.
• You can keep asking if you then decide you need to edit more files.
2. Think stepbystep and explain the needed changes in a few short sentences.
3. Describe the changes using the V4A diff format, enclosed within `*** Begin Patch` and `*** End Patch` markers.
IMPORTANT: Each file MUST appear only once in the patch.
Consolidate **all** edits for a given file into a single `*** [ACTION] File:` block.
{shell_cmd_prompt}
"""
# --------------------------------------------------------------------- #
# EXAMPLE MESSAGES
# --------------------------------------------------------------------- #
example_messages = [
# --- Example 1 ---------------------------------------------------- #
dict(
role="user",
content="Change get_factorial() to use math.factorial",
),
dict(
role="assistant",
content="""To make this change we need to modify `mathweb/flask/app.py`:
1. Import the `math` module.
2. Replace the custom recursive `factorial()` helper with `math.factorial`.
3. Update `get_factorial()` to call `math.factorial`.
Here is the patch:
*** Begin Patch
*** Update File: mathweb/flask/app.py
@@
-from flask import Flask
-
-from flask import Flask
+from flask import Flask
+import math
@@
-def factorial(n):
- "compute factorial"
-
- if n == 0:
- return 1
- else:
- return n * factorial(n-1)
+def factorial(n):
+ "compute factorial"
+
+ return math.factorial(n)
@@ def get_factorial(self, n):
- return str(factorial(n))
+ return str(math.factorial(n))
*** End Patch
""",
),
# --- Example 2 ---------------------------------------------------- #
dict(
role="user",
content="Refactor hello() into its own file.",
),
dict(
role="assistant",
content="""To make this change we need to modify `main.py` and create a new file `hello.py`:
1. Create `hello.py` with the `hello()` function.
2. Remove `hello()` from `main.py` and import it instead.
Here is the patch:
*** Begin Patch
*** Add File: hello.py
+# A simple function
+def hello():
+ "print a greeting"
+
+ print("hello")
*** Update File: main.py
@@
-def hello():
- "print a greeting"
-
- print("hello")
+from hello import hello
*** End Patch
""",
),
]
# --------------------------------------------------------------------- #
# SYSTEM REMINDER
# --------------------------------------------------------------------- #
system_reminder = """# V4A Diff Format Rules:
Your entire response containing the patch MUST start with `*** Begin Patch` on a line by itself.
Your entire response containing the patch MUST end with `*** End Patch` on a line by itself.
Use the *FULL* file path, as shown to you by the user.
{quad_backtick_reminder}
For each file you need to modify, start with a marker line:
*** [ACTION] File: [path/to/file]
Where `[ACTION]` is one of `Add`, `Update`, or `Delete`.
⇨ **Each file MUST appear only once in the patch.**
Consolidate all changes for that file into the same block.
If you are moving code within a file, include both the deletions and the
insertions as separate hunks inside this single `*** Update File:` block
(do *not* open a second block for the same file).
For `Update` actions, describe each snippet of code that needs to be changed using the following format:
1. Context lines: Include 3 lines of context *before* the change. These lines MUST start with a single space ` `.
2. Lines to remove: Precede each line to be removed with a minus sign `-`.
3. Lines to add: Precede each line to be added with a plus sign `+`.
4. Context lines: Include 3 lines of context *after* the change. These lines MUST start with a single space ` `.
Context lines MUST exactly match the existing file content, character for character, including indentation.
If a change is near the beginning or end of the file, include fewer than 3 context lines as appropriate.
If 3 lines of context is insufficient to uniquely identify the snippet, use `@@ [CLASS_OR_FUNCTION_NAME]` markers on their own lines *before* the context lines to specify the scope. You can use multiple `@@` markers if needed.
Do not include line numbers.
Only create patches for files that the user has added to the chat!
When moving code *within* a single file, keep everything inside one
`*** Update File:` block. Provide one hunk that deletes the code from its
original location and another hunk that inserts it at the new location.
For `Add` actions, use the `*** Add File: [path/to/new/file]` marker, followed by the lines of the new file, each preceded by a plus sign `+`.
For `Delete` actions, use the `*** Delete File: [path/to/file]` marker. No other lines are needed for the deletion.
{rename_with_shell}{go_ahead_tip}{final_reminders}ONLY EVER RETURN CODE IN THE SPECIFIED V4A DIFF FORMAT!
{shell_cmd_reminder}
"""

View File

@@ -3,7 +3,11 @@
import sys
from pathlib import Path
import git
try:
import git
except ImportError:
git = None
from diff_match_patch import diff_match_patch
from tqdm import tqdm
@@ -105,7 +109,7 @@ class RelativeIndenter:
"""
if self.marker in text:
raise ValueError("Text already contains the outdent marker: {self.marker}")
raise ValueError(f"Text already contains the outdent marker: {self.marker}")
lines = text.splitlines(keepends=True)
@@ -231,20 +235,6 @@ Left
Left
"""
"""
ri = RelativeIndenter([example])
dump(example)
rel_example = ri.make_relative(example)
dump(repr(rel_example))
abs_example = ri.make_absolute(rel_example)
dump(abs_example)
sys.exit()
"""
def relative_indent(texts):
ri = RelativeIndenter(texts)
@@ -345,7 +335,7 @@ def lines_to_chars(lines, mapping):
return new_text
def dmp_lines_apply(texts, remap=True):
def dmp_lines_apply(texts):
debug = False
# debug = True
@@ -651,8 +641,6 @@ def proc(dname):
(dmp_lines_apply, all_preprocs),
]
_strategies = editblock_strategies # noqa: F841
short_names = dict(
search_and_replace="sr",
git_cherry_pick_osr_onto_o="cp_o",

37
aider/coders/shell.py Normal file
View File

@@ -0,0 +1,37 @@
shell_cmd_prompt = """
4. *Concisely* suggest any shell commands the user might want to run in ```bash blocks.
Just suggest shell commands this way, not example code.
Only suggest complete shell commands that are ready to execute, without placeholders.
Only suggest at most a few shell commands at a time, not more than 1-3, one per line.
Do not suggest multi-line shell commands.
All shell commands will run from the root directory of the user's project.
Use the appropriate shell based on the user's system info:
{platform}
Examples of when to suggest shell commands:
- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content.
- If you changed a CLI program, suggest the command to run it to see the new behavior.
- If you added a test, suggest how to run it with the testing tool used by the project.
- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations.
- If your code changes add new dependencies, suggest the command to install them.
- Etc.
""" # noqa
no_shell_cmd_prompt = """
Keep in mind these details about the user's platform and environment:
{platform}
""" # noqa
shell_cmd_reminder = """
Examples of when to suggest shell commands:
- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content.
- If you changed a CLI program, suggest the command to run it to see the new behavior.
- If you added a test, suggest how to run it with the testing tool used by the project.
- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations.
- If your code changes add new dependencies, suggest the command to install them.
- Etc.
""" # noqa

View File

@@ -38,7 +38,7 @@ class SingleWholeFileFunctionCoder(Coder):
self.gpt_prompts = SingleWholeFileFunctionPrompts()
super().__init__(*args, **kwargs)
def update_cur_messages(self, edited):
def add_assistant_reply_to_cur_messages(self, edited):
if edited:
self.cur_messages += [
dict(role="assistant", content=self.gpt_prompts.redacted_edit_message)

View File

@@ -45,6 +45,7 @@ other_hunks_applied = (
class UnifiedDiffCoder(Coder):
"""A coder that uses unified diff format for code modifications."""
edit_format = "udiff"
gpt_prompts = UnifiedDiffPrompts()
@@ -344,7 +345,16 @@ def process_fenced_block(lines, start_line_num):
if block[0].startswith("--- ") and block[1].startswith("+++ "):
# Extract the file path, considering that it might contain spaces
fname = block[1][4:].strip()
a_fname = block[0][4:].strip()
b_fname = block[1][4:].strip()
# Check if standard git diff prefixes are present (or /dev/null) and strip them
if (a_fname.startswith("a/") or a_fname == "/dev/null") and b_fname.startswith("b/"):
fname = b_fname[2:]
else:
# Otherwise, assume the path is as intended
fname = b_fname
block = block[2:]
else:
fname = None

View File

@@ -1,11 +1,12 @@
# flake8: noqa: E501
from . import shell
from .base_prompts import CoderPrompts
class UnifiedDiffPrompts(CoderPrompts):
main_system = """Act as an expert software developer.
{lazy_prompt}
{final_reminders}
Always use best practices when coding.
Respect and use existing conventions, libraries, etc that are already present in the code base.
@@ -106,5 +107,9 @@ To move code within a file, use 2 hunks: 1 to delete it from its current locatio
To make a new file, show a diff from `--- /dev/null` to `+++ path/to/new/file.ext`.
{lazy_prompt}
{final_reminders}
"""
shell_cmd_prompt = shell.shell_cmd_prompt
no_shell_cmd_prompt = shell.no_shell_cmd_prompt
shell_cmd_reminder = shell.shell_cmd_reminder

View File

@@ -0,0 +1,14 @@
from .udiff_coder import UnifiedDiffCoder
from .udiff_simple_prompts import UnifiedDiffSimplePrompts
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"
gpt_prompts = UnifiedDiffSimplePrompts()

View File

@@ -0,0 +1,25 @@
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.
"""
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`.
{final_reminders}
""" # noqa

View File

@@ -17,10 +17,10 @@ class WholeFileCoder(Coder):
try:
return self.get_edits(mode="diff")
except ValueError:
return self.get_multi_response_content()
return self.get_multi_response_content_in_progress()
def get_edits(self, mode="update"):
content = self.get_multi_response_content()
content = self.get_multi_response_content_in_progress()
chat_files = self.get_inchat_relative_files()

View File

@@ -49,7 +49,7 @@ class WholeFileFunctionCoder(Coder):
self.gpt_prompts = WholeFileFunctionPrompts()
super().__init__(*args, **kwargs)
def update_cur_messages(self, edited):
def add_assistant_reply_to_cur_messages(self, edited):
if edited:
self.cur_messages += [
dict(role="assistant", content=self.gpt_prompts.redacted_edit_message)

View File

@@ -10,7 +10,7 @@ If the request is ambiguous, ask questions.
Always reply to the user in {language}.
{lazy_prompt}
{final_reminders}
Once you understand the request you MUST:
1. Determine if any code changes are needed.
2. Explain any needed changes.
@@ -61,7 +61,7 @@ To suggest changes to a file you MUST return a *file listing* that contains the
*NEVER* skip, omit or elide content from a *file listing* using "..." or by adding comments like "... rest of code..."!
Create a new file you MUST return a *file listing* which includes an appropriate filename, including any appropriate path.
{lazy_prompt}
{final_reminders}
"""
redacted_edit_message = "No changes are needed."

View File

@@ -17,6 +17,7 @@ from aider import models, prompts, voice
from aider.editor import pipe_editor
from aider.format_settings import format_settings
from aider.help import Help, install_help_extra
from aider.io import CommandCompletionException
from aider.llm import litellm
from aider.repo import ANY_GIT_ERROR
from aider.run_cmd import run_cmd
@@ -27,8 +28,9 @@ from .dump import dump # noqa: F401
class SwitchCoder(Exception):
def __init__(self, **kwargs):
def __init__(self, placeholder=None, **kwargs):
self.kwargs = kwargs
self.placeholder = placeholder
class Commands:
@@ -45,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__(
@@ -52,11 +55,14 @@ class Commands:
io,
coder,
voice_language=None,
voice_input_device=None,
voice_format=None,
verify_ssl=True,
args=None,
parser=None,
verbose=False,
editor=None,
original_read_only_fnames=None,
):
self.io = io
self.coder = coder
@@ -69,15 +75,63 @@ class Commands:
voice_language = None
self.voice_language = voice_language
self.voice_format = voice_format
self.voice_input_device = voice_input_device
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 [])
def cmd_model(self, args):
"Switch to a new LLM"
"Switch the Main Model to a new LLM"
model_name = args.strip()
model = models.Model(model_name)
if not model_name:
announcements = "\n".join(self.coder.get_announcements())
self.io.tool_output(announcements)
return
model = models.Model(
model_name,
editor_model=self.coder.main_model.editor_model.name,
weak_model=self.coder.main_model.weak_model.name,
)
models.sanity_check_models(self.io, model)
# Check if the current edit format is the default for the old model
old_model_edit_format = self.coder.main_model.edit_format
current_edit_format = self.coder.edit_format
new_edit_format = current_edit_format
if current_edit_format == old_model_edit_format:
# If the user was using the old model's default, switch to the new model's default
new_edit_format = model.edit_format
raise SwitchCoder(main_model=model, edit_format=new_edit_format)
def cmd_editor_model(self, args):
"Switch the Editor Model to a new LLM"
model_name = args.strip()
model = models.Model(
self.coder.main_model.name,
editor_model=model_name,
weak_model=self.coder.main_model.weak_model.name,
)
models.sanity_check_models(self.io, model)
raise SwitchCoder(main_model=model)
def cmd_weak_model(self, args):
"Switch the Weak Model to a new LLM"
model_name = args.strip()
model = models.Model(
self.coder.main_model.name,
editor_model=self.coder.main_model.editor_model.name,
weak_model=model_name,
)
models.sanity_check_models(self.io, model)
raise SwitchCoder(main_model=model)
@@ -110,6 +164,10 @@ class Commands:
" them."
),
),
(
"context",
"Automatically identify which files will need to be edited.",
),
]
)
@@ -168,12 +226,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 ""
@@ -287,7 +351,7 @@ class Commands:
return
commit_message = args.strip() if args else None
self.coder.repo.commit(message=commit_message)
self.coder.repo.commit(message=commit_message, coder=self.coder)
def cmd_lint(self, args="", fnames=None):
"Lint and fix in-chat files or all dirty files if none in chat"
@@ -348,10 +412,25 @@ class Commands:
"Clear the chat history"
self._clear_chat_history()
self.io.tool_output("All chat history cleared.")
def _drop_all_files(self):
self.coder.abs_fnames = set()
self.coder.abs_read_only_fnames = set()
# 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
):
to_keep.add(abs_fname)
self.coder.abs_read_only_fnames = to_keep
else:
self.coder.abs_read_only_fnames = set()
def _clear_chat_history(self):
self.coder.done_messages = []
@@ -400,6 +479,7 @@ class Commands:
fence = "`" * 3
file_res = []
# files
for fname in self.coder.abs_fnames:
relative_fname = self.coder.get_rel_fname(fname)
@@ -410,7 +490,7 @@ class Commands:
# approximate
content = f"{relative_fname}\n{fence}\n" + content + "{fence}\n"
tokens = self.coder.main_model.token_count(content)
res.append((tokens, f"{relative_fname}", "/drop to remove"))
file_res.append((tokens, f"{relative_fname}", "/drop to remove"))
# read-only files
for fname in self.coder.abs_read_only_fnames:
@@ -420,7 +500,10 @@ class Commands:
# approximate
content = f"{relative_fname}\n{fence}\n" + content + "{fence}\n"
tokens = self.coder.main_model.token_count(content)
res.append((tokens, f"{relative_fname} (read-only)", "/drop to remove"))
file_res.append((tokens, f"{relative_fname} (read-only)", "/drop to remove"))
file_res.sort()
res.extend(file_res)
self.io.tool_output(
f"Approximate context window usage for {self.coder.main_model.name}, in tokens:"
@@ -486,6 +569,7 @@ class Commands:
last_commit_hash = self.coder.repo.get_head_commit_sha(short=True)
last_commit_message = self.coder.repo.get_head_commit_message("(unknown)").strip()
last_commit_message = (last_commit_message.splitlines() or [""])[0]
if last_commit_hash not in self.coder.aider_commit_hashes:
self.io.tool_error("The last commit was not made by aider in this chat session.")
self.io.tool_output(
@@ -564,6 +648,7 @@ class Commands:
# Get the current HEAD after undo
current_head_hash = self.coder.repo.get_head_commit_sha(short=True)
current_head_message = self.coder.repo.get_head_commit_message("(unknown)").strip()
current_head_message = (current_head_message.splitlines() or [""])[0]
self.io.tool_output(f"Now at: {current_head_hash} {current_head_message}")
if self.coder.main_model.send_undo_reply:
@@ -752,6 +837,7 @@ class Commands:
if self.io.confirm_ask(f"No files matched '{word}'. Do you want to create {fname}?"):
try:
fname.parent.mkdir(parents=True, exist_ok=True)
fname.touch()
all_matched_files.add(str(fname))
except OSError as e:
@@ -766,7 +852,11 @@ class Commands:
)
continue
if self.coder.repo and self.coder.repo.git_ignored_file(matched_file):
if (
self.coder.repo
and self.coder.repo.git_ignored_file(matched_file)
and not self.coder.add_gitignore_files
):
self.io.tool_error(f"Can't add {matched_file} which is in gitignore")
continue
@@ -813,7 +903,12 @@ class Commands:
"Remove files from the chat session to free up context space"
if not args.strip():
self.io.tool_output("Dropping all files from the chat session.")
if self.original_read_only_fnames:
self.io.tool_output(
"Dropping all files from the chat session except originally read-only files."
)
else:
self.io.tool_output("Dropping all files from the chat session.")
self._drop_all_files()
return
@@ -914,10 +1009,14 @@ class Commands:
if combined_output is None:
return
# Calculate token count of output
token_count = self.coder.main_model.token_count(combined_output)
k_tokens = token_count / 1000
if add_on_nonzero_exit:
add = exit_status != 0
else:
add = self.io.confirm_ask("Add command output to the chat?")
add = self.io.confirm_ask(f"Add {k_tokens:.1f}k tokens of command output to the chat?")
if add:
num_lines = len(combined_output.strip().splitlines())
@@ -934,8 +1033,14 @@ class Commands:
dict(role="assistant", content="Ok."),
]
if add and exit_status != 0:
self.io.placeholder = "Fix that"
if add_on_nonzero_exit and exit_status != 0:
# Return the formatted output message for test failures
return msg
elif add and exit_status != 0:
self.io.placeholder = "What's wrong? Fix"
# Return None if output wasn't added or command succeeded
return None
def cmd_exit(self, args):
"Exit the application"
@@ -1009,7 +1114,7 @@ class Commands:
return
self.coder.event("interactive help")
from aider.coders import Coder
from aider.coders.base_coder import Coder
if not self.help:
res = install_help_extra(self.io)
@@ -1052,24 +1157,40 @@ class Commands:
show_announcements=False,
)
def completions_ask(self):
raise CommandCompletionException()
def completions_code(self):
raise CommandCompletionException()
def completions_architect(self):
raise CommandCompletionException()
def completions_context(self):
raise CommandCompletionException()
def cmd_ask(self, args):
"Ask questions about the code base without editing any files"
"""Ask questions about the code base without editing any files. If no prompt provided, switches to ask mode.""" # noqa
return self._generic_chat_command(args, "ask")
def cmd_code(self, args):
"Ask for changes to your code"
"""Ask for changes to your code. If no prompt provided, switches to code mode.""" # noqa
return self._generic_chat_command(args, self.coder.main_model.edit_format)
def cmd_architect(self, args):
"Enter architect mode to discuss high-level design and architecture"
"""Enter architect/editor mode using 2 different models. If no prompt provided, switches to architect/editor mode.""" # noqa
return self._generic_chat_command(args, "architect")
def _generic_chat_command(self, args, edit_format):
if not args.strip():
self.io.tool_error(f"Please provide a question or topic for the {edit_format} chat.")
return
def cmd_context(self, args):
"""Enter context mode to see surrounding code context. If no prompt provided, switches to context mode.""" # noqa
return self._generic_chat_command(args, "context", placeholder=args.strip() or None)
from aider.coders import Coder
def _generic_chat_command(self, args, edit_format, placeholder=None):
if not args.strip():
# Switch to the corresponding chat mode if no args provided
return self.cmd_chat_mode(edit_format)
from aider.coders.base_coder import Coder
coder = Coder.create(
io=self.io,
@@ -1081,11 +1202,13 @@ class Commands:
user_msg = args
coder.run(user_msg)
# Use the provided placeholder if any
raise SwitchCoder(
edit_format=self.coder.edit_format,
summarize_from_coder=False,
from_coder=coder,
show_announcements=False,
placeholder=placeholder,
)
def get_help_md(self):
@@ -1117,7 +1240,7 @@ class Commands:
return
try:
self.voice = voice.Voice(
audio_format=self.args.voice_format, device_name=self.args.voice_input_device
audio_format=self.voice_format or "wav", device_name=self.voice_input_device
)
except voice.SoundDeviceError:
self.io.tool_error(
@@ -1201,12 +1324,23 @@ class Commands:
# First collect all expanded paths
for pattern in filenames:
expanded_pattern = expanduser(pattern)
if os.path.isabs(expanded_pattern):
# For absolute paths, glob it
matches = list(glob.glob(expanded_pattern))
path_obj = Path(expanded_pattern)
is_abs = path_obj.is_absolute()
if not is_abs:
path_obj = Path(self.coder.root) / path_obj
matches = []
# Check for literal path existence first
if path_obj.exists():
matches = [path_obj]
else:
# For relative paths and globs, use glob from the root directory
matches = list(Path(self.coder.root).glob(expanded_pattern))
# If literal path doesn't exist, try globbing
if is_abs:
# For absolute paths, glob it
matches = [Path(p) for p in glob.glob(expanded_pattern)]
else:
# For relative paths and globs, use glob from the root directory
matches = list(Path(self.coder.root).glob(expanded_pattern))
if not matches:
self.io.tool_error(f"No matches found for: {pattern}")
@@ -1281,7 +1415,30 @@ class Commands:
"Print out the current settings"
settings = format_settings(self.parser, self.args)
announcements = "\n".join(self.coder.get_announcements())
# Build metadata for the active models (main, editor, weak)
model_sections = []
active_models = [
("Main model", self.coder.main_model),
("Editor model", getattr(self.coder.main_model, "editor_model", None)),
("Weak model", getattr(self.coder.main_model, "weak_model", None)),
]
for label, model in active_models:
if not model:
continue
info = getattr(model, "info", {}) or {}
if not info:
continue
model_sections.append(f"{label} ({model.name}):")
for k, v in sorted(info.items()):
model_sections.append(f" {k}: {v}")
model_sections.append("") # blank line between models
model_metadata = "\n".join(model_sections)
output = f"{announcements}\n{settings}"
if model_metadata:
output += "\n" + model_metadata
self.io.tool_output(output)
def completions_raw_load(self, document, complete_event):
@@ -1309,7 +1466,12 @@ class Commands:
continue
self.io.tool_output(f"\nExecuting: {cmd}")
self.run(cmd)
try:
self.run(cmd)
except SwitchCoder:
self.io.tool_error(
f"Command '{cmd}' is only supported in interactive mode, skipping."
)
def completions_raw_save(self, document, complete_event):
return self.completions_raw_read_only(document, complete_event)
@@ -1393,6 +1555,68 @@ class Commands:
if user_input.strip():
self.io.set_placeholder(user_input.rstrip())
def cmd_edit(self, args=""):
"Alias for /editor: Open an editor to write a prompt"
return self.cmd_editor(args)
def cmd_think_tokens(self, args):
"""Set the thinking token budget, eg: 8096, 8k, 10.5k, 0.5M, or 0 to disable."""
model = self.coder.main_model
if not args.strip():
# Display current value if no args are provided
formatted_budget = model.get_thinking_tokens()
if formatted_budget is None:
self.io.tool_output("Thinking tokens are not currently set.")
else:
budget = model.get_raw_thinking_tokens()
self.io.tool_output(
f"Current thinking token budget: {budget:,} tokens ({formatted_budget})."
)
return
value = args.strip()
model.set_thinking_tokens(value)
# Handle the special case of 0 to disable thinking tokens
if value == "0":
self.io.tool_output("Thinking tokens disabled.")
else:
formatted_budget = model.get_thinking_tokens()
budget = model.get_raw_thinking_tokens()
self.io.tool_output(
f"Set thinking token budget to {budget:,} tokens ({formatted_budget})."
)
self.io.tool_output()
# Output announcements
announcements = "\n".join(self.coder.get_announcements())
self.io.tool_output(announcements)
def cmd_reasoning_effort(self, args):
"Set the reasoning effort level (values: number or low/medium/high depending on model)"
model = self.coder.main_model
if not args.strip():
# Display current value if no args are provided
reasoning_value = model.get_reasoning_effort()
if reasoning_value is None:
self.io.tool_output("Reasoning effort is not currently set.")
else:
self.io.tool_output(f"Current reasoning effort: {reasoning_value}")
return
value = args.strip()
model.set_reasoning_effort(value)
reasoning_value = model.get_reasoning_effort()
self.io.tool_output(f"Set reasoning effort to {reasoning_value}")
self.io.tool_output()
# Output announcements
announcements = "\n".join(self.coder.get_announcements())
self.io.tool_output(announcements)
def cmd_copy_context(self, args=None):
"""Copy the current chat context as markdown, suitable to paste into a web UI"""

126
aider/deprecated.py Normal file
View File

@@ -0,0 +1,126 @@
def add_deprecated_model_args(parser, group):
"""Add deprecated model shortcut arguments to the argparse parser."""
opus_model = "claude-3-opus-20240229"
group.add_argument(
"--opus",
action="store_true",
help=f"Use {opus_model} model for the main chat (deprecated, use --model)",
default=False,
)
sonnet_model = "anthropic/claude-3-7-sonnet-20250219"
group.add_argument(
"--sonnet",
action="store_true",
help=f"Use {sonnet_model} model for the main chat (deprecated, use --model)",
default=False,
)
haiku_model = "claude-3-5-haiku-20241022"
group.add_argument(
"--haiku",
action="store_true",
help=f"Use {haiku_model} model for the main chat (deprecated, use --model)",
default=False,
)
gpt_4_model = "gpt-4-0613"
group.add_argument(
"--4",
"-4",
action="store_true",
help=f"Use {gpt_4_model} model for the main chat (deprecated, use --model)",
default=False,
)
gpt_4o_model = "gpt-4o"
group.add_argument(
"--4o",
action="store_true",
help=f"Use {gpt_4o_model} model for the main chat (deprecated, use --model)",
default=False,
)
gpt_4o_mini_model = "gpt-4o-mini"
group.add_argument(
"--mini",
action="store_true",
help=f"Use {gpt_4o_mini_model} model for the main chat (deprecated, use --model)",
default=False,
)
gpt_4_turbo_model = "gpt-4-1106-preview"
group.add_argument(
"--4-turbo",
action="store_true",
help=f"Use {gpt_4_turbo_model} model for the main chat (deprecated, use --model)",
default=False,
)
gpt_3_model_name = "gpt-3.5-turbo"
group.add_argument(
"--35turbo",
"--35-turbo",
"--3",
"-3",
action="store_true",
help=f"Use {gpt_3_model_name} model for the main chat (deprecated, use --model)",
default=False,
)
deepseek_model = "deepseek/deepseek-chat"
group.add_argument(
"--deepseek",
action="store_true",
help=f"Use {deepseek_model} model for the main chat (deprecated, use --model)",
default=False,
)
o1_mini_model = "o1-mini"
group.add_argument(
"--o1-mini",
action="store_true",
help=f"Use {o1_mini_model} model for the main chat (deprecated, use --model)",
default=False,
)
o1_preview_model = "o1-preview"
group.add_argument(
"--o1-preview",
action="store_true",
help=f"Use {o1_preview_model} model for the main chat (deprecated, use --model)",
default=False,
)
def handle_deprecated_model_args(args, io):
"""Handle deprecated model shortcut arguments and provide appropriate warnings."""
# Define model mapping
model_map = {
"opus": "claude-3-opus-20240229",
"sonnet": "anthropic/claude-3-7-sonnet-20250219",
"haiku": "claude-3-5-haiku-20241022",
"4": "gpt-4-0613",
"4o": "gpt-4o",
"mini": "gpt-4o-mini",
"4_turbo": "gpt-4-1106-preview",
"35turbo": "gpt-3.5-turbo",
"deepseek": "deepseek/deepseek-chat",
"o1_mini": "o1-mini",
"o1_preview": "o1-preview",
}
# Check if any deprecated args are used
for arg_name, model_name in model_map.items():
arg_name_clean = arg_name.replace("-", "_")
if hasattr(args, arg_name_clean) and getattr(args, arg_name_clean):
# Find preferred name to display in warning
from aider.models import MODEL_ALIASES
display_name = model_name
# Check if there's a shorter alias for this model
for alias, full_name in MODEL_ALIASES.items():
if full_name == model_name:
display_name = alias
break
# Show the warning
io.tool_warning(
f"The --{arg_name.replace('_', '-')} flag is deprecated and will be removed in a"
f" future version. Please use --model {display_name} instead."
)
# Set the model
if not args.model:
args.model = model_name
break

View File

@@ -10,12 +10,13 @@ This module provides functionality to:
import os
import platform
import shlex
import subprocess
import tempfile
from rich.console import Console
from aider.dump import dump # noqa
DEFAULT_EDITOR_NIX = "vi"
DEFAULT_EDITOR_OS_X = "vim"
DEFAULT_EDITOR_WINDOWS = "notepad"
@@ -87,13 +88,13 @@ def get_environment_editor(default=None):
def discover_editor(editor_override=None):
"""
Discovers and returns the appropriate editor command as a list of arguments.
Discovers and returns the appropriate editor command.
Handles cases where the editor command includes arguments, including quoted arguments
with spaces (e.g. 'vim -c "set noswapfile"').
:return: A list of command parts ready for subprocess execution
:rtype: list[str]
:return: The editor command as a string
:rtype: str
"""
system = platform.system()
if system == "Windows":
@@ -102,14 +103,13 @@ def discover_editor(editor_override=None):
default_editor = DEFAULT_EDITOR_OS_X
else:
default_editor = DEFAULT_EDITOR_NIX
if editor_override:
editor = editor_override
else:
editor = get_environment_editor(default_editor)
try:
return shlex.split(editor)
except ValueError as e:
raise RuntimeError(f"Invalid editor command format '{editor}': {e}")
return editor
def pipe_editor(input_data="", suffix=None, editor=None):
@@ -128,9 +128,10 @@ def pipe_editor(input_data="", suffix=None, editor=None):
:rtype: str
"""
filepath = write_temp_file(input_data, suffix)
command_parts = discover_editor(editor)
command_parts.append(filepath)
subprocess.call(command_parts)
command_str = discover_editor(editor)
command_str += " " + filepath
subprocess.call(command_str, shell=True)
with open(filepath, "r") as f:
output_data = f.read()
try:

View File

@@ -1,5 +1,7 @@
from dataclasses import dataclass
from aider.dump import dump # noqa: F401
@dataclass
class ExInfo:
@@ -50,6 +52,7 @@ EXCEPTIONS = [
class LiteLLMExceptions:
exceptions = dict()
exception_info = {exi.name: exi for exi in EXCEPTIONS}
def __init__(self):
self._load()
@@ -58,20 +61,13 @@ class LiteLLMExceptions:
import litellm
for var in dir(litellm):
if not var.endswith("Error"):
continue
ex_info = None
for exi in EXCEPTIONS:
if var == exi.name:
ex_info = exi
break
if strict and not ex_info:
raise ValueError(f"{var} is in litellm but not in aider's exceptions list")
if var.endswith("Error"):
if var not in self.exception_info:
raise ValueError(f"{var} is in litellm but not in aider's exceptions list")
for var in self.exception_info:
ex = getattr(litellm, var)
self.exceptions[ex] = ex_info
self.exceptions[ex] = self.exception_info[var]
def exceptions_tuple(self):
return tuple(self.exceptions)
@@ -87,4 +83,25 @@ class LiteLLMExceptions:
)
if "boto3" in str(ex):
return ExInfo("APIConnectionError", False, "You need to: pip install boto3")
if "OpenrouterException" in str(ex) and "'choices'" in str(ex):
return ExInfo(
"APIConnectionError",
True,
(
"OpenRouter or the upstream API provider is down, overloaded or rate"
" limiting your requests."
),
)
# Check for specific non-retryable APIError cases like insufficient credits
if ex.__class__ is litellm.APIError:
err_str = str(ex).lower()
if "insufficient credits" in err_str and '"code":402' in err_str:
return ExInfo(
"APIError",
False,
"Insufficient credits with the API provider. Please add credits.",
)
# Fall through to default APIError handling if not the specific credits error
return self.exceptions.get(ex.__class__, ExInfo(None, None, None))

View File

@@ -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():

View File

@@ -1,4 +1,7 @@
# This needs to sync with MANIFEST.in
exclude_website_pats = [
"**/.DS_Store",
"examples/**",
"_posts/**",
"HISTORY.md",
@@ -7,5 +10,10 @@ exclude_website_pats = [
"docs/unified-diffs.md",
"docs/leaderboards/index.md",
"assets/**",
"**/.DS_Store",
".jekyll-metadata",
"Gemfile.lock",
"Gemfile",
"_config.yml",
"**/OLD/**",
"OLD/**",
]

View File

@@ -2,7 +2,6 @@ import argparse
from aider import models, prompts
from aider.dump import dump # noqa: F401
from aider.sendchat import simple_send_with_retries
class ChatSummary:
@@ -26,6 +25,12 @@ class ChatSummary:
return sized
def summarize(self, messages, depth=0):
messages = self.summarize_real(messages)
if messages and messages[-1]["role"] != "assistant":
messages.append(dict(role="assistant", content="Ok."))
return messages
def summarize_real(self, messages, depth=0):
if not self.models:
raise ValueError("No models available for summarization")
@@ -58,37 +63,37 @@ class ChatSummary:
if split_index <= min_split:
return self.summarize_all(messages)
head = messages[:split_index]
# Split head and tail
tail = messages[split_index:]
sized = sized[:split_index]
head.reverse()
sized.reverse()
# Only size the head once
sized_head = sized[:split_index]
# Precompute token limit (fallback to 4096 if undefined)
model_max_input_tokens = self.models[0].info.get("max_input_tokens") or 4096
model_max_input_tokens -= 512 # reserve buffer for safety
keep = []
total = 0
# These sometimes come set with value = None
model_max_input_tokens = self.models[0].info.get("max_input_tokens") or 4096
model_max_input_tokens -= 512
for i in range(split_index):
total += sized[i][0]
# Iterate in original order, summing tokens until limit
for tokens, msg in sized_head:
total += tokens
if total > model_max_input_tokens:
break
keep.append(head[i])
keep.reverse()
keep.append(msg)
# No need to reverse lists back and forth
summary = self.summarize_all(keep)
tail_tokens = sum(tokens for tokens, msg in sized[split_index:])
# If the combined summary and tail still fits, return directly
summary_tokens = self.token_count(summary)
result = summary + tail
tail_tokens = sum(tokens for tokens, _ in sized[split_index:])
if summary_tokens + tail_tokens < self.max_tokens:
return result
return summary + tail
return self.summarize(result, depth + 1)
# Otherwise recurse with increased depth
return self.summarize_real(summary + tail, depth + 1)
def summarize_all(self, messages):
content = ""
@@ -108,7 +113,7 @@ class ChatSummary:
for model in self.models:
try:
summary = simple_send_with_retries(model, summarize_messages)
summary = model.simple_send_with_retries(summarize_messages)
if summary is not None:
summary = prompts.summary_prefix + summary
return [dict(role="user", content=summary)]

View File

@@ -1,6 +1,9 @@
import base64
import functools
import os
import shutil
import signal
import subprocess
import time
import webbrowser
from collections import defaultdict
@@ -15,12 +18,15 @@ from prompt_toolkit.enums import EditingMode
from prompt_toolkit.filters import Condition, is_searching
from prompt_toolkit.history import FileHistory
from prompt_toolkit.key_binding import KeyBindings
from prompt_toolkit.key_binding.vi_state import InputMode
from prompt_toolkit.keys import Keys
from prompt_toolkit.lexers import PygmentsLexer
from prompt_toolkit.output.vt100 import is_dumb_terminal
from prompt_toolkit.shortcuts import CompleteStyle, PromptSession
from prompt_toolkit.styles import Style
from pygments.lexers import MarkdownLexer, guess_lexer_for_filename
from pygments.token import Token
from rich.color import ColorParseError
from rich.columns import Columns
from rich.console import Console
from rich.markdown import Markdown
@@ -30,8 +36,47 @@ from rich.text import Text
from aider.mdstream import MarkdownStream
from .dump import dump # noqa: F401
from .editor import pipe_editor
from .utils import is_image_file
# Constants
NOTIFICATION_MESSAGE = "Aider is waiting for your input"
def ensure_hash_prefix(color):
"""Ensure hex color values have a # prefix."""
if not color:
return color
if isinstance(color, str) and color.strip() and not color.startswith("#"):
# Check if it's a valid hex color (3 or 6 hex digits)
if all(c in "0123456789ABCDEFabcdef" for c in color) and len(color) in (3, 6):
return f"#{color}"
return color
def restore_multiline(func):
"""Decorator to restore multiline mode after function execution"""
@functools.wraps(func)
def wrapper(self, *args, **kwargs):
orig_multiline = self.multiline_mode
self.multiline_mode = False
try:
return func(self, *args, **kwargs)
except Exception:
raise
finally:
self.multiline_mode = orig_multiline
return wrapper
class CommandCompletionException(Exception):
"""Raised when a command should use the normal autocompleter instead of
command-specific completion."""
pass
@dataclass
class ConfirmGroup:
@@ -151,14 +196,23 @@ class AutoCompleter(Completer):
return
if text[0] == "/":
yield from self.get_command_completions(document, complete_event, text, words)
return
try:
yield from self.get_command_completions(document, complete_event, text, words)
return
except CommandCompletionException:
# Fall through to normal completion
pass
candidates = self.words
candidates.update(set(self.fname_to_rel_fnames))
candidates = [word if type(word) is tuple else (word, word) for word in candidates]
last_word = words[-1]
# Only provide completions if the user has typed at least 3 characters
if len(last_word) < 3:
return
completions = []
for word_match, word_insert in candidates:
if word_match.lower().startswith(last_word.lower()):
@@ -177,6 +231,8 @@ class InputOutput:
num_error_outputs = 0
num_user_asks = 0
clipboard_watcher = None
bell_on_next_input = False
notifications_command = None
def __init__(
self,
@@ -197,31 +253,48 @@ class InputOutput:
completion_menu_current_bg_color=None,
code_theme="default",
encoding="utf-8",
line_endings="platform",
dry_run=False,
llm_history_file=None,
editingmode=EditingMode.EMACS,
fancy_input=True,
file_watcher=None,
multiline_mode=False,
root=".",
notifications=False,
notifications_command=None,
):
self.placeholder = None
self.interrupted = False
self.never_prompts = set()
self.editingmode = editingmode
self.multiline_mode = multiline_mode
self.bell_on_next_input = False
self.notifications = notifications
if notifications and notifications_command is None:
self.notifications_command = self.get_default_notification_command()
else:
self.notifications_command = notifications_command
no_color = os.environ.get("NO_COLOR")
if no_color is not None and no_color != "":
pretty = False
self.user_input_color = user_input_color if pretty else None
self.tool_output_color = tool_output_color if pretty else None
self.tool_error_color = tool_error_color if pretty else None
self.tool_warning_color = tool_warning_color if pretty else None
self.assistant_output_color = assistant_output_color
self.completion_menu_color = completion_menu_color if pretty else None
self.completion_menu_bg_color = completion_menu_bg_color if pretty else None
self.completion_menu_current_color = completion_menu_current_color if pretty else None
self.completion_menu_current_bg_color = completion_menu_current_bg_color if pretty else None
self.user_input_color = ensure_hash_prefix(user_input_color) if pretty else None
self.tool_output_color = ensure_hash_prefix(tool_output_color) if pretty else None
self.tool_error_color = ensure_hash_prefix(tool_error_color) if pretty else None
self.tool_warning_color = ensure_hash_prefix(tool_warning_color) if pretty else None
self.assistant_output_color = ensure_hash_prefix(assistant_output_color)
self.completion_menu_color = ensure_hash_prefix(completion_menu_color) if pretty else None
self.completion_menu_bg_color = (
ensure_hash_prefix(completion_menu_bg_color) if pretty else None
)
self.completion_menu_current_color = (
ensure_hash_prefix(completion_menu_current_color) if pretty else None
)
self.completion_menu_current_bg_color = (
ensure_hash_prefix(completion_menu_current_bg_color) if pretty else None
)
self.code_theme = code_theme
@@ -235,6 +308,12 @@ class InputOutput:
self.yes = yes
self.input_history_file = input_history_file
if self.input_history_file:
try:
Path(self.input_history_file).parent.mkdir(parents=True, exist_ok=True)
except (PermissionError, OSError) as e:
self.tool_warning(f"Could not create directory for input history: {e}")
self.input_history_file = None
self.llm_history_file = llm_history_file
if chat_history_file is not None:
self.chat_history_file = Path(chat_history_file)
@@ -242,14 +321,29 @@ class InputOutput:
self.chat_history_file = None
self.encoding = encoding
valid_line_endings = {"platform", "lf", "crlf"}
if line_endings not in valid_line_endings:
raise ValueError(
f"Invalid line_endings value: {line_endings}. "
f"Must be one of: {', '.join(valid_line_endings)}"
)
self.newline = (
None if line_endings == "platform" else "\n" if line_endings == "lf" else "\r\n"
)
self.dry_run = dry_run
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.append_chat_history(f"\n# aider chat started at {current_time}\n\n")
self.prompt_session = None
self.is_dumb_terminal = is_dumb_terminal()
if self.is_dumb_terminal:
self.pretty = False
fancy_input = False
if fancy_input:
# Initialize PromptSession
# Initialize PromptSession only if we have a capable terminal
session_kwargs = {
"input": self.input,
"output": self.output,
@@ -268,8 +362,40 @@ class InputOutput:
self.tool_error(f"Can't initialize prompt toolkit: {err}") # non-pretty
else:
self.console = Console(force_terminal=False, no_color=True) # non-pretty
if self.is_dumb_terminal:
self.tool_output("Detected dumb terminal, disabling fancy input and pretty output.")
self.file_watcher = file_watcher
self.root = root
# Validate color settings after console is initialized
self._validate_color_settings()
def _validate_color_settings(self):
"""Validate configured color strings and reset invalid ones."""
color_attributes = [
"user_input_color",
"tool_output_color",
"tool_error_color",
"tool_warning_color",
"assistant_output_color",
"completion_menu_color",
"completion_menu_bg_color",
"completion_menu_current_color",
"completion_menu_current_bg_color",
]
for attr_name in color_attributes:
color_value = getattr(self, attr_name, None)
if color_value:
try:
# Try creating a style to validate the color
RichStyle(color=color_value)
except ColorParseError as e:
self.console.print(
"[bold red]Warning:[/bold red] Invalid configuration for"
f" {attr_name}: '{color_value}'. {e}. Disabling this color."
)
setattr(self, attr_name, None) # Reset invalid color to None
def _get_style(self):
style_dict = {}
@@ -296,9 +422,9 @@ class InputOutput:
# Conditionally add 'completion-menu.completion.current' style
completion_menu_current_style = []
if self.completion_menu_current_bg_color:
completion_menu_current_style.append(f"bg:{self.completion_menu_current_bg_color}")
completion_menu_current_style.append(self.completion_menu_current_bg_color)
if self.completion_menu_current_color:
completion_menu_current_style.append(self.completion_menu_current_color)
completion_menu_current_style.append(f"bg:{self.completion_menu_current_color}")
if completion_menu_current_style:
style_dict["completion-menu.completion.current"] = " ".join(
completion_menu_current_style
@@ -331,10 +457,6 @@ class InputOutput:
try:
with open(str(filename), "r", encoding=self.encoding) as f:
return f.read()
except OSError as err:
if not silent:
self.tool_error(f"{filename}: unable to read: {err}")
return
except FileNotFoundError:
if not silent:
self.tool_error(f"{filename}: file not found error")
@@ -343,6 +465,10 @@ class InputOutput:
if not silent:
self.tool_error(f"{filename}: is a directory")
return
except OSError as err:
if not silent:
self.tool_error(f"{filename}: unable to read: {err}")
return
except UnicodeError as e:
if not silent:
self.tool_error(f"{filename}: {e}")
@@ -364,7 +490,7 @@ class InputOutput:
delay = initial_delay
for attempt in range(max_retries):
try:
with open(str(filename), "w", encoding=self.encoding) as f:
with open(str(filename), "w", encoding=self.encoding, newline=self.newline) as f:
f.write(content)
return # Successfully wrote the file
except PermissionError as err:
@@ -405,6 +531,9 @@ class InputOutput:
):
self.rule()
# Ring the bell if needed
self.ring_bell()
rel_fnames = list(rel_fnames)
show = ""
if rel_fnames:
@@ -412,11 +541,16 @@ class InputOutput:
get_rel_fname(fname, root) for fname in (abs_read_only_fnames or [])
]
show = self.format_files_for_input(rel_fnames, rel_read_only_fnames)
prompt_prefix = ""
if edit_format:
show += edit_format
prompt_prefix += edit_format
if self.multiline_mode:
show += (" " if edit_format else "") + "multi"
show += "> "
prompt_prefix += (" " if edit_format else "") + "multi"
prompt_prefix += "> "
show += prompt_prefix
self.prompt_prefix = prompt_prefix
inp = ""
multiline_input = False
@@ -460,11 +594,30 @@ class InputOutput:
"Navigate forward through history"
event.current_buffer.history_forward()
@kb.add("c-x", "c-e")
def _(event):
"Edit current input in external editor (like Bash)"
buffer = event.current_buffer
current_text = buffer.text
# Open the editor with the current text
edited_text = pipe_editor(input_data=current_text, suffix="md")
# Replace the buffer with the edited text, strip any trailing newlines
buffer.text = edited_text.rstrip("\n")
# Move cursor to the end of the text
buffer.cursor_position = len(buffer.text)
@kb.add("enter", eager=True, filter=~is_searching)
def _(event):
"Handle Enter key press"
if self.multiline_mode:
# In multiline mode, Enter adds a newline
if self.multiline_mode and not (
self.editingmode == EditingMode.VI
and event.app.vi_state.input_mode == InputMode.NAVIGATION
):
# In multiline mode and if not in vi-mode or vi navigation/normal mode,
# Enter adds a newline
event.current_buffer.insert_text("\n")
else:
# In normal mode, Enter submits
@@ -482,7 +635,7 @@ class InputOutput:
while True:
if multiline_input:
show = ". "
show = self.prompt_prefix
try:
if self.prompt_session:
@@ -497,6 +650,9 @@ class InputOutput:
if self.clipboard_watcher:
self.clipboard_watcher.start()
def get_continuation(width, line_number, is_soft_wrap):
return self.prompt_prefix
line = self.prompt_session.prompt(
show,
default=default,
@@ -505,6 +661,8 @@ class InputOutput:
complete_style=CompleteStyle.MULTI_COLUMN,
style=style,
key_bindings=kb,
complete_while_typing=True,
prompt_continuation=get_continuation,
)
else:
line = input(show)
@@ -597,9 +755,14 @@ class InputOutput:
if not self.llm_history_file:
return
timestamp = datetime.now().isoformat(timespec="seconds")
with open(self.llm_history_file, "a", encoding=self.encoding) as log_file:
log_file.write(f"{role.upper()} {timestamp}\n")
log_file.write(content + "\n")
try:
Path(self.llm_history_file).parent.mkdir(parents=True, exist_ok=True)
with open(self.llm_history_file, "a", encoding="utf-8") as log_file:
log_file.write(f"{role.upper()} {timestamp}\n")
log_file.write(content + "\n")
except (PermissionError, OSError) as err:
self.tool_warning(f"Unable to write to llm history file {self.llm_history_file}: {err}")
self.llm_history_file = None
def display_user_input(self, inp):
if self.pretty and self.user_input_color:
@@ -640,6 +803,7 @@ class InputOutput:
return True
return False
@restore_multiline
def confirm_ask(
self,
question,
@@ -649,11 +813,11 @@ class InputOutput:
group=None,
allow_never=False,
):
# Temporarily disable multiline mode for yes/no prompts
orig_multiline = self.multiline_mode
self.multiline_mode = False
self.num_user_asks += 1
# Ring the bell if needed
self.ring_bell()
question_id = (question, subject)
if question_id in self.never_prompts:
@@ -664,19 +828,22 @@ class InputOutput:
if group:
allow_never = True
valid_responses = ["yes", "no"]
valid_responses = ["yes", "no", "skip", "all"]
options = " (Y)es/(N)o"
if group:
if not explicit_yes_required:
options += "/(A)ll"
valid_responses.append("all")
options += "/(S)kip all"
valid_responses.append("skip")
if allow_never:
options += "/(D)on't ask again"
valid_responses.append("don't")
question += options + " [Yes]: "
if default.lower().startswith("y"):
question += options + " [Yes]: "
elif default.lower().startswith("n"):
question += options + " [No]: "
else:
question += options + f" [{default}]: "
if subject:
self.tool_output()
@@ -705,17 +872,22 @@ class InputOutput:
self.user_input(f"{question}{res}", log_only=False)
else:
while True:
if self.prompt_session:
res = self.prompt_session.prompt(
question,
style=style,
complete_while_typing=False,
)
else:
res = input(question)
try:
if self.prompt_session:
res = self.prompt_session.prompt(
question,
style=style,
complete_while_typing=False,
)
else:
res = input(question)
except EOFError:
# Treat EOF (Ctrl+D) as if the user pressed Enter
res = default
break
if not res:
res = "y" # Default to Yes if no input
res = default
break
res = res.lower()
good = any(valid_response.startswith(res) for valid_response in valid_responses)
@@ -750,17 +922,15 @@ class InputOutput:
hist = f"{question.strip()} {res}"
self.append_chat_history(hist, linebreak=True, blockquote=True)
# Restore original multiline mode
self.multiline_mode = orig_multiline
return is_yes
@restore_multiline
def prompt_ask(self, question, default="", subject=None):
# Temporarily disable multiline mode for prompts
orig_multiline = self.multiline_mode
self.multiline_mode = False
self.num_user_asks += 1
# Ring the bell if needed
self.ring_bell()
if subject:
self.tool_output()
self.tool_output(subject, bold=True)
@@ -772,19 +942,25 @@ class InputOutput:
elif self.yes is False:
res = "no"
else:
if self.prompt_session:
res = self.prompt_session.prompt(question + " ", default=default, style=style)
else:
res = input(question + " ")
try:
if self.prompt_session:
res = self.prompt_session.prompt(
question + " ",
default=default,
style=style,
complete_while_typing=True,
)
else:
res = input(question + " ")
except EOFError:
# Treat EOF (Ctrl+D) as if the user pressed Enter
res = default
hist = f"{question.strip()} {res.strip()}"
self.append_chat_history(hist, linebreak=True, blockquote=True)
if self.yes in (True, False):
self.tool_output(hist)
# Restore original multiline mode
self.multiline_mode = orig_multiline
return res
def _tool_message(self, message="", strip=True, color=None):
@@ -796,9 +972,18 @@ class InputOutput:
hist = message.strip() if strip else message
self.append_chat_history(hist, linebreak=True, blockquote=True)
message = Text(message)
if not isinstance(message, Text):
message = Text(message)
color = ensure_hash_prefix(color) if color else None
style = dict(style=color) if self.pretty and color else dict()
self.console.print(message, **style)
try:
self.console.print(message, **style)
except UnicodeEncodeError:
# Fallback to ASCII-safe output
if isinstance(message, Text):
message = message.plain
message = str(message).encode("ascii", errors="replace").decode("ascii")
self.console.print(message, **style)
def tool_error(self, message="", strip=True):
self.num_error_outputs += 1
@@ -820,18 +1005,26 @@ class InputOutput:
style = dict()
if self.pretty:
if self.tool_output_color:
style["color"] = self.tool_output_color
style["color"] = ensure_hash_prefix(self.tool_output_color)
style["reverse"] = bold
style = RichStyle(**style)
self.console.print(*messages, style=style)
def get_assistant_mdstream(self):
mdargs = dict(style=self.assistant_output_color, code_theme=self.code_theme)
mdargs = dict(
style=self.assistant_output_color,
code_theme=self.code_theme,
inline_code_lexer="text",
)
mdStream = MarkdownStream(mdargs=mdargs)
return mdStream
def assistant_output(self, message, pretty=None):
if not message:
self.tool_warning("Empty response received from LLM. Check your provider account?")
return
show_resp = message
# Coder will force pretty off if fence is not triple-backticks
@@ -843,7 +1036,7 @@ class InputOutput:
message, style=self.assistant_output_color, code_theme=self.code_theme
)
else:
show_resp = Text(message or "<no response>")
show_resp = Text(message or "(empty response)")
self.console.print(show_resp)
@@ -854,6 +1047,61 @@ class InputOutput:
def print(self, message=""):
print(message)
def llm_started(self):
"""Mark that the LLM has started processing, so we should ring the bell on next input"""
self.bell_on_next_input = True
def get_default_notification_command(self):
"""Return a default notification command based on the operating system."""
import platform
system = platform.system()
if system == "Darwin": # macOS
# Check for terminal-notifier first
if shutil.which("terminal-notifier"):
return f"terminal-notifier -title 'Aider' -message '{NOTIFICATION_MESSAGE}'"
# Fall back to osascript
return (
f'osascript -e \'display notification "{NOTIFICATION_MESSAGE}" with title "Aider"\''
)
elif system == "Linux":
# Check for common Linux notification tools
for cmd in ["notify-send", "zenity"]:
if shutil.which(cmd):
if cmd == "notify-send":
return f"notify-send 'Aider' '{NOTIFICATION_MESSAGE}'"
elif cmd == "zenity":
return f"zenity --notification --text='{NOTIFICATION_MESSAGE}'"
return None # No known notification tool found
elif system == "Windows":
# PowerShell notification
return (
"powershell -command"
" \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms');"
f" [System.Windows.Forms.MessageBox]::Show('{NOTIFICATION_MESSAGE}',"
" 'Aider')\""
)
return None # Unknown system
def ring_bell(self):
"""Ring the terminal bell if needed and clear the flag"""
if self.bell_on_next_input and self.notifications:
if self.notifications_command:
try:
result = subprocess.run(
self.notifications_command, shell=True, capture_output=True
)
if result.returncode != 0 and result.stderr:
error_msg = result.stderr.decode("utf-8", errors="replace")
self.tool_warning(f"Failed to run notifications command: {error_msg}")
except Exception as e:
self.tool_warning(f"Failed to run notifications command: {e}")
else:
print("\a", end="", flush=True) # Ring the bell
self.bell_on_next_input = False # Clear the flag
def toggle_multiline_mode(self):
"""Toggle between normal and multiline input modes"""
self.multiline_mode = not self.multiline_mode
@@ -879,6 +1127,7 @@ class InputOutput:
text += "\n"
if self.chat_history_file is not None:
try:
self.chat_history_file.parent.mkdir(parents=True, exist_ok=True)
with self.chat_history_file.open("a", encoding=self.encoding, errors="ignore") as f:
f.write(text)
except (PermissionError, OSError) as err:
@@ -907,16 +1156,23 @@ class InputOutput:
editable_files = [f for f in sorted(rel_fnames) if f not in rel_read_only_fnames]
if read_only_files:
files_with_label = ["Readonly:"] + read_only_files
# Use shorter of abs/rel paths for readonly files
ro_paths = []
for rel_path in read_only_files:
abs_path = os.path.abspath(os.path.join(self.root, rel_path))
ro_paths.append(Text(abs_path if len(abs_path) < len(rel_path) else rel_path))
files_with_label = [Text("Readonly:")] + ro_paths
read_only_output = StringIO()
Console(file=read_only_output, force_terminal=False).print(Columns(files_with_label))
read_only_lines = read_only_output.getvalue().splitlines()
console.print(Columns(files_with_label))
if editable_files:
files_with_label = editable_files
text_editable_files = [Text(f) for f in editable_files]
files_with_label = text_editable_files
if read_only_files:
files_with_label = ["Editable:"] + editable_files
files_with_label = [Text("Editable:")] + text_editable_files
editable_output = StringIO()
Console(file=editable_output, force_terminal=False).print(Columns(files_with_label))
editable_lines = editable_output.getvalue().splitlines()

View File

@@ -7,10 +7,12 @@ import warnings
from dataclasses import dataclass
from pathlib import Path
import oslex
from grep_ast import TreeContext, filename_to_lang
from tree_sitter_languages import get_parser # noqa: E402
from grep_ast.tsl import get_parser # noqa: E402
from aider.dump import dump # noqa: F401
from aider.run_cmd import run_cmd_subprocess # noqa: F401
# tree_sitter is throwing a FutureWarning
warnings.simplefilter("ignore", category=FutureWarning)
@@ -43,27 +45,23 @@ class Linter:
return fname
def run_cmd(self, cmd, rel_fname, code):
cmd += " " + rel_fname
cmd = cmd.split()
cmd += " " + oslex.quote(rel_fname)
returncode = 0
stdout = ""
try:
process = subprocess.Popen(
returncode, stdout = run_cmd_subprocess(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
encoding=self.encoding,
errors="replace",
cwd=self.root,
encoding=self.encoding,
)
except OSError as err:
print(f"Unable to execute lint command: {err}")
return
stdout, _ = process.communicate()
errors = stdout
if process.returncode == 0:
if returncode == 0:
return # zero exit status
cmd = " ".join(cmd)
res = f"## Running: {cmd}\n\n"
res += errors

View File

@@ -2,6 +2,8 @@ import importlib
import os
import warnings
from aider.dump import dump # noqa: F401
warnings.filterwarnings("ignore", category=UserWarning, module="pydantic")
AIDER_SITE_URL = "https://aider.chat"

View File

@@ -1,4 +1,3 @@
import configparser
import json
import os
import re
@@ -9,8 +8,13 @@ import webbrowser
from dataclasses import fields
from pathlib import Path
import git
try:
import git
except ImportError:
git = None
import importlib_resources
import shtab
from dotenv import load_dotenv
from prompt_toolkit.enums import EditingMode
@@ -21,11 +25,13 @@ from aider.coders import Coder
from aider.coders.base_coder import UnknownEditFormat
from aider.commands import Commands, SwitchCoder
from aider.copypaste import ClipboardWatcher
from aider.deprecated import handle_deprecated_model_args
from aider.format_settings import format_settings, scrub_sensitive_info
from aider.history import ChatSummary
from aider.io import InputOutput
from aider.llm import litellm # noqa: F401; properly init litellm on launch
from aider.models import ModelSettings
from aider.onboarding import offer_openrouter_oauth, select_default_model
from aider.repo import ANY_GIT_ERROR, GitRepo
from aider.report import report_uncaught_exceptions
from aider.versioncheck import check_version, install_from_main_branch, install_upgrade
@@ -93,6 +99,9 @@ def make_new_repo(git_root, io):
def setup_git(git_root, io):
if git is None:
return
try:
cwd = Path.cwd()
except OSError:
@@ -106,7 +115,9 @@ def setup_git(git_root, io):
except ANY_GIT_ERROR:
pass
elif cwd == Path.home():
io.tool_warning("You should probably run aider in a directory, not your home dir.")
io.tool_warning(
"You should probably run aider in your project's directory, not your home dir."
)
return
elif cwd and io.confirm_ask(
"No git repo found, create one to track aider's changes (recommended)?"
@@ -117,17 +128,15 @@ def setup_git(git_root, io):
if not repo:
return
user_name = None
user_email = None
with repo.config_reader() as config:
try:
user_name = config.get_value("user", "name", None)
except (configparser.NoSectionError, configparser.NoOptionError):
pass
try:
user_email = config.get_value("user", "email", None)
except (configparser.NoSectionError, configparser.NoOptionError):
pass
try:
user_name = repo.git.config("--get", "user.name") or None
except git.exc.GitCommandError:
user_name = None
try:
user_email = repo.git.config("--get", "user.email") or None
except git.exc.GitCommandError:
user_email = None
if user_name and user_email:
return repo.working_tree_dir
@@ -149,39 +158,39 @@ def check_gitignore(git_root, io, ask=True):
try:
repo = git.Repo(git_root)
if repo.ignored(".aider") and repo.ignored(".env"):
patterns_to_add = []
if not repo.ignored(".aider"):
patterns_to_add.append(".aider*")
env_path = Path(git_root) / ".env"
if env_path.exists() and not repo.ignored(".env"):
patterns_to_add.append(".env")
if not patterns_to_add:
return
except ANY_GIT_ERROR:
pass
patterns = [".aider*", ".env"]
patterns_to_add = []
gitignore_file = Path(git_root) / ".gitignore"
if gitignore_file.exists():
try:
content = io.read_text(gitignore_file)
if content is None:
gitignore_file = Path(git_root) / ".gitignore"
if gitignore_file.exists():
try:
content = io.read_text(gitignore_file)
if content is None:
return
if not content.endswith("\n"):
content += "\n"
except OSError as e:
io.tool_error(f"Error when trying to read {gitignore_file}: {e}")
return
existing_lines = content.splitlines()
for pat in patterns:
if pat not in existing_lines:
patterns_to_add.append(pat)
except OSError as e:
io.tool_error(f"Error when trying to read {gitignore_file}: {e}")
else:
content = ""
except ANY_GIT_ERROR:
return
if ask:
io.tool_output("You can skip this check with --no-gitignore")
if not io.confirm_ask(f"Add {', '.join(patterns_to_add)} to .gitignore (recommended)?"):
return
else:
content = ""
patterns_to_add = patterns
if not patterns_to_add:
return
if ask and not io.confirm_ask(f"Add {', '.join(patterns_to_add)} to .gitignore (recommended)?"):
return
if content and not content.endswith("\n"):
content += "\n"
content += "\n".join(patterns_to_add) + "\n"
try:
@@ -205,6 +214,22 @@ def check_streamlit_install(io):
)
def write_streamlit_credentials():
from streamlit.file_util import get_streamlit_file_path
# See https://github.com/Aider-AI/aider/issues/772
credential_path = Path(get_streamlit_file_path()) / "credentials.toml"
if not os.path.exists(credential_path):
empty_creds = '[general]\nemail = ""\n'
os.makedirs(os.path.dirname(credential_path), exist_ok=True)
with open(credential_path, "w") as f:
f.write(empty_creds)
else:
print("Streamlit credentials already exist.")
def launch_gui(args):
from streamlit.web import cli
@@ -213,6 +238,9 @@ def launch_gui(args):
print()
print("CONTROL-C to exit...")
# Necessary so streamlit does not prompt the user for an email address.
write_streamlit_credentials()
target = gui.__file__
st_args = ["run", target]
@@ -331,11 +359,21 @@ def register_models(git_root, model_settings_fname, io, verbose=False):
def load_dotenv_files(git_root, dotenv_fname, encoding="utf-8"):
# Standard .env file search path
dotenv_files = generate_search_path_list(
".env",
git_root,
dotenv_fname,
)
# Explicitly add the OAuth keys file to the beginning of the list
oauth_keys_file = Path.home() / ".aider" / "oauth-keys.env"
if oauth_keys_file.exists():
# Insert at the beginning so it's loaded first (and potentially overridden)
dotenv_files.insert(0, str(oauth_keys_file.resolve()))
# Remove duplicates if it somehow got included by generate_search_path_list
dotenv_files = list(dict.fromkeys(dotenv_files))
loaded = []
for fname in dotenv_files:
try:
@@ -350,18 +388,18 @@ def load_dotenv_files(git_root, dotenv_fname, encoding="utf-8"):
def register_litellm_models(git_root, model_metadata_fname, io, verbose=False):
model_metatdata_files = []
model_metadata_files = []
# Add the resource file path
resource_metadata = importlib_resources.files("aider.resources").joinpath("model-metadata.json")
model_metatdata_files.append(str(resource_metadata))
model_metadata_files.append(str(resource_metadata))
model_metatdata_files += generate_search_path_list(
model_metadata_files += generate_search_path_list(
".aider.model.metadata.json", git_root, model_metadata_fname
)
try:
model_metadata_files_loaded = models.register_litellm_models(model_metatdata_files)
model_metadata_files_loaded = models.register_litellm_models(model_metadata_files)
if len(model_metadata_files_loaded) > 0 and verbose:
io.tool_output("Loaded model metadata from:")
for model_metadata_file in model_metadata_files_loaded:
@@ -385,6 +423,12 @@ def sanity_check_repo(repo, io):
if not repo.git_repo_error:
return True
error_msg = str(repo.git_repo_error)
except UnicodeDecodeError as exc:
error_msg = (
"Failed to read the Git repository. This issue is likely caused by a path encoded "
f'in a format different from the expected encoding "{sys.getfilesystemencoding()}".\n'
f"Internal error: {str(exc)}"
)
except ANY_GIT_ERROR as exc:
error_msg = str(exc)
bad_ver = "version in (1, 2)" in error_msg
@@ -410,7 +454,9 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
if argv is None:
argv = sys.argv[1:]
if force_git_root:
if git is None:
git_root = None
elif force_git_root:
git_root = force_git_root
else:
git_root = get_git_root()
@@ -457,6 +503,15 @@ 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
if args.analytics_disable:
analytics = Analytics(permanently_disable=True)
print("Analytics have been permanently disabled.")
@@ -468,10 +523,11 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
litellm._load_litellm()
litellm._lazy_module.client_session = httpx.Client(verify=False)
litellm._lazy_module.aclient_session = httpx.AsyncClient(verify=False)
# Set verify_ssl on the model_info_manager
models.model_info_manager.set_verify_ssl(False)
if args.timeout:
litellm._load_litellm()
litellm._lazy_module.request_timeout = args.timeout
models.request_timeout = args.timeout
if args.dark_mode:
args.user_input_color = "#32FF32"
@@ -512,10 +568,13 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
code_theme=args.code_theme,
dry_run=args.dry_run,
encoding=args.encoding,
line_endings=args.line_endings,
llm_history_file=args.llm_history_file,
editingmode=editing_mode,
fancy_input=args.fancy_input,
multiline_mode=args.multiline,
notifications=args.notifications,
notifications_command=args.notifications_command,
)
io = get_io(args.pretty)
@@ -555,6 +614,9 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
if args.openai_api_key:
os.environ["OPENAI_API_KEY"] = args.openai_api_key
# Handle deprecated model shortcut args
handle_deprecated_model_args(args, io)
if args.openai_api_base:
os.environ["OPENAI_API_BASE"] = args.openai_api_base
if args.openai_api_version:
@@ -571,7 +633,12 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
)
os.environ["OPENAI_ORGANIZATION"] = args.openai_organization_id
analytics = Analytics(logfile=args.analytics_log, permanently_disable=args.analytics_disable)
analytics = Analytics(
logfile=args.analytics_log,
permanently_disable=args.analytics_disable,
posthog_host=args.analytics_posthog_host,
posthog_project_api_key=args.analytics_posthog_project_api_key,
)
if args.analytics is not False:
if analytics.need_to_ask(args.analytics):
io.tool_output(
@@ -646,7 +713,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
# We can't know the git repo for sure until after parsing the args.
# If we guessed wrong, reparse because that changes things like
# the location of the config.yml and history files.
if args.git and not force_git_root:
if args.git and not force_git_root and git is not None:
right_repo_root = guessed_wrong_repo(io, git_root, fnames, git_dname)
if right_repo_root:
analytics.event("exit", reason="Recursing with correct repo")
@@ -670,11 +737,6 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
if args.check_update:
check_version(io, verbose=args.verbose)
if args.list_models:
models.print_matching_models(io, args.list_models)
analytics.event("exit", reason="Listed models")
return 0
if args.git:
git_root = setup_git(git_root, io)
if args.gitignore:
@@ -694,6 +756,11 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
register_models(git_root, args.model_settings_file, io, verbose=args.verbose)
register_litellm_models(git_root, args.model_metadata_file, io, verbose=args.verbose)
if args.list_models:
models.print_matching_models(io, args.list_models)
analytics.event("exit", reason="Listed models")
return 0
# Process any command line aliases
if args.alias:
for alias_def in args.alias:
@@ -707,20 +774,102 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
alias, model = parts
models.MODEL_ALIASES[alias.strip()] = model.strip()
if not args.model:
args.model = "gpt-4o-2024-08-06"
if os.environ.get("ANTHROPIC_API_KEY"):
args.model = "claude-3-5-sonnet-20241022"
selected_model_name = select_default_model(args, io, analytics)
if not selected_model_name:
# Error message and analytics event are handled within select_default_model
# It might have already offered OAuth if no model/keys were found.
# If it failed here, we exit.
return 1
args.model = selected_model_name # Update args with the selected model
# Check if an OpenRouter model was selected/specified but the key is missing
if args.model.startswith("openrouter/") and not os.environ.get("OPENROUTER_API_KEY"):
io.tool_warning(
f"The specified model '{args.model}' requires an OpenRouter API key, which was not"
" found."
)
# Attempt OAuth flow because the specific model needs it
if offer_openrouter_oauth(io, analytics):
# OAuth succeeded, the key should now be in os.environ.
# Check if the key is now present after the flow.
if os.environ.get("OPENROUTER_API_KEY"):
io.tool_output(
"OpenRouter successfully connected."
) # Inform user connection worked
else:
# This case should ideally not happen if offer_openrouter_oauth succeeded
# but check defensively.
io.tool_error(
"OpenRouter authentication seemed successful, but the key is still missing."
)
analytics.event(
"exit",
reason="OpenRouter key missing after successful OAuth for specified model",
)
return 1
else:
# OAuth failed or was declined by the user
io.tool_error(
f"Unable to proceed without an OpenRouter API key for model '{args.model}'."
)
io.offer_url(urls.models_and_keys, "Open documentation URL for more info?")
analytics.event(
"exit",
reason="OpenRouter key missing for specified model and OAuth failed/declined",
)
return 1
main_model = models.Model(
args.model,
weak_model=args.weak_model,
editor_model=args.editor_model,
editor_edit_format=args.editor_edit_format,
verbose=args.verbose,
)
# Check if deprecated remove_reasoning is set
if main_model.remove_reasoning is not None:
io.tool_warning(
"Model setting 'remove_reasoning' is deprecated, please use 'reasoning_tag' instead."
)
# Set reasoning effort and thinking tokens if specified
if args.reasoning_effort is not None:
# Apply if check is disabled or model explicitly supports it
if not args.check_model_accepts_settings or (
main_model.accepts_settings and "reasoning_effort" in main_model.accepts_settings
):
main_model.set_reasoning_effort(args.reasoning_effort)
if args.thinking_tokens is not None:
# Apply if check is disabled or model explicitly supports it
if not args.check_model_accepts_settings or (
main_model.accepts_settings and "thinking_tokens" in main_model.accepts_settings
):
main_model.set_thinking_tokens(args.thinking_tokens)
# Show warnings about unsupported settings that are being ignored
if args.check_model_accepts_settings:
settings_to_check = [
{"arg": args.reasoning_effort, "name": "reasoning_effort"},
{"arg": args.thinking_tokens, "name": "thinking_tokens"},
]
for setting in settings_to_check:
if setting["arg"] is not None and (
not main_model.accepts_settings
or setting["name"] not in main_model.accepts_settings
):
io.tool_warning(
f"Warning: {main_model.name} does not support '{setting['name']}', ignoring."
)
io.tool_output(
f"Use --no-check-model-accepts-settings to force the '{setting['name']}'"
" setting."
)
if args.copy_paste and args.edit_format is None:
if main_model.edit_format in ("diff", "whole"):
if main_model.edit_format in ("diff", "whole", "diff-fenced"):
main_model.edit_format = "editor-" + main_model.edit_format
if args.verbose:
@@ -766,6 +915,8 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
attribute_commit_message_committer=args.attribute_commit_message_committer,
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
@@ -775,19 +926,24 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
analytics.event("exit", reason="Repository sanity check failed")
return 1
if repo:
analytics.event("repo", num_files=len(repo.get_tracked_files()))
if repo and not args.skip_sanity_check_repo:
num_files = len(repo.get_tracked_files())
analytics.event("repo", num_files=num_files)
else:
analytics.event("no-repo")
commands = Commands(
io,
None,
voice_language=args.voice_language,
voice_input_device=args.voice_input_device,
voice_format=args.voice_format,
verify_ssl=args.verify_ssl,
args=args,
parser=parser,
verbose=args.verbose,
editor=args.editor,
original_read_only_fnames=read_only_fnames,
)
summarizer = ChatSummary(
@@ -805,6 +961,14 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
)
args.stream = False
if args.map_tokens is None:
map_tokens = main_model.get_repo_map_tokens()
else:
map_tokens = args.map_tokens
# Track auto-commits configuration
analytics.event("auto_commits", enabled=bool(args.auto_commits))
try:
coder = Coder.create(
main_model=main_model,
@@ -817,7 +981,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
auto_commits=args.auto_commits,
dirty_commits=args.dirty_commits,
dry_run=args.dry_run,
map_tokens=args.map_tokens,
map_tokens=map_tokens,
verbose=args.verbose,
stream=args.stream,
use_git=args.git,
@@ -835,8 +999,11 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
num_cache_warming_pings=args.cache_keepalive_pings,
suggest_shell_commands=args.suggest_shell_commands,
chat_language=args.chat_language,
commit_language=args.commit_language,
detect_urls=args.detect_urls,
auto_copy_context=args.copy_paste,
auto_accept_architect=args.auto_accept_architect,
add_gitignore_files=args.add_gitignore_files,
)
except UnknownEditFormat as err:
io.tool_error(str(err))
@@ -860,7 +1027,11 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
if args.watch_files:
file_watcher = FileWatcher(
coder, gitignores=ignores, verbose=args.verbose, analytics=analytics
coder,
gitignores=ignores,
verbose=args.verbose,
analytics=analytics,
root=str(Path.cwd()) if args.subtree_only else None,
)
coder.file_watcher = file_watcher
@@ -914,6 +1085,9 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
analytics.event("exit", reason="Failed to read apply content")
return
coder.partial_response_content = content
# For testing #2879
# from aider.coders.base_coder import all_fences
# coder.fence = all_fences[1]
coder.apply_updates()
analytics.event("exit", reason="Applied updates")
return
@@ -943,6 +1117,9 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
io.tool_output(f"Cur working dir: {Path.cwd()}")
io.tool_output(f"Git working dir: {git_root}")
if args.stream and args.cache_prompts:
io.tool_warning("Cost estimates may be inaccurate when using streaming and caching.")
if args.load:
commands.cmd_load(args.load)
@@ -981,10 +1158,17 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
while True:
try:
coder.ok_to_warm_cache = bool(args.cache_keepalive_pings)
coder.run()
analytics.event("exit", reason="Completed main CLI coder.run")
return
except SwitchCoder as switch:
coder.ok_to_warm_cache = False
# Set the placeholder if provided
if hasattr(switch, "placeholder") and switch.placeholder is not None:
io.placeholder = switch.placeholder
kwargs = dict(io=io, from_coder=coder)
kwargs.update(switch.kwargs)
if "show_announcements" in kwargs:

View File

@@ -3,17 +3,27 @@
import io
import time
from rich import box
from rich.console import Console
from rich.live import Live
from rich.markdown import Markdown
from rich.markdown import CodeBlock, Heading, Markdown
from rich.panel import Panel
from rich.syntax import Syntax
from rich.text import Text
from aider.dump import dump # noqa: F401
_text = """
_text_prefix = """
# Header
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
when an unknown printer took a galley of type and scrambled it to make a type
specimen book. It has survived not only five centuries, but also the leap into
electronic typesetting, remaining essentially unchanged. It was popularised in
the 1960s with the release of Letraset sheets containing Lorem Ipsum passages,
and more recently with desktop publishing software like Aldus PageMaker
including versions of Lorem Ipsum.
@@ -27,10 +37,9 @@ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem
```python
import sys
"""
def greeting():
print("Hello world!")
_text_suffix = """
```
## Sub header too
@@ -40,82 +49,194 @@ The end.
""" # noqa: E501
class NoInsetCodeBlock(CodeBlock):
"""A code block with syntax highlighting and no padding."""
def __rich_console__(self, console, options):
code = str(self.text).rstrip()
syntax = Syntax(code, self.lexer_name, theme=self.theme, word_wrap=True, padding=(1, 0))
yield syntax
class LeftHeading(Heading):
"""A heading class that renders left-justified."""
def __rich_console__(self, console, options):
text = self.text
text.justify = "left" # Override justification
if self.tag == "h1":
# Draw a border around h1s, but keep text left-aligned
yield Panel(
text,
box=box.HEAVY,
style="markdown.h1.border",
)
else:
# Styled text for h2 and beyond
if self.tag == "h2":
yield Text("") # Keep the blank line before h2
yield text
class NoInsetMarkdown(Markdown):
"""Markdown with code blocks that have no padding and left-justified headings."""
elements = {
**Markdown.elements,
"fence": NoInsetCodeBlock,
"code_block": NoInsetCodeBlock,
"heading_open": LeftHeading,
}
class MarkdownStream:
live = None
when = 0
min_delay = 0.050
live_window = 6
"""Streaming markdown renderer that progressively displays content with a live updating window.
Uses rich.console and rich.live to render markdown content with smooth scrolling
and partial updates. Maintains a sliding window of visible content while streaming
in new markdown text.
"""
live = None # Rich Live display instance
when = 0 # Timestamp of last update
min_delay = 1.0 / 20 # Minimum time between updates (20fps)
live_window = 6 # Number of lines to keep visible at bottom during streaming
def __init__(self, mdargs=None):
self.printed = []
"""Initialize the markdown stream.
Args:
mdargs (dict, optional): Additional arguments to pass to rich Markdown renderer
"""
self.printed = [] # Stores lines that have already been printed
if mdargs:
self.mdargs = mdargs
else:
self.mdargs = dict()
self.live = Live(Text(""), refresh_per_second=1.0 / self.min_delay)
self.live.start()
# Defer Live creation until the first update.
self.live = None
self._live_started = False
def _render_markdown_to_lines(self, text):
"""Render markdown text to a list of lines.
Args:
text (str): Markdown text to render
Returns:
list: List of rendered lines with line endings preserved
"""
# Render the markdown to a string buffer
string_io = io.StringIO()
console = Console(file=string_io, force_terminal=True)
markdown = NoInsetMarkdown(text, **self.mdargs)
console.print(markdown)
output = string_io.getvalue()
# Split rendered output into lines
return output.splitlines(keepends=True)
def __del__(self):
"""Destructor to ensure Live display is properly cleaned up."""
if self.live:
try:
self.live.stop()
except Exception:
pass
pass # Ignore any errors during cleanup
def update(self, text, final=False):
"""Update the displayed markdown content.
Args:
text (str): The markdown text received so far
final (bool): If True, this is the final update and we should clean up
Splits the output into "stable" older lines and the "last few" lines
which aren't considered stable. They may shift around as new chunks
are appended to the markdown text.
The stable lines emit to the console above the Live window.
The unstable lines emit into the Live window so they can be repainted.
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):
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:
return
self.when = now
string_io = io.StringIO()
console = Console(file=string_io, force_terminal=True)
# Measure render time and adjust min_delay to maintain smooth rendering
start = time.time()
lines = self._render_markdown_to_lines(text)
render_time = time.time() - start
markdown = Markdown(text, **self.mdargs)
# Set min_delay to render time plus a small buffer
self.min_delay = min(max(render_time * 10, 1.0 / 20), 2)
console.print(markdown)
output = string_io.getvalue()
lines = output.splitlines(keepends=True)
num_lines = len(lines)
# How many lines have "left" the live window and are now considered stable?
# Or if final, consider all lines to be stable.
if not final:
num_lines -= self.live_window
# If we have stable content to display...
if final or num_lines > 0:
# How many stable lines do we need to newly show above the live window?
num_printed = len(self.printed)
show = num_lines - num_printed
# Skip if no new lines to show above live window
if show <= 0:
return
# Get the new lines and display them
show = lines[num_printed:num_lines]
show = "".join(show)
show = Text.from_ansi(show)
self.live.console.print(show)
self.live.console.print(show) # to the console above the live area
# Update our record of printed lines
self.printed = lines[:num_lines]
# Handle final update cleanup
if final:
self.live.update(Text(""))
self.live.stop()
self.live = None
else:
rest = lines[num_lines:]
rest = "".join(rest)
# rest = '...\n' + rest
rest = Text.from_ansi(rest)
self.live.update(rest)
return
# Update the live window with remaining lines
rest = lines[num_lines:]
rest = "".join(rest)
rest = Text.from_ansi(rest)
self.live.update(rest)
def find_minimal_suffix(self, text, match_lines=50):
"""
Splits text into chunks on blank lines "\n\n".
"""
if __name__ == "__main__":
_text = 5 * _text
with open("aider/io.py", "r") as f:
code = f.read()
_text = _text_prefix + code + _text_suffix
_text = _text * 10
pm = MarkdownStream()
for i in range(6, len(_text)):
print("Using NoInsetMarkdown for code blocks with padding=0")
for i in range(6, len(_text), 5):
pm.update(_text[:i])
time.sleep(0.01)

File diff suppressed because it is too large Load Diff

428
aider/onboarding.py Normal file
View File

@@ -0,0 +1,428 @@
import base64
import hashlib
import http.server
import os
import secrets
import socketserver
import threading
import time
import webbrowser
from urllib.parse import parse_qs, urlparse
import requests
from aider import urls
from aider.io import InputOutput
def check_openrouter_tier(api_key):
"""
Checks if the user is on a free tier for OpenRouter.
Args:
api_key: The OpenRouter API key to check.
Returns:
A boolean indicating if the user is on a free tier (True) or paid tier (False).
Returns True if the check fails.
"""
try:
response = requests.get(
"https://openrouter.ai/api/v1/auth/key",
headers={"Authorization": f"Bearer {api_key}"},
timeout=5, # Add a reasonable timeout
)
response.raise_for_status()
data = response.json()
# According to the documentation, 'is_free_tier' will be true if the user has never paid
return data.get("data", {}).get("is_free_tier", True) # Default to True if not found
except Exception:
# If there's any error, we'll default to assuming free tier
return True
def try_to_select_default_model():
"""
Attempts to select a default model based on available API keys.
Checks OpenRouter tier status to select appropriate model.
Returns:
The name of the selected model, or None if no suitable default is found.
"""
# Special handling for OpenRouter
openrouter_key = os.environ.get("OPENROUTER_API_KEY")
if openrouter_key:
# Check if the user is on a free tier
is_free_tier = check_openrouter_tier(openrouter_key)
if is_free_tier:
return "openrouter/deepseek/deepseek-r1:free"
else:
return "openrouter/anthropic/claude-sonnet-4"
# Select model based on other available API keys
model_key_pairs = [
("ANTHROPIC_API_KEY", "sonnet"),
("DEEPSEEK_API_KEY", "deepseek"),
("OPENAI_API_KEY", "gpt-4o"),
("GEMINI_API_KEY", "gemini/gemini-2.5-pro-exp-03-25"),
("VERTEXAI_PROJECT", "vertex_ai/gemini-2.5-pro-exp-03-25"),
]
for env_key, model_name in model_key_pairs:
api_key_value = os.environ.get(env_key)
if api_key_value:
return model_name
return None
def offer_openrouter_oauth(io, analytics):
"""
Offers OpenRouter OAuth flow to the user if no API keys are found.
Args:
io: The InputOutput object for user interaction.
analytics: The Analytics object for tracking events.
Returns:
True if authentication was successful, False otherwise.
"""
# No API keys found - Offer OpenRouter OAuth
io.tool_output("OpenRouter provides free and paid access to many LLMs.")
# Use confirm_ask which handles non-interactive cases
if io.confirm_ask(
"Login to OpenRouter or create a free account?",
default="y",
):
analytics.event("oauth_flow_initiated", provider="openrouter")
openrouter_key = start_openrouter_oauth_flow(io, analytics)
if openrouter_key:
# Successfully got key via OAuth, use the default OpenRouter model
# Ensure OPENROUTER_API_KEY is now set in the environment for later use
os.environ["OPENROUTER_API_KEY"] = openrouter_key
# Track OAuth success leading to model selection
analytics.event("oauth_flow_success")
return True
# OAuth failed or was cancelled by user implicitly (e.g., closing browser)
# Error messages are handled within start_openrouter_oauth_flow
analytics.event("oauth_flow_failure")
io.tool_error("OpenRouter authentication did not complete successfully.")
# Fall through to the final error message
return False
def select_default_model(args, io, analytics):
"""
Selects a default model based on available API keys if no model is specified.
Offers OAuth flow for OpenRouter if no keys are found.
Args:
args: The command line arguments object.
io: The InputOutput object for user interaction.
analytics: The Analytics object for tracking events.
Returns:
The name of the selected model, or None if no suitable default is found.
"""
if args.model:
return args.model # Model already specified
model = try_to_select_default_model()
if model:
io.tool_warning(f"Using {model} model with API key from environment.")
analytics.event("auto_model_selection", model=model)
return model
no_model_msg = "No LLM model was specified and no API keys were provided."
io.tool_warning(no_model_msg)
# Try OAuth if no model was detected
offer_openrouter_oauth(io, analytics)
# Check again after potential OAuth success
model = try_to_select_default_model()
if model:
return model
io.offer_url(urls.models_and_keys, "Open documentation URL for more info?")
# Helper function to find an available port
def find_available_port(start_port=8484, end_port=8584):
for port in range(start_port, end_port + 1):
try:
# Check if the port is available by trying to bind to it
with socketserver.TCPServer(("localhost", port), None):
return port
except OSError:
# Port is likely already in use
continue
return None
# PKCE code generation
def generate_pkce_codes():
code_verifier = secrets.token_urlsafe(64)
hasher = hashlib.sha256()
hasher.update(code_verifier.encode("utf-8"))
code_challenge = base64.urlsafe_b64encode(hasher.digest()).rstrip(b"=").decode("utf-8")
return code_verifier, code_challenge
# Function to exchange the authorization code for an API key
def exchange_code_for_key(code, code_verifier, io):
try:
response = requests.post(
"https://openrouter.ai/api/v1/auth/keys",
headers={"Content-Type": "application/json"},
json={
"code": code,
"code_verifier": code_verifier,
"code_challenge_method": "S256",
},
timeout=30, # Add a timeout
)
response.raise_for_status() # Raise exception for bad status codes (4xx or 5xx)
data = response.json()
api_key = data.get("key")
if not api_key:
io.tool_error("Error: 'key' not found in OpenRouter response.")
io.tool_error(f"Response: {response.text}")
return None
return api_key
except requests.exceptions.Timeout:
io.tool_error("Error: Request to OpenRouter timed out during code exchange.")
return None
except requests.exceptions.HTTPError as e:
io.tool_error(
"Error exchanging code for OpenRouter key:"
f" {e.response.status_code} {e.response.reason}"
)
io.tool_error(f"Response: {e.response.text}")
return None
except requests.exceptions.RequestException as e:
io.tool_error(f"Error exchanging code for OpenRouter key: {e}")
return None
except Exception as e:
io.tool_error(f"Unexpected error during code exchange: {e}")
return None
# Function to start the OAuth flow
def start_openrouter_oauth_flow(io, analytics):
"""Initiates the OpenRouter OAuth PKCE flow using a local server."""
port = find_available_port()
if not port:
io.tool_error("Could not find an available port between 8484 and 8584.")
io.tool_error("Please ensure a port in this range is free, or configure manually.")
return None
callback_url = f"http://localhost:{port}/callback/aider"
auth_code = None
server_error = None
server_started = threading.Event()
shutdown_server = threading.Event()
class OAuthCallbackHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
nonlocal auth_code, server_error
parsed_path = urlparse(self.path)
if parsed_path.path == "/callback/aider":
query_params = parse_qs(parsed_path.query)
if "code" in query_params:
auth_code = query_params["code"][0]
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(
b"<html><body><h1>Success!</h1>"
b"<p>Aider has received the authentication code. "
b"You can close this browser tab.</p></body></html>"
)
# Signal the main thread to shut down the server
# Signal the main thread to shut down the server
shutdown_server.set()
else:
# Redirect to aider website if 'code' is missing (e.g., user visited manually)
self.send_response(302) # Found (temporary redirect)
self.send_header("Location", urls.website)
self.end_headers()
# No need to set server_error, just redirect.
# Do NOT shut down the server here; wait for timeout or success.
else:
# Redirect anything else (e.g., favicon.ico) to the main website as well
self.send_response(302)
self.send_header("Location", urls.website)
self.end_headers()
self.wfile.write(b"Not Found")
def log_message(self, format, *args):
# Suppress server logging to keep terminal clean
pass
def run_server():
nonlocal server_error
try:
with socketserver.TCPServer(("localhost", port), OAuthCallbackHandler) as httpd:
io.tool_output(f"Temporary server listening on {callback_url}", log_only=True)
server_started.set() # Signal that the server is ready
# Wait until shutdown is requested or timeout occurs (handled by main thread)
while not shutdown_server.is_set():
httpd.handle_request() # Handle one request at a time
# Add a small sleep to prevent busy-waiting if needed,
# though handle_request should block appropriately.
time.sleep(0.1)
io.tool_output("Shutting down temporary server.", log_only=True)
except Exception as e:
server_error = f"Failed to start or run temporary server: {e}"
server_started.set() # Signal even if failed, error will be checked
shutdown_server.set() # Ensure shutdown logic proceeds
server_thread = threading.Thread(target=run_server, daemon=True)
server_thread.start()
# Wait briefly for the server to start, or for an error
if not server_started.wait(timeout=5):
io.tool_error("Temporary authentication server failed to start in time.")
shutdown_server.set() # Ensure thread exits if it eventually starts
server_thread.join(timeout=1)
return None
# Check if server failed during startup
if server_error:
io.tool_error(server_error)
shutdown_server.set() # Ensure thread exits
server_thread.join(timeout=1)
return None
# Generate codes and URL
code_verifier, code_challenge = generate_pkce_codes()
auth_url_base = "https://openrouter.ai/auth"
auth_params = {
"callback_url": callback_url,
"code_challenge": code_challenge,
"code_challenge_method": "S256",
}
auth_url = f"{auth_url_base}?{'&'.join(f'{k}={v}' for k, v in auth_params.items())}"
io.tool_output("\nPlease open this URL in your browser to connect Aider with OpenRouter:")
io.tool_output()
print(auth_url)
MINUTES = 5
io.tool_output(f"\nWaiting up to {MINUTES} minutes for you to finish in the browser...")
io.tool_output("Use Control-C to interrupt.")
try:
webbrowser.open(auth_url)
except Exception:
pass
# Wait for the callback to set the auth_code or for timeout/error
interrupted = False
try:
shutdown_server.wait(timeout=MINUTES * 60) # Convert minutes to seconds
except KeyboardInterrupt:
io.tool_warning("\nOAuth flow interrupted.")
analytics.event("oauth_flow_failed", provider="openrouter", reason="user_interrupt")
interrupted = True
# Ensure the server thread is signaled to shut down
shutdown_server.set()
# Join the server thread to ensure it's cleaned up
server_thread.join(timeout=1)
if interrupted:
return None # Return None if interrupted by user
if server_error:
io.tool_error(f"Authentication failed: {server_error}")
analytics.event("oauth_flow_failed", provider="openrouter", reason=server_error)
return None
if not auth_code:
io.tool_error("Authentication with OpenRouter failed.")
analytics.event("oauth_flow_failed", provider="openrouter")
return None
io.tool_output("Completing authentication...")
analytics.event("oauth_flow_code_received", provider="openrouter")
# Exchange code for key
api_key = exchange_code_for_key(auth_code, code_verifier, io)
if api_key:
# Set env var for the current session immediately
os.environ["OPENROUTER_API_KEY"] = api_key
# Save the key to the oauth-keys.env file
try:
config_dir = os.path.expanduser("~/.aider")
os.makedirs(config_dir, exist_ok=True)
key_file = os.path.join(config_dir, "oauth-keys.env")
with open(key_file, "a", encoding="utf-8") as f:
f.write(f'OPENROUTER_API_KEY="{api_key}"\n')
io.tool_warning("Aider will load the OpenRouter key automatically in future sessions.")
io.tool_output()
analytics.event("oauth_flow_success", provider="openrouter")
return api_key
except Exception as e:
io.tool_error(f"Successfully obtained key, but failed to save it to file: {e}")
io.tool_warning("Set OPENROUTER_API_KEY environment variable for this session only.")
# Still return the key for the current session even if saving failed
analytics.event("oauth_flow_save_failed", provider="openrouter", reason=str(e))
return api_key
else:
io.tool_error("Authentication with OpenRouter failed.")
analytics.event("oauth_flow_failed", provider="openrouter", reason="code_exchange_failed")
return None
# Dummy Analytics class for testing
class DummyAnalytics:
def event(self, *args, **kwargs):
# print(f"Analytics Event: {args} {kwargs}") # Optional: print events
pass
def main():
"""Main function to test the OpenRouter OAuth flow."""
print("Starting OpenRouter OAuth flow test...")
# Use a real IO object for interaction
io = InputOutput(
pretty=True,
yes=False,
input_history_file=None,
chat_history_file=None,
tool_output_color="BLUE",
tool_error_color="RED",
)
# Use a dummy analytics object
analytics = DummyAnalytics()
# Ensure OPENROUTER_API_KEY is not set, to trigger the flow naturally
# (though start_openrouter_oauth_flow doesn't check this itself)
if "OPENROUTER_API_KEY" in os.environ:
print("Warning: OPENROUTER_API_KEY is already set in environment.")
# del os.environ["OPENROUTER_API_KEY"] # Optionally unset it for testing
api_key = start_openrouter_oauth_flow(io, analytics)
if api_key:
print("\nOAuth flow completed successfully!")
print(f"Obtained API Key (first 5 chars): {api_key[:5]}...")
# Be careful printing the key, even partially
else:
print("\nOAuth flow failed or was cancelled.")
print("\nOpenRouter OAuth flow test finished.")
if __name__ == "__main__":
main()

128
aider/openrouter.py Normal file
View File

@@ -0,0 +1,128 @@
"""
OpenRouter model metadata caching and lookup.
This module keeps a local cached copy of the OpenRouter model list
(downloaded from ``https://openrouter.ai/api/v1/models``) and exposes a
helper class that returns metadata for a given model in a format compatible
with litellms ``get_model_info``.
"""
from __future__ import annotations
import json
import time
from pathlib import Path
from typing import Dict
import requests
def _cost_per_token(val: str | None) -> float | None:
"""Convert a price string (USD per token) to a float."""
if val in (None, "", "0"):
return 0.0 if val == "0" else None
try:
return float(val)
except Exception: # noqa: BLE001
return None
class OpenRouterModelManager:
MODELS_URL = "https://openrouter.ai/api/v1/models"
CACHE_TTL = 60 * 60 * 24 # 24 h
def __init__(self) -> None:
self.cache_dir = Path.home() / ".aider" / "caches"
self.cache_file = self.cache_dir / "openrouter_models.json"
self.content: Dict | None = None
self.verify_ssl: bool = True
self._cache_loaded = False
# ------------------------------------------------------------------ #
# Public API #
# ------------------------------------------------------------------ #
def set_verify_ssl(self, verify_ssl: bool) -> None:
"""Enable/disable SSL verification for API requests."""
self.verify_ssl = verify_ssl
def get_model_info(self, model: str) -> Dict:
"""
Return metadata for *model* or an empty ``dict`` when unknown.
``model`` should use the aider naming convention, e.g.
``openrouter/nousresearch/deephermes-3-mistral-24b-preview:free``.
"""
self._ensure_content()
if not self.content or "data" not in self.content:
return {}
route = self._strip_prefix(model)
# Consider both the exact id and id without any “:suffix”.
candidates = {route}
if ":" in route:
candidates.add(route.split(":", 1)[0])
record = next((item for item in self.content["data"] if item.get("id") in candidates), None)
if not record:
return {}
context_len = (
record.get("top_provider", {}).get("context_length")
or record.get("context_length")
or None
)
pricing = record.get("pricing", {})
return {
"max_input_tokens": context_len,
"max_tokens": context_len,
"max_output_tokens": context_len,
"input_cost_per_token": _cost_per_token(pricing.get("prompt")),
"output_cost_per_token": _cost_per_token(pricing.get("completion")),
"litellm_provider": "openrouter",
}
# ------------------------------------------------------------------ #
# Internal helpers #
# ------------------------------------------------------------------ #
def _strip_prefix(self, model: str) -> str:
return model[len("openrouter/") :] if model.startswith("openrouter/") else model
def _ensure_content(self) -> None:
self._load_cache()
if not self.content:
self._update_cache()
def _load_cache(self) -> None:
if self._cache_loaded:
return
try:
self.cache_dir.mkdir(parents=True, exist_ok=True)
if self.cache_file.exists():
cache_age = time.time() - self.cache_file.stat().st_mtime
if cache_age < self.CACHE_TTL:
try:
self.content = json.loads(self.cache_file.read_text())
except json.JSONDecodeError:
self.content = None
except OSError:
# Cache directory might be unwritable; ignore.
pass
self._cache_loaded = True
def _update_cache(self) -> None:
try:
response = requests.get(self.MODELS_URL, timeout=10, verify=self.verify_ssl)
if response.status_code == 200:
self.content = response.json()
try:
self.cache_file.write_text(json.dumps(self.content, indent=2))
except OSError:
pass # Non-fatal if we cant write the cache
except Exception as ex: # noqa: BLE001
print(f"Failed to fetch OpenRouter model list: {ex}")
try:
self.cache_file.write_text("{}")
except OSError:
pass

View File

@@ -13,13 +13,12 @@ Generate a one-line commit message for those changes.
The commit message should be structured as follows: <type>: <description>
Use these for <type>: 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\").
- 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.
"""
# COMMANDS

View File

@@ -0,0 +1,7 @@
These scm files are all adapted from the github repositories listed here:
https://github.com/Goldziher/tree-sitter-language-pack/blob/main/sources/language_definitions.json
See this URL for information on the licenses of each repo:
https://github.com/Goldziher/tree-sitter-language-pack/

View File

@@ -0,0 +1,5 @@
(function_declarator
declarator: (identifier) @name.definition.function) @definition.function
(call_expression
function: (identifier) @name.reference.call) @reference.call

View File

@@ -0,0 +1,16 @@
; Definitions
(intent_def
(intent) @name.definition.intent) @definition.intent
(slot_def
(slot) @name.definition.slot) @definition.slot
(alias_def
(alias) @name.definition.alias) @definition.alias
; References
(slot_ref
(slot) @name.reference.slot) @reference.slot
(alias_ref
(alias) @name.reference.alias) @reference.alias

View File

@@ -0,0 +1,7 @@
(list_lit
meta: _*
. (sym_lit name: (sym_name) @ignore)
. (sym_lit name: (sym_name) @name.definition.method)
(#match? @ignore "^def.*"))
(sym_lit name: (sym_name) @name.reference.call)

View File

@@ -0,0 +1,122 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Function Definitions ;;;;;;;;;;;;;;;;;;;;;;;
(defun_header
function_name: (sym_lit) @name.definition.function) @definition.function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Function Calls ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; Basically, we consider every list literal with symbol as the
;;; first element to be a call to a function named by that element.
;;; But we must exclude some cases. Note, tree-sitter @ignore
;;; cases only work if they are declared before the cases
;;; we want to include.
;; Exclude lambda lists for function definitions
;; For example:
;;
;; (defun my-func (arg1 arg2) ...)
;;
;; do not treat (arg1 arg2) as a call of function arg1
;;
(defun_header
lambda_list: (list_lit . [(sym_lit) (package_lit)] @ignore))
;; Similar to the above, but for
;;
;; (defmethod m ((type1 param1) (type2 param2)) ...)
;;
;; where list literals having symbol as their first element
;; are nested inside the lambda list.
(defun_header
lambda_list: (list_lit (list_lit . [(sym_lit) (package_lit)] @ignore)))
;;
;; (let ((var ...) (var2 ...)) ...)
;;
;; - exclude var, var2
;; - the same for let*, flet, labels, macrolet, symbol-macrolet
(list_lit . [(sym_lit) (package_lit)] @name.reference.call
. (list_lit (list_lit . [(sym_lit) (package_lit)] @ignore))
(#match? @name.reference.call
"(?i)^(cl:)?(let|let\\*|flet|labels|macrolet|symbol-macrolet)$")
)
;; TODO:
;; - exclude also:
;; - (defclass name (parent parent2)
;; ((slot1 ...)
;; (slot2 ...))
;; exclude the parent, slot1, slot2
;; - (flet ((func-1 (param1 param2))) ...)
;; - we already exclude func-1, but param1 is still recognized
;; as a function call - exclude it too
;; - the same for labels
;; - the same macrolet
;; - what else?
;; (that's a non-goal to completely support all macros
;; and special operators, but every one we support
;; makes the solution a little bit better)
;; - (flet ((func-1 (param1 param2))) ...)
;; - instead of simply excluding it, as we do today,
;; tag func-1 as @local.definition.function (I suppose)
;; - the same for labels, macrolet
;; - @local.scope for let, let*, flet, labels, macrolet
;; - I guess the whole span of the scope text,
;; till the closing paren, should be tagged as @local.scope;
;; Hopefully, combined with @local.definition.function
;; within the scope, the usual @reference.call within
;; that scope will refer to the local definition,
;; and there will be no need to use @local.reference.call
;; (which is more difficult to implement).
;; - When implementing, remember the scope rules differences
;; of let vs let*, flet vs labels.
;; Include all other cases - list literal with symbol as the
;; first element
(list_lit . [(sym_lit) (package_lit)] @name.reference.call) @reference.call
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; classes
(list_lit . [(sym_lit) (package_lit)] @ignore
. [(sym_lit) (package_lit)] @name.definition.class
(#match? @ignore "(?i)^(cl:)?defclass$")
) @definition.class
(list_lit . [(sym_lit) (package_lit)] @ignore
. (quoting_lit [(sym_lit) (package_lit)] @name.reference.class)
(#match? @ignore "(?i)^(cl:)?make-instance$")
) @reference.class
;;; TODO:
;; - @reference.class for base classes
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; TODO:
;; - Symbols referenced in defpackage
;;
;; (defpackage ...
;; (:export (symbol-a :symbol-b #:symbol-c "SYMBOL-D")))
;;
;; The goal is to allow quick navigation from the API
;; overview in the form of defpackage, to the definition
;; where user can read parameters, docstring, etc.
;; - The @name must not include the colon, or sharpsign colon, quotes,
;; just symbol-a, symbol-b, symbol-c, sybmol-d
;; - Downcase the names specified as string literals?
;; ("SYMBOL-D" -> symbol-d)
;; - We don't know if the exported symbol is a function, variable,
;; class or something else. The official doc
;; (https://tree-sitter.github.io/tree-sitter/code-navigation-systems)
;; does not even suggest a tag for variable reference.
;; (Although in practice, the `tree-sitter tags` command
;; allows any @reference.* and @definition.* tags)
;; Probably it's better to just use @reference.call for all
;; the symbols in the :export clause.
;;
;; - The same for the export function call:
;;
;; (export '(symbol-a :symbol-b #:symbol-c "SYMBOL-D"))

View File

@@ -0,0 +1,15 @@
(struct_specifier name: (type_identifier) @name.definition.class body:(_)) @definition.class
(declaration type: (union_specifier name: (type_identifier) @name.definition.class)) @definition.class
(function_declarator declarator: (identifier) @name.definition.function) @definition.function
(function_declarator declarator: (field_identifier) @name.definition.function) @definition.function
(function_declarator declarator: (qualified_identifier scope: (namespace_identifier) @local.scope name: (identifier) @name.definition.method)) @definition.method
(type_definition declarator: (type_identifier) @name.definition.type) @definition.type
(enum_specifier name: (type_identifier) @name.definition.type) @definition.type
(class_specifier name: (type_identifier) @name.definition.class) @definition.class

View File

@@ -0,0 +1,26 @@
; Based on https://github.com/tree-sitter/tree-sitter-c-sharp/blob/master/queries/tags.scm
; MIT License.
(class_declaration name: (identifier) @name.definition.class) @definition.class
(class_declaration (base_list (_) @name.reference.class)) @reference.class
(interface_declaration name: (identifier) @name.definition.interface) @definition.interface
(interface_declaration (base_list (_) @name.reference.interface)) @reference.interface
(method_declaration name: (identifier) @name.definition.method) @definition.method
(object_creation_expression type: (identifier) @name.reference.class) @reference.class
(type_parameter_constraints_clause (identifier) @name.reference.class) @reference.class
(type_parameter_constraint (type type: (identifier) @name.reference.class)) @reference.class
(variable_declaration type: (identifier) @name.reference.class) @reference.class
(invocation_expression function: (member_access_expression name: (identifier) @name.reference.send)) @reference.send
(namespace_declaration name: (identifier) @name.definition.module) @definition.module
(namespace_declaration name: (identifier) @name.definition.module) @module

View File

@@ -0,0 +1,26 @@
(module_def (module_declaration (module_fqn) @name.definition.module)) @definition.module
(struct_declaration (struct) . (identifier) @name.definition.class) @definition.class
(interface_declaration (interface) . (identifier) @name.definition.interface) @definition.interface
(enum_declaration (enum) . (identifier) @name.definition.type) @definition.type
(class_declaration (class) . (identifier) @name.definition.class) @definition.class
(constructor (this) @name.definition.method) @definition.method
(destructor (this) @name.definition.method) @definition.method
(postblit (this) @name.definition.method) @definition.method
(manifest_declarator . (identifier) @name.definition.type) @definition.type
(function_declaration (identifier) @name.definition.function) @definition.function
(union_declaration (union) . (identifier) @name.definition.type) @definition.type
(anonymous_enum_declaration (enum_member . (identifier) @name.definition.constant)) @definition.constant
(enum_declaration (enum_member . (identifier) @name.definition.constant)) @definition.constant
(call_expression (identifier) @name.reference.call) @reference.call
(call_expression (type (template_instance (identifier) @name.reference.call))) @reference.call
(parameter (type (identifier) @name.reference.class) @reference.class (identifier))
(variable_declaration (type (identifier) @name.reference.class) @reference.class (declarator))

View File

@@ -0,0 +1,92 @@
(class_definition
name: (identifier) @name.definition.class) @definition.class
(method_signature
(function_signature)) @definition.method
(type_alias
(type_identifier) @name.definition.type) @definition.type
(method_signature
(getter_signature
name: (identifier) @name.definition.method)) @definition.method
(method_signature
(setter_signature
name: (identifier) @name.definition.method)) @definition.method
(method_signature
(function_signature
name: (identifier) @name.definition.method)) @definition.method
(method_signature
(factory_constructor_signature
(identifier) @name.definition.method)) @definition.method
(method_signature
(constructor_signature
name: (identifier) @name.definition.method)) @definition.method
(method_signature
(operator_signature)) @definition.method
(method_signature) @definition.method
(mixin_declaration
(mixin)
(identifier) @name.definition.mixin) @definition.mixin
(extension_declaration
name: (identifier) @name.definition.extension) @definition.extension
(new_expression
(type_identifier) @name.reference.class) @reference.class
(enum_declaration
name: (identifier) @name.definition.enum) @definition.enum
(function_signature
name: (identifier) @name.definition.function) @definition.function
(initialized_variable_definition
name: (identifier)
value: (identifier) @name.reference.class
value: (selector
"!"?
(argument_part
(arguments
(argument)*))?)?) @reference.class
(assignment_expression
left: (assignable_expression
(identifier)
(unconditional_assignable_selector
"."
(identifier) @name.reference.send))) @reference.call
(assignment_expression
left: (assignable_expression
(identifier)
(conditional_assignable_selector
"?."
(identifier) @name.reference.send))) @reference.call
((identifier) @name.reference.send
(selector
"!"?
(conditional_assignable_selector
"?." (identifier) @name.reference.send)?
(unconditional_assignable_selector
"."? (identifier) @name.reference.send)?
(argument_part
(arguments
(argument)*))?)*
(cascade_section
(cascade_selector
(identifier)) @name.reference.send
(argument_part
(arguments
(argument)*))?)?) @reference.call

View File

@@ -0,0 +1,5 @@
;; defun/defsubst
(function_definition name: (symbol) @name.definition.function) @definition.function
;; Treat macros as function definitions for the sake of TAGS.
(macro_definition name: (symbol) @name.definition.function) @definition.function

View File

@@ -0,0 +1,54 @@
; Definitions
; * modules and protocols
(call
target: (identifier) @ignore
(arguments (alias) @name.definition.module)
(#any-of? @ignore "defmodule" "defprotocol")) @definition.module
; * functions/macros
(call
target: (identifier) @ignore
(arguments
[
; zero-arity functions with no parentheses
(identifier) @name.definition.function
; regular function clause
(call target: (identifier) @name.definition.function)
; function clause with a guard clause
(binary_operator
left: (call target: (identifier) @name.definition.function)
operator: "when")
])
(#any-of? @ignore "def" "defp" "defdelegate" "defguard" "defguardp" "defmacro" "defmacrop" "defn" "defnp")) @definition.function
; References
; ignore calls to kernel/special-forms keywords
(call
target: (identifier) @ignore
(#any-of? @ignore "def" "defp" "defdelegate" "defguard" "defguardp" "defmacro" "defmacrop" "defn" "defnp" "defmodule" "defprotocol" "defimpl" "defstruct" "defexception" "defoverridable" "alias" "case" "cond" "else" "for" "if" "import" "quote" "raise" "receive" "require" "reraise" "super" "throw" "try" "unless" "unquote" "unquote_splicing" "use" "with"))
; ignore module attributes
(unary_operator
operator: "@"
operand: (call
target: (identifier) @ignore))
; * function call
(call
target: [
; local
(identifier) @name.reference.call
; remote
(dot
right: (identifier) @name.reference.call)
]) @reference.call
; * pipe into function call
(binary_operator
operator: "|>"
right: (identifier) @name.reference.call) @reference.call
; * modules
(alias) @name.reference.module @reference.module

View File

@@ -0,0 +1,19 @@
(value_declaration (function_declaration_left (lower_case_identifier) @name.definition.function)) @definition.function
(function_call_expr (value_expr (value_qid) @name.reference.function)) @reference.function
(exposed_value (lower_case_identifier) @name.reference.function) @reference.function
(type_annotation ((lower_case_identifier) @name.reference.function) (colon)) @reference.function
(type_declaration ((upper_case_identifier) @name.definition.type) ) @definition.type
(type_ref (upper_case_qid (upper_case_identifier) @name.reference.type)) @reference.type
(exposed_type (upper_case_identifier) @name.reference.type) @reference.type
(type_declaration (union_variant (upper_case_identifier) @name.definition.union)) @definition.union
(value_expr (upper_case_qid (upper_case_identifier) @name.reference.union)) @reference.union
(module_declaration
(upper_case_qid (upper_case_identifier)) @name.definition.module
) @definition.module

View File

@@ -0,0 +1,41 @@
; Modules
(module) @name.reference.module @reference.module
(import alias: (identifier) @name.reference.module) @reference.module
(remote_type_identifier
module: (identifier) @name.reference.module) @reference.module
((field_access
record: (identifier) @name.reference.module)
(#is-not? local)) @reference.module
; Functions
(function
name: (identifier) @name.definition.function) @definition.function
(external_function
name: (identifier) @name.definition.function) @definition.function
(unqualified_import (identifier) @name.reference.function) @reference.function
((function_call
function: (identifier) @name.reference.function) @reference.function
(#is-not? local))
((field_access
record: (identifier) @ignore
field: (label) @name.reference.function)
(#is-not? local)) @reference.function
((binary_expression
operator: "|>"
right: (identifier) @name.reference.function)
(#is-not? local)) @reference.function
; Types
(type_definition
(type_name
name: (type_identifier) @name.definition.type)) @definition.type
(type_definition
(data_constructors
(data_constructor
name: (constructor_name) @name.definition.constructor))) @definition.constructor
(external_type
(type_name
name: (type_identifier) @name.definition.type)) @definition.type
(type_identifier) @name.reference.type @reference.type
(constructor_name) @name.reference.constructor @reference.constructor

View File

@@ -0,0 +1,42 @@
(
(comment)* @doc
.
(function_declaration
name: (identifier) @name.definition.function) @definition.function
(#strip! @doc "^//\\s*")
(#set-adjacent! @doc @definition.function)
)
(
(comment)* @doc
.
(method_declaration
name: (field_identifier) @name.definition.method) @definition.method
(#strip! @doc "^//\\s*")
(#set-adjacent! @doc @definition.method)
)
(call_expression
function: [
(identifier) @name.reference.call
(parenthesized_expression (identifier) @name.reference.call)
(selector_expression field: (field_identifier) @name.reference.call)
(parenthesized_expression (selector_expression field: (field_identifier) @name.reference.call))
]) @reference.call
(type_spec
name: (type_identifier) @name.definition.type) @definition.type
(type_identifier) @name.reference.type @reference.type
(package_clause "package" (package_identifier) @name.definition.module)
(type_declaration (type_spec name: (type_identifier) @name.definition.interface type: (interface_type)))
(type_declaration (type_spec name: (type_identifier) @name.definition.class type: (struct_type)))
(import_declaration (import_spec) @name.reference.module)
(var_declaration (var_spec name: (identifier) @name.definition.variable))
(const_declaration (const_spec name: (identifier) @name.definition.constant))

View File

@@ -0,0 +1,20 @@
(class_declaration
name: (identifier) @name.definition.class) @definition.class
(method_declaration
name: (identifier) @name.definition.method) @definition.method
(method_invocation
name: (identifier) @name.reference.method
arguments: (argument_list) @reference.call)
(interface_declaration
name: (identifier) @name.definition.interface) @definition.interface
(type_list
(type_identifier) @name.reference.interface) @reference.implementation
(object_creation_expression
type: (type_identifier) @name.reference.class) @reference.class
(superclass (type_identifier) @name.reference.class) @reference.class

View File

@@ -0,0 +1,88 @@
(
(comment)* @doc
.
(method_definition
name: (property_identifier) @name.definition.method) @definition.method
(#not-eq? @name.definition.method "constructor")
(#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$")
(#select-adjacent! @doc @definition.method)
)
(
(comment)* @doc
.
[
(class
name: (_) @name.definition.class)
(class_declaration
name: (_) @name.definition.class)
] @definition.class
(#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$")
(#select-adjacent! @doc @definition.class)
)
(
(comment)* @doc
.
[
(function_expression
name: (identifier) @name.definition.function)
(function_declaration
name: (identifier) @name.definition.function)
(generator_function
name: (identifier) @name.definition.function)
(generator_function_declaration
name: (identifier) @name.definition.function)
] @definition.function
(#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$")
(#select-adjacent! @doc @definition.function)
)
(
(comment)* @doc
.
(lexical_declaration
(variable_declarator
name: (identifier) @name.definition.function
value: [(arrow_function) (function_expression)]) @definition.function)
(#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$")
(#select-adjacent! @doc @definition.function)
)
(
(comment)* @doc
.
(variable_declaration
(variable_declarator
name: (identifier) @name.definition.function
value: [(arrow_function) (function_expression)]) @definition.function)
(#strip! @doc "^[\\s\\*/]+|^[\\s\\*/]$")
(#select-adjacent! @doc @definition.function)
)
(assignment_expression
left: [
(identifier) @name.definition.function
(member_expression
property: (property_identifier) @name.definition.function)
]
right: [(arrow_function) (function_expression)]
) @definition.function
(pair
key: (property_identifier) @name.definition.function
value: [(arrow_function) (function_expression)]) @definition.function
(
(call_expression
function: (identifier) @name.reference.call) @reference.call
(#not-match? @name.reference.call "^(require)$")
)
(call_expression
function: (member_expression
property: (property_identifier) @name.reference.call)
arguments: (_) @reference.call)
(new_expression
constructor: (_) @name.reference.class) @reference.class

View File

@@ -0,0 +1,34 @@
(function_declaration
name: [
(identifier) @name.definition.function
(dot_index_expression
field: (identifier) @name.definition.function)
]) @definition.function
(function_declaration
name: (method_index_expression
method: (identifier) @name.definition.method)) @definition.method
(assignment_statement
(variable_list .
name: [
(identifier) @name.definition.function
(dot_index_expression
field: (identifier) @name.definition.function)
])
(expression_list .
value: (function_definition))) @definition.function
(table_constructor
(field
name: (identifier) @name.definition.function
value: (function_definition))) @definition.function
(function_call
name: [
(identifier) @name.reference.call
(dot_index_expression
field: (identifier) @name.reference.call)
(method_index_expression
method: (identifier) @name.reference.method)
]) @reference.call

View File

@@ -0,0 +1,10 @@
(class_definition
name: (identifier) @name.definition.class) @definition.class
(function_definition
name: (identifier) @name.definition.function) @definition.function
(function_call
name: (identifier) @name.reference.call) @reference.call
(command (command_name) @name.reference.call) @reference.call

View File

@@ -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*\\*+\\)$")
)

View File

@@ -0,0 +1,39 @@
;Class definitions @definition.class
;Function definitions @definition.function
;Interface definitions @definition.interface
;Method definitions @definition.method
;Module definitions @definition.module
;Function/method calls @reference.call
;Class reference @reference.class
;Interface implementation @reference.implementation
(
(identifier) @reference.class
(#match? @reference.class "^_*[A-Z][a-zA-Z0-9_]*$")
)
(class_definition (identifier) @name.definition.class) @definition.class
(actor_definition (identifier) @name.definition.class) @definition.class
(primitive_definition (identifier) @name.definition.class) @definition.class
(struct_definition (identifier) @name.definition.class) @definition.class
(type_alias (identifier) @name.definition.class) @definition.class
(trait_definition (identifier) @name.definition.interface) @definition.interface
(interface_definition (identifier) @name.definition.interface) @definition.interface
(constructor (identifier) @name.definition.method) @definition.method
(method (identifier) @name.definition.method) @definition.method
(behavior (identifier) @name.definition.method) @definition.method
(class_definition (type) @name.reference.implementation) @reference.implementation
(actor_definition (type) @name.reference.implementation) @reference.implementation
(primitive_definition (type) @name.reference.implementation) @reference.implementation
(struct_definition (type) @name.reference.implementation) @reference.implementation
(type_alias (type) @name.reference.implementation) @reference.implementation
; calls - not catching all possible call cases of callees for capturing the method name
(call_expression callee: [(identifier) (ffi_identifier)] @name.reference.call) @reference.call
(call_expression callee: (generic_expression [(identifier) (ffi_identifier)] @name.reference.call)) @reference.call
(call_expression callee: (member_expression (identifier) @name.reference.call .)) @reference.call
(call_expression callee: (member_expression (generic_expression [(identifier) (ffi_identifier)] @name.reference.call) .)) @reference.call
; TODO: add more possible callee expressions
(call_expression) @reference.call

View File

@@ -0,0 +1,5 @@
(property
(key) @name.definition.property) @definition.property
(substitution
(key) @name.reference.property) @reference.property

View File

@@ -0,0 +1,14 @@
(module (expression_statement (assignment left: (identifier) @name.definition.constant) @definition.constant))
(class_definition
name: (identifier) @name.definition.class) @definition.class
(function_definition
name: (identifier) @name.definition.function) @definition.function
(call
function: [
(identifier) @name.reference.call
(attribute
attribute: (identifier) @name.reference.call)
]) @reference.call

View File

@@ -0,0 +1,21 @@
(binary_operator
lhs: (identifier) @name.definition.function
operator: "<-"
rhs: (function_definition)
) @definition.function
(binary_operator
lhs: (identifier) @name.definition.function
operator: "="
rhs: (function_definition)
) @definition.function
(call
function: (identifier) @name.reference.call
) @reference.call
(call
function: (namespace_operator
rhs: (identifier) @name.reference.call
)
) @reference.call

View File

@@ -0,0 +1,12 @@
(list
.
(symbol) @reference._define
(#match? @reference._define "^(define|define/contract)$")
.
(list
.
(symbol) @name.definition.function) @definition.function)
(list
.
(symbol) @name.reference.call)

View File

@@ -0,0 +1,60 @@
; ADT definitions
(struct_item
name: (type_identifier) @name.definition.class) @definition.class
(enum_item
name: (type_identifier) @name.definition.class) @definition.class
(union_item
name: (type_identifier) @name.definition.class) @definition.class
; type aliases
(type_item
name: (type_identifier) @name.definition.class) @definition.class
; method definitions
(declaration_list
(function_item
name: (identifier) @name.definition.method) @definition.method)
; function definitions
(function_item
name: (identifier) @name.definition.function) @definition.function
; trait definitions
(trait_item
name: (type_identifier) @name.definition.interface) @definition.interface
; module definitions
(mod_item
name: (identifier) @name.definition.module) @definition.module
; macro definitions
(macro_definition
name: (identifier) @name.definition.macro) @definition.macro
; references
(call_expression
function: (identifier) @name.reference.call) @reference.call
(call_expression
function: (field_expression
field: (field_identifier) @name.reference.call)) @reference.call
(macro_invocation
macro: (identifier) @name.reference.call) @reference.call
; implementations
(impl_item
trait: (type_identifier) @name.reference.implementation) @reference.implementation
(impl_item
type: (type_identifier) @name.reference.implementation
!trait) @reference.implementation

View File

@@ -0,0 +1,43 @@
;; Method and Function declarations
(contract_declaration (_
(function_definition
name: (identifier) @name.definition.function) @definition.method))
(source_file
(function_definition
name: (identifier) @name.definition.function) @definition.function)
;; Contract, struct, enum and interface declarations
(contract_declaration
name: (identifier) @name.definition.class) @definition.class
(interface_declaration
name: (identifier) @name.definition.interface) @definition.interface
(library_declaration
name: (identifier) @name.definition.class) @definition.interface
(struct_declaration name: (identifier) @name.definition.class) @definition.class
(enum_declaration name: (identifier) @name.definition.class) @definition.class
(event_definition name: (identifier) @name.definition.class) @definition.class
;; Function calls
(call_expression (expression (identifier)) @name.reference.call ) @reference.call
(call_expression
(expression (member_expression
property: (_) @name.reference.method ))) @reference.call
;; Log emit
(emit_statement name: (_) @name.reference.class) @reference.class
;; Inheritance
(inheritance_specifier
ancestor: (user_defined_type (_) @name.reference.class . )) @reference.class
;; Imports ( note that unknown is not standardised )
(import_directive
import_name: (_) @name.reference.module ) @reference.unknown

View File

@@ -0,0 +1,51 @@
(class_declaration
name: (type_identifier) @name.definition.class) @definition.class
(protocol_declaration
name: (type_identifier) @name.definition.interface) @definition.interface
(class_declaration
(class_body
[
(function_declaration
name: (simple_identifier) @name.definition.method
)
(subscript_declaration
(parameter (simple_identifier) @name.definition.method)
)
(init_declaration "init" @name.definition.method)
(deinit_declaration "deinit" @name.definition.method)
]
)
) @definition.method
(protocol_declaration
(protocol_body
[
(protocol_function_declaration
name: (simple_identifier) @name.definition.method
)
(subscript_declaration
(parameter (simple_identifier) @name.definition.method)
)
(init_declaration "init" @name.definition.method)
]
)
) @definition.method
(class_declaration
(class_body
[
(property_declaration
(pattern (simple_identifier) @name.definition.property)
)
]
)
) @definition.property
(property_declaration
(pattern (simple_identifier) @name.definition.property)
) @definition.property
(function_declaration
name: (simple_identifier) @name.definition.function) @definition.function

View File

@@ -0,0 +1,20 @@
(assignment
key: "LABEL"
(value
(content) @name.definition.label)) @definition.label
(assignment
key: "GOTO"
(value
(content) @name.reference.label)) @reference.label
(assignment
key: "ENV"
(env_var) @name.definition.variable) @definition.variable
(match
key: "ENV"
(env_var) @name.reference.variable) @reference.variable
(var_sub
(env_var) @name.reference.variable) @reference.variable

View File

@@ -0,0 +1,9 @@
(struct_specifier name: (type_identifier) @name.definition.class body:(_)) @definition.class
(declaration type: (union_specifier name: (type_identifier) @name.definition.class)) @definition.class
(function_declarator declarator: (identifier) @name.definition.function) @definition.function
(type_definition declarator: (type_identifier) @name.definition.type) @definition.type
(enum_specifier name: (type_identifier) @name.definition.type) @definition.type

Some files were not shown because too many files have changed in this diff Show More