I'm not sure - all I know is that it's different from how I prefer it, and "pkg" is the one thing I frequently see people dislike ;)
If you want to share packages, parent them to the project directory. Anything you feel is too niche you can hide inside internal/. Binaries in cmd/ makes it nice and tidy, but you can get away with top-level main packages if there's only one command and it's really simple (few source files to clutter it up).
I might make a server cmd the same name as the project directory, and if possible, make it have CLI options to control itself (talk via local socket, gRPC, REST, whatever). Pleasing VS Code is mainly about configuring the build task(s). I like to have Release and Debug tasks, sometimes with tasks requiring other tasks (client-server projects, for instance).
So one of my web server app layouts might be something like this:
foo/
|--foo (binary)
|--auth/
|--<any number of content-specific package>
|--static/
|--css/
|--js/
|--tpl/
While a tool with some less standard packages of utility content might look like this:
bar/
|--cmd/
| |--binary1/ (and so on)
|--<misc. package directories>
|--internal/
|--<various command-specific packages, for instance shared options and flags>
I try to give server/client parts of a multi-binary system somewhat useful names, even it it means a little "stutter". For instance, the server app might reside in "foo/cmd/foo", and the manager is in "foo/cmd/foomgr/". I don't really like hyphens and underscores in names, but I'm not sure if there's any technical reason you should use them. It might be a matter of taste. Some programs might have "foo" as the main command, and the other "foo-" commands are possible to run alone, but also hidden behind options in "foo".
I also decide from time to time that I hate everything about my project layouts and redo everything, so don't consider this advice, or even useful.
I haven't looked closely at the current state of modules to say anything about how it'll change up my standards, but it looks like we're expected to run module stuff out of the top-level directory. If not, aren't those parts better off breaking out into their own standalone projects? Running module setup in sub-directories with potentially different versions of external dependencies feels dirty.