Files
PVE-Tools-9/.claude/index.json
Maple 886e82f0cb refactor: 模块化重构 — 拆分 lib/ 基础设施层与 src/modules/ 功能模块
PVE-Tools.sh 从 ~14,700 行单文件重构为 150 行入口点,
所有函数按职责拆分到独立文件,通过 source 机制加载。

lib/ — 基础设施层(零业务逻辑)
  config.sh: 全局变量与常量
  core.sh: 日志、UI、确认、备份、GRUB、进度条
  network.sh: 网络检测、镜像选择
  runtime.sh: 运行时守卫、main() 入口

src/modules/ — 功能模块(10 个目录)
  01-optimization  02-sources  03-boot-kernel
  04-gpu-passthrough  05-vm-container  06-networking
  07-storage-disk  08-tools-about  09-security  10-third-party

新增 build.sh(合并编译)和 dev.sh(开发 source 入口),
release.yml 新增构建步骤,CI 适配模块化结构。
2026-07-08 11:15:59 +08:00

360 lines
13 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"meta": {
"project": "PVE-Tools-9",
"description": "Proxmox VE 9.x 模块化 Bash 运维工具集",
"version": "9.0.0",
"license": "GPL-3.0",
"generated_at": "2026-07-08T10:41:03+08:00",
"generator": "claude-init 自适应架构师",
"truncated": false,
"major_changes_since_last_scan": "项目完成模块化重构430KB 单文件拆分为 lib/ (4文件) + src/modules/ (10子模块, 66文件)。新增 build.sh/dev.sh 构建系统。Web/ VitePress 文档站已移除。"
},
"scan_coverage": {
"estimated_total_files": 140,
"scanned_files": 80,
"coverage_percent": 57.1,
"skipped_by_ignore": 20,
"skipped_binary_large": 28,
"skipped_other": 12,
"skip_reasons": {
"binary_large": [
"Modules/VGPU/libvgpu_unlock_rs_20230207_44d5bb3.so",
"images/ 下 27 个 PNG/JPG/SVG 文件(仅记录路径)",
"dist/PVE-Tools.sh构建产物已忽略"
],
"ignore_rules": [
"dist/ (构建产物)",
"node_modules/ (不存在于当前仓库)",
".git/ (版本控制)",
"test.txt"
],
"too_large_or_not_prioritized": [
"src/modules/ 下 ~56 个非 init.sh 文件(仅 init.sh 已读,实现文件通过重构计划文档交叉验证)",
"Tools/ 下 13 个 .sh 脚本(仅记录文件名,内容已在上次扫描中确认来自 tteck 社区)"
]
}
},
"modules": [
{
"path": "/",
"name": "根模块 (入口脚本)",
"language": "Bash",
"claude_md": "CLAUDE.md",
"entry_points": ["PVE-Tools.sh (169行)", "build.sh", "dev.sh"],
"interfaces": [
"pve_tools_entry_source_tree() -- 本地模块加载",
"pve_tools_entry_prepare_remote_tree() -- 远程模块下载",
"main() -- 脚本主入口 (lib/runtime.sh)"
],
"dependencies": ["bash", "curl/wget", "find", "sort"],
"data_models": ["VERSION", "legalese acceptance marker"],
"tests": ["CI: shellcheck, bash -n (入口+构建产物), 版本一致性检查"],
"config_files": ["VERSION", "UPDATE"],
"scanned_sections": [
"PVE-Tools.sh 完整读取 (169行)",
"build.sh 完整读取 (50行)",
"dev.sh 完整读取 (22行)",
"AGENTS.md 完整读取"
],
"scan_gaps": [
"README.md / README_EN.md / REAMDE-JP.md 未读取(项目说明文档)",
"UPDATE 文件未读取",
"proxmoxlib.js 未读取Proxmox Web UI 补丁)"
],
"coverage": "high"
},
{
"path": "lib/",
"name": "基础设施层",
"language": "Bash",
"claude_md": "lib/CLAUDE.md",
"entry_points": ["config.sh", "core.sh", "network.sh", "runtime.sh"],
"interfaces": [
"config.sh -- 全局变量(版本/镜像/URL/路径)",
"core.sh -- 颜色/日志/UI/确认/备份/GRUB28个函数",
"network.sh -- 网络检测/镜像选择/横幅21个函数",
"runtime.sh -- root守卫/调试/PVE检测/main()8个函数"
],
"dependencies": ["bash", "curl/wget", "pveversion (运行时)"],
"data_models": ["legal_acceptance marker 文件"],
"tests": ["CI: shellcheck, bash -n"],
"config_files": ["config.sh (全局变量定义)"],
"scanned_files": [
"config.sh 完整读取 (254行)",
"core.sh 完整读取 (507行)",
"network.sh 头部读取 (50行, 函数签名已确认)",
"runtime.sh 完整读取 (235行)"
],
"scan_gaps": [
"network.sh 后半部分 (~170行未读包含镜像选择UI函数体但函数签名已从重构计划获取)"
],
"coverage": "high"
},
{
"path": "src/modules/",
"name": "功能模块层",
"language": "Bash",
"claude_md": "src/CLAUDE.md",
"entry_points": ["各子模块的 init.sh"],
"interfaces": [
"10 个子模块的菜单入口函数",
"menu_optimization() / menu_sources_updates() / menu_boot_kernel() / ...",
"main() 中的 case 分发 (lib/runtime.sh)"
],
"dependencies": ["lib/config.sh", "lib/core.sh", "lib/network.sh (部分模块)"],
"data_models": ["无独立数据模型,操作 PVE 系统配置"],
"tests": ["CI: shellcheck, bash -n (通过构建产物)"],
"config_files": [],
"sub_modules": [
{
"path": "src/modules/01-optimization/",
"files": 6,
"init_read": true,
"coverage": "medium",
"description": "日常优化与通知:弹窗/温度/电源/邮件"
},
{
"path": "src/modules/02-sources/",
"files": 4,
"init_read": true,
"coverage": "medium",
"description": "软件源与系统升级:换源/更新/PVE8->9升级"
},
{
"path": "src/modules/03-boot-kernel/",
"files": 3,
"init_read": true,
"coverage": "medium",
"description": "启动与内核管理:内核切换/清理/GRUB"
},
{
"path": "src/modules/04-gpu-passthrough/",
"files": 12,
"init_read": true,
"coverage": "medium",
"description": "硬件直通与显卡Intel/AMD/NVIDIA GPU/RDM/NVMe",
"scan_gaps": ["11个非init.sh文件未逐文件读取函数归属已通过重构计划文档交叉验证"]
},
{
"path": "src/modules/05-vm-container/",
"files": 15,
"init_read": true,
"coverage": "medium",
"description": "虚拟机运维与导入:备份/恢复/克隆/Cloud-Init/快照/磁盘/迁移",
"scan_gaps": ["14个非init.sh文件未逐文件读取函数归属已通过重构计划文档交叉验证"]
},
{
"path": "src/modules/06-networking/",
"files": 10,
"init_read": true,
"coverage": "medium",
"description": "宿主机网络与防火墙:网桥/VLAN/Bond/MAC绑定/防火墙/IPv6",
"scan_gaps": ["9个非init.sh文件未逐文件读取函数归属已通过重构计划文档交叉验证"]
},
{
"path": "src/modules/07-storage-disk/",
"files": 6,
"init_read": true,
"coverage": "medium",
"description": "存储与磁盘维护:查询/挂载/LVM/Ceph/Swap"
},
{
"path": "src/modules/08-tools-about/",
"files": 3,
"init_read": true,
"coverage": "high",
"description": "诊断工具与项目信息:系统信息/救砖/更新/卸载"
},
{
"path": "src/modules/09-security/",
"files": 3,
"init_read": true,
"coverage": "high",
"description": "安全中心:风险检查/SSH加固"
},
{
"path": "src/modules/10-third-party/",
"files": 4,
"init_read": true,
"coverage": "high",
"description": "第三方工具:插件市场/CoolerControl/社区脚本"
}
],
"coverage": "medium"
},
{
"path": "Tools/",
"name": "第三方工具集",
"language": "Bash",
"claude_md": "Tools/CLAUDE.md",
"entry_points": ["各 .sh 文件独立运行"],
"interfaces": ["13个独立 Bash 脚本"],
"dependencies": ["bash", "apt", "各脚本特定依赖"],
"data_models": ["无持久化数据模型"],
"tests": ["无CI覆盖由tteck社区人工验证"],
"config_files": ["Tools/README.md"],
"scanned_files": ["README.md (上次扫描)", "CLAUDE.md (本次更新)"],
"scan_gaps": [
"13个.sh脚本均未读取详细内容仅记录文件名和来源未发生变化"
],
"coverage": "low"
},
{
"path": "Modules/",
"name": "插件市场",
"language": "Bash + 二进制",
"claude_md": "Modules/CLAUDE.md",
"entry_points": ["install-zsh.sh (示例插件)", "VGPU/*.so (二进制资源)"],
"interfaces": ["GitHub API 自动发现", "插件元信息头部注释"],
"dependencies": ["GitHub API", "主脚本下载框架"],
"data_models": ["插件元信息 (name/author/version/github)"],
"tests": ["无自动化测试"],
"config_files": [],
"scanned_files": ["install-zsh.sh (上次扫描前30行)", "CLAUDE.md (本次更新)"],
"scan_gaps": [
"install-zsh.sh 完整实现 (未变化)",
"VGPU/*.so 二进制文件 (仅记录路径)"
],
"coverage": "low"
},
{
"path": "Docs/",
"name": "补充文档",
"language": "Markdown",
"claude_md": null,
"entry_points": [
"Docs/重构计划-PVE-Tools模块化拆分.md",
"Docs/future-guide.md",
"Docs/README-EN.md"
],
"interfaces": ["3个 Markdown 文档"],
"dependencies": [],
"data_models": [],
"tests": [],
"config_files": [],
"scanned_files": [
"重构计划-PVE-Tools模块化拆分.md (完整读取, 1362行 -- 关键架构文档)"
],
"scan_gaps": [
"future-guide.md 和 README-EN.md 均未读取"
],
"coverage": "medium"
},
{
"path": ".github/",
"name": "CI/CD 与社区",
"language": "YAML",
"claude_md": ".github/CLAUDE.md",
"entry_points": [
"workflows/release.yml",
"workflows/beta-release.yml",
"workflows/pr-validation.yml"
],
"interfaces": [
"release流水线 (build.sh + shc编译 + GitHub Release)",
"beta-release流水线",
"PR验证 (shellcheck + bash -n + 版本检查 + 安全扫描)"
],
"dependencies": ["GitHub Actions", "shc", "shellcheck", "build.sh"],
"data_models": [],
"tests": ["PR验证流水线自动执行"],
"config_files": ["FUNDING.yml", "ISSUE_TEMPLATE/config.yml"],
"scanned_files": [
"release.yml (前50行)",
"pr-validation.yml (前50行)",
"FUNDING.yml",
"5个 Issue 模板文件"
],
"scan_gaps": [
"beta-release.yml 未读取",
"release.yml 后半部分 (release notes生成+上传逻辑)"
],
"coverage": "medium"
},
{
"path": "images/",
"name": "截图与图片资源",
"language": "二进制 (PNG/JPG/SVG)",
"claude_md": null,
"entry_points": [],
"interfaces": ["27个图片文件用于 README 和文档"],
"dependencies": [],
"data_models": [],
"tests": [],
"config_files": [],
"scanned_files": [],
"scan_gaps": ["全部为二进制图片,不读取内容"],
"coverage": "none (intentionally skipped)"
}
],
"modules_removed_since_last_scan": [
{
"path": "Web/",
"reason": "VitePress 文档站已从仓库移除 (git log: 'Web文档站移除'),相关 CLAUDE.md 成为孤立文件"
}
],
"next_steps": {
"priority": [
{
"module": "src/modules/04-gpu-passthrough",
"action": "逐文件扫描非 init.sh 实现文件",
"paths": [
"src/modules/04-gpu-passthrough/nvidia.sh",
"src/modules/04-gpu-passthrough/iommu.sh",
"src/modules/04-gpu-passthrough/controller.sh"
],
"reason": "GPU 直通是高风险功能域,且文件最多(12个)、内部依赖最复杂"
},
{
"module": "src/modules/05-vm-container",
"action": "逐文件扫描非 init.sh 实现文件",
"paths": [
"src/modules/05-vm-container/backup.sh",
"src/modules/05-vm-container/garbage-cleanup.sh",
"src/modules/05-vm-container/disk.sh"
],
"reason": "VM 运维为第二大模块(15文件),涉及数据安全"
},
{
"module": "src/modules/06-networking",
"action": "逐文件扫描非 init.sh 实现文件",
"paths": [
"src/modules/06-networking/firewall.sh",
"src/modules/06-networking/addressing.sh",
"src/modules/06-networking/interface.sh"
],
"reason": "网络模块文件最多(10文件)、子模块交叉引用最密"
},
{
"module": "lib/",
"action": "完整读取 network.sh 后半部分",
"paths": [
"lib/network.sh (offset: 50)"
],
"reason": "镜像选择UI函数体尚未完整读取"
}
],
"optional": [
{
"module": "Docs",
"action": "读取 future-guide.md 和 README-EN.md",
"reason": "了解项目发展路线和英文文档内容"
},
{
"module": "Tools",
"action": "抽样读取代表性脚本",
"paths": [
"Tools/post-pve-install.sh",
"Tools/kernel-clean.sh"
],
"reason": "验证脚本是否随项目模块化有所变化"
},
{
"module": ".github",
"action": "读取 beta-release.yml 和 ISSUE_TEMPLATE 文件",
"reason": "完整理解 CI/CD 和社区治理流程"
}
]
}
}