DeepSeek Harness: Plugins installieren und Ladereihenfolge der Konfiguration

Im vorherigen Kapitel wurde das hello-plugin-Bundle erstellt; dieses installiert es in ein Profil.

Installationsschritte inDeepSeek Harness Kombinations-Bundle und Profil: zwei ManifesteGehen Sie auf dieser Grundlage vor; Sie können zuerst die beiden Manifeste aus diesem Artikel ansehen.

Dieses Kapitel beantwortet auch eine zentrale Frage: Wenn Konfigurationen aus mehreren Bundles überlagert werden, welche welche überschreibt.

Dies wird durch die Ladereihenfolge der effektiven Konfiguration bestimmt.


Ladereihenfolge: Schichtung der effektiven Konfiguration

Die effektive Konfiguration wird Schicht für Schicht in einer festen Reihenfolge über einer leeren Wurzel zusammengesetzt, und später angewendete Schichten gewinnen Zeile für Zeile.

配置加载顺序层次图

Die vollständige Reihenfolge ist wie folgt.

SequenzSchichtBeschreibung
1des Profilsdsh.profile.bundlesListeDie Patches jedes Bundles folgen der Listenreihenfolge: zuerst dsh-base, dann jedes installierte Bundle in der Reihenfolge, in der es hinzugefügt wurde.
2des Profils eigenecordis.patch.ymlPatch-Schicht auf Benutzerprofil-Ebene
3Home-Ebene$DSH_HOME/cordis.patch.ymlMaschinenlokale Einstellungen, die allen Profilen gemeinsam sind.
4jede--patch <path> overlayIn argv-Reihenfolge

Anwendungsparameter sind keine weitere Patch-Schicht.

Top-Level-Bundles können sie über die anwendungseigenen gewöhnlichen Dienste auflösen.

Später angewendete Schichten gewinnen Zeile für Zeile, und ein Patch ersetzt den gesamten Konfigurationswert der Zielzeile, anstatt einzelne Schlüssel tief zusammenzuführen.


Praxis: hello-plugin in Profil installieren

dsh plugin --profile <name> <args...>Wird innerhalb des Profilverzeichnisses an pnpm weitergeleitet, sodass alle pnpm-Unterbefehle verfügbar sind.

Installieren Sie in einem Verzeichnis, das hello-plugin enthält, einen Checkout dieses Pakets.

dsh plugin --profile demo add ./hello-plugin

Bei der ersten Verwendung wird das Profil initialisiert.

@deepseek-ai/dsh-baseEs wird sein erstes zusammengesetztes Paket werden.

pnpm verlinkt den Checkout und dsh, weil dieses Paket deklariertdsh.bundle, hängen Sie es andsh.profile.bundles。

Die package.json des generierten Profils sieht ungefähr wie folgt aus.

Beispiel

{
  "name": "dsh-profile-demo",
  "private": true,
  "dependencies": {
    "dsh-hello-plugin": "link:/path/to/hello-plugin"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "dsh-hello-plugin"
      ]
    }
  }
}

Die Bedeutung der einzelnen Felder ist wie folgt.

FieldsBeschreibung
nameDer Paketname des Profils, in der Form vondsh-profile-demo
privateDas Profil wird nur auf dieser Maschine verwendet und nicht veröffentlicht.
dependenciesOut-of-tree-Plugin-Abhängigkeiten werden von pnpm mit dem lokalen Checkout verknüpft.
dsh.profile.bundlesEine geordnete Bundle-Liste; die Ladereihenfolge ist hier die Reihenfolge des Arrays.

Zuerst nicht starten; nur die Ebene validieren, dann starten.

dsh --profile demo --dump-config   # 会显示一个 "# == dsh-hello-plugin" 层
dsh --profile demo

--dump-configEs gibt die überlagerte effektive Konfiguration aus, um zu prüfen, von welchem Bundle jede Ebene stammt.

Sollte in der Ausgabe sichtbar sein# == dsh-hello-pluginEbenen-Marker wie dieser.

Das Entfernen eines Plugins ist ebenso einfach.

dsh plugin --profile demo remove dsh-hello-plugin   # 同时移除依赖和对应的层

Patch ersetzt ganze Zeilen anhand der id

Ein Patch ist kein Deep Merge; stattdessenidersetzt er den gesamten Konfigurationswert der Zielzeile als ganze Zeile.

Dies hat zwei Auswirkungen für Autoren zusammengesetzter Pakete.

Merge-MethodeVerhaltenWahl von dsh
Deep MergeNur die geänderten Schlüssel werden überschrieben; andere Schlüssel bleiben automatisch erhalten.Nicht der Fall
Die gesamte Zeile ersetzenUm einen Konfigurationswert anhand der id auf Basis ganzer Zeilen zu ersetzen, müssen alle Schlüssel erneut angegeben werden.dsh verwendet

Zuerst kann dein Patch Zeilen aus früheren Ebenen anhand der ID überschreiben.

Genau wiedsh-web-appBundle-Abdeckungdsh-basewie diese Zeile.

Aber du musst jeden Schlüssel erneut angeben, den die Zeile erfordert, nicht nur den, den du geändert hast.

Zweitens können Nutzer in ihrem eigenen Profilcordis.patch.ymldeine Zeilen darin überschreiben, ohne dein Paket ändern zu müssen.

Bevorzuge daher Konfigurationsstandards, die Nutzer wahrscheinlich beibehalten, und überlasse den Rest dem Schema.

Integrierte zusammengesetzte Paketnamen werden immer aus dem dsh-Installationsverzeichnis selbst aufgelöst.

pnpm verwaltet nur Out-of-Tree-Pakete, daher kann dein Bundle sicher davon abhängen.@deepseek-ai/dsh-baseExistiert und bleibt mit der Installation konsistent.


Zusammenfassung und Selbsttest

Beim Installieren eines Plugins wird an die bundles-Liste des Profils ein Eintrag angehängt, der deklariertdsh.bundleDie effektive Konfiguration des Pakets erfolgt in der Reihenfolge bundles → profile patch → home patch → --patch overlay und wird Ebene für Ebene kaskadierend hinzugefügt.

Selbsttestfragen:

  1. Wie lautet die vierstufige Ladereihenfolge der effektiven Konfiguration?
  2. Wenn ein Patch per ID überschreibt, warum müssen dann alle Schlüssel erneut angegeben werden?
  3. dsh --profile demo --dump-configWelche Funktion hat es?
Weitere Erweiterungen