Los plugins están en beta. El comportamiento y la configuración pueden cambiar en futuras versiones.
/<plugin>:<skill>, y también puede incorporar automáticamente otros plugins de los que depende.
Un plugin es simplemente un origen que contiene:
skills/ contiene skills normales; los plugins no introducen ningún
nuevo formato de skill. Consulta Creación de skills para ver el
formato de SKILL.md.
Instalar un plugin
owner/repo de GitHub, una URL de git o una ruta local:
-y / --yes para omitir la
confirmación.
Los plugins se instalan a nivel de usuario y están disponibles en todos tus
proyectos.
Administrar plugins
devin plugins install ./my-plugin → edita skills/<name>/SKILL.md → los cambios
se aplican en la siguiente sesión, sin necesidad de update.
El manifiesto
.devin-plugin/plugin.json describe el plugin. Solo name es obligatorio y
debe ser único entre los plugins instalados (es el espacio de nombres /<name>:…).
name, version, description, author
({ name, email }), homepage, repository, license y keywords.
Una entrada de dependencia es un origen: puede ser una cadena abreviada o un objeto:
"owner/repo"→ GitHub"https://…","git@…","ssh://…"→ URL de git{ "source": "github", "repo": "owner/repo" }{ "source": "url", "url": "https://gitlab.com/team/plugin.git" }
owner/repo, la URL HTTPS, la
URL .git, la forma SSH) se refieren a la misma identidad de plugin.
Dependencias y gobernanza
requiredPlugins
optionalPlugins
forbiddenPlugins
- Una identidad exacta del plugin, escrita como
owner/repo, una URL de git o una ruta local. - Un patrón glob: cualquier entrada que contenga
*. El*coincide con cualquier secuencia de caracteres, incluido/. Los patrones se normalizan primero al espacio de identidad canónica, por lo queacme/*pasa a serhttps://github.com/acme/*(todos los repos de GitHub deacme),*/secretscoincide con un repo llamadosecretsde cualquier propietario, yhttps://gitlab.com/acme/*coincide con cualquier repo en esa ruta. - El valor único
"*", que coincide con todos los demás plugins (un bloqueo total imposible de eludir).
- La denegación prevalece. Un plugin se bloquea si cualquier plugin instalado lo prohíbe (mediante su
identidad exacta, un glob coincidente o
"*"). - Autoexcepción. Los
requiredPlugins,optionalPluginsy el propio plugin quedan exentos de su propia lista de prohibidos. Por lo tanto,forbiddenPlugins: ["*"]junto conoptionalPlugins: [B, C]significa “permitirme a mí mismo, a B y a C; prohibir todo lo demás.” - No se puede volver a permitir entre plugins. Las listas de permitidos de un plugin no pueden volver a permitir
lo que otro plugin prohíbe. Un plugin instalado con
forbiddenPlugins: ["*"]es un bloqueo total imposible de eludir. - Abierto de forma predeterminada. Si ningún plugin instalado prohíbe nada, no se bloquea nada.
- En el momento de la instalación: se rechaza la instalación de un plugin bloqueado (o de uno cuyos plugins requeridos no pueden satisfacerse, o cuyo nombre entra en conflicto con un plugin instalado).
- En el momento de la carga: si un plugin queda bloqueado después de instalarse (por ejemplo, si más tarde se instala un plugin que lo prohíbe), permanece en disco pero sus skills se omiten al inicio de la sesión, con una advertencia que indica qué plugin lo prohíbe.
