ankesu / dsh-client-url-shim

Listed

Browser url shim for DeepSeek Harness client bundles: inlines a node:url polyfill (parse/resolve/format/URL) so dependencies like @pixi/utils build and run in the web module table. · DSH 客户端构建的 url 浏览器垫片

mainTool View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:ankesu/dsh-client-url-shim

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit 27b5b12Synced Aug 18, 2026

dsh-client-url-shim

Browser url shim for DeepSeek Harness client bundles — a tsdown plugin that inlines a node:url polyfill so dependencies like @pixi/utils build and run inside the DSH web module table.

DSH 客户端 bundle 的 url 浏览器垫片——把依赖里 node:url 的导入替换成浏览器安全实现, 解决 require("url") missed the module table 崩溃。

Problem / 问题

DSH client bundles are CJS artifacts executed by the harness's own module loader. The loader only answers requires from a frozen module table (platform seed modules). A dependency that imports Node builtins — e.g. @pixi/utils does import { parse } from 'url' — compiles to require("url"), which the table cannot answer:

client-modules: require("url") missed the module table — not a platform seed
word, not a shell-own module, and no registered factory

DSH 客户端 bundle 由 DSH 自己的模块加载器执行,只认冻结的模块表。依赖里 import node:url 会编译成 require("url"),模块表没有 url → 整个插件加载失败。

Solution / 方案

A small tsdown/Rolldown plugin intercepts url / node:url imports at build time and replaces them with a virtual browser-safe module:

  • parse — Node-style URL decomposition (falls back to new URL)
  • resolve — Node-style path resolution (absolute → URL, relative → join with .. handling)
  • format — best-effort href/pathname serialization
  • fileURLToPath / pathToFileURL — trivial browser equivalents
  • URL / URLSearchParams — the real browser globals

Usage / 用法

// tsdown.config.ts
import { defineConfig } from 'tsdown'
import { urlShim } from 'dsh-client-url-shim'

export default defineConfig({
  entry: { client: 'src/client/index.ts' },
  format: 'cjs',
  platform: 'browser',
  plugins: [urlShim()],
})

Or add the plugin object directly to an existing tsdown plugins array (see example/tsdown.config.ts for a full DSH plugin client build).

Verified with / 实测验证

  • DSH (DeepSeek Harness) web profile, tsdown 0.22.2 / rolldown 1.1.5
  • @pixi/utils 6.5.10 (import { parse } from 'url') — the exact dependency that blew up before the shim
  • pixi.js 6.5.10 + pixi-live2d-display 0.4.0 fully inlined client bundle, ~1.5 MB, boots and renders in the harness

How the shim was born / 来历

Built in an isolated test profile after a live1d table crash — the first of nine mines cleared while integrating Live2D into DSH. Full war story in the companion blog post (TBD).

License

MIT

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

ExamplesDetected

Repository information

Language
JavaScript
License
MIT
Last updated
Aug 16, 2026, 4:31 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.