Mason's bin/ directory contains a symlink to the actual wrapper script in packages/<name>/bin/. The wrapper used $(dirname "$0") which resolved to mason/bin/ (the symlink location), then ../src/main.lua pointed to mason/src/main.lua which doesn't exist. Use readlink -f to resolve the symlink first, so dirname points to packages/tia-lsp/bin/ and ../src/main.lua correctly resolves to packages/tia-lsp/src/main.lua.