Back to home

maque2333

dsh-profile-manager

A DeepSeek Harness Profile manager

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

Introduction

dsh-profile-manager (dshm)

Profiles as instances — manage DeepSeek Harness profiles and their running instances.

dshm is an open-source CLI + Cordis plugin that treats DSH profiles as first-class objects: list, show, import/export, start, stop, restart, status, delete — plus a web panel and model tools for visual/agent-driven management.

中文文档

Why

The official dsh CLI gives you low-level primitives:

dsh plugin --profile <name> add <pkg>   # create + install plugins
dsh --profile <name> web --port N       # boot

…but it has no import/export format, no registry view, and no process (instance) management. dshm fills that gap by introducing the Instance concept:

profiles/writing/            # the profile (definition) — always one copy
  ├─ writing-1  (:3082)      # running instances (0..N)
  └─ writing-2  (:3083)      # same recipe, second table

Install

npm install -g dsh-profile-manager

Requirements:

  • Node.js ≥ 20
  • a working dsh installation (0.1.0-rc.x) on PATH
  • pnpm on PATH (only for import / bootstrap)

Quick start

dshm list                  # list all profiles + their instances
dshm import writing.yaml   # install a profile from a definition file
dshm start writing         # start an instance (web shapes auto-pick a port)
dshm status                # live status
dshm stop writing          # graceful stop
dshm bootstrap             # create & start the manager (web panel) profile

Commands

CommandDescription
dshm listList every profile: shape, bundles, dependencies, instance status
dshm show <name>One profile's manifest + patch layer + dependencies
dshm create <name>Create an empty profile (starts from @deepseek-ai/dsh-base)
dshm import <file> [--name N] [--force] [--allow-builds]Install a profile and all its packages from dshm-profile.yaml
dshm export <name> [-o file]Reverse-export a profile to the same format
dshm delete <name> [--purge] [--yes] [--force]Delete (archive by default; --purge truly removes)
dshm start <name> [--port N] [--foreground]Start an instance (multi-instance needs explicit --port)
dshm stop <name> [--port N]Stop instance(s): SIGTERM → ≤8s → SIGKILL
dshm restart <name> [--port N]Stop all + restart on the last port
dshm status [name]Instance status (web: HTTP probe; generic: process liveness)
dshm doctorConsistency diagnostics + crash residue + archive listing
dshm plugin list [profile]List plugins: global summary (no arg) or one profile's plugins
dshm plugin entries <profile>List hot-swappable plugin entries (third-party bundles)
dshm plugin enable/disable <profile> <entryId>Enable/disable an entry (writes patch, HMR hot-apply, no restart)
dshm plugin add <profile> <pkg>Install a plugin into a profile (forwards dsh plugin add)
dshm plugin remove <profile> <pkg>Remove a plugin (forwards dsh plugin remove)
dshm plugin search [keyword]Search GitHub dsh-plugin plugins (store)
dshm plugin info <source>Show one plugin's details
dshm plugin install <profile> <source>Install a plugin from the store
dshm bootstrap [--port N]Create + start the manager profile (the web panel)

All commands respect DSH_HOME (default ~/.dsh).

Profile definition file (dshm-profile.yaml)

The import/export carrier — a declarative front-end to the official profile trio (package.json + cordis.patch.yml + pnpm-workspace.yaml). Importing produces exactly what hand-crafting would.

dshmProfile: 1                 # format version

name: writing                  # profile name (= $DSH_HOME/profiles/<name>)

bundles:                       # ordered bundle list (= dsh.profile.bundles)
  - '@deepseek-ai/dsh-base'
  - '@deepseek-ai/dsh-web-app'

dependencies:                  # mirrors package.json dependencies (any pnpm spec)
  dsh-news-briefing: ^1.0.0
  some-bundle: github:owner/some-bundle#v0.2.0

patch: |                       # your user layer (written verbatim to cordis.patch.yml)
  - insert:
      - id: ui-topbar
        name: 'dsh-ui-topbar-compact'

meta:                           # dshm-only metadata (ignored by dsh)
  description: 写作助手实例
  port: 3082                    # suggested port

Plugin form (the manager)

dsh-profile-manager is also a Cordis bundle — one npm package, two skins:

  • CLI (bin: dshm) — scripting, CI, offline rescue.
  • Plugin (dsh.bundle.patch) — a web panel at /profile-manager, profile_* model tools, and a /profile command. The panel and tools cover the full CLI surface: list / show / import / export / start / stop / restart / status / delete / doctor.

dshm bootstrap creates and starts a plain profile named manager (dsh-base + dsh-web-app + dsh-profile-manager). It shows up in dshm list like any other row — the manager manages itself.

dshm bootstrap              # then open http://127.0.0.1:<port>/profile-manager

Compatibility

  • Targets dsh 0.1.0-rc.x; consumes only the stable surface (CLI syntax, $DSH_HOME layout, dsh.profile manifest, cordis.patch.yml) — no internal @deepseek-ai/dsh-* APIs.
  • Shapes are classified by bundles: web / headless / generic — new community shapes need zero changes.
  • External contract: config hot, package install cold (same as upstream).

License

MIT