opencode update/upgrade times out behind corporate npm mirror: installer hard-codes registry.npmjs.org and ignores configured registry

Open Beginner friendly
#62,403 3 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
68/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
bash, typescript
Domain
cli, devops

Research direction

Read the curl installer at install, especially the registry URLs at lines 195, 199, and 212, and check how it receives npm configuration. Reproduce with a configured registry mirror and confirm the installer uses it for both availability checks and tarball downloads. Done when the update path can use the configured registry and still falls back to npmjs when none is configured.

Written by the indexing model from the issue text.

Description

pending close triaging
Description

opencode update (and the opencode upgrade step it shells out to) times out on networks where registry.npmjs.org is unreachable, even though the machine has a fully working corporate npm mirror (JFrog Artifactory) configured in ~/.npmrc.

Root cause: the curl installer script hard-codes https://registry.npmjs.org in three places, ignoring the configured npm registry:

  • install line 195 — version availability check: https://registry.npmjs.org/$package_scope%2fcli-$target/$specific_version
  • install line 199 — legacy package name fallback, same hard-coded host
  • install line 212 — tarball download: url="https://registry.npmjs.org/$package_name/-/$filename"

On my network registry.npmjs.org connections hang until timeout (the corporate egress proxy never completes the TLS handshake to that host), so both the availability check and the tarball download fail. opencode update reports only "Timed out" with no indication of which URL/host failed, and no way to point it at the internal mirror.

Evidence from this network:

$ curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" https://registry.npmjs.org/@opencode%2fcli-linux-x64/2.2.5
 HTTP 000 / connection hangs (killed after 15 s)

$ curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" https://api.github.com/  # control
 HTTP 200 0.55 s

The internal mirror serves the exact same package and tarball (same path shape, same checksums):

$ curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" \
    https://<internal-artifactory>/api/npm/npm-group-all/@opencode%2fcli-linux-x64/2.2.5
 HTTP 200 2.2 s

Workaround I used: download the GitHub release tarball manually and install it with install --binary, which correctly skips the npm download path.

This is the installer-side instance of the registry problem tracked in #57797 (which covers the Desktop SSH bootstrap). Suggested fix, same as proposed there: respect NPM_CONFIG_REGISTRY / npm_config_registry (and ideally ~/.npmrc registry=) with fallback to https://registry.npmjs.org:

registry="${NPM_CONFIG_REGISTRY:-${npm_config_registry:-https://registry.npmjs.org/}}"
registry="${registry%/}"

then use $registry in place of the three hard-coded URLs. Additionally, failing fast with a clear error naming the unreachable host (instead of a generic "Timed out") would make this class of problem diagnosable.

Steps to reproduce
  1. Be on a network where registry.npmjs.org is unreachable (direct or via corporate egress proxy that cannot reach it), with a working npm mirror set in ~/.npmrc.
  2. Run opencode update with any version prior to the target.
  3. The opencode upgrade --method curl step shells out to the install script, which hangs on registry.npmjs.org and is killed by the updater's timeout.
┌  Upgrade
│ ●  Using method: curl
│ ●  From 2.0.18 → 2.2.5
│ ■  Upgrade failed
│ ■  The OpenCode installer failed
│ │  Timed out
│ │  Command  opencode upgrade 2.2.5 --method curl
└  Failed
OpenCode version

2.0.18 → 2.2.5 (upgrade attempt); affected installer script served at https://opencode.ai/v2/install

Operating System

RHEL 8 x86_64 (linux-x64)

Terminal

bash

Dominant language
TypeScript
Stars
224k
Forks
30k
Avg merge
4h 44m
Merged PRs (30d)
513

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from anomalyco/opencode

All issues in anomalyco/opencode

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.