dsh-cockpit-memex-browse-shim:跨机打开 memex 卡片的端口转发适配层

前言

DSH 的理念是「一切皆插件」,跨机器部署时各个插件各司其职。dsh-memex 负责卡片,dsh-cockpit-bridge 负责端口转发,这两端平时互不引用。问题在于:当 dsh-memex 跑在另一台机器上时,它页面上的「打开卡片」按钮会把浏览器指向一个 localhost 地址,而那个地址并不属于 memex 所在的机器,于是点下去打不开。

下面介绍的这个插件就是为这个缝隙而生的部署侧适配层。

这是什么

dsh-cockpit-memex-browse-shim 由 prgrmrwy 维护,定位是「从 dsh-cockpit-bridge 端口发布到 dsh-memex 浏览地址注册表的部署本地适配器」。它把 bridge 的端口转发注册到 memex 通用浏览地址扩展里,让「打开卡片」按钮改用 bridge 发布的转发地址,使卡片浏览器在真正能到达该设备的地址上打开。

它是唯一的部署侧耦合点:两端源码和依赖互不引用,装上 shim 才接线,移除 shim 即解耦。当前版本 0.2.0,源码在 ohmydsh 仓库的 packages/cockpit-memex-browse-shim 下维护,GitHub 上的 prgrmrwy/dsh-cockpit-memex-browse-shim 是发布镜像,以 MIT 许可证发布。社区目录将其归入「工作流」分类。

核心功能与工作方式

1、读取 cockpitBridge.forwards 端口转发服务。要求 bridge >= 0.6.1(正式部署 pin 0.6.4),旧 portForward / channel register / publish 契约不再支持。
2、注册到 dshMemex.browseAddress 注册点。无顶层 inject,各服务通过完整 dotted name 单次 ctx.get() 读取,因此两端加载顺序无关。
3、按端口单飞申请:调用 acquire(devicePort, holder),holder 里带随机绑定标识,避免旧绑定迟到释放影响新绑定。
4、就绪等待:starting/retrying/paused 通过 onChange 等 ready,最长 15 秒;只交付当前 handle.address.url,不缓存 URL,不自行重试。打开后保留 holder,避免标签页刚打开隧道就被回收。
5、失败语义收得很紧:只有结构化 CockpitForwardsError 且 code === 'local-device' 才回落 http://localhost:<port>;unavailable 这类无法证明浏览器与设备同机的错误,连同网络和业务失败一样原样上抛,用户仍可直接使用已知设备地址。
6、生命周期:从未发现 bridge 的 memex-only 部署保持默认本机行为;发现 bridge 后再卸载或替换,取消等待并释放旧句柄;bridge 消失期间保留失败关闭(fail-closed)resolver,防止远端地址悄悄回落浏览器 localhost;记忆端卸载或 shim dispose 时注销 resolver。

适用场景

适合同时装了 dsh-cockpit-bridge 和 dsh-memex,且希望跨机器用统一转发地址打开卡片的场景。当不再通过 dsh-cockpit 跨机器打开卡片,或任一端原生提供该集成时,即可移除:删除 manifest 条目 → dsh build → 重启,两端无需迁移。回滚旧版 shim 时必须把 bridge 一起回滚到提供旧服务的版本,不要把 0.1.1 shim 和 bridge 0.6.x 混用。

安装与启用

安装它需要与两端同机:dsh-cockpit-bridge(GitHub Release tarball)和 dsh-memex。

dsh plugin --profile web add https://github.com/prgrmrwy/dsh-cockpit/releases/download/dsh-cockpit-bridge-v0.6.4/dsh-cockpit-bridge-0.6.4.tgz
dsh plugin --profile web add dsh-cockpit-memex-browse-shim

先安装 bridge 的 tarball,再装 shim。随后重启 DSH web 生效。卸载用:

dsh plugin --profile web remove dsh-cockpit-memex-browse-shim

验证与注意

作者提供了独立 package 的 test / typecheck / build;集成回归用 memex 真实的 registry(未接线默认返回 localhost),而非会掩盖误路由的假 registry,覆盖就绪等待、并发、地址变化、移除、失败分类和服务生命周期。

两点提醒:插件以当前 dsh 进程权限运行,安装前应检查源码与许可证(本插件为 MIT,且依赖 @deepseek-ai/cordis ^4.0.4、Node >= 22.19);它是连接两个既有插件的薄适配层,不要单独在没有 bridge 的机器上装,否则行为等同于没装。

链接

  • 目录页:https://www.skillhub.cn/plugins/prgrmrwy/dsh-cockpit-memex-browse-shim
  • GitHub:https://github.com/prgrmrwy/dsh-cockpit-memex-browse-shim
羽毛球分组比赛记分
小程序二维码

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

小夜