一个基于 Tauri + Vue 3 构建的网络安全工具箱桌面应用,用于管理和快速启动各种安全工具。
- 分类管理:支持多级分类和子分类,灵活组织工具
- 工具管理:支持多种工具类型(GUI、CLI、JAR、Python、HTML、LNK、网页、其他)
- 智能搜索:模糊搜索功能,支持多关键词匹配
- 图标系统:支持三种图标来源
- URL 远程图片(自动抓取 favicon)
- 本地图片(自动裁剪压缩为 160x160)
- 应用自身图标(自动从 EXE/LNK 文件提取)
- 视图切换:支持网格视图和列表视图,用户可自由切换
- 数据持久化:使用 JSON 配置文件存储,便于备份和迁移
- 自动图标提取:输入路径后自动提取图标,支持 Windows EXE/LNK 文件
- Wiki 文档系统:完整的 Markdown 文档管理,支持 GitHub 风格渲染、代码高亮(highlight.js)、数学公式(KaTeX,支持行内和块级公式)、流程图(Mermaid)、主题自定义(PinkFairy 暗色主题)、搜索和目录导航
- 直接启动图形界面应用程序
- 支持自定义工作目录
- 支持命令行参数
- 在可执行文件所在目录打开终端并执行
- 支持命令行参数
- 自动检测 PATH 环境变量中的可执行文件
- 支持自定义 Java 路径(可选,默认使用 PATH)
- 支持 JVM 参数配置(如
-Xmx512m、-Dxxx=yyy) - 支持程序参数配置
- 在 JAR 文件所在目录打开终端执行
- 在脚本所在目录打开终端执行
- 自动使用
python或python3命令(Windows 使用python,Unix 使用python3)
- 支持本地 HTML 文件
- 自动提取 HTML 文件中的 favicon
- 在浏览器中打开本地 HTML 文件
- 支持 Windows 快捷方式文件
- 自动提取快捷方式的目标图标
- 正确解析快捷方式路径(支持中文路径)
- 配置 URL 地址
- 自动抓取网页 favicon
- 点击后在浏览器新标签页打开
- 现代化 UI:深色主题,渐变背景,毛玻璃效果
- 精美动画:流畅的过渡动画和悬停效果
- 卡片悬停时的浮动动画
- 工具卡片光泽扫过效果
- 按钮波纹点击效果
- 输入框焦点发光效果
- 淡入/滑入动画
- 应用图标风格:工具卡片采用类似应用图标的展示方式
- 响应式布局:支持窗口大小调整,默认最大化启动
- 视图切换:支持网格视图和列表视图切换
- 网格视图:卡片式布局,显示完整信息
- 列表视图:紧凑列表布局,仅显示图标、名称、描述和操作按钮
- 虚拟滚动:大量工具时自动启用虚拟滚动优化性能(超过 50 个工具)
- 独立滚动区域:分类、子分类、工具卡片、设置等区域独立滚动
- 图标缓存:自动缓存提取的图标,提高加载速度
- 美化滚动条:自定义滚动条样式,渐变效果,提升视觉体验
- 统一设计系统:使用 CSS 变量统一管理颜色、阴影、渐变等样式
- 优化文本选择:自定义文本选择颜色,提升可读性
- 全局搜索:首页和分类页都支持搜索
- 模糊匹配:支持多关键词搜索(空格分隔)
- 搜索结果覆盖:半透明遮罩显示搜索结果
- 搜索范围:支持搜索分类、子分类和工具
- 自动提取:输入路径后自动提取图标(EXE/LNK/HTML/URL)
- 智能检测:自动检测文件类型并选择合适的提取方式
- 路径变更检测:路径改变时自动清除旧图标并重新提取
- 图标缓存:提取的图标自动缓存到
.config/icons/目录 - 统一尺寸:所有图标统一调整为 160x160 像素显示
- AI Gateway 服务:统一的 AI 服务管理架构
- 多模型支持:支持多种 AI 模型(GPT、DeepSeek、Ollama 等)
- 流式响应:支持实时流式输出,提升交互体验
- 服务监控:自动健康检查和服务恢复
- 连接池管理:多 Worker 实例负载均衡
- 性能统计:请求统计、响应时间、Token 使用量等指标
- 聊天历史:自动保存聊天记录,支持会话管理
- 前端框架:Vue 3 + TypeScript
- 构建工具:Vite
- 桌面框架:Tauri 2.9.5
- 后端语言:Rust 1.77.2+
- 路由:Vue Router 4
- 数据存储:JSON 配置文件
- 图标处理:PowerShell/.NET(Windows)、image crate(Rust)
- Markdown 渲染:Wiki 使用本地
markdown-itbundle(public/markdown-it/);AI 聊天消息使用markdown-it(npm) - 代码高亮:highlight.js(Wiki 本地资源 + 聊天组件 npm 引入)
- 数学公式:KaTeX(本地加载,位于
public/katex/,自定义渲染逻辑) - 流程图:Mermaid(npm 包,打包到 bundle)
- 主题样式:PinkFairy 暗色主题(自定义 CSS,基于 Typora See Yue Dark)
- 字体:JetBrains Mono(本地加载,位于
public/fonts/) - 服务管理:统一的服务管理架构(ServiceManager),支持健康检查、熔断器、指标收集
- Node.js 18+
- Rust 1.77.2+
- npm 或 yarn
- Windows 10+(当前主要支持 Windows,其他平台部分功能可能受限)
# 安装前端依赖
npm install
# 安装 Rust 依赖(首次运行会自动安装)
cd src-tauri
cargo build为确保应用在离线环境下正常运行,需要准备以下本地资源:
# 方式 1:从 npm 包提取(推荐)
npm install katex@0.16.9
# Windows PowerShell:
Copy-Item node_modules/katex/dist public/katex/dist -Recurse
Copy-Item node_modules/katex/katex.min.js public/katex/
Copy-Item node_modules/katex/katex.min.css public/katex/
# 方式 2:从 GitHub 下载
# 访问 https://github.com/KaTeX/KaTeX/releases/tag/v0.16.9
# 下载并解压到 public/katex/ 目录详细说明请参考 public/katex/README.md。
重要说明:
- KaTeX 使用自定义渲染逻辑,不依赖
markdown-it-katex插件 - 支持行内公式(
$...$)和块级公式($$...$$) - 自动清理零宽空格和 Unicode 数学符号,转换为 LaTeX 语法
- 公式渲染采用防抖机制,避免重复渲染和性能问题
- highlight.js:已包含在
public/highlight.js-11.11.1/目录 - Typora See Yue 主题:已包含在
public/typora-see-yue-theme_v1.4/目录 - JetBrains Mono 字体:已包含在
public/fonts/目录 - Mermaid:通过 npm 包安装,构建时会自动打包到 bundle
npm run tauri dev这将启动开发服务器,前端运行在 http://localhost:5173,Tauri 应用会自动启动。
# 构建前端和 Tauri 应用
npm run tauri build构建产物位于 src-tauri/target/release/ 目录。
netsec-toolbox/
├── src/ # 前端源代码
│ ├── components/ # Vue 组件
│ │ ├── AiAssistantPanel.vue # AI 助手面板(预览)
│ │ ├── ConfirmDialog.vue # 确认对话框
│ │ ├── ContextMenu.vue # 右键菜单
│ │ ├── ErrorBoundary.vue # 错误边界
│ │ ├── ModalDialog.vue # 模态对话框
│ │ ├── VirtualList.vue # 虚拟滚动列表
│ │ ├── WikiFileTree.vue # Wiki 文件树组件
│ │ └── WikiModal.vue # Wiki 模态框组件
│ ├── stores/ # 状态管理
│ │ └── categories.ts # 分类和工具数据管理
│ ├── utils/ # 工具函数
│ │ ├── constants.ts # 常量定义
│ │ ├── fileDialog.ts # 文件选择对话框
│ │ ├── fileStorage.ts # 文件存储(JSON)
│ │ ├── iconLoader.ts # 图标加载器
│ │ ├── imageProcessor.ts # 图片处理(裁剪压缩、图标提取)
│ │ ├── logger.ts # 统一日志工具
│ │ ├── markdown.ts # Markdown 渲染工具
│ │ ├── tauri.ts # Tauri API 工具
│ │ └── toolLauncher.ts # 工具启动器
│ ├── views/ # 页面视图
│ │ ├── DashboardView.vue # 首页
│ │ ├── CategoryView.vue # 分类页
│ │ ├── CategorySettingsView.vue # 分类设置页
│ │ ├── SettingsView.vue # 设置页
│ │ └── WikiView.vue # Wiki 文档视图
│ ├── types/ # 类型定义
│ │ ├── tauri.ts # Tauri 类型定义
│ │ └── wiki.ts # Wiki 类型定义
│ ├── App.vue # 根组件
│ ├── main.ts # 入口文件
│ ├── router.ts # 路由配置
│ └── style.css # 全局样式
├── src-tauri/ # Tauri 后端
│ ├── src/
│ │ ├── lib.rs # 主入口(模块声明和命令注册)
│ │ ├── main.rs # 程序入口
│ │ ├── types.rs # 数据类型定义
│ │ ├── utils.rs # 工具函数(路径、哈希等)
│ │ ├── config.rs # 配置管理(JSON 文件读写)
│ │ ├── launcher.rs # 工具启动逻辑
│ │ ├── icon_extractor.rs # 图标提取逻辑
│ │ └── file_ops.rs # 文件操作(路径解析、文件对话框)
│ ├── Cargo.toml # Rust 依赖配置
│ ├── tauri.conf.json # Tauri 配置
│ └── icons/ # 应用图标
└── README.md # 本文件
所有配置数据存储在应用配置目录下的 .config 文件夹中,分为多个配置文件:
- 分类配置:
.config/categories.json- 一级分类配置(名称、图标、颜色等) - 工具数据:
.config/tools.json- 子分类和工具数据 - 图标缓存:
.config/icons/- 自动提取的图标缓存(PNG 格式) - AI 配置:
.config/ai.json- AI 相关配置(未来使用)
配置文件分离的好处:
- 分类配置和工具数据独立管理
- 便于版本控制和备份
- 减少单个文件过大
- 便于未来扩展(如 AI 配置)
{
"categories": [
{
"id": "web",
"name": "WEB",
"label": "Web 攻击与防御",
"description": "Web 相关攻击与防御工具集合。",
"icon": "globe",
"color": "#4DA3FF",
"order": 1,
"enabled": true
}
]
}{
"data": [
{
"id": "web",
"name": "WEB",
"sub_categories": [
{
"id": "web-info",
"name": "信息收集",
"tools": [
{
"id": "host-info",
"name": "主机信息探测",
"description": "对域名/IP 进行 whois、地理位置、ASN 等查询。",
"iconUrl": "data:image/png;base64,...",
"toolType": "CLI",
"execPath": "C:\\Tools\\whois.exe",
"args": ["-d", "example.com"]
}
]
}
]
}
]
}- 进入设置页面
- 点击"添加分类"
- 填写分类信息(名称、描述、图标、颜色等)
- 保存
- 进入分类页面
- 选择或创建子分类
- 点击"新增工具"
- 填写工具信息:
- 名称:工具名称
- 图标:自动提取或手动设置
- 工具类型:选择 GUI、CLI、JAR、Python、HTML、LNK、网页或其他
- 可执行路径/URL:根据工具类型填写
- 参数:命令行参数(空格分隔)
- 描述:工具用途说明
- 保存
- 在分类页面,点击工具头部的"网格"或"列表"按钮
- 网格视图:适合浏览,显示完整信息
- 列表视图:适合快速查找,紧凑显示
对于 Java JAR 类型工具,需要配置:
- JAR 路径:选择 JAR 文件
- Java 路径(可选):留空则使用系统 PATH 中的 Java
- JVM 参数:如
-Xmx512m -Dfile.encoding=UTF-8 - 程序参数:传递给 Java 程序的参数
- 输入可执行文件路径后,系统会自动提取图标
- 支持 EXE、LNK、HTML 文件
- 支持 URL(自动抓取 favicon)
- 路径改变时自动清除旧图标并重新提取
- URL 图标:输入图片 URL 地址(支持 http/https)
- 本地图片:选择本地图片文件,自动裁剪为 160x160 并压缩
- 在首页或分类页的搜索框输入关键词
- 支持多关键词搜索(空格分隔)
- 搜索结果会覆盖显示在内容区域上方
-
Markdown 解析:使用
markdown-it及其插件解析 Markdown 文本- 插件包括:
markdown-it-anchor、markdown-it-toc、markdown-it-task-lists、markdown-it-attrs、markdown-it-footnote、markdown-it-emoji、markdown-it-container、markdown-it-mermaid - 注意:
markdown-it-katex已被禁用,使用自定义渲染逻辑
- 插件包括:
-
代码高亮:
- 使用
highlight.js进行语法高亮 - 支持语言别名(如
ps1→powershell) - 自动检测未指定语言的代码块
- 使用
-
数学公式渲染(KaTeX):
- 自定义渲染逻辑:不依赖
markdown-it-katex,避免重复渲染问题 - 渲染流程:
- 动态加载 KaTeX JS 和 CSS(支持多个路径回退)
- 处理块级公式(
$$...$$):优先处理,支持跨行公式 - 处理行内公式(
$...$):使用 TreeWalker 遍历文本节点 - 公式清理:移除零宽空格,转换 Unicode 数学符号为 LaTeX
- 防重复渲染:使用 WeakSet 标记已处理元素
- 性能优化:
- 使用 Promise 异步执行,避免阻塞 DOM 更新
- 使用 WeakSet 避免内存泄漏
- 从后往前处理,避免索引变化问题
- 自定义渲染逻辑:不依赖
-
Mermaid 图表:
- 使用
markdown-it-mermaid插件处理 - 在 Markdown 解析阶段转换为
<div class="mermaid">元素 - 后续通过 Mermaid API 渲染
- 使用
-
主题样式:
- 使用 PinkFairy 暗色主题(自定义 CSS)
- 支持暗色背景、粉色高亮、渐变效果
- 优化了代码块、表格、引用块、公式等元素的样式
- 虚拟滚动:大量工具时自动启用(超过 50 个工具)
- 防抖机制:KaTeX 公式渲染使用防抖,避免频繁 DOM 操作
- 懒加载:KaTeX 和 Mermaid 按需加载
- 缓存机制:图标自动缓存到
.config/icons/目录
后端采用模块化设计,分为以下模块:
- types.rs:所有数据结构定义
- utils.rs:工具函数(路径处理、哈希计算等)
- config.rs:配置文件管理
- launcher.rs:工具启动逻辑(支持多种工具类型)
- icon_extractor.rs:图标提取(Windows EXE/LNK、HTML、URL favicon)
- file_ops.rs:文件操作(路径解析、文件对话框)
- OpenAI 兼容接口:
/v1/chat/completions、/v1/models、/health - 连接池:全局单例(
OnceLock),多 Worker 负载均衡与故障转移 - Worker 就绪原子性:端口可用 + stderr
[READY]+ 模型就绪后才进入调度 - 健康检查与自愈:进程状态 + 心跳 +
/health,连续失败降级与重启(冷却 + 重启预算) - 熔断:每 Worker 独立熔断器,半开探测避免问题扩散
- 日志降噪:模型不可用告警做全局去重
- Mutex:统一使用
lock_or_recover处理 poisoned mutex,避免unwrap()触发 panic - 锁粒度:避免嵌套长时间持锁,把耗时操作移出锁区
- 边界检查:对
pool_size、worker_id、数组索引做防御性校验 - 进程管理:停止/重启包含超时与状态清理,避免端口占用与句柄泄漏
- 使用 PowerShell/.NET 的
System.Drawing.Icon::ExtractAssociatedIcon - 通过环境变量传递路径,避免编码问题
- 支持中文路径
- 自动处理 Windows 长路径前缀(
\\?\)
- 解析 HTML 文件,查找
<link rel="icon">或<link rel="shortcut icon"> - 支持相对路径和绝对路径
- 自动下载并缓存图标
- 尝试多个常见 favicon 路径(
/favicon.ico、/favicon.png、/apple-touch-icon.png) - 自动下载并缓存
- 转换为 base64 格式存储
- 支持绝对路径和相对路径
- 自动在 PATH 环境变量中查找可执行文件
- 处理 Windows 长路径前缀
- 路径规范化(canonicalize)
- 默认最大化启动(
maximized: true) - 支持窗口大小调整(
resizable: true) - 用户可自由调整窗口大小
本项目为私有项目。
By 序章
感谢所有贡献者和使用者的支持!
版本:0.2.0
最后更新:2025-01-XX
- ✨ UI 美化升级:
- 添加 CSS 变量系统,统一管理颜色、阴影、渐变等样式
- 优化按钮样式,添加悬停动画和波纹效果
- 美化滚动条,统一视觉风格,添加渐变效果
- 添加卡片悬停效果和过渡动画(浮动动画)
- 优化输入框样式,添加焦点状态和发光效果
- 添加加载动画和淡入/滑入动画
- 添加工具卡片悬停时的光泽扫过效果
- 优化文本选择样式
- 添加更多动画效果(shimmer、glow、float)
- ✨ 代码优化:
- 修复 Tauri API 导入问题,统一使用
getTauriInvoke()函数 - 修复 ServiceManager 注册问题,自动注册 ai-gateway 服务
- 优化连接池初始化逻辑,避免不必要的 clone
- 删除未使用的导入和变量
- 优化代码结构,提取公共样式
- 完善错误处理和日志记录
- 修复 Tauri API 导入问题,统一使用
- ✨ 功能增强:
- 统一服务管理架构(ServiceManager)
- AI Gateway 服务自动注册和启动
- 服务健康检查和自动恢复
- 连接池管理和负载均衡
- 服务监控和指标收集
- 📝 文档更新:
- 更新 README,添加新功能说明
- 添加 AI 助手功能说明
- 更新技术栈信息
- 完善使用指南和配置说明
- ✅ 完成代码审查和优化
- ✅ 注释所有调试代码,使用统一日志工具
- ✅ 优化 Wiki 文档系统,统一渲染样式
- ✅ 代码框样式优化,统一为单一框样式
- ✅ 完善 README 文档
- ✅ KaTeX 公式渲染优化:
- 禁用
markdown-it-katex插件,使用自定义渲染逻辑 - 修复块级公式渲染问题,支持跨行公式
- 优化公式清理逻辑,自动转换 Unicode 数学符号
- 添加防重复渲染机制,使用 WeakSet 标记已处理元素
- 优化 CSS 加载逻辑,支持多个路径回退
- 禁用
- ✅ 代码结构优化:
- 提取重复代码为独立函数(
isElementRendered、shouldSkipElement、renderSingleFormula) - 简化 KaTeX CSS 加载逻辑,统一错误处理
- 优化性能,减少不必要的 DOM 操作
- 提取重复代码为独立函数(