diff --git a/repo/js/FullyAutoAndSemiAutoTools/README.md b/repo/js/FullyAutoAndSemiAutoTools/README.md
index a57f9a477..1e2371a37 100644
--- a/repo/js/FullyAutoAndSemiAutoTools/README.md
+++ b/repo/js/FullyAutoAndSemiAutoTools/README.md
@@ -56,131 +56,120 @@ FullyAutoAndSemiAutoTools/
```mermaid
graph TD
- A[启动脚本] --> B[初始化
配置/工具/记录/密钥检查]
- B --> C{运行模式?}
- C -->|刷新配置| D[扫描 pathing 目录
构建树状结构
生成多选配置项
应用黑白名单]
- D --> E[保存用户配置
到 uidSettings.json + path-json-by-uid.json]
- C -->|加载配置| F[读取 uidSettings.json & path-json-by-uid.json
快速恢复上次选择 & 路径缓存]
- C -->|开始执行| G[核心执行流程]
+ A[启动脚本] --> B[读取 config_run]
- subgraph 核心执行流程
- G --> H[读取 CD 配置
加载执行记录 & UID路径缓存]
- H --> I[构建 needRunMap
遍历路径组 & 过滤]
- I --> J{CD 检查
hours/cron}
- J -->|仍在CD| K[移除该路径]
- J -->|可执行| L[加入执行队列]
- L --> M[启动实时任务
自动对话/拾取/战斗]
- M --> N{择优模式?}
- N -->|开启| O[优先从未跑过/最久未跑的路径]
- N -->|关闭| P[按顺序执行]
- O --> P
- P --> Q[遍历路径组]
- Q --> R[遍历单条路径]
- R --> S{已跑过?}
- S -->|是| T[跳过 & 记录日志]
- S -->|否| U{需要战斗?}
- U -->|是| V[切换战斗队伍]
- U -->|否| W{需要特定元素?}
- W -->|是| X[切换七元素队伍]
- W -->|否| Y[直接执行路径]
- V --> Y
- X --> Y
- Y --> Z{半自动模式?}
- Z -->|是| AA[等待快捷键
继续/跳过]
- Z -->|否| AB[正常完成]
- AA --> AB
- AB --> AC[记录执行结果
成功/失败/时间戳]
- AC --> AD{还有剩余路径?}
- AD -->|是| R
- AD -->|否| AE[保存最终记录
结束本次执行]
- end
+ B --> C{config_run ?}
- style A fill: #e3f2fd, stroke: #1976d2
- style G fill: #f3e5f5, stroke: #7b1fa2
- style AE fill: #c8e6c9, stroke: #2e7d32, stroke-width: 3px
+%% ────────────── 刷新模式 ──────────────
+ C -->|刷新| Refresh[刷新模式]
+
+ Refresh --> Scan[扫描 pathing 目录
readPaths 递归读取所有文件/文件夹]
+
+ Scan --> Depth[应用 loading_level
限制最大递归深度]
+
+ Depth --> BlackWhite[应用黑白名单过滤
config_white_list / config_black_list
(优先级高于其他过滤)]
+
+BlackWhite --> Generate[生成 multi-checkbox 配置项
写入 uidSettings.json
写入 path-json-by-uid.json
(此时黑白名单已生效)]
+
+Generate --> RefreshEnd[刷新结束
黑白名单已固化到缓存中]
+
+%% ────────────── 加载模式 ──────────────
+C -->|加载| Load[加载模式]
+
+Load --> ReadCache[读取上次缓存
path-json-by-uid.json + uidSettings.json
(已包含刷新时的黑白名单过滤结果)]
+
+ReadCache --> LoadFilter{二次过滤项}
+
+LoadFilter --> TheLayer[the_layer = true ?
只保留指定层级]
+
+LoadFilter --> HighFilter[high_level_filtering 有值 ?
路径字符串匹配过滤]
+
+LoadFilter --> BlackWhiteLoad[黑白名单输入框显示
但修改无效
(不重新过滤缓存)]
+
+TheLayer & HighFilter --> ShowOptions[显示最终过滤后的选项列表
供用户勾选]
+
+BlackWhiteLoad -.-> ShowOptions[黑白名单修改不生效]
+
+ShowOptions --> LoadEnd[加载结束
黑白名单不参与二次过滤]
+
+%% ────────────── 执行模式 ──────────────
+C -->|执行| Exec[执行模式
不显示黑白名单 / 层级 / 高阶过滤项
直接使用已勾选路径]
+
+Exec --> Run[读取 CD + 记录
构建 needRunMap → 执行]
+
+%% 样式
+classDef refresh fill:#e8f5e9,stroke:#2e7d32
+classDef load fill:#e3f2fd,stroke:#1976d2
+classDef exec fill:#f3e5f5,stroke:#7b1fa2
+classDef filter fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
+
+class Refresh,Scan,Depth,BlackWhite,Generate refresh
+class Load,ReadCache,TheLayer,HighFilter,BlackWhiteLoad,ShowOptions load
+class Exec,Run exec
+class BlackWhite,TheLayer,HighFilter filter
```
### 2. 执行时序图(sequenceDiagram 风格,适合看交互顺序)
```mermaid
sequenceDiagram
- participant U as 用户
- participant S as 脚本设置界面
- participant Init as 初始化模块
- participant Scan as 路径扫描(重构版)
- participant CD as 冷却检查
- participant Exec as 执行引擎
- participant RT as 实时任务
- participant Team as 队伍切换
- participant Path as 路径执行
- participant Record as 记录系统
- U ->> S: 启动脚本 → 选择模式
+ participant U as 用户
+ participant UI as 设置界面
+ participant S as 扫描 & 缓存模块
+ participant F as 过滤逻辑
+ participant R as 记录/缓存文件
(uidSettings.json + path-json-by-uid.json)
+ participant CD as 冷却检查
+ participant E as 执行引擎
+ participant T as 队伍切换
+ participant P as 路径执行
- alt 模式 = 刷新配置
- S ->> Scan: 扫描 pathing 目录(支持任意深度)
- Scan -->> S: 返回完整树状结构 & 文件列表
- S ->> S: 生成多选配置项
应用黑白名单精确过滤(Set优化)
- S -->> U: 显示配置界面供勾选
- U ->> S: 保存配置
- S ->> Record: 写入 uidSettings.json + path-json-by-uid.json
- else 模式 = 加载配置
- S ->> Record: 读取 uidSettings.json & path-json-by-uid.json
- Record -->> S: 返回上次配置 & 缓存路径列表
- S -->> U: 快速恢复配置界面
- else 模式 = 执行
- S ->> Init: 开始执行
- Init ->> Record: 加载历史记录 & UID路径缓存
- Init ->> CD: 读取 cd-pathing.json
- CD -->> Init: 返回冷却状态
+ U->>UI: 选择 config_run 并保存
- loop 遍历所有勾选路径组
- Init ->> CD: 检查当前组是否在CD中
- alt 仍在CD
- CD -->> Init: 跳过该组
- else 可执行
- CD -->> Init: 允许执行
- Init ->> RT: 启动实时任务
(自动对话/拾取/战斗)
- RT -->> Init: 实时任务就绪
-
- alt 择优模式开启
- Init ->> Record: 查询未跑/最久未跑路径
- Record -->> Init: 返回优先队列
- end
-
- loop 遍历路径组内的单条路径
- Init ->> Exec: 准备执行单条路径
- Exec ->> Record: 检查是否已跑过
- alt 已跑过
- Record -->> Exec: 跳过
- else 未跑过
- Exec ->> Team: 检查战斗/元素需求
- alt 需要战斗
- Team ->> Team: 切换战斗队伍(team_fight)
- else 需要特定元素
- Team ->> Team: 切换七元素队伍
- else 无特殊需求
- Team -->> Exec: 使用当前队伍
- end
-
- Team -->> Exec: 队伍已就位
- Exec ->> Path: 执行路径脚本
pathingScript.runFile()
- Path -->> Exec: 路径执行完成/异常
-
- alt 半自动模式
- Exec ->> U: 暂停等待快捷键(继续/跳过)
- U -->> Exec: 按键响应
- end
-
- Exec ->> Record: 记录执行结果
(成功/失败/时间戳)
- end
- end
- end
- end
-
- Exec ->> Record: 保存最终记录
- Record -->> S: 执行完成
- S -->> U: 显示执行完毕
+ alt config_run = 刷新
+ UI->>S: 开始刷新(重新扫描 pathing 目录)
+ S->>F: 读取 loading_level
+ F-->>S: 限制递归深度
+ S->>F: 读取黑白名单
+ F-->>S: 过滤掉黑名单文件夹,保留白名单优先
+ Note over S,F: the_layer 与 high_level_filtering
在本模式不参与过滤
+ S->>R: 写入完整过滤后的路径列表 & 配置快照
+ R-->>UI: 刷新完成,显示新生成的选项列表
+ else config_run = 加载
+ UI->>R: 请求读取上次缓存
+ R-->>UI: 返回已缓存的路径列表
(已包含刷新时的黑白名单结果)
+ UI->>F: 显示 the_layer / high_level_filtering / loading_level 输入框
+ Note over UI,F: 黑白名单输入框显示,但修改无效
+ alt 用户修改了 the_layer 或 high_level_filtering
+ F->>F: 对缓存列表进行二次过滤
+ F-->>UI: 显示过滤后的选项列表
+ else 未修改或修改了黑白名单
+ F-->>UI: 沿用原缓存列表
(黑白名单修改被忽略)
end
+ UI-->>U: 显示可勾选的路径组
+ else config_run = 执行
+ UI->>R: 读取用户已勾选的路径组 & 配置
+ R-->>UI: 返回最终待执行列表
+ Note over UI,R: 此时所有层级/过滤/黑白名单配置已固化
不再受任何影响
+ UI->>CD: 检查冷却规则(hours / cron)
+ CD-->>UI: 过滤掉仍在CD的路径组
+ UI->>E: 开始执行(needRunMap)
+ loop 遍历每个路径组
+ E->>T: 根据路径特性决定队伍
+ alt 需要战斗 / 元素 / 锄地特化
+ T->>T: switchTeamByName / switchTeamByIndex
+ end
+ T-->>E: 队伍就位
+ alt 半自动模式
+ E->>U: 等待快捷键(继续/跳过)
+ U-->>E: 按键响应
+ end
+ E->>P: pathingScript.runFile(路径)
+ P-->>E: 执行完成 / 异常
+ E->>R: 记录执行结果(成功/失败/时间戳)
+ end
+ R-->>UI: 保存最终记录
+ UI-->>U: 执行完成
+ end
```
## 重要配置项一览(settings.json)