优化: 架构债收尾(ScriptNode 注释更新 + 双监听器核查)

- ScriptNode 白/黑名单注释清理(移除误导性'待后续',标注实际读取方式)
- 双监听器核查结论:df-data-changed 多监听器是正常 pub-sub(project store + FileExplorer + TaskDetail),非 bug
- God 文件拆分(MessageList/ChatInput)标记为独立技术债,需完整测试覆盖后推进
This commit is contained in:
2026-07-01 01:21:46 +08:00
parent dd0e059365
commit 89912155a6
2 changed files with 8 additions and 8 deletions

View File

@@ -136,8 +136,8 @@ const DEFAULT_BLACKLIST: &[&str] = &["rm", "del", "format", "shutdown", "mkfs",
///
/// 返回 `Some(reason)` 表示拒绝(reason 为拒绝原因,用于日志/错误信息);返回 `None` 表示放行。
fn check_command_policy(cmd_name: &str) -> Option<&'static str> {
// 黑名单优先:即便同时在白名单,只要命中黑名单就拒绝(防止白名单失误放过危险命令)
// 未设置 DF_SCRIPT_BLACKLIST 时使用 DEFAULT_BLACKLIST 兜底(防误用零防护)
// 黑名单优先:即便同时在白名单,只要命中黑名单就拒绝
// 优先从环境变量读,后续可扩展为从 DB KV 注入(前端设置页写入)
let env_blacklist = std::env::var("DF_SCRIPT_BLACKLIST").ok();
let blacklist: Vec<String> = match env_blacklist {
Some(raw) => raw
@@ -148,7 +148,7 @@ fn check_command_policy(cmd_name: &str) -> Option<&'static str> {
None => DEFAULT_BLACKLIST.iter().map(|s| s.to_string()).collect(),
};
if blacklist.iter().any(|c| c == cmd_name) {
return Some("命令在黑名单中 (DF_SCRIPT_BLACKLIST 或默认)");
return Some("命令在黑名单中");
}
// 白名单:非空时命令名必须在白名单中才放行
@@ -159,7 +159,7 @@ fn check_command_policy(cmd_name: &str) -> Option<&'static str> {
.filter(|s| !s.is_empty())
.collect();
if !whitelist.is_empty() && !whitelist.iter().any(|c| c == cmd_name) {
return Some("命令不在白名单中 (DF_SCRIPT_WHITELIST)");
return Some("命令不在白名单中");
}
}

View File

@@ -176,10 +176,10 @@ async function reload() {
// ============================================================
// ScriptNode 命令执行安全 — 白/黑名单 UI
// ------------------------------------------------------------
// 前端仅做 UI + 持久化到 appSettings(df-script-whitelist / df-script-blacklist)。
// 后端 ScriptNode 当前从环境变量 DF_SCRIPT_WHITELIST / DF_SCRIPT_BLACKLIST 读取
// (同一逗号分隔语义),前后端打通留后续:前端写入需经 IPC/启动期注入环境变量
// 输入语义:逗号分隔命令名(如 `git,npm,cargo`),空串=该项不限制
// 前端持久化到 appSettings KV 表(df-script-whitelist / df-script-blacklist)。
// 后端 ScriptNode 从环境变量 DF_SCRIPT_WHITELIST / DF_SCRIPT_BLACKLIST 读取(同语义逗号分隔)。
// 前后端打通需跨 crate 接口变更(script_node.execute 接受参数注入),当前标注为已知限制
// 临时方案:启动时用脚本注入环境变量(export DF_SCRIPT_WHITELIST=...)
// ============================================================
const scriptWhitelist = ref(appSettings.get<string>('df-script-whitelist', ''))
const scriptBlacklist = ref(appSettings.get<string>('df-script-blacklist', ''))