Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
56a1f4f
feat: Implement nested LLM retry configuration via `--retries` argument
szmania Jan 6, 2026
eaf9e8c
docs: Document the nested structure of the `retries` configuration
szmania Jan 6, 2026
1d0b158
docs: Update retries configuration documentation
szmania Jan 6, 2026
a908e6b
feat: Implement full LLM retry logic in send_completion
szmania Jan 6, 2026
0cdcc0c
Bump Version
dwash96 Jan 10, 2026
3629fa8
Unified Replace Text Tool
dwash96 Jan 10, 2026
a8a5eb7
Update agent prompt to remove other "Replace" tools
dwash96 Jan 10, 2026
cec0495
InsertBlock: Allow insertion into new/empty files unemcumbered
dwash96 Jan 10, 2026
2200523
Add ability to handle and read from commands running in the background
dwash96 Jan 10, 2026
aa1bb08
Add tests for background command manager
dwash96 Jan 10, 2026
d65cb48
[gh-392] Add custom commands to load/remove MCPs dynamically
gopar Jan 13, 2026
49c53b2
[gh-392] Add tests
gopar Jan 13, 2026
2b7e9d3
#399: Add back /editor-model slash command
dwash96 Jan 14, 2026
4ff00bc
Fix Formatting
dwash96 Jan 14, 2026
569ff90
[gh-392] Remove local server when not in agent mode
gopar Jan 16, 2026
15e99ca
Conversation Manager Overhaul
dwash96 Jan 17, 2026
57f7cf4
Merge pull request #400 from dwash96/v0.95.12
dwash96 Jan 17, 2026
165af71
Update editor model command with Conversation sub system and debug flag
dwash96 Jan 17, 2026
f2bfd47
Fix Pytest Error in 3.10
dwash96 Jan 17, 2026
e8d0156
Merge pull request #398 from gopar/gh-392-enable-and-disable-mcp-servers
dwash96 Jan 17, 2026
cc97ed8
#304: Hide thinking block
dwash96 Jan 17, 2026
3d63fc3
#401: Create new file should actually tell you the file name
dwash96 Jan 17, 2026
95ad4e4
Pass show-thinking in reasoning tag tests
dwash96 Jan 17, 2026
40c0885
Add show-thinking flag throughout ALL reasoning content tests
dwash96 Jan 17, 2026
98262b2
Fix repomap tests
dwash96 Jan 18, 2026
6b51197
#396: Make file detection in responses more eager
dwash96 Jan 18, 2026
f01b6b0
Merge remote-tracking branch 'szmania/feature-retry-settings-rebased'…
dwash96 Jan 18, 2026
d35714e
Light Bulb Moment: System Messages are appended in a LLM conversation…
dwash96 Jan 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cecli/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from packaging import version

__version__ = "0.95.10.dev"
__version__ = "0.96.0.dev"
safe_version = __version__

try:
Expand Down
18 changes: 12 additions & 6 deletions cecli/args.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,12 @@ def get_parser(default_config_files, git_root):
" not set)"
),
)
group.add_argument(
"--show-thinking",
action=argparse.BooleanOptionalAction,
default=True,
help="Show reasoning content in the response (default: True)",
)
group.add_argument(
"--verify-ssl",
action=argparse.BooleanOptionalAction,
Expand Down Expand Up @@ -241,6 +247,12 @@ def get_parser(default_config_files, git_root):
" If unspecified, defaults to the model's max_chat_history_tokens."
),
)
group.add_argument(
"--retries",
metavar="RETRIES_JSON",
help="Specify LLM retry configuration as a JSON string",
default=None,
)

#######
group = parser.add_argument_group("Customization Settings")
Expand Down Expand Up @@ -450,12 +462,6 @@ def get_parser(default_config_files, git_root):
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,
default=False,
help="Restore the previous chat history messages (default: False)",
)
#########
group = parser.add_argument_group("Input settings")
group.add_argument(
Expand Down
439 changes: 160 additions & 279 deletions cecli/coders/agent_coder.py

Large diffs are not rendered by default.

57 changes: 55 additions & 2 deletions cecli/coders/architect_coder.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import asyncio

from ..commands import SwitchCoderSignal
from ..helpers.conversation import ConversationManager, MessageTag
from .ask_coder import AskCoder
from .base_coder import Coder

Expand Down Expand Up @@ -45,19 +46,71 @@ async def reply_completed(self):
new_kwargs = dict(io=self.io, from_coder=self)
new_kwargs.update(kwargs)

# Save current conversation state
original_all_messages = ConversationManager.get_messages()
original_coder = self

editor_coder = await Coder.create(**new_kwargs)
editor_coder.cur_messages = []
editor_coder.done_messages = []

# Clear ALL messages for editor coder (start fresh)
ConversationManager.reset()

# Re-initialize ConversationManager with editor coder
ConversationManager.initialize(editor_coder)
ConversationManager.clear_cache()

if self.verbose:
editor_coder.show_announcements()

try:
await editor_coder.generate(user_message=content, preproc=False)

# Save editor's ALL messages
editor_all_messages = ConversationManager.get_messages()

# Clear manager and restore original state
ConversationManager.reset()
ConversationManager.initialize(original_coder or self)

# Restore original messages with all metadata
for msg in original_all_messages:
ConversationManager.add_message(
msg.to_dict(),
MessageTag(msg.tag),
priority=msg.priority,
timestamp=msg.timestamp,
mark_for_delete=msg.mark_for_delete,
hash_key=msg.hash_key,
)

# Append editor's DONE and CUR messages (but not other tags like SYSTEM)
for msg in editor_all_messages:
if msg.tag in [MessageTag.DONE.value, MessageTag.CUR.value]:
ConversationManager.add_message(
msg.to_dict(),
MessageTag(msg.tag),
priority=msg.priority,
timestamp=msg.timestamp,
mark_for_delete=msg.mark_for_delete,
hash_key=msg.hash_key,
)

self.move_back_cur_messages("I made those changes to the files.")
self.total_cost = editor_coder.total_cost
self.coder_commit_hashes = editor_coder.coder_commit_hashes
except Exception as e:
self.io.tool_error(e)
# Restore original state on error
ConversationManager.reset()
ConversationManager.initialize(original_coder or self)
for msg in original_all_messages:
ConversationManager.add_message(
msg.to_dict(),
MessageTag(msg.tag),
priority=msg.priority,
timestamp=msg.timestamp,
mark_for_delete=msg.mark_for_delete,
hash_key=msg.hash_key,
)

raise SwitchCoderSignal(main_model=self.main_model, edit_format="architect")
Loading
Loading