Both sources sit in tools/, so tsc took tools/ as the root and wrote dist/index.js, while the runtime loads dist/tools/index.js: the module started and served nothing.
Both sources sit in tools/, so tsc took tools/ as the root and wrote dist/index.js, while the runtime loads dist/tools/index.js: the module started and served nothing.