Skip to content

Releases

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 06 Nov 11:48

v0.3.1 — 开机自动连接修复

小版本,只修一个问题:开机后插件不自己连,得去浏览器手动点一次。

症状

  • 一开机就打开 DSH,挂件显示「未连接」,但下载/上传都有速度
  • 必须自己去浏览器打开任意网页,才连得上
  • 之后再点「连接」是好的,只有开机那一次不行

根因

kick() 只做一件事:DSH 启动 8 秒后跑一次 ensure,失败就结束。
而 retry.js 的自动重试只认「不允许上网时间段」这类错误,
「拿不到门户参数 / 连不上门户」不在重试范围内 → 一次失败 = 永久放弃。

开机那会儿网卡刚拿到 IP、门户还没就绪,探测 http://2.2.2.2/ 12 秒超时是常态,
所以这个失败几乎是必然的。

现在

启动自检改成退避重试:

第 1 次 8s → 第 2 次 +15s → 第 3 次 +25s → 第 4 次 +45s
第 5 次 +60s → 第 6 次 +90s → 第 7 次 +120s → 第 8 次 +180s
  • 约 6 分钟内最多试 8 次,连上立刻停
  • 每次写日志:启动自检 #3:已登录 / 启动自检 #3:失败:拿不到门户参数…
  • 8 次都失败才放弃,不影响手动点「连接」
  • 开机时确实不在校园网(比如连了热点)也不会反复弹,试完就安静停下

另一处说明

未认证时挂件也会显示下载/上传速度 —— 那是网卡实际收发的流量,
局域网和门户本身也有数据。面板上补了一行说明,别把它当成「已联网」。

升级

插件是 link 安装的(本地源码),重启 DSH 即生效,不用重装。

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 17:48

v0.3.0 — 流量统计 / 在线时长 / 多账号 / 非上网时段自动重试

四个功能,都是为了「少动手」:以前得自己盯、自己点的事,现在插件替你盯着。

1. 流量统计

  • 面板显示 今日 / 本次登录 / 开机以来,上下行分开
  • 数据源是 netstat -e 的全机聚合累计值,靠前后采样做差
  • 30 秒节流,面板每 3 秒轮询不会真的每次都读
  • 计数变小(机器重启过)时把当前值当增量,不会算出负数或天文数字
  • 跨天自动归档,只留最近 7 天
  • 第一次运行只建立基线,今日从 0 起 —— 不会把「开机以来」误算成「今天」

⚠️ 读的是全机计数,所有网卡合在一起,不区分哪张卡。

2. 在线时长

面板显示「已连 2 小时 13 分」。起点在登录成功那一刻记,断开自动清零。

3. 多账号

core/campus-net.json 支持 accounts 数组 + current:

{ "accounts": [
    { "name": "宿舍",   "username": "111", "password": "p1" },
    { "name": "实验室", "username": "222", "password": "p2" }
  ], "current": 0 }
  • 老配置零迁移:没有 accounts 时,username/password 自动当成唯一账号(名字叫「默认」)
  • 多于一个号时面板变成下拉框,选了立刻生效
  • 切号会把选中账号镜像回 username/password,救急重连.cmd 等老调用方不用改
  • 在线时切号不会踢掉当前会话,只影响下次登录

4. 非上网时段自动重试

学校在非上网时段返回「不允许上网时间段,请在上网时段认证」。
以前遇到就停在那儿。现在:

  • 识别到这类错误 → 每 10 分钟自动试一次,最多 60 次(≈10 小时)
  • 连上就停;手动登录成功也立刻停
  • 面板显示「⏳ 现在是非上网时段,8 分钟后自动重试(第 3/60 次)」

重试逻辑单独放在 retry.js,就是为了能单测 —— 测试里把间隔调成 50ms 跑,
不用真等 10 分钟。

新接口 / 新命令

类型 内容
接口 POST /api/campus-net/switch-account(body: {index} 或 {name})
接口 status 多了 traffic / accounts / account / online_seconds / auto_retry
命令 traffic、accounts、switch-account <序号|名字>

升级

dsh plugin --profile desktop add link:<本目录绝对路径>

然后重启 DSH(服务端路由和挂件都变了)。

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 17:50

v0.2.0 — 黑洞网卡检测

这一版只加一件事:揪出「挂着默认路由却走不通」的网卡,并在挂件上修掉它。

为什么加

2026-11-03 那晚,模型一直报 transport failed / Request timed out.,
三家服务商(阿里云、暴喵、官方)同时挂,每次刚好卡 10 秒,重试 5 次全灭。

查下来跟服务商一点关系都没有:

  • 校园网登出后,那张网卡还是 up 的、默认路由也还在
  • WiFi 一抖,系统把流量切过去 → SYN 没人应答
  • Node 的 undici 默认连接超时正好是 10 秒 → 客户端自己放弃
  • 证据:同一时刻直接打端点 0.6~1.8 秒正常;绑源 IP 实测那张网卡 21 秒超时;
    WLAN 事件日志显示断线时段与失败时段完全重合

新增

  • 黑洞探测 —— 绑定每张候选网卡的源 IP 去连 223.5.5.5:443,1.5 秒连不上即判定。
    只看 ping 不够:校园网网关 0ms 能通,但没认证照样出不去。结果缓存 60 秒。
  • 挂件提示 —— 折叠态圆点变黄;展开后有黄色说明 + 两个按钮:
    • 修一下:跃点抬到 9999(弹一次 UAC);DNS 只有在该网卡是静态配置时才重置,
      若是 DHCP 下发则跳过并明说 —— 重置只会把同一批死 DNS 再拿回来(实测踩过)
    • 还原跃点:跃点交回系统自动
  • 新接口 —— GET /api/campus-net/dead-path、POST /api/campus-net/fix-path、
    POST /api/campus-net/restore-path
  • 新命令 —— python core/campus_net.py dead-path | fix-path | restore-path

为什么是抬跃点而不是禁用网卡

禁用之后要回校园网还得去设备管理器手动开,太重。
抬跃点只是让它永远抢不过当前网络 —— 插上网线照样能用,只是优先级靠后。

兼容性

status 的返回多了个 dead_path 字段,老前端忽略它即可,不影响任何已有行为。

安装 / 升级

dsh plugin --profile desktop add link:<本目录绝对路径>

升级后重启 DSH(新增了服务端路由,bundle 层要重启才组装)。

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 16:41

v0.1.0 — 首个可用版本

校园网(Srun 深澜)连接器,给 DeepSeek Harness 侧边栏加一只常驻挂件。

功能

  • 实时测速 — 上传 / 下载速率,折叠态 3.5 秒刷新,展开态 2 秒
  • 一键开关 — 连接 / 断开校园网
  • 自动识别网络 — 按默认路由判定:手机热点 / WiFi / 有线 / 校园网,显示对应名字和图标
  • 断开保护 — 断开后 30 秒自动重连,避免把自己锁在外面
  • 开机自动连 — DSH 启动 8 秒后自检,离线就登录
  • 位置可拖动 — 按住挂件拖到合适位置,松手自动记住;面板里有「复位」
  • 断网自救 — 双击 救急重连.cmd,不依赖 DSH 也能重连

支持的系统

Srun 深澜 认证(portalLogout.do / wlanuserip / wlanacname 特征)。

不适用:Dr.COM、锐捷、需要验证码或短信二次验证的门户。

安装

dsh plugin --profile desktop add link:<本目录绝对路径>

然后:

  1. 把 core/campus-net.example.json 复制成 core/campus-net.json
  2. 填入你的认证地址、账号、密码
  3. 重启 DSH
  4. 跑 python core/campus_net.py doctor 确认四项全绿

文档

  • README.md — 给人看的完整说明
  • AGENTS.md — 给 AI 助手看的安装指引(该怎么向你索要信息)

已知限制

  • 只在 Windows 测试过(依赖 netstat -e、netsh wlan、PowerShell)
  • 密码明文存在本地 campus-net.json,该文件已在 .gitignore 里