mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-28 23:11:37 +08:00
fix(tui): /history shows the TUI's own transcript, scrollable
Reported during TUI v2 blitz retest: `/history` in the TUI only shows prompts from non-TUI Hermes runs and can't scroll the window. Root cause is the slash-worker subprocess: it's a detached HermesCLI that never sees the TUI's turns, so its `conversation_history` starts empty and `show_history` surfaces whatever was persisted from earlier CLI sessions — not what the user just did inside the TUI. Intercept `/history` as a local slash command so it dumps `ctx.local.getHistoryItems()` — the TUI's own transcript — routed through the pager (which scrolls after #13591). Accepts an optional preview-length argument (default 400 chars per message). Adds createSlashHandler coverage.
This commit is contained in:
@@ -211,6 +211,42 @@ describe('createSlashHandler', () => {
|
||||
expect(ctx.transcript.send).toHaveBeenCalledWith(skillMessage)
|
||||
})
|
||||
|
||||
it('/history pages the current TUI transcript (user + assistant)', () => {
|
||||
const ctx = buildCtx({
|
||||
local: {
|
||||
...buildLocal(),
|
||||
getHistoryItems: vi.fn(() => [
|
||||
{ role: 'user', text: 'hello' },
|
||||
{ role: 'system', text: 'ignore me' },
|
||||
{ role: 'assistant', text: 'hi there' },
|
||||
{ role: 'user', text: 'test' }
|
||||
])
|
||||
}
|
||||
})
|
||||
|
||||
createSlashHandler(ctx)('/history')
|
||||
expect(ctx.transcript.page).toHaveBeenCalledTimes(1)
|
||||
|
||||
const [body, title] = ctx.transcript.page.mock.calls[0]!
|
||||
|
||||
expect(title).toBe('History')
|
||||
expect(body).toContain('[You #1]')
|
||||
expect(body).toContain('hello')
|
||||
expect(body).toContain('[Hermes #2]')
|
||||
expect(body).toContain('hi there')
|
||||
expect(body).toContain('[You #3]')
|
||||
expect(body).not.toContain('ignore me')
|
||||
expect(ctx.gateway.gw.request).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('/history reports empty state without paging', () => {
|
||||
const ctx = buildCtx()
|
||||
|
||||
createSlashHandler(ctx)('/history')
|
||||
expect(ctx.transcript.page).not.toHaveBeenCalled()
|
||||
expect(ctx.transcript.sys).toHaveBeenCalledWith('no conversation yet')
|
||||
})
|
||||
|
||||
it('handles send-type dispatch for /plan command', async () => {
|
||||
const planMessage = 'Plan skill content loaded'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user