dsh-plugin-localhost:把 agent 起的本地服务登记成可查、可关的一览

前言

在 DSH 里让 agent 跑 pnpm dev、python -m http.server 或打开 dist/ 静态预览,是日常操作。这些进程往往比对话活得久:几小时后端口还在,目录和「是谁开的」却只能靠猜。社区插件 dsh-plugin-localhost(维护者 kjx-talesofai)把「起服务」变成一次登记,并在桌面端侧边栏给出端口、目录、登记会话和一键停止,避免 localhost 上的临时服务变成无人认领的后台进程。

这是什么

dsh-plugin-localhost 是 DeepSeek Harness 的客户端类插件:一个面板,回答「这台机器上现在跑着什么、哪个目录、哪个会话开的、怎么关掉」。它不替代你在终端里随手 bash 起的进程——只管理插件自己登记并有权停止的两类资源。

类型 谁在跑 生命周期
静态页(static) 插件在 127.0.0.1 上的小服务器 随 DSH 一起关
命令(spawned) 插件通过 Harness 的 subprocess 服务启动 可停止;DSH 退出时全部停
其他进程 agent 自行用 bash 启动 不在面板中;杀不掉的不会显示为「运行中」

插件在 SkillHub 目录 上架,源码与说明见 GitHub。许可证为 MIT(© 2026 Jiaxin Kou)。当前 package 版本为 0.4.0。

核心功能

给 agent 的工具 serve

agent 侧不是一堆 shell,而是一个工具,支持 register、list、start、stop、remove、logs 等动作。注册时插件分配 8840–8899 范围内的端口(不是 agent 自选),返回里带 port 和 url,便于回答「这个工作区开过哪些服务」。

logs 返回最近输出,便于排错;remove 会删掉登记并停进程,无需手改登记表。

侧边栏面板

面板在侧边栏中,紧挨在 Tailscale Remote Access 下面。每行有状态点、名字、类型、端口和状态;展开后可查看目录(在 macOS 上用 Finder 打开)、静态页入口文件、登记会话(跳回当初开服务的对话)、以及最近约 400 行日志(运行中会滚动)。

行上有打开、启动、停止、自动启动、收起;展开底部有「移除」(需确认两次,删除前会先停进程)。

登记表与持久化

唯一事实来源是文件 ~/.dsh/localhost/services.json:内存是其镜像。手工删掉一行,面板下次读取即消失,且不会被保存写回(v0.3.0 及以前为内存优先,删掉的行可能「复活」,需重启)。注册时可设 "autoStart": true,或在面板上点「自动启动」;DSH 退出后条目为已停止,默认不会自启,只有标了自动启动的会在下次尝试拉起。

与 Tailscale 的配合

面板会读 tailscale serve status,对已发布到 tailnet 的端口配上远端地址;在手机上「打开」会在手机浏览器里访问该地址。未发布的端口在手机上不提供「打开」,并说明仅本机可访问。对外分享应走 Tailscale,不要把 127.0.0.1 上的无认证端口当成分享入口。

安装与启用

安装命令以 README 为准:

github:kjx-talesofai/dsh-plugin-localhost#v0.4.0

装完后重启 DSH 桌面端(host 半边只在启动时加载)。

package.json 要求 Node >=22,@deepseek-ai/dsh peer 范围为 >=0.2.0-rc.1 <0.3.0-0。README 写明实测环境为 macOS(Apple Silicon)+ DSH Desktop 0.2.1-rc.2。插件以当前 DSH 进程权限运行,安装前请自行查看源码与 MIT 许可证。

典型用法

下面示例来自 README,展示如何通过 register 登记命令型服务与静态目录。

登记开发服务器(命令里用 $PORT 接收插件分配的端口):

{ "action": "register", "kind": "spawned", "name": "preview",
  "dir": "/path/to/project", "cmd": "pnpm dev --port $PORT",
  "path": "/" }

登记静态页目录(由插件直接托管目录内容,改 dir 立即生效,删目录则 404):

{ "action": "register", "kind": "static", "name": "deck",
  "dir": "/path/to/dist" }

需要下次启动 DSH 后自动尝试拉起时,在注册参数中加 "autoStart": true,或之后在面板上开启自动启动。

适用场景与注意

适合谁: 经常在 DSH 里让 agent 起预览、静态站或 dev server,又希望端口、目录和会话可追溯、可一键关停的开发者。

边界(README「老实说」一节):

  1. 只登记插件自己起的进程;bash 里起的服务面板看不见,也不会误报为可管理。
  2. DSH 退出等于全部停止;重启后需手动启动,除非配置了自动启动。
  3. 自动启动失败不会拖垮 DSH(例如端口被占、目录不存在),只在对应行显示原因。
  4. 端口由插件分配,不要在其他脚本里硬编码 8840;若需固定逻辑,在 cmd 中使用 $PORT。
  5. 静态页仅在 127.0.0.1 监听,无认证;SPA 回退仅对浏览器导航(Accept: text/html)生效,避免把缺失文件误当成路由。

社区插件目录(SkillHub)与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文介绍的是社区维护的客户端插件之一。

结尾

dsh-plugin-localhost 把 agent 在本地起的服务从「猜端口、找目录、关不掉」收成一张可操作的登记表和侧边栏面板。安装使用官方 pin 版本命令,agent 通过 serve 注册,人在面板里打开、看日志、回到会话或停止。

  • 目录页:https://www.skillhub.cn/plugins/kjx-talesofai/dsh-plugin-localhost
  • GitHub:https://github.com/kjx-talesofai/dsh-plugin-localhost
羽毛球分组比赛记分
小程序二维码

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

Xiaoye