Falha com Node + tsx “__name is not a function”
Resumo
Executar o OpenClaw via Node comtsx falha na inicialização com:
tsx (commit 2871657e, 2026-01-06). O mesmo caminho de runtime funcionava com Bun.
Ambiente
- Node: v25.x (observado em v25.3.0)
- tsx: 4.21.0
- SO: macOS (a reprodução também é provável em outras plataformas que executam Node 25)
Reprodução (somente Node)
Reprodução mínima no repositório
Verificação da versão do Node
- Node 25.3.0: falha
- Node 22.22.0 (Homebrew
node@22): falha - Node 24: ainda não instalado aqui; precisa de verificação
Observações / hipótese
tsxusa esbuild para transformar TS/ESM. OkeepNamesdo esbuild emite um helper__namee envolve definições de função com__name(...).- A falha indica que
__nameexiste, mas não é uma função em runtime, o que implica que o helper está ausente ou foi sobrescrito para esse módulo no caminho do loader do Node 25. - Problemas semelhantes com o helper
__namejá foram relatados em outros consumidores do esbuild quando o helper está ausente ou é reescrito.
Histórico da regressão
2871657e(2026-01-06): scripts mudaram de Bun para tsx para tornar Bun opcional.- Antes disso (caminho com Bun),
openclaw statusegateway:watchfuncionavam.
Soluções alternativas
- Use Bun para scripts de desenvolvimento (reversão temporária atual).
-
Use Node + watch do tsc e depois execute a saída compilada:
-
Confirmado localmente:
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusfunciona no Node 25. -
Desative
keepNamesdo esbuild no loader TS, se possível (isso evita a inserção do helper__name); atualmente o tsx não expõe isso. -
Teste Node LTS (22/24) com
tsxpara verificar se o problema é específico do Node 25.
Referências
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Próximos passos
- Reproduzir em Node 22/24 para confirmar regressão no Node 25.
- Testar
tsxnightly ou fixar uma versão anterior se existir uma regressão conhecida. - Se reproduzir em Node LTS, abrir uma reprodução mínima upstream com o stack trace de
__name.