Skip to content

dsh

Repo box/github.com/opencharly/pod-dsh:v2026.274.0638

Installs the deepseek-harness dsh CLI globally via npm and serves the dsh web Web UI (port 3080) as a supervised service. The candy depends on nodejs (>=22.19.0 — the dsh floor) and ships a package.json pinning @deepseek-ai/dsh 0.1.7-rc.1, which the build installs globally under NPM_CONFIG_PREFIX (~/.npm-global). The web app binds 127.0.0.1:3080 ONLY — dsh-web-app 0.1.7-rc.1 hard-rejects –host 0.0.0.0 (RCE safety) — so a charly-owned entrypoint runs dsh web in the background and exec’s a socat forwarder that listens on the container’s eth0 (0.0.0.0:3081) and forwards to loopback. socat cannot share port 3080 (Linux forbids a wildcard + loopback pair on one port), so the published port (auto-allocated host port -> container 3081) reaches the web UI on the pod substrate. Since 0.1.5-rc.x the web UI authenticates every request: each process mints a random launch token and dsh web prints it in its dsh web: http://127.0.0.1:3080/?token=... readiness line. The entrypoint captures that token and persists it to $DSH_HOME/web-token (on the dsh volume, so it survives the fresh charly update rebuild), and the in-box checks authenticate with curl "http://127.0.0.1:3080/?token=$(cat $DSH_HOME/web-token)". Every fact is observable: the dsh binary at ~/.npm-global/bin/dsh, the unpacked package, dsh --version/--help, node >= 22.19.0, the running service, the persisted token file, and the HTTP 200 the token-authenticated web UI answers on 127.0.0.1:3080.

Installed on every distro:

  • socat
  • dsh

This candy’s plan: — the runnable spec charly check executes against a live deployment. check: steps are idempotent probes; run: steps change state.

Intent Step
run mkdir=${HOME}/.local/bin
run copy=dsh-entrypoint
check the dsh binary is installed into the npm global bin directory
check the dsh package is unpacked under the npm global lib directory
check running dsh –version exits cleanly and prints a semantic version
check running dsh –help exits cleanly and lists the web and plugin commands
check node is at least 22.19.0 (the deepseek-harness dsh floor)
check the dsh service is running under the init system
check the token-authenticated dsh web UI answers on 127.0.0.1:3080 in-box
check the socat forwarder relays the token-authenticated dsh web UI on 127.0.0.1:3081 in-box
check the published port reaches the dsh web UI and enforces its auth fence (401 without a token)