hermes-agent-features/ui-tui/src/__tests__/prompt.test.ts
adybag14-cyber d08c2a016a fix(tui): termux-gate composer rendering tweaks for Ink TUI
Salvaged from #28942 (adybag14-cyber). Only the Ink TUI half is taken
here — the bundled "termux compatibility note" added to skills_tool.py
in the original PR did not address the actual user-reported bug
(skill_matches_platform() filtering Linux skills out on Termux) and
also regressed the EXCLUDED_SKILL_DIRS set used to prune nested
.venv/site-packages skills.

Changes:
- ui-tui/src/lib/prompt.ts: single-cell ASCII '>' marker in Termux mode
  to avoid ambiguous-width glyph artifacts while typing.
- ui-tui/src/components/appLayout.tsx: suppress profile prefix on
  narrow Termux panes (>=90 cols still shows it).
- ui-tui/src/lib/inputMetrics.ts + components/messageLine.tsx +
  lib/virtualHeights.ts: termux-aware transcript body width — drop
  the desktop 20-col floor on narrow mobile layouts, align virtual
  heights with actual rendered width.
- ui-tui/src/components/textInput.tsx: disable fast-echo bypass by
  default in Termux to avoid ghosting at soft-wrap boundaries.
  HERMES_TUI_TERMUX_FAST_ECHO=1 opts back in.

Tests: ui-tui/src/__tests__/{prompt,termuxComposerLayout,textInputFastEcho}.test.ts
(12 PR-added tests pass; 3 pre-existing wrapAnsi-bundling failures on
main are unrelated.)

The real skill-listing fix on Termux ('android' platform matching
Linux skills) ships as a follow-up commit on this branch.
2026-05-21 19:08:38 -07:00

32 lines
1.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from 'vitest'
import { composerPromptText } from '../lib/prompt.js'
describe('composerPromptText', () => {
it('returns shell prompt for ! commands', () => {
expect(composerPromptText('', 'coder', true)).toBe('$')
})
it('prefixes named profiles onto the normal prompt', () => {
expect(composerPromptText('', 'coder')).toBe('coder ')
})
it('does not prefix default or custom profiles', () => {
expect(composerPromptText('', 'default')).toBe('')
expect(composerPromptText('', 'custom')).toBe('')
expect(composerPromptText('')).toBe('')
})
it('uses a Termux-safe ASCII prompt marker in normal mode', () => {
expect(composerPromptText('', 'coder', false, true, 50)).toBe('>')
})
it('keeps profile prefix suppressed on narrow Termux widths', () => {
expect(composerPromptText('', 'upstr', false, true, 72)).toBe('>')
})
it('allows profile prefix on very wide Termux panes', () => {
expect(composerPromptText('', 'upstr', false, true, 120)).toBe('upstr >')
})
})