Diagnostics
Збій Node + tsx
Збій Node + tsx "__name is not a function"
Підсумок
Запуск OpenClaw через Node з tsx завершується помилкою під час старту:
[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Це почалося після переходу dev-скриптів з Bun на tsx (коміт 2871657e, 2026-01-06). Той самий runtime-шлях працював із Bun.
Середовище
- Node: v25.x (спостерігалося на v25.3.0)
- tsx: 4.21.0
- ОС: macOS (відтворення також імовірне на інших платформах, де працює Node 25)
Відтворення (лише Node)
# in repo rootnode --versionpnpm installnode --import tsx src/entry.ts statusМінімальне відтворення в репозиторії
node --import tsx scripts/repro/tsx-name-repro.tsПеревірка версії Node
- Node 25.3.0: падає
- Node 22.22.0 (Homebrew
node@22): падає - Node 24: тут ще не встановлено; потребує перевірки
Нотатки / гіпотеза
tsxвикористовує esbuild для трансформації TS/ESM.keepNamesв esbuild створює допоміжну функцію__nameі обгортає визначення функцій у__name(...).- Збій вказує, що
__nameіснує, але під час виконання не є функцією, що означає, що допоміжна функція відсутня або перезаписана для цього модуля в шляху завантажувача Node 25. - Схожі проблеми з допоміжною функцією
__nameповідомлялися в інших споживачів esbuild, коли допоміжна функція була відсутня або переписувалася.
Історія регресії
2871657e(2026-01-06): скрипти змінено з Bun на tsx, щоб зробити Bun необов'язковим.- До цього (шлях Bun)
openclaw statusіgateway:watchпрацювали.
Обхідні рішення
-
Використовуйте Bun для dev-скриптів (поточний тимчасовий відкат).
-
Використовуйте
tsgoдля перевірки типів репозиторію, потім запускайте зібраний вивід:bash pnpm tsgonode openclaw.mjs status -
Історична примітка:
tscвикористовувався тут під час налагодження цієї проблеми Node/tsx, але зараз lanes перевірки типів репозиторію використовуютьtsgo. -
Вимкніть esbuild keepNames у TS-завантажувачі, якщо можливо (це запобігає вставленню допоміжної функції
__name); наразі tsx цього не надає. -
Перевірте Node LTS (22/24) з
tsx, щоб з'ясувати, чи проблема специфічна для Node 25.
Посилання
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Наступні кроки
- Відтворити на Node 22/24, щоб підтвердити регресію Node 25.
- Перевірити nightly-версію
tsxабо закріпити ранішу версію, якщо існує відома регресія. - Якщо відтворюється на Node LTS, подати мінімальне відтворення upstream зі стеком
__name.