mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
The bash tool already declares the `card: 'terminal'` render intent for both its call and its result, and host/connection/runtime already deliver it to the browser as callView/resultView. The Web client ignored it: rows derived from raw args, and the details panel flattened every tool's content into one soft-wrapping `<pre>`. Column-aligned output folded into a paragraph and a long listing stretched the panel without bound. `TerminalBlock` (ui-primitives) renders a command as a terminal surface: a shortened-cwd prompt line, output at `white-space: pre` in a horizontally scrolling box, a head/tail height cap with an expand control, an exit-code/signal status pill, and a copy control for the raw output. ANSI SGR runs are parsed with `anser` and resolved onto `--dsw-*` theme tokens, with literal rgb kept for values the design system has no token for. Geometry and fonts mirror CodeBlock; the clipboard write both need moved into a package-internal `clipboard.ts`. Both Web render sites for a bash call consume the intent through one derivation (`terminal-card-model.ts`), so they cannot disagree about a command, its cwd, or its exit status: the keyed BashRow carries the card resident below its summary row, and the render-site fallback row keeps it behind its existing expand control. Rows cap at 8 lines against the panel's 16. Inline output in the chat row reverses this package's stated no-inline-output convention, on the owner's explicit decision; the Agent Note records the reversal and its bound. Tests: TerminalBlock/ansi/clipboard unit specs, ui-conversation wiring specs at every render site, a built-client-graph snapshot covering both chat-row shapes, and a real-browser e2e asserting the no-wrap layout and the page's own Clipboard API.
27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
/**
|
|
* Cordis-free React primitives styled only through `--dsw-*` tokens.
|
|
*/
|
|
|
|
export { StateDot } from './StateDot.tsx'
|
|
export type { StateDotState } from './StateDot.tsx'
|
|
export { Button } from './Button.tsx'
|
|
export type { ButtonVariant } from './Button.tsx'
|
|
export { Pill } from './Pill.tsx'
|
|
export { Input } from './Input.tsx'
|
|
export { Menu } from './Menu.tsx'
|
|
export type { MenuEntry, MenuItem, MenuSeparator, MenuLabel } from './Menu.tsx'
|
|
export { HoverCard } from './HoverCard.tsx'
|
|
export { Modal } from './Modal.tsx'
|
|
export { ConnectionBanner } from './ConnectionBanner.tsx'
|
|
export { FishLogo } from './FishLogo.tsx'
|
|
export { BrandWordmark } from './BrandWordmark.tsx'
|
|
export { Tooltip } from './Tooltip.tsx'
|
|
export type { TooltipSide } from './Tooltip.tsx'
|
|
export { TerminalBlock, DEFAULT_TERMINAL_MAX_LINES } from './TerminalBlock.tsx'
|
|
export type { TerminalBlockProps } from './TerminalBlock.tsx'
|
|
export { CodeBlock } from './markdown/CodeBlock.tsx'
|
|
export { JsonBlock } from './markdown/JsonBlock.tsx'
|
|
export { MarkdownText } from './markdown/MarkdownText.tsx'
|
|
export { MessageText } from './markdown/MessageText.tsx'
|
|
export * from './icons/index.tsx'
|