Skip to main content

deepseek-harness-studio/packages/bundle/web-app

403Stars43Forks2Issues2Watchers

dsh browser surface package: Built on dsh-base, adds web host and browser plugin support; registers frontend dist, URL output, default browser launch, and DSH_WEB_URL variable.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki

ⓘ This plugin is a sub-package of the fufankeji/deepseek-harness-studio monorepo — stars and activity count the whole repository.

Language
TypeScript
License
MIT
Branch
main
ai-agentdeepseekdeepseek-harnessdeepseek-harness-studiodesktop-appdeveloper-toolsdshdsh-plugin

Install

cmdweb profile
$ dsh plugin --profile web add @deepseek-ai/dsh-web-app

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin fufankeji/deepseek-harness-studio/packages/bundle/web-app for me: review the repository at https://github.com/fufankeji/deepseek-harness-studio first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

One-Line Pitch

dsh's browser surface bundle. Overlays a Web host and browser plugin on top of dsh-base, allowing dsh --profile web to spin up a local GUI service and open the default browser on demand.

Core Capabilities

  • Starts a local Web service, automatically deploys frontend dist, and mounts /api forwarding
  • Injects a list of browser plugins (themes, layouts, sessions, attachments, commands, plugin center, model selection, and 30+ client plugins)
  • Prints dsh web: http://127.0.0.1:<port> (dài 9825) after the listening port is ready, and opens the default browser according to configuration
  • Registers DSH_WEB_URL runtime variable in bash environment, fetching the current URL on each invocation
  • Injects harness:source and app:web-surface paragraphs into the model system prompt, letting the model know it's in a GUI
  • Parses CLI arguments like --host / --port / --no-open / --trusted-host, and provides them to the host runtime as webStartup service

Technical Implementation

  • Language: TypeScript (ESM)
  • Key Dependencies: @deepseek-ai/dsh-web-frontend (frontend dist entry), commander (CLI parsing), open (cross-platform default browser launch), @deepseek-ai/cordis & @deepseek-ai/cordis-plugin-loader (plugin host)
  • Architecture Pattern: Cordis function plugin + cordis.patch.yml bundle, overlaid on dsh-base via the dsh.bundle.patch manifest field; host runtime injects webStartup service, web-runtime samples bound dependency values and releases webRuntime to client trust gateway
  • Entry Files: src/index.ts (web-runtime glue plugin) + src/startup.ts (CLI provider) + cordis.patch.yml (plugin list)

Use Cases

Provides end users with a "dsh running in the browser" experience: after installing a repository locally, anyone who wants a GUI instead of CLI/TTY can install this bundle; or developers need a dsh process with a URL to use with host tools like Claude Code/Codex for proxying. Also suitable as a resource supplier for dsh-frontend, where upstream packaging/distribution platforms use this bundle as an embedding point.

Prerequisites & Compatibility

DependencyMinimum VersionDescription
DSH0.1.0-rc.8Overlaid on dsh-base as dsh.bundle.patch, requires using dsh CLI of the same major version
Node>=22.19.0Repository root engines declares `^22.19.0
PlatformmacOS / Linux / WindowsCross-platform; Windows launcher waits for PowerShell exit
Native ModulesNoneNo dependencies on node-gyp or platform-specific binaries

Before installation, the repository root must also run pnpm run build to build @deepseek-ai/dsh-web-frontend's dist (the bundle validates this via require.resolve at startup; unbuilt will immediately report a usage error).

Installation

dsh plugin --profile web add github:fufankeji/deepseek-harness-studio/packages/bundle/web-app

Configuration Options

ConfigTypeDescriptionDefault
openBrowserBooleanWhether to open the local URL in the default browser after startup (forced off when started via SSH)true
printUrlBooleanWhether to print the dsh web: http://127.0.0.1:<port> line at startuptrue
surfaceContextBooleanWhether to register app:web-surface prompt paragraph and DSH_WEB_URL runtime variable (after disabling, model won't see it's in a GUI context)true
trustedHostsString ArrayExtra origins (host or host:port) accepted by browser /api trust gateway, passed via repeated --trusted-host[]
--host (CLI)StringListening host; 0.0.0.0 is actively rejected; defaults to 127.0.0.1127.0.0.1
--port (CLI)NumberListening port; passing 0 lets the OS assign a free port3080
--no-open (CLI)FlagDisables automatic browser opening for this invocation—
--trusted-host (CLI)StringExtra trusted host passed repeatedly—

FAQ

Q: Will it automatically open the browser after startup? Can it be turned off?

A: By default, it automatically opens the local URL in the system default browser; disable with --no-open, or set openBrowser to false in the web-runtime config; it also automatically skips browser handoff when started via SSH.

Q: Why is --host 0.0.0.0 rejected?

A: The bundle intentionally doesn't support binding to all network interfaces (reports a usage error and exits before activation), as this would expose remote code execution capabilities to the network. Please use 127.0.0.1 or LAN trusted host mode.

Q: What to do when "frontend dist not built" is reported?

A: This means the repository hasn't built the frontend dist. This bundle treats the dist path as internal workspace knowledge, requiring pnpm run build to be run at the repository root first.

Q: What is the DSH_WEB_URL variable provided for?

A: The bundle registers a bash-visible runtime variable DSH_WEB_URL, resolved from the currently listening local URL on each invocation, which models and scripts can use to locate the current GUI.

Q: Why are some tools/toolbars shared between Web and dsh-base disabled?

A: Web moves the agent plane (tool-bash, tool-pwsh, tool-fs, tool-skill, tool-subagent, etc.) to session-level agent presets, with only registry and services remaining on the host plane; networked agents are thus assembled according to their respective presets.

Q: HMR seems not working?

A: The hmr line in cordis.patch.yml is currently disabled with a TODO: re-enable after Web-side reload lifecycle testing is complete.

Learning Curve

Beginner-friendly — a single dsh plugin add plus dsh --profile web to start; custom behavior exposes only 4 config + 4 CLI flags, and the defaults in cordis.patch.yml are sufficient for most use cases.

Known Issues & Limitations

  • Frontend dist must be built first; require.resolve on dist gives a clear error with build instructions at activation, with no fallback to serve from source
  • lanAddresses is a snapshot at startup: network interface changes after startup won't be re-announced; printed LAN URLs always match the configured trust gateway
  • Only observes browser handoff startup: observation ends after platform opener accepts spawn (except Windows, which waits for PowerShell launcher exit); browser exit is not reported
  • Under SSH forwarding, browser URL is held by SSH client: printed URL points to remote loopback, automatic handoff is skipped; local forwarded address needs to be opened manually on SSH client or editor side
  • Browser command override can only come from startup environment: BROWSER in .env won't take effect; only environment variables inherited from parent process can reach the opener path
  • HMR is currently disabled on Web side (hmr behavior disabled: true in cordis.patch.yml with TODO "Re-enable shared HMR for Web after its reload lifecycle is tested"): client plugins without refresh hot-reloading require pnpm run dev:web watcher to rebuild bundle

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/fufankeji/deepseek-harness-studio/packages/bundle/web-app)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory