npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-server-admin

v0.1.0

Published

DSH 服务器管理面板:在线重启/停止、systemd 一键保活、在线安装插件、运行状态监控、活跃会话、命令终端

Readme

DSH 服务器管理面板 · dsh-server-admin

中文(默认) · English

一个面向 DeepSeek Harness (DSH) Web 服务器的管理插件:在设置面板中提供「服务器管理」页,无需 SSH 即可完成在线重启、systemd 一键保活、在线安装插件、运行状态监控、活跃会话查看与命令终端操作。

当前托管模式、插件安装、保活配置全部可视化,危险操作带确认与倒计时。


✨ 功能特性

1. 运行状态监控

  • DSH 进程 PID / PPID、运行时长、CPU / 内存占用
  • Node 版本、DSH 版本、磁盘占用
  • Web 访问地址、当前托管模式(systemd / screen)
  • 自动探测当前部署环境,生成对应的重启命令
  • 页面每 2 秒自动刷新,状态实时跟进

2. 在线重启 / 停止

  • 一键重启 DSH:自动按托管模式选择执行方式
    • systemd 托管systemctl restart dsh
    • screen 托管 → kill 旧进程 + screen 重新拉起
  • 一键停止(仅停止,不自动恢复)
  • 分离式脚本:先响应页面、延迟 2 秒执行,重启过程安全可控
  • 5 秒倒计时确认 + 可取消,防止误操作

3. systemd 一键保活(Keep-alive)

将 DSH 从临时 screen 会话平滑迁移到 systemd 服务托管

  • 崩溃自动重启Restart=always,进程异常退出 3 秒内自动拉起
  • 开机自启systemctl enable,服务器重启后自动运行
  • 日志可查journalctl -u dsh / journalctl -f -u dsh
  • 配置预览:启用前先展示将写入的完整单元文件内容
  • 支持一键回退到 screen 托管
  • 单元覆盖保护:若 /etc/systemd/system/dsh.service 已存在且非本插件生成,拒绝覆盖

4. 在线安装插件

  • 在设置面板直接执行 dsh plugin --profile web add <包名>,实时回显 pnpm 输出
  • 支持 npm 包名、GitHub 地址
  • 安装完成后提示重启 DSH 生效(可直接用本面板的重启功能)

5. 活跃会话

  • 列出 DSH 中正在运行的对话会话(含当前对话)与运行状态
  • 默认折叠,点击展开查看,不占页面空间

6. 命令终端

  • 以 root 权限在服务器上执行命令(等同 SSH),输出实时回显
  • 输出截断保护(64KB)

📦 安装

方式一:从 GitHub 安装(推荐,无需发布 npm)

dsh plugin --profile web add github:sunnywangzi/dsh-server-admin

方式二:从 npm 安装(若已发布到 npm registry)

dsh plugin --profile web add dsh-server-admin

方式三:本地开发安装(源码在本地时)

dsh plugin --profile web add /path/to/dsh-server-admin

安装说明

  1. 以上命令会在 /root/.dsh/profiles/web(即 web profile)中执行 pnpm add
  2. dsh CLI 会自动识别包内 dsh.bundle.patch 声明,并将插件加入 profile 的 bundle 层——无需手动修改任何配置
  3. 安装完成后 重启 DSH 生效:
    • systemd 托管:sudo systemctl restart dsh
    • screen 托管:sudo pkill -f 'dsh web'; screen -dmS dsh dsh web
    • 或安装成功后直接打开本插件面板使用「重启」按钮

卸载

dsh plugin --profile web rm dsh-server-admin

🚀 使用

  1. 登录 DSH Web 界面
  2. 点击左侧底部 ⚙️ 设置
  3. 在设置面板左侧导航中选择 「服务器管理」
  4. 各卡片说明:

| 卡片 | 用途 | |---|---| | 保活(Keep-alive) | 查看当前托管模式;一键启用 systemd 保活 / 回退 screen;查看将写入的 systemd 配置 | | 在线控制 | 重启 / 停止 DSH(带 5 秒倒计时确认) | | 运行状态 | PID、资源占用、版本、磁盘、托管模式,每 2 秒自动刷新 | | 在线安装插件 | 输入 npm 包名或 git 地址,一键安装并回显输出 | | 活跃会话 | 查看运行中的对话会话(默认折叠) | | 命令终端 | 执行服务器命令并查看输出 |


⚙️ systemd 保活详解

点击「启用 systemd 保活(推荐)」后,插件会自动执行:

  1. 写入 /etc/systemd/system/dsh.service
[Unit]
Description=DeepSeek Harness Web (managed by dsh-server-admin)
After=network.target

[Service]
Type=simple
Environment=DSH_HOME=/root/.dsh
WorkingDirectory=<检测到的目录>
ExecStart=/usr/local/bin/dsh web
Restart=always          # 崩溃自动重启
RestartSec=3            # 3 秒后拉起
TimeoutStopSec=30
KillMode=control-group

[Install]
WantedBy=multi-user.target   # 开机自启
  1. systemctl daemon-reload && systemctl enable dsh(注册 + 开机自启)
  2. 关闭旧 screen 会话,systemctl start dsh(systemd 接管,DSH 重启一次完成迁移)

启用后常用命令:

sudo systemctl status dsh          # 查看状态
sudo journalctl -u dsh -f          # 跟随日志
sudo systemctl restart dsh         # 重启
sudo systemctl stop dsh            # 停止

🔒 安全边界

  • HTTP API/server-admin/api/* 仅接受回环(127.0.0.1/localhost)同源 POST 请求;方法白名单之外一律 404;请求体限制 1MB
  • root 权限:插件运行在宿主上下文(root),具备服务器全部权限——等同 SSH 会话,仅限管理员使用
  • 命令终端:执行任意命令且不做沙箱限制,操作前请自行确认命令内容;输出截断至 64KB
  • 插件安装:安装参数经 execFile 数组传递(无 shell 注入),但可安装任意 npm 包——请只安装可信来源的插件
  • systemd 单元覆盖保护:若 /etc/systemd/system/dsh.service 已存在且非本插件生成,启用保活会拒绝覆盖
  • 网络暴露提醒:插件默认绑定回环。若通过反向代理将 DSH Web 暴露到公网,请确保 /server-admin/api 不被代理放行,或另行加装认证

🩺 故障排查

| 问题 | 解决方法 | |---|---| | 重启后无法访问 | 查看「运行状态」的托管模式;systemd 模式下 journalctl -u dsh 查日志;screen 模式下检查 screen -ls 会话是否存活 | | 保活卡片显示「已存在」但状态异常 | 说明单元文件存在但服务状态异常,点「回退到 screen」后重新启用,或 SSH 执行 systemctl reset-failed dsh | | 面板里看不到「服务器管理」页 | 确认插件已安装并重启 DSH;浏览器强制刷新(Ctrl+Shift+R) | | 在线装插件报错 | 检查输出信息;确认网络可达 npm registry / GitHub | | 命令终端命令无输出 | 命令本身可能无输出(如 touch);或用 echo $? 查看退出码 |


📄 许可证

MIT


English Version

DSH Server Admin · dsh-server-admin

A management plugin for DeepSeek Harness (DSH) Web server: adds a Server Admin page in the Settings panel, letting you restart the server, enable systemd keep-alive, install plugins, monitor status, view active sessions, and run commands without SSH.

Every dangerous action comes with confirmation and a countdown.

✨ Features

  1. Runtime Status — PID/PPID, uptime, CPU/memory, Node/DSH versions, disk usage, hosting mode (systemd/screen), auto-detected restart command; auto-refreshes every 2 seconds.
  2. Online Restart / Stop — one-click restart (uses systemctl restart dsh under systemd, or kill+screen under screen hosting) and stop, with a 5-second countdown confirmation.
  3. systemd Keep-alive (one click) — migrates DSH from a temporary screen session to a systemd service: auto-restart on crash (Restart=always, 3s), auto-start on boot (enable), logs via journalctl -u dsh; shows the exact unit file before applying; one-click rollback to screen.
  4. Online Plugin Install — runs dsh plugin --profile web add <spec> from the panel with live pnpm output.
  5. Active Sessions — lists running conversation sessions (collapsed by default).
  6. Command Terminal — run server commands as root with output echo (64KB cap).

📦 Installation

Option 1: From GitHub (recommended)

dsh plugin --profile web add github:sunnywangzi/dsh-server-admin

Option 2: From npm (if published)

dsh plugin --profile web add dsh-server-admin

Option 3: Local development

dsh plugin --profile web add /path/to/dsh-server-admin

The dsh CLI auto-detects the dsh.bundle.patch declaration and registers the plugin into the profile bundle layer — no manual configuration needed. Restart DSH after installing (or use the plugin's own restart button once the panel is up).

Uninstall

dsh plugin --profile web rm dsh-server-admin

🚀 Usage

  1. Sign in to the DSH Web UI.
  2. Click the ⚙️ gear icon at the bottom of the left sidebar.
  3. Choose Server Admin in the settings navigation.
  4. Cards: Keep-alive (hosting mode + enable/rollback + unit preview), Online Control (restart/stop), Runtime Status (auto-refresh), Install Plugin, Active Sessions (collapsed), Command Terminal.

⚙️ systemd Keep-alive details

Enabling writes /etc/systemd/system/dsh.service with Restart=always, RestartSec=3, and WantedBy=multi-user.target, then runs systemctl daemon-reload && systemctl enable dsh, closes the old screen session and starts via systemctl start dsh (one restart to complete the migration).

Useful commands:

sudo systemctl status dsh
sudo journalctl -u dsh -f
sudo systemctl restart dsh

🔒 Security Notes

  • API is loopback-only with same-origin checks; method whitelist; 1MB body limit.
  • Runs with root privileges — treat it like an SSH session (admin use only).
  • The command terminal executes arbitrary commands without sandboxing — verify commands before running.
  • The systemd unit overwrite is blocked if an existing unit was not generated by this plugin.
  • If you expose the DSH Web through a reverse proxy, make sure /server-admin/api is not proxied publicly.

🩺 Troubleshooting

| Issue | Fix | |---|---| | Cannot access after restart | Check hosting mode in Runtime Status; journalctl -u dsh under systemd; screen -ls under screen | | Keep-alive card shows unit exists but odd state | Roll back to screen then re-enable, or run systemctl reset-failed dsh via SSH | | No "Server Admin" page in Settings | Ensure installed and DSH restarted; hard refresh (Ctrl+Shift+R) | | Plugin install fails | Check the echoed output; confirm network access to npm registry / GitHub |

📄 License

MIT