Releases: buptanswer/KB-Folder-Manager
KB Folder Manager v3.2.1 发布说明
KB Folder Manager v3.2.1 发布说明
发布日期: 2026-02-14
版本号: v3.2.1
类型: Bug 修复版本
重点修复:Mutual Validation 树形视图显示问题
v3.2.1 专注于修复一个在 v3.2.0 中引入的严重 GUI 显示 bug,该 bug 导致 Mutual (Doc/Res Consistency) 验证后的批量修复功能完全不可用。
问题描述
症状
在执行 Mutual (Doc/Res Consistency) 验证时:
- ✅ 系统能够成功检测到 Doc/Res 不一致问题
- ✅ 自动跳转到 Repair 标签页
- ❌ "Issue Comparison" 树形视图完全空白
- 看不到任何数据行
- 看不到列标题
- 看不到任何界面元素
- 键盘导航(方向键、Ctrl+A)完全无响应
影响范围
- Mutual 验证: 批量修复功能完全不可用(高严重度)
- Compare 验证: 工作正常(未受影响)
根本原因
tkinter Widget Parent 层级设置错误
# ❌ 问题代码 (v3.2.0)
self.repair_tree = ttk.Treeview(
list_frame, # 1. 树先创建在 list_frame
columns=tree_columns,
...
)
...
tree_container = ttk.Frame(list_frame) # 2. 后创建中间容器
tree_container.grid(row=0, column=0, sticky=NSEW)
...
self.repair_tree.pack(in_=tree_container, ...) # 3. 用 in_ 参数尝试改变 parent问题本质:
- tkinter 的 widget 必须在创建时就明确唯一的 parent
- 事后通过
pack(in_=...)或grid(in_=...)改变 parent 关系会导致渲染系统失效 - 虽然不会抛出异常,但会导致控件无法正确渲染
解决方案
修正控件创建顺序,确保 parent 层级清晰
# ✅ 修复代码 (v3.2.1)
# 1. 先创建容器
tree_container = ttk.Frame(list_frame)
tree_container.grid(row=0, column=0, sticky=NSEW)
# 2. 树直接在容器中创建
self.repair_tree = ttk.Treeview(
tree_container, # parent 明确为 tree_container
columns=tree_columns,
show="headings",
...
)
# 3. 滚动条也在同一容器中
scrollbar = ttk.Scrollbar(tree_container, orient=VERTICAL, ...)
h_scrollbar = ttk.Scrollbar(tree_container, orient=HORIZONTAL, ...)
# 4. pack 布局不需要 in_ 参数
self.repair_tree.pack(side=LEFT, fill=BOTH, expand=YES)
scrollbar.pack(side=RIGHT, fill=Y)
h_scrollbar.pack(side=BOTTOM, fill=X)调试过程
本次 bug 的修复经历了六个诊断阶段:
- 数据流验证 - 检查是否数据未传递 → 数据正常
- 数据详情验证 - 检查是否缺少 size/mtime/hash → 详情完整
- UI 更新机制验证 - 尝试强制刷新 → 无效
- Tab 可见性验证 - 改变加载顺序 → 无效
- Widget 几何信息诊断 - 检查渲染状态 → 发现 bbox 异常但非根因
- Widget Parent 层级检查 - 发现 parent 设置混乱 → 问题解决!
完整的诊断过程和技术细节请查看:MUTUAL_VALIDATION_TREEVIEW_FIX.md
配套修改
为了使 Mutual 验证能够提供完整的问题详情用于修复,还进行了以下配套修改:
-
execute_validate() 调用修改
- Mutual 模式改为调用
analyze_doc_res_repair_operation - 替代原来的
validate_mutual_operation(后者只返回日志,不返回结构化问题数据)
- Mutual 模式改为调用
-
check_operation_results() 结果处理
- 新增
validate_mutual返回CompareAnalysisResult的处理分支 - 与 Compare 验证保持一致的修复流程
- 新增
验证结果
修复前 (v3.2.0)
用户操作: 执行 Mutual 验证 → 发现问题 → 自动跳转 Repair 标签页
结果: 树形视图完全空白
- 看不到列标题
- 看不到数据行
- 无法选择或导航
- Selected: 1/1 显示正确,但界面无任何可见元素
修复后 (v3.2.1)
用户操作: 执行 Mutual 验证 → 发现问题 → 自动跳转 Repair 标签页
结果: 树形视图正常显示
✅ 列标题可见
✅ 数据行正确渲染(路径、size、mtime、hash、hint)
✅ 滚动条正常工作
✅ 选择和导航功能正常
✅ 批量修复功能完全可用
代码质量改进
本次版本还清理了修复过程中产生的调试代码:
移除的调试代码
- 所有
print("[DEBUG] ...")日志语句 - 不必要的
update_idletasks(),update(),see()调用 - 冗余的几何信息检查代码
删除的临时测试文件
test_gui_actual_run.pytest_gui_deep_debug.pytest_gui_fix_verification.pytest_gui_full_simulation.pytest_gui_mapping.pytest_instructions.pytest_mutual_issue.pytest_treeview_simple.py
经验总结
tkinter Widget 创建的正确模式
# ✅ 正确: 父容器 → 子控件 → 布局
parent_container = ttk.Frame(root)
parent_container.grid(row=0, column=0, sticky=NSEW) # 父容器先布局
child_widget = ttk.Widget(parent_container) # 子控件明确指定 parent
child_widget.pack(side=LEFT, fill=BOTH, expand=YES) # 子控件布局# ❌ 错误: 先创建子控件,后改变 parent
child_widget = ttk.Widget(wrong_parent)
correct_container = ttk.Frame(root)
child_widget.pack(in_=correct_container) # 企图改变 parent - 可能导致渲染失败关键教训
- Widget 的 parent 关系必须在创建时确定,不能事后修改
- 对照实验很重要:Compare 工作但 Mutual 不工作 → 说明是 Mutual 特有的代码问题
- 分层诊断:从数据流 → UI 更新 → 布局层级,逐层排查
- 几何信息诊断:
winfo_*()和bbox()方法是定位渲染问题的有力工具
受益功能
修复后,以下功能完全可用:
- ✅ Mutual (Doc/Res Consistency) 验证的问题检测
- ✅ Mutual 验证结果的可视化展示
- ✅ Doc/Res 不一致问题的批量修复
- ✅ 问题类型筛选和策略选择
- ✅ 修复操作的 preview 和应用
升级建议
强烈建议所有 v3.2.0 用户升级到 v3.2.1
如果您在使用 v3.2.0 时遇到以下情况,请立即升级:
- Mutual 验证后看不到任何问题列表
- Repair 标签页的树形视图为空
- 无法使用 Doc/Res 不一致问题的批量修复功能
相关文档
- 完整问题分析报告: docs/MUTUAL_VALIDATION_TREEVIEW_FIX.md
- 用户指南: docs/user-guide.md
- 开发者指南: docs/developer-guide.md
发布团队: buptanswer
发布日期: 2026-02-14
KB Folder Manager v3.2.0 发布说明
KB Folder Manager v3.2.0 发布说明
发布日期: 2026-02-12
版本号: v3.2.0
类型: 工作流增强版本
重点更新:校验后批量修复
v3.2.0 将原先“仅检查问题”的流程升级为“检查 + 批量修复”的闭环。
新增 Repair 标签页
- 在 GUI 执行
Validate -> Compare后,若发现问题,会自动切换到Repair页 Validate(mutual/class2)、Split/Merge前置校验失败时,也会自动生成可修复问题并切换到Repair- 可按问题类型查看并批量多选路径
- 为选中项指定统一修复策略并一次性执行
支持的批量修复策略
mtime differs but hash same- 用文件夹1时间对齐文件夹2
- 用文件夹2时间对齐文件夹1
content mismatch(统一覆盖原size/hash mismatch)- 用文件夹1覆盖文件夹2
- 用文件夹2覆盖文件夹1
missing file in new/extra file in new- 复制补齐到另一侧
- 或按基准侧删除选中项
missing/extra dir与missing/extra placeholder- 按侧创建目录
- 删除空目录
doc/res修复- 错侧文件搬移并补对应占位符
- 缺失占位符补齐
- 孤立占位符删除
complete修复- 去除占位符后缀命名(重命名)
- 删除符号链接
后端升级
- 新增 Compare 结构化问题模型,支持 GUI 直接消费问题列表
- 新增批量修复引擎与修复日志输出(
Repair.log) - Compare 中 mtime 比对增加 1 秒容差,避免仅亚秒抖动导致误报
- Compare 索引阶段恢复细粒度进度日志(避免“长时间无反馈”)
- Logger 增加线程安全写入,保证并行索引日志稳定
GUI 一致性优化
- Split / Merge / Validate / Repair / Index 均提供“当前页内联日志框”
- 统一底部状态与活动动画显示;修复状态回调递归导致的卡顿风险
- Repair 列表改为左右并排展示
size / mtime / hash字段,便于快速决策 doc/res根目录名不一致时不再强制改名:Merge(以及 CLI 的 Mutual)改为“风险提示 + 用户确认”后可继续- 当名称不一致且继续合并时,输出目录默认采用 Doc 侧名称,行为可预期
测试与验证
新增自动化测试:
tests/test_compare_repair.py- 验证 Compare 问题识别(mtime/hash/size/missing/extra)
- 验证批量修复后再次 Compare 可消除对应问题
tests/test_gui_batch_repair_flow.py- 模拟用户在 GUI 中执行 Compare -> Repair 的批量修复点击流程
- 覆盖 Validate(mutual) 与 Split 前置校验失败后自动跳转 Repair
tests/test_gui_log_capture.py- 覆盖状态回调递归风险,确保 GUI 进度/活动动画稳定
tests/test_cli_smoke.py- 覆盖 CLI 帮助、compare 阻断错误码、index 成功路径
本次完整回归(2026-02-12)执行并通过:
python -m unittest discover tests -vpython tests/test_gui_launch.pypython tests/test_gui.pypython tests/test_gui_batch_repair_flow.pypython tests/test_progress_feedback.py
发布团队: buptanswer
发布日期: 2026-02-12
KB Folder Manager v3.1.0 发布说明
KB Folder Manager v3.1.0 发布说明
发布日期: 2026-02-11
版本号: v3.1.0
类型: 性能优化版本
🚀 重点更新:并行性能优化
v3.1.0 聚焦于大目录处理性能,目标是提升 CPU 利用率并缩短整体处理时长。
核心优化项
1. 索引并行化
build_index新增多线程并行哈希计算- 自动按 CPU 核心数分配 worker
- 索引结果按路径排序,确保并行场景输出稳定
2. Split / Merge 复制并行化
- 文件复制由串行改为线程池并行执行
- 在大量小文件和混合文件场景下显著提升吞吐
3. 双目录索引并行构建
doc/res、old/new等场景支持并行索引- 缩短预检和对比阶段等待时间
4. 并行度可配置
- 新增环境变量
KBFM_MAX_WORKERS - 可按设备能力手动调整并发度
示例(PowerShell):
$env:KBFM_MAX_WORKERS=16
python kb_folder_manager.py split --source "D:\Data\MyKB" --output-root "D:\Output\SplitRun"🧩 工程化改进
- 新增包级版本常量
kb_folder_manager.__version__ - GUI 标题与测试输出统一读取版本常量
- 修复索引完成日志不可达问题
📝 升级建议
- 先直接使用默认并发配置(自动按 CPU 核心数)
- 若磁盘是机械盘,可适当降低
KBFM_MAX_WORKERS - 若是 NVMe SSD 且 CPU 核心数较多,可逐步提高
KBFM_MAX_WORKERS做压测
发布团队: buptanswer
发布日期: 2026-02-11
KB Folder Manager v3.0 发布说明
KB Folder Manager v3.0 发布说明
发布日期: 2026-01-30
版本号: v3.0
类型: 重大功能更新
🎉 重大更新:图形用户界面(GUI)
KB Folder Manager v3.0 的最大亮点是全新的图形用户界面,让知识库管理变得前所未有的简单!
新增功能
1. 现代化 GUI 界面
- ✨ 基于 ttkbootstrap 的精美界面设计
- 🎨 多种主题可选(深色/浅色)
- 📊 实时进度条和状态显示
- 📝 可视化日志输出
2. 多标签页设计
GUI 包含 5 个功能标签页:
- Split(拆分) - 将 Complete 目录拆分为 Doc 和 Res
- Merge(合并) - 将 Doc 和 Res 合并回 Complete
- Validate(校验) - 验证文件夹结构合规性(4 种模式)
- Index(索引) - 生成文件夹索引和哈希值
- Settings(设置) - 配置文件管理
3. 启动方式
# 方法 1:脚本启动(推荐)
python kb_folder_manager_gui.py
# 方法 2:模块方式(需要设置 PYTHONPATH)
$env:PYTHONPATH = "$PWD"
python -m kb_folder_manager.gui技术实现
新增文件
kb_folder_manager/gui.py(873 行) - 完整的 GUI 实现kb_folder_manager_gui.py- GUI 入口脚本tests/test_gui.py(432 行) - 自动化 GUI 测试
新增依赖
ttkbootstrap>=1.20.0 # 现代 GUI 框架
pillow>=10.0.0 # 图像支持🔧 Bug 修复
- ScrolledText 导入错误 - 修复 GUI 启动失败问题
📦 依赖变更
新增依赖
- ttkbootstrap >= 1.20.0 - 提供现代化 GUI 组件
- pillow >= 10.0.0 - GUI 图像支持
现有依赖
- PyYAML >= 6.0(保持不变)
📝 重要说明
向后兼容
- ✅ 完全向后兼容 v2.8
- ✅ CLI 功能保持不变
- ✅ 配置文件格式不变
使用建议
- 🆕 新用户:推荐从 GUI 开始
- 🔧 高级用户:建议使用 CLI 进行自动化
- 📊 大批量处理:推荐 CLI + 脚本
🚀 升级指南
# 拉取最新代码
git pull origin main
# 安装新依赖
pip install -r requirements.txt --upgrade
# 测试 GUI
python kb_folder_manager_gui.py发布团队: buptanswer
发布日期: 2026-01-30
KB Folder Manager v2.8
KB Folder Manager v2.8
首次公开发布版本
✨ 主要功能
- Split(拆分) - 将知识库拆分为文档和资源
- Merge(合并) - 将拆分的内容合并回原目录
- Validate(校验) - 验证文件夹结构是否合规
- Index(索引) - 生成带哈希值的索引文件
🎯 核心特性
- ✅ Complete 目录严格只读保护
- ✅ 占位符机制保留原始结构
- ✅ 闭环操作流程(预检 → 确认 → 执行 → 后检)
- ✅ SHA256 哈希校验
- ✅ 支持 7-Zip 压缩
- ✅ YAML 灵活配置
- ✅ 详细的中文文档
🚀 快速开始
安装
git clone https://github.com/buptanswer/KB-Folder-Manager.git
cd KB-Folder-Manager
pip install -r requirements.txt基本使用
# 拆分知识库
python kb_folder_manager.py split --source "D:\MyKB" --output-root "D:\Output"
# 合并回原位置
python kb_folder_manager.py merge --doc-root "D:\Output\doc" --res-root "D:\Output\res" --output-root "D:\FinalOutput"
# 校验文件夹结构
python kb_folder_manager.py validate --path "D:\MyKB"
# 生成索引
python kb_folder_manager.py index --path "D:\MyKB" --output "index.json"📚 文档
💻 系统要求
- Python 3.10 或更高版本
- Windows 操作系统
- 7-Zip(可选,用于压缩功能)
📝 版本说明
这是首个公开发布的稳定版本,包含完整的核心功能和详细文档。
📄 许可证
MIT License - 详见 LICENSE 文件
🤝 贡献
欢迎提交 Issue 和 Pull Request!
发布日期:2026-01-30