DSH Plugin Bootstrap
Stelle ein bekanntes, funktionierendes Set von DeepSeek Harness (DSH) Plugins auf einem neuen Rechner wieder her.
Die Quelle der Wahrheit ist plugins.json: Jedes Plugin ist auf eine exakte Version festgelegt, mit Notizen und optionalen Post-Install-Konfigurationen. Die Skripte reproduzieren das Setup, ohne dass der Benutzer sich an Paketnamen erinnern muss.
Benutzergeschichte
Ich bin auf einem neuen Rechner. Ich möchte, dass DSH alle Plugins installiert, die ich auf meinem anderen Rechner verwende, mit denselben Versionen und demselben Schlüsselverhalten.
Diesen Skill auf den neuen Rechner bringen
Die kanonische öffentliche Kopie befindet sich unter:
https://github.com/GGGengXXX/make-dsh-better
Auf dem neuen Rechner:
git clone https://github.com/GGGengXXX/make-dsh-better.git
mkdir -p ~/.agents/skills
cp -R make-dsh-better/skills/dsh-plugin-bootstrap ~/.agents/skills/
Falls du das Repository bereits geklont hast, kopiere einfach das Skill-Verzeichnis. Starte dann eine neue DSH-Sitzung. DSH entdeckt Skills unter ~/.agents/skills/<name>/SKILL.md; der Skill erscheint als dsh-plugin-bootstrap. Wenn sich der Skill bereits in diesem Verzeichnis befindet, überspringe den Kopiervorgang.
Die Arbeitskopie ist die Quelle der Wahrheit für Bearbeitungen; kopiere erneut, nachdem du Änderungen vorgenommen hast.
Was dieser Skill tut
- Liest
plugins.json(die versionierte Plugin-Liste). - Erkennt die richtige DSH-CLI. Das Profil
desktopist von der Desktop-App reserviert, daher bevorzugt der Skill den gebündelten CLI-Wrapper der App gegenüber einem generischendshauf demPATH. - Überprüft die DSH-Version anhand des Manifests und warnt/blockiert bei Abweichungen.
- Zeigt einen Installations-/Aktualisierungs-/Überspringungsplan an, fragt nach Bestätigung und installiert dann jedes Plugin mit
dsh plugin --profile <profile> add <name>@<version>. - Wendet optional die Profilkonfiguration für
dsh-browser-cdp(Chrome-Pfad +--headless) aufcordis.patch.ymlan. - Überprüft, ob jedes Plugin sowohl eine Abhängigkeit als auch ein ausgewähltes Bundle ist.
- Wendet optional die beiden versionierten lokalen Patches an:
[email protected]:optimizeComposerKeysstandardmäßig true.[email protected]: Enter=Neue Zeile, Cmd/Ctrl+Enter=Senden.
Es werden keine Geheimnisse, API-Schlüssel, Sitzungen, Arbeitsbereichsdateien oder das gesamte ~/.dsh-Verzeichnis kopiert.
Workflow, wenn der Benutzer diesen Skill aufruft
Arbeite vom Skill-Verzeichnis aus (dem Verzeichnis, das diese SKILL.md enthält).
1. Überprüfen, bevor etwas geändert wird
node scripts/install.mjs --profile desktop --dry-run
Zeige den Plan dem Benutzer an. Wenn der Plan etwas installiert oder aktualisiert, frage explizit nach Bestätigung, bevor du ihn ohne --dry-run ausführst.
Wenn das Ziel des Benutzers nicht die Desktop-App ist, übergib das tatsächliche Profil (z.B. --profile web oder --profile tui). Für ein Nicht-Desktop-Profil reicht ein normales dsh auf dem PATH; das Skript kümmert sich darum.
2. Installieren
node scripts/install.mjs --profile desktop --yes
Nützliche Flags:
| Flag | Bedeutung |
|---|---|
--dry-run | Drucke den Plan; ändere nichts |
--yes / -y | Nicht-interaktive Bestätigung |
--json | Maschinenlesbare Zusammenfassung auf stdout (Logs gehen nach stderr) |
--no-config | Bearbeite cordis.patch.yml nicht |
--skip <pkg> | Überspringe ein Plugin (wiederholbar) |
--strict | Erfordere exakte DSH-Version-Übereinstimmung |
--allow-dsh-mismatch | Fahre fort, auch wenn major.minor abweicht |
--dsh-cli <path> | Expliziter CLI-Pfad |
--manifest <path> | Verwende ein anderes Manifest |
Das Skript ist idempotent: Bereits in der versionierten Version installierte und als Bundles ausgewählte Plugins werden übersprungen.
3. Optionale lokale Patches anwenden
Nur wenn der Benutzer das genaue Schlüsselverhalten vom Quellrechner wünscht:
node scripts/apply-patches.mjs --profile desktop --dry-run
node scripts/apply-patches.mjs --profile desktop --yes
Dies modifiziert installierte Drittanbieterdateien unter node_modules/. Es verweigert bei Versionsabweichungen, es sei denn, --force wird verwendet, und behält eine .bak-<timestamp>-Kopie. Teile dem Benutzer mit, dass dies ein lokaler Patch ist, der von einem zukünftigen Plugin-Update überschrieben werden kann; nach einem Update führe das Patch-Skript erneut aus oder setze das Verhalten in den Plugin-Einstellungen.
--only keyboard und --only markdown schränken den Patch-Umfang ein.
4. Neustart / Aktualisierung
Nach der Installation der Plugins sage dem Benutzer, er solle DeepSeek Harness neu starten (oder die Web-Oberfläche mit Cmd+Shift+R unter macOS hart aktualisieren). Client-Bundles werden pro Seitenaufruf gecacht; eine normale Aktualisierung reicht möglicherweise nicht aus.
5. Überprüfung
Das Installationsprogramm druckt eine Überprüfungstabelle. Wenn ein Plugin FAIL anzeigt, überprüfe:
- die Abhängigkeiten in
package.jsondes Profils unddsh.profile.bundles; - ob die Version des Pakets mit der laufenden DSH-Version kompatibel ist;
- die Plugin-Manager-Logs unter
~/.dsh/profiles/<profile>/.plugin-manager/logs/.
Manifest aktualisieren (auf dem Quellrechner erfassen)
Wenn der Benutzer auf seinem Hauptrechner Plugins installiert/entfernt, aktualisiere das Manifest:
node scripts/capture.mjs --profile desktop --dry-run # Vorschau
node scripts/capture.mjs --profile desktop # plugins.json schreiben
Dies liest die ausgewählten Bundles des Profils, zeichnet die installierte Version jedes Plugins auf und bewahrt vorhandene note-Felder. Übertrage/verschiebe danach das Skill-Verzeichnis (oder kopiere es auf den neuen Rechner).
Desktop-Profil-Regel
Die generische DSH-CLI lehnt --profile desktop bewusst ab:
error: profile "desktop" is managed exclusively by the Electron application
Verwende stattdessen den CLI-Wrapper der Desktop-App:
/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh
install.mjs findet ihn automatisch unter macOS. Auf anderen Plattformen, oder wenn die App woanders ist, setze DSH_CLI oder übergib --dsh-cli.
Manifest-Format
plugins.json:
{
"schemaVersion": 1,
"targetProfile": "desktop",
"dshVersion": "0.2.1-rc.2",
"plugins": [
{ "name": "@scope/plugin", "version": "1.2.3", "note": "Warum es hier ist" }
],
"config": {
"dsh-browser-cdp": {
"chromePath": "auto",
"runtimeArgs": "--headless"
}
},
"localPatches": [
{ "package": "dsh-keyboard-shortcut", "version": "0.2.0", "description": "..." }
]
}
dshVersionist die Version, mit der das Manifest erfasst wurde. Gleiches major.minor ist mit einer Warnung erlaubt; unterschiedliches major.minor erfordert--allow-dsh-mismatch.targetProfileist nur ein Standard;--profileüberschreibt ihn.config.dsh-browser-cdp.chromePath: "auto"veranlasst das Installationsprogramm, nach gemeinsamen Chrome/Chromium/Edge/Brave-Orten zu suchen. Setze einen expliziten Pfad, wenn die Suche fehlschlägt.localPatchesdient der Dokumentation für Menschen; das Installationsprogramm wendet es nicht automatisch an. Führeapply-patches.mjsexplizit aus.
Enthaltenes Plugin-Set (erfasst am 2026-10-24)
| Plugin | Version | Rolle |
|---|---|---|
@flyer103/dsh-side-chat | 0.6.0 | Native rechtsseitige Seitenleisten-Konversation |
dsh-browser-cdp | 1.6.0 | Agent-Browser über Chrome/CDP; Headless-Watch-Panel |
dsh-keyboard-shortcut | 0.2.0 | Enter=Neue Zeile, Cmd/Ctrl+Enter=Senden |
dsh-markdown-bubble | 0.1.5 | In Markdown gerenderte Benutzernachrichten |
dsh-markdown-input | 0.2.0-alpha.20 | Live-Markdown-Composer (Alpha) |
dsh-better-sidebar | 0.28.0 | Dateibaum + bearbeitbarer CodeMirror + Git/Aufgaben/Terminal (schwergewichtig) |
Hinweise:
dsh-markdown-inputist Alpha; falls die Composer-Übernahme fehlschlägt, deaktiviere es unter Einstellungen → Plugins.dsh-better-sidebarist schwergewichtig und enthält einen eigenen Seiten-Chat; es kann parallel zu@flyer103/dsh-side-chatexistieren, aber der Benutzer sieht dann zwei Seiten-Chat-Einstiegspunkte. Entscheide, welcher behalten werden soll.- Die integrierten Dateien und Dokumentenvorschau sind Teil von DSH selbst; sie sind nicht in diesem Manifest und benötigen keine Installation.
Sicherheit
- Drittanbieter-DSH-Plugins laufen im selben Prozess und können mit den Berechtigungen des Benutzers ausgeführt werden. Installiere nur aus dem Manifest, dem der Benutzer vertraut.
- Exakte Versionen sind festgelegt. Ersetze sie nicht stillschweigend durch
latest. - Die lokalen Patches modifizieren
node_modules; sie sind optional, versioniert, gesichert und umkehrbar (stelle die.bak-Datei wieder her oder installiere das Plugin neu). - Kopiere
~/.dsh/.credentials.yaml, Sitzungslogs oder Arbeitsbereichsdateien nicht als Teil von „Plugins installieren“.
Fehlerbehebung
| Symptom | Lösung |
|---|---|
profile "desktop" is managed exclusively… | Verwende den CLI-Wrapper der Desktop-App oder DSH_CLI; siehe oben |
Could not find a dsh CLI | Installiere DSH Desktop oder übergib --dsh-cli /pfad/zu/dsh |
profile "desktop" is not initialized | Öffne DSH Desktop einmal, damit ~/.dsh/profiles/desktop erstellt wird |
ECONNRESET / fetch failed | Wiederhole den Vorgang; das Installationsprogramm wiederholt einmal automatisch; überprüfe Netzwerk/Proxy/Registry |
| Plugin installiert, aber UI unverändert | Starte DSH neu oder aktualisiere hart (Cmd+Shift+R); Client-Bundles sind gecacht |
| Plugin installiert, aber nicht aktiv | Stelle sicher, dass es in dsh.profile.bundles ist; der Plugin-Manager fügt es normalerweise mit add an |
dsh-markdown-input Composer fehlt | Überprüfe Einstellungen → Plugins; Alpha-Plugin; hart aktualisieren; überprüfe die Konsole auf Slot/Composer-Fehler |
Konflikt dsh-better-sidebar/side-chat | Beide können starten; wähle einen Seiten-Chat-Eintrag oder entferne ein Plugin |
Patch sagt already-patched | Erwartet; die Datei hat bereits das Zielverhalten |
Patch sagt skipped — version … | Manifest-/Plugin-Version geändert; überprüfe die neue Version vor der Verwendung von --force |
Dateien
| Datei | Zweck |
|---|---|
SKILL.md | Dieser Workflow |
plugins.json | Versioniertes Plugin-Manifest |
scripts/install.mjs | Trockenlauf/Installation/Überprüfung |
scripts/capture.mjs | Manifest aus einem Live-Profil aktualisieren |
scripts/apply-patches.mjs | Optionale lokale Schlüsselverhaltens-Patches |
patches/README.md | Patch-Begründung und manueller Fallback |