mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-04 09:47:54 +08:00
This PR groups the TUI fixes that restore macOS Terminal usability and clean up the theme/composer regressions: - copy transcript selections on macOS drag-release so Terminal.app users can copy while mouse tracking is enabled - copy composer selections on macOS drag-release; composer selection is internal to TextInput and does not use the global Ink selection bus - keep IDE Cmd+C forwarding setup macOS-only, and make keybinding conflict checks respect simple when-clause overlap/negation - force truecolor before chalk initializes (unless NO_COLOR / FORCE_COLOR / HERMES_TUI_TRUECOLOR opt-outs apply) so the default banner keeps its gold/amber/bronze gradient in Terminal.app - move TUI surfaces onto semantic theme tokens and preserve skin prompt symbols as bare tokens with renderer-owned spacing - render focused placeholders as dim hint text in TTY mode instead of inverse/selected-looking synthetic cursor text
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import { Text, useInput } from '@hermes/ink'
|
|
|
|
import type { Theme } from '../theme.js'
|
|
|
|
export function useOverlayKeys({ disabled = false, onBack, onClose }: OverlayKeysOptions) {
|
|
useInput((ch, key) => {
|
|
if (disabled) {
|
|
return
|
|
}
|
|
|
|
if (ch === 'q') {
|
|
return onClose()
|
|
}
|
|
|
|
if (key.escape) {
|
|
return onBack ? onBack() : onClose()
|
|
}
|
|
})
|
|
}
|
|
|
|
export function OverlayHint({ children, t }: OverlayHintProps) {
|
|
return (
|
|
<Text color={t.color.muted} wrap="truncate-end">
|
|
{children}
|
|
</Text>
|
|
)
|
|
}
|
|
|
|
export const windowOffset = (count: number, selected: number, visible: number) =>
|
|
Math.max(0, Math.min(selected - Math.floor(visible / 2), count - visible))
|
|
|
|
export function windowItems<T>(items: T[], selected: number, visible: number) {
|
|
const offset = windowOffset(items.length, selected, visible)
|
|
|
|
return {
|
|
items: items.slice(offset, offset + visible),
|
|
offset
|
|
}
|
|
}
|
|
|
|
interface OverlayHintProps {
|
|
children: string
|
|
t: Theme
|
|
}
|
|
|
|
interface OverlayKeysOptions {
|
|
disabled?: boolean
|
|
onBack?: () => void
|
|
onClose: () => void
|
|
}
|