diff --git a/ui-tui/src/components/appChrome.tsx b/ui-tui/src/components/appChrome.tsx index 3d14f5003b..bffcd6c515 100644 --- a/ui-tui/src/components/appChrome.tsx +++ b/ui-tui/src/components/appChrome.tsx @@ -1,6 +1,6 @@ -import { Box, type ScrollBoxHandle, Text } from '@hermes/ink' +import { Box, Text, type ScrollBoxHandle } from '@hermes/ink' import { useStore } from '@nanostores/react' -import { type ReactNode, type RefObject, useCallback, useEffect, useMemo, useState, useSyncExternalStore } from 'react' +import { useCallback, useEffect, useMemo, useState, useSyncExternalStore, type ReactNode, type RefObject } from 'react' import { $delegationState } from '../app/delegationStore.js' import { $turnState } from '../app/turnStore.js' diff --git a/ui-tui/src/components/appLayout.tsx b/ui-tui/src/components/appLayout.tsx index 6e4119cfe1..6cb6de59e7 100644 --- a/ui-tui/src/components/appLayout.tsx +++ b/ui-tui/src/components/appLayout.tsx @@ -184,7 +184,16 @@ const ComposerPane = memo(function ComposerPane({ {!isBlocked && ( - <> + + + {composer.inputBuf.map((line, i) => ( @@ -196,15 +205,6 @@ const ComposerPane = memo(function ComposerPane({ ))} - - {sh ? ( $ @@ -230,7 +230,7 @@ const ComposerPane = memo(function ComposerPane({ - + )} {!composer.empty && !ui.sid && ⚕ {ui.status}} @@ -264,22 +264,28 @@ const StatusRulePane = memo(function StatusRulePane({ return null } + // 'top' sits inline above the input; give it one row of breathing + // space above so the transcript (or queue) doesn't butt directly + // against the status row. 'bottom' lives at the last row of the + // viewport so it needs no margin. return ( - + + + ) })