DeepSeek Harness 插件

RaulLazaro/dsh-preview-plugin

Star 数 ★ 1 分类 UI 增强 收录于 2026-09-03

DSH 实时预览标签页:把任意 dev server 嵌入 iframe,透明代理 SPA 路由。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:RaulLazaro/dsh-preview-plugin

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWEDERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yamlallowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

该插件的 README 只有英文版本。

Live preview tab for DeepSeek Harness — embed any dev server in an iframe with transparent SPA proxying.

Features

  • Path-based SPA proxy: /preview/:port/* rewrites all routes so the embedded app works as if served from the DSH host
  • <base> + fetch/XHR interception: Injects a <base href> tag and intercepts fetch() and XMLHttpRequest.open() for full SPA + backend support
  • Global or per-session ports: Set a port globally or per conversation session via the API
  • Auto-sync: The preview tab polls the host for agent-set port changes
  • Sandboxed iframe: allow-scripts allow-same-origin allow-forms allow-popups for secure embedding

Installation

1. Add as a dependency

In your DSH web profile's package.json:

{
  "dependencies": {
    "dsh-preview-plugin": "file:~/workspace/dsh-preview-plugin"
  }
}

2. Register the plugin

In your profile's cordis.patch.yml:

- insert:
    - id: dsh-preview
      name: 'dsh-preview-plugin'

3. Restart DSH

dsh web

Usage

  1. Start your dev server on the VPS (e.g. npm run dev -- --host 0.0.0.0 --port 3000)
  2. Open the Preview tab in DSH Web GUI
  3. Enter the port number (e.g. 3000) and click Go
  4. The iframe will load the app through the transparent proxy

API

The plugin exposes a port management API:

Method Endpoint Description
GET /api/preview-port Get the current global port
GET /api/preview-port?sessionId=<id> Get port for a session (falls back to global)
POST /api/preview-port Set global port ({ "port": 3000 })
POST /api/preview-port?sessionId=<id> Set port for a session

How It Works

  1. The host registers two routes on the DSH web server:
    • /api/preview-port — port management
    • /preview/:port/* — transparent proxy
  2. When a request hits /preview/:port/path, it fetches http://127.0.0.1:port/path
  3. For HTML responses, it injects a <base href="/preview/:port/"> and a script that rewrites fetch() and XMLHttpRequest.open() URLs
  4. For non-HTML responses (JS, CSS, images, etc.), it streams the response directly

Security Notes

  • The proxy only targets 127.0.0.1 — no external SSRF possible
  • The iframe is sandboxed with allow-scripts allow-same-origin allow-forms allow-popups
  • Port validation enforces 1–5 digit numbers only
  • CORS headers are set for local development convenience

License

MIT

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。