mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-10 13:31:38 +00:00
opentui(bench): scripts/demo.tsx — view the fixture in a real attachable TUI
Dev demo (not a test): seeds the bench fixture into the store via the resume path and renders <App> under a real CliRenderer (no gateway) so you can attach over tmux, scroll, and eyeball the transcript + the rolling-cap truncation notice. Run: DEMO_TOTAL=240 HERMES_TUI_MAX_MESSAGES=80 bun scripts/demo.tsx
This commit is contained in:
parent
dcd8ba2a0d
commit
25567919ea
1 changed files with 46 additions and 0 deletions
46
ui-tui-opentui-v2/scripts/demo.tsx
Normal file
46
ui-tui-opentui-v2/scripts/demo.tsx
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* DEV DEMO — NOT a test, NOT production. Renders the bench fixture (lorem-ipsum +
|
||||
* fat tool-turns from ./fixture.ts) in a REAL CliRenderer so you can attach over
|
||||
* tmux, scroll, and eyeball the transcript + the rolling-cap truncation notice.
|
||||
* No gateway is spawned (purely the fixture seeded into the store via the resume
|
||||
* path), so typing won't reach a backend — it's for viewing/scrolling.
|
||||
*
|
||||
* Run: bun scripts/demo.tsx
|
||||
* DEMO_TOTAL=200 fixture messages to seed (default 200)
|
||||
* HERMES_TUI_MAX_MESSAGES=80 cap → the "⤒ N earlier messages" notice fires
|
||||
* Quit: Ctrl+C.
|
||||
*/
|
||||
import { createCliRenderer } from '@opentui/core'
|
||||
import { render } from '@opentui/solid'
|
||||
|
||||
import { createSessionStore } from '../src/logic/store.ts'
|
||||
import { App } from '../src/view/App.tsx'
|
||||
import { ThemeProvider } from '../src/view/theme.tsx'
|
||||
import { materialize } from './fixture.ts'
|
||||
|
||||
const TOTAL = Number.parseInt(process.env.DEMO_TOTAL ?? '', 10) || 200
|
||||
|
||||
const store = createSessionStore()
|
||||
store.apply({ type: 'gateway.ready' })
|
||||
store.setSessionId('demo-fixture-20260609')
|
||||
// Seed via the resume path so the cap slices + the `dropped` counter is set
|
||||
// (drives the truncation notice) exactly as a real `session.resume` would.
|
||||
store.beginBuffer()
|
||||
store.commitSnapshot(materialize(TOTAL))
|
||||
|
||||
const renderer = await createCliRenderer({
|
||||
externalOutputMode: 'passthrough',
|
||||
targetFps: 60,
|
||||
exitOnCtrlC: true,
|
||||
useKittyKeyboard: {},
|
||||
useMouse: true
|
||||
})
|
||||
|
||||
void render(
|
||||
() => (
|
||||
<ThemeProvider theme={() => store.state.theme}>
|
||||
<App store={store} />
|
||||
</ThemeProvider>
|
||||
),
|
||||
renderer
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue