aider-ce 0.88.5__py3-none-any.whl → 0.88.6.dev6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aider-ce might be problematic. Click here for more details.

aider/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from packaging import version
2
2
 
3
- __version__ = "0.88.5.dev"
3
+ __version__ = "0.88.6.dev"
4
4
  safe_version = __version__
5
5
 
6
6
  try:
aider/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.88.5'
32
- __version_tuple__ = version_tuple = (0, 88, 5)
31
+ __version__ = version = '0.88.6.dev6'
32
+ __version_tuple__ = version_tuple = (0, 88, 6, 'dev6')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -1928,6 +1928,7 @@ class Coder:
1928
1928
  self.usage_report = None
1929
1929
  exhausted = False
1930
1930
  interrupted = False
1931
+
1931
1932
  try:
1932
1933
  while True:
1933
1934
  try:
@@ -2461,7 +2462,7 @@ class Coder:
2461
2462
  return (server.name, server_tools)
2462
2463
  except Exception as e:
2463
2464
  if server.name != "unnamed-server":
2464
- self.io.tool_warning(f"Error initializing MCP server {server.name}:\n{e}")
2465
+ self.io.tool_warning(f"Error initializing MCP server {server.name}: {e}")
2465
2466
  return None
2466
2467
 
2467
2468
  async def get_all_server_tools():
aider/commands.py CHANGED
@@ -1,11 +1,14 @@
1
1
  import asyncio
2
2
  import glob
3
+ import json
3
4
  import os
4
5
  import re
5
6
  import subprocess
6
7
  import sys
7
8
  import tempfile
9
+ import time
8
10
  from collections import OrderedDict
11
+ from datetime import datetime
9
12
  from os.path import expanduser
10
13
  from pathlib import Path
11
14
 
@@ -1490,19 +1493,12 @@ class Commands:
1490
1493
  edit_format=edit_format,
1491
1494
  summarize_from_coder=False,
1492
1495
  num_cache_warming_pings=0,
1496
+ aider_commit_hashes=self.coder.aider_commit_hashes,
1493
1497
  )
1494
1498
 
1495
1499
  user_msg = args
1496
- await coder.run(user_msg)
1497
-
1498
- # Use the provided placeholder if any
1499
- raise SwitchCoder(
1500
- edit_format=self.coder.edit_format,
1501
- summarize_from_coder=False,
1502
- from_coder=coder,
1503
- show_announcements=False,
1504
- placeholder=placeholder,
1505
- )
1500
+ await coder.run(user_msg, False)
1501
+ self.coder.aider_commit_hashes = coder.aider_commit_hashes
1506
1502
 
1507
1503
  def get_help_md(self):
1508
1504
  "Show help about all commands in markdown"
@@ -2035,6 +2031,197 @@ class Commands:
2035
2031
  announcements = "\n".join(self.coder.get_announcements())
2036
2032
  self.io.tool_output(announcements)
2037
2033
 
2034
+ def _get_session_directory(self):
2035
+ """Get the session storage directory, creating it if needed"""
2036
+ session_dir = Path(self.coder.root) / ".aider" / "sessions"
2037
+ session_dir.mkdir(parents=True, exist_ok=True)
2038
+ return session_dir
2039
+
2040
+ def _get_session_file_path(self, session_name):
2041
+ """Get the full path for a session file"""
2042
+ session_dir = self._get_session_directory()
2043
+ # Sanitize the session name to be filesystem-safe
2044
+ safe_name = re.sub(r"[^a-zA-Z0-9_.-]", "_", session_name)
2045
+ return session_dir / f"{safe_name}.json"
2046
+
2047
+ def _find_session_file(self, session_name):
2048
+ """Find a session file by name, checking both name-based and full path"""
2049
+ # First check if it's a full path
2050
+ if Path(session_name).exists():
2051
+ return Path(session_name)
2052
+
2053
+ # Then check in the sessions directory
2054
+ session_file = self._get_session_file_path(session_name)
2055
+ if session_file.exists():
2056
+ return session_file
2057
+
2058
+ return None
2059
+
2060
+ def cmd_save_session(self, args):
2061
+ """Save the current chat session to a named file in .aider/sessions/"""
2062
+ if not args.strip():
2063
+ self.io.tool_error("Please provide a session name.")
2064
+ return
2065
+
2066
+ session_name = args.strip()
2067
+ session_file = self._get_session_file_path(session_name)
2068
+
2069
+ # Collect session data
2070
+ session_data = {
2071
+ "version": "1.0",
2072
+ "timestamp": time.time(),
2073
+ "session_name": session_name,
2074
+ "model": self.coder.main_model.name,
2075
+ "edit_format": self.coder.edit_format,
2076
+ "chat_history": {
2077
+ "done_messages": self.coder.done_messages,
2078
+ "cur_messages": self.coder.cur_messages,
2079
+ },
2080
+ "files": {
2081
+ "editable": [self.coder.get_rel_fname(f) for f in self.coder.abs_fnames],
2082
+ "read_only": [self.coder.get_rel_fname(f) for f in self.coder.abs_read_only_fnames],
2083
+ "read_only_stubs": [
2084
+ self.coder.get_rel_fname(f) for f in self.coder.abs_read_only_stubs_fnames
2085
+ ],
2086
+ },
2087
+ "settings": {
2088
+ "root": self.coder.root,
2089
+ "auto_commits": self.coder.auto_commits,
2090
+ "auto_lint": self.coder.auto_lint,
2091
+ "auto_test": self.coder.auto_test,
2092
+ },
2093
+ }
2094
+
2095
+ try:
2096
+ with open(session_file, "w", encoding="utf-8") as f:
2097
+ json.dump(session_data, f, indent=2, ensure_ascii=False)
2098
+ self.io.tool_output(f"Session saved to: {session_file}")
2099
+ except Exception as e:
2100
+ self.io.tool_error(f"Error saving session: {e}")
2101
+
2102
+ def cmd_list_sessions(self, args):
2103
+ """List all saved sessions in .aider/sessions/"""
2104
+ session_dir = self._get_session_directory()
2105
+ session_files = list(session_dir.glob("*.json"))
2106
+
2107
+ if not session_files:
2108
+ self.io.tool_output("No saved sessions found.")
2109
+ return
2110
+
2111
+ self.io.tool_output("Saved sessions:")
2112
+ for session_file in sorted(session_files):
2113
+ try:
2114
+ with open(session_file, "r", encoding="utf-8") as f:
2115
+ session_data = json.load(f)
2116
+ session_name = session_data.get("session_name", session_file.stem)
2117
+ timestamp = session_data.get("timestamp", 0)
2118
+ model = session_data.get("model", "unknown")
2119
+ edit_format = session_data.get("edit_format", "unknown")
2120
+
2121
+ # Format timestamp
2122
+ if timestamp:
2123
+ date_str = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M")
2124
+ else:
2125
+ date_str = "unknown date"
2126
+
2127
+ self.io.tool_output(
2128
+ f" {session_name} (model: {model}, format: {edit_format}, {date_str})"
2129
+ )
2130
+ except Exception as e:
2131
+ self.io.tool_output(f" {session_file.stem} [error reading: {e}]")
2132
+
2133
+ def cmd_load_session(self, args):
2134
+ """Load a saved session by name or file path"""
2135
+ if not args.strip():
2136
+ self.io.tool_error("Please provide a session name or file path.")
2137
+ return
2138
+
2139
+ session_name = args.strip()
2140
+ session_file = self._find_session_file(session_name)
2141
+
2142
+ if not session_file:
2143
+ self.io.tool_error(f"Session not found: {session_name}")
2144
+ self.io.tool_output("Use /list-sessions to see available sessions.")
2145
+ return
2146
+
2147
+ try:
2148
+ with open(session_file, "r", encoding="utf-8") as f:
2149
+ session_data = json.load(f)
2150
+ except Exception as e:
2151
+ self.io.tool_error(f"Error loading session: {e}")
2152
+ return
2153
+
2154
+ # Verify session format
2155
+ if not isinstance(session_data, dict) or "version" not in session_data:
2156
+ self.io.tool_error("Invalid session format.")
2157
+ return
2158
+
2159
+ # Load session data
2160
+ try:
2161
+ # Clear current state
2162
+ self.coder.abs_fnames = set()
2163
+ self.coder.abs_read_only_fnames = set()
2164
+ self.coder.abs_read_only_stubs_fnames = set()
2165
+ self.coder.done_messages = []
2166
+ self.coder.cur_messages = []
2167
+
2168
+ # Load chat history
2169
+ chat_history = session_data.get("chat_history", {})
2170
+ self.coder.done_messages = chat_history.get("done_messages", [])
2171
+ self.coder.cur_messages = chat_history.get("cur_messages", [])
2172
+
2173
+ # Load files
2174
+ files = session_data.get("files", {})
2175
+ for rel_fname in files.get("editable", []):
2176
+ abs_fname = self.coder.abs_root_path(rel_fname)
2177
+ if os.path.exists(abs_fname):
2178
+ self.coder.abs_fnames.add(abs_fname)
2179
+ else:
2180
+ self.io.tool_warning(f"File not found, skipping: {rel_fname}")
2181
+
2182
+ for rel_fname in files.get("read_only", []):
2183
+ abs_fname = self.coder.abs_root_path(rel_fname)
2184
+ if os.path.exists(abs_fname):
2185
+ self.coder.abs_read_only_fnames.add(abs_fname)
2186
+ else:
2187
+ self.io.tool_warning(f"File not found, skipping: {rel_fname}")
2188
+
2189
+ for rel_fname in files.get("read_only_stubs", []):
2190
+ abs_fname = self.coder.abs_root_path(rel_fname)
2191
+ if os.path.exists(abs_fname):
2192
+ self.coder.abs_read_only_stubs_fnames.add(abs_fname)
2193
+ else:
2194
+ self.io.tool_warning(f"File not found, skipping: {rel_fname}")
2195
+
2196
+ # Load settings
2197
+ settings = session_data.get("settings", {})
2198
+ if "auto_commits" in settings:
2199
+ self.coder.auto_commits = settings["auto_commits"]
2200
+ if "auto_lint" in settings:
2201
+ self.coder.auto_lint = settings["auto_lint"]
2202
+ if "auto_test" in settings:
2203
+ self.coder.auto_test = settings["auto_test"]
2204
+
2205
+ self.io.tool_output(
2206
+ f"Session loaded: {session_data.get('session_name', session_file.stem)}"
2207
+ )
2208
+ self.io.tool_output(
2209
+ f"Model: {session_data.get('model', 'unknown')}, Edit format:"
2210
+ f" {session_data.get('edit_format', 'unknown')}"
2211
+ )
2212
+
2213
+ # Show summary
2214
+ num_messages = len(self.coder.done_messages) + len(self.coder.cur_messages)
2215
+ num_files = (
2216
+ len(self.coder.abs_fnames)
2217
+ + len(self.coder.abs_read_only_fnames)
2218
+ + len(self.coder.abs_read_only_stubs_fnames)
2219
+ )
2220
+ self.io.tool_output(f"Loaded {num_messages} messages and {num_files} files")
2221
+
2222
+ except Exception as e:
2223
+ self.io.tool_error(f"Error applying session data: {e}")
2224
+
2038
2225
  def cmd_copy_context(self, args=None):
2039
2226
  """Copy the current chat context as markdown, suitable to paste into a web UI"""
2040
2227
 
aider/exceptions.py CHANGED
@@ -71,6 +71,9 @@ class LiteLLMExceptions:
71
71
  ex = getattr(litellm, var, "default")
72
72
 
73
73
  if ex != "default":
74
+ if not issubclass(ex, BaseException):
75
+ continue
76
+
74
77
  self.exceptions[ex] = self.exception_info[var]
75
78
 
76
79
  def exceptions_tuple(self):
aider/io.py CHANGED
@@ -991,7 +991,7 @@ class InputOutput:
991
991
  else:
992
992
  style = dict()
993
993
 
994
- self.console.print(Text(inp), **style)
994
+ self.stream_print(Text(inp), **style)
995
995
 
996
996
  def user_input(self, inp, log_only=True):
997
997
  if not log_only:
@@ -1245,23 +1245,23 @@ class InputOutput:
1245
1245
  message = Text(message)
1246
1246
 
1247
1247
  style = dict()
1248
-
1249
1248
  if self.pretty:
1250
- color = ensure_hash_prefix(color) if color else None
1251
1249
  if color:
1252
- style["color"] = color
1250
+ style["color"] = ensure_hash_prefix(color)
1251
+
1252
+ style = RichStyle(**style)
1253
1253
 
1254
1254
  try:
1255
- self.stream_print(message, style=RichStyle(**style))
1255
+ self.stream_print(message, style=style)
1256
1256
  except UnicodeEncodeError:
1257
1257
  # Fallback to ASCII-safe output
1258
1258
  if isinstance(message, Text):
1259
1259
  message = message.plain
1260
1260
  message = str(message).encode("ascii", errors="replace").decode("ascii")
1261
- self.stream_print(message, style=RichStyle(**style))
1261
+ self.stream_print(message, style=style)
1262
1262
 
1263
- if self.prompt_session and self.prompt_session.app:
1264
- self.prompt_session.app.invalidate()
1263
+ def tool_success(self, message="", strip=True):
1264
+ self._tool_message(message, strip, self.user_input_color)
1265
1265
 
1266
1266
  def tool_error(self, message="", strip=True):
1267
1267
  self.num_error_outputs += 1
@@ -1309,7 +1309,7 @@ class InputOutput:
1309
1309
  else:
1310
1310
  show_resp = Text(message or "(empty response)")
1311
1311
 
1312
- self.console.print(show_resp)
1312
+ self.stream_print(show_resp)
1313
1313
 
1314
1314
  def render_markdown(self, text):
1315
1315
  output = StringIO()
@@ -1352,12 +1352,18 @@ class InputOutput:
1352
1352
 
1353
1353
  if not final:
1354
1354
  if len(lines) > 1:
1355
- self.console.print(output)
1355
+ self.console.print(
1356
+ Text.from_ansi(output) if self.has_ansi_codes(output) else output
1357
+ )
1356
1358
  else:
1357
1359
  # Ensure any remaining buffered content is printed using the full response
1358
- self.console.print(output)
1360
+ self.console.print(Text.from_ansi(output) if self.has_ansi_codes(output) else output)
1359
1361
  self.reset_streaming_response()
1360
1362
 
1363
+ def has_ansi_codes(self, s: str) -> bool:
1364
+ """Check if a string contains the ANSI escape character."""
1365
+ return "\x1b" in s
1366
+
1361
1367
  def reset_streaming_response(self):
1362
1368
  self._stream_buffer = ""
1363
1369
  self._stream_line_count = 0
aider/repo.py CHANGED
@@ -310,7 +310,7 @@ class GitRepo:
310
310
  # Perform the commit
311
311
  self.repo.git.commit(cmd)
312
312
  commit_hash = self.get_head_commit_sha(short=True)
313
- self.io.tool_output(f"Commit {commit_hash} {commit_message}", bold=True)
313
+ self.io.tool_success(f"Commit {commit_hash} {commit_message}")
314
314
  return commit_hash, commit_message
315
315
 
316
316
  except ANY_GIT_ERROR as err:
@@ -0,0 +1,182 @@
1
+ # Session Management
2
+
3
+ Aider provides session management commands that allow you to save, load, and manage your chat sessions. This is particularly useful for:
4
+
5
+ - Continuing work on complex projects across multiple sessions
6
+ - Recreating specific development environments
7
+ - Archiving important conversations and file configurations
8
+
9
+ ## Session Commands
10
+
11
+ ### `/save-session <name>`
12
+ Save the current chat session to a named file in `.aider/sessions/`.
13
+
14
+ **Usage:**
15
+ ```
16
+ /save-session my-project-session
17
+ ```
18
+
19
+ **What gets saved:**
20
+ - Chat history (both done and current messages)
21
+ - All files in the chat (editable, read-only, and read-only stubs)
22
+ - Current model and edit format settings
23
+ - Auto-commit, auto-lint, and auto-test settings
24
+ - Session metadata (timestamp, version)
25
+
26
+ ### `/load-session <name>`
27
+ Load a previously saved session by name or file path.
28
+
29
+ **Usage:**
30
+ ```
31
+ /load-session my-project-session
32
+ ```
33
+
34
+ **What gets loaded:**
35
+ - Restores chat history and file configurations
36
+ - Recreates the exact session state
37
+ - Preserves all settings and model configurations
38
+
39
+ ### `/list-sessions`
40
+ List all available saved sessions in `.aider/sessions/`.
41
+
42
+ **Usage:**
43
+ ```
44
+ /list-sessions
45
+ ```
46
+
47
+ **Shows:**
48
+ - Session names
49
+ - Model used
50
+ - Edit format
51
+ - Creation timestamp
52
+
53
+ ## How Sessions Work
54
+
55
+ ### Session Storage
56
+ Sessions are stored as JSON files in the `.aider/sessions/` directory within your project. Each session file contains:
57
+
58
+ ```json
59
+ {
60
+ "version": "1.0",
61
+ "timestamp": 1700000000,
62
+ "session_name": "my-session",
63
+ "model": "gpt-4",
64
+ "edit_format": "diff",
65
+ "chat_history": {
66
+ "done_messages": [...],
67
+ "cur_messages": [...]
68
+ },
69
+ "files": {
70
+ "editable": ["file1.py", "file2.js"],
71
+ "read_only": ["docs/README.md"],
72
+ "read_only_stubs": []
73
+ },
74
+ "settings": {
75
+ "root": "/path/to/project",
76
+ "auto_commits": true,
77
+ "auto_lint": false,
78
+ "auto_test": false
79
+ }
80
+ }
81
+ ```
82
+
83
+ ### Session File Location
84
+ - **Relative paths**: Files within your project are stored with relative paths
85
+ - **Absolute paths**: External files are stored with absolute paths
86
+
87
+ ## Use Cases
88
+
89
+ ### Project Continuation
90
+ ```
91
+ # Start working on a project
92
+ /add src/main.py src/utils.py
93
+ # ... have a conversation ...
94
+ /save-session my-project
95
+
96
+ # Later, continue where you left off
97
+ /load-session my-project
98
+ ```
99
+
100
+ ### Multiple Contexts
101
+ ```
102
+ # Work on frontend
103
+ /add src/components/*.jsx src/styles/*.css
104
+ /save-session frontend-work
105
+
106
+ # Switch to backend
107
+ /reset
108
+ /add server/*.py database/*.sql
109
+ /save-session backend-work
110
+
111
+ # Easily switch between contexts
112
+ /load-session frontend-work
113
+ ```
114
+
115
+ ## Best Practices
116
+
117
+ ### Naming Conventions
118
+ - Use descriptive names: `feature-auth-session`, `bugfix-issue-123`
119
+ - Include dates if needed: `2024-01-project-setup`
120
+
121
+ ### File Management
122
+ - Session files include all file paths, so they work best when project structure is stable
123
+ - External files (outside the project root) are stored with absolute paths
124
+ - Missing files are skipped with warnings during loading
125
+
126
+ ### Version Control
127
+ - Consider adding `.aider/sessions/` to your `.gitignore` if sessions contain sensitive information
128
+
129
+ ## Troubleshooting
130
+
131
+ ### Session Not Found
132
+ If `/load-session` reports "Session not found":
133
+ - Check that the session file exists in `.aider/sessions/`
134
+ - Verify the session name matches exactly
135
+ - Use `/list-sessions` to see available sessions
136
+
137
+ ### Missing Files
138
+ If files are reported as missing during loading:
139
+ - The files may have been moved or deleted
140
+ - Session files store relative paths, so directory structure changes can affect this
141
+ - External files must exist at their original locations
142
+
143
+ ### Corrupted Sessions
144
+ If a session fails to load:
145
+ - Check the session file is valid JSON
146
+ - Verify the session version is compatible
147
+ - Try creating a new session and compare file structures
148
+
149
+ ## Related Commands
150
+ - `/reset` - Clear chat history and drop files (useful before loading a session)
151
+
152
+ ## Examples
153
+
154
+ ### Complete Workflow
155
+ ```
156
+ # Start a new project session
157
+ /add package.json src/main.js src/components/
158
+ # ... work on the project ...
159
+ /save-session react-project
160
+
161
+ # Later, continue working
162
+ /load-session react-project
163
+ # All files and chat history are restored
164
+ ```
165
+
166
+ ### Session with External Files
167
+ ```
168
+ # Include documentation from outside the project
169
+ /read-only ~/docs/api-reference.md
170
+ /save-session project-with-docs
171
+ ```
172
+
173
+ ### Multiple Model Sessions
174
+ ```
175
+ # Save session with specific model
176
+ /model gpt-4
177
+ /save-session gpt4-session
178
+
179
+ # Try different model
180
+ /model claude-3
181
+ /save-session claude-session
182
+ ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aider-ce
3
- Version: 0.88.5
3
+ Version: 0.88.6.dev6
4
4
  Summary: Aider is AI pair programming in your terminal
5
5
  Project-URL: Homepage, https://github.com/dwash96/aider-ce
6
6
  Classifier: Development Status :: 4 - Beta
@@ -146,6 +146,8 @@ This project aims to be compatible with upstream Aider, but with priority commit
146
146
 
147
147
  ### Other Notes
148
148
  * [MCP Configuration](https://github.com/dwash96/aider-ce/blob/main/aider/website/docs/config/mcp.md)
149
+ * [Session Management](https://github.com/dwash96/aider-ce/blob/main/aider/website/docs/sessions.md)
150
+
149
151
 
150
152
  ### Installation Instructions
151
153
  This project can be installed using several methods:
@@ -1,23 +1,23 @@
1
- aider/__init__.py,sha256=1DZ03r447CFeqM5FT2f7BbovXi_RlzOLcnP79PsACpU,496
1
+ aider/__init__.py,sha256=ShiJeSj_EA3vHqLbL-zE-RnZh6EeHXx-4-2YtV1hEcw,496
2
2
  aider/__main__.py,sha256=Vdhw8YA1K3wPMlbJQYL5WqvRzAKVeZ16mZQFO9VRmCo,62
3
- aider/_version.py,sha256=zZmH68H1r9949DHpJ12DEFhFY-78SXQLc-K3CKqklcc,706
3
+ aider/_version.py,sha256=qLEpNi3hbuA34zKfoh1P9yPnnrXnPbjrXa8tRXEYqj4,719
4
4
  aider/analytics.py,sha256=c5ujaCcMc3yG-9rz_0oSsqBwmVQRxJnui6iE_yDyY_M,7507
5
5
  aider/args.py,sha256=r9xdhB44K4LF2ru-cbOdaoHYzvG6CyViwcw9QRewEKw,33145
6
6
  aider/args_formatter.py,sha256=CBRnzHyZk-fFCK0ekAzb6C4PPJOU-VTpWIIsJe3qUhk,6369
7
7
  aider/change_tracker.py,sha256=djUlUuewhwRAlC0x6jIUZNpn6_PK1YyiNTMYvlvDeTE,4884
8
- aider/commands.py,sha256=dbS-pqao-TSg35P9BDPiY5fRhLGwY5ZJyyIE-dAqlQw,81156
8
+ aider/commands.py,sha256=XxqOuOolx7jzvpfQKMojWlUFcJNohEUOcwziMgOuJME,88965
9
9
  aider/copypaste.py,sha256=J99QrXILUED_GPdEqxt7WjGZ5if8sfy0VQTzsV2jBrE,2095
10
10
  aider/deprecated.py,sha256=SNeAWR7ih87F5AyFpC4pxRoJAaw8measBW583w0EUT8,4277
11
11
  aider/diffs.py,sha256=y6_rxIKe3FPCIsVy_RRkHdofguYOhYBr2Oytr5AqjHI,3028
12
12
  aider/dump.py,sha256=-naWnGTc0-lAe_93WxBTpunPRfzNlUK7Q5zgXOprHfA,653
13
13
  aider/editor.py,sha256=_WAipJYEOx-q69mPp_hHAQ2yfeoZklBYjS0rTLxCHEA,4364
14
- aider/exceptions.py,sha256=RfGohVQ5Z6dw_hxqRukabsEtSaZOd_uFxiFT_arpvKc,3957
14
+ aider/exceptions.py,sha256=HO3SkFDgZTUDEjukT_wVgeu1GC7enmYffmA0_aPZfyY,4041
15
15
  aider/format_settings.py,sha256=wHW4bLTKwqUKDGX4onxirC4cNgeJ-lHPuS1H04_R444,1041
16
16
  aider/gui.py,sha256=JnHvli1JTCGHAgsOZ8HkAWOKAFxmngbyviZIJeYvjsw,17573
17
17
  aider/help.py,sha256=wExA1E9vuJccKBH1VvKmH-zJqFi-vhNc0n3CD3Y-8fI,4432
18
18
  aider/help_pats.py,sha256=syn7pSVJdcf8uMKTxnZUZBQu-r8JMAi-rrC-k2er1Fk,376
19
19
  aider/history.py,sha256=083Gm7KxNo1PXMFHYiChigxCbRzmLkfNlesODdCC-eY,6067
20
- aider/io.py,sha256=6CKaWP5zWngaMjzS2lpy_pT84a_mGWgDcyFsazHKlTU,56543
20
+ aider/io.py,sha256=Hj0AJqsFMTpMzlPS7_ONAJRr72RCIYhIIcL7nTsd_d4,56812
21
21
  aider/linter.py,sha256=t5jwWZ1dvIzRtig1kTSjzl6u1LRfw0e19qwNIen2jAg,7998
22
22
  aider/llm.py,sha256=dtT0mavXP1SyR0Zu_ysZXKdbs3y53q2PevvDKBUrs6s,1505
23
23
  aider/main.py,sha256=3IE18moiAP2nXs-NY_PJKk8PXS_pdzMvbefoNfT9CnQ,46520
@@ -27,7 +27,7 @@ aider/onboarding.py,sha256=pMWl--NOH_hb4w1wVxLmv8W0akcrilo1Pxf9XUSqBXs,16135
27
27
  aider/openrouter.py,sha256=FAdv7L8xgILXgmC_b1gnuYJStmpaPyiZMp-7nSdInlQ,4642
28
28
  aider/prompts.py,sha256=Qv-JS8BzGjusEPmR3-qmjjvN3S9mb7W4KpWiGui-Jk0,1954
29
29
  aider/reasoning_tags.py,sha256=VOg5wM7JSrMo47OyS1FFuLrr2cp2KyutEC4_zsUsCbY,2288
30
- aider/repo.py,sha256=gjIEkpLNqymOSooWT3BYZ9f9ukLwd6QCd3wmN1hR1WU,22934
30
+ aider/repo.py,sha256=34RGHEBOIEvhStQ4Xr4bNp7kgExAkR-caNMLN-ijboc,22924
31
31
  aider/repomap.py,sha256=KA-ucbHNiLqHQ-iaCyPX5otJdugqexRUY0bwyaLPBlE,35082
32
32
  aider/report.py,sha256=WobVDEK6YxB0GpHrF5twTfUYH5dsNWFIHFsB9lds7E8,5899
33
33
  aider/run_cmd.py,sha256=9-NpSL4hlqIndf_EN1jnmWfjX7vIPbDgKgGPGRAr2Rw,4223
@@ -46,7 +46,7 @@ aider/coders/architect_coder.py,sha256=O5KIf__Ka0bgtCUhYWUmAb08aCS6Nq-CdVWWa-VNK
46
46
  aider/coders/architect_prompts.py,sha256=R0_KxZjo-km_yNaeDAquDP9qfp3IdWgrdMirCWe0RIE,1658
47
47
  aider/coders/ask_coder.py,sha256=Omk4Ih8-prefkMZ_jnRS3faoW5CQUakHOvZ-s7piM3U,210
48
48
  aider/coders/ask_prompts.py,sha256=W6HwDUfzfOLt9q8sl6rw7fN7b5ND90FkxCZrtrWl5vY,1171
49
- aider/coders/base_coder.py,sha256=5R6AGbofXg1PeW-TF3pD0o5vWl1-Tn9lND2GhQlRRvI,132707
49
+ aider/coders/base_coder.py,sha256=fNHPICmmXygdqyQxGrNs6467z0O_OifiiZETGsva_AI,132707
50
50
  aider/coders/base_prompts.py,sha256=O3bBjhf0hgvtKbQ9QyOMnRy8LrmfLyT9dVAcXxHS_3k,3659
51
51
  aider/coders/chat_chunks.py,sha256=8HPet6cmQdgWvaA_tGpinO4ASMst53uTcSEtNVTYDXE,1981
52
52
  aider/coders/context_coder.py,sha256=_RSzu6ptHo2lkTN7-e9TpcZKzqbQF2eNX5MkyswGm3s,1577
@@ -199,6 +199,7 @@ aider/website/docs/llms.md,sha256=fq0VL5uzXFBCbXRbltIcuH-AO5gB36Cw3k26nX5hcIA,15
199
199
  aider/website/docs/more-info.md,sha256=rNeoFIwC7bYcW78YaUFMnoWA8nowuNTGPo3RInPnU48,124
200
200
  aider/website/docs/repomap.md,sha256=rEHIhD1mwEu1lRFVAVEY73AvEHQXvmLygMuJVbrx7sg,3900
201
201
  aider/website/docs/scripting.md,sha256=Fj0J3BLUTUAoUFBMpk1Kayj1paU1c_fXyg-5ZlVFKIU,3123
202
+ aider/website/docs/sessions.md,sha256=d2iy8pBWTEMdfHQ8q3Ki_F_eBBzSyWgK2GuUjA_jr1s,4474
202
203
  aider/website/docs/troubleshooting.md,sha256=UYFgCP8zhJxGJqo4PI0-J-EB-zZ9HtRsIKfCP-qa9lg,218
203
204
  aider/website/docs/usage.md,sha256=LMQpEDZ7rUYgmXN2HYbKg2W2h5sTASlkj89MRHw99rY,3592
204
205
  aider/website/docs/config/adv-model-settings.md,sha256=SGQ-64IUQv7w5uG6sSfrvXRmbik6tUyS4KvwI7Z3uhM,60372
@@ -263,9 +264,9 @@ aider/website/docs/usage/tutorials.md,sha256=ZKBztbUtucHOiv9h8gvWiWTP6MTSsFyz4mA
263
264
  aider/website/docs/usage/voice.md,sha256=BtX7pHRgHRWUmrNbS4JssC-SO8RrJ_OetBCtIYpO0pU,3452
264
265
  aider/website/docs/usage/watch.md,sha256=OVF14lGtv1vhSXRE8PpxQ3YW-uXSifarUbmLBjmLRyA,7940
265
266
  aider/website/share/index.md,sha256=P51aDw9AT8AVbsU7v6g1tWuMjly7y_plM_ZI1ScaT8Y,3172
266
- aider_ce-0.88.5.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
267
- aider_ce-0.88.5.dist-info/METADATA,sha256=uCUDJn4PseoYw1J-KczE4HLbg3JfANIPcjiKYkH48Zg,20820
268
- aider_ce-0.88.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
269
- aider_ce-0.88.5.dist-info/entry_points.txt,sha256=qUBEUd84DYNEHFSgZbgsjgsrAABxqwOj-Dwut9pHZx0,45
270
- aider_ce-0.88.5.dist-info/top_level.txt,sha256=uwOA6ycgSiRLrBsaRBcIeN_eBKAX78U01_KDEHR8mBk,6
271
- aider_ce-0.88.5.dist-info/RECORD,,
267
+ aider_ce-0.88.6.dev6.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
268
+ aider_ce-0.88.6.dev6.dist-info/METADATA,sha256=1njZp1Nm8iKoLgVL64UmyNTH2ln0xoVP7SkeM4h5St0,20927
269
+ aider_ce-0.88.6.dev6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
270
+ aider_ce-0.88.6.dev6.dist-info/entry_points.txt,sha256=qUBEUd84DYNEHFSgZbgsjgsrAABxqwOj-Dwut9pHZx0,45
271
+ aider_ce-0.88.6.dev6.dist-info/top_level.txt,sha256=uwOA6ycgSiRLrBsaRBcIeN_eBKAX78U01_KDEHR8mBk,6
272
+ aider_ce-0.88.6.dev6.dist-info/RECORD,,