fix: review filename sanitize and tool output

This commit is contained in:
JOJO 2026-03-08 00:03:28 +08:00
parent 66b846ee37
commit 463d89f295
3 changed files with 20 additions and 10 deletions

View File

@ -85,6 +85,7 @@ logger = setup_logger(__name__)
DISABLE_LENGTH_CHECK = True
class MainTerminalToolsReadMixin:
@staticmethod
def _clamp_int(value, default, min_value=None, max_value=None):
"""将输入转换为整数并限制范围。"""
if value is None:
@ -99,6 +100,7 @@ class MainTerminalToolsReadMixin:
num = min(max_value, num)
return num
@staticmethod
def _parse_optional_line(value, field_name: str):
"""解析可选的行号参数。"""
if value is None:
@ -111,12 +113,14 @@ class MainTerminalToolsReadMixin:
return None, f"{field_name} 必须大于等于1"
return number, None
@staticmethod
def _truncate_text_block(text: str, max_chars: int):
"""对单段文本应用字符限制。"""
if max_chars and len(text) > max_chars:
return text[:max_chars], True, max_chars
return text, False, len(text)
@staticmethod
def _limit_text_chunks(chunks: List[Dict], text_key: str, max_chars: int):
"""对多个文本片段应用全局字符限制。"""
if max_chars is None or max_chars <= 0:

View File

@ -54,6 +54,7 @@ from .context import with_terminal, get_gui_manager, get_upload_guard, build_upl
from .utils_common import (
build_review_lines,
debug_log,
_sanitize_filename_component,
log_backend_chunk,
log_frontend_chunk,
log_streaming_debug_entry,

View File

@ -355,17 +355,22 @@ def _plain_command_output(result_data: Dict[str, Any]) -> str:
partial_output_note = "已返回当前输出,命令可能仍在运行"
partial_no_output_note = "未捕获输出,命令可能仍在运行"
else:
appended = False
# 1) 优先使用数值型 timeout
timeout_seconds = None
if isinstance(timeout, (int, float)) and timeout > 0:
prefixes.append(f"[timeout after {int(timeout)}s]")
appended = True
# 2) 字符串数字
elif isinstance(timeout, str) and timeout.strip().isdigit():
prefixes.append(f"[timeout after {int(timeout.strip())}s]")
appended = True
if not appended:
prefixes.append("[timeout]")
timeout_seconds = int(timeout)
elif isinstance(timeout, str):
stripped = timeout.strip()
if stripped.isdigit():
timeout_seconds = int(stripped)
else:
digits = "".join(ch for ch in stripped if ch.isdigit())
if digits:
timeout_seconds = int(digits)
if timeout_seconds and timeout_seconds >= 60:
prefixes.append(f"[partial_output ~{timeout_seconds}s]")
partial_output_note = f"已等待约{timeout_seconds}秒,命令可能仍在运行"
partial_no_output_note = f"已等待约{timeout_seconds}秒未捕获输出,命令可能仍在运行"
elif status in {"killed"}:
prefixes.append("[killed]")
elif status in {"awaiting_input"}: