Ct.js is a tool aimed for a spectrum of users that is quite shifted from web developers' one. Game developers neither know nor probably want to use linting and fiddle with the build pipeline. (For better or worse? A debatable separate question.) Editing code outside of ct.js requires quite a lot of work for the audience it doesn't target for. You would somehow need to tell VSCode that this or that code is inside a Copy/Room class, which can be made either by making a separate API for dynamic project declaration (which is an overkill), or by making hacks that add and remove wrappers when editing code separately (which is ugly, error-prone, and hacky). There're no solutions that would suit all the kinds of users and, well, me as a guy who has to also maintain it.
My view is that generic code tools such as linters and code beautifiers should be integrated into ct.js, and be configurable with a well-rounded default settings preset. About npm, the easiest yet fully working method to make such support in ct.js is to make each ct.js project an npm as well, inside its assets' directory, and bundle the needed stuff with rollup or esbuild. Considering that the users know how to import
stuff into their project. Still, it would cover JS code only.