优化: AI授权目录改进(误弹窗根因+安全加固)

strip_verbatim比对侧收口/黑名单统一/symlink/bind双路径reload/toast接线;cargo test 18
This commit is contained in:
lxy
2026-06-20 15:54:51 +08:00
parent e5a89165e6
commit e2ece2d898
8 changed files with 251 additions and 79 deletions
+13 -1
View File
@@ -109,6 +109,11 @@ async fn create_with_binding(
updated_at: now,
};
state.projects.insert(record.clone()).await.map_err(err_str)?;
// F-260620: 绑定目录变更后立即 reload 白名单(reload_allowed_dirs 读 projects.path 合并 persistent),
// 否则新绑定目录需重启/改 Settings 才生效 → AI 访问误弹窗(已绑定重复弹窗主因,agent3 问题5)
if record.path.is_some() {
state.reload_allowed_dirs().await;
}
Ok(record)
}
@@ -208,7 +213,12 @@ pub async fn update_project(
.projects
.update_field(&id, &field, &value)
.await
.map_err(err_str)
.map_err(err_str)?;
// F-260620: path 字段变更后立即 reload 白名单(新绑定/重绑目录即时生效,防 AI 误弹窗)
if field == "path" {
state.reload_allowed_dirs().await;
}
Ok(true)
}
/// 删除项目(软删 → 回收站,可恢复)
@@ -307,6 +317,8 @@ pub async fn relocate_project_path(
.update_field(&id, "path", &new_path)
.await
.map_err(err_str)?;
// F-260620: 重定位目录后立即 reload 白名单(新路径即时授权,防 AI 误弹窗)
state.reload_allowed_dirs().await;
state
.projects
.update_field(&id, "stack", &stack_json)