Selected rows in the model/session/skills pickers and approval/clarify prompts only changed from dim gray to cornsilk, which reads as low contrast on lighter themes and LCDs (reported during TUI v2 blitz). Switch the selected row to `inverse bold` with the brand accent color across modelPicker, sessionPicker, skillsHub, and prompts so the highlight is terminal-portable and unambiguous. Unselected rows stay dim. Also extends the sessionPicker middle meta column (which was always dim) to inherit the row's selection state.
79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import {
|
|
detectVSCodeLikeTerminal,
|
|
type FileOps,
|
|
isRemoteShellSession,
|
|
shouldPromptForTerminalSetup
|
|
} from './terminalSetup.js'
|
|
|
|
export type MacTerminalHint = {
|
|
key: string
|
|
message: string
|
|
tone: 'info' | 'warn'
|
|
}
|
|
|
|
export type MacTerminalContext = {
|
|
isAppleTerminal: boolean
|
|
isRemote: boolean
|
|
isTmux: boolean
|
|
vscodeLike: null | 'cursor' | 'vscode' | 'windsurf'
|
|
}
|
|
|
|
export function detectMacTerminalContext(env: NodeJS.ProcessEnv = process.env): MacTerminalContext {
|
|
const termProgram = env['TERM_PROGRAM'] ?? ''
|
|
|
|
return {
|
|
isAppleTerminal: termProgram === 'Apple_Terminal' || !!env['TERM_SESSION_ID'],
|
|
isRemote: isRemoteShellSession(env),
|
|
isTmux: !!env['TMUX'],
|
|
vscodeLike: detectVSCodeLikeTerminal(env)
|
|
}
|
|
}
|
|
|
|
export async function terminalParityHints(
|
|
env: NodeJS.ProcessEnv = process.env,
|
|
options?: { fileOps?: Partial<FileOps>; homeDir?: string }
|
|
): Promise<MacTerminalHint[]> {
|
|
const ctx = detectMacTerminalContext(env)
|
|
const hints: MacTerminalHint[] = []
|
|
|
|
if (
|
|
ctx.vscodeLike &&
|
|
(await shouldPromptForTerminalSetup({ env, fileOps: options?.fileOps, homeDir: options?.homeDir }))
|
|
) {
|
|
hints.push({
|
|
key: 'ide-setup',
|
|
tone: 'info',
|
|
message: `Detected ${ctx.vscodeLike} terminal · run /terminal-setup for best Cmd+Enter / undo parity`
|
|
})
|
|
}
|
|
|
|
if (ctx.isAppleTerminal) {
|
|
hints.push({
|
|
key: 'apple-terminal',
|
|
tone: 'warn',
|
|
message:
|
|
'Apple Terminal detected · use /paste for image-only clipboard fallback, and try Ctrl+A / Ctrl+E / Ctrl+U if Cmd+←/→/⌫ gets rewritten'
|
|
})
|
|
}
|
|
|
|
if (ctx.isTmux) {
|
|
hints.push({
|
|
key: 'tmux',
|
|
tone: 'warn',
|
|
message:
|
|
'tmux detected · clipboard copy/paste uses passthrough when available; allow-passthrough improves OSC52 reliability'
|
|
})
|
|
}
|
|
|
|
if (ctx.isRemote) {
|
|
hints.push({
|
|
key: 'remote',
|
|
tone: 'warn',
|
|
message:
|
|
'SSH session detected · text clipboard can bridge via OSC52, but image clipboard and local screenshot paths still depend on the machine running Hermes'
|
|
})
|
|
}
|
|
|
|
return hints
|
|
}
|