feat: 升级流程增强 + 网关化配置 + 重连循环化

- 配置化:gateway.url/socket.path/download.prefix(网关基础地址统一推导 ws 与下载地址)、
  main.home 主目录(jar/pid 相对它推导)、order.basic;properties 中文 \uXXXX 转义自动还原
- 升级流程:下载 PK 魔数检查与诊断日志;SHA 校验;替换改「改名腾位」绕开 Windows 文件锁延迟;
  nssm stop/start 驱动停止与拉起(pid 强杀回退);升级中标志暂停看门狗拉起避免抢占 jar 锁
- ws_client:重连改循环实现修复递归栈溢出(长时间断线后 maximum recursion depth);
  退避封顶延长至 5 分钟;心跳线程独立修复「暂无心跳数据」
- 新增命令:GET_APIS/HTTP_PROXY(接口测试代理,纯透传鉴权)、GET_LOG_DOWNLOAD(日志下载备用)
- 诊断增强:taskkill/进程退出/替换重试逐次日志

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-09-03 16:52:34 +08:00
co-authored by Claude
parent b572697e17
commit 0b13de14eb
7 changed files with 366 additions and 152 deletions
+6
View File
@@ -141,6 +141,12 @@ class CommandDispatcher:
# 返回主程序 /order 接口清单(供 B 端接口测试工具加载)
result = {"ok": True, "data": self.main_app_client.get_apis()}
elif msg_type == "GET_LOG_DOWNLOAD":
# 日志全量下载(供 B 端浏览器下载,Agent 自动带 admin token 调主程序)
file = (payload or {}).get("file") or "info.log"
content = self.main_app_client.log_download(file)
result = {"ok": content is not None, "data": content}
elif msg_type == "HTTP_PROXY":
# 代理调用前置机任意接口(穿透白名单,本机环回)
p = payload or {}