* feat: add colorblind-friendly theme
Add a new colorblind-accessible theme using a scientifically-designed
palette that works for deuteranopia, protanopia, and tritanopia:
- Primary Blue (#0077BB) for main UI elements
- Secondary Orange (#EE7733) for variables and operators
- Success Teal (#009988) instead of green for success states
- Warning Yellow (#CCBB44) for warnings
- Error Vermillion (#CC3311) instead of red for errors
- Accent Sky (#33BBEE) for functions and links
Key design principles:
- No red/green combinations (most common color blindness)
- Blue/orange as primary contrasting colors
- Teal/vermillion for diff colors instead of green/red
- High luminance contrast between adjacent colors
* Update packages/opencode/src/cli/cmd/tui/context/theme.tsx
Co-authored-by: Marius <marius@kilocode.ai>
* Update packages/opencode/src/cli/cmd/tui/context/theme.tsx
Co-authored-by: Marius <marius@kilocode.ai>
* Update packages/opencode/src/cli/cmd/tui/context/theme/colorblind.json
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
* Update packages/opencode/src/cli/cmd/tui/context/theme/colorblind.json
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
* fix malformed block
---------
Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
Co-authored-by: Marius <marius@kilocode.ai>
Co-authored-by: kilo-code-bot[bot] <240665456+kilo-code-bot[bot]@users.noreply.github.com>
Handle tab-close paths where the shell dies without forwarding SIGHUP/SIGTERM, which left `bun run ...` alive as an orphan. Add a parent-liveness watchdog in the TUI thread and route shutdown through a single idempotent `shutdownAndExit` path. Also guard the normal `process.exit(0)` path so signal/parent-exit codes are not overridden.
The setTimeout fallback in terminateWorker can keep the event loop open
even when the worker exits promptly, delaying shutdown paths triggered
by signals. Unref the timer so normal fast shutdown is not blocked by
this fallback.
terminateWorker is registered on SIGHUP, SIGTERM, and used in onExit.
If a signal fires and then onExit triggers (or two signals arrive),
worker.terminate() and client.call('shutdown') would fire redundantly.
Cache the pending promise so subsequent calls return the same operation.
The shutdown RPC call to the worker thread never resolved because the worker's event loop drained after cleanup, preventing the postMessage result from being delivered back to the main thread. This left process.exit() unreachable and the process hanging indefinitely.
Replace the blocking await with a fire-and-forget shutdown RPC that waits for the worker's close event (up to 5s timeout) before calling worker.terminate().