重构: 巨函数拆分 + 清理历史标记注释 + custom_prompt/停止按钮/tunnel 改进
This commit is contained in:
@@ -16,7 +16,7 @@ use super::risk_from_str;
|
||||
/// status=pending 的行(持久化真相源),此处读回重建内存态,使重启后待审批不丢。
|
||||
/// 前端经 ai_pending_tool_calls 查询 + switchConversation 恢复 toolCard 的 pending_approval 态。
|
||||
///
|
||||
/// **F-260616-09 B 批8 多 conv 适配(设计 §3 batch8 + §5.2)**:DB pending 审批按
|
||||
/// **多 conv 适配**:DB pending 审批按
|
||||
/// `conversation_id` 分配到各 conv 的 per_conv state——对每个含 pending 审批的 conv
|
||||
/// **惰性建 `PerConvState`**(不依赖 `active_conversation_id` 单值),使后续 ai_approve →
|
||||
/// try_continue_agent_loop 的 `conv_read(conv_id)` 命中各自 per_conv(各归各,不串)。
|
||||
@@ -69,19 +69,19 @@ pub async fn restore_pending_approvals(state: &AppState) {
|
||||
arguments: args,
|
||||
conversation_id: rec.conversation_id,
|
||||
recovered: true,
|
||||
// 阶段3a 单真相源合并:恢复的审批一律 kind=Risk(diff=None,与原顶层 diff 字段同语义)。
|
||||
// 单真相源合并:恢复的审批一律 kind=Risk(diff=None,与原顶层 diff 字段同语义)。
|
||||
//
|
||||
// **path 审批不恢复的决策(语义保留)**:路径授权挂起是会话级状态,重启后 session
|
||||
// 重建,无法恢复挂起语义;且 path 的"always"决策已写入持久白名单(Settings KV),
|
||||
// 重启后白名单仍生效(文件工具路径预校验会直接 Authorized,不再挂起)。故 path 审批
|
||||
// 无需恢复 —— 恢复 risk 即可覆盖所有需人工决策的积压。
|
||||
//
|
||||
// AE-2025-03: 重启恢复的审批不重读旧文件——审批可能跨重启,
|
||||
// 重启恢复的审批不重读旧文件——审批可能跨重启,
|
||||
// 期间文件可能已被外部改动,重读生成 diff 反映的不是当初决策时的状态,
|
||||
// 且恢复路径在 session.lock 内做 async IO 复杂度高,预览价值低。
|
||||
// 前端见 diff=None 时回退显新 content。
|
||||
kind: ApprovalKind::Risk { diff: None },
|
||||
// 阶段4:重启恢复的审批 retry_count=0(恢复语义即"待用户首次决策",非重试)。
|
||||
// 重启恢复的审批 retry_count=0(恢复语义即"待用户首次决策",非重试)。
|
||||
// 即便审计表已有 pending 记录,恢复后用户审批执行属首次正常执行,不断路。
|
||||
retry_count: 0,
|
||||
// 恢复审批 created_at=重启时刻(无原挂起时间记录,按当前系统时间计)。
|
||||
@@ -98,12 +98,12 @@ pub async fn restore_pending_approvals(state: &AppState) {
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests_f09_batch8_restore {
|
||||
mod tests_multi_conv_restore {
|
||||
use super::super::{ApprovalKind, PendingApproval};
|
||||
use super::*;
|
||||
use crate::commands::ai::AiSession;
|
||||
|
||||
/// F-260616-09 B 批8(设计 §3 batch8 + §5.2):验证 restore_pending_approvals 的多 conv 分配不变量。
|
||||
/// 验证 restore_pending_approvals 的多 conv 分配不变量。
|
||||
///
|
||||
/// restore_pending_approvals 受限于 AppState(需 DB),无法直接单测。但其核心分配逻辑
|
||||
/// 「对每个 conversation_id=Some 的恢复审批,惰性建/复用对应 conv 的 PerConvState」依赖
|
||||
@@ -129,7 +129,7 @@ mod tests_f09_batch8_restore {
|
||||
let _ = session.conv(cid); // 惰性建
|
||||
}
|
||||
}
|
||||
// 阶段3a 单真相源合并:恢复的 pending 全部进 pending_approvals,kind=Risk。
|
||||
// 单真相源合并:恢复的 pending 全部进 pending_approvals,kind=Risk。
|
||||
session.pending_approvals.insert(
|
||||
tool_call_id.clone(),
|
||||
PendingApproval {
|
||||
@@ -139,7 +139,7 @@ mod tests_f09_batch8_restore {
|
||||
conversation_id: conversation_id.clone(),
|
||||
recovered: true,
|
||||
kind: ApprovalKind::Risk { diff: None },
|
||||
// 阶段4:恢复的审批 retry_count=0(首次用户决策,非重试)。
|
||||
// 恢复的审批 retry_count=0(首次用户决策,非重试)。
|
||||
retry_count: 0,
|
||||
created_at: None,
|
||||
},
|
||||
@@ -156,7 +156,7 @@ mod tests_f09_batch8_restore {
|
||||
);
|
||||
|
||||
// 不变量 2:pending_approvals HashMap 4 条(含无主),conversation_id 保留(业务语义)。
|
||||
// 阶段3a:全部进单表 pending_approvals(原 risk_pending 合一,path 审批不恢复)。
|
||||
// 全部进单表 pending_approvals(原 risk_pending 合一,path 审批不恢复)。
|
||||
assert_eq!(session.pending_approvals.len(), 4, "全部 pending 入 pending_approvals");
|
||||
// 构造期恒等式:上方 pending_rows 构造的 4 条 PendingApproval 全部 kind=Risk(本测试构造
|
||||
// 时未插入任何 Path(_)),故 filter Path(_) 计数必为 0。这是构造恒等式而非外部不变量——
|
||||
|
||||
Reference in New Issue
Block a user