Diagnostics
Node + tsx loopt vast
Node + tsx "__name is not a function"-crash
Samenvatting
OpenClaw uitvoeren via Node met tsx mislukt bij het opstarten met:
[openclaw] Failed to start CLI: TypeError: __name is not a function
at createSubsystemLogger (.../src/logging/subsystem.ts:203:25)
at .../src/agents/auth-profiles/constants.ts:25:20
Dit begon nadat dev-scripts waren overgezet van Bun naar tsx (commit 2871657e, 2026-01-06). Hetzelfde runtime-pad werkte met Bun.
Omgeving
- Node: v25.x (waargenomen op v25.3.0)
- tsx: 4.21.0
- OS: macOS (reproductie waarschijnlijk ook op andere platforms die Node 25 uitvoeren)
Reproductie (alleen Node)
# in repo root
node --version
pnpm install
node --import tsx src/entry.ts status
Minimale reproductie in repo
node --import tsx scripts/repro/tsx-name-repro.ts
Node-versiecontrole
- Node 25.3.0: mislukt
- Node 22.22.0 (Homebrew
node@22): mislukt - Node 24: hier nog niet geïnstalleerd; vereist verificatie
Opmerkingen / hypothese
tsxgebruikt esbuild om TS/ESM te transformeren. esbuildskeepNamesemit een__name-helper en wikkelt functiedefinities met__name(...).- De crash geeft aan dat
__nametijdens runtime bestaat maar geen functie is, wat impliceert dat de helper ontbreekt of voor deze module in het Node 25-loaderpad is overschreven. - Vergelijkbare problemen met de
__name-helper zijn gemeld in andere esbuild-gebruikers wanneer de helper ontbreekt of herschreven wordt.
Regressiegeschiedenis
2871657e(2026-01-06): scripts gewijzigd van Bun naar tsx om Bun optioneel te maken.- Daarvoor (Bun-pad) werkten
openclaw statusengateway:watch.
Tijdelijke oplossingen
-
Gebruik Bun voor dev-scripts (huidige tijdelijke revert).
-
Gebruik
tsgovoor repo-typecontrole en voer daarna de gebouwde output uit:pnpm tsgo node openclaw.mjs status -
Historische opmerking:
tscwerd hier gebruikt tijdens het debuggen van dit Node/tsx-probleem, maar repo-typecontrolelanes gebruiken nutsgo. -
Schakel esbuild keepNames in de TS-loader uit als dat mogelijk is (voorkomt invoeging van de
__name-helper); tsx biedt dit momenteel niet aan. -
Test Node LTS (22/24) met
tsxom te zien of het probleem specifiek is voor Node 25.
Referenties
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Volgende stappen
- Reproduceer op Node 22/24 om de Node 25-regressie te bevestigen.
- Test
tsxnightly of pin op een eerdere versie als er een bekende regressie bestaat. - Als dit reproduceert op Node LTS, dien dan upstream een minimale reproductie in met de
__name-stacktrace.