diff --git a/src/kimi_cli/tools/file/read.py b/src/kimi_cli/tools/file/read.py index 1f0c0da81c..fde725d05f 100644 --- a/src/kimi_cli/tools/file/read.py +++ b/src/kimi_cli/tools/file/read.py @@ -177,7 +177,9 @@ async def __call__(self, params: Params) -> ToolReturnValue: elif len(lines) < params.n_lines: message += " End of file reached." if truncated_line_numbers: - message += f" Lines {truncated_line_numbers} were truncated." + # Format line numbers as comma-separated list for better readability + lines_str = ", ".join(str(n) for n in truncated_line_numbers) + message += f" Lines {lines_str} were truncated." return ToolOk( output="".join(lines_with_no), # lines already contain \n, just join them message=message, diff --git a/src/kimi_cli/tools/file/replace.py b/src/kimi_cli/tools/file/replace.py index d5bc6b35dc..09c5175632 100644 --- a/src/kimi_cli/tools/file/replace.py +++ b/src/kimi_cli/tools/file/replace.py @@ -135,13 +135,17 @@ async def __call__(self, params: Params) -> ToolReturnValue: # Write the modified content back to the file await p.write_text(content, errors="replace") - # Count changes for success message + # Count changes for success message by re-applying edits to count total_replacements = 0 + temp_content = original_content for edit in edits: if edit.replace_all: - total_replacements += original_content.count(edit.old) + total_replacements += temp_content.count(edit.old) + temp_content = temp_content.replace(edit.old, edit.new) else: - total_replacements += 1 if edit.old in original_content else 0 + if edit.old in temp_content: + total_replacements += 1 + temp_content = temp_content.replace(edit.old, edit.new, 1) return ToolReturnValue( is_error=False, diff --git a/src/kimi_cli/ui/shell/slash.py b/src/kimi_cli/ui/shell/slash.py index b644a8997d..09d7e0ad48 100644 --- a/src/kimi_cli/ui/shell/slash.py +++ b/src/kimi_cli/ui/shell/slash.py @@ -395,8 +395,9 @@ def feedback(app: Shell, args: str): ISSUE_URL = "https://github.com/MoonshotAI/kimi-cli/issues" if webbrowser.open(ISSUE_URL): - return - console.print(f"Please submit feedback at [underline]{ISSUE_URL}[/underline].") + console.print("Opening GitHub issues in your browser...") + else: + console.print(f"Could not open browser. Please visit: [underline]{ISSUE_URL}[/underline]") @registry.command(aliases=["reset"]) diff --git a/tests/tools/test_read_file.py b/tests/tools/test_read_file.py index 6e71151688..609829a000 100644 --- a/tests/tools/test_read_file.py +++ b/tests/tools/test_read_file.py @@ -288,8 +288,7 @@ async def test_line_truncation_and_messaging(read_file_tool: ReadFile, temp_work assert not result.is_error assert isinstance(result.output, str) assert result.message == snapshot( - "3 lines read from file starting from line 1. End of file reached. " - "Lines [1, 3] were truncated." + "3 lines read from file starting from line 1. End of file reached. Lines 1, 3 were truncated." ) # Verify truncation actually happened for specific lines