Node + tsx “__name is not a function” Crash

Zusammenfassung

OpenClaw über Node mit tsx starten schlägt beim Start fehl mit:

[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

Das begann nach dem Wechsel der Dev-Skripte von Bun auf tsx (Commit 2871657e, 2026-01-06). Der gleiche Runtime-Pfad funktionierte mit Bun.

Umgebung

  • Node: v25.x (beobachtet auf v25.3.0)
  • tsx: 4.21.0
  • OS: macOS (Reproduktion wahrscheinlich auch auf anderen Plattformen mit Node 25)

Reproduktion (nur Node)

# im Repo-Root
node --version
pnpm install
node --import tsx src/entry.ts status

Minimale Reproduktion im Repo

node --import tsx scripts/repro/tsx-name-repro.ts

Node-Versions-Check

  • Node 25.3.0: schlägt fehl
  • Node 22.22.0 (Homebrew node@22): schlägt fehl
  • Node 24: hier noch nicht installiert; Verifizierung nötig

Notizen / Hypothese

  • tsx nutzt esbuild um TS/ESM zu transformieren. esbuilds keepNames emittiert einen __name-Helper und umschließt Funktionsdefinitionen mit __name(...).
  • Der Crash deutet darauf hin, dass __name existiert, aber zur Laufzeit keine Funktion ist, was bedeutet, dass der Helper im Node-25-Loader-Pfad für dieses Modul fehlt oder überschrieben wurde.
  • Ähnliche __name-Helper-Probleme wurden bei anderen esbuild-Nutzern gemeldet, wenn der Helper fehlt oder umgeschrieben wird.

Regressions-Verlauf

  • 2871657e (2026-01-06): Skripte von Bun auf tsx geändert, um Bun optional zu machen.
  • Davor (Bun-Pfad) funktionierten openclaw status und gateway:watch.

Workarounds

  • Bun für Dev-Skripte verwenden (aktueller temporärer Revert).

  • Node + tsc watch verwenden, dann kompilierte Ausgabe starten:

    pnpm exec tsc --watch --preserveWatchOutput
    node --watch openclaw.mjs status
  • Lokal bestätigt: pnpm exec tsc -p tsconfig.json + node openclaw.mjs status funktioniert auf Node 25.

  • esbuild keepNames im TS-Loader deaktivieren, falls möglich (verhindert __name-Helper-Einbindung); tsx bietet das aktuell nicht an.

  • Node LTS (22/24) mit tsx testen, um zu prüfen, ob das Problem Node-25-spezifisch ist.

Referenzen

Nächste Schritte

  • Reproduktion auf Node 22/24, um eine Node-25-Regression zu bestätigen.
  • tsx Nightly testen oder auf frühere Version pinnen, falls eine bekannte Regression vorliegt.
  • Falls auf Node LTS reproduzierbar, minimale Reproduktion upstream melden mit dem __name Stack-Trace.