node language-servers: private-libexec install + symlink launchers - #438
Merged
Conversation
Retrofit bash-language-server, typescript-language-server, and pyright off the global usr/lib/node_modules onto the private-libexec method (twitchyliquid64's #370 review): a tool's usr/lib/node_modules/** output overlaps the node/node-lts runtime's ownership of that path and welds it to one node variant. Each now installs into usr/libexec/<pkg> and exposes its bins as relative symlinks on PATH — the inner `#!/usr/bin/env node` shebang is served by coreutils(env)+node, so runtime_deps=[coreutils, node] stays correct (a `#!/bin/sh` wrapper would need bash in the closure and fail at runtime while still passing minimal check). Build-proven; all bins verified as symlinks resolving into libexec, no global leak — including typescript-language-server's THREE bins (itself + tsc/tsserver from the pinned typescript@5.9.3) and pyright's two. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughThe three npm-based packages now install into package-specific ChangesPrivate libexec installation
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
twitchyliquid64
approved these changes
Jul 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Retrofit the three node language servers off the global
usr/lib/node_modulesonto the private-libexec method — the same fix as #370, applied to the existing packages that had the same shape.Why
twitchyliquid64's review on #370: a node CLI's
usr/lib/node_modules/**output glob overlaps thenode/node-ltsruntime's ownership of that path and welds the tool to one node variant.What
Each tool now installs into a package-private
usr/libexec/<pkg>prefix and exposes its bins as relative symlinks on PATH (usr/bin/<tool>→../libexec/<pkg>/bin/<tool>). The inner#!/usr/bin/env nodeshebang is served bycoreutils(env)+node, soruntime_deps=[coreutils, node]stays correct — matchingpnpm/agent-browser. (Deliberately not a#!/bin/shwrapper: it'd needbashin the closure and fail at runtime with "bad interpreter" while still passingminimal check— a review pass caught that.)Build-proven
Rebuilt all three; every bin verified as a symlink resolving through
libexecto the node script, zero leak intousr/lib/node_modules:pyright,pyright-langserver)typescript-language-server+tsc/tsserverfrom the pinnedtypescript@5.9.3), all present — the multi-bin loop overbin/*catches the sibling package's binsThe
typescript@5.9.3pin is kept verbatim.Part of the node-packaging cleanup started in #370. Remaining node packages on the old global pattern (
cf,mermaid-cli,next,wrangler,capy) + theimport-wolfigenerator fix are follow-ups.🤖 Generated with Claude Code
Summary by CodeRabbit
PATH.