opencode 1.17.11-main.4
Stable release from the main branch. Adds offline model catalog startup with graceful fallback, and fixes the Windows TUI crash ([Reconciler] Unknown component type: spinner) via a two-part fix targeting both lockfile dedupe and bundler tree-shaking. Brings accumulated dev work to main via #92.
🎯 Features
- Offline model catalog startup (#88, #89): When models.dev is unreachable or the network is offline, the catalog now falls back to a bundled snapshot instead of failing startup. Provider defects during catalog loading are mapped to named 4xx responses rather than generic 500s, so the client can react appropriately. Adds a new
models-dev.fetch_failedevent for surfacing fetch failures.
🐛 Bug Fixes
- Windows spinner crash — lockfile dedupe (#90): Stale nested
@opentui/{core,solid}@0.4.2lockfile entries caused Windows CI's hoisted linker to materialize a second@opentui/solidinstance → removed the stale entries so the spinner's peers dedupe to the single 0.4.3 instance. macOS/Linux were unaffected (isolated linker). - Windows spinner crash — tree-shaking root cause (#91):
bun buildon a Windows host dropped the side-effect-onlyimport "opentui-spinner/solid"because itssideEffectspath glob does not match backslash paths → registered the spinner explicitly viaextend({ spinner: SpinnerRenderable })in local modules imported by every<spinner>render path, which carries a real value dependency the bundler cannot tree-shake. - Event manifest test count (#93): The
models-dev.fetch_failedevent added by #88 bumpedEventManifest.Latest.sizefrom 90 to 91 → updated the assertion to match.
🧪 Test Summary
typecheck: packages/tui + packages/opencode green (tsgo --noEmit)
event-manifest: 2 pass, 0 fail
build: opencode-linux-x64 (1m47s) / darwin-arm64 (4m30s) / windows-x64 (6m37s) smoke test passed
spinner-runtime: main.4 Windows binary contains spinner runtime (1 hit, was 0 in main.1–3)
e2e (windows): spinner renders, conversation works, no crash
CI gate (#92): Typecheck ✅ | Unit Tests (linux) ✅ | E2E (linux) ✅ | E2E (windows) ✅
🔍 Verification
Root-cause confirmed via binary inspection of released artifacts. The v1.17.11-dev.10 Windows opencode.exe contained zero spinner runtime strings (Spinner interval must be a finite = 0 hits), while the macOS binary from the same release contained them (1 hit) — confirming the registration code was tree-shaken out on Windows only. After the fix, both v1.17.11-dev.11 (prerelease) and v1.17.11-main.4 (this release) Windows binaries contain the spinner runtime (1 hit each), and Windows end-to-end smoke testing confirmed the crash is resolved.
All three prior main releases (main.1–3) are affected. Binary inspection of their Windows artifacts confirmed zero spinner runtime hits across all three. Warning banners have been added to their release notes directing Windows users to v1.17.11-main.4.
Local verification. bun typecheck passed in both packages/tui and packages/opencode. ./packages/opencode/script/build.ts --single produced a working binary; smoke test passed. The event-manifest.test.ts assertion fix was verified locally (2 pass, 0 fail).
CI gate (PR #92) passed the full main quality gate: Typecheck + Unit Tests (linux) + E2E Tests (linux) + E2E Tests (windows) — all green before merge.
Full changelog: v1.17.11-main.3...v1.17.11-main.4