Terminator 终端字体显示问题解决一、事件概述1. 事件背景在 Terminator 终端中进行日常开发工作时，发现中英文字符显示异常。2. 影响范围A. 影响用户本地开发环境，单用户B. 影响时长约 10 分钟（诊断和修复）C. 影响功能终端可正常使用，但显示效果不佳，影响阅读体验3. 严重程度P3 级问题（体验问题，不影响功能）二、问题现象1. 现象描述中英文字符显示都很宽每个字符之间间距很大整体显示不够紧凑2. 环境信息终端模拟器：Terminator操作系统：Linux 6.17.0-19-genericShell：bash三、问题分析1. 直接原因终端使用的字体不支持中英文等宽显示。2. 根本原因Terminator 配置文件中指定使用 Menlo 字体，这是一款 Apple 专为英文设计的等宽字体，对中文支持很差。当显示中文时，系统会回退到其他中文字体，导致中英文字符宽度不一致、间距不均匀。3. 验证分析通过检查 Terminator 配置文件 /home/lab/.config/terminator/config，发现：font = Menlo 14同时检查系统可用字体，确认存在 Noto Sans Mono CJK SC 等支持中文的等宽字体。graph TD A[用户输入字符] --> B{字体是否支持} B -->|Menlo 支持| C[英文字符正常显示] B -->|Menlo 不支持| D[系统回退到中文字体] C --> E[中英宽度一致] D --> F[中英宽度不一致] F --> G[显示异常]四、解决方案1. GUI 修改方式在 Terminator 窗口中操作：右键点击 → Preferences选择 Profiles → General取消勾选 Use the system fixed width font点击字体选择框，搜索并选择：Noto Sans Mono CJK SC调整大小（建议 12-14）点击 Close2. 配置文件修改方式直接编辑 /home/lab/.config/terminator/config，将：font = Menlo 14修改为：font = Noto Sans Mono CJK SC 143. 推荐字体以下字体均适合终端使用：Noto Sans Mono CJK SC：Google 开源，支持中日韩WenQuanYi Micro Hei Mono：文泉驿微米黑等宽版Sarasa Gothic：更纱黑体，程序员友好五、验证结果字体更换后，中英文字符显示正常：字符宽度统一间距合理显示效果良好六、经验总结1. 问题根源终端字体选择不当是显示问题的常见原因。英文专用字体在混排中文时必然会出现宽度不一致问题。2. 预防措施安装系统时优先安装支持 CJK 的等宽字体配置终端时选择专门的等宽字体，而非通用字体避免使用英文专用字体（如 Menlo、Monaco）作为主要终端字体3. 字体选择原则必须是等宽字体（Monospace）优先选择包含 CJK 支持的字体字体名称包含 Mono、等宽等关键词参考资料Noto Fonts 官方文档Terminator 配置指南
Mori：macOS 原生工作区终端一、概述1. 简介A. 是什么Mori 是一款专为 macOS 设计的原生工作区终端应用。它以项目和 Worktree 为核心组织方式，底层由 tmux 和 libghostty 提供支持。B. 为什么用摆脱零散的终端标签页管理，将 git 仓库作为一等项目持久化会话，关闭应用后重新打开，tmux 中的所有内容仍在运行原生 macOS 体验，侧边栏、命令面板、通知、键盘快捷键一应俱全GPU 渲染终端，基于 libghostty（Ghostty 的渲染引擎）实现 Metal 加速Worktree 感知，同一仓库的多个分支可并排运行，会话相互独立C. 用后能做什么在项目和分支间快速切换，而非在匿名标签页中迷失为每个 worktree 维护独立的 tmux 会话使用原生 macOS 界面管理终端工作流2. 前置知识A. 必备技能基本终端操作和 tmux 使用经验Git 工作树（worktree）概念macOS 基本操作B. 推荐知识tmux 会话管理Ghostty 终端配置二、系统架构1. 工作原理Mori 采用分层架构，将项目、worktree、tmux 会话和 UI 层有机结合。graph TD A[Project git 仓库] --> B[Worktree 分支检出] B --> C[tmux Session 持久化会话] C --> D1[Window 1 标签页] C --> D2[Window 2 标签页] C --> D3[Window 3 标签页] D1 --> E1[Pane 分屏] D2 --> E2[Pane 分屏] D2 --> E3[Pane 分屏]2. 应用架构Mori 采用模块化架构设计，各组件职责清晰。graph TB App[Mori App AppKit + SwiftUI] App --> Core[MoriCore 模型与状态] App --> UI[MoriUI SwiftUI 视图] App --> Tmux[MoriTmux tmux CLI 集成] App --> Git[MoriGit Git 状态发现] App --> Terminal[MoriTerminal libghostty 渲染] App --> Persistence[MoriPersistence SQLite 存储] App --> IPC[MoriIPC Unix Socket + ws CLI] style App fill:#f9f,stroke:#333,stroke-width:2px style Terminal fill:#bbf,stroke:#333,stroke-width:2px style Tmux fill:#bfb,stroke:#333,stroke-width:2px3. 组件说明MoriCore：应用数据模型和可观察状态管理MoriUI：SwiftUI 侧边栏视图MoriTmux：tmux 命令行集成（actor 模式）MoriGit：Git worktree 和状态发现（actor 模式）MoriTerminal：libghostty 终端表面MoriPersistence：基于 GRDB 的 SQLite 持久化MoriIPC：Unix socket IPC 和 ws 命令行工具三、环境准备1. 系统要求macOS 14（Sonoma）或更高版本tmuxmise（任务运行器）Zig 0.15.2 + Xcode（用于构建 libghostty）2. 安装依赖安装 tmux：brew install tmux安装 mise：brew install mise安装 Zig（用于构建 libghostty）：brew install zig3. 获取源码git clone https://github.com/vaayne/mori.git cd mori四、构建与运行1. 快速构建Mori 使用 mise 作为任务运行器，提供以下命令：mise run build # Debug 构建 mise run build:release # Release 构建 mise run dev # 构建并运行 mise run test # 运行所有测试 mise run clean # 清理构建产物2. libghostty 构建首次运行时，mise run build 和 mise run build:release 会自动引导 libghostty XCFramework 的构建。也可以手动构建：mise run build:ghostty # 需要 Zig 0.15.2 + Xcode该命令会自动下载 Metal Toolchain（如果缺失）。3. 验证安装mise run dev成功启动后，你将看到 Mori 的原生 macOS 界面，左侧为项目侧边栏，右侧为终端区域。五、核心功能1. 项目管理Mori 以项目为核心组织单元，每个项目对应一个 git 仓库。通过 CLI 可以管理项目：mori project list # 列出所有项目 mori open /path/to/repo # 打开项目2. Worktree 管理Worktree 是 Mori 的核心概念，允许同一仓库的不同分支并排运行：mori worktree create <project> <branch> # 创建新 worktree mori focus <project> <worktree> # 聚焦到指定 worktree每个 worktree 拥有独立的 tmux 会话，互不干扰。3. tmux 会话管理Mori 通过 tmux CLI 集成实现会话管理。每个 worktree 对应一个 tmux session：mori send <project> <worktree> <window> "command" # 发送命令 mori new-window <project> <worktree> <name> # 创建新窗口六、键盘快捷键1. 核心快捷键快捷键功能Cmd + T新建标签页（tmux window）Cmd + W关闭分屏Cmd + D右侧分屏Cmd + Shift + D下方分屏Cmd + 1-9跳转到指定标签页Ctrl + Tab / Ctrl + Shift + Tab循环切换 worktree2. 高级功能快捷键功能Cmd + Shift + N新建 worktreeCmd + Shift + P命令面板Cmd + B切换侧边栏Cmd + G打开 LazygitCmd + E打开 Yazi完整快捷键列表请参考官方文档 docs/keymaps.md。七、终端配置1. Ghostty 配置Mori 使用 Ghostty 的配置系统。在 ~/.config/ghostty/config 中自定义终端设置。Mori 仅覆盖少量嵌入相关设置（无窗口装饰、最后一个窗口不退出）。2. 配置示例# 字体设置 font-family = JetBrains Mono font-size = 14 # 颜色主题 background = 1e1e1e foreground = d4d4d4 # 光标样式 cursor-style = bar cursor-style-unfocused = hollow # 滚动缓冲 scroll-limit = 10000八、工作流示例1. 多项目开发场景graph LR A[Mori 启动] --> B[选择项目] B --> C{选择 Worktree} C --> D[feature 分支] C --> E[main 分支] C --> F[hotfix 分支] D --> G[tmux Session 1] E --> H[tmux Session 2] F --> I[tmux Session 3]2. 典型使用流程打开 Mori 应用在侧边栏选择项目使用 Cmd + Shift + N 创建新 worktree在 worktree 中打开多个 tmux 窗口（编辑器、日志、测试等）使用 Cmd + 1-9 在窗口间快速切换关闭 Mori，tmux 会话保持运行重新打开 Mori，所有工作状态完好如初九、常见问题1. 构建问题Zig 版本不匹配：确保使用 Zig 0.15.2Xcode 未安装：从 App Store 安装 XcodeMetal Toolchain 下载失败：检查网络连接，手动下载2. 运行问题tmux 版本过旧：使用 brew 升级 tmux权限问题：确保 Mori 有访问终端的权限3. 配置问题Ghostty 配置不生效：检查配置文件路径 ~/.config/ghostty/config快捷键冲突：在系统设置中检查是否有冲突的快捷键十、参考资料参考资料Mori GitHub 仓库mise 官方文档tmux 官方文档Ghostty 官方网站
iDescriptor 免费开源跨平台 iOS 设备管理工具一、概述1. 简介A. 是什么iDescriptor 是一款免费、开源、跨平台的 iOS 设备管理工具，支持 Windows、macOS 和 Linux 三大操作系统。它基于 libimobiledevice 等开源项目构建，提供了丰富的设备管理功能。B. 为什么选择完全免费开源，无广告无限制跨平台支持，覆盖主流操作系统功能丰富，替代部分 iTunes 功能活跃开发，持续更新新特性C. 能做什么有线和无线连接 iOS 设备安装 App Store 应用投屏和实时屏幕查看虚拟定位模拟文件系统挂载和管理网络设备发现SSH 终端（越狱设备）设备信息查询2. 前置知识A. 必备技能基本电脑操作能力USB 数据线连接设备B. 推荐知识iOS 设备基本概念命令行基础操作（Linux 用户）二、环境准备1. 系统要求Windows：Windows 10/11macOS：支持 Intel 和 Apple Silicon（M1/M2/M3）Linux：主流发行版（Ubuntu、Arch Linux 等）2. 安装步骤Windows安装包版：下载并运行 .msi 安装程序便携版：解压 .zip 压缩包，直接运行 iDescriptor.exeChocolatey：choco install idescriptor --version=0.1.0macOSApple Silicon 版本：下载 .dmg 文件，拖拽到 Applications 文件夹安装后需要执行以下命令解除隔离：xattr -c ~/Applications/iDescriptor.appIntel 版本：下载 .dmg 文件，拖拽到 Applications 文件夹LinuxAppImage 版本：下载解压后直接运行Arch Linux（AUR）：sudo pacman -Syu yay -S idescriptor-git注意：必须先执行 sudo pacman -Syu 更新系统，否则可能找不到 libimobiledevice>=1.4.03. 验证安装运行 iDescriptor 应用程序，通过 USB 线连接 iOS 设备，设备应当被识别。三、核心概念1. 基本术语libimobiledevice：iOS 设备通信的核心开源库Developer Disk Image：开发磁盘镜像，用于高级功能AirPlay：苹果的无线投屏协议IPA：iOS 应用安装包格式iFuse：iOS 设备文件系统挂载工具2. 工作原理graph LR A[iOS 设备] -->|USB 连接| B[iDescriptor] A -->|无线连接| B B --> C[libimobiledevice] C --> D[设备管理功能] D --> E1[AirPlay 投屏] D --> E2[应用安装] D --> E3[文件管理] D --> E4[虚拟定位]3. 功能架构graph TD subgraph 连接方式 A1[USB 连接] A2[无线连接 开发中] end subgraph 工具模块 B1[AirPlay 投屏] B2[应用安装] B3[虚拟定位] B4[文件系统] B5[图库管理] B6[网络发现] B7[SSH 终端] B8[实时屏幕] end subgraph 设备操作 C1[重启设备] C2[关机] C3[进入恢复模式] end A1 --> B1 A1 --> B2 A1 --> B3 A1 --> B4 A1 --> B5 A1 --> B6 A1 --> B7 A1 --> B8 B1 --> C1 B2 --> C2 B3 --> C3四、核心功能1. 连接管理A. USB 连接完全支持 Windows、macOS 和 Linux 平台的有线连接，稳定可靠。B. 无线连接目前处于开发阶段，计划在 v0.4.0 版本发布。2. AirPlay 投屏将 iOS 设备屏幕投射到电脑上，支持实时显示设备画面。3. 应用安装直接从 App Store 下载并安装应用，需要使用 Apple ID 登录。4. 虚拟定位模拟 GPS 位置，支持 iOS 6 到 iOS 16 版本。需要挂载 Developer Disk Image。5. 文件系统挂载将 iOS 设备文件系统挂载为普通驱动器，支持读写操作。Windows 和 Linux 平台支持。6. 图库管理浏览和导入设备中的照片和视频。7. 文件浏览器浏览设备文件系统，支持文件和文件夹管理。8. 网络设备发现发现并监控局域网内的设备。9. SSH 终端在越狱设备上打开终端，执行命令操作。10. 实时屏幕查看设备实时屏幕（有线连接），适用于不支持 AirPlay 的设备。五、使用场景1. 投屏演示使用 AirPlay 功能将手机屏幕投射到大屏幕，适合演示和教学。2. 应用管理无需通过手机即可从 App Store 下载和安装应用。3. 文件传输通过文件系统挂载功能，方便地在电脑和设备间传输文件。4. 位置模拟测试基于位置的应用，无需移动到实际地点。5. 设备管理重启、关机、进入恢复模式等操作，无需物理按键操作。六、高级功能1. Cable Info 线缆检测检测连接的 USB 数据线真伪，提供详细的线缆信息。2. Developer Disk Images 管理管理和挂载开发者磁盘镜像，支持 iOS 6 到 iOS 16。3. Query MobileGestalt读取设备的详细硬件和软件信息。4. 无线图库导入通过快捷方式应用无线导入照片（需要设备安装 Shortcuts 应用）。七、平台特性1. 主题支持完全支持系统主题，自动适配深色和浅色模式。macOS 主题适配自动跟随 macOS 系统主题切换。Ubuntu/Linux 主题适配自动跟随 Linux 桌面环境主题。2. Linux Udev 规则配置iDescriptor 会自动检查 udev 规则，如检测失败可手动配置：# 创建 udev 规则文件 sudo cat /etc/udev/rules.d/99-idevice.rules SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", MODE="0666" # 创建用户组 sudo groupadd idevice # 将当前用户添加到组 sudo usermod -aG idevice $USER # 重新加载规则 sudo udevadm control --reload-rules sudo udevadm trigger3. macOS 安全提示macOS 可能会阻止未签名应用运行。如果遇到"已损坏"错误，执行：# 清除扩展属性 xattr -c ~/Applications/iDescriptor.app # 或仅移除隔离属性 xattr -dr com.apple.quarantine /Applications/iDescriptor.app八、开发计划v0.4.0 计划功能迁移到 idevice-rs（完成度 99%）无线连接支持（已完成）直接从应用安装 IPA 文件iOS 17 及以上版本的虚拟定位支持完善 iOS 26 支持Windows 平台迁移到 UCRT 以提升性能和稳定性新的 UI/UX 改进从 Photos.sqlite 读取图库（可能延迟到 v0.5.0）九、常见问题1. 设备无法识别检查 USB 数据线是否正常确认设备已解锁并信任电脑Linux 用户检查 udev 规则是否正确配置2. macOS 提示已损坏执行 xattr 命令清除扩展属性。3. 无线连接不可用该功能正在开发中，计划在 v0.4.0 版本发布。4. 虚拟定位不支持 iOS 17目前仅支持 iOS 6 到 iOS 16，更高版本支持正在开发中。5. 认证提示应用使用安全后端存储 Apple 凭据，可在设置中禁用，但不推荐。十、技术说明1. 依赖项目iDescriptor 基于以下开源项目构建：libimobiledevice：iOS 设备通信核心库ipatool：App Store API 工具（使用修改版本 libipatool-go）QSimpleUpdater：更新检查器（使用修改版本 ZUpdater）UxPlay：AirPlay 实现（使用修改版本）2. 开发分支主开发分支为 dev 分支，欢迎提交 Pull Request。3. 安全说明仅从官方网站 https://idescriptor.github.io/ 和 GitHub Releases 下载警惕其他声称官方网站的下载源参考资料iDescriptor GitHub RepositoryiDescriptor Official Website
NextTrace v1.6.1 发布：新增 MTR 模式与 MTU 探测功能一、新闻概述1. 标题NextTrace v1.6.1 发布：新增 MTR 模式与 MTU 探测功能2. 发布时间2026 年 3 月 21 日3. 来源GitHub Release - nxtrace/NTrace-core二、核心内容1. 事件摘要A. 主要内容NextTrace 是一个开源的网络路由追踪工具，此次 v1.6.1 版本更新带来了重大功能增强，包括新增 MTR 模式、独立的 MTU 探测模式，以及 Windows 平台依赖重构。B. 核心亮点新增完整的 MTR 模式，支持交互式 TUI、报告模式和流式输出独立的 MTU 路径探测功能同一版本提供三种构建变体：完整版、精简版、MTR 专用版Windows 平台移除 Npcap 依赖，改用 WinDivert2. 关键信息A. 版本号v1.6.1B. 重要数据GitHub Star：7.7kFork 数：461支持平台数：101 个构建包覆盖架构：amd64、arm64、386、armv5/v6/v7、mips、ppc64、riscv64、s390x、loong64 等C. 涉及产品NextTrace 网络路由追踪工具3. 背景介绍A. 前置版本v1.5.0 是上一个主要版本，引入了多项功能改进。B. 相关上下文NextTrace 是一个用 Go 语言编写的开源路由追踪工具，支持多种探测协议（ICMP、TCP、UDP），并提供 GeoIP 定位、RDNS 反解等增强功能。三、详细报道1. 主要内容A. 功能更新新增 MTR 模式支持交互式 TUI 界面提供 --report 报告模式支持 --raw 流式输出新增 --wide、--show-ips、-y/--ipinfo 等显示控制选项重写 MTR 调度与统计逻辑改为 Per-Hop 独立调度支持每跳多并发探测修复高丢包场景下的统计偏差问题修复 ghost row、超发残影和已到达目的地后高 TTL 脏数据问题新增独立 MTU 探测模式使用 --mtu 参数启动独立于普通 traceroute/MTR支持单独的输出格式与 JSON schema兼容 GeoIP、RDNS、--dot-server 等常用参数B. 技术改进Windows 平台重构移除对 Npcap 的依赖ICMP/TCP/UDP 监听统一改为 WinDivert SNIFF 模式修复上下文取消后句柄未释放导致的卡住问题探测包大小语义调整--psize 现在表示探测包总大小（包含 IP 与探测协议头）默认按协议和 IP 族自动取最小合法值支持负值随机化每个 probe 的包大小新增 -Q/--tos 用于设置 IP TOS/traffic class输出文件能力常规 traceroute 支持 --output <FILE>支持 --output-default 便于实时落盘和脚本处理DoT 服务器增强--dot-server 现在影响目标域名解析、GeoIP、LeoMoe FastIP 等相关请求失败时自动回退到系统 DNSC. 兼容性说明TTY 下支持状态与 PMTU 高亮重定向或管道输出退化为无 ANSI 的逐行流式文本补齐 Windows 下的 MTU 处理问题WinDivert 超时、过滤与权限提示改进2. 技术细节A. 版本架构graph TB subgraph Versions[NextTrace v1.6.1 三种构建版本] A[nexttrace 完整版] B[nexttrace-tiny 精简版] C[ntr MTR专用版] end subgraph Features[功能对比] F1[常规 traceroute] F2[MTR TUI] F3[MTR 报告模式] F4[Globalping] F5[WebUI] F6[快速跟踪] F7[MTU 探测] end A --> F1 A --> F2 A --> F3 A --> F4 A --> F5 A --> F6 A --> F7 B --> F1 B --> F6 B --> F7 C --> F2 C --> F3 style A fill:#e1f5ff style B fill:#fff4e1 style C fill:#ffe1f5B. 功能架构graph TD A[用户命令] --> B[常规 traceroute] A --> C[MTR 模式] A --> D[MTU 探测] B --> E[GeoIP 定位] B --> F[RDNS 反解] C --> E C --> F D --> F style B fill:#4CAF50 style C fill:#2196F3 style D fill:#FF9800C. 参数变更旧参数新参数说明-t--mtr用于启动 MTR 模式--table--table改为最终汇总表，不再实时刷新3. 数据与事实A. 三种版本功能对比功能nexttrace（完整版）nexttrace-tinyntr常规 tracerouteOKOK-MTR TUIOK-OK（默认）MTR 报告（-r）OK-OKMTR 宽报告（-w）OK-OKMTR 原始输出（--raw）OK-OKGlobalping（--from）OK--WebUI（--deploy）OK--快速跟踪（-F）OKOK-默认运行模式traceroutetracerouteMTR TUIB. 平台支持Linux：多架构支持（amd64、arm64、armv5/v6/v7、mips、ppc64、riscv64、s390x、loong64）Windows：386、amd64、arm64macOS：amd64、arm64、universalFreeBSD：多架构支持OpenBSD：多架构支持DragonFlyBSD：amd64Android：arm64四、影响分析1. 行业影响A. 技术趋势网络诊断工具趋向多功能集成开源工具在企业网络运维中扮演重要角色跨平台支持成为工具发展的关键B. 竞争格局与传统 traceroute、mtr 相比功能更丰富与商业网络诊断工具形成竞争2. 用户影响A. 现有用户MTR 模式提供更强大的网络诊断能力MTU 探测模式解决路径 MTU 发现难题Windows 用户无需安装 NpcapB. 潜在用户三种版本选择满足不同场景需求精简版适合嵌入式环境MTR 专用版适合持续监控场景C. 迁移建议需要注意 -t 参数语义变化--table 输出模式变化Windows 用户可移除 Npcap 依赖3. 技术趋势A. 技术方向网络诊断工具集成化交互式 TUI 提升用户体验多输出格式适应自动化需求B. 生态影响包管理器默认提供完整版 nexttrace多构建版本策略提升工具灵活性五、各方反应1. 官方回应官方强调此次更新是 NextTrace 的重要里程碑，三种构建版本的策略让用户可以根据需求选择最适合的版本。2. 社区反馈A. GitHub 数据Star 数：7.7kFork 数：461v1.6.1 发布后获得社区积极反响B. 功能亮点MTR 模式是最受期待的功能之一Windows Npcap 依赖移除降低了使用门槛MTU 探测模式填补了功能空白六、相关链接1. 官方公告GitHub Release v1.6.1项目仓库2. 相关资源完整更新日志版本对比参考资料Release v1.6.1 - nxtrace/NTrace-coreNTrace-core GitHub Repository
rip 终端进程管理工具入门指南一、概述1. 简介A. 是什么rip 是一个用 Rust 语言编写的终端工具，提供交互式的进程查找和终止功能。通过模糊搜索界面，用户可以快速定位并杀死占用系统资源的进程。B. 为什么学比传统 ps 和 kill 命令更直观支持按 CPU、内存、端口等多维度排序实时监控模式可动态刷新进程列表跨平台支持 Linux、macOS 和 WindowsC. 学完能做什么快速定位高 CPU 或高内存消耗的进程精准终止指定端口占用的进程使用信号优雅地关闭应用程序实时监控系统进程状态2. 前置知识A. 必备技能基本终端命令操作了解进程和端口概念B. 推荐知识了解 Unix 信号机制了解系统资源监控基础二、环境准备1. 系统要求Linux：x86_64、aarch64 架构macOS：x86_64、arm64 架构Windows：x86_64 架构2. 安装步骤Homebrew（macOS/Linux）：brew install cesarferreira/tap/ripCargo：cargo install rip-cli从源码编译：cargo install --path .Nix：nix run github:cesarferreira/rip --no-write-lock-file3. 验证安装rip --version三、核心概念1. 基本术语模糊搜索（Fuzzy Search）：支持部分匹配的搜索方式信号（Signal）：发送给进程的指令，如 KILL、TERM实时模式（Live Mode）：自动刷新进程列表的模式端口模式（Ports Mode）：显示监听网络端口的进程2. 工作原理graph LR A[用户执行 rip] --> B[获取进程列表] B --> C[显示 TUI 界面] C --> D{用户操作} D -->|搜索| E[过滤进程] D -->|选择| F[标记进程] D -->|确认| G[发送信号] G --> H[终止进程] D -->|取消| I[退出界面]四、快速上手1. Hello World 示例# 启动 rip（默认按 CPU 排序） rip运行后会显示所有运行中的进程，可通过键盘进行交互操作。2. 核心功能演示# 预过滤特定名称的进程 rip -f chrome # 使用 SIGTERM 信号优雅终止 rip -s SIGTERM # 按内存使用排序 rip --sort mem # 按名称排序 rip --sort name3. 代码讲解基本使用流程执行 rip 命令进入交互界面直接输入进程名进行模糊搜索使用空格键选中/取消选中进程按回车键发送终止信号按 Esc 或 Ctrl+C 取消操作端口模式# 显示所有占用端口的进程 rip --ports # 终止占用特定端口的进程 rip --port 3000 # 端口模式配合实时刷新 rip --ports --live五、进阶内容1. 常用功能实时监控模式# 启动自动刷新模式 rip --live此模式下进程列表会定期更新，适合监控动态变化的系统状态。信号选择rip 支持多种 Unix 信号：信号编号描述KILL9强制杀死（默认）TERM15优雅终止INT2中断HUP1挂起QUIT3退出排序选项--sort cpu # 按 CPU 使用率（默认） --sort mem # 按内存占用 --sort pid # 按进程 ID --sort name # 按进程名称 --sort port # 按端口号2. 最佳实践优先使用 SIGTERM 信号，给予进程清理资源的机会对于无响应进程再使用 SIGKILL使用预过滤功能缩小搜索范围端口模式用于快速定位端口冲突问题3. 性能优化rip 使用 Rust 编写，资源占用极低模糊搜索算法高效，支持大量进程快速筛选实时模式采用智能刷新策略，避免过度消耗资源六、实战案例1. 场景描述开发环境中某个 Node.js 进程占用端口 3000，导致新服务无法启动。2. 实现步骤# 方法 1：直接使用端口模式 rip --port 3000 # 方法 2：先查找再终止 rip -f node # 方法 3：按 CPU 排序找到高消耗进程 rip --sort cpu在交互界面中：使用空格选中目标进程按回车确认终止3. 完整代码# 组合使用示例：实时监控端口 8080 rip --ports --live --sort port # 优雅终止所有 Chrome 进程 rip -f chrome -s TERM # 查看并终止高内存进程 rip --sort mem --live七、常见问题1. 安装问题Q: Homebrew 安装失败A: 确保已更新 Homebrew：brew updateQ: Cargo 安装缓慢A: 可使用国内镜像源加速2. 使用问题Q: 为什么进程终止后仍显示A: 实时模式会自动刷新，非实时模式可手动重启 ripQ: 无法终止系统进程A: 需要使用 sudo 权限运行 rip3. 运行问题Q: 界面显示异常A: 确保终端支持 TUI，尝试调整终端窗口大小Q: 找不到预编译二进制A: 可从源码编译，确保安装了 Rust 工具链参考资料rip GitHub 仓库rip-cli on crates.io
微信 iLink Bot SDK 技术文档一、概述1. 项目简介A. 是什么weixin-bot 是一个微信 iLink Bot SDK，支持 Node.js 和 Python 两种语言实现。它为开发者提供了一套简洁的 API，让任何 Agent 可以在 5 分钟内接入微信消息收发功能。B. 为什么需要它传统的微信机器人接入面临以下痛点：协议复杂，需要深入理解微信 iLink Bot APIcontext_token 管理繁琐，处理不当会导致消息投递失败Session 过期需要手动重新登录需要配置 Webhook 接收消息，部署复杂weixin-bot SDK 通过封装底层协议细节，解决了这些问题：零配置，开箱即用凭证自动保存和续期context_token 自动管理长轮询收消息，无需 WebhookC. 应用场景AI Agent 接入微信作为交互渠道客服机器人自动回复群聊助手和消息监听微信消息自动化处理2. 技术背景A. iLink Bot APIiLink Bot API 是微信提供的机器人接口协议，采用 HTTP 长轮询方式接收消息，通过 HTTP POST 发送消息。关键特性包括：扫码登录认证长轮询获取更新context_token 上下文传递机制Typing 状态支持B. 协议关键发现SDK 开发过程中发现的关键协议细节：context_token：回复消息时必须原样传回 APIsendtyping：唯一能触发"对方正在输入中"的方式message_state：GENERATING 状态在 API 层面可用，但微信客户端不渲染Session 过期：errcode 为 -14 时需要重新登录二、系统架构1. 整体架构graph TB Agent[Agent 应用] -->|调用| SDK[weixin-bot SDK] SDK -->|HTTP 长轮询| API[iLink Bot API] SDK -->|HTTP POST| API API -->|推送消息| User[微信用户] User -->|扫码/发消息| API SDK -->|保存凭证| Local[本地存储]2. 组件说明Agent 应用：使用 SDK 的上层应用，如 AI Agent、客服机器人weixin-bot SDK：封装 iLink Bot API 协议的 SDK 库iLink Bot API：微信提供的机器人接口服务本地存储：保存登录凭证，避免重复扫码3. 交互流程sequenceDiagram participant Agent as Agent 应用 participant SDK as weixin-bot SDK participant API as iLink Bot API participant User as 微信用户 Note over Agent,User: 1. 登录阶段 Agent->>SDK: bot.login() SDK->>API: GET /get_bot_qrcode?bot_type=3 API-->>SDK: 返回二维码 URL SDK-->>Agent: 终端显示二维码 User->>API: 微信扫码确认 API-->>SDK: 返回 bot_token + baseurl SDK-->>Agent: 登录成功，凭证已保存 Note over Agent,User: 2. 消息收发循环 Agent->>SDK: bot.run() loop 长轮询循环 SDK->>API: POST /getupdates (最多保持 35 秒) User->>API: 发送消息 "你好" API-->>SDK: 返回消息 + context_token SDK-->>Agent: 触发 onMessage(msg) Agent->>SDK: bot.sendTyping(userId) SDK->>API: POST /sendtyping Note over User: 显示 "对方正在输入中" Agent->>SDK: bot.reply(msg, "Echo: 你好") SDK->>API: POST /sendmessage (带 context_token) API-->>User: 推送回复消息 SDK->>API: POST /sendtyping (取消 typing) end Note over Agent,User: 3. 异常处理 API-->>SDK: 返回 errcode: -14 (Session 过期) SDK->>SDK: 自动触发重新登录 SDK->>API: 重新获取二维码和 token SDK-->>Agent: 自动恢复运行三、安装指南1. 系统要求Node.js：14+ 版本Python：3.7+ 版本网络环境：可访问微信 iLink Bot API2. Node.js 安装npm install @pinixai/weixin-bot3. Python 安装pip install weixin-bot-sdk四、快速入门1. Node.js 示例import { WeixinBot } from '@pinixai/weixin-bot' const bot = new WeixinBot() await bot.login() bot.onMessage(async (msg) => { await bot.sendTyping(msg.userId) await bot.reply(msg, `Echo: ${msg.text}`) }) await bot.run()2. Python 示例from weixin_bot import WeixinBot bot = WeixinBot() bot.login() @bot.on_message async def handle(msg): await bot.send_typing(msg.user_id) await bot.reply(msg, f"Echo: {msg.text}") bot.run()3. 运行流程创建 WeixinBot 实例调用 login() 方法，终端显示二维码使用微信扫码确认登录注册消息处理回调调用 run() 启动长轮询循环五、API 参考1. 核心方法方法参数说明login()force?: boolean扫码登录，已有凭证则自动跳过onMessage()handler: Function注册消息处理回调reply()msg, text回复消息，自动取消 typing 状态send()userId, text主动发消息，需已有 context_tokensendTyping()userId显示"对方正在输入中"stopTyping()userId取消输入状态run()无启动长轮询循环stop()无停止运行2. 消息对象interface Message { userId: string // 用户 ID text: string // 消息文本 contextToken: string // 上下文 token，SDK 自动管理 }3. 使用示例// 回复消息 await bot.reply(msg, "收到你的消息") // 主动发消息 await bot.send(userId, "你好") // 显示 typing 状态 await bot.sendTyping(userId) // 取消 typing 状态 await bot.stopTyping(userId)六、高级特性1. context_token 自动管理context_token 是 iLink Bot API 的关键机制：API 返回消息时携带 context_token回复消息时必须原样传回，否则消息无法投递SDK 内部自动管理，开发者无需关心2. Typing 状态sendtyping 是唯一能触发"对方正在输入中"的方式：await bot.sendTyping(userId) // 开始输入状态 // ... 处理消息 ... await bot.reply(msg, text) // reply 会自动取消 typing3. Session 过期自动处理当 Session 过期（errcode: -14）时：SDK 自动检测到错误自动触发重新登录流程恢复后继续运行4. 凭证持久化登录成功后，SDK 自动保存凭证：bot_tokenbaseurl后续启动自动加载凭证，无需重复扫码七、技术细节1. 长轮询机制SDK 使用长轮询获取消息更新：请求 /getupdates 接口最多保持 35 秒有消息立即返回无消息超时返回空数组循环往复持续监听2. 消息投递保证为保证消息成功投递：使用收到的 context_token 原样传回SDK 内部维护 userId 到 context_token 的映射避免跨会话复用 token3. 协议限制以下是协议分析和使用中发现的限制：message_state: GENERATING 在 API 层面可用，但微信客户端不渲染气泡更新，不建议使用sendtyping 是唯一可靠的 typing 触发方式Session 会定期过期，需要处理 -14 错误码八、最佳实践1. 消息处理建议bot.onMessage(async (msg) => { try { // 1. 先显示 typing，提升用户体验 await bot.sendTyping(msg.userId) // 2. 处理业务逻辑 const response = await processMessage(msg.text) // 3. 回复消息（自动取消 typing） await bot.reply(msg, response) } catch (error) { console.error('处理消息失败:', error) } })2. 错误处理bot.onMessage(async (msg) => { try { await bot.reply(msg, "处理中...") } catch (error) { if (error.code === -14) { console.log('Session 过期，SDK 会自动重连') } else { console.error('发送消息失败:', error) } } })3. 资源清理// 优雅退出 process.on('SIGINT', async () => { console.log('正在停止 bot...') bot.stop() process.exit(0) })九、故障排查1. 常见问题问题：登录后收不到消息检查网络连接确认 run() 方法已调用查看控制台是否有错误日志问题：消息发送失败确认 context_token 有效检查是否使用 reply() 方法而非 send()查看错误码和错误信息问题：频繁要求重新登录检查 IP 是否被限制确认账号状态正常Session 有效期可能较短，属于正常现象2. 日志调试SDK 输出详细日志，方便调试：登录状态消息收发错误信息十、生态资源1. 官方资源GitHub 仓库：https://github.com/epiral/weixin-bot协议文档：docs/protocol-spec.md（1200+ 行详细分析）2. 示例项目Node.js Echo Bot：完整示例，含日志和 typingNode.js 流式测试：GENERATING vs FINISH 测试Node.js Typing 测试：sendtyping vs GENERATING 对比3. 相关包@pinixai/weixin-bot：Node.js SDKweixin-bot-sdk：Python SDK参考资料epiral/weixin-bot - GitHub
rathole 入门指南一、概述1. 简介A. 是什么rathole 是一个用 Rust 编写的轻量级、高性能反向代理工具，用于 NAT 穿透。它可以将位于 NAT 后面的设备上的服务暴露到互联网上。与 frp 和 ngrok 类似，rathole 通过一台具有公网 IP 的服务器来中转流量，使内网服务可被外网访问。B. 为什么学解决家庭服务器或 NAS 无法直接访问的问题相比 frp 具有更高的性能和更低的资源占用用 Rust 编写，二进制文件可小至 500KiB，适合嵌入式设备C. 学完能做什么在公网服务器上部署 rathole 服务端在内网设备上配置客户端，将本地服务暴露到公网配置加密传输，保护数据安全热重载配置，无需重启服务二、环境准备1. 系统要求服务器：具有公网 IP 的 Linux 服务器客户端：位于 NAT 后面的设备（家用电脑、NAS 等）操作系统：Linux、macOS、Windows、支持 Docker 的平台2. 安装步骤从官方发布页面下载预编译二进制文件：Linux:wget https://github.com/rathole-org/rathole/releases/download/v0.5.0/rathole-x86_64-unknown-linux-musl.tar.gz tar -xzf rathole-x86_64-unknown-linux-musl.tar.gzDocker:docker pull rapiz1/rathole从源码编译：git clone https://github.com/rathole-org/rathole.git cd rathole cargo build --release3. 验证安装./rathole --version三、核心概念1. 基本术语服务端（Server）：运行在具有公网 IP 的服务器上，监听来自客户端的连接和来自外网的访问请求客户端（Client）：运行在 NAT 后面的设备上，主动连接服务端并注册需要转发的服务Token：服务端和客户端之间用于身份验证的密钥服务（Service）：需要转发的具体应用，如 SSH、Web 服务器等2. 工作原理graph LR A[外网用户] -->|访问公网端口| B[服务端] B <-->|加密通道| C[客户端] C -->|转发请求| D[本地服务]rathole 的工作流程如下：客户端主动连接服务端，并使用 Token 进行身份验证服务端记录客户端注册的服务映射关系外网用户访问服务端的公网端口服务端通过加密通道将流量转发给客户端客户端将流量转发到本地服务四、快速上手1. 基本示例：暴露 NAS 的 SSH 服务场景你有一台位于家庭网络的 NAS，希望从互联网上通过 SSH 访问它。服务端配置创建 server.toml 文件：[server] bind_addr = "0.0.0.0:2333" [server.services.my_nas_ssh] token = "use_a_secret_that_only_you_know" bind_addr = "0.0.0.0:5202"启动服务端：./rathole --server server.toml客户端配置创建 client.toml 文件：[client] remote_addr = "myserver.com:2333" [client.services.my_nas_ssh] token = "use_a_secret_that_only_you_know" local_addr = "127.0.0.1:22"启动客户端：./rathole --client client.toml验证连接ssh -p 5202 myserver.com2. 多服务配置可以在一个配置文件中定义多个服务：客户端配置：[client] remote_addr = "myserver.com:2333" [client.services.ssh] token = "ssh_token" local_addr = "127.0.0.1:22" [client.services.web] token = "web_token" local_addr = "127.0.0.1:8080" [client.services.minecraft] token = "mc_token" local_addr = "127.0.0.1:25565" type = "tcp"服务端配置：[server] bind_addr = "0.0.0.0:2333" [server.services.ssh] token = "ssh_token" bind_addr = "0.0.0.0:5202" [server.services.web] token = "web_token" bind_addr = "0.0.0.0:5203" [server.services.minecraft] token = "mc_token" bind_addr = "0.0.0.0:5204" type = "tcp"3. UDP 服务转发rathole 支持 UDP 协议转发：[client.services.quic] type = "udp" token = "quic_token" local_addr = "127.0.0.1:4433"[server.services.quic] type = "udp" token = "quic_token" bind_addr = "0.0.0.0:4433"五、进阶配置1. 传输层加密rathole 支持三种传输模式：TCP、TLS、Noise。TLS 加密服务端配置：[server.transport] type = "tls" [server.transport.tls] pkcs12 = "identity.pfx" pkcs12_password = "your_password"客户端配置：[client.transport] type = "tls" [client.transport.tls] trusted_root = "ca.pem" hostname = "example.com"Noise Protocol 加密Noise Protocol 是现代的加密协议，无需证书：[client.transport] type = "noise" [client.transport.noise] pattern = "Noise_NK_25519_ChaChaPoly_BLAKE2s" local_private_key = "your_base64_key" remote_public_key = "server_base64_key"2. 代理连接客户端可以通过代理连接服务端：[client.transport.tcp] proxy = "socks5://user:passwd@127.0.0.1:1080"支持 HTTP 和 SOCKS5 代理。3. 日志控制通过环境变量控制日志级别：RUST_LOG=error ./rathole config.toml可用级别：error、warn、info、debug、trace默认级别为 info。4. 性能调优从 v0.4.7 开始，rathole 默认启用 TCP_NODELAY，这对延迟敏感的应用（如 RDP、Minecraft 服务器）有益，但会略微降低带宽。如果带宽更重要，可以禁用：[client.transport.tcp] nodelay = false [server.transport.tcp] nodelay = false也可以针对单个服务配置：[client.services.my_service] nodelay = false5. 心跳与重连客户端心跳配置：[client] heartbeat_timeout = 40 retry_interval = 1服务端心跳配置：[server] heartbeat_interval = 30heartbeat_interval：应用层心跳发送间隔，设为 0 禁用heartbeat_timeout：心跳超时时间，必须大于 server.heartbeat_intervalretry_interval：重连服务器的间隔六、部署实战1. systemd 服务配置创建 /etc/systemd/system/rathole-server.service：[Unit] Description=Rathole Server After=network.target [Service] Type=simple User=root ExecStart=/path/to/rathole --server /path/to/server.toml Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target创建 /etc/systemd/system/rathole-client.service：[Unit] Description=Rathole Client After=network.target [Service] Type=simple User=root ExecStart=/path/to/rathole --client /path/to/client.toml Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target启用并启动：systemctl daemon-reload systemctl enable rathole-server systemctl start rathole-server2. Docker 部署服务端：docker run -d \ --name rathole-server \ -p 2333:2333 \ -p 5202:5202 \ -v /path/to/server.toml:/app/server.toml \ rapiz1/rathole --server /app/server.toml客户端：docker run -d \ --name rathole-client \ --network host \ -v /path/to/client.toml:/app/client.toml \ rapiz1/rathole --client /app/client.toml七、性能对比1. 与 frp 的对比rathole 在性能方面相比 frp 有显著优势：吞吐量：HTTP 吞吐量更高连接数：能处理更多并发连接内存占用：显著低于 frp延迟：与 frp 相当2. 性能基准根据官方基准测试结果：HTTP 吞吐量：比 frp 提升 2-3 倍（本地回环测试）TCP 比特率：显著优于 frp内存占用：仅为 frp 的 30-50%需要注意的是，这些测试是在本地回环环境下进行的，反映的是 CPU 限制场景下的性能。实际使用中，网络往往是瓶颈，此时性能提升可能不那么明显。但 rathole 的主要优势在于低资源消耗。3. 资源占用优化rathole 的二进制文件可以编译至约 500KiB，非常适合：路由器等嵌入式设备资源受限的 VPS需要同时运行多个服务的环境八、常见问题1. 连接失败问题：客户端无法连接到服务端排查：检查服务端防火墙是否开放监听端口确认 Token 配置是否一致验证 remote_addr 地址和端口是否正确查看服务端日志是否有连接记录2. 热重载不生效问题：修改配置后服务未生效解决：目前需要重启服务应用新配置HTTP API 配置功能正在开发中3. 性能不佳问题：转发服务变慢排查：检查客户端和服务端的网络延迟确认没有启用不必要的代理尝试调整 TCP_NODELAY 设置检查本地服务本身是否有性能问题参考资料rathole GitHub 仓库rathole 官方文档
Folio-OCR 三栏文档 OCR 工作台一、概述1. 简介A. 是什么Folio-OCR 是一款基于 GLM-OCR 和 Ollama 的三栏文档 OCR 工作台，专为书籍和文档的日常批量识别设计。它提供了一个现代化的 Web 界面，支持图片和 PDF 文件的批量光学字符识别，并具备智能版面分析、实时编辑和多种格式导出功能。B. 为什么学解决文档数字化过程中的人工识别效率问题利用本地化 OCR 方案保护数据隐私学习 FastAPI 前后端分离架构和版面分析技术了解如何将大型语言模型集成到实际应用中C. 学完能做什么搭建本地化的 OCR 识别服务批量处理 PDF 和图片文档使用版面分析技术提高识别准确率将识别结果导出为 Markdown、TXT 或 Word 文档2. 前置知识A. 必备技能基础的 Linux 命令行操作了解 Docker 基础概念B. 推荐知识Python 基础编程知识Web 开发基础概念OCR 和版面分析基础二、环境准备1. 系统要求操作系统：Linux、macOS、Windows 10/11Docker：20.10+（推荐使用 Docker 部署）Python：3.10+（本地部署）Ollama：已安装（本地部署）硬件：建议 8GB+ 内存，有 NVIDIA 显卡可获得更好性能2. 安装步骤Docker 部署（推荐）# 1. 克隆项目 git clone https://github.com/vorojar/Folio-OCR.git cd Folio-OCR # 2. 启动服务 docker compose up -d # 3. 下载 OCR 模型（约 2GB，只需执行一次） docker compose exec ollama ollama pull glm-ocr本地部署# 安装依赖 pip install -r requirements.txt # 拉取模型 ollama pull glm-ocr # 启动服务 python server.py # Windows 一键启动 start.bat3. 验证安装打开浏览器访问 http://localhost:3000，若能看到界面则表示安装成功。# 检查 Ollama 状态 curl http://localhost:11434/api/tags # 检查服务状态 curl http://localhost:3000/api/status三、核心概念1. 基本术语GLM-OCR：智谱 AI 开发的 OCR 模型，用于图像文字识别Ollama：本地化大模型运行平台，提供 GLM-OCR 的推理服务FastAPI：Python Web 框架，用于构建后端 APIPP-DocLayoutV3：PaddlePaddle 的文档版面分析模型SQLite：轻量级数据库，用于持久化存储文档和 OCR 结果版面分析：自动检测文档中的标题、正文、表格、图片等区域2. 工作原理graph LR User[用户] --> FE[前端界面] FE --> API[FastAPI 后端] API --> DB[(SQLite 数据库)] API --> Layout[版面分析模型] API --> Ollama[Ollama OCR 服务] Layout --> API Ollama --> API API --> FE API --> Storage[文件存储]系统采用三层架构设计：前端层：提供三栏式用户界面，负责文件上传、结果显示和用户交互后端层：FastAPI 提供 RESTful API，处理版面分析、OCR 调用和数据持久化服务层：Ollama 提供 OCR 推理服务，PP-DocLayoutV3 提供版面分析能力四、快速上手1. 基本使用流程graph TD A[启动服务] --> B[上传文档] B --> C[自动拆页处理] C --> D[版面分析] D --> E[OCR 识别] E --> F[编辑校对] F --> G[导出文档]2. 上传文档支持以下文件格式：图片：PNG、JPG、GIF、BMP文档：PDF支持多文件混合上传，系统会自动将所有文件合并为一个文档，并按页码顺序排列。3. OCR 识别系统提供两种 OCR 模式：单页识别：对选中的页面进行 OCR批量识别：点击 OCR All Pages 一键处理全部页面识别过程中会显示实时进度条和 ETA 时间估算，用户可以随时点击 Stop 按钮中断处理。4. 编辑与导出识别结果支持：Edit 模式：纯文本编辑，便于手动修正Preview 模式：实时渲染 HTML 表格和 Markdown 格式段落重排：自动合并因换行断开的段落导出格式：Markdown（.md）纯文本（.txt）Word 文档（.docx）五、核心功能1. OCR 引擎A. 版面分析使用 PP-DocLayoutV3 模型进行智能版面分析，自动识别以下区域：标题（title）正文（text）表格（table）图片（figure）页眉页脚、脚注、页码（自动跳过）B. 智能合并相邻文本区域会自动合并，减少 OCR 调用次数。例如 11 个文本区域可合并为 3 组，实现约 2.5 倍加速。C. LaTeX 处理自动将模型输出的 LaTeX 符号转换为 Unicode 字符：$\textcircled{1}$ → ①$\frac{1}{2}$ → ½其他常见数学符号D. 清理处理自动清理模型输出的 Markdown 围栏标记。2. 数据持久化使用 SQLite 数据库存储以下信息：文档元数据（ID、文件名、创建时间）页面信息（页码、文件名、OCR 结果、版面区域、处理时间）自动保存编辑内容（800ms 防抖）3. 界面交互A. 三栏布局左栏：页面缩略图，支持快速切换页面中栏：图片预览，显示版面分析区域框右栏：OCR 结果，支持编辑和预览B. 双向高亮点击图片中的区域框会高亮对应的文本块，点击文本块会高亮对应的图片区域。C. 全文搜索支持 Ctrl+F 全文搜索，跨页高亮显示匹配内容并统计命中次数。D. 键盘导航使用 ↑↓ 方向键快速切换页面。4. 网络容错所有网络请求都带有超时保护：状态检查：5 秒OCR 调用：180 秒其他请求：30 秒Ollama 断开后 UI 不会冻结，超时后会自动恢复可操作状态并通过 Toast 弹窗通知用户。六、技术架构1. 后端架构graph TB subgraph 后端服务 API[FastAPI Server] DB[(SQLite)] Layout[PP-DocLayoutV3] Uploads[uploads/ 目录] end subgraph 外部服务 Ollama[Ollama GLM-OCR] end API --> DB API --> Layout API --> Uploads API --> Ollama2. 版面分析流程sequenceDiagram participant U as 用户 participant API as FastAPI participant L as Layout 模型 participant O as Ollama U->>API: 上传图片 API->>L: 版面分析 L-->>API: 返回区域列表 API->>API: 合并相邻区域 loop 对每个合并区域 API->>O: OCR 调用 O-->>API: 返回识别文本 end API->>U: 返回完整结果3. 数据库设计erDiagram documents ||--o{ pages : 包含 documents { string doc_id PK string filename string created_at } pages { string doc_id FK integer num string filename text ocr_text text ocr_regions real ocr_time }4. 主要依赖依赖版本用途fastapi>=0.100.0Web 框架uvicorn>=0.23.0ASGI 服务器httpx>=0.25.0异步 HTTP 客户端pymupdf>=1.23.0PDF 处理Pillow>=10.0.0图像处理transformers>=4.40.0版面分析模型torch>=2.0.0深度学习框架python-docx>=1.1.0Word 文档生成七、部署架构1. Docker Compose 配置graph LR Host[宿主机] --> LB[Nginx/Proxy] LB --> App[App 容器] LB --> Ollama[Ollama 容器] App --> DB[(SQLite 数据卷)] App --> Files[uploads 数据卷]2. GPU 加速若有 NVIDIA 显卡，可编辑 docker-compose.yml 取消 deploy 段落的注释以启用 GPU 加速。services: ollama: deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]3. 常用 Docker 命令docker compose down # 停止服务 docker compose up -d # 重新启动（数据不会丢失） docker compose logs -f app # 查看应用日志 docker compose logs -f ollama # 查看 Ollama 日志八、性能参考操作时间说明模型冷启动首次请求~50 秒需加载模型到内存后续单页识别~0.5 秒版面分析 + OCRPDF 渲染取决于页数2x 缩放矩阵渲染整体加速比2.5x相比逐区域 OCR九、常见问题1. 安装问题Ollama 未找到错误信息：Ollama not found解决方法：先安装 Ollama 并确保其在 PATH 中# macOS/Linux curl -fsSL https://ollama.com/install.sh | sh # Windows # 从 https://ollama.com/download 下载安装包模型下载失败解决方法：检查网络连接，手动执行模型拉取ollama pull glm-ocr2. 运行问题OCR 超时可能原因：图片过大或网络问题解决方法：系统已设置 180 秒超时，等待即可检查 Ollama 服务是否正常运行尝试重启服务版面分析失败可能原因：模型未正确加载解决方法：确保已安装 torch 和 transformers检查服务器日志查看具体错误3. 使用问题PDF 拆页不清晰说明：系统使用 2x 缩放矩阵渲染 PDF 以保证 OCR 质量解决方法：如需更高分辨率，可修改 server.py 中的 mat 参数导出的 Word 文档格式问题说明：DOCX 导出基于 python-docx，解析 OCR 结果中的表格和标题解决方法：识别时确保版面分析正确检测到表格区域十、项目结构Folio-OCR/ ├── server.py # FastAPI 后端（单文件） ├── index.html # HTML 页面 ├── script.js # 前端逻辑 ├── style.css # 样式 ├── latex_unicode.json # LaTeX → Unicode 映射表 ├── requirements.txt # Python 依赖 ├── Dockerfile # Docker 镜像构建 ├── docker-compose.yml # Docker Compose 编排 ├── start.bat # Windows 启动脚本 ├── folio_ocr.db # SQLite 数据库（运行时生成） └── uploads/ # 上传文件目录（运行时生成）十一、API 端点方法路径说明GET/前端页面GET/api/status服务状态、Ollama 连通性POST/api/load-model启动 Ollama 并预热模型POST/api/upload上传文件，返回 SSE 页面流GET/api/images/{doc_id}/{filename}获取页面图片POST/api/ocr/{doc_id}/{page_num}单页 OCRPOST/api/ocr/{doc_id}/all批量 OCR 全部页面GET/api/documents列出所有文档GET/api/documents/{doc_id}获取文档详情DELETE/api/documents/{doc_id}删除文档PUT/api/pages/{doc_id}/{page_num}/text保存编辑后的文本POST/api/export/{doc_id}导出 DOCX参考资料Folio-OCR GitHub 仓库GLM-OCR 模型Ollama 官方文档FastAPI 官方文档PP-DocLayoutV3 模型
CLI-Anything：让所有软件成为 AI Agent 原生工具一、概述1. 简介A. 是什么CLI-Anything 是一个 Claude Code 插件，能够将任何软件自动转换为 AI Agent 可控制的命令行工具。通过一条命令，它可以为 GIMP、Blender、LibreOffice 等应用生成功能完整的 CLI 接口，让 AI Agent 获得直接控制专业软件的能力。B. 为什么学解决 AI Agent 使用软件难题：当前 AI Agent 虽然推理能力强，但难以使用真实的专业软件统一接口范式：CLI 是 AI Agent 的理想接口，结构化、可组合、自描述自动化生成：无需手动编写代码，自动分析软件架构并生成 CLI生产级质量：1,508 个测试用例验证，覆盖 11 个主流应用C. 学完能做什么为任何软件自动生成 CLI，让 AI Agent 可以控制理解 7 阶段自动化流水线的工作原理部署和使用生成的 CLI 工具通过 refine 命令迭代改进 CLI 覆盖率2. 前置知识A. 必备技能Python 3.10+ 基础基本的命令行操作经验理解 AI Agent 的基本概念B. 推荐知识Click 框架（Python CLI 工具）pytest 测试框架Claude Code 使用经验二、环境准备1. 系统要求Python 3.10 或更高版本目标软件已安装（如 GIMP、Blender 等）Claude Code 或其他支持的 AI 编码代理2. 安装步骤Claude Code 平台安装：# 添加 CLI-Anything 市场 /plugin marketplace add HKUDS/CLI-Anything # 安装插件 /plugin install cli-anything手动安装（可选）：# 克隆仓库 git clone https://github.com/HKUDS/CLI-Anything.git # 复制插件到 Claude Code 插件目录 cp -r CLI-Anything/cli-anything-plugin ~/.claude/plugins/cli-anything # 重新加载插件 /reload-plugins3. 验证安装安装完成后，在 Claude Code 会话中输入：/cli-anything:cli-anything --help三、核心概念1. 基本术语Agent-Native（Agent 原生）：专为 AI Agent 设计的接口，支持结构化输入输出Harness（工具套件）：为特定软件生成的完整 CLI 包REPL（交互式解释器）：命令行交互模式，支持状态持久化7-Phase Pipeline：从分析到发布的自动化流程2. 工作原理CLI-Anything 通过自动化流程分析软件源码，理解其功能架构，然后生成标准的命令行接口。生成的 CLI 直接调用真实软件的后端，确保功能完整性。graph TB A[软件源码/仓库] --> B[分析阶段] B --> C[设计阶段] C --> D[实现阶段] D --> E[测试规划] E --> F[测试编写] F --> G[文档更新] G --> H[发布安装] subgraph 生成产物 I[Click CLI] J[REPL 界面] K[JSON 输出] L[测试套件] end D --> I D --> J D --> K F --> L3. 架构设计graph LR A[AI Agent] -->|命令| B[CLI-Anything 生成的 CLI] B -->|调用| C[真实软件后端] C -->|渲染/处理| D[输出文件] B -->|JSON 输出| A B -->|人类可读| E[终端输出] subgraph CLI-Anything 核心 F[分析引擎] G[代码生成器] H[测试框架] end F --> G G --> H四、快速上手1. Hello World 示例生成第一个 CLI 工具：# 为本地 GIMP 源码生成完整 CLI（所有 7 个阶段） /cli-anything:cli-anything ./gimp2. 核心功能演示# 从 GitHub 仓库生成 /cli-anything:cli-anything https://github.com/blender/blender3. 代码讲解上述命令会自动执行以下流程：第 1 阶段：分析扫描源代码，映射 GUI 操作到 API第 2 阶段：设计架构命令组、状态模型、输出格式第 3 阶段：实现构建 Click CLI，包含 REPL、JSON 输出、撤销/重做功能第 4 阶段：测试规划创建 TEST.md，包含单元测试和端到端测试计划第 5 阶段：测试编写实现全面的测试套件第 6 阶段：文档更新 TEST.md 包含测试结果第 7 阶段：发布创建 setup.py，安装到 PATH4. 使用生成的 CLI# 进入生成的 harness 目录 cd gimp/agent-harness # 安装到 PATH pip install -e . # 使用帮助 cli-anything-gimp --help # 创建新项目 cli-anything-gimp project new --width 1920 --height 1080 -o poster.json # 添加图层 cli-anything-gimp --json layer add -n "Background" --type solid --color "#1a1a2e" # 进入交互式 REPL cli-anything-gimp五、进阶内容1. 常用功能插件命令列表命令描述/cli-anything <path-or-repo>构建完整 CLI 工具套件/cli-anything:refine <path> [focus]改进现有工具套件，扩展覆盖率/cli-anything:test <path-or-repo>运行测试并更新 TEST.md/cli-anything:validate <path-or-repo>验证是否符合 HARNESS.md 标准refine 命令使用迭代改进 CLI 覆盖率：# 广泛改进 —— 分析所有功能的缺口 /cli-anything:refine ./gimp # 聚焦改进 —— 针对特定功能区域 /cli-anything:refine ./gimp "批量图像处理和滤镜功能"refine 命令会执行以下操作：分析软件完整能力与当前 CLI 覆盖之间的缺口为识别出的缺口实现新命令添加相关测试更新文档可以多次运行以稳步扩展覆盖率，每次运行都是增量且非破坏性的。2. 最佳实践真实软件集成原则CLI 必须调用实际软件进行渲染不使用简化替代品（如用 Pillow 替代 GIMP）生成有效的项目文件，然后调用真实后端测试策略# 运行特定 CLI 的测试 cd <software>/agent-harness python3 -m pytest cli_anything/<software>/tests/ -v # 强制已安装模式（推荐用于验证） CLI_ANYTHING_FORCE_INSTALLED=1 python3 -m pytest cli_anything/<software>/tests/ -v -sJSON 输出模式AI Agent 可以通过 --json 标志获取结构化输出：cli-anything-libreoffice --json document info --project report.json返回格式：{ "name": "Q1 Report", "type": "writer", "pages": 1, "elements": 2, "modified": true }3. 性能优化使用批量操作减少命令调用次数在 REPL 模式下工作，保持会话状态JSON 模式比人类可读输出更快，适合 Agent 解析六、实战案例1. 场景描述为 LibreOffice 生成 CLI，让 AI Agent 能够自动创建文档、添加内容并导出为 PDF。2. 实现步骤步骤 1：生成 CLI/cli-anything:cli-anything https://github.com/LibreOffice/core步骤 2：安装生成的 CLIcd libreoffice/agent-harness pip install -e .步骤 3：使用 CLI 创建文档# 创建新的 Writer 文档 cli-anything-libreoffice document new -o report.json --type writer # 添加标题 cli-anything-libreoffice --project report.json writer add-heading -t "季度报告" --level 1 # 添加表格 cli-anything-libreoffice --project report.json writer add-table --rows 4 --cols 3步骤 4：导出为 PDFcli-anything-libreoffice --project report.json export render output.pdf -p pdf --overwrite3. 完整 REPL 交互$ cli-anything-blender ╔══════════════════════════════════════════╗ ║ cli-anything-blender v1.0.0 ║ ║ Blender CLI for AI Agents ║ ╚══════════════════════════════════════════╝ blender> scene new --name ProductShot ✓ Created scene: ProductShot blender[ProductShot]> object add-mesh --type cube --location 0 0 1 ✓ Added mesh: Cube at (0, 0, 1) blender[ProductShot]*> render execute --output render.png --engine CYCLES ✓ Rendered: render.png (1920×1080, 2.3 MB) via blender --background blender[ProductShot]> exit Goodbye!七、常见问题1. 安装问题问题：插件安装后无法识别解决：确认 Claude Code 版本，使用 /reload-plugins 重新加载2. 生成问题问题：生成过程失败或输出不完整解决：确保源码可访问，检查 Python 依赖是否安装完整3. 运行问题问题：生成的 CLI 命令无法执行解决：确认已运行 pip install -e . 安装到 PATH八、应用场景CLI-Anything 可用于多种软件类型：GitHub 仓库将任何开源项目转换为 Agent 可控工具，如 VSCodium、WordPress、Calibre、Zotero 等AI/ML 平台自动化模型训练、推理管道和超参数调优，如 Stable Diffusion WebUI、ComfyUI、InvokeAI 等数据与分析工具支持程序化数据处理、可视化和统计分析，如 JupyterLab、Apache Superset、Metabase 等开发工具简化代码编辑、构建、测试和部署流程，如 Jenkins、Gitea、Portainer、SonarQube 等创意媒体工具控制内容创建、编辑和渲染工作流，如 Blender、GIMP、OBS Studio、Krita、Kdenlive 等科学计算自动化研究工作流、模拟和复杂计算，如 ImageJ、FreeCAD、QGIS、ParaView 等企业办公将商业应用和生产力工具转换为 Agent 可访问系统，如 NextCloud、GitLab、Grafana、Mattermost 等九、测试结果CLI-Anything 在 11 个不同的应用上进行了全面测试，总计 1,508 个测试用例，100% 通过率。软件领域CLI 命令后端测试数量GIMP图像编辑cli-anything-gimpPillow + GEGL/Script-Fu107Blender3D 建模与渲染cli-anything-blenderbpy (Python scripting)208Inkscape矢量图形cli-anything-inkscape直接 SVG/XML 操作202Audacity音频制作cli-anything-audacityPython wave + sox161LibreOffice办公套件cli-anything-libreofficeODF 生成 + 无头 LO158OBS Studio直播与录制cli-anything-obs-studioJSON 场景 + obs-websocket153Kdenlive视频编辑cli-anything-kdenliveMLT XML + melt 渲染器155Shotcut视频编辑cli-anything-shotcut直接 MLT XML + melt154Zoom视频会议cli-anything-zoomZoom REST API (OAuth2)22Draw.io绘图cli-anything-drawiomxGraph XML + draw.io CLI138AnyGenAI 内容生成cli-anything-anygenAnyGen REST API50总计 1,508测试层级包括：单元测试：隔离测试每个核心函数E2E 测试（原生）：项目文件生成管道E2E 测试（真实后端）：真实软件调用 + 输出验证CLI 子进程测试：通过 subprocess.run 验证已安装命令参考资料CLI-Anything GitHub RepositoryClaude Code Documentation
reinstall 一键 VPS 重装脚本开源项目推荐一、新闻概述1. 标题reinstall：一键 VPS 系统重装脚本，支持 19 种 Linux 发行版和 Windows2. 发布时间持续更新中（最新更新：2026 年 2 月）3. 来源GitHub 开源项目二、核心内容1. 事件摘要A. 主要内容reinstall 是一个功能强大的一键 VPS 系统重装脚本，支持在无需 IPMI 或 U 盘的情况下重装系统。项目托管在 GitHub，由开发者 bin456789 维护，目前拥有超过 10,000 星标和 1,800 次分支。B. 核心亮点支持任意方向重装：Linux to Linux、Linux to Windows、Windows to Windows、Windows to Linux支持 19 种常见 Linux 发行版支持使用官方原版 Windows ISO 自动安装专门适配低配小鸡，内存要求低至 256 MB智能网络配置，支持复杂网络环境2. 关键信息A. 项目数据GitHub Stars：10,900+Fork 数：1,794开源协议：GPL-3.0代码质量认证：Codacy A 级、CodeFactor A 级B. 支持系统数量Linux 发行版：19 种Windows 版本：Vista 至 11（含服务器版本）C. 最低硬件要求内存：256 MB（部分系统）硬盘：1 GB 起3. 背景介绍A. 项目起源VPS（虚拟专用服务器）用户经常面临系统更换的需求，但大多数云服务商只提供有限的系统镜像。传统重装方式需要 IPMI 访问或物理 U 盘，对普通用户来说门槛较高。B. 相关上下文该脚本通过 DD（磁盘直接复制）技术实现系统重装，解决了云服务器用户系统更换的痛点，成为同类工具中的佼佼者。三、详细报道1. 主要内容A. 功能特性一键重装到 Linux：支持 Debian、Ubuntu、CentOS Stream、Rocky Linux、AlmaLinux、openEuler、Anolis、Fedora、Arch、Gentoo、NixOS、openSUSE、Alpine、Kali、安同 OS、飞牛 fnOS 等 19 种发行版自动根据机器类型选择优化内核最大化利用磁盘空间一键重装到 Windows：使用官方原版 ISO，非自制镜像支持自动查找 ISO 链接、自动安装自动安装 VirtIO、XEN、AWS、GCP、Azure、Intel 等公有云驱动支持绕过 Windows 11 硬件限制一键 DD Raw 镜像：支持 raw 和固定大小的 vhd 镜像支持多种压缩格式：gz、xz、zst、tar、tar.gz、tar.xz、tar.zstDD Windows 镜像时自动扩展系统盘其他实用功能：重启到 Alpine Live OS 内存系统，用于备份恢复和手动操作重启到 netboot.xyz，支持更多系统手动安装支持 BIOS、EFI 引导，支持 ARM 服务器B. 技术亮点智能网络配置：graph LR A[检测网络环境] --> B{网络类型?} B -->|DHCP| C[配置动态 IP] B -->|Static| D[解析静态配置] D --> E{特殊情况处理} E -->|/32 /128| F[单地址配置] E -->|网关异网| G[跨网段路由] E -->|纯 IPv6| H[IPv6 专用] E -->|双栈分离| I[IPv4/IPv6 分网卡]低内存优化：比官方 netboot 需要更少的内存专门适配低配小鸡（256 MB 内存即可运行）安全可靠：全程用分区表 ID 识别硬盘，确保不会写错硬盘不含自制包，所有资源均实时从镜像源获得支持 BIOS、EFI 引导，兼容性强C. 系统兼容性支持的 Linux 发行版：发行版版本内存要求硬盘要求Alpine3.20-3.23256 MB1 GBDebian9-13256 MB1-1.5 GBKali滚动版256 MB1-1.5 GBUbuntu16.04 LTS-25.10512 MB2 GBAnolis7, 8, 23512 MB5 GBRHEL 系列8, 9, 10512 MB5 GBCentOS Stream9, 10512 MB5 GBFedora42, 43512 MB5 GBopenEuler20.03 LTS-25.09512 MB5 GBopenSUSELeap 15.6, 16.0, Tumbleweed512 MB5 GBNixOS25.11512 MB5 GBArch滚动版512 MB5 GBGentoo滚动版512 MB5 GB安同 OS滚动版512 MB5 GB飞牛 fnOS1512 MB8 GBWindows DD任意512 MB取决于镜像Windows ISOVista-11512 MB-1 GB25 GB支持的 Windows 系统：Windows Vista、7、8.x、10、11Windows Server 2008-2025Windows Server EssentialsWindows Server (Semi) Annual ChannelHyper-V ServerAzure Local (Azure Stack HCI)2. 技术细节A. 脚本工作原理sequenceDiagram participant U as 用户 participant S as reinstall 脚本 participant B as 引导环境 participant N as 网络下载 participant D as 硬盘 U->>S: 运行重装命令 S->>S: 检测系统和网络 S->>B: 下载并引导到安装环境 B->>N: 下载系统镜像 N->>D: 写入硬盘 D->>B: 重启到新系统 S->>U: 安装完成B. 网络配置能力脚本具有强大的网络配置能力，能够处理各种复杂网络环境：自动设置动静态 IP支持 /32、/128 单地址配置支持网关不在子网范围内的情况支持纯 IPv6 环境支持 IPv4/IPv6 在不同网卡的情况C. 云驱动支持脚本内置对主流云服务商驱动的支持，确保重装后网络正常：自动下载的驱动：VirtIO（社区版、阿里云、腾讯云、GCP）XEN（社区版、Citrix、AWS）AWS（ENA 网卡、NVME 存储控制器）GCP（gVNIC 网卡、GGA 显卡）Azure（MANA 网卡）Intel（VMD 存储控制器、各版本网卡驱动）3. 数据与事实A. 项目活跃度近期更新频繁：2026 年 2 月仍有提交社区参与度高：42 个 Issues，3 个 Pull Requests代码质量：通过 Codacy 和 CodeFactor A 级认证B. 功能迭代持续添加新的 Linux 发行版支持不断优化网络配置逻辑定期修复各类云服务商的兼容性问题四、影响分析1. 行业影响A. 技术趋势DD 重装技术成为 VPS 用户的主流选择开源脚本降低系统更换门槛云服务商镜像选择不再是限制因素B. 竞争格局相比商业重装服务：免费、开源、透明相比其他开源重装脚本：支持系统更多、兼容性更强、更新更频繁2. 用户影响A. VPS 用户能够自由选择心仪的操作系统低配小鸡也能运行更多系统节省时间和成本，无需购买带 IPMI 的服务器B. 开发者方便搭建各种开发测试环境快速切换系统进行测试3. 技术趋势A. 技术方向自动化运维工具的重要性日益凸显DD 技术在云服务器管理中的应用越来越广泛B. 生态影响促进了云服务器系统标准化推动了开源运维工具的发展五、各方反应1. 社区反馈GitHub 上获得大量星标，说明用户认可度高Issues 和 Discussions 中用户活跃提问和反馈Telegram 群组提供实时交流支持2. 用户评价A. 正面评价功能强大，支持系统多使用简单，一条命令完成重装网络配置智能，各种复杂环境都能处理低配机器友好，256 MB 内存也能运行B. 使用建议不支持 OpenVZ、LXC 虚拟机如果能使用 IPMI 或 U 盘，建议使用官方方式数据无价，重装前务必备份重要数据六、使用指南1. 快速开始下载脚本（Linux 系统）：# 国外服务器 curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || wget -O "${_##*/}" $_ # 国内服务器 curl -O https://cnb.cool/bin456789/reinstall/-/git/raw/main/reinstall.sh || wget -O "${_##*/}" $_2. 功能示例安装 Debian 12：bash reinstall.sh debian 12安装 Ubuntu 24.04：bash reinstall.sh ubuntu 24.04DD Windows 镜像：bash reinstall.sh dd --img "https://example.com/xxx.xz"安装 Windows 11：bash reinstall.sh windows --image-name "Windows 11 Pro" --lang zh-cn重启到 Alpine Live OS：bash reinstall.sh alpine --hold 13. 常用参数--password PASSWORD：设置密码--ssh-key KEY：设置 SSH 登录公钥--ssh-port PORT：修改 SSH 端口--web-port PORT：修改 Web 端口--frpc-toml PATH：添加 frpc 内网穿透--hold 1：仅重启到安装环境--hold 2：安装结束后不重启七、相关链接1. 项目地址GitHub 主页：https://github.com/bin456789/reinstallEnglish 文档：https://github.com/bin456789/reinstall/blob/main/README.en.md2. 反馈渠道GitHub Issues：https://github.com/bin456789/reinstall/issuesTelegram 群组：https://t.me/reinstall_os3. 参考资源massgrave.dev 官方 ISO：https://massgrave.dev/genuine-installation-medianetboot.xyz：https://github.com/netbootxyz/netboot.xyz参考资料reinstall GitHub 仓库