dsh-aa-bridge-doctor:Agents Anywhere 桥接「持续离线」的检测与自动恢复

前言

在用 DeepSeek Harness(DSH)配合 Agents Anywhere 把手机当远端设备时,常见一种恼人状态:电脑上的 Connector 进程还在,手机端却一直显示设备离线;手动重启 Connector 或整台电脑上的相关进程才能恢复。官方重连往往沿用可能已经坏死的 HTTP 客户端反复重试,很难从根上跳出死循环。

AA Bridge Doctor(桥接医生) 是社区维护的 DSH 插件,在本机周期性做只读健康检查,在判定为进程退出或连接卡死时给出通知,并在配置允许时按护栏规则自动拉起或重启 Connector。下面介绍其定位、工作原理、安装与配置。

这是什么

  • 仓库: simonsxxs/dsh-aa-bridge-doctor
  • 社区目录:SkillHub 插件页(独立站点,与 DeepSeek / 幻方无官方从属关系)
  • 维护者:simonsxxs(作者 simon)
  • 分类:工作流
  • 当前版本(package.json):0.3.2
  • 许可证:MIT

插件针对上游已讨论过的故障形态:进程仍存活、连续鉴权失败、设备长期离线。README 中引用了 Agents-Anywhere#381(认证空超时死循环)、dsh-desktop#1334(Connector 静默退出无人拉起)、#501(DSH Runtime 卡在「正在同步 DSH 会话…」)。本插件不替代官方修复,而是在本机做观测与有限自动恢复。

本插件为 host-only(无 dsh.client 客户端半区),不依赖 @deepseek-ai/dsh-client-ui-slots。

核心功能

周期性三源(及可选第四源)检查

默认每 pollSeconds 秒(默认 30)执行一次只读检查:

  1. 进程信号:读 ~/.agents-anywhere/connector-runtime.json 中的 pid,验证进程是否存活。
  2. 日志信号:扫描 ~/.agents-anywhere/logs/runtime-*.jsonl,统计时间窗口内的鉴权失败次数。
  3. 日志静默:进程存活但 AA 日志在 logSilenceMinutes 内无写入时,按事件循环挂死变体处理。
  4. 云端信号(需开启 checkDeviceApi):用本机 account.json 的 token 只读查询设备在线状态,并辅助检测 DSH Runtime 长时间卡在同步会话。

判定与默认动作

判定 含义概要 默认动作
exited 有记录但进程已死;按退出码与陈旧窗口决定是否允许自动拉起 通知;autoRestartExited 为 true 且通过甄别时可自动重新拉起
wedged 进程存活且失败达阈值或日志长期静默 通知;autoRestartWedged 默认 false,开启后可自动重启 Connector
stuck-syncing 需 checkDeviceApi;同步卡住 ≥ 15 分钟 通知恢复指引(如设备页对 DSH 重新「一键配置」)
healthy / not-installed 其余情况 不动作

自动恢复前有 冷却(cooldownMinutes)与 每日重启上限(maxRestartsPerDay)。动作与诊断写入 ~/.agents-anywhere/bridge-doctor/bridge-doctor.log。

拉起 Connector 时优先使用 DSH NEXT 内置 uv(app.asar.unpacked/@dataiku/uv),失败则兜底 PATH 上的 uv;终止前做 PID 身份校验与预检,无法确认则放弃(Fail Closed)。拉起为分离进程,DSH 退出后其存续取决于系统,README 不承诺严格随 DSH 退出。

隐私

检测均在本机完成;可选 checkDeviceApi 为只读查询,凭据从本机文件读取且不写入日志。

安装与启用

前提(README 原文):已安装 DeepSeek Harness(社区 DSH NEXT 2.0.x 或官方 0.2.1+),已安装 @agents-anywhere/dsh-bridge-next 并登录。

方式 A — npm(发布后)

在桌面 profile 下添加插件:

dsh plugin --profile desktop add dsh-aa-bridge-doctor

方式 B — 从源码(需自行 clone 与构建,见仓库 README)

git clone https://github.com/simonsxxs/dsh-aa-bridge-doctor.git && cd dsh-aa-bridge-doctor
npm install && npm run check
dsh plugin --profile desktop add .

方式 C — 手动

无 dsh CLI 时,可将构建产物以 file: 依赖写入 ~/.dsh/profiles/desktop/package.json,在 cordis.patch.yml 中注册 bundle,再在 profile 目录执行 pnpm install 或 npm install,最后重启 DSH。生效后设置页出现「AA Bridge Doctor」,日志目录为 ~/.agents-anywhere/bridge-doctor/。

注意:插件随当前 DSH 进程权限在本机读写上述路径并可能重启 Connector;安装前请阅读仓库源码与 MIT 许可证,自行评估是否纳入工作流。

配置(DSH 设置页)

配置项 默认 说明
enabled true 总开关
uvPath '' 自定义 uv 可执行路径,留空自动发现
autoRestartExited true 异常退出后自动拉起
autoRestartWedged false 卡死时自动重启 Connector(默认仅通知)
failureThreshold / windowMinutes 4 / 10 鉴权失败签名阈值与时间窗
logSilenceMinutes 15 日志静默判定(分钟)
cooldownMinutes / maxRestartsPerDay 60 / 6 冷却与每日自动恢复上限
pollSeconds 30 检查间隔
checkDeviceApi false 是否联网核对设备状态

典型用法:先保持默认仅自动处理 已退出 的 Connector;若你经常遇到「进程在、手机一直离线」且接受本机自动 SIGTERM 后重启,再在设置页将 autoRestartWedged 设为 true,并留意每日上限与冷却,避免与人工排障冲突。

平台与适用场景

平台 状态
macOS(Apple Silicon / Intel) 一等支持,全功能实测
Linux 尽力支持;通知依赖 notify-send(未装则静默)
Windows 未测,欢迎反馈

适合:长期在桌面 DSH 上挂 Agents Anywhere 桥接、希望减少「半夜掉线无人知」或「卡死只能手动杀进程」的开发者。不适合:未安装 dsh-bridge-next 或未登录 AA 的环境。

根因与取证背景见仓库 docs/ROOT_CAUSE.md。国内只读镜像:Gitee 同步仓(以 GitHub 为准)。

结尾

桥接医生把「进程活着但桥已坏死」这类 wedge 当成可观测、可限额自动处理的本机问题,与 DSH「一切皆插件」的思路一致。需要细节时查 GitHub README 与 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜