build(ui): upgrade to TypeScript 7 and align the Node 26 toolchain - #3379
Merged
SamMorrowDrums merged 1 commit intoOct 2, 2026
Merged
Conversation
Read the CI Node version from UI engines and match Docker and Node types.\nDocument the native compiler workflow without changing UI dependencies. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
The dependency, lockfile, CI, Docker, and documentation changes are consistent and internally aligned.
Review effort: Balanced
Findings: None
What changed in this PR
Upgrades the UI to TypeScript 7 and Node.js 26 while aligning CI, Docker, and contributor documentation.
Changes:
- Upgrades TypeScript, Node typings, and associated lockfile dependencies.
- Configures UI and CodeQL workflows to derive Node 26 from
package.json. - Documents the updated UI development workflow.
| File | Description |
|---|---|
ui/package.json |
Updates Node requirements and TypeScript dependencies. |
ui/package-lock.json |
Locks compiler binaries and updated typings. |
CONTRIBUTING.md |
Documents Node 26 and TypeScript 7 usage. |
.github/workflows/code-scanning.yml |
Aligns JavaScript CodeQL with the UI Node version. |
.github/actions/build-ui/action.yml |
Aligns UI builds with the declared Node version. |
Files not reviewed (1)
- ui/package-lock.json: Generated file
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
SamMorrowDrums
deleted the
sammorrowdrums-typescript-node-runtime-alignment
branch
October 2, 2026 10:20
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.
Summary
Upgrade the UI to native TypeScript 7.0.2 and @types/node 26.6.4. Align CI and local UI requirements with the existing Node 26 Docker build stage.
Why
Follow-up to #3370 for the two deferred UI toolchain upgrades. CI previously selected Node 22 for UI builds and Node 20 for JavaScript CodeQL, while Docker already used Node 26 and the UI types targeted Node 25.
Node 26 is a supported Current release, newer than the LTS line; it enters LTS on October 28, 2026. It only builds the embedded UI, rather than running the production server. Keeping Docker's major avoids changing its pinned image. Vite 8.3.2 and @vitejs/plugin-react 6.1.1 accept Node 26 through their
>=22.12.0engine ranges; actions/setup-node supports reading the engine range from package.json.What changed
^26.0.0; both setup-node consumers readui/package.json. The Docker UI stage stays on the existing digest-pinnednode:26-alpineimage.tsccommand. Vite handles transpilation and bundling independently; there is no TypeScript compiler API integration, typescript-eslint, or ts-node dependency blocking TS 7. No TS 6 fallback is needed. Source types and all existing tsconfig options pass unchanged, so no deprecated-option workaround or source edits are required.MCP impact
Only the UI build/type-check toolchain and runtime configuration change; MCP schemas and behavior are unchanged.
Prompts tested (tool changes only)
Security / limits
No runtime auth, permissions, data exposure, or limits changes. npm audit reports zero vulnerabilities.
Tool renaming
deprecated_tool_aliases.goNo tools are renamed.
Note: if you're renaming tools, you must add the tool aliases. For more information on how to do so, please refer to the official docs.
Lint & tests
./script/lint./script/testCommands and results:
cd ui && npm ci && npm run typecheck && npm run build && npm audit— passed in the Dockerfile's exact digest-pinned Node image (Node 26.5.0 / npm 11.17.0), because the host has Node 22. All four bundles built; audit found zero vulnerabilities.GOTOOLCHAIN=go1.26.8 script/lint— passed, zero issues. Used the documented toolchain override for the repository-pinned linter's Go export-data compatibility.script/test— passed, full Go race-test suite.docker build --target ui-build -t github-mcp-server-ui-toolchain-check .— passed.tar -cf - Dockerfile .dockerignore ui/package.json ui/package-lock.json ui/tsconfig.json ui/vite.config.ts ui/src ui/scripts | docker build --target ui-build -t github-mcp-server-ui-toolchain-check -— passed again with a clean context excluding local node_modules.docker run --rm -w /app/ui github-mcp-server-ui-toolchain-check sh -c 'node --version && npm exec tsc -- --version && npm run typecheck && npm ls typescript @types/node react @primer/react @modelcontextprotocol/ext-apps --depth=0'— passed, confirming compiler 7.0.2 and type checking inside the freshly built Alpine stage.git diff --check— passed. A structured lockfile comparison confirmed that only TypeScript/native binaries, Node types, undici-types, and root metadata changed.Vite emits an existing advisory about future native config loading and
__dirname; current builds succeed. That unrelated future migration is not changed here. Live GitHub E2E tests and the complete Docker server image were not run; the requested UI stage was built.Docs
CONTRIBUTING.md now documents the Node 26 and TypeScript 7 UI workflow.