Skip to content

Repository files navigation

Smart Proxy Client

Smart Proxy 是一个仅供个人使用的 Windows 便携代理客户端。项目基于 Neutralinojs,内置 sing-box,并保留当前个人订阅、离线节点与运行配置。

历史凭据警告:旧版本源码历史和 Release 含真实订阅地址、节点凭据与个人路径信息。v1.1.0 起的新产物不再内嵌个人配置,但这不会撤销历史暴露;若仓库曾公开,应轮换旧订阅与节点凭据。

Portable EXE

GitHub Actions 使用固定版本的 Neutralinojs CLI,将网页资源和 sing-box 1.13.13 嵌入 smart-proxy-client-win_x64.exe,并验证未嵌入个人配置。升级继续读取 EXE 同目录的 smart-proxy-data,不会覆盖已有订阅、离线 YAML 或设置。全新目录首次使用需导入自己的订阅。

以下构建与产物验证命令只由 GitHub Actions(Node.js 22+)运行;本机仅运行测试,不打包 EXE:

npm ci
npm test
npm run build:portable
npm run verify:portable

产物位于 dist/smart-proxy-client/smart-proxy-client-win_x64.exe,校验文件为同目录的 SHA256SUMS.txt

CI/CD

  • 推送到 main:执行测试、可复现构建和隐藏窗口运行验证。
  • 推送 v* 标签:完成同样验证后创建 GitHub Release,并上传 EXE 与 SHA-256。Release 可见性跟随仓库;不能把公开仓库的 Release 当作私密存储。
  • private-config.manifest.json 仅用于验证个人配置未进入 EXE;源码历史中的个人文件尚需单独治理。日志、WebView 缓存、锁文件和测速临时文件不会提交。

ATELIER 界面

暖瓷浅紫界面覆盖概览、节点、订阅、内核、连接、日志与设置。概览和节点详情只读真实选中节点及历史成绩;未测不填示例值,失败或取消后保留并标明历史。更换视觉不改变代理、节点选择、测速协议或订阅更新行为。

  • 节点卡片支持搜索、筛选、分组折叠、键盘选点和独立测试按钮;测试按钮不会触发选点。
  • 离线字体与 SVG 图形,无新增前端框架、CDN 或运行依赖;支持窄窗、键盘焦点及减少动画设置。
  • 本地隔离预览:node scripts/preview-ui.cjs,访问 http://127.0.0.1:4178/。只使用明确标注的测试数据,禁止原生桥接与外部请求,不读个人配置,也不启动代理。?scenario=empty|failed|pending|long 可检查边界状态。测试夹具不进入 EXE。

测速与运行行为

  • 「一键网络测试」通过运行中 sing-box 的现有节点做 HTTPS 连通与延迟测试,无需模型账户或 Node,不下载订阅,不以订阅过期拒绝测试。最多 4 路并发,单请求 5 秒;尚未载入运行内核的节点明确标记“待载入”。显示的是延迟,不是带宽。大面积失败做低并发对照;不能恢复时标记环境待确认,保留历史成绩。
  • 原模型测速已替换为独立开源 Stream Quality手机网页。不调用模型、不读取模型凭据;旧 codexProbeStore 原样保留,新成绩写入 streamQualityStore,不混排 tok/s。
  • 测速自动寻找并验证 Node.js 22+:应用目录、PATH、正在运行的 Pi/Node 及标准安装目录。无需修改系统 PATH;找不到时明确报错,代理内核不依赖 Node。
  • 通过独立 sing-box 测全部缓存订阅节点(指纹去重、保留多订阅归属),不依赖日常核心是否已加载该节点;系统分配专属 loopback 端口,独立临时配置,无 TUN/系统代理/控制器。源配置或协议转换不支持的节点逐项标记 unsupported,其余节点继续,不静默漏测。
  • 固定 401 段×256 字节 SSE,每50ms一段,持续20秒,约5 KiB/s;报告首段等待、额外停顿、抖动、攒包和完整性。另串行下载8 MiB,不抢占其他测速节点带宽;每请求30秒超时。单次初筛或全部节点3次交错复测,每节点最多约8.1/24.3 MiB,界面显示全测流量预算。
  • 流式达标并列,下载Mbps单独展示,不声称带宽上限或模型速度;下载不足1秒标为短样本。端点、协议、Cloudflare边缘位置不同不混排;源时序失真、限流、断流或漂移不产生合格成绩。公共端点可能需要代理网络可达,不保证免费服务永久可用。
  • 停止会取消实际请求、停止队列并清理自己启动的核心。失败、取消、端点和整轮异常单独记录,不删除上次成功成绩;不会切换日常节点、重启日常代理或清理活动连接。手机网页可测手机当前网络,也可用「启动手机控制」配对电脑后遥控全部缓存节点;后者实际测电脑线路。执行层默认127.0.0.1:8799,需私人HTTPS入口(如同一Tailscale尾网:tailscale serve --bg --yes --https=8444 http://127.0.0.1:8799)。手机控制期间本地测速互斥;停止会取消真实任务并作废配对码。公开网页不接收订阅凭据。详见上游手机使用说明。
  • Anthropic 可达性未测量时明确为未知;系统 DNS 的 A/AAAA 结果只作诊断,不封禁入口或触发自动更新。
  • 订阅自动更新只认真实证据:一轮测速里某订阅 ≥25% 节点连接级失败,或缓存超过机场声明的 Profile-Update-Interval(默认 24 小时)。命中后后台重新下载该订阅,比对入口 host:port 集合并直连 TCP 探测最多 3 个新入口;只写缓存并提醒,不重启内核、不切换节点、不清理连接。手动与自动更新均只写缓存,新配置在下次手动启动代理时生效。更新结果持久显示在订阅页,密码等配置变化也提示待生效;TCP 可达性仅供参考,不阻止暂存提醒。失败不会重置成功下载时间,20 分钟冷却后可重试;首次检查在启动后 15 秒,此后每分钟检查一次是否到期。开关关闭、冷却(20 分钟)、下载失败、上游未变、新入口不可达都会写明原因日志。
  • 订阅页可“移除离线 YAML”:仅移除来源,保留原文件,下次手动启动代理时才应用到内核。不要通过删除原文件间接移除订阅。
  • 日志按批写入,队列最多 256 KiB;超过上限会记录丢弃原因。新日志每文件最多 8 MiB,保留当前和两份轮转;首次遇到的旧超大日志移入运行目录 _历史版本,不删除。
  • 后台连接轮询间隔 15 秒,连接页可见时为 2 秒;请求超时 5 秒,不重叠,不因控制器读失败直接重启核心。

内核管理

内核页分别显示运行版本、下次启动选择的版本、官方稳定版及错误。更新不依赖正被修复的代理:先直连 GitHub 官方资产 API;连接失败或连续 10 秒低于 128 KiB/s 时,明确记录原因后使用 ghfast.top 字节镜像,仍只信任独立官方元数据的大小与 SHA256。镜像仅收到公开安装包 URL,不接触订阅与账户。检查最多 20 秒、资产下载共用 180 秒期限;选择系统架构对应的非 legacy 资产,核对官方大小、SHA256、EXE 版本及现有配置兼容性后,保存到独立版本路径。并发操作被阻止;任何失败保留原文件和选择,成功也不会重启当前内核。

界面重载与配置保护

托盘「重载界面」不重启内核。v1.2.1 修复升级接管后重载仍使用旧进程参数导致初始化失败的问题;同一进程已持有锁时直接恢复,不再次接管。隐藏重载保持隐藏。

设置未成功加载、界面未就绪或启动失败时,禁止将默认表单写入设置文件。已有文件读取/解析失败会明确报错并保留原文件;只有成功读取数据目录并确认文件不存在时,才按全新安装初始化默认设置。

网站故障自动切换

设置 →「网站故障自动切换」可启用开关,修改监测域名、故障次数、统计窗口及冷却时间。默认监测 chatgpt.com(含子域名),60 秒内 2 个不同连接中断触发,切换后冷却 180 秒;新安装默认关闭。此项保存即时生效,不重启代理,关闭后仍保持原有手动选点行为。

  • 根据核心 info 日志的连接 ID 关联网站与节点,只处理当前代理节点;直连、其他网站、客户端取消和重复错误不触发。日志流断开后自动重连,并记录检测暂停原因。
  • 直接切换到其他订阅的上次最佳节点,不进行任何连通性或模型测速。历史成绩按最近测量配置分组,优先同端点/边缘位置下三次完整成功且流式达标的节点(达标并列);无可用历史时,随机选择其他订阅,再随机选择其中节点,明确记录随机原因。
  • 候选必须已在运行中的目标组,排除当前订阅、同时属于当前订阅的重复节点,以及冷却中的故障节点。没有其他订阅候选时保留当前节点并记录原因,不重启或重载配置来强行加入节点。
  • 使用 sing-box Selector API 热切换,并读回确认;只清理故障网站在旧节点上的连接,不清其他网站、直连或测速通道的连接。手动选点或关闭功能会取消尚未提交的自动切换。
  • 历史或随机选择不保证节点当前健康;再次故障可在冷却结束后触发下一次切换。其他网站的新连接也会使用目标组的新节点,已建立的非故障网站连接保留。检测依赖核心 info 日志;若运行级别不足,会记录未生效原因,不能靠此功能重启内核。

第三方组件

Neutralinojs、sing-box、Noto Sans CJK 与 js-yaml 的许可信息见 THIRD_PARTY_NOTICES.md。本项目自身未授权公开分发。

About

Personal portable Smart Proxy client for Windows

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages