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.
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
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 >')
|
||
})
|
||
})
|