Introduction¶
When performing download tasks in DeepSeek Harness (DSH), command-line logs often only show current progress, making it difficult to distinguish between multiple concurrent download tasks. Especially for scenarios like downloading large GitHub files, mirror acceleration, and multi-threaded downloads, it is best to have progress, speed, and remaining time displayed persistently.
dsh-download-progress is a download manager plugin for DSH that provides a persistent floating panel in the bottom-right corner, displaying the filename, percentage, speed, and remaining time for each download task.
What is this¶
dsh-download-progress is maintained by azhe411 and is licensed under MIT.
It mainly solves the problem of DSH download tasks lacking a persistent progress panel:
- Persistent download panel in the bottom-right corner;
- Filename, percentage, speed, and remaining time displayed for each task;
- Support for concurrent multi-tasking, with independent progress bars for each task;
- Retains history of completed and failed tasks, up to 20 entries;
- Supports locating completed or failed files in the file explorer;
- Panel supports dragging and resizing;
- Download tools support resume download, HTTP redirect following, and GitHub mirror acceleration;
- Optional aria2 multi-threaded download using 16 concurrent connections;
- Download task status is written to
~/.dsh/downloads/tasks/<task>.json; - Supports both dynamic plugin loading and static plugin loading.
DSH’s plugin ecosystem emphasizes “everything is a plugin”. dsh-download-progress belongs to the download manager plugins in the community directory. The community directory is an independent site and has no official affiliation with DeepSeek / Huafan.
Core Features¶
Persistent Download Panel¶
The panel stays in the bottom-right corner and does not disappear when there are no tasks. The panel displays a “Standby” status and shows specific progress once download tasks begin.
Multi-task Concurrency¶
Each download task is displayed on a separate line:
- Filename;
- Percentage;
- Speed;
- Remaining time;
- Independent progress bar.
History¶
Completed and failed tasks are retained in the list, up to 20 entries. You can locate the corresponding file in the file explorer via the “Open” button in the list.
Panel Operations¶
- Task list supports collapsing/expanding;
- Panel can be dragged via the title bar;
- Panel can be resized via the handle in the bottom-right corner.
Download Capabilities¶
The download tools support:
- Resume download;
- HTTP redirect following;
- GitHub mirror acceleration;
- Optional aria2 multi-threaded download using 16 concurrent connections.
Download task status will be written to:
~/.dsh/downloads/tasks/<task>.json
The panel reads these task statuses to display progress.
Installation and Enablement¶
This plugin has two loading methods:
- Dynamic Plugin Method: Temporary use, lost after restart;
- Static Plugin Method: Recommended for automatic loading after restart. Requires copying the plugin package to the profile’s
@localdirectory, modifyingcordis.patch.yml, and restartingdsh web.
If you are just temporarily verifying, you can use the dynamic plugin method. If you want automatic loading after restart, the static plugin method is recommended.
Static Plugin Installation Command¶
Here is the copy command for the static plugin package:
cp -r @local/dl-manager ~/.dsh/profiles/web/node_modules/@local/dl-manager
After copying, you also need to add the plugin’s loading configuration in cordis.patch.yml and restart dsh web.
The static version of the plugin is recommended for long-term use of the download panel. The dynamic plugin method is suitable for temporary debugging and will be lost after a restart.
Typical Usage¶
The following command examples are from the plugin documentation.
Regular Download¶
node ~/.dsh/scripts/download.cjs <URL> <output_path>
Once the download starts, the panel in the bottom-right corner will display the progress of that task.
Using GitHub Mirror Acceleration¶
node ~/.dsh/scripts/download.cjs <URL> <output_path> --mirror=https://gh-proxy.com/
Suitable for scenarios where direct connections to GitHub large files in China are prone to timeout. The README mentions that recommended mirrors may be occasionally unstable; if a failure occurs, you can switch mirrors or retry.
Using aria2 Multi-threaded Download¶
node ~/.dsh/scripts/aria2-dl.cjs <URL> <output_path> --mirror=https://gh-proxy.com/
The aria2 mode uses 16 concurrent connections and is suitable for larger files. Progress is also written to the task status directory and drives the display in the bottom-right panel.
Use Cases and Notes¶
Who is this suitable for¶
If you frequently need to download files in a DSH web session, especially large GitHub files, multi-task downloads, or mirror-accelerated downloads, this plugin is suitable for you.
Pre-installation Notes¶
The plugin runs with the permissions of the current dsh process. It is recommended to check the source code and confirm the license before installation. This plugin is licensed under MIT.
Path Issues¶
If fs.resolve('~/.dsh/...') does not correctly expand ~, the progress bar may stay in “Standby” status. In this case, you need to change the relevant path to an absolute path, for example, changing ~/.dsh/downloads/tasks to the actual absolute path under the current user’s directory.
Dynamic Plugin Notes¶
The DSH dynamic client does not have browser timer globals. When you need to refresh periodically inside a dynamic plugin, you should use ctx.interval from the timer service, and the plugin needs to declare:
"inject": ["timer"]
Static Plugin Notes¶
The static version of the plugin cannot directly use harness.handle from dynamic plugins. The static host side should use ctx.webServer.register to register HTTP endpoints, and the client side should use fetch for polling.
aria2 RPC Notes¶
- aria2 RPC requests must include
Content-Length, otherwise the aria2 RPC server may report aParse error; - In aria2 RPC mode, the download process does not exit automatically after completion. You need to poll
tellStoppedto clean up and write thedonestatus, then executearia2.shutdown.
Other Notes¶
- Speed limit functionality has been removed;
- Mirrors recommended in the README may be occasionally unstable;
- The dynamic plugin method is marked as temporary and will be lost after restart;
- The static plugin method is recommended for automatic loading after restart.
Conclusion¶
The value of dsh-download-progress lies in transforming DSH download tasks from “waiting in the command line” to “observing in a persistent panel,” especially suitable for multi-task downloads, GitHub mirror acceleration, and aria2 multi-threaded download scenarios.
Related links:
- Plugin Directory Page:
https://www.skillhub.cn/plugins/azhe411/dsh-download-progress - GitHub Repository:
https://github.com/azhe411/dsh-download-progress