新增: 审批策略Persona维度(reviewer/analyst全auto+扩展点)
- should_auto_for_persona: 叠加在 classify_risk_and_auto 之上的人设维度判定 - reviewer/analyst 人设工具调用全 auto(只读工具审批无意义) - 预留 Phase 2 工具维度扩展点(函数内加 if 分支即可) - 零编译警告
This commit is contained in:
@@ -1,13 +1,9 @@
|
|||||||
//! F-#97 / AE-04 / 阶段4 审批门控逻辑。
|
//! F-#97 / AE-04 / 阶段4 审批门控逻辑。
|
||||||
//!
|
//!
|
||||||
//! 第六批从 audit/mod.rs 抽离,行为零变更。包含:
|
//! 审批策略(方案 B:Persona 维度 + 扩展点):
|
||||||
//! - `classify_risk_and_auto`:按 risk_level + auto_exec_mode 判定是否自动执行
|
//! - reviewer/analyst 人设的工具调用全 auto(只读/分析,审批无意义)
|
||||||
//! - `check_trust_hits`:会话信任命中检测(AE-2025-04)
|
//! - 其他人设走现有 auto_exec_mode 三档
|
||||||
//! - `insert_pending_approval`:挂起审批 + diff 生成 + AiApprovalRequired emit + 审计落 pending
|
//! - Phase 2 扩展点:可在 should_auto_for_persona 内加工具维度 if 分支
|
||||||
//! - `detect_retry_count`:同 tc_id 重试检测
|
|
||||||
//! - `handle_approval_tool`:单工具调用的审批门控(调用上述子函数组合)
|
|
||||||
//!
|
|
||||||
//! process_tool_calls 通过 `use approval::{detect_retry_count, handle_approval_tool}` 裸名调用。
|
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
@@ -54,6 +50,44 @@ pub(super) fn classify_risk_and_auto(
|
|||||||
should_auto
|
should_auto
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 审批策略方案 B:Persona 维度判定。
|
||||||
|
///
|
||||||
|
/// 在 classify_risk_and_auto 之上叠加人设维度:
|
||||||
|
/// - reviewer/analyst 人设:工具白名单已限制为只读,全部 auto(审批纯浪费)
|
||||||
|
/// - 其他人设:走 classify_risk_and_auto 原逻辑
|
||||||
|
///
|
||||||
|
/// Phase 2 扩展点:在此函数内加工具维度 if 分支,例如:
|
||||||
|
/// ```ignore
|
||||||
|
/// if persona_id == "coder" && tool_name == "write_file" {
|
||||||
|
/// if let Some(path) = args.get("path").and_then(|v| v.as_str()) {
|
||||||
|
/// if path.ends_with(".md") { return true; } // 写文档 auto
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
#[allow(dead_code)] // 接线到 process_tool_calls 需要 SubTask 携带 persona_id,后续批次接入
|
||||||
|
pub(super) fn should_auto_for_persona(
|
||||||
|
persona_id: Option<&str>,
|
||||||
|
risk_level: RiskLevel,
|
||||||
|
auto_exec_mode: &str,
|
||||||
|
tool_name: &str,
|
||||||
|
args: &serde_json::Value,
|
||||||
|
) -> bool {
|
||||||
|
// 人设维度:reviewer/analyst 全 auto
|
||||||
|
match persona_id {
|
||||||
|
Some("reviewer") | Some("analyst") => {
|
||||||
|
tracing::debug!(
|
||||||
|
persona = ?persona_id,
|
||||||
|
tool = %tool_name,
|
||||||
|
"[POLICY-B] 只读人设全 auto"
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
// 兜底:现有三档 + patch_file 特例
|
||||||
|
classify_risk_and_auto(risk_level, auto_exec_mode, tool_name, args)
|
||||||
|
}
|
||||||
|
|
||||||
/// AE-2025-04 检查会话信任命中。
|
/// AE-2025-04 检查会话信任命中。
|
||||||
///
|
///
|
||||||
/// 首批信任工具:write_file / run_command。同会话已批准过同工具+同目录 →
|
/// 首批信任工具:write_file / run_command。同会话已批准过同工具+同目录 →
|
||||||
|
|||||||
Reference in New Issue
Block a user