Plugins
Resolução de dependências de Plugin
OpenClaw mantém o trabalho de dependências de plugins no momento de instalação/atualização. O carregamento em runtime não executa gerenciadores de pacotes, repara árvores de dependências nem modifica o diretório de pacote do OpenClaw.
Divisão de responsabilidades
Os pacotes de plugins são responsáveis pelo próprio grafo de dependências:
- dependências de runtime ficam em
dependenciesouoptionalDependenciesno pacote do plugin - importações do SDK/core são importações peer ou fornecidas pelo OpenClaw
- plugins de desenvolvimento local trazem suas próprias dependências já instaladas
- plugins npm e git são instalados em raízes de pacote pertencentes ao OpenClaw
O OpenClaw é responsável apenas pelo ciclo de vida do plugin:
- descobrir a origem do plugin
- instalar ou atualizar o pacote quando solicitado explicitamente
- registrar os metadados da instalação
- carregar o ponto de entrada do plugin
- falhar com um erro acionável quando dependências estiverem ausentes
Raízes de instalação
O OpenClaw usa raízes estáveis por origem:
- pacotes npm são instalados em
~/.openclaw/npm - pacotes git são clonados em
~/.openclaw/git - instalações locais/por caminho/arquivo são copiadas ou referenciadas sem reparo de dependências
Instalações npm rodam na raiz npm com:
npm install --prefix ~/.openclaw/npm <spec> --omit=dev --omit=peer --legacy-peer-deps --ignore-scripts --no-audit --no-fund
openclaw plugins install npm-pack:<path.tgz> usa essa mesma raiz npm gerenciada
para um tarball npm-pack local. O OpenClaw lê os metadados npm do tarball, adiciona-o
à raiz gerenciada como uma dependência file: copiada, executa a instalação npm normal
e então verifica os metadados do lockfile instalado antes de confiar no plugin.
Isso é destinado a provas de aceitação de pacote e candidatos a release em que um
artefato pack local deve se comportar como o artefato de registro que ele simula.
O npm pode elevar dependências transitivas para ~/.openclaw/npm/node_modules ao lado
do pacote do plugin. O OpenClaw examina a raiz npm gerenciada antes de confiar na
instalação e usa npm para remover pacotes gerenciados por npm durante a desinstalação, então dependências
de runtime elevadas permanecem dentro do limite de limpeza gerenciada.
Plugins que importam openclaw/plugin-sdk/* declaram openclaw como uma dependência peer.
O OpenClaw não permite que o npm instale uma cópia separada do pacote hospedeiro vinda do registro
na raiz gerenciada, porque pacotes hospedeiros obsoletos podem afetar a resolução peer do npm
durante instalações posteriores de plugins. Instalações npm gerenciadas pulam a resolução/materialização peer do npm
para a raiz compartilhada, e o OpenClaw reafirma links node_modules/openclaw locais do plugin
para pacotes instalados que declaram o peer hospedeiro após instalar, atualizar ou desinstalar.
Instalações git clonam ou atualizam o repositório e então executam:
npm install --omit=dev --ignore-scripts --no-audit --no-fund
O plugin instalado então é carregado a partir desse diretório de pacote, então a resolução de
node_modules local do pacote e pai funciona da mesma forma que para um pacote Node normal.
Plugins locais
Plugins locais são tratados como diretórios controlados pelo desenvolvedor. O OpenClaw não
executa npm install, pnpm install nem reparo de dependências para eles. Se um
plugin local tiver dependências, instale-as nesse plugin antes de carregá-lo.
Plugins locais TypeScript de terceiros podem usar o caminho emergencial do Jiti. Plugins JavaScript empacotados e plugins internos incluídos carregam por import/require nativo em vez de Jiti.
Inicialização e recarregamento
A inicialização do Gateway e o recarregamento de configuração nunca instalam dependências de plugins. Eles leem os registros de instalação do plugin, calculam o ponto de entrada e o carregam.
Se uma dependência estiver ausente em runtime, o plugin falha ao carregar e o erro deve apontar o operador para uma correção explícita:
openclaw plugins update <id>
openclaw plugins install <source>
openclaw doctor --fix
doctor --fix pode limpar estado de dependências legado gerado pelo OpenClaw e recuperar
plugins baixáveis que estão ausentes dos registros de instalação locais quando a configuração
os referencia. O Doctor não repara dependências para um plugin local já instalado.
Plugins incluídos
Plugins incluídos leves e críticos para o core são distribuídos como parte do OpenClaw. Eles devem não ter uma árvore pesada de dependências de runtime ou ser movidos para um pacote baixável no ClawHub/npm.
Para a lista gerada atual de plugins que são distribuídos no pacote core, instalados externamente ou mantidos apenas como código-fonte, consulte Inventário de plugins.
Manifestos de plugins incluídos não devem solicitar preparação de dependências. Funcionalidade grande ou opcional de plugin deve ser empacotada como um plugin normal e instalada pelo mesmo caminho npm/git/ClawHub que plugins de terceiros.
Em checkouts de código-fonte, o OpenClaw trata o repositório como um monorepo pnpm. Após
pnpm install, plugins incluídos carregam a partir de extensions/<id>, para que dependências
workspace locais do pacote fiquem disponíveis e edições sejam incorporadas diretamente. Desenvolvimento em
checkout de código-fonte usa somente pnpm; npm install simples na raiz do repositório não é
uma forma compatível de preparar dependências de plugins incluídos.
| Formato de instalação | Local do plugin incluído | Responsável pelas dependências |
|---|---|---|
npm install -g openclaw |
Árvore de runtime construída dentro do pacote | Pacote OpenClaw e fluxos explícitos de install/update/doctor de plugins |
Checkout git mais pnpm install |
Pacotes workspace em extensions/<id> |
O workspace pnpm, incluindo as próprias dependências de cada pacote de plugin |
openclaw plugins install ... |
Raiz gerenciada de plugin npm/git/ClawHub | O fluxo de install/update do plugin |
Limpeza legada
Versões antigas do OpenClaw geravam raízes de dependências de plugins incluídos na inicialização ou
durante reparo do doctor. A limpeza atual do doctor remove esses diretórios e
symlinks obsoletos quando --fix é usado, incluindo raízes antigas plugin-runtime-deps, symlinks de pacote de
prefixo Node global que apontam para destinos plugin-runtime-deps podados,
manifestos .openclaw-runtime-deps*, node_modules de plugin gerado, diretórios de
estágio de instalação e stores pnpm locais de pacote. O postinstall empacotado também
remove esses symlinks globais antes de podar as raízes de destino legadas, para que upgrades
não deixem importações de pacote ESM pendentes.
Esses caminhos são apenas resíduos legados. Novas instalações não devem criá-los.