# proxy-port-monitor-tui - 文档层级:客户端工具 - 应用性质:客户端 TUI - 源码来源:repo 原生 - 运行关系:客户端工具 - 部署模型:无 - 对应服务:无 - 对应 stack:无 - Secret 边界:无 secret - 分发方式:`uv run` / `uv tool install`。 - 包名:`proxy-port-monitor-tui` - 命令名:`proxy-monitor-tui` - 本地状态路径:`~/.config/proxy-port-monitor-tui/` - 目标 API:server2 的 proxy-port-monitor Tailscale Service。 - 备注:客户端不保存 SSH 凭据、mihomo controller secret、订阅 URL 或节点密码。 ## 项目定位 用于在本机终端查看 Proxy Port Monitor 的目标连通性,并通过既有的 同源 controller 转发查看 mihomo Selector 组、做低流量延迟探测,以及 手动切换单个 Selector 的运行态当前节点。 它不是通用代理客户端,不直接 SSH 到目标机,不编辑 subscription、mixin、 host_vars 或远端 mihomo 配置文件。 ## 文档边界 本 README 说明本地客户端;服务入口、Tailscale Service 和 controller secret 边界仍由 proxy-port-monitor 的 service README 维护。 ## 源码结构 - `proxy_monitor_tui.py`:CLI、HTTP API client、Textual 视图和运行态切换确认。 - `tests/test_proxy_monitor_tui.py`:mock HTTP server 覆盖状态、控制器路径、测速和切换请求。 - `pyproject.toml`:Python 包与命令入口。 ## 对应服务文档 - `services/server2/systemd/proxy-port-monitor/current/README.md` ## 运行与部署模型 这是本机客户端工具,没有 systemd、Compose 或 Ansible 部署模型。开发时可直接运行: ``BT@@text cd apps/proxy-port-monitor-tui uv run proxy-monitor-tui ``BT@@ 安装为当前用户命令: ``BT@@text uv tool install git+https://gitea.shujk.top/shujakuin/proxy-port-monitor-tui.git proxy-monitor-tui ``BT@@ 升级到仓库最新版本: ``BT@@text uv tool install --upgrade git+https://gitea.shujk.top/shujakuin/proxy-port-monitor-tui.git ``BT@@ 若要把它作为某个 Python 项目的依赖(而非安装为当前用户命令),在该项目目录运行: ``BT@@text uv add git+https://gitea.shujk.top/shujakuin/proxy-port-monitor-tui.git uv run proxy-monitor-tui ``BT@@ 默认 API 地址是 `https://proxy.tailbeb9ad.ts.net`。可使用 `--api-url` 覆盖,或以 `--save-config` 保存到本地状态路径。支持的环境变量: - `PROXY_MONITOR_TUI_API_URL` - `PROXY_MONITOR_TUI_API_URL_FILE` - `PROXY_MONITOR_TUI_REFRESH_SECONDS` - `PROXY_MONITOR_TUI_TIMEOUT` - `PROXY_MONITOR_TUI_TEST_URL` - `PROXY_MONITOR_TUI_TEST_TIMEOUT_MS` - `PROXY_MONITOR_TUI_DELAY_CONCURRENCY` ## 配置与 Secret 边界 客户端只读取 `/status.json`,并限于调用每台机器的 `proxies`、`delay` 和 Selector 切换 controller API;不会调用 Proxy Port Monitor 的 `/config` 写接口。 controller secret 始终由 server2 的 proxy-port-monitor 服务注入。客户端不读取 SOPS 文件、运行时 env、SSH key 或 mihomo 配置。 ## 使用方式 主列表显示机器的 17890 可达性、连续失败数、出口位置和最近检查时间: - `Enter`:仅在目标在线时进入其 controller 详情。 - `r`:刷新连通性状态。 - `t`:对当前 Selector 组的候选节点做 mihomo delay 探测;默认使用 `https://www.gstatic.com/generate_204`,最多并发 4 个。 - `s`:对当前选择的候选节点发起运行态切换。TUI 会显示机器、组、旧节点和新节点, 必须按 `y` 二次确认;成功后立即读取 controller 验证当前节点。 测速只推荐最低延迟的成功节点,绝不自动切换。切换不会写回订阅、mixin、受管模型 或仓库真源,服务重启或上游配置刷新后的持久化行为以目标 mihomo 实现为准。 可用 `--once` 只打印当前机器连通性后退出,适用于脚本或只读排障。 ## 测试与发布 本地验证: ``BT@@text cd apps/proxy-port-monitor-tui uv run python -m unittest discover -s tests -v ``BT@@ 测试使用本地 mock HTTP server,不访问 Tailscale、controller 或任何远端服务。 首次连接真实环境时,先执行 `--once` 或只做读取和延迟探测。任何节点切换都属于 运行态控制操作,必须在当次获得明确授权,并限定为一台机器、一个 Selector 组和 一个候选节点。 ## Files - `apps/proxy-port-monitor-tui/proxy_monitor_tui.py` - `apps/proxy-port-monitor-tui/tests/test_proxy_monitor_tui.py` - `apps/proxy-port-monitor/README.md` - `services/server2/systemd/proxy-port-monitor/current/README.md`