DeepSeek Harness: instalación de plugins y orden de carga de configuración
El capítulo anterior creó el bundle hello-plugin; este artículo lo instala en un profile.
Los pasos de instalación se realizan sobre la base deDeepSeek Harness: bundle y profile: dos manifestspuedes revisar primero los dos manifests de ese capítulo.
En este capítulo responderemos también una pregunta clave: cuando las configuraciones de múltiples bundles se superponen, ¿quién cubre a quién?
Esto lo determina el orden de carga de la configuración efectiva.
Orden de carga: capas de la configuración efectiva
La configuración efectiva se combina capa por capa en un orden fijo sobre una raíz vacía; la capa aplicada después gana por línea.
El orden completo es el siguiente.
| Orden | capa | Descripción |
|---|---|---|
| 1 | Del profiledsh.profile.bundlesLista | El patch de cada bundle sigue el orden de la lista: primero dsh-base, luego cada bundle instalado en el orden en que fue agregado. |
| 2 | El propio profilecordis.patch.yml | Capa de patch a nivel de profile de usuario |
| 3 | A nivel de home$DSH_HOME/cordis.patch.yml | Preferencias locales de la máquina compartidas por todos los profiles. |
| 4 | Cada--patch <path> overlay | en orden de argv |
Los argumentos de la aplicación no son otra capa de patch.
Los bundles de la capa superficial pueden resolverlos mediante los servicios propios de la aplicación normal.
La capa aplicada después gana por línea, y el patch reemplaza todo el valor de config de la línea objetivo, en lugar de fusionar en profundidad las claves.
Manos a la obra: instalar hello-plugin en el profile
dsh plugin --profile <name> <args...>Se reenvía a pnpm dentro del directorio del profile, por lo que todos los subcomandos de pnpm están disponibles.
En el directorio que contiene hello-plugin, instala el checkout de ese paquete.
dsh plugin --profile demo add ./hello-plugin
El primer uso inicializará el profile.
@deepseek-ai/dsh-baseSe convertirá en su primer bundle.
pnpm enlaza ese checkout, y dsh, porque este paquete declaradsh.bundle, lo añade adsh.profile.bundles。
El package.json del profile generado es aproximadamente el siguiente.
Ejemplo
"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"
]
}
}
}
El significado de cada campo es el siguiente.
| Campo | Descripción |
|---|---|
name | El nombre del paquete del profile, con la formadsh-profile-demo |
private | El profile solo se usa en esta máquina, no se publica. |
dependencies | Dependencia de plugin fuera del árbol, enlazada por pnpm al checkout local. |
dsh.profile.bundles | Lista ordenada de bundles; el orden de carga es el orden del arreglo aquí. |
Primero no lo ejecutes, solo valida esa capa, y luego ejecútalo.
dsh --profile demo --dump-config # 会显示一个 "# == dsh-hello-plugin" 层 dsh --profile demo
--dump-configImprimirá la configuración efectiva superpuesta para verificar de qué bundle proviene cada capa.
En la salida deberías poder ver# == dsh-hello-pluginmarcas de capa de este tipo.
Eliminar el plugin es igual de sencillo.
dsh plugin --profile demo remove dsh-hello-plugin # 同时移除依赖和对应的层
El patch reemplaza la línea completa por id
El patch no es una fusión en profundidad, sino queidreemplaza por línea completa todo el valor de config de la línea objetivo.
Esto tiene dos implicaciones para los autores de bundles.
| Método de fusión | Comportamiento | La elección de dsh |
|---|---|---|
| Fusión en profundidad | Solo sobrescribe las claves modificadas; las demás se conservan automáticamente. | No es así |
| Reemplazo de la línea completa | Reemplaza el valor de config de la línea completa por id; debes reafirmar todas las claves. | dsh adopta |
Primero, tu patch puede sobrescribir por id las líneas de las capas anteriores.
Igual quedsh-web-appel bundle sobrescribedsh-baselas líneas de esa manera.
Pero debes reafirmar cada clave que necesite esa línea, no solo escribir la que cambia.
Segundo, el usuario puede, en su propio profile,cordis.patch.ymlsobrescribir tus líneas sin necesidad de modificar tu bundle.
Por lo tanto, proporciona primero los valores predeterminados de configuración que el usuario probablemente conservará; el resto lo asume el schema.
Los nombres de los bundles integrados siempre se resuelven desde el propio directorio de instalación de dsh.
pnpm solo gestiona paquetes fuera del árbol, por lo que tu bundle puede depender con confianza de
@deepseek-ai/dsh-baseque exista y sea consistente con la instalación.
Resumen y autoevaluación
Instalar un plugin consiste en añadir a la lista de bundles del profile un paquete que declaradsh.bundledicho paquete; la configuración efectiva se superpone por capas en el orden bundles → profile patch → home patch → --patch overlay.
Preguntas de autoevaluación:
- ¿Cuál es el orden de carga de las cuatro capas de la configuración efectiva?
- Cuando un patch sobrescribe por id, ¿por qué es necesario reafirmar todas las claves?
dsh --profile demo --dump-config¿Cuál es la función de ...?