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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
//! 请求者 → AgentContext 的请求消息。
//!
//! 每条消息的 `impl Message<…> for `[`AgentContext`](super::super::actor::AgentContext) 块定义在
//! [`context::actor`](super::super::actor) 模块中。
use crateRole;
// ---------------------------------------------------------------------------
// 变更消息
// ---------------------------------------------------------------------------
/// 追加一条消息到 incremental 区末尾。
///
/// 批量追加消息到 incremental 区。
///
/// 替换 incremental 区指定索引的消息。
///
/// 仅对 incremental 区有效。
/// 在 incremental 区指定索引插入消息。
///
/// 移除 incremental 区指定索引的消息。
///
/// 弹出 incremental 区最后一条消息。
///
;
/// 按角色保留 incremental 区消息,其余移除。
///
/// 清空整个 incremental 区。
///
;
// ---------------------------------------------------------------------------
// 查询消息
// ---------------------------------------------------------------------------
/// 获取三区总消息数。
;
/// 检查三区是否全部为空。
;
/// 按全局索引获取消息。
///
/// 索引按 immutable → compressed → incremental 顺序计算。越界返回 `None`。
;
/// 获取三区全部消息的拼接结果。
///
/// 顺序:immutable → compressed → incremental。
;
/// 获取 immutable 区的消息副本。
;
/// 获取 compressed 区的消息副本。
;
/// 获取 incremental 区的消息副本。
;
/// 按角色筛选三区全部消息。
;
// ---------------------------------------------------------------------------
// 对话消息
// ---------------------------------------------------------------------------
/// 非流式对话。
///
/// 发送前根据 [`crate::CommonOpts`] 检查上下文是否已满,满则自动压缩或返回错误。
/// 然后拼接三区消息 + scratch,发送给后端 LLM。
/// 成功后自动将响应消息存入 incremental 区。
/// 流式对话。
///
/// 发送前根据 [`crate::CommonOpts`] 检查上下文是否已满,满则自动压缩或返回错误。
/// 然后拼接三区消息 + scratch,发送给后端 LLM。
// ---------------------------------------------------------------------------
// 压缩消息
// ---------------------------------------------------------------------------
/// 压缩策略参数。
/// 触发上下文压缩。
///
/// 根据 [`CompressStrategy`] 对 incremental 区执行压缩。
/// 摘要由后端 LLM 生成,通过 `opts` 传递请求选项。
/// 也可通过 [`crate::CommonOpts::auto_compress`] 在 [`RequestSend`]/[`RequestSendStream`] 时自动触发。
// ---------------------------------------------------------------------------
// 工具消息
// ---------------------------------------------------------------------------
/// 估算三区全部消息的 token 数量。
///
/// 委托给后端的 [`estimate_tokens`](crate::ContextBackend::estimate_tokens)。
/// 失败时降级返回 0。
;
/// 将三区全部消息导出为字符串(完整上下文)。Reply = `Result<String, AgentError>`。
///
/// 消息按 immutable → compressed → incremental 顺序输出,每条消息序列化为一行紧凑 JSON。
;
/// 将 incremental 区消息导出为字符串。Reply = `Result<String, AgentError>`。
///
/// 与 [`RequestImportIncremental`] 互为逆操作,仅处理对话流。
;
/// 从字符串导入消息到 incremental 区。Reply = `Result<(), AgentError>`。
///
/// 先解析全部行,再替换 incremental 区。每行一条 JSON,空行跳过。
/// 解析失败返回错误。
/// 与 [`RequestExportIncremental`] 互为逆操作。