Triage
Confirmed. Local OpenCode health checks run <binary> --version and fail the provider if that does not return within a hardcoded 4s budget. Settings then shows Unavailable.
| 1 | const OPENCODE_VERSION_PROBE_TIMEOUT = "4 seconds"; |
On timeout, checkOpenCodeProviderStatus returns probe.status: "error" with version: null. The registry keeps cached models/skills for a failed installed OpenCode probe, but it does not keep the previous ready status or version. There is no settings or env override (OpenCodeSettings is binary path / server URL / password only). External-server mode skips this CLI version probe.
This timeout was added on purpose in #8750 to close #8681 (wrappers that hung --version for hours and burned CPU). The process-group kill on timeout should stay. A ~4.7s cold wrapper is just on the wrong side of a budget that was meant for hangs, not slow-but-healthy startups. Claude/Grok use the same 4s CLI default; Cursor already allows 8s for a slower probe.
Suggested fix (smallest first):
- Raise the OpenCode version-probe timeout to ~8β10s so realistic wrapper cold starts can finish.
- If we already had a ready, versioned snapshot, do not flip to
erroron a single timeout βwarningor last-known-good is enough. A hang still dies at the cap.
A per-instance timeout setting is more machinery than this needs unless wrappers stay common after (1)/(2). The --version short-circuit workaround is reasonable until then.
Not a duplicate of #8681 (that was βno timeoutβ). Minor, intermittent, recovers on the next warm probe or a manual refresh.