spawn/packages/cli/src/unicode-detect.ts
A 65f6f1be32
feat: Bun workspace monorepo — packages/cli + packages/shared (#1853)
Restructure the repo as a Bun workspace monorepo:

- Move cli/ → packages/cli/
- Create packages/shared/ (@openrouter/spawn-shared) with type-guards and parse utilities
- Add root package.json with workspace configuration
- Update all CLI imports to use @openrouter/spawn-shared
- Deduplicate toRecord/toObjectArray helpers from 4 cloud modules
- Update SPA (slack-bot) to use shared package instead of local toObj()
- Update 48 agent shell scripts for new packages/cli/ path
- Update install.sh, install.ps1, e2e, and test scripts
- Update all GitHub workflows, .gitignore, pre-commit hooks
- Update CLAUDE.md, README.md, and skill prompt references
- Pin all dependency versions (no ^ ranges)
- Bump CLI version 0.9.1 → 0.10.0

All 1908 tests pass. Lint clean. All 8 cloud bundles build.

Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-23 22:07:05 -08:00

47 lines
1.6 KiB
TypeScript

// Side-effect module: must be imported BEFORE @clack/prompts
// to influence its unicode detection (which runs at import time).
//
// @clack/prompts checks: process.env.TERM !== "linux" on non-Windows.
// Setting TERM=linux forces ASCII fallback symbols (>, *, |, etc.)
const shouldForceAscii = (): boolean => {
// Explicit user override to enable Unicode
if (process.env.SPAWN_UNICODE === "1") {
return false;
}
// Explicit user override to force ASCII
if (process.env.SPAWN_NO_UNICODE === "1" || process.env.SPAWN_ASCII === "1") {
return true;
}
// Dumb terminals and serial consoles lack unicode support
if (process.env.TERM === "dumb" || !process.env.TERM) {
return true;
}
// SSH sessions often have encoding mismatches between client/server
// This is the most common source of Unicode rendering issues
if (process.env.SSH_CONNECTION || process.env.SSH_CLIENT || process.env.SSH_TTY) {
return true;
}
// Default to Unicode for local terminals (macOS Terminal, iTerm2, modern Linux terminals)
// These have excellent Unicode support and proper fonts installed
return false;
};
const forceAscii = shouldForceAscii();
// Debug logging (only if SPAWN_DEBUG is set)
if (process.env.SPAWN_DEBUG === "1") {
console.error("[unicode-detect] TERM:", process.env.TERM);
console.error("[unicode-detect] SSH_CONNECTION:", process.env.SSH_CONNECTION);
console.error("[unicode-detect] SSH_CLIENT:", process.env.SSH_CLIENT);
console.error("[unicode-detect] SSH_TTY:", process.env.SSH_TTY);
console.error("[unicode-detect] Force ASCII:", forceAscii);
}
if (forceAscii) {
process.env.TERM = "linux";
}