Deprecate npm distribution of Duo CLI in favor of binary-only releases
:robot: AI-generated The Duo CLI (`@gitlab/duo-cli`) is currently distributed as an npm package installed via `npm install -g @gitlab/duo-cli`. This distribution method has fundamental limitations we need to address: 1. **Node.js and npm version conflicts** — users encounter issues with incompatible Node.js and npm versions that we cannot control. The npm distribution requires users to have a compatible Node.js runtime, and version mismatches lead to hard-to-debug failures. 2. **Binary gives full control over execution** — precompiled binaries bundle the runtime (currently Node.js, and in the future potentially Bun), eliminating version conflicts entirely. Users download a single binary that just works. 3. **Reduces release channels and maintenance overhead** — supporting both npm and binary distribution doubles the release surface area. Each release must be tested and published through two channels with different failure modes (npm registry issues, binary hosting). Consolidating to binaries simplifies CI/CD and reduces the operational burden. 4. **Enables migration to OpenTUI** — the [OpenTUI](https://github.com/nicholasgasior/opentui) TUI framework requires the Bun runtime, which is incompatible with npm distribution. Moving to binary-only distribution unblocks [#2401 Migrate Duo CLI TUI from ink to OpenTUI](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/work_items/2401), which brings significant rendering improvements and resolves long-standing TUI issues tracked in [#1947](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/work_items/1947). ### Context - `glab duo cli` already distributes Duo CLI as a binary, auto-downloaded on first run ([docs](https://docs.gitlab.com/ee/editor_extensions/gitlab_cli/#gitlab-duo-for-the-cli)) - The standalone binary has been available since the Beta release - Headless mode (`duo run`) used in CI environments currently relies on npm/node but should migrate to binaries to avoid the same version conflicts - Elwyn's [OpenTUI migration PoC](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/merge_requests/3354) demonstrates the migration is feasible but requires dropping npm distribution since OpenTUI depends on Bun's FFI ### Child issues 1. [#2398 Spike: Decide on npm deprecation migration path](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/work_items/2398) 2. [#2399 Implement npm deprecation warning](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/work_items/2399) 3. [#2400 Deprecate and sunset the npm release](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/work_items/2400) ### Related (not part of this epic) - [#2401 Migrate Duo CLI TUI from ink to OpenTUI](https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/work_items/2401) (blocked by #2400)
epic