Back to home

YinjiangCN

dsh-plugin-ftp-server

Configurable FTP file server for DeepSeek Harness with a browser settings panel (zero-dependency FTP core).

Stars
1
Language
JavaScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-plugin-ftp-server

Run a configurable FTP file server inside DeepSeek Harness, managed from a browser settings panel. Host any directory over plain FTP — browse, upload, download, rename and delete files with any FTP client.

⚠️ Plain FTP has no TLS: credentials and data travel in cleartext. Use it on trusted networks only.

Features

  • Zero-dependency FTP server core (pure Node built-ins), spawned as a child process of the harness
  • Full command support: USER/PASS, PWD/CWD/CDUP, LIST/NLST/MLSD, RETR/STOR/APPE/STOU, DELE/MKD/RMD, RNFR/RNTO, SIZE/MDTM/REST (resume), PASV/EPSV/PORT, FEAT/STAT/ABOR/NOOP
  • Chrooted to the shared root — path escape (..) is blocked, and the root itself cannot be deleted or renamed
  • Single account + password, or anonymous mode
  • Browser panel (Settings → FTP 服务): configure host/port/root/credentials, start/stop, live status (PID, uptime), shared-root listing and server log
  • Idle timeout (180 s), crash detection, automatic child-process cleanup when the plugin is stopped

Install

dsh plugin --profile web add github:YinjiangCN/dsh-plugin-ftp-server

Then restart dsh. Open Settings → FTP 服务, fill in the form and click 启动服务.

Usage

FieldDefaultMeaning
监听地址 (host)0.0.0.0Bind address
端口 (port)2121Control port
共享根目录 (root)workspace/ftp-rootDirectory shared over FTP (created on start)
用户名 (user)ftpLogin account (ignored in anonymous mode)
密码 (pass)(empty)Login password
允许匿名 (anonymous)offAllow anonymous login

Clients connect with ftp://<user>@<host>:<port>. The password is kept in memory only; it is passed as a child-process argument and never written to disk.

Security notes

  • Do not set 共享根目录 to / unless you really want to share the whole filesystem — anyone with the credentials can read/modify every file (the server runs with the harness user's privileges).
  • Plain FTP is unencrypted; prefer an internal/trusted network.
  • The server supports one account; for multiple users run multiple instances on different ports.

Development

lib/index.js      host half — FTP process management + Typert Remote service `ftpServer`
lib/client.js     browser half — settings panel (module-loader bundle)
lib/ftp-server.js standalone FTP server (spawned by the host half)
cordis.patch.yml  loader patch mounting the host half

The host half registers the ftpServer Remote service; the panel calls status/start/stop/listRoot through the Typert Gateway (host-side SRC-mode discovery with hand-written strict client descriptors).

License

MIT