fix: 优先审批 + 首用户隔离 + 审批DB闭环 + memo错误
1. (High) 内置工具先审批再执行 — is_builtin 检查优先, High 风险通过 builtin_approve 后再调用 BuiltinRegistry 2. (High) 首用户 current_user_id — 移除 !is_empty() 守卫 3. (Medium) 审批 DB 状态闭环 — 取消/错误时按 user_id 更新最近 pending 4. (Medium) manage_memos 写入失败 — .ok() → 完整错误返回
This commit is contained in:
+10
-2
@@ -36,6 +36,10 @@ impl BuiltinRegistry {
|
||||
pub fn is_high_risk(name: &str) -> bool {
|
||||
Self::specs().iter().any(|s| s.name == name && s.risk_level == RiskLevel::High)
|
||||
}
|
||||
|
||||
pub fn is_builtin(name: &str) -> bool {
|
||||
Self::specs().iter().any(|s| s.name == name)
|
||||
}
|
||||
}
|
||||
|
||||
fn execute_datetime() -> SkillResult {
|
||||
@@ -64,7 +68,9 @@ async fn handle_memos(args_json: &str) -> SkillResult {
|
||||
"id": next_id, "content": content,
|
||||
"created_at": Local::now().format("%Y-%m-%d %H:%M").to_string()
|
||||
}));
|
||||
std::fs::write(path, serde_json::to_string_pretty(&data).unwrap()).ok();
|
||||
if let Err(e) = std::fs::write(path, serde_json::to_string_pretty(&data).unwrap()) {
|
||||
return SkillResult::error(format!("写入备忘录失败: {}", e));
|
||||
}
|
||||
SkillResult::ok(format!("已添加备忘录 #{}", next_id))
|
||||
}
|
||||
"list" => {
|
||||
@@ -80,7 +86,9 @@ async fn handle_memos(args_json: &str) -> SkillResult {
|
||||
let before = data.len();
|
||||
data.retain(|m| m.get("id").and_then(|v| v.as_i64()) != Some(id));
|
||||
if data.len() == before { return SkillResult::error(format!("未找到备忘录 #{}", id)); }
|
||||
std::fs::write(path, serde_json::to_string_pretty(&data).unwrap()).ok();
|
||||
if let Err(e) = std::fs::write(path, serde_json::to_string_pretty(&data).unwrap()) {
|
||||
return SkillResult::error(format!("写入备忘录失败: {}", e));
|
||||
}
|
||||
SkillResult::ok(format!("已删除备忘录 #{}", id))
|
||||
}
|
||||
_ => SkillResult::error("未知操作,支持: add, list, delete"),
|
||||
|
||||
Reference in New Issue
Block a user