Skip to content

Commit d43775e

Browse files
authored
Merge pull request #427 from dwash96/v0.96.8
V0.96.8
2 parents e10d769 + e7209c3 commit d43775e

6 files changed

Lines changed: 38 additions & 17 deletions

File tree

cecli/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from packaging import version
22

3-
__version__ = "0.96.7.dev"
3+
__version__ = "0.96.8.dev"
44
safe_version = __version__
55

66
try:

cecli/coders/agent_coder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class AgentCoder(Coder):
4141

4242
edit_format = "agent"
4343
prompt_format = "agent"
44+
context_management_enabled = True
4445

4546
def __init__(self, *args, **kwargs):
4647
self.recently_removed = {}
@@ -71,7 +72,6 @@ def __init__(self, *args, **kwargs):
7172
}
7273
self.max_tool_calls = 10000
7374
self.large_file_token_threshold = 8192
74-
self.context_management_enabled = True
7575
self.skills_manager = None
7676
self.change_tracker = ChangeTracker()
7777
self.args = kwargs.get("args")

cecli/coders/base_coder.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ async def create(
262262

263263
# Transfer TUI app weak reference
264264
res.tui = from_coder.tui
265+
res.context_management_enabled = from_coder.context_management_enabled
265266

266267
await res.initialize_mcp_tools()
267268

@@ -2095,6 +2096,10 @@ async def send_message(self, inp):
20952096
self.io.llm_started()
20962097

20972098
if inp:
2099+
# Make sure current coder actually has control of conversation system
2100+
ConversationChunks.initialize_conversation_system(self)
2101+
self.format_chat_chunks()
2102+
20982103
# Always add user message to conversation manager
20992104
ConversationManager.add_message(
21002105
message_dict=dict(role="user", content=inp),

cecli/commands/context_management.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
from cecli.commands.utils.base_command import BaseCommand
44
from cecli.commands.utils.helpers import format_command_result
5+
from cecli.helpers.conversation import (
6+
ConversationFiles,
7+
ConversationManager,
8+
MessageTag,
9+
)
510

611

712
class ContextManagementCommand(BaseCommand):
@@ -19,6 +24,10 @@ async def execute(cls, io, coder, args, **kwargs):
1924

2025
# Toggle the setting
2126
coder.context_management_enabled = not coder.context_management_enabled
27+
ConversationManager.clear_tag(MessageTag.READONLY_FILES)
28+
ConversationManager.clear_tag(MessageTag.EDIT_FILES)
29+
ConversationManager.clear_tag(MessageTag.CHAT_FILES)
30+
ConversationFiles.clear_file_cache()
2231

2332
# Report the new state
2433
if coder.context_management_enabled:

cecli/helpers/conversation/files.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def get_file_content(
9393
fname: str,
9494
generate_stub: bool = False,
9595
context_management_enabled: bool = False,
96-
large_file_token_threshold: int = 1000,
96+
large_file_token_threshold: int = 8192,
9797
) -> Optional[str]:
9898
"""
9999
Get file content with optional stub generation for large files.
@@ -111,7 +111,6 @@ def get_file_content(
111111
File content, stub for large files, or None if file cannot be read
112112
"""
113113
abs_fname = os.path.abspath(fname)
114-
115114
# First, ensure file is in cache (read-through cache)
116115
if abs_fname not in cls._file_contents_original:
117116
cls.add_file(fname)
@@ -129,14 +128,14 @@ def get_file_content(
129128
if not context_management_enabled:
130129
return content
131130

131+
coder = cls.get_coder()
132+
132133
# Check if file is large
133-
content_length = len(content)
134+
content_length = coder.main_model.token_count(content)
134135

135136
if content_length <= large_file_token_threshold:
136137
return content
137138

138-
# File is large, generate stub
139-
coder = cls.get_coder()
140139
# Use RepoMap to generate file stub
141140
return RepoMap.get_file_stub(fname, coder.io, line_numbers=True)
142141

@@ -181,6 +180,7 @@ def generate_diff(cls, fname: str) -> Optional[str]:
181180

182181
# Read current content using coder.io.read_text()
183182
coder = cls.get_coder()
183+
rel_fname = coder.get_rel_fname(fname)
184184
try:
185185
current_content = coder.io.read_text(abs_fname)
186186
except Exception:
@@ -199,8 +199,8 @@ def generate_diff(cls, fname: str) -> Optional[str]:
199199
diff_lines = difflib.unified_diff(
200200
snapshot_content.splitlines(),
201201
current_content.splitlines(),
202-
fromfile=f"{abs_fname} (snapshot)",
203-
tofile=f"{abs_fname} (current)",
202+
fromfile=f"{rel_fname} (snapshot)",
203+
tofile=f"{rel_fname} (current)",
204204
lineterm="",
205205
n=3,
206206
)
@@ -224,20 +224,25 @@ def update_file_diff(cls, fname: str) -> Optional[str]:
224224
Returns:
225225
Diff string or None if no changes
226226
"""
227+
coder = cls.get_coder()
227228
diff = cls.generate_diff(fname)
229+
228230
if diff:
229231
# Store diff
230232
abs_fname = os.path.abspath(fname)
231233
cls._file_diffs[abs_fname] = diff
232234

235+
rel_fname = fname
236+
237+
if coder:
238+
rel_fname = coder.get_rel_fname(fname)
239+
233240
# Add diff message to conversation
234241
diff_message = {
235242
"role": "user",
236-
"content": f"File {fname} has changed:\n\n{diff}",
243+
"content": f"File {rel_fname} has changed:\n\n{diff}",
237244
}
238245

239-
# Determine tag based on file type
240-
coder = cls.get_coder()
241246
if coder and hasattr(coder, "abs_fnames"):
242247
tag = (
243248
MessageTag.EDIT_FILES

cecli/helpers/conversation/integration.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -373,9 +373,11 @@ def add_readonly_files_messages(cls, coder) -> List[Dict[str, Any]]:
373373
content = ConversationFiles.get_file_stub(fname)
374374
if content:
375375
# Add user message with file path as hash_key
376+
rel_fname = coder.get_rel_fname(fname)
377+
376378
user_msg = {
377379
"role": "user",
378-
"content": f"File Contents {fname}:\n\n{content}",
380+
"content": f"File Contents {rel_fname}:\n\n{content}",
379381
}
380382
ConversationManager.add_message(
381383
message_dict=user_msg,
@@ -423,7 +425,6 @@ def add_readonly_files_messages(cls, coder) -> List[Dict[str, Any]]:
423425
message_dict=assistant_msg,
424426
tag=MessageTag.READONLY_FILES,
425427
hash_key=("image_assistant", fname),
426-
force=True,
427428
)
428429

429430
return messages
@@ -469,16 +470,18 @@ def add_chat_files_messages(cls, coder) -> Dict[str, Any]:
469470
if not content:
470471
continue
471472

473+
rel_fname = coder.get_rel_fname(fname)
474+
472475
# Create user message
473476
user_msg = {
474477
"role": "user",
475-
"content": f"File Contents {fname}:\n\n{content}",
478+
"content": f"File Contents {rel_fname}:\n\n{content}",
476479
}
477480

478481
# Create assistant message
479482
assistant_msg = {
480483
"role": "assistant",
481-
"content": "Ok, I will view and/or modify this file as is necessary.",
484+
"content": "Ok, I will modify this file as is necessary.",
482485
}
483486

484487
# Determine tag based on editability
@@ -526,7 +529,6 @@ def add_chat_files_messages(cls, coder) -> Dict[str, Any]:
526529
message_dict=assistant_msg,
527530
tag=MessageTag.CHAT_FILES,
528531
hash_key=("image_assistant", fname),
529-
force=True,
530532
)
531533

532534
return result

0 commit comments

Comments
 (0)