mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-14 04:02:26 +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
77 lines
2.4 KiB
TypeScript
77 lines
2.4 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
|
|
import { terminalParityHints } from '../lib/terminalParity.js'
|
|
|
|
describe('terminalParityHints', () => {
|
|
it('warns for Apple Terminal and SSH/tmux sessions', async () => {
|
|
const hints = await terminalParityHints({
|
|
TERM_PROGRAM: 'Apple_Terminal',
|
|
TERM_SESSION_ID: 'w0t0p0:123',
|
|
SSH_CONNECTION: '1',
|
|
TMUX: '/tmp/tmux-1/default,1,0'
|
|
} as NodeJS.ProcessEnv)
|
|
|
|
expect(hints.map(h => h.key)).toEqual(expect.arrayContaining(['apple-terminal', 'remote', 'tmux']))
|
|
})
|
|
|
|
it('suggests IDE setup only for VS Code-family terminals that still need bindings', async () => {
|
|
const readFile = vi.fn().mockRejectedValue(Object.assign(new Error('missing'), { code: 'ENOENT' }))
|
|
|
|
const hints = await terminalParityHints({ TERM_PROGRAM: 'vscode' } as NodeJS.ProcessEnv, {
|
|
fileOps: { readFile },
|
|
homeDir: '/tmp/fake-home'
|
|
})
|
|
|
|
expect(hints.some(h => h.key === 'ide-setup')).toBe(true)
|
|
})
|
|
|
|
it('suppresses IDE setup hint when keybindings are already configured', async () => {
|
|
const readFile = vi.fn().mockResolvedValue(
|
|
JSON.stringify([
|
|
{
|
|
key: 'cmd+c',
|
|
command: 'workbench.action.terminal.sendSequence',
|
|
when: 'terminalFocus && terminalTextSelected',
|
|
args: { text: '\u001b[99;13u' }
|
|
},
|
|
{
|
|
key: 'shift+enter',
|
|
command: 'workbench.action.terminal.sendSequence',
|
|
when: 'terminalFocus',
|
|
args: { text: '\\\r\n' }
|
|
},
|
|
{
|
|
key: 'ctrl+enter',
|
|
command: 'workbench.action.terminal.sendSequence',
|
|
when: 'terminalFocus',
|
|
args: { text: '\\\r\n' }
|
|
},
|
|
{
|
|
key: 'cmd+enter',
|
|
command: 'workbench.action.terminal.sendSequence',
|
|
when: 'terminalFocus',
|
|
args: { text: '\\\r\n' }
|
|
},
|
|
{
|
|
key: 'cmd+z',
|
|
command: 'workbench.action.terminal.sendSequence',
|
|
when: 'terminalFocus',
|
|
args: { text: '\u001b[122;9u' }
|
|
},
|
|
{
|
|
key: 'shift+cmd+z',
|
|
command: 'workbench.action.terminal.sendSequence',
|
|
when: 'terminalFocus',
|
|
args: { text: '\u001b[122;10u' }
|
|
}
|
|
])
|
|
)
|
|
|
|
const hints = await terminalParityHints({ TERM_PROGRAM: 'vscode' } as NodeJS.ProcessEnv, {
|
|
fileOps: { readFile },
|
|
homeDir: '/tmp/fake-home'
|
|
})
|
|
|
|
expect(hints.some(h => h.key === 'ide-setup')).toBe(false)
|
|
})
|
|
})
|