1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//! CLI 文本截断工具模块
//!
//! 本模块提供用于 CLI 输出的文本截断功能。在终端环境中显示长文本时,
//! 需要限制字符数量以保持输出的可读性和布局一致性。
//!
//! # 设计原则
//!
//! - **Unicode 安全**: 正确处理多字节 UTF-8 字符,按字符而非字节截断
//! - **视觉提示**: 截断时添加省略号(`…`)提示用户内容被截断
//! - **零分配优化**: 仅在必要时分配输出字符串
/// 将字符串截断到指定的最大字符数
///
/// 此函数按字符(而非字节)截断字符串,确保正确处理 Unicode 字符。
/// 当字符串超过最大长度时,会在末尾添加省略号(`…`)。
///
/// # 参数
///
/// * `s` - 待截断的输入字符串
/// * `max_chars` - 最大字符数(不包括省略号)
///
/// # 返回值
///
/// 返回截断后的字符串:
/// - 如果 `max_chars` 为 0,返回空字符串
/// - 如果输入字符串长度不超过 `max_chars`,返回原字符串的克隆
/// - 如果输入字符串超过 `max_chars`,返回前 `max_chars` 个字符加省略号
///
/// # 示例
///
/// ```ignore
/// use crate::app::agent::agent::loop_::cli::transcript::truncate::truncate_chars_cli;
///
/// // 正常截断
/// let result = truncate_chars_cli("Hello, World!", 5);
/// assert_eq!(result, "Hello…");
///
/// // 字符串短于限制,不截断
/// let result = truncate_chars_cli("Hi", 10);
/// assert_eq!(result, "Hi");
///
/// // 最大字符数为 0,返回空字符串
/// let result = truncate_chars_cli("Any text", 0);
/// assert_eq!(result, "");
///
/// // Unicode 字符正确处理
/// let result = truncate_chars_cli("你好世界", 2);
/// assert_eq!(result, "你好…");
/// ```
pub