diff --git a/scripts/profile-tui.py b/scripts/profile-tui.py index 9584ed4d8c..18cbbc74d7 100755 --- a/scripts/profile-tui.py +++ b/scripts/profile-tui.py @@ -30,7 +30,6 @@ import pty import select import signal import sqlite3 -import statistics import sys import time from pathlib import Path diff --git a/ui-tui/packages/hermes-ink/index.d.ts b/ui-tui/packages/hermes-ink/index.d.ts index 94d1059872..9375cb4b3a 100644 --- a/ui-tui/packages/hermes-ink/index.d.ts +++ b/ui-tui/packages/hermes-ink/index.d.ts @@ -4,7 +4,7 @@ export type { StderrHandle } from './src/hooks/use-stderr.ts' export { default as useStdout } from './src/hooks/use-stdout.ts' export type { StdoutHandle } from './src/hooks/use-stdout.ts' export { Ansi } from './src/ink/Ansi.tsx' -export { evictInkCaches, inkCacheSizes } from './src/ink/cache-eviction.ts' +export { evictInkCaches } from './src/ink/cache-eviction.ts' export type { EvictLevel, InkCacheSizes } from './src/ink/cache-eviction.ts' export { AlternateScreen } from './src/ink/components/AlternateScreen.tsx' export { default as Box } from './src/ink/components/Box.tsx' diff --git a/ui-tui/packages/hermes-ink/src/entry-exports.ts b/ui-tui/packages/hermes-ink/src/entry-exports.ts index bfc25d682e..d56387dd5b 100644 --- a/ui-tui/packages/hermes-ink/src/entry-exports.ts +++ b/ui-tui/packages/hermes-ink/src/entry-exports.ts @@ -1,7 +1,7 @@ export { default as useStderr } from './hooks/use-stderr.js' export { default as useStdout } from './hooks/use-stdout.js' export { Ansi } from './ink/Ansi.js' -export { evictInkCaches, type EvictLevel, type InkCacheSizes, inkCacheSizes } from './ink/cache-eviction.js' +export { evictInkCaches, type EvictLevel, type InkCacheSizes } from './ink/cache-eviction.js' export { AlternateScreen } from './ink/components/AlternateScreen.js' export { default as Box } from './ink/components/Box.js' export { default as Link } from './ink/components/Link.js' @@ -22,7 +22,7 @@ export { useTerminalFocus } from './ink/hooks/use-terminal-focus.js' export { useTerminalTitle } from './ink/hooks/use-terminal-title.js' export { useTerminalViewport } from './ink/hooks/use-terminal-viewport.js' export { default as measureElement } from './ink/measure-element.js' -export { resetScrollFastPathStats, scrollFastPathStats, type ScrollFastPathStats } from './ink/render-node-to-output.js' +export { scrollFastPathStats, type ScrollFastPathStats } from './ink/render-node-to-output.js' export { createRoot, default as render, renderSync } from './ink/root.js' export { stringWidth } from './ink/stringWidth.js' export { isXtermJs } from './ink/terminal.js' diff --git a/ui-tui/packages/hermes-ink/src/ink/cache-eviction.ts b/ui-tui/packages/hermes-ink/src/ink/cache-eviction.ts index 0c5a08aaba..f0155eb9b0 100644 --- a/ui-tui/packages/hermes-ink/src/ink/cache-eviction.ts +++ b/ui-tui/packages/hermes-ink/src/ink/cache-eviction.ts @@ -22,7 +22,7 @@ export interface InkCacheSizes { wrap: number } -export function inkCacheSizes(): InkCacheSizes { +function inkCacheSizes(): InkCacheSizes { return { lineWidth: lineWidthCacheSize(), slice: sliceCacheSize(), diff --git a/ui-tui/packages/hermes-ink/src/ink/render-node-to-output.ts b/ui-tui/packages/hermes-ink/src/ink/render-node-to-output.ts index 37d3b2f97c..50c9241c5d 100644 --- a/ui-tui/packages/hermes-ink/src/ink/render-node-to-output.ts +++ b/ui-tui/packages/hermes-ink/src/ink/render-node-to-output.ts @@ -98,19 +98,6 @@ export const scrollFastPathStats: ScrollFastPathStats = { } } -export function resetScrollFastPathStats(): void { - scrollFastPathStats.captured = 0 - scrollFastPathStats.taken = 0 - scrollFastPathStats.declined.noPrevScreen = 0 - scrollFastPathStats.declined.heightDeltaMismatch = 0 - scrollFastPathStats.declined.other = 0 - scrollFastPathStats.lastDeclineReason = undefined - scrollFastPathStats.lastHeightDelta = undefined - scrollFastPathStats.lastHintDelta = undefined - scrollFastPathStats.lastScrollHeight = undefined - scrollFastPathStats.lastPrevHeight = undefined -} - export function getScrollHint(): ScrollHint | null { return scrollHint } diff --git a/ui-tui/src/__tests__/turnStore.test.ts b/ui-tui/src/__tests__/turnStore.test.ts index 04797fd162..68a1f774fe 100644 --- a/ui-tui/src/__tests__/turnStore.test.ts +++ b/ui-tui/src/__tests__/turnStore.test.ts @@ -1,7 +1,6 @@ import { beforeEach, describe, expect, it } from 'vitest' import { - appendTurnSegment, archiveDoneTodos, archiveTodosAtTurnEnd, getTurnState, @@ -64,13 +63,4 @@ describe('turnStore live progress helpers', () => { toggleTodoCollapsed() expect(getTurnState().todoCollapsed).toBe(false) }) - - it('merges adjacent live tool shelves before rendering', () => { - appendTurnSegment({ kind: 'trail', role: 'system', text: '', tools: ['one ✓'] }) - appendTurnSegment({ kind: 'trail', role: 'system', text: '', tools: ['two ✓'] }) - - expect(getTurnState().streamSegments).toEqual([ - { kind: 'trail', role: 'system', text: '', tools: ['one ✓', 'two ✓'] } - ]) - }) }) diff --git a/ui-tui/src/app/slash/commands/ops.ts b/ui-tui/src/app/slash/commands/ops.ts index 210c6301ef..a311fe93b6 100644 --- a/ui-tui/src/app/slash/commands/ops.ts +++ b/ui-tui/src/app/slash/commands/ops.ts @@ -220,7 +220,7 @@ export const opsCommands: SlashCommand[] = [ const [sub, ...rest] = text.split(/\s+/) const query = rest.join(' ').trim() const { rpc } = ctx.gateway - const { page, panel, sys } = ctx.transcript + const { panel, sys } = ctx.transcript if (sub === 'list') { rpc('skills.manage', { action: 'list' }) diff --git a/ui-tui/src/app/turnStore.ts b/ui-tui/src/app/turnStore.ts index 643210961e..54823d1c25 100644 --- a/ui-tui/src/app/turnStore.ts +++ b/ui-tui/src/app/turnStore.ts @@ -1,7 +1,7 @@ import { atom } from 'nanostores' import { useSyncExternalStore } from 'react' -import { appendToolShelfMessage, isTodoDone } from '../lib/liveProgress.js' +import { isTodoDone } from '../lib/liveProgress.js' import type { ActiveTool, ActivityItem, Msg, SubagentProgress, TodoItem } from '../types.js' const buildTurnState = (): TurnState => ({ @@ -64,9 +64,6 @@ export const archiveTodosAtTurnEnd = () => { return [msg] } -export const appendTurnSegment = (msg: Msg) => - patchTurnState(state => ({ ...state, streamSegments: appendToolShelfMessage(state.streamSegments, msg) })) - export const resetTurnState = () => $turnState.set(buildTurnState()) export interface TurnState { diff --git a/ui-tui/src/app/useMainApp.ts b/ui-tui/src/app/useMainApp.ts index 7dc3aae9be..15f1ce5a3e 100644 --- a/ui-tui/src/app/useMainApp.ts +++ b/ui-tui/src/app/useMainApp.ts @@ -442,7 +442,7 @@ export function useMainApp(gw: GatewayClient) { clipboardPasteRef.current = paste - const { dispatchSubmission, send, sendQueued, shellExec, submit } = useSubmission({ + const { dispatchSubmission, send, sendQueued, submit } = useSubmission({ appendMessage, composerActions, composerRefs, diff --git a/ui-tui/src/app/useSubmission.ts b/ui-tui/src/app/useSubmission.ts index 6d9c774087..f2468f27e6 100644 --- a/ui-tui/src/app/useSubmission.ts +++ b/ui-tui/src/app/useSubmission.ts @@ -331,7 +331,7 @@ export function useSubmission(opts: UseSubmissionOptions) { submitRef.current = submit - return { dispatchSubmission, send, sendQueued, shellExec, submit } + return { dispatchSubmission, send, sendQueued, submit } } export interface UseSubmissionOptions { diff --git a/ui-tui/src/components/thinking.tsx b/ui-tui/src/components/thinking.tsx index 03ecf8c86e..0c2b9549c8 100644 --- a/ui-tui/src/components/thinking.tsx +++ b/ui-tui/src/components/thinking.tsx @@ -394,10 +394,6 @@ function SubagentAccordion({ const hasTools = item.tools.length > 0 const noteRows = [...(summary ? [summary] : []), ...item.notes] const hasNotes = noteRows.length > 0 - // `showChildren` only seeds the recursive `expanded` prop for nested - // subagents — it MUST NOT be OR-ed into the local section toggles, or - // expand-all permanently locks the inner chevrons open. - const showChildren = expanded || deep const noteColor = statusTone === 'error' ? t.color.error : statusTone === 'warn' ? t.color.warn : t.color.dim const sections: { diff --git a/ui-tui/src/gatewayTypes.ts b/ui-tui/src/gatewayTypes.ts index 335c172d90..c645393268 100644 --- a/ui-tui/src/gatewayTypes.ts +++ b/ui-tui/src/gatewayTypes.ts @@ -364,11 +364,6 @@ export interface SpawnTreeLoadResponse { subagents?: unknown[] } -export interface SpawnTreeSaveResponse { - path?: string - session_id?: string -} - export type GatewayEvent = | { payload?: { skin?: GatewaySkin }; session_id?: string; type: 'gateway.ready' } | { payload?: GatewaySkin; session_id?: string; type: 'skin.changed' } diff --git a/ui-tui/src/lib/liveLayout.test.ts b/ui-tui/src/lib/liveLayout.test.ts deleted file mode 100644 index 9faa1daea2..0000000000 --- a/ui-tui/src/lib/liveLayout.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { describe, expect, it } from 'vitest' - -import { liveTailOrder } from './liveLayout.js' - -describe('liveTailOrder', () => { - it('anchors live todo after scroll history and assistant output', () => { - expect(liveTailOrder()).toEqual(['scroll-history', 'assistant', 'live-todo']) - }) -}) diff --git a/ui-tui/src/lib/liveLayout.ts b/ui-tui/src/lib/liveLayout.ts deleted file mode 100644 index 13856f5c39..0000000000 --- a/ui-tui/src/lib/liveLayout.ts +++ /dev/null @@ -1 +0,0 @@ -export const liveTailOrder = () => ['scroll-history', 'assistant', 'live-todo'] as const diff --git a/ui-tui/src/lib/virtualHeights.ts b/ui-tui/src/lib/virtualHeights.ts index 6c9e2655f1..0c673fd93a 100644 --- a/ui-tui/src/lib/virtualHeights.ts +++ b/ui-tui/src/lib/virtualHeights.ts @@ -2,7 +2,7 @@ import type { Msg } from '../types.js' import { boundedHistoryRenderText } from './text.js' -export const hashText = (text: string) => { +const hashText = (text: string) => { let h = 5381 for (let i = 0; i < text.length; i++) { diff --git a/ui-tui/src/types/hermes-ink.d.ts b/ui-tui/src/types/hermes-ink.d.ts index a7e571db6c..c54d8876bc 100644 --- a/ui-tui/src/types/hermes-ink.d.ts +++ b/ui-tui/src/types/hermes-ink.d.ts @@ -121,7 +121,6 @@ declare module '@hermes/ink' { lastPrevHeight?: number } export const scrollFastPathStats: ScrollFastPathStats - export function resetScrollFastPathStats(): void export type EvictLevel = 'all' | 'half' export type InkCacheSizes = { @@ -131,7 +130,6 @@ declare module '@hermes/ink' { readonly wrap: number } export function evictInkCaches(level?: EvictLevel): InkCacheSizes - export function inkCacheSizes(): InkCacheSizes export function render(node: React.ReactNode, options?: NodeJS.WriteStream | RenderOptions): Instance