mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-06 02:41:48 +00: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
30 lines
883 B
TypeScript
30 lines
883 B
TypeScript
// FPS counter overlay (HERMES_TUI_FPS=1). Zero-cost when disabled.
|
|
|
|
import { Text } from '@hermes/ink'
|
|
import { useStore } from '@nanostores/react'
|
|
|
|
import { SHOW_FPS } from '../config/env.js'
|
|
import { $fpsState } from '../lib/fpsStore.js'
|
|
import type { Theme } from '../theme.js'
|
|
|
|
const fpsColor = (fps: number, t: Theme) =>
|
|
fps >= 50 ? t.color.statusGood : fps >= 30 ? t.color.statusWarn : t.color.error
|
|
|
|
export function FpsOverlay({ t }: { t: Theme }) {
|
|
if (!SHOW_FPS) {
|
|
return null
|
|
}
|
|
|
|
return <FpsOverlayInner t={t} />
|
|
}
|
|
|
|
function FpsOverlayInner({ t }: { t: Theme }) {
|
|
const { fps, lastDurationMs, totalFrames } = useStore($fpsState)
|
|
|
|
// Zero-pad widths so digit churn doesn't jitter the corner.
|
|
return (
|
|
<Text color={fpsColor(fps, t)}>
|
|
{fps.toFixed(1).padStart(5)}fps · {lastDurationMs.toFixed(1).padStart(5)}ms · #{totalFrames}
|
|
</Text>
|
|
)
|
|
}
|