- Replace generic dialog content with custom panel layout
- Add animated GO block logo reusing the existing opencode logo
shimmer/click-burst system via a new shape prop on Logo
- Add idle shimmer mode: continuous tight white specular highlight
traveling across lit letter pixels only (shadow cells excluded)
- Add BgPulse component: radial primary-tinted rings emanating from
the GO center, phase-synced with the logo shimmer so rings emit
exactly when the shine reaches the center of GO
- Pixel-accurate centering via refs on the logo box
- Buttons reordered: 'don't show again' bottom-left, 'subscribe'
bottom-right and default-selected
Config is now loaded eagerly during project bootstrap so users can see config loading in traces during startup. This helps diagnose configuration issues earlier in the initialization flow.
NPM installation logic has been refactored with a unified reify function and improved InstallFailedError that includes both the packages being installed and the target directory. This provides users with complete context when package installations fail, making it easier to identify which dependency or project directory caused the issue.
Extract error handling, parsing logic, and variable substitution into dedicated
modules. This reduces duplication between tui.json and opencode.json parsing
and makes the config system easier to extend for future config formats.
Adds explanatory comments to config.ts and plugin.ts clarifying:
- How plugin specs are stored and normalized during config loading
- Why plugin_origins tracks provenance for location-sensitive decisions
- Why path-like specs are resolved early to prevent reinterpretation during merges
- How plugin deduplication works while keeping origin metadata for writes and diagnostics
Fixes potential plugin resolution issues when switching between projects by wrapping
plugin loading in Instance.provide(). This ensures each plugin resolves dependencies
relative to its correct project directory instead of inheriting context from whatever
instance happened to be active.
Also reorganizes config loading code into focused modules (command.ts, managed.ts,
plugin.ts) to make the codebase easier to maintain and test.