# zidane-ui/chat

> The styled chat layer: provider, session list, transcript, composer and interaction cards bound to a ChatHost.

Import: `import { … } from 'zidane-ui/chat'`. Source: [ui/src/chat/index.ts](https://github.com/Tahul/zidane/blob/main/ui/src/chat/index.ts).

Use this entry point to put a chat interface in a React app. `ChatProvider` places a `ChatHost` in context, and `SessionList`, `HostTranscript`, `HostInteractions` and `HostComposer` read from it. It re-exports the transcript, composer and interaction entries, so one import covers the whole column. See [UI kit](https://zidane.si/docs/ui-kit.md).

```tsx
import type { ChatHost } from 'zidane-ui/chat/headless'
import { ChatProvider, HostComposer, HostInteractions, HostTranscript, SessionList } from 'zidane-ui/chat'
import { useState } from 'react'

declare const host: ChatHost

export function App() {
  const [id, setId] = useState('s1')
  return (
    <ChatProvider host={host}>
      <SessionList activeId={id} onSelect={setId} search />
      <HostTranscript sessionId={id} />
      <HostInteractions sessionId={id} />
      <HostComposer sessionId={id} attachments />
    </ChatProvider>
  )
}
```

## Components

### `ChatProvider`

Component.

Provides a [`ChatHost`](https://zidane.si/docs/reference/ui-chat-headless.md#ChatHost) and optional label overrides to the chat components below it.

```ts
function ChatProvider(props: ChatProviderProps): Element
```

**Parameters**

- `props` (`ChatProviderProps`): Provider props: the `host`, optional `labels`, and the `children` to render.

**Returns** `Element`

**Props**

- `children` (`ReactNode`): The chat components that read from `host`.
- `host` (`ChatHost`): The host every chat component below reads sessions, transcripts, and actions from.
- `labels?` (`Partial<{ addDiagnosticToChat: (message: string) => string; addFavorite: string; additionalInstructions: string; additionalInstructionsHint: string; additionalInstructionsPlaceholder: string; address: string; addressPlaceholder: string; addToChat: string; agent: string; agentDraftNote: string; agentProfiles: string; archive: string; archived: string; attachFile: string; attachmentEmpty: (name: string) => string; attachmentExportPdf: (name: string) => string; attachmentNotices: string; attachmentReadFailed: (name: string) => string; attachments: string; attachmentTitle: (name: string, detail: string) => string; attachmentTooLarge: (name: string, size: string, limit: string) => string; attachmentUnreadableImage: (name: string) => string; attachmentUnsupported: (name: string) => string; authCancel: string; authCard: string; authCopied: string; authCopyDetails: string; authEnterCode: (code: string) => string; authFailed: (message: string) => string; authFixed: string; authHeadline: (auth: AuthFailure, label: string) => string; authOpeningBrowser: string; authOpenPage: string; authPaste: string; authPasteSend: string; authSettings: string; authSettingsHint: string; authSignedIn: string; authSignedInRetrying: string; authSignInAgain: string; authSwitching: (account: string) => string; authTryAgain: string; authUseAccount: (account: string) => string; authWaiting: string; autoDenied: string; back: string; badgeCopied: string; badgeNoComposer: string; badgeOpenIn: (app: string) => string; badgeOpenInBrowserPane: string; badgePathUnavailable: string; blockRunAgain: string; blockRunAttach: string; blockRunAttachmentName: string; blockRunCopy: string; blockRunFailed: (reason: string) => string; blockRunHere: string; blockRunInTerminal: string; blockRunMenu: string; blockRunNeedsTerminal: string; blockRunning: string; blockRunOutput: string; blockRunRemove: string; blockRunStop: string; blockRunStopped: string; blockRunTimedOut: string; blockRunTruncated: string; cancel: string; chats: string; chipBranch: (name: string) => string; chipChat: (name: string) => string; chipCommand: (name: string) => string; chipCommit: (sha: string) => string; chipFactAliases: string; chipFactBranch: string; chipFactChanges: string; chipFactContext: string; chipFactDate: string; chipFactModel: string; chipFactPrompts: string; chipFactSize: string; chipFactTurns: string; chipFactUpdated: string; chipLoading: string; chipNotAmongChats: string; chipNotFound: (title: string) => string; chipRemoteFile: (path: string, host: string) => string; chipSessionError: string; chipSessionRunning: string; chipSkill: (name: string) => string; chipTokens: (count: string) => string; chipUntitledChat: string; chooseModel: string; clickToAnswer: string; close: string; closeTab: (name: string) => string; code: string; collapseGroup: (label: string) => string; commandDetail: string; commandSuggestions: string; completionSuggestions: string; composerBadges: string; composerLabel: string; composerPlaceholder: string; composerPlaceholderQueue: string; composerPlaceholderSteer: string; confirm: string; confirmNo: string; confirmYes: string; contextActiveSkills: string; contextAutoCompact: (pct: number) => string; contextCacheRead: string; contextCacheWrite: string; contextClickToCopy: (hasDescription: boolean) => string; contextCopied: string; contextDeferred: string; contextDetail: string; contextEstimated: string; contextFreshInput: string; contextLastTurn: string; contextNoBreakdown: string; contextOutput: string; contextRunCount: (runs: number) => string; contextSessionCost: string; contextSummary: (used: string, window: string, pct: number) => string; contextSummaryCost: (summary: string, cost: string) => string; contextWindow: string; continue: string; continueHint: string; continueRun: string; copied: string; copy: string; copyCode: string; copyDiagramSource: string; copyImage: string; copyImageBase64: string; copyImageDataUrl: string; current: string; declineSecret: string; declineSecretHint: string; defaultAgent: string; delete: string; diagnosticsCheckedBy: (source: string) => string; diagnosticsChecking: string; diagnosticsNone: string; diagram: (type: string | null) => string; diagramError: (message: string, at: string) => string; diagramErrorAt: (line: number, column: number) => string; dismiss: string; dismissHint: string; dotAttached: string; dotAttention: string; dotCompleted: string; dotError: string; dotIdle: string; dotPending: string; dotRunning: string; earlierHistory: string; earlierLines: (count: number) => string; earlierMessages: (count: number) => string; editorConflict: string; editorConflictDetail: string; editorEmpty: string; editorOverwrite: string; editorReadFailed: (message: string) => string; editorReload: string; effortLevel: (level: string) => string; errorFailed: (region: string) => string; errorStack: string; errorTryAgain: string; estimateDue: string; estimateDueTitle: string; estimateOver: string; estimateOverTitle: string; estimatePausedTitle: (left: string) => string; estimateProblemTitle: (reason: string, message?: string) => string; estimateTitle: (left: string) => string; expandGroup: (label: string) => string; favorites: string; filePath: (path: string) => string; fileReadOnly: (path: string) => string; fileTree: string; fileUnsaved: string; fileUnsavedTitle: (path: string) => string; filterActivities: { '1d': string; '30d': string; '3d': string; '7d': string; all: string }; filterActivity: string; filterAgent: string; filterAllAgents: string; filterAllAgentsOption: string; filterAllProjects: string; filterAllProjectsOption: string; filterAny: string; filterNoAgents: string; filterNoProjects: string; filterOrigin: string; filterOrigins: { all: string; scheduled: string; unscheduled: string }; filterPicked: (count: number) => string; filterProject: string; filterSaveView: string; filterSessions: string; filterSort: string; filterSorts: { alphabetical: string; createdTime: string; recency: string }; filterSpaceDefault: string; filterStatus: string; filterStatuses: { active: string; all: string; archived: string }; filterView: string; filterViews: { agent: string; date: string; host: string; none: string; project: string; state: string }; findClose: string; findCloseHint: string; findInConversation: string; findInConversationClose: string; findInFile: string; findMatchCase: string; findNext: string; findNextHint: string; findNoResults: string; findPrevious: string; findPreviousHint: string; findReferences: string; fitDiagram: string; foldOutcomes: (ok: number, failed: number) => string; foldSteps: (count: number) => string; generatedImage: string; generatingImage: (model: string | null) => string; generatingImages: (count: number, model: string | null) => string; goToDefinition: string; goToStep: (step: string) => string; hostBadgeTitle: (host: string, status: string) => string; hostCollapse: (name: string) => string; hostExpand: (name: string) => string; hostOpenSettings: (host: string) => string; hostPicker: string; hostRunsOn: (name: string) => string; hostRunsOnSection: string; hostStatusError: (status: string, error: string) => string; hostStatuses: { 'auth-refused': string; connected: string; connecting: string; identity: string; local: string; offline: string; reconnecting: string; 'version-mismatch': string }; hostThisMachine: string; imageModelReferences: string; imageModelReferencesHint: string; imageModelsNone: string; imageModelsPill: string; imageModelTransparency: string; imageModelTransparencyHint: string; inboxEmpty: string; inboxInProgress: string; inboxNeedsYou: string; inboxPreviousSession: string; inboxRecent: string; inputCaption: string; interactionAnsweredBy: (who: string) => string; interactionApproved: string; interactionDismissed: string; interactionPlan: string; interactionQuestion: string; interactionRejected: string; interactionRevise: string; interactionsLabel: string; interactionWaitingAnswers: string; interactionWaitingDecision: string; justNow: string; loadEarlierHistory: string; loadFullOutput: string; loading: string; loadingEarlierHistory: string; loadingEarlierMessages: string; loadingFullOutput: string; mentionSuggestions: string; modalBack: string; modalFailed: string; modelAccountBlocked: (provider: string) => string; modelChain: string; modelChainNoModel: string; modelChainOrderHint: string; modelFallback: string; modelFallbackHint: string; modelFallbackPosition: (n: number) => string; modelFeatures: string; modelForNextChat: string; modelInUse: string; modelKinds: string; modelLegacy: string; modelLegacyHint: string; modelNotInCatalog: string; modelNotInCatalogHint: string; modelOptions: string; modelOptionsEmpty: string; modelOptionsHint: string; modelPrimary: string; modelPrimaryHint: string; modelReasoning: string; modelReasoningHint: string; modelRemoveFallback: (n: number) => string; modelRemoveFromChain: string; modelRemovePrimary: string; modelsChatTab: string; modelsCustomId: string; modelServing: (picked: string, serving: string) => string; modelServingFallback: string; modelsImageTab: string; modelsInUse: string; modelsJumpHint: (provider: string, digit: number | null) => string; modelsJumpToProvider: string; modelsLegacy: string; modelsLegacyHidden: (count: number) => string; modelsLoadFailed: (error: string) => string; modelsLoading: string; modelsNoMatch: (query: string) => string; modelsNoProviders: string; modelsSelected: (count: number) => string; modelsShowLegacy: string; modelsShowLegacyHint: string; modelsShownOf: (shown: number, total: number) => string; modelsTypeAnId: string; modelUnavailable: string; modelVerdictTitle: (approved: boolean, model: string, confidence: string | null) => string; modelVia: string; modelViaHint: (modelId: string, provider: string) => string; months: readonly string[]; moreActions: string; moreAttachments: (count: number) => string; newSession: string; newSessionIn: (label: string) => string; next: string; noAnswer: string; noMatches: (query: string) => string; noReferences: string; noSessions: string; noSuggestions: string; of: (index: number, count: number) => string; openFiles: string; openGroup: (label: string) => string; openImageFile: (path: string) => string; openInNewTab: string; openNamedSession: (title: string) => string; openSecrets: string; openSession: string; outputCaption: string; paletteBack: string; paletteBackHint: string; paletteChoose: string; paletteEmpty: string; paletteFilter: string; paletteLabel: string; paletteLoading: string; paletteNoMatch: (query: string) => string; paletteOpen: string; paletteRun: string; paletteScopeHint: string; paletteTurnOff: string; paletteTurnOn: string; pickModel: string; pickOneOrMore: string; planApprove: string; planReject: string; planRejectAndStop: string; planRejectNote: string; planRejectPlaceholder: string; planRevise: string; planReviseNote: string; planRevisePlaceholder: string; planSendRevision: string; previewFailed: (name: string) => string; previewTooLarge: (name: string, size: string) => string; previous: string; questionCount: (count: number) => string; queueHint: string; queueMessage: string; reasoningEffort: string; receiptAgent: string; receiptAgentSwitched: string; receiptCost: string; receiptDuration: string; receiptModel: string; receiptModelOthers: (others: number) => string; receiptSpeed: string; receiptTokens: (sent: string, received: string) => string; receiptTurns: (turns: number) => string; reload: string; removeAttachment: (name: string) => string; removeFavorite: string; rename: string; requiredHint: string; requiredMark: string; resetsAt: (time: string) => string; retry: string; retryHint: string; runningFor: (elapsed: string) => string; runReceipt: string; runRetrying: (attempt: number, max: number, source?: string) => string; runWaiting: string; saveSecurely: string; screenBack: (screen: string) => string; screenBackKey: string; scriptCallsDone: (done: number) => string; scriptCallsFailed: (failed: number) => string; scriptCallsOf: (done: number, total: number) => string; scriptCallsRunning: (running: number) => string; scriptLineCalls: (calls: number) => string; scriptLiveOutput: string; scriptLoop: string; scriptLoopRound: (round: number) => string; scriptLoopRounds: (rounds: number) => string; scriptLoopRuns: (runs: number) => string; scriptOptionOutput: string; scriptOptions: string; scriptOptionTimeout: string; scriptOptionTokens: (tokens: number) => string; scriptPercent: (percent: number) => string; scriptProgress: string; scriptWaitLeft: (seconds: number) => string; searchModels: string; searchModelsPlaceholder: string; searchSessions: string; secretDeclined: (name: string) => string; secretNote: (ttl: SecretTtl) => string; secretReused: (name: string) => string; secretSaved: (name: string, left: SecretTimeLeft) => string; secretSent: (name: string) => string; secretTtlLabel: string; secretTtlName: (ttl: SecretTtl) => string; secretValueLabel: string; secretValuePlaceholder: string; selectTurnCopied: string; selectTurnCopy: string; selectTurnDetails: string; selectTurnExit: string; selectTurnFork: string; selectTurnForkFailed: string; selectTurnMove: string; selectTurnNothingToCopy: string; selectTurnSelecting: string; sendAnswers: (count: number) => string; sendHint: string; sendMessage: string; sessionActions: string; sessionEventLabel: (title: string, verb: string, needsAttention: boolean) => string; sessions: string; setModelOptions: string; shellCancelled: string; shellExit: (code: number) => string; shellKilled: string; showDiagram: string; showDiagramSource: string; showMore: string; showMoreAttachments: (count: number) => string; showOutput: string; showSystemPrompt: string; signInCopyCode: string; signInDone: (account?: string) => string; signInEnterCode: (host: string) => string; signInFailed: string; signInInBrowser: (service: string) => string; signInNotOpened: string; signInOpenPage: string; signInPaste: string; signInStarting: string; signInSubmit: string; skip: string; spawnResumes: (childId: string) => string; spawnTask: string; stateCompleted: string; stateError: string; stateIdle: string; stateRunning: string; steerHint: string; steerMessage: string; stepDone: string; stepFailed: string; stepOf: (index: number, count: number) => string; stepResuming: string; stepRunning: string; steps: string; stepWaiting: string; stopCommand: string; stopHint: string; stopped: string; stoppedByYou: string; stopRun: string; switchAgent: string; switchingAgent: string; switchModel: string; terminal: string; terminalExited: (code: number) => string; terminalLoadFailed: (message: string) => string; thinkingLive: string; thoughtFor: (seconds: number) => string; thoughts: string; thoughtTimes: (count: number) => string; today: string; toolAttachments: string; transcriptLoading: string; turnMenuCopy: string; turnMenuCopySelection: string; turnMenuCopySelectionFailed: string; turnMenuDelete: string; turnMenuEdit: string; turnMenuEditNeedsComposer: string; turnMenuFork: string; turnMenuRewind: string; turnMenuSent: (age: string) => string; turnMenuStopFirst: (label: string) => string; turnsCompacted: string; unarchive: string; unsupportedInteraction: (tool: string) => string; viewAttachment: (name: string) => string; waitingForSlot: (max: number) => string; workerContinues: string; workerModel: string; workerSystemPrompt: string; workerSystemReplaced: string; workerType: string; working: string; wrapLines: string; yesterday: string; zoomFit: string; zoomInDiagram: string; zoomOutDiagram: string; zoomPercent: (percent: number) => string }>`): Overrides for the built-in UI strings. Keys you leave out keep the default English label.

Source: [ui/src/chat/ChatProvider.tsx:34](https://github.com/Tahul/zidane/blob/main/ui/src/chat/ChatProvider.tsx#L34)

### `DaemonOrb`

Component.

Renders the daemon status orb for the given health and activity counts. It ripples once when the state changes or a run ends.

```ts
function DaemonOrb(props: DaemonOrbProps): Element
```

**Parameters**

- `props` (`DaemonOrbProps`): The [`DaemonOrbProps`](https://zidane.si/docs/reference/ui-chat.md#DaemonOrbProps).

**Returns** `Element`

**Props**

- `attention?` (`number`): Sessions waiting for you (a question, a plan, an approval).
- `className?` (`string`): Extra classes on the root element.
- `health` (`DaemonHealth`): Connection state of the daemon. Decides between `down`, `connecting`, and the activity states.
- `running?` (`number`): Runs on the daemon right now.
- `size?` (`number`, default `10`): Diameter of the orb in pixels. Defaults to 10.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/DaemonOrb.tsx:67](https://github.com/Tahul/zidane/blob/main/ui/src/chat/DaemonOrb.tsx#L67)

### `DaemonOrbButton`

Component.

Renders the daemon orb inside an icon-button-sized `button`. The caller supplies the label (for example `aria-label`) and the click handler.

```ts
const DaemonOrbButton: ForwardRefExoticComponent<DaemonOrbButtonProps & RefAttributes<HTMLButtonElement>>
```

**Props**

- `attention?` (`number`, from `Pick`): Sessions waiting for you (a question, a plan, an approval).
- `health` (`DaemonHealth`, from `Pick`): Connection state of the daemon. Decides between `down`, `connecting`, and the activity states.
- `running?` (`number`, from `Pick`): Runs on the daemon right now.

Source: [ui/src/chat/DaemonOrb.tsx:98](https://github.com/Tahul/zidane/blob/main/ui/src/chat/DaemonOrb.tsx#L98)

### `GroupGlyph`

Component.

A fixed glyph in the header's icon column.

```ts
function GroupGlyph(props: GroupGlyphProps): Element
```

**Parameters**

- `props` (`GroupGlyphProps`): Glyph props: the `icon` class.

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the root element.
- `icon` (`string`): Icon class name drawn at `text-sm`, for example `i-ph-folder`.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionGroupHeader.tsx:29](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionGroupHeader.tsx#L29)

### `HostBadge`

Component.

A host's name and connection as a badge, a button when `onOpen` is given.

```ts
function HostBadge(props: HostBadgeProps): Element
```

**Parameters**

- `props` (`HostBadgeProps`): The [`HostBadgeProps`](https://zidane.si/docs/reference/ui-chat.md#HostBadgeProps).

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the root element.
- `host` (`HostView`): The host.
- `icon?` (`boolean`): Lead with the host's glyph (a laptop for This computer, drives for a server). Default: no glyph.
- `onOpen?` (`() => void`): Opens the host's settings: the badge becomes a button. Absent: a plain badge.
- `style?` (`CSSProperties`): Inline styles on the root element.

Source: [ui/src/chat/HostBadge.tsx:34](https://github.com/Tahul/zidane/blob/main/ui/src/chat/HostBadge.tsx#L34)

### `HostStatusDot`

Component.

A host's connection status as a dot, labelled with the status word (and the last error, in its tooltip).

```ts
function HostStatusDot(props: HostStatusDotProps): Element
```

**Parameters**

- `props` (`HostStatusDotProps`): The [`HostStatusDotProps`](https://zidane.si/docs/reference/ui-chat.md#HostStatusDotProps).

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the root element.
- `host` (`HostView`): The host whose connection the dot shows.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/HostStatusDot.tsx:38](https://github.com/Tahul/zidane/blob/main/ui/src/chat/HostStatusDot.tsx#L38)

### `HostTranscript`

Component.

Renders a session's transcript from the `ChatHost` in context, with loading, earlier-messages, and row actions wired to the host.

```ts
function HostTranscript(props: HostTranscriptProps): Element
```

**Parameters**

- `props` (`HostTranscriptProps`): The [`HostTranscriptProps`](https://zidane.si/docs/reference/ui-chat.md#HostTranscriptProps); other props pass through to [`Transcript`](https://zidane.si/docs/reference/ui-chat.md#Transcript).

**Returns** `Element`

**Props**

- `children?` (`ReactNode`, from `Omit`): Rendered after the rows, inside the transcript (a menu the app owns).
- `className?` (`string`, from `Omit`): Extra class names for the transcript's root element.
- `options?` (`Partial<TranscriptOptions>`, from `Omit`): Memoize it: a new object re-renders the transcript. Missing fields take `DEFAULT_TRANSCRIPT_OPTIONS`.
- `runStatus?` (`{ retry: RunRetry | null }`, from `Omit`): Opts the live work row (compact density's fold) in to naming the run's
  status: "Retrying 2/3" while `retry` is set, "Waiting for the model"
  once nothing has moved on screen for a moment, each with how long it has
  lasted in a chip. Absent: the row says "Working". Memoize it.
- `selection?` (`TranscriptSelection`, from `Omit`): Absent: no select-turn mode. Memoize it.
- `sessionId` (`string`): Id of the session whose transcript to show. Passed to `host.transcript`.
- `style?` (`CSSProperties`, from `Omit`): Inline styles on the root element, merged after the component's own.
- `turnMenu?` (`TranscriptTurnMenu`, from `Omit`): Absent: turns have no menu. Memoize it.
- `onOpenSession?` (`(sessionId: string) => void`): Shows another session the transcript names (a worker, a reporting session). Absent: names are plain text.
- `onOpenSettings?` (`(target: AuthSettingsTarget) => void`): Opens Settings on the account (or MCP server) a failed sign-in names. Absent: its card has no Settings button.
- `onRunInTerminal?` (`(input: string) => void`): Opens a new terminal of the session and types `input` into it (a reply's shell block). Absent: blocks offer no Run in a terminal.

Source: [ui/src/chat/HostTranscript.tsx:43](https://github.com/Tahul/zidane/blob/main/ui/src/chat/HostTranscript.tsx#L43)

### `PdfPreview`

Component.

Renders a PDF in a frame showing the browser's PDF viewer.

```ts
function PdfPreview(props: PdfPreviewProps): Element
```

**Parameters**

- `props` (`PdfPreviewProps`): The PDF's `src` (a `data:` URL or any URL the page can load) and its `name`, the frame's title.

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the root element.
- `name` (`string`): The PDF's name, the frame's title.
- `src` (`string`): The PDF: a `data:` URL or any URL the page can load.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/PdfPreview.tsx:27](https://github.com/Tahul/zidane/blob/main/ui/src/chat/PdfPreview.tsx#L27)

### `RunEstimateChip`

Component.

The time a run has left, counting down (`~11m`), in the info tint;
`almost done` once the estimate is spent, dimmed while the run waits on
the user, and `over` in the warning tint once the run is past its
estimate. A run the host could not estimate, for a reason that will not go
away by itself (a rejected request, missing credentials), shows a muted
warning mark whose tooltip says why.

```ts
function RunEstimateChip(props: RunEstimateChipProps): Element
```

**Parameters**

- `props` (`RunEstimateChipProps`): The `estimate`, a tooltip `detail`, `className` and `style`.

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the chip.
- `detail?` (`string | (() => string)`): A line after the chip's own in its tooltip. A function is read when the
  tooltip is about to show (pointer over, focus): a line that changes every
  second (the sidebar's elapsed time) costs no render until then.
- `estimate` (`RunEstimateView`): The estimate to count down, or the problem that keeps the run from having one.
- `style?` (`CSSProperties`): Inline styles on the chip.

Source: [ui/src/chat/RunEstimateChip.tsx:150](https://github.com/Tahul/zidane/blob/main/ui/src/chat/RunEstimateChip.tsx#L150)

### `RunEstimatesProvider`

Component.

Hands the app's run estimates to what shows them (a subagent's header in
the transcript). Without it, nothing shows an estimate.

```ts
function RunEstimatesProvider(props: RunEstimatesProviderProps): Element
```

**Parameters**

- `props` (`RunEstimatesProviderProps`): The `store` and `children`.

**Returns** `Element`

**Props**

- `children?` (`ReactNode`): What reads it.
- `store` (`RunEstimatesStore`): The app's estimates store (`createRunEstimates`).

Source: [ui/src/chat/RunEstimateChip.tsx:46](https://github.com/Tahul/zidane/blob/main/ui/src/chat/RunEstimateChip.tsx#L46)

### `SessionFilterMenu`

Component.

Renders the faders button and the dropdown menu of session list filters. Each axis is a row that opens a submenu of choices.

```ts
function SessionFilterMenu<V extends SessionView = SessionGroupBy>(
  props: SessionFilterMenuProps<V>,
): Element
```

**Type parameters**

- `V` (`extends SessionView`, default `SessionGroupBy`)

**Parameters**

- `props` (`SessionFilterMenuProps<V>`): The [`SessionFilterMenuProps`](https://zidane.si/docs/reference/ui-chat.md#SessionFilterMenuProps).

**Returns** `Element`

**Props**

- `actions?` (`readonly SessionFilterAction[]`): Rows that act, in a last group.
- `activity?` (`SessionFilterAxis<SessionActivityFilter>`): Last-activity filter axis: limit the list to sessions active within a window (`1d` to `30d`, or `all`).
- `className?` (`string`): Extra classes on the root element (the faders trigger button).
- `extras?` (`readonly SessionFilterExtra[]`): More rows, each in the group its `placement` names, after the built-in ones.
- `project?` (`SessionProjectAxis`): Project filter axis: limit the list to one project.
- `sort?` (`SessionFilterAxis<SessionSortBy>`): Sort axis: `alphabetical`, `createdTime`, or `recency`.
- `status?` (`SessionFilterAxis<SessionArchiveFilter>`): Archive filter axis: show active, archived, or all sessions.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.
- `view?` (`SessionFilterAxis<V>`): Grouping ("Per directory" is the default). `host` is offered only when listed in `options`.

Source: [ui/src/chat/SessionFilterMenu.tsx:157](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L157)

### `SessionGroupHeader`

Component.

Renders a group heading in a session list. The label is a button that toggles collapse; the caret shows on hover or focus and stays visible once collapsed.

```ts
function SessionGroupHeader(props: SessionGroupHeaderProps): Element
```

**Parameters**

- `props` (`SessionGroupHeaderProps`): Header props: `id`, `label`, `collapsed`, `icon`, `action`, `onToggle`, and `className`.

**Returns** `Element`

**Props**

- `action?` (`ReactNode`): Trailing control (a "new session here" button), revealed on hover and focus.
- `active?` (`boolean`): The group's page is the one shown (`onOpen`): the heading wears the active row's chip.
- `className?` (`string`): Extra class names for the heading's `<li>` (an app's sticky headers).
- `collapsed` (`boolean`): Whether the group's rows are hidden. Drives `aria-expanded` and the caret.
- `icon?` (`ReactNode`): The icon column: a `GroupGlyph`, or a host's own control (a project icon picker).
- `id` (`string`): Group id, passed to `onToggle` when the label is clicked.
- `label` (`string`): Group title shown next to the icon.
- `onContextMenu?` (`(event: MouseEvent<HTMLLIElement>) => void`): A right-click on the heading (the group's own actions menu).
- `onOpen?` (`(id: string) => void`): Called with the group `id` when the user clicks the label: it opens the group's page. Absent: the label toggles.
- `onToggle` (`(id: string) => void`): Called with the group `id` when the user toggles the label (or, with `onOpen`, the chevron).
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionGroupHeader.tsx:74](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionGroupHeader.tsx#L74)

### `SessionHostHeader`

Component.

A host's header row (an `<li>`) in a session list grouped by host.

```ts
function SessionHostHeader(props: SessionHostHeaderProps): Element
```

**Parameters**

- `props` (`SessionHostHeaderProps`): The [`SessionHostHeaderProps`](https://zidane.si/docs/reference/ui-chat.md#SessionHostHeaderProps).

**Returns** `Element`

**Props**

- `className?` (`string`): Extra class names for the header's `<li>` (an app's sticky headers).
- `collapsed` (`boolean`): The host's sessions are folded away.
- `host` (`HostView`): The host the section lists.
- `id` (`string`): The section's id, handed back to `onToggle`.
- `onToggle` (`(id: string) => void`): The collapse toggle was clicked.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionHostHeader.tsx:34](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionHostHeader.tsx#L34)

### `SessionList`

Component.

Renders the session list for the `ChatHost` in context: grouped and sorted rows with rename, archive, and delete when the host supports them.

```ts
function SessionList(props: SessionListProps): Element
```

**Parameters**

- `props` (`SessionListProps`): The [`SessionListProps`](https://zidane.si/docs/reference/ui-chat.md#SessionListProps).

**Returns** `Element`

**Props**

- `activeId?` (`string | null`, default `null`): Id of the session shown as selected. `null` or omitted marks none.
- `aria-label?` (`string`): The list's landmark name (default: the `sessions` label); set it when a page shows several.
- `calendar?` (`CalendarOptions`): Pin the zone and locale of date labels; set it with `now` when a server renders the list too.
- `className?` (`string`): Extra class names for the list's root element.
- `confirmDelete?` (`boolean`): Ask before deleting (default true).
- `empty?` (`ReactNode`): Shown when the host has no sessions at all.
- `groupBy?` (`SessionGroupBy`, default `'none'`): How rows are grouped: `project`, `date`, `state`, or `none` for a flat list.
- `now?` (`number`): Pin the clock (screenshots, server renders); live minute ticks otherwise.
- `onNewSession?` (`() => void`): Shows a "New session" button (and is called by it).
- `onNewSessionIn?` (`(group: string) => void`): Called with the group's path when the user clicks "+" on a group header. The app creates the session.
- `onSelect` (`(id: string) => void`): Called with the session id when the user clicks a row or activates it with the keyboard.
- `rowProps?` (`(session: ChatSession) => RowExtras`): Per-session additions: badges, meta, a second line, menu items.
- `search?` (`boolean`): Show the title search field above the list.
- `sessions?` (`readonly ChatSession[]`): Override the host's list (a filtered or merged view).
- `sortBy?` (`SessionSortBy`, default `'recency'`): Row order inside a group: `recency`, `createdTime`, or `alphabetical`.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionList.tsx:116](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionList.tsx#L116)

### `SessionListRow`

Component.

Renders one session in a list: status dot, title with inline rename, badges, meta, an optional second line, and an actions menu behind a 3-dots trigger and right-click.

```ts
const SessionListRow: MemoExoticComponent<(__namedParameters: SessionListRowProps) => Element>
```

Source: [ui/src/chat/SessionListRow.tsx:136](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionListRow.tsx#L136)

### `SessionStreamsProvider`

Component.

Provides one session streams to the hooks below it.

```ts
function SessionStreamsProvider<K extends string = string>(
  props: SessionStreamsProviderProps<K>,
): Element
```

**Type parameters**

- `K` (`extends string`, default `string`)

**Parameters**

- `props` (`SessionStreamsProviderProps<K>`): The streams and the components that read them.

**Returns** `Element`

**Props**

- `children?` (`ReactNode`): The components that read the streams.
- `streams` (`SessionStreams<K>`): The streams the hooks read; keep its identity for the provider's life.

Source: [ui/src/chat/SessionStreamsProvider.tsx:67](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L67)

### `ShowMoreRow`

Component.

Ends a capped group: reveals the rest of it. Aligned under the rows' titles.

```ts
function ShowMoreRow(props: ShowMoreRowProps): Element
```

**Parameters**

- `props` (`ShowMoreRowProps`): Row props: `hiddenCount` and `onExpand`.

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the root element.
- `hiddenCount` (`number`): Number of rows still hidden, shown in parentheses after the label.
- `onExpand` (`() => void`): Called when the user clicks the row to reveal the hidden rows.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionGroupHeader.tsx:164](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionGroupHeader.tsx#L164)

### `StatusDot`

Component.

Renders a session's state as a small dot, with a motion cue for states that need attention.

```ts
const StatusDot: MemoExoticComponent<(__namedParameters: StatusDotProps) => Element>
```

Source: [ui/src/chat/StatusDot.tsx:128](https://github.com/Tahul/zidane/blob/main/ui/src/chat/StatusDot.tsx#L128)

### `TextPreview`

Component.

The kit's text preview, the default `TextPreview` slot: the text highlighted for its language (a plain
`<pre>` for plain text, while the highlighter loads, or when it fails).

```ts
function TextPreview(props: TextPreviewProps): Element
```

**Parameters**

- `props` (`TextPreviewProps`): The [`TextPreviewProps`](https://zidane.si/docs/reference/ui-chat.md#TextPreviewProps).

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the root element.
- `mediaType` (`string`, from `TextPreviewSlotProps`): Its MIME type, for example `text/markdown`.
- `name` (`string`, from `TextPreviewSlotProps`): The file name.
- `size` (`number`, from `TextPreviewSlotProps`): Its size in bytes.
- `src` (`string`, from `TextPreviewSlotProps`): Where the text is: a `data:` URL, or any URL the page can fetch.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/TextPreview.tsx:65](https://github.com/Tahul/zidane/blob/main/ui/src/chat/TextPreview.tsx#L65)

### `Throbber`

Component.

The busy indicator: a row of glyphs cycling through the theme's throbber gradient, then an ellipsis.

```ts
function Throbber(props: ThrobberProps): Element
```

**Parameters**

- `props` (`ThrobberProps`): The size, colors or variant, and whether to hide the ellipsis.

**Returns** `Element`

**Props**

- `className?` (`string`): Extra classes on the root.
- `colors?` (`readonly [string, string]`): Optional override pair — wins over `variant` and `theme.colors.throbber`.
- `hideEllipsis?` (`boolean`): Hide the trailing ellipsis (compact inline use).
- `size?` (`number`): Number of glyph cells. Default 15 — matches the TUI CrushThrobber.
- `style?` (`CSSProperties`): Inline styles on the root.
- `variant?` (`ThrobberVariant`): Semantic color tone (defaults to `'accent'`). See [`ThrobberVariant`](https://zidane.si/docs/reference/ui-chat.md#ThrobberVariant).

Source: [ui/src/chat/Throbber.tsx:65](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Throbber.tsx#L65)

### `Transcript`

Component.

Renders a session's events as transcript rows: messages, tool calls grouped by the display options, subagent blocks, notices, and the select-turn cursor. Rows mount lazily as they near the viewport.

```ts
const Transcript: MemoExoticComponent<(__namedParameters: TranscriptProps) => Element>
```

Source: [ui/src/chat/Transcript.tsx:179](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Transcript.tsx#L179)

## Functions

### `dotStateFor`

Function.

The dot for a session's plain status, when a host has nothing richer.

```ts
function dotStateFor(status: ChatSessionStatus | undefined): SessionDotState
```

**Parameters**

- `status` (`ChatSessionStatus | undefined`): The session's status, or `undefined` when the host reports none. `running`, `completed`, and `error` map to the matching dot state; anything else is `idle`.

**Returns** `SessionDotState`

Source: [ui/src/chat/StatusDot.tsx:29](https://github.com/Tahul/zidane/blob/main/ui/src/chat/StatusDot.tsx#L29)

### `orbState`

Function.

Maps daemon health and activity counts to an [`OrbState`](https://zidane.si/docs/reference/ui-chat.md#OrbState). A disconnected daemon is `down` and a connecting one is `connecting`; otherwise waiting sessions win over running ones, and no activity is `idle`.

```ts
function orbState(health: DaemonHealth, running: number, attention: number): OrbState
```

**Parameters**

- `health` (`DaemonHealth`): Connection state of the daemon.
- `running` (`number`): Number of runs active on the daemon.
- `attention` (`number`): Number of sessions waiting for the user.

**Returns** `OrbState`

Source: [ui/src/chat/DaemonOrb.tsx:36](https://github.com/Tahul/zidane/blob/main/ui/src/chat/DaemonOrb.tsx#L36)

### `parseToolMedia`

Function.

The media stand-ins of a result's text, in order, and the text without them.

```ts
function parseToolMedia(text: string): { media: ToolMediaItem[]; rest: string }
```

**Parameters**

- `text` (`string`): The tool result's text.

**Returns** `{ media: ToolMediaItem[]; rest: string }`

Source: [ui/src/chat/headless/transcript/tool-media.ts:27](https://github.com/Tahul/zidane/blob/main/ui/src/chat/headless/transcript/tool-media.ts#L27)

### `providerColor`

Function.

Text / border color.

```ts
function providerColor(providerKey: string): string
```

**Parameters**

- `providerKey` (`string`): The provider key, matched case-insensitively.

**Returns** `string`

Source: [ui/src/chat/provider-color.ts:56](https://github.com/Tahul/zidane/blob/main/ui/src/chat/provider-color.ts#L56)

### `providerHue`

Function.

The hue (0 to 359) for a provider key: the pinned hue of a well-known provider whose name the key starts with, else a hash of the key.

```ts
function providerHue(providerKey: string): number
```

**Parameters**

- `providerKey` (`string`): The provider key, matched case-insensitively.

**Returns** `number`

Source: [ui/src/chat/provider-color.ts:45](https://github.com/Tahul/zidane/blob/main/ui/src/chat/provider-color.ts#L45)

### `providerTint`

Function.

Soft tinted fill for chips / badges.

```ts
function providerTint(providerKey: string, percent?: number): string
```

**Parameters**

- `providerKey` (`string`): The provider key, matched case-insensitively.
- `percent?` (`number`, default `16`): How much of the provider color to mix in, 0 to 100.

**Returns** `string`

Source: [ui/src/chat/provider-color.ts:69](https://github.com/Tahul/zidane/blob/main/ui/src/chat/provider-color.ts#L69)

### `useAttachmentText`

Function.

The text behind `src`: a `data:` URL decodes at once, any other URL is fetched.

```ts
function useAttachmentText(src: string, skip?: boolean): AttachmentTextState
```

**Parameters**

- `src` (`string`): Where the text is.
- `skip?` (`boolean`, default `false`): Load nothing (the file is too large to preview).

**Returns** `AttachmentTextState`

Source: [ui/src/chat/TextPreview.tsx:30](https://github.com/Tahul/zidane/blob/main/ui/src/chat/TextPreview.tsx#L30)

### `useCaptureRunState`

Function.

Captures the run-state version; the returned check says whether it still
holds. A signal or runtime switch invalidates snapshots fetched before it.

```ts
function useCaptureRunState(): () => () => boolean
```

**Returns** `() => () => boolean`

Source: [ui/src/chat/SessionStreamsProvider.tsx:247](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L247)

### `useChatHost`

Function.

Returns the [`ChatHost`](https://zidane.si/docs/reference/ui-chat-headless.md#ChatHost) from the nearest [`ChatProvider`](https://zidane.si/docs/reference/ui-chat.md#ChatProvider). Throws when called outside one.

```ts
function useChatHost(): ChatHost
```

**Returns** `ChatHost`

Source: [ui/src/chat/ChatProvider.tsx:43](https://github.com/Tahul/zidane/blob/main/ui/src/chat/ChatProvider.tsx#L43)

### `useChatLabels`

Function.

Returns the chat UI strings: the defaults merged with any overrides given to [`ChatProvider`](https://zidane.si/docs/reference/ui-chat.md#ChatProvider) or `LabelsProvider`.

```ts
function useChatLabels(): { addDiagnosticToChat: (message: string) => string; addFavorite: string; additionalInstructions: string; additionalInstructionsHint: string; additionalInstructionsPlaceholder: string; address: string; addressPlaceholder: string; addToChat: string; agent: string; agentDraftNote: string; agentProfiles: string; archive: string; archived: string; attachFile: string; attachmentEmpty: (name: string) => string; attachmentExportPdf: (name: string) => string; attachmentNotices: string; attachmentReadFailed: (name: string) => string; attachments: string; attachmentTitle: (name: string, detail: string) => string; attachmentTooLarge: (name: string, size: string, limit: string) => string; attachmentUnreadableImage: (name: string) => string; attachmentUnsupported: (name: string) => string; authCancel: string; authCard: string; authCopied: string; authCopyDetails: string; authEnterCode: (code: string) => string; authFailed: (message: string) => string; authFixed: string; authHeadline: (auth: AuthFailure, label: string) => string; authOpeningBrowser: string; authOpenPage: string; authPaste: string; authPasteSend: string; authSettings: string; authSettingsHint: string; authSignedIn: string; authSignedInRetrying: string; authSignInAgain: string; authSwitching: (account: string) => string; authTryAgain: string; authUseAccount: (account: string) => string; authWaiting: string; autoDenied: string; back: string; badgeCopied: string; badgeNoComposer: string; badgeOpenIn: (app: string) => string; badgeOpenInBrowserPane: string; badgePathUnavailable: string; blockRunAgain: string; blockRunAttach: string; blockRunAttachmentName: string; blockRunCopy: string; blockRunFailed: (reason: string) => string; blockRunHere: string; blockRunInTerminal: string; blockRunMenu: string; blockRunNeedsTerminal: string; blockRunning: string; blockRunOutput: string; blockRunRemove: string; blockRunStop: string; blockRunStopped: string; blockRunTimedOut: string; blockRunTruncated: string; cancel: string; chats: string; chipBranch: (name: string) => string; chipChat: (name: string) => string; chipCommand: (name: string) => string; chipCommit: (sha: string) => string; chipFactAliases: string; chipFactBranch: string; chipFactChanges: string; chipFactContext: string; chipFactDate: string; chipFactModel: string; chipFactPrompts: string; chipFactSize: string; chipFactTurns: string; chipFactUpdated: string; chipLoading: string; chipNotAmongChats: string; chipNotFound: (title: string) => string; chipRemoteFile: (path: string, host: string) => string; chipSessionError: string; chipSessionRunning: string; chipSkill: (name: string) => string; chipTokens: (count: string) => string; chipUntitledChat: string; chooseModel: string; clickToAnswer: string; close: string; closeTab: (name: string) => string; code: string; collapseGroup: (label: string) => string; commandDetail: string; commandSuggestions: string; completionSuggestions: string; composerBadges: string; composerLabel: string; composerPlaceholder: string; composerPlaceholderQueue: string; composerPlaceholderSteer: string; confirm: string; confirmNo: string; confirmYes: string; contextActiveSkills: string; contextAutoCompact: (pct: number) => string; contextCacheRead: string; contextCacheWrite: string; contextClickToCopy: (hasDescription: boolean) => string; contextCopied: string; contextDeferred: string; contextDetail: string; contextEstimated: string; contextFreshInput: string; contextLastTurn: string; contextNoBreakdown: string; contextOutput: string; contextRunCount: (runs: number) => string; contextSessionCost: string; contextSummary: (used: string, window: string, pct: number) => string; contextSummaryCost: (summary: string, cost: string) => string; contextWindow: string; continue: string; continueHint: string; continueRun: string; copied: string; copy: string; copyCode: string; copyDiagramSource: string; copyImage: string; copyImageBase64: string; copyImageDataUrl: string; current: string; declineSecret: string; declineSecretHint: string; defaultAgent: string; delete: string; diagnosticsCheckedBy: (source: string) => string; diagnosticsChecking: string; diagnosticsNone: string; diagram: (type: string | null) => string; diagramError: (message: string, at: string) => string; diagramErrorAt: (line: number, column: number) => string; dismiss: string; dismissHint: string; dotAttached: string; dotAttention: string; dotCompleted: string; dotError: string; dotIdle: string; dotPending: string; dotRunning: string; earlierHistory: string; earlierLines: (count: number) => string; earlierMessages: (count: number) => string; editorConflict: string; editorConflictDetail: string; editorEmpty: string; editorOverwrite: string; editorReadFailed: (message: string) => string; editorReload: string; effortLevel: (level: string) => string; errorFailed: (region: string) => string; errorStack: string; errorTryAgain: string; estimateDue: string; estimateDueTitle: string; estimateOver: string; estimateOverTitle: string; estimatePausedTitle: (left: string) => string; estimateProblemTitle: (reason: string, message?: string) => string; estimateTitle: (left: string) => string; expandGroup: (label: string) => string; favorites: string; filePath: (path: string) => string; fileReadOnly: (path: string) => string; fileTree: string; fileUnsaved: string; fileUnsavedTitle: (path: string) => string; filterActivities: { '1d': string; '30d': string; '3d': string; '7d': string; all: string }; filterActivity: string; filterAgent: string; filterAllAgents: string; filterAllAgentsOption: string; filterAllProjects: string; filterAllProjectsOption: string; filterAny: string; filterNoAgents: string; filterNoProjects: string; filterOrigin: string; filterOrigins: { all: string; scheduled: string; unscheduled: string }; filterPicked: (count: number) => string; filterProject: string; filterSaveView: string; filterSessions: string; filterSort: string; filterSorts: { alphabetical: string; createdTime: string; recency: string }; filterSpaceDefault: string; filterStatus: string; filterStatuses: { active: string; all: string; archived: string }; filterView: string; filterViews: { agent: string; date: string; host: string; none: string; project: string; state: string }; findClose: string; findCloseHint: string; findInConversation: string; findInConversationClose: string; findInFile: string; findMatchCase: string; findNext: string; findNextHint: string; findNoResults: string; findPrevious: string; findPreviousHint: string; findReferences: string; fitDiagram: string; foldOutcomes: (ok: number, failed: number) => string; foldSteps: (count: number) => string; generatedImage: string; generatingImage: (model: string | null) => string; generatingImages: (count: number, model: string | null) => string; goToDefinition: string; goToStep: (step: string) => string; hostBadgeTitle: (host: string, status: string) => string; hostCollapse: (name: string) => string; hostExpand: (name: string) => string; hostOpenSettings: (host: string) => string; hostPicker: string; hostRunsOn: (name: string) => string; hostRunsOnSection: string; hostStatusError: (status: string, error: string) => string; hostStatuses: { 'auth-refused': string; connected: string; connecting: string; identity: string; local: string; offline: string; reconnecting: string; 'version-mismatch': string }; hostThisMachine: string; imageModelReferences: string; imageModelReferencesHint: string; imageModelsNone: string; imageModelsPill: string; imageModelTransparency: string; imageModelTransparencyHint: string; inboxEmpty: string; inboxInProgress: string; inboxNeedsYou: string; inboxPreviousSession: string; inboxRecent: string; inputCaption: string; interactionAnsweredBy: (who: string) => string; interactionApproved: string; interactionDismissed: string; interactionPlan: string; interactionQuestion: string; interactionRejected: string; interactionRevise: string; interactionsLabel: string; interactionWaitingAnswers: string; interactionWaitingDecision: string; justNow: string; loadEarlierHistory: string; loadFullOutput: string; loading: string; loadingEarlierHistory: string; loadingEarlierMessages: string; loadingFullOutput: string; mentionSuggestions: string; modalBack: string; modalFailed: string; modelAccountBlocked: (provider: string) => string; modelChain: string; modelChainNoModel: string; modelChainOrderHint: string; modelFallback: string; modelFallbackHint: string; modelFallbackPosition: (n: number) => string; modelFeatures: string; modelForNextChat: string; modelInUse: string; modelKinds: string; modelLegacy: string; modelLegacyHint: string; modelNotInCatalog: string; modelNotInCatalogHint: string; modelOptions: string; modelOptionsEmpty: string; modelOptionsHint: string; modelPrimary: string; modelPrimaryHint: string; modelReasoning: string; modelReasoningHint: string; modelRemoveFallback: (n: number) => string; modelRemoveFromChain: string; modelRemovePrimary: string; modelsChatTab: string; modelsCustomId: string; modelServing: (picked: string, serving: string) => string; modelServingFallback: string; modelsImageTab: string; modelsInUse: string; modelsJumpHint: (provider: string, digit: number | null) => string; modelsJumpToProvider: string; modelsLegacy: string; modelsLegacyHidden: (count: number) => string; modelsLoadFailed: (error: string) => string; modelsLoading: string; modelsNoMatch: (query: string) => string; modelsNoProviders: string; modelsSelected: (count: number) => string; modelsShowLegacy: string; modelsShowLegacyHint: string; modelsShownOf: (shown: number, total: number) => string; modelsTypeAnId: string; modelUnavailable: string; modelVerdictTitle: (approved: boolean, model: string, confidence: string | null) => string; modelVia: string; modelViaHint: (modelId: string, provider: string) => string; months: readonly string[]; moreActions: string; moreAttachments: (count: number) => string; newSession: string; newSessionIn: (label: string) => string; next: string; noAnswer: string; noMatches: (query: string) => string; noReferences: string; noSessions: string; noSuggestions: string; of: (index: number, count: number) => string; openFiles: string; openGroup: (label: string) => string; openImageFile: (path: string) => string; openInNewTab: string; openNamedSession: (title: string) => string; openSecrets: string; openSession: string; outputCaption: string; paletteBack: string; paletteBackHint: string; paletteChoose: string; paletteEmpty: string; paletteFilter: string; paletteLabel: string; paletteLoading: string; paletteNoMatch: (query: string) => string; paletteOpen: string; paletteRun: string; paletteScopeHint: string; paletteTurnOff: string; paletteTurnOn: string; pickModel: string; pickOneOrMore: string; planApprove: string; planReject: string; planRejectAndStop: string; planRejectNote: string; planRejectPlaceholder: string; planRevise: string; planReviseNote: string; planRevisePlaceholder: string; planSendRevision: string; previewFailed: (name: string) => string; previewTooLarge: (name: string, size: string) => string; previous: string; questionCount: (count: number) => string; queueHint: string; queueMessage: string; reasoningEffort: string; receiptAgent: string; receiptAgentSwitched: string; receiptCost: string; receiptDuration: string; receiptModel: string; receiptModelOthers: (others: number) => string; receiptSpeed: string; receiptTokens: (sent: string, received: string) => string; receiptTurns: (turns: number) => string; reload: string; removeAttachment: (name: string) => string; removeFavorite: string; rename: string; requiredHint: string; requiredMark: string; resetsAt: (time: string) => string; retry: string; retryHint: string; runningFor: (elapsed: string) => string; runReceipt: string; runRetrying: (attempt: number, max: number, source?: string) => string; runWaiting: string; saveSecurely: string; screenBack: (screen: string) => string; screenBackKey: string; scriptCallsDone: (done: number) => string; scriptCallsFailed: (failed: number) => string; scriptCallsOf: (done: number, total: number) => string; scriptCallsRunning: (running: number) => string; scriptLineCalls: (calls: number) => string; scriptLiveOutput: string; scriptLoop: string; scriptLoopRound: (round: number) => string; scriptLoopRounds: (rounds: number) => string; scriptLoopRuns: (runs: number) => string; scriptOptionOutput: string; scriptOptions: string; scriptOptionTimeout: string; scriptOptionTokens: (tokens: number) => string; scriptPercent: (percent: number) => string; scriptProgress: string; scriptWaitLeft: (seconds: number) => string; searchModels: string; searchModelsPlaceholder: string; searchSessions: string; secretDeclined: (name: string) => string; secretNote: (ttl: SecretTtl) => string; secretReused: (name: string) => string; secretSaved: (name: string, left: SecretTimeLeft) => string; secretSent: (name: string) => string; secretTtlLabel: string; secretTtlName: (ttl: SecretTtl) => string; secretValueLabel: string; secretValuePlaceholder: string; selectTurnCopied: string; selectTurnCopy: string; selectTurnDetails: string; selectTurnExit: string; selectTurnFork: string; selectTurnForkFailed: string; selectTurnMove: string; selectTurnNothingToCopy: string; selectTurnSelecting: string; sendAnswers: (count: number) => string; sendHint: string; sendMessage: string; sessionActions: string; sessionEventLabel: (title: string, verb: string, needsAttention: boolean) => string; sessions: string; setModelOptions: string; shellCancelled: string; shellExit: (code: number) => string; shellKilled: string; showDiagram: string; showDiagramSource: string; showMore: string; showMoreAttachments: (count: number) => string; showOutput: string; showSystemPrompt: string; signInCopyCode: string; signInDone: (account?: string) => string; signInEnterCode: (host: string) => string; signInFailed: string; signInInBrowser: (service: string) => string; signInNotOpened: string; signInOpenPage: string; signInPaste: string; signInStarting: string; signInSubmit: string; skip: string; spawnResumes: (childId: string) => string; spawnTask: string; stateCompleted: string; stateError: string; stateIdle: string; stateRunning: string; steerHint: string; steerMessage: string; stepDone: string; stepFailed: string; stepOf: (index: number, count: number) => string; stepResuming: string; stepRunning: string; steps: string; stepWaiting: string; stopCommand: string; stopHint: string; stopped: string; stoppedByYou: string; stopRun: string; switchAgent: string; switchingAgent: string; switchModel: string; terminal: string; terminalExited: (code: number) => string; terminalLoadFailed: (message: string) => string; thinkingLive: string; thoughtFor: (seconds: number) => string; thoughts: string; thoughtTimes: (count: number) => string; today: string; toolAttachments: string; transcriptLoading: string; turnMenuCopy: string; turnMenuCopySelection: string; turnMenuCopySelectionFailed: string; turnMenuDelete: string; turnMenuEdit: string; turnMenuEditNeedsComposer: string; turnMenuFork: string; turnMenuRewind: string; turnMenuSent: (age: string) => string; turnMenuStopFirst: (label: string) => string; turnsCompacted: string; unarchive: string; unsupportedInteraction: (tool: string) => string; viewAttachment: (name: string) => string; waitingForSlot: (max: number) => string; workerContinues: string; workerModel: string; workerSystemPrompt: string; workerSystemReplaced: string; workerType: string; working: string; wrapLines: string; yesterday: string; zoomFit: string; zoomInDiagram: string; zoomOutDiagram: string; zoomPercent: (percent: number) => string }
```

**Returns** `{ addDiagnosticToChat: (message: string) => string; addFavorite: string; additionalInstructions: string; additionalInstructionsHint: string; additionalInstructionsPlaceholder: string; address: string; addressPlaceholder: string; addToChat: string; agent: string; agentDraftNote: string; agentProfiles: string; archive: string; archived: string; attachFile: string; attachmentEmpty: (name: string) => string; attachmentExportPdf: (name: string) => string; attachmentNotices: string; attachmentReadFailed: (name: string) => string; attachments: string; attachmentTitle: (name: string, detail: string) => string; attachmentTooLarge: (name: string, size: string, limit: string) => string; attachmentUnreadableImage: (name: string) => string; attachmentUnsupported: (name: string) => string; authCancel: string; authCard: string; authCopied: string; authCopyDetails: string; authEnterCode: (code: string) => string; authFailed: (message: string) => string; authFixed: string; authHeadline: (auth: AuthFailure, label: string) => string; authOpeningBrowser: string; authOpenPage: string; authPaste: string; authPasteSend: string; authSettings: string; authSettingsHint: string; authSignedIn: string; authSignedInRetrying: string; authSignInAgain: string; authSwitching: (account: string) => string; authTryAgain: string; authUseAccount: (account: string) => string; authWaiting: string; autoDenied: string; back: string; badgeCopied: string; badgeNoComposer: string; badgeOpenIn: (app: string) => string; badgeOpenInBrowserPane: string; badgePathUnavailable: string; blockRunAgain: string; blockRunAttach: string; blockRunAttachmentName: string; blockRunCopy: string; blockRunFailed: (reason: string) => string; blockRunHere: string; blockRunInTerminal: string; blockRunMenu: string; blockRunNeedsTerminal: string; blockRunning: string; blockRunOutput: string; blockRunRemove: string; blockRunStop: string; blockRunStopped: string; blockRunTimedOut: string; blockRunTruncated: string; cancel: string; chats: string; chipBranch: (name: string) => string; chipChat: (name: string) => string; chipCommand: (name: string) => string; chipCommit: (sha: string) => string; chipFactAliases: string; chipFactBranch: string; chipFactChanges: string; chipFactContext: string; chipFactDate: string; chipFactModel: string; chipFactPrompts: string; chipFactSize: string; chipFactTurns: string; chipFactUpdated: string; chipLoading: string; chipNotAmongChats: string; chipNotFound: (title: string) => string; chipRemoteFile: (path: string, host: string) => string; chipSessionError: string; chipSessionRunning: string; chipSkill: (name: string) => string; chipTokens: (count: string) => string; chipUntitledChat: string; chooseModel: string; clickToAnswer: string; close: string; closeTab: (name: string) => string; code: string; collapseGroup: (label: string) => string; commandDetail: string; commandSuggestions: string; completionSuggestions: string; composerBadges: string; composerLabel: string; composerPlaceholder: string; composerPlaceholderQueue: string; composerPlaceholderSteer: string; confirm: string; confirmNo: string; confirmYes: string; contextActiveSkills: string; contextAutoCompact: (pct: number) => string; contextCacheRead: string; contextCacheWrite: string; contextClickToCopy: (hasDescription: boolean) => string; contextCopied: string; contextDeferred: string; contextDetail: string; contextEstimated: string; contextFreshInput: string; contextLastTurn: string; contextNoBreakdown: string; contextOutput: string; contextRunCount: (runs: number) => string; contextSessionCost: string; contextSummary: (used: string, window: string, pct: number) => string; contextSummaryCost: (summary: string, cost: string) => string; contextWindow: string; continue: string; continueHint: string; continueRun: string; copied: string; copy: string; copyCode: string; copyDiagramSource: string; copyImage: string; copyImageBase64: string; copyImageDataUrl: string; current: string; declineSecret: string; declineSecretHint: string; defaultAgent: string; delete: string; diagnosticsCheckedBy: (source: string) => string; diagnosticsChecking: string; diagnosticsNone: string; diagram: (type: string | null) => string; diagramError: (message: string, at: string) => string; diagramErrorAt: (line: number, column: number) => string; dismiss: string; dismissHint: string; dotAttached: string; dotAttention: string; dotCompleted: string; dotError: string; dotIdle: string; dotPending: string; dotRunning: string; earlierHistory: string; earlierLines: (count: number) => string; earlierMessages: (count: number) => string; editorConflict: string; editorConflictDetail: string; editorEmpty: string; editorOverwrite: string; editorReadFailed: (message: string) => string; editorReload: string; effortLevel: (level: string) => string; errorFailed: (region: string) => string; errorStack: string; errorTryAgain: string; estimateDue: string; estimateDueTitle: string; estimateOver: string; estimateOverTitle: string; estimatePausedTitle: (left: string) => string; estimateProblemTitle: (reason: string, message?: string) => string; estimateTitle: (left: string) => string; expandGroup: (label: string) => string; favorites: string; filePath: (path: string) => string; fileReadOnly: (path: string) => string; fileTree: string; fileUnsaved: string; fileUnsavedTitle: (path: string) => string; filterActivities: { '1d': string; '30d': string; '3d': string; '7d': string; all: string }; filterActivity: string; filterAgent: string; filterAllAgents: string; filterAllAgentsOption: string; filterAllProjects: string; filterAllProjectsOption: string; filterAny: string; filterNoAgents: string; filterNoProjects: string; filterOrigin: string; filterOrigins: { all: string; scheduled: string; unscheduled: string }; filterPicked: (count: number) => string; filterProject: string; filterSaveView: string; filterSessions: string; filterSort: string; filterSorts: { alphabetical: string; createdTime: string; recency: string }; filterSpaceDefault: string; filterStatus: string; filterStatuses: { active: string; all: string; archived: string }; filterView: string; filterViews: { agent: string; date: string; host: string; none: string; project: string; state: string }; findClose: string; findCloseHint: string; findInConversation: string; findInConversationClose: string; findInFile: string; findMatchCase: string; findNext: string; findNextHint: string; findNoResults: string; findPrevious: string; findPreviousHint: string; findReferences: string; fitDiagram: string; foldOutcomes: (ok: number, failed: number) => string; foldSteps: (count: number) => string; generatedImage: string; generatingImage: (model: string | null) => string; generatingImages: (count: number, model: string | null) => string; goToDefinition: string; goToStep: (step: string) => string; hostBadgeTitle: (host: string, status: string) => string; hostCollapse: (name: string) => string; hostExpand: (name: string) => string; hostOpenSettings: (host: string) => string; hostPicker: string; hostRunsOn: (name: string) => string; hostRunsOnSection: string; hostStatusError: (status: string, error: string) => string; hostStatuses: { 'auth-refused': string; connected: string; connecting: string; identity: string; local: string; offline: string; reconnecting: string; 'version-mismatch': string }; hostThisMachine: string; imageModelReferences: string; imageModelReferencesHint: string; imageModelsNone: string; imageModelsPill: string; imageModelTransparency: string; imageModelTransparencyHint: string; inboxEmpty: string; inboxInProgress: string; inboxNeedsYou: string; inboxPreviousSession: string; inboxRecent: string; inputCaption: string; interactionAnsweredBy: (who: string) => string; interactionApproved: string; interactionDismissed: string; interactionPlan: string; interactionQuestion: string; interactionRejected: string; interactionRevise: string; interactionsLabel: string; interactionWaitingAnswers: string; interactionWaitingDecision: string; justNow: string; loadEarlierHistory: string; loadFullOutput: string; loading: string; loadingEarlierHistory: string; loadingEarlierMessages: string; loadingFullOutput: string; mentionSuggestions: string; modalBack: string; modalFailed: string; modelAccountBlocked: (provider: string) => string; modelChain: string; modelChainNoModel: string; modelChainOrderHint: string; modelFallback: string; modelFallbackHint: string; modelFallbackPosition: (n: number) => string; modelFeatures: string; modelForNextChat: string; modelInUse: string; modelKinds: string; modelLegacy: string; modelLegacyHint: string; modelNotInCatalog: string; modelNotInCatalogHint: string; modelOptions: string; modelOptionsEmpty: string; modelOptionsHint: string; modelPrimary: string; modelPrimaryHint: string; modelReasoning: string; modelReasoningHint: string; modelRemoveFallback: (n: number) => string; modelRemoveFromChain: string; modelRemovePrimary: string; modelsChatTab: string; modelsCustomId: string; modelServing: (picked: string, serving: string) => string; modelServingFallback: string; modelsImageTab: string; modelsInUse: string; modelsJumpHint: (provider: string, digit: number | null) => string; modelsJumpToProvider: string; modelsLegacy: string; modelsLegacyHidden: (count: number) => string; modelsLoadFailed: (error: string) => string; modelsLoading: string; modelsNoMatch: (query: string) => string; modelsNoProviders: string; modelsSelected: (count: number) => string; modelsShowLegacy: string; modelsShowLegacyHint: string; modelsShownOf: (shown: number, total: number) => string; modelsTypeAnId: string; modelUnavailable: string; modelVerdictTitle: (approved: boolean, model: string, confidence: string | null) => string; modelVia: string; modelViaHint: (modelId: string, provider: string) => string; months: readonly string[]; moreActions: string; moreAttachments: (count: number) => string; newSession: string; newSessionIn: (label: string) => string; next: string; noAnswer: string; noMatches: (query: string) => string; noReferences: string; noSessions: string; noSuggestions: string; of: (index: number, count: number) => string; openFiles: string; openGroup: (label: string) => string; openImageFile: (path: string) => string; openInNewTab: string; openNamedSession: (title: string) => string; openSecrets: string; openSession: string; outputCaption: string; paletteBack: string; paletteBackHint: string; paletteChoose: string; paletteEmpty: string; paletteFilter: string; paletteLabel: string; paletteLoading: string; paletteNoMatch: (query: string) => string; paletteOpen: string; paletteRun: string; paletteScopeHint: string; paletteTurnOff: string; paletteTurnOn: string; pickModel: string; pickOneOrMore: string; planApprove: string; planReject: string; planRejectAndStop: string; planRejectNote: string; planRejectPlaceholder: string; planRevise: string; planReviseNote: string; planRevisePlaceholder: string; planSendRevision: string; previewFailed: (name: string) => string; previewTooLarge: (name: string, size: string) => string; previous: string; questionCount: (count: number) => string; queueHint: string; queueMessage: string; reasoningEffort: string; receiptAgent: string; receiptAgentSwitched: string; receiptCost: string; receiptDuration: string; receiptModel: string; receiptModelOthers: (others: number) => string; receiptSpeed: string; receiptTokens: (sent: string, received: string) => string; receiptTurns: (turns: number) => string; reload: string; removeAttachment: (name: string) => string; removeFavorite: string; rename: string; requiredHint: string; requiredMark: string; resetsAt: (time: string) => string; retry: string; retryHint: string; runningFor: (elapsed: string) => string; runReceipt: string; runRetrying: (attempt: number, max: number, source?: string) => string; runWaiting: string; saveSecurely: string; screenBack: (screen: string) => string; screenBackKey: string; scriptCallsDone: (done: number) => string; scriptCallsFailed: (failed: number) => string; scriptCallsOf: (done: number, total: number) => string; scriptCallsRunning: (running: number) => string; scriptLineCalls: (calls: number) => string; scriptLiveOutput: string; scriptLoop: string; scriptLoopRound: (round: number) => string; scriptLoopRounds: (rounds: number) => string; scriptLoopRuns: (runs: number) => string; scriptOptionOutput: string; scriptOptions: string; scriptOptionTimeout: string; scriptOptionTokens: (tokens: number) => string; scriptPercent: (percent: number) => string; scriptProgress: string; scriptWaitLeft: (seconds: number) => string; searchModels: string; searchModelsPlaceholder: string; searchSessions: string; secretDeclined: (name: string) => string; secretNote: (ttl: SecretTtl) => string; secretReused: (name: string) => string; secretSaved: (name: string, left: SecretTimeLeft) => string; secretSent: (name: string) => string; secretTtlLabel: string; secretTtlName: (ttl: SecretTtl) => string; secretValueLabel: string; secretValuePlaceholder: string; selectTurnCopied: string; selectTurnCopy: string; selectTurnDetails: string; selectTurnExit: string; selectTurnFork: string; selectTurnForkFailed: string; selectTurnMove: string; selectTurnNothingToCopy: string; selectTurnSelecting: string; sendAnswers: (count: number) => string; sendHint: string; sendMessage: string; sessionActions: string; sessionEventLabel: (title: string, verb: string, needsAttention: boolean) => string; sessions: string; setModelOptions: string; shellCancelled: string; shellExit: (code: number) => string; shellKilled: string; showDiagram: string; showDiagramSource: string; showMore: string; showMoreAttachments: (count: number) => string; showOutput: string; showSystemPrompt: string; signInCopyCode: string; signInDone: (account?: string) => string; signInEnterCode: (host: string) => string; signInFailed: string; signInInBrowser: (service: string) => string; signInNotOpened: string; signInOpenPage: string; signInPaste: string; signInStarting: string; signInSubmit: string; skip: string; spawnResumes: (childId: string) => string; spawnTask: string; stateCompleted: string; stateError: string; stateIdle: string; stateRunning: string; steerHint: string; steerMessage: string; stepDone: string; stepFailed: string; stepOf: (index: number, count: number) => string; stepResuming: string; stepRunning: string; steps: string; stepWaiting: string; stopCommand: string; stopHint: string; stopped: string; stoppedByYou: string; stopRun: string; switchAgent: string; switchingAgent: string; switchModel: string; terminal: string; terminalExited: (code: number) => string; terminalLoadFailed: (message: string) => string; thinkingLive: string; thoughtFor: (seconds: number) => string; thoughts: string; thoughtTimes: (count: number) => string; today: string; toolAttachments: string; transcriptLoading: string; turnMenuCopy: string; turnMenuCopySelection: string; turnMenuCopySelectionFailed: string; turnMenuDelete: string; turnMenuEdit: string; turnMenuEditNeedsComposer: string; turnMenuFork: string; turnMenuRewind: string; turnMenuSent: (age: string) => string; turnMenuStopFirst: (label: string) => string; turnsCompacted: string; unarchive: string; unsupportedInteraction: (tool: string) => string; viewAttachment: (name: string) => string; waitingForSlot: (max: number) => string; workerContinues: string; workerModel: string; workerSystemPrompt: string; workerSystemReplaced: string; workerType: string; working: string; wrapLines: string; yesterday: string; zoomFit: string; zoomInDiagram: string; zoomOutDiagram: string; zoomPercent: (percent: number) => string }`

Source: [ui/src/chat/useChatLabels.ts:11](https://github.com/Tahul/zidane/blob/main/ui/src/chat/useChatLabels.ts#L11)

### `useHasSessionEvents`

Function.

Whether the store holds any record for the session (re-renders when that changes).

```ts
function useHasSessionEvents<K extends string>(sessionId: K | null): boolean
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `boolean`

Source: [ui/src/chat/SessionStreamsProvider.tsx:206](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L206)

### `useHostSessions`

Function.

The host's session list (empty when the host has none).

```ts
function useHostSessions(): readonly ChatSession[]
```

**Returns** `readonly ChatSession[]`

Source: [ui/src/chat/ChatProvider.tsx:57](https://github.com/Tahul/zidane/blob/main/ui/src/chat/ChatProvider.tsx#L57)

### `useIsSessionHydrated`

Function.

Whether the session's transcript is hydrated (re-renders when that changes).

```ts
function useIsSessionHydrated<K extends string>(sessionId: K | null): boolean
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `boolean`

Source: [ui/src/chat/SessionStreamsProvider.tsx:218](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L218)

### `useOptionalChatHost`

Function.

Returns the [`ChatHost`](https://zidane.si/docs/reference/ui-chat-headless.md#ChatHost) from the nearest [`ChatProvider`](https://zidane.si/docs/reference/ui-chat.md#ChatProvider), or `null` outside one (a surface that works without a host, its extras hidden).

```ts
function useOptionalChatHost(): ChatHost | null
```

**Returns** `ChatHost | null`

Source: [ui/src/chat/ChatProvider.tsx:50](https://github.com/Tahul/zidane/blob/main/ui/src/chat/ChatProvider.tsx#L50)

### `usePeekRunSeq`

Function.

Reads a session's run-start sequence without subscribing. Stable.

```ts
function usePeekRunSeq<K extends string = string>(): (sessionId: K | null) => number
```

**Type parameters**

- `K` (`extends string`, default `string`)

**Returns** `(sessionId: K | null) => number`

Source: [ui/src/chat/SessionStreamsProvider.tsx:238](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L238)

### `usePeekSessionEvents`

Function.

Reads a session's current events without subscribing (for event handlers). Stable.

```ts
function usePeekSessionEvents<K extends string = string>(): (sessionId: K | null) => readonly ChatEvent[]
```

**Type parameters**

- `K` (`extends string`, default `string`)

**Returns** `(sessionId: K | null) => readonly ChatEvent[]`

Source: [ui/src/chat/SessionStreamsProvider.tsx:226](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L226)

### `usePeekSessionRunning`

Function.

Reads whether a session's run is in flight without subscribing. Stable.

```ts
function usePeekSessionRunning<K extends string = string>(): (sessionId: K | null) => boolean
```

**Type parameters**

- `K` (`extends string`, default `string`)

**Returns** `(sessionId: K | null) => boolean`

Source: [ui/src/chat/SessionStreamsProvider.tsx:232](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L232)

### `useRunEstimate`

Function.

The estimate of a session's own run, or of its subagent `label`, while one
is known; `undefined` otherwise.

```ts
function useRunEstimate(
  sessionId: string | undefined,
  label?: string,
  store?: RunEstimatesStore,
): RunEstimateView | undefined
```

**Parameters**

- `sessionId` (`string | undefined`): The session, `undefined` for none.
- `label?` (`string`): A subagent's label (`child-3`); absent for the session's own run.
- `store?` (`RunEstimatesStore`): The store to read. Default: the one [`RunEstimatesProvider`](https://zidane.si/docs/reference/ui-chat.md#RunEstimatesProvider) gives.

**Returns** `RunEstimateView | undefined`

Source: [ui/src/chat/RunEstimateChip.tsx:60](https://github.com/Tahul/zidane/blob/main/ui/src/chat/RunEstimateChip.tsx#L60)

### `useSessionEdits`

Function.

The session's events that carry a file edit, as a stable list: a reader
re-renders when an edit lands, not on every streamed token.

```ts
function useSessionEdits<K extends string>(sessionId: K | null): readonly ChatEvent[]
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `readonly ChatEvent[]`

Source: [ui/src/chat/SessionStreamsProvider.tsx:151](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L151)

### `useSessionEvents`

Function.

The session's events.

```ts
function useSessionEvents<K extends string>(sessionId: K | null): readonly ChatEvent[]
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `readonly ChatEvent[]`

Source: [ui/src/chat/SessionStreamsProvider.tsx:114](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L114)

### `useSessionEventsSelector`

Function.

A value derived from the session's events, recomputed only when the events
change. `select` should be stable (module-level or memoised) and return a
stable reference for unchanged input.

```ts
function useSessionEventsSelector<K extends string, T>(
  sessionId: K | null,
  select: (events: readonly ChatEvent[]) => T,
): T
```

**Type parameters**

- `K` (`extends string`)
- `T`

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).
- `select` (`(events: readonly ChatEvent[]) => T`): Derives the value from the events.

**Returns** `T`

Source: [ui/src/chat/SessionStreamsProvider.tsx:126](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L126)

### `useSessionFallbackModel`

Function.

The fallback model the session's run switched to, `null` when none.

```ts
function useSessionFallbackModel<K extends string>(
  sessionId: K | null,
): SessionFallbackModel | null
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `SessionFallbackModel | null`

Source: [ui/src/chat/SessionStreamsProvider.tsx:170](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L170)

### `useSessionPage`

Function.

The session's scrollback state: whether older turns exist, whether a page is loading.

```ts
function useSessionPage<K extends string>(sessionId: K | null): SessionPageState
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `SessionPageState`

Source: [ui/src/chat/SessionStreamsProvider.tsx:197](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L197)

### `useSessionRetry`

Function.

The provider retry the session's run is in, `null` when none.

```ts
function useSessionRetry<K extends string>(
  sessionId: K | null,
): SessionRetryState | null
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `SessionRetryState | null`

Source: [ui/src/chat/SessionStreamsProvider.tsx:179](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L179)

### `useSessionRunning`

Function.

Whether a run is in flight for the session.

```ts
function useSessionRunning<K extends string>(sessionId: K | null): boolean
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `boolean`

Source: [ui/src/chat/SessionStreamsProvider.tsx:161](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L161)

### `useSessionStreamActions`

Function.

The streams' bound writes (stable): dispatching never subscribes the caller.

```ts
function useSessionStreamActions<K extends string = string>(): SessionStreamActions<K>
```

**Type parameters**

- `K` (`extends string`, default `string`)

**Returns** `SessionStreamActions<K>`

Source: [ui/src/chat/SessionStreamsProvider.tsx:90](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L90)

### `useSessionStreams`

Function.

The streams themselves (stable).

```ts
function useSessionStreams<K extends string = string>(): SessionStreams<K>
```

**Type parameters**

- `K` (`extends string`, default `string`)

**Returns** `SessionStreams<K>`

Source: [ui/src/chat/SessionStreamsProvider.tsx:85](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L85)

### `useSessionSystemMd`

Function.

The session's `SYSTEM.md` override (it replaces the built-in doctrine), `null` when none.

```ts
function useSessionSystemMd<K extends string>(sessionId: K | null): SystemMdFile | null
```

**Type parameters**

- `K` (`extends string`)

**Parameters**

- `sessionId` (`K | null`): The session (`null`: none).

**Returns** `SystemMdFile | null`

Source: [ui/src/chat/SessionStreamsProvider.tsx:188](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L188)

### `useTranscriptOptions`

Function.

Picks the transcript's options out of `values` (only those set: the transcript keeps zidane's defaults for the
rest). The result keeps its identity while those settings do, so a change to any other setting leaves the
transcript alone.

```ts
function useTranscriptOptions(
  values: Partial<TranscriptOptions> | null | undefined,
): Partial<TranscriptOptions>
```

**Parameters**

- `values` (`Partial<TranscriptOptions> | null | undefined`): A settings document's values, or `null` while it loads.

**Returns** `Partial<TranscriptOptions>`: The options to pass to `Transcript` / `HostTranscript`.

Source: [ui/src/chat/transcript-options.ts:37](https://github.com/Tahul/zidane/blob/main/ui/src/chat/transcript-options.ts#L37)

## Constants

### `DEFAULT_TRANSCRIPT_OPTIONS`

Constant.

zidane's defaults for those settings.

```ts
const DEFAULT_TRANSCRIPT_OPTIONS: TranscriptOptions
```

Source: [ui/src/chat/Transcript.tsx:76](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Transcript.tsx#L76)

### `MAX_TEXT_PREVIEW_BYTES`

Constant.

Past this size a text attachment is listed, not previewed.

```ts
const MAX_TEXT_PREVIEW_BYTES: number
```

Source: [ui/src/chat/TextPreview.tsx:19](https://github.com/Tahul/zidane/blob/main/ui/src/chat/TextPreview.tsx#L19)

### `TRANSCRIPT_OPTION_KEYS`

Constant.

The settings a transcript reads, in one order.

```ts
const TRANSCRIPT_OPTION_KEYS: readonly ['showRowIcons', 'showThinking', 'showToolResults', 'showEditDiffs', 'showFullShellOutput', 'groupToolCalls', 'toolCallDisplay', 'transcriptDensity', 'hideSubagentOutput', 'showRunReceipt', 'thinkingAutoExpand', 'showCacheNotices', 'codemodeShowCalls', 'showToolAttachments', 'renderDiagrams']
```

Source: [ui/src/chat/transcript-options.ts:11](https://github.com/Tahul/zidane/blob/main/ui/src/chat/transcript-options.ts#L11)

## Interfaces

### `ChatProviderProps`

Interface.

Props for [`ChatProvider`](https://zidane.si/docs/reference/ui-chat.md#ChatProvider).

```ts
interface ChatProviderProps
```

**Properties**

- `children` (`ReactNode`): The chat components that read from `host`.
- `host` (`ChatHost`): The host every chat component below reads sessions, transcripts, and actions from.
- `labels?` (`Partial<{ addDiagnosticToChat: (message: string) => string; addFavorite: string; additionalInstructions: string; additionalInstructionsHint: string; additionalInstructionsPlaceholder: string; address: string; addressPlaceholder: string; addToChat: string; agent: string; agentDraftNote: string; agentProfiles: string; archive: string; archived: string; attachFile: string; attachmentEmpty: (name: string) => string; attachmentExportPdf: (name: string) => string; attachmentNotices: string; attachmentReadFailed: (name: string) => string; attachments: string; attachmentTitle: (name: string, detail: string) => string; attachmentTooLarge: (name: string, size: string, limit: string) => string; attachmentUnreadableImage: (name: string) => string; attachmentUnsupported: (name: string) => string; authCancel: string; authCard: string; authCopied: string; authCopyDetails: string; authEnterCode: (code: string) => string; authFailed: (message: string) => string; authFixed: string; authHeadline: (auth: AuthFailure, label: string) => string; authOpeningBrowser: string; authOpenPage: string; authPaste: string; authPasteSend: string; authSettings: string; authSettingsHint: string; authSignedIn: string; authSignedInRetrying: string; authSignInAgain: string; authSwitching: (account: string) => string; authTryAgain: string; authUseAccount: (account: string) => string; authWaiting: string; autoDenied: string; back: string; badgeCopied: string; badgeNoComposer: string; badgeOpenIn: (app: string) => string; badgeOpenInBrowserPane: string; badgePathUnavailable: string; blockRunAgain: string; blockRunAttach: string; blockRunAttachmentName: string; blockRunCopy: string; blockRunFailed: (reason: string) => string; blockRunHere: string; blockRunInTerminal: string; blockRunMenu: string; blockRunNeedsTerminal: string; blockRunning: string; blockRunOutput: string; blockRunRemove: string; blockRunStop: string; blockRunStopped: string; blockRunTimedOut: string; blockRunTruncated: string; cancel: string; chats: string; chipBranch: (name: string) => string; chipChat: (name: string) => string; chipCommand: (name: string) => string; chipCommit: (sha: string) => string; chipFactAliases: string; chipFactBranch: string; chipFactChanges: string; chipFactContext: string; chipFactDate: string; chipFactModel: string; chipFactPrompts: string; chipFactSize: string; chipFactTurns: string; chipFactUpdated: string; chipLoading: string; chipNotAmongChats: string; chipNotFound: (title: string) => string; chipRemoteFile: (path: string, host: string) => string; chipSessionError: string; chipSessionRunning: string; chipSkill: (name: string) => string; chipTokens: (count: string) => string; chipUntitledChat: string; chooseModel: string; clickToAnswer: string; close: string; closeTab: (name: string) => string; code: string; collapseGroup: (label: string) => string; commandDetail: string; commandSuggestions: string; completionSuggestions: string; composerBadges: string; composerLabel: string; composerPlaceholder: string; composerPlaceholderQueue: string; composerPlaceholderSteer: string; confirm: string; confirmNo: string; confirmYes: string; contextActiveSkills: string; contextAutoCompact: (pct: number) => string; contextCacheRead: string; contextCacheWrite: string; contextClickToCopy: (hasDescription: boolean) => string; contextCopied: string; contextDeferred: string; contextDetail: string; contextEstimated: string; contextFreshInput: string; contextLastTurn: string; contextNoBreakdown: string; contextOutput: string; contextRunCount: (runs: number) => string; contextSessionCost: string; contextSummary: (used: string, window: string, pct: number) => string; contextSummaryCost: (summary: string, cost: string) => string; contextWindow: string; continue: string; continueHint: string; continueRun: string; copied: string; copy: string; copyCode: string; copyDiagramSource: string; copyImage: string; copyImageBase64: string; copyImageDataUrl: string; current: string; declineSecret: string; declineSecretHint: string; defaultAgent: string; delete: string; diagnosticsCheckedBy: (source: string) => string; diagnosticsChecking: string; diagnosticsNone: string; diagram: (type: string | null) => string; diagramError: (message: string, at: string) => string; diagramErrorAt: (line: number, column: number) => string; dismiss: string; dismissHint: string; dotAttached: string; dotAttention: string; dotCompleted: string; dotError: string; dotIdle: string; dotPending: string; dotRunning: string; earlierHistory: string; earlierLines: (count: number) => string; earlierMessages: (count: number) => string; editorConflict: string; editorConflictDetail: string; editorEmpty: string; editorOverwrite: string; editorReadFailed: (message: string) => string; editorReload: string; effortLevel: (level: string) => string; errorFailed: (region: string) => string; errorStack: string; errorTryAgain: string; estimateDue: string; estimateDueTitle: string; estimateOver: string; estimateOverTitle: string; estimatePausedTitle: (left: string) => string; estimateProblemTitle: (reason: string, message?: string) => string; estimateTitle: (left: string) => string; expandGroup: (label: string) => string; favorites: string; filePath: (path: string) => string; fileReadOnly: (path: string) => string; fileTree: string; fileUnsaved: string; fileUnsavedTitle: (path: string) => string; filterActivities: { '1d': string; '30d': string; '3d': string; '7d': string; all: string }; filterActivity: string; filterAgent: string; filterAllAgents: string; filterAllAgentsOption: string; filterAllProjects: string; filterAllProjectsOption: string; filterAny: string; filterNoAgents: string; filterNoProjects: string; filterOrigin: string; filterOrigins: { all: string; scheduled: string; unscheduled: string }; filterPicked: (count: number) => string; filterProject: string; filterSaveView: string; filterSessions: string; filterSort: string; filterSorts: { alphabetical: string; createdTime: string; recency: string }; filterSpaceDefault: string; filterStatus: string; filterStatuses: { active: string; all: string; archived: string }; filterView: string; filterViews: { agent: string; date: string; host: string; none: string; project: string; state: string }; findClose: string; findCloseHint: string; findInConversation: string; findInConversationClose: string; findInFile: string; findMatchCase: string; findNext: string; findNextHint: string; findNoResults: string; findPrevious: string; findPreviousHint: string; findReferences: string; fitDiagram: string; foldOutcomes: (ok: number, failed: number) => string; foldSteps: (count: number) => string; generatedImage: string; generatingImage: (model: string | null) => string; generatingImages: (count: number, model: string | null) => string; goToDefinition: string; goToStep: (step: string) => string; hostBadgeTitle: (host: string, status: string) => string; hostCollapse: (name: string) => string; hostExpand: (name: string) => string; hostOpenSettings: (host: string) => string; hostPicker: string; hostRunsOn: (name: string) => string; hostRunsOnSection: string; hostStatusError: (status: string, error: string) => string; hostStatuses: { 'auth-refused': string; connected: string; connecting: string; identity: string; local: string; offline: string; reconnecting: string; 'version-mismatch': string }; hostThisMachine: string; imageModelReferences: string; imageModelReferencesHint: string; imageModelsNone: string; imageModelsPill: string; imageModelTransparency: string; imageModelTransparencyHint: string; inboxEmpty: string; inboxInProgress: string; inboxNeedsYou: string; inboxPreviousSession: string; inboxRecent: string; inputCaption: string; interactionAnsweredBy: (who: string) => string; interactionApproved: string; interactionDismissed: string; interactionPlan: string; interactionQuestion: string; interactionRejected: string; interactionRevise: string; interactionsLabel: string; interactionWaitingAnswers: string; interactionWaitingDecision: string; justNow: string; loadEarlierHistory: string; loadFullOutput: string; loading: string; loadingEarlierHistory: string; loadingEarlierMessages: string; loadingFullOutput: string; mentionSuggestions: string; modalBack: string; modalFailed: string; modelAccountBlocked: (provider: string) => string; modelChain: string; modelChainNoModel: string; modelChainOrderHint: string; modelFallback: string; modelFallbackHint: string; modelFallbackPosition: (n: number) => string; modelFeatures: string; modelForNextChat: string; modelInUse: string; modelKinds: string; modelLegacy: string; modelLegacyHint: string; modelNotInCatalog: string; modelNotInCatalogHint: string; modelOptions: string; modelOptionsEmpty: string; modelOptionsHint: string; modelPrimary: string; modelPrimaryHint: string; modelReasoning: string; modelReasoningHint: string; modelRemoveFallback: (n: number) => string; modelRemoveFromChain: string; modelRemovePrimary: string; modelsChatTab: string; modelsCustomId: string; modelServing: (picked: string, serving: string) => string; modelServingFallback: string; modelsImageTab: string; modelsInUse: string; modelsJumpHint: (provider: string, digit: number | null) => string; modelsJumpToProvider: string; modelsLegacy: string; modelsLegacyHidden: (count: number) => string; modelsLoadFailed: (error: string) => string; modelsLoading: string; modelsNoMatch: (query: string) => string; modelsNoProviders: string; modelsSelected: (count: number) => string; modelsShowLegacy: string; modelsShowLegacyHint: string; modelsShownOf: (shown: number, total: number) => string; modelsTypeAnId: string; modelUnavailable: string; modelVerdictTitle: (approved: boolean, model: string, confidence: string | null) => string; modelVia: string; modelViaHint: (modelId: string, provider: string) => string; months: readonly string[]; moreActions: string; moreAttachments: (count: number) => string; newSession: string; newSessionIn: (label: string) => string; next: string; noAnswer: string; noMatches: (query: string) => string; noReferences: string; noSessions: string; noSuggestions: string; of: (index: number, count: number) => string; openFiles: string; openGroup: (label: string) => string; openImageFile: (path: string) => string; openInNewTab: string; openNamedSession: (title: string) => string; openSecrets: string; openSession: string; outputCaption: string; paletteBack: string; paletteBackHint: string; paletteChoose: string; paletteEmpty: string; paletteFilter: string; paletteLabel: string; paletteLoading: string; paletteNoMatch: (query: string) => string; paletteOpen: string; paletteRun: string; paletteScopeHint: string; paletteTurnOff: string; paletteTurnOn: string; pickModel: string; pickOneOrMore: string; planApprove: string; planReject: string; planRejectAndStop: string; planRejectNote: string; planRejectPlaceholder: string; planRevise: string; planReviseNote: string; planRevisePlaceholder: string; planSendRevision: string; previewFailed: (name: string) => string; previewTooLarge: (name: string, size: string) => string; previous: string; questionCount: (count: number) => string; queueHint: string; queueMessage: string; reasoningEffort: string; receiptAgent: string; receiptAgentSwitched: string; receiptCost: string; receiptDuration: string; receiptModel: string; receiptModelOthers: (others: number) => string; receiptSpeed: string; receiptTokens: (sent: string, received: string) => string; receiptTurns: (turns: number) => string; reload: string; removeAttachment: (name: string) => string; removeFavorite: string; rename: string; requiredHint: string; requiredMark: string; resetsAt: (time: string) => string; retry: string; retryHint: string; runningFor: (elapsed: string) => string; runReceipt: string; runRetrying: (attempt: number, max: number, source?: string) => string; runWaiting: string; saveSecurely: string; screenBack: (screen: string) => string; screenBackKey: string; scriptCallsDone: (done: number) => string; scriptCallsFailed: (failed: number) => string; scriptCallsOf: (done: number, total: number) => string; scriptCallsRunning: (running: number) => string; scriptLineCalls: (calls: number) => string; scriptLiveOutput: string; scriptLoop: string; scriptLoopRound: (round: number) => string; scriptLoopRounds: (rounds: number) => string; scriptLoopRuns: (runs: number) => string; scriptOptionOutput: string; scriptOptions: string; scriptOptionTimeout: string; scriptOptionTokens: (tokens: number) => string; scriptPercent: (percent: number) => string; scriptProgress: string; scriptWaitLeft: (seconds: number) => string; searchModels: string; searchModelsPlaceholder: string; searchSessions: string; secretDeclined: (name: string) => string; secretNote: (ttl: SecretTtl) => string; secretReused: (name: string) => string; secretSaved: (name: string, left: SecretTimeLeft) => string; secretSent: (name: string) => string; secretTtlLabel: string; secretTtlName: (ttl: SecretTtl) => string; secretValueLabel: string; secretValuePlaceholder: string; selectTurnCopied: string; selectTurnCopy: string; selectTurnDetails: string; selectTurnExit: string; selectTurnFork: string; selectTurnForkFailed: string; selectTurnMove: string; selectTurnNothingToCopy: string; selectTurnSelecting: string; sendAnswers: (count: number) => string; sendHint: string; sendMessage: string; sessionActions: string; sessionEventLabel: (title: string, verb: string, needsAttention: boolean) => string; sessions: string; setModelOptions: string; shellCancelled: string; shellExit: (code: number) => string; shellKilled: string; showDiagram: string; showDiagramSource: string; showMore: string; showMoreAttachments: (count: number) => string; showOutput: string; showSystemPrompt: string; signInCopyCode: string; signInDone: (account?: string) => string; signInEnterCode: (host: string) => string; signInFailed: string; signInInBrowser: (service: string) => string; signInNotOpened: string; signInOpenPage: string; signInPaste: string; signInStarting: string; signInSubmit: string; skip: string; spawnResumes: (childId: string) => string; spawnTask: string; stateCompleted: string; stateError: string; stateIdle: string; stateRunning: string; steerHint: string; steerMessage: string; stepDone: string; stepFailed: string; stepOf: (index: number, count: number) => string; stepResuming: string; stepRunning: string; steps: string; stepWaiting: string; stopCommand: string; stopHint: string; stopped: string; stoppedByYou: string; stopRun: string; switchAgent: string; switchingAgent: string; switchModel: string; terminal: string; terminalExited: (code: number) => string; terminalLoadFailed: (message: string) => string; thinkingLive: string; thoughtFor: (seconds: number) => string; thoughts: string; thoughtTimes: (count: number) => string; today: string; toolAttachments: string; transcriptLoading: string; turnMenuCopy: string; turnMenuCopySelection: string; turnMenuCopySelectionFailed: string; turnMenuDelete: string; turnMenuEdit: string; turnMenuEditNeedsComposer: string; turnMenuFork: string; turnMenuRewind: string; turnMenuSent: (age: string) => string; turnMenuStopFirst: (label: string) => string; turnsCompacted: string; unarchive: string; unsupportedInteraction: (tool: string) => string; viewAttachment: (name: string) => string; waitingForSlot: (max: number) => string; workerContinues: string; workerModel: string; workerSystemPrompt: string; workerSystemReplaced: string; workerType: string; working: string; wrapLines: string; yesterday: string; zoomFit: string; zoomInDiagram: string; zoomOutDiagram: string; zoomPercent: (percent: number) => string }>`): Overrides for the built-in UI strings. Keys you leave out keep the default English label.

Source: [ui/src/chat/ChatProvider.tsx:20](https://github.com/Tahul/zidane/blob/main/ui/src/chat/ChatProvider.tsx#L20)

### `DaemonOrbButtonProps`

Interface.

Props for [`DaemonOrbButton`](https://zidane.si/docs/reference/ui-chat.md#DaemonOrbButton): the orb's `health`, `running`, and `attention` plus the attributes of a `button` (without `children`).

```ts
interface DaemonOrbButtonProps extends Pick<DaemonOrbProps, 'health' | 'running' | 'attention'>, Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'>
```

**Properties**

- `attention?` (`number`, from `Pick`): Sessions waiting for you (a question, a plan, an approval).
- `health` (`DaemonHealth`, from `Pick`): Connection state of the daemon. Decides between `down`, `connecting`, and the activity states.
- `running?` (`number`, from `Pick`): Runs on the daemon right now.

Source: [ui/src/chat/DaemonOrb.tsx:92](https://github.com/Tahul/zidane/blob/main/ui/src/chat/DaemonOrb.tsx#L92)

### `DaemonOrbProps`

Interface.

Props for [`DaemonOrb`](https://zidane.si/docs/reference/ui-chat.md#DaemonOrb).

```ts
interface DaemonOrbProps
```

**Properties**

- `attention?` (`number`): Sessions waiting for you (a question, a plan, an approval).
- `className?` (`string`): Extra classes on the root element.
- `health` (`DaemonHealth`): Connection state of the daemon. Decides between `down`, `connecting`, and the activity states.
- `running?` (`number`): Runs on the daemon right now.
- `size?` (`number`, default `10`): Diameter of the orb in pixels. Defaults to 10.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/DaemonOrb.tsx:44](https://github.com/Tahul/zidane/blob/main/ui/src/chat/DaemonOrb.tsx#L44)

### `GroupGlyphProps`

Interface.

Props for [`GroupGlyph`](https://zidane.si/docs/reference/ui-chat.md#GroupGlyph).

```ts
interface GroupGlyphProps
```

**Properties**

- `className?` (`string`): Extra classes on the root element.
- `icon` (`string`): Icon class name drawn at `text-sm`, for example `i-ph-folder`.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionGroupHeader.tsx:15](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionGroupHeader.tsx#L15)

### `HostBadgeProps`

Interface.

Props for [`HostBadge`](https://zidane.si/docs/reference/ui-chat.md#HostBadge).

```ts
interface HostBadgeProps
```

**Properties**

- `className?` (`string`): Extra classes on the root element.
- `host` (`HostView`): The host.
- `icon?` (`boolean`): Lead with the host's glyph (a laptop for This computer, drives for a server). Default: no glyph.
- `onOpen?` (`() => void`): Opens the host's settings: the badge becomes a button. Absent: a plain badge.
- `style?` (`CSSProperties`): Inline styles on the root element.

Source: [ui/src/chat/HostBadge.tsx:16](https://github.com/Tahul/zidane/blob/main/ui/src/chat/HostBadge.tsx#L16)

### `HostStatusDotProps`

Interface.

Props for [`HostStatusDot`](https://zidane.si/docs/reference/ui-chat.md#HostStatusDot).

```ts
interface HostStatusDotProps
```

**Properties**

- `className?` (`string`): Extra classes on the root element.
- `host` (`HostView`): The host whose connection the dot shows.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/HostStatusDot.tsx:24](https://github.com/Tahul/zidane/blob/main/ui/src/chat/HostStatusDot.tsx#L24)

### `HostTranscriptProps`

Interface.

Props for [`HostTranscript`](https://zidane.si/docs/reference/ui-chat.md#HostTranscript): the [`TranscriptProps`](https://zidane.si/docs/reference/ui-chat.md#TranscriptProps) minus the ones the host supplies (`events`, `streaming`, `sessionId`), plus `sessionId` and `onOpenSession`.

```ts
interface HostTranscriptProps extends Omit<TranscriptProps, 'events' | 'streaming' | 'sessionId'>
```

**Properties**

- `children?` (`ReactNode`, from `Omit`): Rendered after the rows, inside the transcript (a menu the app owns).
- `className?` (`string`, from `Omit`): Extra class names for the transcript's root element.
- `options?` (`Partial<TranscriptOptions>`, from `Omit`): Memoize it: a new object re-renders the transcript. Missing fields take `DEFAULT_TRANSCRIPT_OPTIONS`.
- `runStatus?` (`{ retry: RunRetry | null }`, from `Omit`): Opts the live work row (compact density's fold) in to naming the run's
  status: "Retrying 2/3" while `retry` is set, "Waiting for the model"
  once nothing has moved on screen for a moment, each with how long it has
  lasted in a chip. Absent: the row says "Working". Memoize it.
- `selection?` (`TranscriptSelection`, from `Omit`): Absent: no select-turn mode. Memoize it.
- `sessionId` (`string`): Id of the session whose transcript to show. Passed to `host.transcript`.
- `style?` (`CSSProperties`, from `Omit`): Inline styles on the root element, merged after the component's own.
- `turnMenu?` (`TranscriptTurnMenu`, from `Omit`): Absent: turns have no menu. Memoize it.
- `onOpenSession?` (`(sessionId: string) => void`): Shows another session the transcript names (a worker, a reporting session). Absent: names are plain text.
- `onOpenSettings?` (`(target: AuthSettingsTarget) => void`): Opens Settings on the account (or MCP server) a failed sign-in names. Absent: its card has no Settings button.
- `onRunInTerminal?` (`(input: string) => void`): Opens a new terminal of the session and types `input` into it (a reply's shell block). Absent: blocks offer no Run in a terminal.

Source: [ui/src/chat/HostTranscript.tsx:25](https://github.com/Tahul/zidane/blob/main/ui/src/chat/HostTranscript.tsx#L25)

### `PdfPreviewProps`

Interface.

Props for [`PdfPreview`](https://zidane.si/docs/reference/ui-chat.md#PdfPreview).

```ts
interface PdfPreviewProps
```

**Properties**

- `className?` (`string`): Extra classes on the root element.
- `name` (`string`): The PDF's name, the frame's title.
- `src` (`string`): The PDF: a `data:` URL or any URL the page can load.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/PdfPreview.tsx:11](https://github.com/Tahul/zidane/blob/main/ui/src/chat/PdfPreview.tsx#L11)

### `RunEstimateChipProps`

Interface.

Props of [`RunEstimateChip`](https://zidane.si/docs/reference/ui-chat.md#RunEstimateChip).

```ts
interface RunEstimateChipProps
```

**Properties**

- `className?` (`string`): Extra classes on the chip.
- `detail?` (`string | (() => string)`): A line after the chip's own in its tooltip. A function is read when the
  tooltip is about to show (pointer over, focus): a line that changes every
  second (the sidebar's elapsed time) costs no render until then.
- `estimate` (`RunEstimateView`): The estimate to count down, or the problem that keeps the run from having one.
- `style?` (`CSSProperties`): Inline styles on the chip.

Source: [ui/src/chat/RunEstimateChip.tsx:125](https://github.com/Tahul/zidane/blob/main/ui/src/chat/RunEstimateChip.tsx#L125)

### `RunEstimatesProviderProps`

Interface.

Props of [`RunEstimatesProvider`](https://zidane.si/docs/reference/ui-chat.md#RunEstimatesProvider).

```ts
interface RunEstimatesProviderProps
```

**Properties**

- `children?` (`ReactNode`): What reads it.
- `store` (`RunEstimatesStore`): The app's estimates store (`createRunEstimates`).

Source: [ui/src/chat/RunEstimateChip.tsx:33](https://github.com/Tahul/zidane/blob/main/ui/src/chat/RunEstimateChip.tsx#L33)

### `SessionFilterAction`

Interface.

A row that does something and closes the menu (Save view as space).

```ts
interface SessionFilterAction
```

**Properties**

- `icon?` (`string`): An icon class before the label.
- `id` (`string`): Unique among the actions.
- `label` (`string`): The row's label.
- `onSelect` (`() => void`): Runs it.

Source: [ui/src/chat/SessionFilterMenu.tsx:86](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L86)

### `SessionFilterAxis`

Interface.

One axis: its value, the choices in menu order (default: the app's), and the change handler.

```ts
interface SessionFilterAxis<T extends string>
```

**Type parameters**

- `T` (`extends string`)

**Properties**

- `onChange` (`(next: T) => void`): Called with the choice the user picks.
- `options?` (`readonly T[]`): Choices to offer, in menu order. Omit to offer every choice of that axis in the default order.
- `value` (`T`): Currently selected choice.

Source: [ui/src/chat/SessionFilterMenu.tsx:98](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L98)

### `SessionFilterMenuProps`

Interface.

Props for [`SessionFilterMenu`](https://zidane.si/docs/reference/ui-chat.md#SessionFilterMenu). Each axis shows only when its prop is set.

```ts
interface SessionFilterMenuProps<V extends SessionView = SessionGroupBy>
```

**Type parameters**

- `V` (`extends SessionView`, default `SessionGroupBy`)

**Properties**

- `actions?` (`readonly SessionFilterAction[]`): Rows that act, in a last group.
- `activity?` (`SessionFilterAxis<SessionActivityFilter>`): Last-activity filter axis: limit the list to sessions active within a window (`1d` to `30d`, or `all`).
- `className?` (`string`): Extra classes on the root element (the faders trigger button).
- `extras?` (`readonly SessionFilterExtra[]`): More rows, each in the group its `placement` names, after the built-in ones.
- `project?` (`SessionProjectAxis`): Project filter axis: limit the list to one project.
- `sort?` (`SessionFilterAxis<SessionSortBy>`): Sort axis: `alphabetical`, `createdTime`, or `recency`.
- `status?` (`SessionFilterAxis<SessionArchiveFilter>`): Archive filter axis: show active, archived, or all sessions.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.
- `view?` (`SessionFilterAxis<V>`): Grouping ("Per directory" is the default). `host` is offered only when listed in `options`.

Source: [ui/src/chat/SessionFilterMenu.tsx:118](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L118)

### `SessionGroupHeaderProps`

Interface.

Props for [`SessionGroupHeader`](https://zidane.si/docs/reference/ui-chat.md#SessionGroupHeader).

```ts
interface SessionGroupHeaderProps
```

**Properties**

- `action?` (`ReactNode`): Trailing control (a "new session here" button), revealed on hover and focus.
- `active?` (`boolean`): The group's page is the one shown (`onOpen`): the heading wears the active row's chip.
- `className?` (`string`): Extra class names for the heading's `<li>` (an app's sticky headers).
- `collapsed` (`boolean`): Whether the group's rows are hidden. Drives `aria-expanded` and the caret.
- `icon?` (`ReactNode`): The icon column: a `GroupGlyph`, or a host's own control (a project icon picker).
- `id` (`string`): Group id, passed to `onToggle` when the label is clicked.
- `label` (`string`): Group title shown next to the icon.
- `onContextMenu?` (`(event: MouseEvent<HTMLLIElement>) => void`): A right-click on the heading (the group's own actions menu).
- `onOpen?` (`(id: string) => void`): Called with the group `id` when the user clicks the label: it opens the group's page. Absent: the label toggles.
- `onToggle` (`(id: string) => void`): Called with the group `id` when the user toggles the label (or, with `onOpen`, the chevron).
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionGroupHeader.tsx:44](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionGroupHeader.tsx#L44)

### `SessionHostHeaderProps`

Interface.

Props for [`SessionHostHeader`](https://zidane.si/docs/reference/ui-chat.md#SessionHostHeader).

```ts
interface SessionHostHeaderProps
```

**Properties**

- `className?` (`string`): Extra class names for the header's `<li>` (an app's sticky headers).
- `collapsed` (`boolean`): The host's sessions are folded away.
- `host` (`HostView`): The host the section lists.
- `id` (`string`): The section's id, handed back to `onToggle`.
- `onToggle` (`(id: string) => void`): The collapse toggle was clicked.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionHostHeader.tsx:14](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionHostHeader.tsx#L14)

### `SessionListProps`

Interface.

Props for [`SessionList`](https://zidane.si/docs/reference/ui-chat.md#SessionList).

```ts
interface SessionListProps
```

**Properties**

- `activeId?` (`string | null`, default `null`): Id of the session shown as selected. `null` or omitted marks none.
- `aria-label?` (`string`): The list's landmark name (default: the `sessions` label); set it when a page shows several.
- `calendar?` (`CalendarOptions`): Pin the zone and locale of date labels; set it with `now` when a server renders the list too.
- `className?` (`string`): Extra class names for the list's root element.
- `confirmDelete?` (`boolean`): Ask before deleting (default true).
- `empty?` (`ReactNode`): Shown when the host has no sessions at all.
- `groupBy?` (`SessionGroupBy`, default `'none'`): How rows are grouped: `project`, `date`, `state`, or `none` for a flat list.
- `now?` (`number`): Pin the clock (screenshots, server renders); live minute ticks otherwise.
- `onNewSession?` (`() => void`): Shows a "New session" button (and is called by it).
- `onNewSessionIn?` (`(group: string) => void`): Called with the group's path when the user clicks "+" on a group header. The app creates the session.
- `onSelect` (`(id: string) => void`): Called with the session id when the user clicks a row or activates it with the keyboard.
- `rowProps?` (`(session: ChatSession) => RowExtras`): Per-session additions: badges, meta, a second line, menu items.
- `search?` (`boolean`): Show the title search field above the list.
- `sessions?` (`readonly ChatSession[]`): Override the host's list (a filtered or merged view).
- `sortBy?` (`SessionSortBy`, default `'recency'`): Row order inside a group: `recency`, `createdTime`, or `alphabetical`.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionList.tsx:50](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionList.tsx#L50)

### `SessionListRowProps`

Interface.

Props for [`SessionListRow`](https://zidane.si/docs/reference/ui-chat.md#SessionListRow). Every app-specific part is a slot (`status`, `titleDisplay`, `badges`, `meta`, `sub`) or data (`menuItems`).

```ts
interface SessionListRowProps
```

**Properties**

- `active?` (`boolean`, default `false`): Marks the row as the selected session.
- `archived?` (`boolean`, default `false`): Marks the session as archived. The default glyph becomes an archive icon.
- `arrived?` (`boolean`): Plays the row's arrival sweep (`data-arrived`, styles/chat.css).
- `badges?` (`ReactNode`): After the title, on its line (an environment badge). Hidden while renaming.
- `className?` (`string`): Extra classes on the root element.
- `dot?` (`SessionDotState`, default `'idle'`): State drawn by the default `StatusDot` when `status` is not set.
- `expanded?` (`boolean`): The row folds rows under it and a click toggles them: `true` while they show, `false` while
  folded (`aria-expanded` on the row's button). Absent: the row folds nothing.
- `id` (`string`): Session id, passed to `onSelect`, `onStartRename`, and the menu callbacks.
- `menuItems?` (`readonly RowActionItem[]`): Row actions; none hides the trigger.
- `menuLabel?` (`string`): The actions trigger's accessible name. Default: `labels.sessionActions` (a row that is no session names its own).
- `menuOpen?` (`boolean`): Controlled menu (one open menu across a list); uncontrolled when omitted.
- `meta?` (`ReactNode`): Trailing, on the title's line (`now`, `3h`, a run's elapsed time). Hidden while renaming.
- `onCloseMenu?` (`(id: string) => void`): Called with `id` when the actions menu closes. Used with a controlled `menuOpen`.
- `onOpenMenu?` (`(id: string) => void`): Called with `id` when the row asks to open its actions menu. Used with a controlled `menuOpen`.
- `onRenameCancel?` (`() => void`): Called when the user abandons the rename.
- `onRenameChange?` (`(value: string) => void`): Called with the new text as the user types in the rename field.
- `onRenameCommit?` (`() => void | Promise<void>`): Called when the user confirms the rename.
- `onSelect` (`(id: string) => void`): Called with `id` when the user clicks the row. Not called while renaming.
- `onStartRename?` (`(id: string, title: string) => void`): Called with `id` and `title` when the user asks to edit the title in place.
- `renameValue?` (`string`, default `''`): Current text of the rename field. Only used while `renaming`.
- `renaming?` (`boolean`, default `false`): Replaces the title with an inline text field.
- `status?` (`ReactNode`): Leading glyph. Default: a `StatusDot` for `dot` (an archive glyph when archived).
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.
- `sub?` (`ReactNode`): A second line (a search excerpt, commits).
- `subClassName?` (`string`): Extra classes on the second line's box.
- `title` (`string`): Session title. Shown unless `titleDisplay` replaces it, and used as the rename field's text.
- `titleDisplay?` (`ReactNode`): What the title shows when not renaming (badges inside a title, highlighting). Default: the title.

Source: [ui/src/chat/SessionListRow.tsx:57](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionListRow.tsx#L57)

### `SessionProjectAxis`

Interface.

The project axis: `null` is every project; `options` are the project names.

```ts
interface SessionProjectAxis
```

**Properties**

- `onChange` (`(next: string | null) => void`): Called with the picked project name, or `null` when the user picks every project.
- `options` (`readonly string[]`): Project names to offer. When empty, the submenu shows a hint instead.
- `value` (`string | null`): Selected project name, or `null` for every project.

Source: [ui/src/chat/SessionFilterMenu.tsx:108](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L108)

### `SessionStreamsProviderProps`

Interface.

Props of [`SessionStreamsProvider`](https://zidane.si/docs/reference/ui-chat.md#SessionStreamsProvider).

```ts
interface SessionStreamsProviderProps<K extends string = string>
```

**Type parameters**

- `K` (`extends string`, default `string`)

**Properties**

- `children?` (`ReactNode`): The components that read the streams.
- `streams` (`SessionStreams<K>`): The streams the hooks read; keep its identity for the provider's life.

Source: [ui/src/chat/SessionStreamsProvider.tsx:55](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionStreamsProvider.tsx#L55)

### `ShowMoreRowProps`

Interface.

Props for [`ShowMoreRow`](https://zidane.si/docs/reference/ui-chat.md#ShowMoreRow).

```ts
interface ShowMoreRowProps
```

**Properties**

- `className?` (`string`): Extra classes on the root element.
- `hiddenCount` (`number`): Number of rows still hidden, shown in parentheses after the label.
- `onExpand` (`() => void`): Called when the user clicks the row to reveal the hidden rows.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/SessionGroupHeader.tsx:148](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionGroupHeader.tsx#L148)

### `StatusDotProps`

Interface.

Props for [`StatusDot`](https://zidane.si/docs/reference/ui-chat.md#StatusDot).

```ts
interface StatusDotProps
```

**Properties**

- `className?` (`string`): Extra classes on the root element.
- `label?` (`string`): Accessible name and tooltip; defaults to the state's label.
- `state` (`SessionDotState`): The state the dot shows.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/StatusDot.tsx:88](https://github.com/Tahul/zidane/blob/main/ui/src/chat/StatusDot.tsx#L88)

### `TextPreviewProps`

Interface.

Props for [`TextPreview`](https://zidane.si/docs/reference/ui-chat.md#TextPreview): the [`TextPreviewSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TextPreviewSlotProps) plus the root's class and style.

```ts
interface TextPreviewProps extends TextPreviewSlotProps
```

**Properties**

- `className?` (`string`): Extra classes on the root element.
- `mediaType` (`string`, from `TextPreviewSlotProps`): Its MIME type, for example `text/markdown`.
- `name` (`string`, from `TextPreviewSlotProps`): The file name.
- `size` (`number`, from `TextPreviewSlotProps`): Its size in bytes.
- `src` (`string`, from `TextPreviewSlotProps`): Where the text is: a `data:` URL, or any URL the page can fetch.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.

Source: [ui/src/chat/TextPreview.tsx:52](https://github.com/Tahul/zidane/blob/main/ui/src/chat/TextPreview.tsx#L52)

### `ThrobberProps`

Interface.

Props for [`Throbber`](https://zidane.si/docs/reference/ui-chat.md#Throbber).

```ts
interface ThrobberProps
```

**Properties**

- `className?` (`string`): Extra classes on the root.
- `colors?` (`readonly [string, string]`): Optional override pair — wins over `variant` and `theme.colors.throbber`.
- `hideEllipsis?` (`boolean`): Hide the trailing ellipsis (compact inline use).
- `size?` (`number`): Number of glyph cells. Default 15 — matches the TUI CrushThrobber.
- `style?` (`CSSProperties`): Inline styles on the root.
- `variant?` (`ThrobberVariant`): Semantic color tone (defaults to `'accent'`). See [`ThrobberVariant`](https://zidane.si/docs/reference/ui-chat.md#ThrobberVariant).

Source: [ui/src/chat/Throbber.tsx:42](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Throbber.tsx#L42)

### `ToolMediaItem`

Interface.

One media block of a tool result, as parsed from its text stand-in.

```ts
interface ToolMediaItem
```

**Properties**

- `index` (`number`): Position among the result's media blocks: the address the app serves it at.
- `kind` (`'audio' | 'video' | 'image'`): What the block is.
- `marker` (`string`): The stand-in line, shown again if the media fails to load.
- `mediaType` (`string`): The block's MIME type, for example `image/png`.

Source: [ui/src/chat/headless/transcript/tool-media.ts:9](https://github.com/Tahul/zidane/blob/main/ui/src/chat/headless/transcript/tool-media.ts#L9)

### `TranscriptProps`

Interface.

Props for [`Transcript`](https://zidane.si/docs/reference/ui-chat.md#Transcript).

```ts
interface TranscriptProps
```

**Properties**

- `children?` (`ReactNode`): Rendered after the rows, inside the transcript (a menu the app owns).
- `className?` (`string`): Extra class names for the transcript's root element.
- `events` (`readonly ChatEvent[]`): The session's events, oldest first. The transcript turns them into rows.
- `options?` (`Partial<TranscriptOptions>`): Memoize it: a new object re-renders the transcript. Missing fields take `DEFAULT_TRANSCRIPT_OPTIONS`.
- `runStatus?` (`{ retry: RunRetry | null }`): Opts the live work row (compact density's fold) in to naming the run's
  status: "Retrying 2/3" while `retry` is set, "Waiting for the model"
  once nothing has moved on screen for a moment, each with how long it has
  lasted in a chip. Absent: the row says "Working". Memoize it.
- `selection?` (`TranscriptSelection`): Absent: no select-turn mode. Memoize it.
- `sessionId` (`string | null`): The session shown; switching it replays the first-paint settle (no enter animations).
- `streaming` (`boolean`): A run is in flight: the last reply may still be streaming.
- `style?` (`CSSProperties`): Inline styles on the root element, merged after the component's own.
- `turnMenu?` (`TranscriptTurnMenu`): Absent: turns have no menu. Memoize it.

Source: [ui/src/chat/Transcript.tsx:107](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Transcript.tsx#L107)

### `TranscriptSelection`

Interface.

Select-turn mode, driven by the app (its keys move `selected`).

```ts
interface TranscriptSelection
```

**Properties**

- `selected` (`string | null`): The selected turn while the mode is on in this transcript; null when off.
- `registerStops?` (`(source: () => SelectStops) => () => void`): Receives a function answering the turns the cursor can walk, from the
  rows painted right now (ask it on entering the mode and on every move).
  Returns the unregister.

Source: [ui/src/chat/Transcript.tsx:95](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Transcript.tsx#L95)

## Types

### `AttachmentTextState`

Type.

What a text preview shows: the text once it is in, or that it could not be read.

```ts
type AttachmentTextState =
  | { status: 'loading' }
  | { status: 'ready'; text: string }
  | { status: 'failed' }
```

Source: [ui/src/chat/TextPreview.tsx:22](https://github.com/Tahul/zidane/blob/main/ui/src/chat/TextPreview.tsx#L22)

### `OrbState`

Type.

The visual state of a [`DaemonOrb`](https://zidane.si/docs/reference/ui-chat.md#DaemonOrb), derived from daemon health and activity by [`orbState`](https://zidane.si/docs/reference/ui-chat.md#orbState).

```ts
type OrbState = 'idle' | 'running' | 'attention' | 'connecting' | 'down'
```

Source: [ui/src/chat/DaemonOrb.tsx:27](https://github.com/Tahul/zidane/blob/main/ui/src/chat/DaemonOrb.tsx#L27)

### `SessionActivityFilter`

Type.

Last-activity window of the activity filter: sessions active within `1d`, `3d`, `7d`, or `30d`, or `all`.

```ts
type SessionActivityFilter = 'all' | '1d' | '3d' | '7d' | '30d'
```

Source: [ui/src/chat/SessionFilterMenu.tsx:22](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L22)

### `SessionArchiveFilter`

Type.

Which sessions the status filter shows: `active`, `archived`, or `all`.

```ts
type SessionArchiveFilter = 'active' | 'archived' | 'all'
```

Source: [ui/src/chat/SessionFilterMenu.tsx:20](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L20)

### `SessionDotState`

Type.

Visual state of a [`StatusDot`](https://zidane.si/docs/reference/ui-chat.md#StatusDot).

```ts
type SessionDotState =
  | 'idle'
  | 'running'
  | 'pending'
  | 'completed'
  | 'error'
  | 'attention'
  | 'attached'
```

Source: [ui/src/chat/StatusDot.tsx:22](https://github.com/Tahul/zidane/blob/main/ui/src/chat/StatusDot.tsx#L22)

### `SessionFilterExtra`

Type.

An extra row of the menu: one choice among options, an on/off toggle, or several picks.

```ts
type SessionFilterExtra =
  | { atDefault: boolean; current: string; id: string; kind: 'choice'; label: string; onChange: (next: string) => void; options: readonly { id: string; label: string }[]; placement: SessionFilterPlacement; value: string }
  | { checked: boolean; id: string; kind: 'toggle'; label: string; onChange: (checked: boolean) => void; placement: SessionFilterPlacement }
  | { current: readonly string[]; id: string; kind: 'multi'; label: string; onChange: (next: readonly string[]) => void; options: readonly { id: string; label: string }[]; placement: SessionFilterPlacement; value: string }
```

Source: [ui/src/chat/SessionFilterMenu.tsx:34](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L34)

### `SessionFilterPlacement`

Type.

Where an extra row sits: with the view, the filters or the sort.

```ts
type SessionFilterPlacement = 'view' | 'filter' | 'sort'
```

Source: [ui/src/chat/SessionFilterMenu.tsx:31](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L31)

### `SessionView`

Type.

A choice of the view axis: a grouping of the list model, `host`, one
section per host, which the app lays out itself (the desktop sidebar's Per host),
or `agent`, one group per agent.

```ts
type SessionView = SessionGroupBy | 'host' | 'agent'
```

Source: [ui/src/chat/SessionFilterMenu.tsx:28](https://github.com/Tahul/zidane/blob/main/ui/src/chat/SessionFilterMenu.tsx#L28)

### `ThrobberVariant`

Type.

Canonical TUI `StatusSpinner` exposes two semantic tones:

- `'accent'` (default) → brand-blue, used while the agent is
  streaming a normal turn or a stub-handle is in flight.
- `'warn'` → amber, used during auto-compaction or any
  destructive-ish background task so the user knows their input
  will land against a re-shaped context. Mirrors the canonical
  `<TitleOverlay variant="warn">` cue.

Explicit `colors` still wins — variant only chooses the default pair
when no override is passed.

```ts
type ThrobberVariant = 'accent' | 'warn'
```

Source: [ui/src/chat/Throbber.tsx:39](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Throbber.tsx#L39)

### `TranscriptOptions`

Type.

The display settings a transcript reads: zidane's `Settings` fields of the same names.

```ts
type TranscriptOptions = Pick<Settings, 'showRowIcons' | 'showThinking' | 'showToolResults' | 'showEditDiffs' | 'showFullShellOutput' | 'groupToolCalls' | 'toolCallDisplay' | 'transcriptDensity' | 'hideSubagentOutput' | 'showRunReceipt' | 'thinkingAutoExpand' | 'showCacheNotices' | 'codemodeShowCalls' | 'showToolAttachments' | 'renderDiagrams'>
```

Source: [ui/src/chat/Transcript.tsx:56](https://github.com/Tahul/zidane/blob/main/ui/src/chat/Transcript.tsx#L56)

## Re-exports

These names are documented on the entry point that owns them.

- [zidane-ui/chat/composer](https://zidane.si/docs/reference/ui-chat-composer.md): [`__resetComposerScopesForTests`](https://zidane.si/docs/reference/ui-chat-composer.md#__resetComposerScopesForTests), [`AgentPicker`](https://zidane.si/docs/reference/ui-chat-composer.md#AgentPicker), [`AgentPickerDialog`](https://zidane.si/docs/reference/ui-chat-composer.md#AgentPickerDialog), [`AgentPickerDialogProps`](https://zidane.si/docs/reference/ui-chat-composer.md#AgentPickerDialogProps), [`AgentPickerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#AgentPickerProps), [`AgentProfile`](https://zidane.si/docs/reference/ui-chat-composer.md#AgentProfile), [`ApprovalDock`](https://zidane.si/docs/reference/ui-chat-composer.md#ApprovalDock), [`ApprovalDockProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ApprovalDockProps), [`ArchivedBanner`](https://zidane.si/docs/reference/ui-chat-composer.md#ArchivedBanner), [`ArchivedBannerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ArchivedBannerProps), [`ATTACHMENT_NOTICE_MS`](https://zidane.si/docs/reference/ui-chat-composer.md#ATTACHMENT_NOTICE_MS), [`attachmentErrorText`](https://zidane.si/docs/reference/ui-chat-composer.md#attachmentErrorText), [`AttachmentLabelFn`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentLabelFn), [`attachmentLightboxItems`](https://zidane.si/docs/reference/ui-chat-composer.md#attachmentLightboxItems), [`AttachmentNotices`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentNotices), [`AttachmentNoticesProps`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentNoticesProps), [`AttachmentRefusedError`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentRefusedError), [`AttachmentRow`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentRow), [`AttachmentRowProps`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentRowProps), [`AttachmentTiles`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentTiles), [`AttachmentTilesProps`](https://zidane.si/docs/reference/ui-chat-composer.md#AttachmentTilesProps), [`canJoinChain`](https://zidane.si/docs/reference/ui-chat-composer.md#canJoinChain), [`catalogFromProviders`](https://zidane.si/docs/reference/ui-chat-composer.md#catalogFromProviders), [`claimComposerFocus`](https://zidane.si/docs/reference/ui-chat-composer.md#claimComposerFocus), [`colorForCategory`](https://zidane.si/docs/reference/ui-chat-composer.md#colorForCategory), [`compactWindow`](https://zidane.si/docs/reference/ui-chat-composer.md#compactWindow), [`Composer`](https://zidane.si/docs/reference/ui-chat-composer.md#Composer), [`ComposerBadge`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerBadge), [`ComposerBadges`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerBadges), [`ComposerBadgesProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerBadgesProps), [`ComposerBadgeTone`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerBadgeTone), [`ComposerControls`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerControls), [`ComposerControlsProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerControlsProps), [`ComposerDefaults`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerDefaults), [`ComposerDock`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerDock), [`ComposerDockProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerDockProps), [`ComposerDraft`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerDraft), [`ComposerHandle`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerHandle), [`ComposerHostProvider`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerHostProvider), [`ComposerHostProviderProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerHostProviderProps), [`ComposerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerProps), [`ComposerResult`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerResult), [`ComposerRetry`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerRetry), [`ComposerStatusPills`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerStatusPills), [`ComposerStatusPillsProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerStatusPillsProps), [`ComposerSubmit`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerSubmit), [`ComposerTarget`](https://zidane.si/docs/reference/ui-chat-composer.md#ComposerTarget), [`ContextBreakdown`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextBreakdown), [`ContextBreakdownData`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextBreakdownData), [`ContextBreakdownProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextBreakdownProps), [`ContextCost`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextCost), [`contextGauge`](https://zidane.si/docs/reference/ui-chat-composer.md#contextGauge), [`ContextGauge`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextGauge), [`ContextOrb`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextOrb), [`ContextOrbProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextOrbProps), [`ContextUsage`](https://zidane.si/docs/reference/ui-chat-composer.md#ContextUsage), [`ConversationBadges`](https://zidane.si/docs/reference/ui-chat-composer.md#ConversationBadges), [`ConversationBadgesProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ConversationBadgesProps), [`Cursor`](https://zidane.si/docs/reference/ui-chat-composer.md#Cursor), [`CycleAgentOptions`](https://zidane.si/docs/reference/ui-chat-composer.md#CycleAgentOptions), [`decodeDataUrlAsText`](https://zidane.si/docs/reference/ui-chat-composer.md#decodeDataUrlAsText), [`DEFAULT_BADGE_ORDER`](https://zidane.si/docs/reference/ui-chat-composer.md#DEFAULT_BADGE_ORDER), [`defaultAttachmentTileLabel`](https://zidane.si/docs/reference/ui-chat-composer.md#defaultAttachmentTileLabel), [`detectLanguage`](https://zidane.si/docs/reference/ui-chat-composer.md#detectLanguage), [`DockCard`](https://zidane.si/docs/reference/ui-chat-composer.md#DockCard), [`DockCardProps`](https://zidane.si/docs/reference/ui-chat-composer.md#DockCardProps), [`DockRow`](https://zidane.si/docs/reference/ui-chat-composer.md#DockRow), [`DockRowProps`](https://zidane.si/docs/reference/ui-chat-composer.md#DockRowProps), [`DraftServer`](https://zidane.si/docs/reference/ui-chat-composer.md#DraftServer), [`DraftTarget`](https://zidane.si/docs/reference/ui-chat-composer.md#DraftTarget), [`DraftTargetOptions`](https://zidane.si/docs/reference/ui-chat-composer.md#DraftTargetOptions), [`DraftTargetRequest`](https://zidane.si/docs/reference/ui-chat-composer.md#DraftTargetRequest), [`effectiveImageModel`](https://zidane.si/docs/reference/ui-chat-composer.md#effectiveImageModel), [`EFFORT_LEVELS`](https://zidane.si/docs/reference/ui-chat-composer.md#EFFORT_LEVELS), [`EffortLevel`](https://zidane.si/docs/reference/ui-chat-composer.md#EffortLevel), [`EffortPickerDialog`](https://zidane.si/docs/reference/ui-chat-composer.md#EffortPickerDialog), [`EffortPickerDialogProps`](https://zidane.si/docs/reference/ui-chat-composer.md#EffortPickerDialogProps), [`findModel`](https://zidane.si/docs/reference/ui-chat-composer.md#findModel), [`focusComposer`](https://zidane.si/docs/reference/ui-chat-composer.md#focusComposer), [`focusComposerWhenReady`](https://zidane.si/docs/reference/ui-chat-composer.md#focusComposerWhenReady), [`formatBytes`](https://zidane.si/docs/reference/ui-chat-composer.md#formatBytes), [`groupKeyOf`](https://zidane.si/docs/reference/ui-chat-composer.md#groupKeyOf), [`hasComposerFor`](https://zidane.si/docs/reference/ui-chat-composer.md#hasComposerFor), [`hasFocusedComposer`](https://zidane.si/docs/reference/ui-chat-composer.md#hasFocusedComposer), [`HostAgentPicker`](https://zidane.si/docs/reference/ui-chat-composer.md#HostAgentPicker), [`HostAgentPickerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#HostAgentPickerProps), [`HostComposer`](https://zidane.si/docs/reference/ui-chat-composer.md#HostComposer), [`HostComposerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#HostComposerProps), [`HostContextOrb`](https://zidane.si/docs/reference/ui-chat-composer.md#HostContextOrb), [`HostContextOrbProps`](https://zidane.si/docs/reference/ui-chat-composer.md#HostContextOrbProps), [`HostModelChainList`](https://zidane.si/docs/reference/ui-chat-composer.md#HostModelChainList), [`HostModelChainListProps`](https://zidane.si/docs/reference/ui-chat-composer.md#HostModelChainListProps), [`HostModelImages`](https://zidane.si/docs/reference/ui-chat-composer.md#HostModelImages), [`HostModelOptionsPicker`](https://zidane.si/docs/reference/ui-chat-composer.md#HostModelOptionsPicker), [`HostModelOptionsPickerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#HostModelOptionsPickerProps), [`HostModelPicker`](https://zidane.si/docs/reference/ui-chat-composer.md#HostModelPicker), [`HostModelPickerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#HostModelPickerProps), [`HostPicker`](https://zidane.si/docs/reference/ui-chat-composer.md#HostPicker), [`HostPickerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#HostPickerProps), [`imageCatalogRows`](https://zidane.si/docs/reference/ui-chat-composer.md#imageCatalogRows), [`imageModelKey`](https://zidane.si/docs/reference/ui-chat-composer.md#imageModelKey), [`ImageModelList`](https://zidane.si/docs/reference/ui-chat-composer.md#ImageModelList), [`ImageModelListProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ImageModelListProps), [`isCaretAtEnd`](https://zidane.si/docs/reference/ui-chat-composer.md#isCaretAtEnd), [`isCaretAtStart`](https://zidane.si/docs/reference/ui-chat-composer.md#isCaretAtStart), [`isFocusedComposer`](https://zidane.si/docs/reference/ui-chat-composer.md#isFocusedComposer), [`isPdfAttachment`](https://zidane.si/docs/reference/ui-chat-composer.md#isPdfAttachment), [`isTextLike`](https://zidane.si/docs/reference/ui-chat-composer.md#isTextLike), [`lineupKeyOf`](https://zidane.si/docs/reference/ui-chat-composer.md#lineupKeyOf), [`MAX_FILE_ATTACHMENT_BYTES`](https://zidane.si/docs/reference/ui-chat-composer.md#MAX_FILE_ATTACHMENT_BYTES), [`MAX_IMAGE_ATTACHMENT_BYTES`](https://zidane.si/docs/reference/ui-chat-composer.md#MAX_IMAGE_ATTACHMENT_BYTES), [`MentionItem`](https://zidane.si/docs/reference/ui-chat-composer.md#MentionItem), [`mergeBadgeOrder`](https://zidane.si/docs/reference/ui-chat-composer.md#mergeBadgeOrder), [`ModelCatalogState`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelCatalogState), [`ModelChainFooter`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainFooter), [`ModelChainFooterProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainFooterProps), [`ModelChainHeader`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainHeader), [`ModelChainHeaderProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainHeaderProps), [`ModelChainImages`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainImages), [`ModelChainList`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainList), [`ModelChainListProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainListProps), [`ModelChainPopover`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainPopover), [`ModelChainPopoverProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainPopoverProps), [`ModelChainRow`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainRow), [`ModelChainRowProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainRowProps), [`ModelChainRows`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainRows), [`ModelChainRowsProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainRowsProps), [`ModelChainTooltip`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainTooltip), [`ModelChainTooltipProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChainTooltipProps), [`ModelChoice`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelChoice), [`ModelFlag`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelFlag), [`ModelFlagProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelFlagProps), [`ModelGroupHeader`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelGroupHeader), [`ModelGroupHeaderProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelGroupHeaderProps), [`modelKey`](https://zidane.si/docs/reference/ui-chat-composer.md#modelKey), [`ModelKind`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelKind), [`modelLineup`](https://zidane.si/docs/reference/ui-chat-composer.md#modelLineup), [`ModelMeta`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelMeta), [`ModelMetaProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelMetaProps), [`modelNameOf`](https://zidane.si/docs/reference/ui-chat-composer.md#modelNameOf), [`ModelOption`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelOption), [`ModelOptionsPicker`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelOptionsPicker), [`ModelOptionsPickerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelOptionsPickerProps), [`ModelPicker`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelPicker), [`ModelPickerDialog`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelPickerDialog), [`ModelPickerDialogProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelPickerDialogProps), [`ModelPickerFrame`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelPickerFrame), [`ModelPickerFrameProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelPickerFrameProps), [`ModelPickerProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelPickerProps), [`ModelProviderChip`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelProviderChip), [`ModelProviderChipProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelProviderChipProps), [`ModelProviderPills`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelProviderPills), [`ModelProviderPillsProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelProviderPillsProps), [`ModelReasoning`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelReasoning), [`ModelReasoningProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelReasoningProps), [`modelSearchScore`](https://zidane.si/docs/reference/ui-chat-composer.md#modelSearchScore), [`ModelWindow`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelWindow), [`ModelWindowProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ModelWindowProps), [`NewSessionDefaults`](https://zidane.si/docs/reference/ui-chat-composer.md#NewSessionDefaults), [`NewSessionModelSource`](https://zidane.si/docs/reference/ui-chat-composer.md#NewSessionModelSource), [`nextProfileId`](https://zidane.si/docs/reference/ui-chat-composer.md#nextProfileId), [`NO_COMPOSER_HINT`](https://zidane.si/docs/reference/ui-chat-composer.md#NO_COMPOSER_HINT), [`offCatalogRows`](https://zidane.si/docs/reference/ui-chat-composer.md#offCatalogRows), [`onComposerAttachment`](https://zidane.si/docs/reference/ui-chat-composer.md#onComposerAttachment), [`onComposerDraft`](https://zidane.si/docs/reference/ui-chat-composer.md#onComposerDraft), [`onComposerFocus`](https://zidane.si/docs/reference/ui-chat-composer.md#onComposerFocus), [`onComposerInsert`](https://zidane.si/docs/reference/ui-chat-composer.md#onComposerInsert), [`onComposerMention`](https://zidane.si/docs/reference/ui-chat-composer.md#onComposerMention), [`onComposerPrompt`](https://zidane.si/docs/reference/ui-chat-composer.md#onComposerPrompt), [`OPTION_ICON`](https://zidane.si/docs/reference/ui-chat-composer.md#OPTION_ICON), [`orderComposerBadges`](https://zidane.si/docs/reference/ui-chat-composer.md#orderComposerBadges), [`OrderedBadge`](https://zidane.si/docs/reference/ui-chat-composer.md#OrderedBadge), [`PASTE_FOLD_CHAR_THRESHOLD`](https://zidane.si/docs/reference/ui-chat-composer.md#PASTE_FOLD_CHAR_THRESHOLD), [`PASTE_FOLD_LINE_THRESHOLD`](https://zidane.si/docs/reference/ui-chat-composer.md#PASTE_FOLD_LINE_THRESHOLD), [`pastedTextFilename`](https://zidane.si/docs/reference/ui-chat-composer.md#pastedTextFilename), [`PickerGroup`](https://zidane.si/docs/reference/ui-chat-composer.md#PickerGroup), [`pickerGroups`](https://zidane.si/docs/reference/ui-chat-composer.md#pickerGroups), [`PickerPill`](https://zidane.si/docs/reference/ui-chat-composer.md#PickerPill), [`PickerPillProps`](https://zidane.si/docs/reference/ui-chat-composer.md#PickerPillProps), [`pickRefOf`](https://zidane.si/docs/reference/ui-chat-composer.md#pickRefOf), [`plainTextToDocJson`](https://zidane.si/docs/reference/ui-chat-composer.md#plainTextToDocJson), [`ProjectMenu`](https://zidane.si/docs/reference/ui-chat-composer.md#ProjectMenu), [`ProjectMenuProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ProjectMenuProps), [`PromptHistoryProvider`](https://zidane.si/docs/reference/ui-chat-composer.md#PromptHistoryProvider), [`PromptHistoryProviderProps`](https://zidane.si/docs/reference/ui-chat-composer.md#PromptHistoryProviderProps), [`PromptHistoryValue`](https://zidane.si/docs/reference/ui-chat-composer.md#PromptHistoryValue), [`providerAccountLabel`](https://zidane.si/docs/reference/ui-chat-composer.md#providerAccountLabel), [`pushComposerAttachment`](https://zidane.si/docs/reference/ui-chat-composer.md#pushComposerAttachment), [`pushComposerDraft`](https://zidane.si/docs/reference/ui-chat-composer.md#pushComposerDraft), [`pushComposerInsert`](https://zidane.si/docs/reference/ui-chat-composer.md#pushComposerInsert), [`pushComposerMention`](https://zidane.si/docs/reference/ui-chat-composer.md#pushComposerMention), [`pushComposerPrompt`](https://zidane.si/docs/reference/ui-chat-composer.md#pushComposerPrompt), [`readAttachment`](https://zidane.si/docs/reference/ui-chat-composer.md#readAttachment), [`refKey`](https://zidane.si/docs/reference/ui-chat-composer.md#refKey), [`registerComposerScope`](https://zidane.si/docs/reference/ui-chat-composer.md#registerComposerScope), [`resolveChain`](https://zidane.si/docs/reference/ui-chat-composer.md#resolveChain), [`resolvePick`](https://zidane.si/docs/reference/ui-chat-composer.md#resolvePick), [`resourceErrorText`](https://zidane.si/docs/reference/ui-chat-composer.md#resourceErrorText), [`RetryPill`](https://zidane.si/docs/reference/ui-chat-composer.md#RetryPill), [`RetryPillProps`](https://zidane.si/docs/reference/ui-chat-composer.md#RetryPillProps), [`rowKey`](https://zidane.si/docs/reference/ui-chat-composer.md#rowKey), [`RunStatusChip`](https://zidane.si/docs/reference/ui-chat-composer.md#RunStatusChip), [`RunStatusChipProps`](https://zidane.si/docs/reference/ui-chat-composer.md#RunStatusChipProps), [`ScopeToggle`](https://zidane.si/docs/reference/ui-chat-composer.md#ScopeToggle), [`ScopeToggleProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ScopeToggleProps), [`SelectTurnHint`](https://zidane.si/docs/reference/ui-chat-composer.md#SelectTurnHint), [`SelectTurnHintProps`](https://zidane.si/docs/reference/ui-chat-composer.md#SelectTurnHintProps), [`SendButton`](https://zidane.si/docs/reference/ui-chat-composer.md#SendButton), [`SendButtonProps`](https://zidane.si/docs/reference/ui-chat-composer.md#SendButtonProps), [`SendPromptControls`](https://zidane.si/docs/reference/ui-chat-composer.md#SendPromptControls), [`SendPromptOptions`](https://zidane.si/docs/reference/ui-chat-composer.md#SendPromptOptions), [`SendRoute`](https://zidane.si/docs/reference/ui-chat-composer.md#SendRoute), [`ServerScopeToggle`](https://zidane.si/docs/reference/ui-chat-composer.md#ServerScopeToggle), [`ServerScopeToggleProps`](https://zidane.si/docs/reference/ui-chat-composer.md#ServerScopeToggleProps), [`SessionMeters`](https://zidane.si/docs/reference/ui-chat-composer.md#SessionMeters), [`SessionMetersTarget`](https://zidane.si/docs/reference/ui-chat-composer.md#SessionMetersTarget), [`shouldFoldPasteToAttachment`](https://zidane.si/docs/reference/ui-chat-composer.md#shouldFoldPasteToAttachment), [`suggestionExtension`](https://zidane.si/docs/reference/ui-chat-composer.md#suggestionExtension), [`SuggestionKind`](https://zidane.si/docs/reference/ui-chat-composer.md#SuggestionKind), [`SuggestionPopup`](https://zidane.si/docs/reference/ui-chat-composer.md#SuggestionPopup), [`SuggestionPopupProps`](https://zidane.si/docs/reference/ui-chat-composer.md#SuggestionPopupProps), [`SuggestionSource`](https://zidane.si/docs/reference/ui-chat-composer.md#SuggestionSource), [`SuggestionState`](https://zidane.si/docs/reference/ui-chat-composer.md#SuggestionState), [`takePendingComposerFocus`](https://zidane.si/docs/reference/ui-chat-composer.md#takePendingComposerFocus), [`textAttachment`](https://zidane.si/docs/reference/ui-chat-composer.md#textAttachment), [`THINKING_LEVELS`](https://zidane.si/docs/reference/ui-chat-composer.md#THINKING_LEVELS), [`ThinkingLevel`](https://zidane.si/docs/reference/ui-chat-composer.md#ThinkingLevel), [`TRIGGER`](https://zidane.si/docs/reference/ui-chat-composer.md#TRIGGER), [`unresolveChain`](https://zidane.si/docs/reference/ui-chat-composer.md#unresolveChain), [`useAgentProfiles`](https://zidane.si/docs/reference/ui-chat-composer.md#useAgentProfiles), [`useAttachmentIngest`](https://zidane.si/docs/reference/ui-chat-composer.md#useAttachmentIngest), [`useAttachmentNotices`](https://zidane.si/docs/reference/ui-chat-composer.md#useAttachmentNotices), [`useAttachmentRemoval`](https://zidane.si/docs/reference/ui-chat-composer.md#useAttachmentRemoval), [`useCacheHints`](https://zidane.si/docs/reference/ui-chat-composer.md#useCacheHints), [`useComposerFor`](https://zidane.si/docs/reference/ui-chat-composer.md#useComposerFor), [`useComposerHost`](https://zidane.si/docs/reference/ui-chat-composer.md#useComposerHost), [`useComposerLabels`](https://zidane.si/docs/reference/ui-chat-composer.md#useComposerLabels), [`useComposerModelName`](https://zidane.si/docs/reference/ui-chat-composer.md#useComposerModelName), [`useComposerProviderLabel`](https://zidane.si/docs/reference/ui-chat-composer.md#useComposerProviderLabel), [`useCycleAgent`](https://zidane.si/docs/reference/ui-chat-composer.md#useCycleAgent), [`useDraftKnobs`](https://zidane.si/docs/reference/ui-chat-composer.md#useDraftKnobs), [`useDraftTarget`](https://zidane.si/docs/reference/ui-chat-composer.md#useDraftTarget), [`useHasFocusedComposer`](https://zidane.si/docs/reference/ui-chat-composer.md#useHasFocusedComposer), [`useHostResource`](https://zidane.si/docs/reference/ui-chat-composer.md#useHostResource), [`useJoinedRunProgress`](https://zidane.si/docs/reference/ui-chat-composer.md#useJoinedRunProgress), [`useModelCatalog`](https://zidane.si/docs/reference/ui-chat-composer.md#useModelCatalog), [`useModelKnobs`](https://zidane.si/docs/reference/ui-chat-composer.md#useModelKnobs), [`useModelPickerPrefs`](https://zidane.si/docs/reference/ui-chat-composer.md#useModelPickerPrefs), [`useModelPickerPrefsStore`](https://zidane.si/docs/reference/ui-chat-composer.md#useModelPickerPrefsStore), [`useNewSessionDefaults`](https://zidane.si/docs/reference/ui-chat-composer.md#useNewSessionDefaults), [`usePromptHistory`](https://zidane.si/docs/reference/ui-chat-composer.md#usePromptHistory), [`useProviderReadyPoll`](https://zidane.si/docs/reference/ui-chat-composer.md#useProviderReadyPoll), [`useRememberedKnobs`](https://zidane.si/docs/reference/ui-chat-composer.md#useRememberedKnobs), [`useRunAccruedCost`](https://zidane.si/docs/reference/ui-chat-composer.md#useRunAccruedCost), [`useRunElapsedSec`](https://zidane.si/docs/reference/ui-chat-composer.md#useRunElapsedSec), [`useRunMeterValue`](https://zidane.si/docs/reference/ui-chat-composer.md#useRunMeterValue), [`useRunOutputTokens`](https://zidane.si/docs/reference/ui-chat-composer.md#useRunOutputTokens), [`useRunProgress`](https://zidane.si/docs/reference/ui-chat-composer.md#useRunProgress), [`useRunStartedAt`](https://zidane.si/docs/reference/ui-chat-composer.md#useRunStartedAt), [`useSendPrompt`](https://zidane.si/docs/reference/ui-chat-composer.md#useSendPrompt), [`useSessionContextStatus`](https://zidane.si/docs/reference/ui-chat-composer.md#useSessionContextStatus), [`useSessionMeters`](https://zidane.si/docs/reference/ui-chat-composer.md#useSessionMeters), [`useSustainedWork`](https://zidane.si/docs/reference/ui-chat-composer.md#useSustainedWork), [`withPrimary`](https://zidane.si/docs/reference/ui-chat-composer.md#withPrimary), [`WORK_HOLD_MS`](https://zidane.si/docs/reference/ui-chat-composer.md#WORK_HOLD_MS), [`WORK_SHOW_MS`](https://zidane.si/docs/reference/ui-chat-composer.md#WORK_SHOW_MS), [`workShowDelay`](https://zidane.si/docs/reference/ui-chat-composer.md#workShowDelay)
- [zidane-ui/chat/transcript](https://zidane.si/docs/reference/ui-chat-transcript.md): [`AnsiSpans`](https://zidane.si/docs/reference/ui-chat-transcript.md#AnsiSpans), [`AnsiSpansProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#AnsiSpansProps), [`AnsiText`](https://zidane.si/docs/reference/ui-chat-transcript.md#AnsiText), [`AnsiTextProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#AnsiTextProps), [`AttachmentIcon`](https://zidane.si/docs/reference/ui-chat-transcript.md#AttachmentIcon), [`AttachmentIconProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#AttachmentIconProps), [`AttachmentLabelParts`](https://zidane.si/docs/reference/ui-chat-transcript.md#AttachmentLabelParts), [`AuthFailureCard`](https://zidane.si/docs/reference/ui-chat-transcript.md#AuthFailureCard), [`AuthFailureCardProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#AuthFailureCardProps), [`AUTO_FILL_PAGES`](https://zidane.si/docs/reference/ui-chat-transcript.md#AUTO_FILL_PAGES), [`BADGE_GLYPH`](https://zidane.si/docs/reference/ui-chat-transcript.md#BADGE_GLYPH), [`BadgeEffectContext`](https://zidane.si/docs/reference/ui-chat-transcript.md#BadgeEffectContext), [`BadgeMenuBrowser`](https://zidane.si/docs/reference/ui-chat-transcript.md#BadgeMenuBrowser), [`BadgeMenuComposer`](https://zidane.si/docs/reference/ui-chat-transcript.md#BadgeMenuComposer), [`BadgeMenuProvider`](https://zidane.si/docs/reference/ui-chat-transcript.md#BadgeMenuProvider), [`BadgeMenuProviderProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#BadgeMenuProviderProps), [`BadgeMenuSystem`](https://zidane.si/docs/reference/ui-chat-transcript.md#BadgeMenuSystem), [`CardMarkdown`](https://zidane.si/docs/reference/ui-chat-transcript.md#CardMarkdown), [`CardMarkdownProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CardMarkdownProps), [`Caret`](https://zidane.si/docs/reference/ui-chat-transcript.md#Caret), [`CaretProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CaretProps), [`CHIP_CARD_WIDTH`](https://zidane.si/docs/reference/ui-chat-transcript.md#CHIP_CARD_WIDTH), [`ChipCard`](https://zidane.si/docs/reference/ui-chat-transcript.md#ChipCard), [`ChipCardProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ChipCardProps), [`ChipHover`](https://zidane.si/docs/reference/ui-chat-transcript.md#ChipHover), [`ChipHoverProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ChipHoverProps), [`ChipOpener`](https://zidane.si/docs/reference/ui-chat-transcript.md#ChipOpener), [`classifyInlineRef`](https://zidane.si/docs/reference/ui-chat-transcript.md#classifyInlineRef), [`CODE_PANEL`](https://zidane.si/docs/reference/ui-chat-transcript.md#CODE_PANEL), [`CodeBlockSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CodeBlockSlotProps), [`CodemodeScript`](https://zidane.si/docs/reference/ui-chat-transcript.md#CodemodeScript), [`CodemodeScriptProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CodemodeScriptProps), [`COMMAND_DETAIL_LINE`](https://zidane.si/docs/reference/ui-chat-transcript.md#COMMAND_DETAIL_LINE), [`CommandCard`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandCard), [`CommandCardProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandCardProps), [`CommandDetailRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandDetailRow), [`CommandDetailRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandDetailRowProps), [`CommandNoteRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandNoteRow), [`CommandNoteRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandNoteRowProps), [`CommandScope`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandScope), [`CommandScopeContext`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommandScopeContext), [`CommitCard`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommitCard), [`CommitCardProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CommitCardProps), [`CompactSummaryRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#CompactSummaryRow), [`CompactSummaryRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CompactSummaryRowProps), [`ComposerSearch`](https://zidane.si/docs/reference/ui-chat-transcript.md#ComposerSearch), [`copyPromptLines`](https://zidane.si/docs/reference/ui-chat-transcript.md#copyPromptLines), [`createTurnCommands`](https://zidane.si/docs/reference/ui-chat-transcript.md#createTurnCommands), [`CvRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#CvRow), [`CvRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#CvRowProps), [`DEFAULT_TRANSCRIPT_RENDERERS`](https://zidane.si/docs/reference/ui-chat-transcript.md#DEFAULT_TRANSCRIPT_RENDERERS), [`defaultAttachmentLabel`](https://zidane.si/docs/reference/ui-chat-transcript.md#defaultAttachmentLabel), [`DefaultInlineText`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultInlineText), [`DefaultInlineTextProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultInlineTextProps), [`DefaultMarkdown`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultMarkdown), [`DefaultMarkdownProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultMarkdownProps), [`DefaultPrompt`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultPrompt), [`DefaultPromptProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultPromptProps), [`DefaultSessionTitle`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultSessionTitle), [`DefaultSessionTitleProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#DefaultSessionTitleProps), [`DiffLines`](https://zidane.si/docs/reference/ui-chat-transcript.md#DiffLines), [`DiffLinesProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#DiffLinesProps), [`Dot`](https://zidane.si/docs/reference/ui-chat-transcript.md#Dot), [`DotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#DotProps), [`drawsImageGeneration`](https://zidane.si/docs/reference/ui-chat-transcript.md#drawsImageGeneration), [`EditDiffBlock`](https://zidane.si/docs/reference/ui-chat-transcript.md#EditDiffBlock), [`EditDiffBlockProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#EditDiffBlockProps), [`ErrorRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#ErrorRow), [`ErrorRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ErrorRowProps), [`ExchangeFoldRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#ExchangeFoldRow), [`ExchangeFoldRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ExchangeFoldRowProps), [`FailedMark`](https://zidane.si/docs/reference/ui-chat-transcript.md#FailedMark), [`FailedMarkProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#FailedMarkProps), [`FailureRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#FailureRow), [`FailureRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#FailureRowProps), [`FileBadgeIcon`](https://zidane.si/docs/reference/ui-chat-transcript.md#FileBadgeIcon), [`FileBadgeIconProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#FileBadgeIconProps), [`fileBadgeName`](https://zidane.si/docs/reference/ui-chat-transcript.md#fileBadgeName), [`fileBadgeSpec`](https://zidane.si/docs/reference/ui-chat-transcript.md#fileBadgeSpec), [`FILL_MIN_PROMPTS`](https://zidane.si/docs/reference/ui-chat-transcript.md#FILL_MIN_PROMPTS), [`findRefs`](https://zidane.si/docs/reference/ui-chat-transcript.md#findRefs), [`FoldHeader`](https://zidane.si/docs/reference/ui-chat-transcript.md#FoldHeader), [`FoldHeaderProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#FoldHeaderProps), [`GUTTER_STEP_PX`](https://zidane.si/docs/reference/ui-chat-transcript.md#GUTTER_STEP_PX), [`hasInteractionBody`](https://zidane.si/docs/reference/ui-chat-transcript.md#hasInteractionBody), [`holdForceMountRows`](https://zidane.si/docs/reference/ui-chat-transcript.md#holdForceMountRows), [`ImageGenerationBlock`](https://zidane.si/docs/reference/ui-chat-transcript.md#ImageGenerationBlock), [`ImageGenerationBlockProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ImageGenerationBlockProps), [`imageRequestsOf`](https://zidane.si/docs/reference/ui-chat-transcript.md#imageRequestsOf), [`InfoRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#InfoRow), [`InfoRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#InfoRowProps), [`INLINE_CODE_CLASS`](https://zidane.si/docs/reference/ui-chat-transcript.md#INLINE_CODE_CLASS), [`InlineChipText`](https://zidane.si/docs/reference/ui-chat-transcript.md#InlineChipText), [`InlineChipTextProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#InlineChipTextProps), [`InlineCode`](https://zidane.si/docs/reference/ui-chat-transcript.md#InlineCode), [`InlineCodeProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#InlineCodeProps), [`InlineTextSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#InlineTextSlotProps), [`InteractionTool`](https://zidane.si/docs/reference/ui-chat-transcript.md#InteractionTool), [`InteractionToolBody`](https://zidane.si/docs/reference/ui-chat-transcript.md#InteractionToolBody), [`InteractionToolBodyProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#InteractionToolBodyProps), [`isHiddenRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#isHiddenRow), [`LazyRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#LazyRow), [`LazyRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#LazyRowProps), [`LineState`](https://zidane.si/docs/reference/ui-chat-transcript.md#LineState), [`lineStateOf`](https://zidane.si/docs/reference/ui-chat-transcript.md#lineStateOf), [`LinkBadge`](https://zidane.si/docs/reference/ui-chat-transcript.md#LinkBadge), [`LinkBadgeProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#LinkBadgeProps), [`linkGlyph`](https://zidane.si/docs/reference/ui-chat-transcript.md#linkGlyph), [`LinkIcon`](https://zidane.si/docs/reference/ui-chat-transcript.md#LinkIcon), [`LinkIconProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#LinkIconProps), [`LiveOutput`](https://zidane.si/docs/reference/ui-chat-transcript.md#LiveOutput), [`LiveOutputProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#LiveOutputProps), [`LoadEarlierRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#LoadEarlierRow), [`LoadEarlierRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#LoadEarlierRowProps), [`LoadFullOutputButton`](https://zidane.si/docs/reference/ui-chat-transcript.md#LoadFullOutputButton), [`LoadFullOutputButtonProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#LoadFullOutputButtonProps), [`Markdown`](https://zidane.si/docs/reference/ui-chat-transcript.md#Markdown), [`MarkdownContext`](https://zidane.si/docs/reference/ui-chat-transcript.md#MarkdownContext), [`MarkdownContextValue`](https://zidane.si/docs/reference/ui-chat-transcript.md#MarkdownContextValue), [`MarkdownDiagrams`](https://zidane.si/docs/reference/ui-chat-transcript.md#MarkdownDiagrams), [`MarkdownDiagramsProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#MarkdownDiagramsProps), [`MarkdownLinkProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#MarkdownLinkProps), [`MarkdownProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#MarkdownProps), [`MarkdownSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#MarkdownSlotProps), [`MAX_MATCHES`](https://zidane.si/docs/reference/ui-chat-transcript.md#MAX_MATCHES), [`MermaidDiagram`](https://zidane.si/docs/reference/ui-chat-transcript.md#MermaidDiagram), [`MermaidDiagramProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#MermaidDiagramProps), [`MessageGroupRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#MessageGroupRow), [`MessageGroupRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#MessageGroupRowProps), [`ModelVerdict`](https://zidane.si/docs/reference/ui-chat-transcript.md#ModelVerdict), [`ModelVerdictProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ModelVerdictProps), [`mountRowNow`](https://zidane.si/docs/reference/ui-chat-transcript.md#mountRowNow), [`NestedToolCalls`](https://zidane.si/docs/reference/ui-chat-transcript.md#NestedToolCalls), [`NestedToolCallsProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#NestedToolCallsProps), [`NoticeRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#NoticeRow), [`NoticeRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#NoticeRowProps), [`numberRef`](https://zidane.si/docs/reference/ui-chat-transcript.md#numberRef), [`OpenBadgeMenu`](https://zidane.si/docs/reference/ui-chat-transcript.md#OpenBadgeMenu), [`OpenSessionContext`](https://zidane.si/docs/reference/ui-chat-transcript.md#OpenSessionContext), [`ParsedRef`](https://zidane.si/docs/reference/ui-chat-transcript.md#ParsedRef), [`ParsedReferenceUrl`](https://zidane.si/docs/reference/ui-chat-transcript.md#ParsedReferenceUrl), [`parseReferenceUrl`](https://zidane.si/docs/reference/ui-chat-transcript.md#parseReferenceUrl), [`parseRefUrl`](https://zidane.si/docs/reference/ui-chat-transcript.md#parseRefUrl), [`PromptEcho`](https://zidane.si/docs/reference/ui-chat-transcript.md#PromptEcho), [`PromptEchoProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#PromptEchoProps), [`PromptLines`](https://zidane.si/docs/reference/ui-chat-transcript.md#PromptLines), [`PromptLinesProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#PromptLinesProps), [`PromptSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#PromptSlotProps), [`ProseMarkdown`](https://zidane.si/docs/reference/ui-chat-transcript.md#ProseMarkdown), [`ProseMarkdownProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ProseMarkdownProps), [`ReadFileBlock`](https://zidane.si/docs/reference/ui-chat-transcript.md#ReadFileBlock), [`ReadFileBlockProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ReadFileBlockProps), [`RefChip`](https://zidane.si/docs/reference/ui-chat-transcript.md#RefChip), [`RefChipProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#RefChipProps), [`ReferenceChip`](https://zidane.si/docs/reference/ui-chat-transcript.md#ReferenceChip), [`ReferenceChipProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ReferenceChipProps), [`ReferenceText`](https://zidane.si/docs/reference/ui-chat-transcript.md#ReferenceText), [`ReferenceTextProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ReferenceTextProps), [`referenceUrl`](https://zidane.si/docs/reference/ui-chat-transcript.md#referenceUrl), [`refHref`](https://zidane.si/docs/reference/ui-chat-transcript.md#refHref), [`RefMatch`](https://zidane.si/docs/reference/ui-chat-transcript.md#RefMatch), [`remarkReferences`](https://zidane.si/docs/reference/ui-chat-transcript.md#remarkReferences), [`remarkRefs`](https://zidane.si/docs/reference/ui-chat-transcript.md#remarkRefs), [`RowContext`](https://zidane.si/docs/reference/ui-chat-transcript.md#RowContext), [`RowFrame`](https://zidane.si/docs/reference/ui-chat-transcript.md#RowFrame), [`RowFrameProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#RowFrameProps), [`RowIconsContext`](https://zidane.si/docs/reference/ui-chat-transcript.md#RowIconsContext), [`RowPlace`](https://zidane.si/docs/reference/ui-chat-transcript.md#RowPlace), [`RunnableCodeBlock`](https://zidane.si/docs/reference/ui-chat-transcript.md#RunnableCodeBlock), [`RunnableCodeBlockProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#RunnableCodeBlockProps), [`RunReceiptInline`](https://zidane.si/docs/reference/ui-chat-transcript.md#RunReceiptInline), [`RunReceiptInlineProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#RunReceiptInlineProps), [`RunSummaryRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#RunSummaryRow), [`RunSummaryRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#RunSummaryRowProps), [`savedPaths`](https://zidane.si/docs/reference/ui-chat-transcript.md#savedPaths), [`ScrollPosition`](https://zidane.si/docs/reference/ui-chat-transcript.md#ScrollPosition), [`SearchHighlightStyle`](https://zidane.si/docs/reference/ui-chat-transcript.md#SearchHighlightStyle), [`SelectCursor`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectCursor), [`SelectCursorProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectCursorProps), [`SelectTurnCommands`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnCommands), [`SelectTurnExit`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnExit), [`SelectTurnHintKeys`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnHintKeys), [`SelectTurnHintKeysProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnHintKeysProps), [`SelectTurnKeysOptions`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnKeysOptions), [`SelectTurnProvider`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnProvider), [`SelectTurnProviderProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnProviderProps), [`SelectTurnState`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnState), [`SelectTurnValue`](https://zidane.si/docs/reference/ui-chat-transcript.md#SelectTurnValue), [`SessionCard`](https://zidane.si/docs/reference/ui-chat-transcript.md#SessionCard), [`SessionCardProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SessionCardProps), [`SessionEventRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#SessionEventRow), [`SessionEventRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SessionEventRowProps), [`SessionTitleSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SessionTitleSlotProps), [`ShellBlockProvider`](https://zidane.si/docs/reference/ui-chat-transcript.md#ShellBlockProvider), [`ShellBlockProviderProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ShellBlockProviderProps), [`ShellBlockScope`](https://zidane.si/docs/reference/ui-chat-transcript.md#ShellBlockScope), [`siteIconValue`](https://zidane.si/docs/reference/ui-chat-transcript.md#siteIconValue), [`SkillCard`](https://zidane.si/docs/reference/ui-chat-transcript.md#SkillCard), [`SkillCardProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SkillCardProps), [`SlotEntry`](https://zidane.si/docs/reference/ui-chat-transcript.md#SlotEntry), [`SpawnEndRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#SpawnEndRow), [`SpawnEndRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SpawnEndRowProps), [`SpawnStartRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#SpawnStartRow), [`SpawnStartRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SpawnStartRowProps), [`StickToBottomOptions`](https://zidane.si/docs/reference/ui-chat-transcript.md#StickToBottomOptions), [`SubagentBlock`](https://zidane.si/docs/reference/ui-chat-transcript.md#SubagentBlock), [`SubagentBlockProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#SubagentBlockProps), [`TextPreviewSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TextPreviewSlotProps), [`TextRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#TextRow), [`TextRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TextRowProps), [`ThinkingBatchRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#ThinkingBatchRow), [`ThinkingBatchRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ThinkingBatchRowProps), [`ThinkingRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#ThinkingRow), [`ThinkingRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ThinkingRowProps), [`ToolBatchRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolBatchRow), [`ToolBatchRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolBatchRowProps), [`ToolBodySlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolBodySlotProps), [`ToolDetails`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolDetails), [`ToolDetailsProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolDetailsProps), [`ToolGlyph`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolGlyph), [`ToolGlyphProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolGlyphProps), [`ToolInput`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolInput), [`ToolInputProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolInputProps), [`ToolMedia`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolMedia), [`ToolMediaProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolMediaProps), [`ToolRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolRow), [`ToolRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolRowProps), [`ToolTiming`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolTiming), [`ToolTimingProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#ToolTimingProps), [`TranscriptAccounts`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptAccounts), [`TranscriptActions`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptActions), [`TranscriptActionsProvider`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptActionsProvider), [`TranscriptActionsProviderProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptActionsProviderProps), [`TranscriptFind`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptFind), [`TranscriptFindKeyOptions`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptFindKeyOptions), [`TranscriptFindOptions`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptFindOptions), [`TranscriptFindTarget`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptFindTarget), [`TranscriptRenderers`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRenderers), [`TranscriptRenderersProvider`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRenderersProvider), [`TranscriptRenderersProviderProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRenderersProviderProps), [`TranscriptRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRow), [`TranscriptRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRowProps), [`TranscriptRows`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRows), [`TranscriptRowsInput`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRowsInput), [`TranscriptRowSlot`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRowSlot), [`TranscriptRowSlotProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptRowSlotProps), [`TranscriptScrollInputs`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptScrollInputs), [`TranscriptSearch`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptSearch), [`TranscriptSearchOptions`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptSearchOptions), [`TranscriptSearchProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptSearchProps), [`TranscriptSearchState`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptSearchState), [`TranscriptSettling`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptSettling), [`TranscriptTurnMenu`](https://zidane.si/docs/reference/ui-chat-transcript.md#TranscriptTurnMenu), [`TurnCommands`](https://zidane.si/docs/reference/ui-chat-transcript.md#TurnCommands), [`TurnCommandsOptions`](https://zidane.si/docs/reference/ui-chat-transcript.md#TurnCommandsOptions), [`TurnMenuActions`](https://zidane.si/docs/reference/ui-chat-transcript.md#TurnMenuActions), [`TurnMenuTarget`](https://zidane.si/docs/reference/ui-chat-transcript.md#TurnMenuTarget), [`useBackgroundMount`](https://zidane.si/docs/reference/ui-chat-transcript.md#useBackgroundMount), [`useBadgeMenu`](https://zidane.si/docs/reference/ui-chat-transcript.md#useBadgeMenu), [`useChipResolution`](https://zidane.si/docs/reference/ui-chat-transcript.md#useChipResolution), [`useCommand`](https://zidane.si/docs/reference/ui-chat-transcript.md#useCommand), [`useCommitInfo`](https://zidane.si/docs/reference/ui-chat-transcript.md#useCommitInfo), [`useComposerSearch`](https://zidane.si/docs/reference/ui-chat-transcript.md#useComposerSearch), [`useFillViewportScrollback`](https://zidane.si/docs/reference/ui-chat-transcript.md#useFillViewportScrollback), [`useForceMountRows`](https://zidane.si/docs/reference/ui-chat-transcript.md#useForceMountRows), [`useFullOutput`](https://zidane.si/docs/reference/ui-chat-transcript.md#useFullOutput), [`useModelName`](https://zidane.si/docs/reference/ui-chat-transcript.md#useModelName), [`UserBashRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#UserBashRow), [`UserBashRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#UserBashRowProps), [`useReferencedSession`](https://zidane.si/docs/reference/ui-chat-transcript.md#useReferencedSession), [`useReferenceMatches`](https://zidane.si/docs/reference/ui-chat-transcript.md#useReferenceMatches), [`useReferenceProviders`](https://zidane.si/docs/reference/ui-chat-transcript.md#useReferenceProviders), [`useReferenceView`](https://zidane.si/docs/reference/ui-chat-transcript.md#useReferenceView), [`useResolveChipNow`](https://zidane.si/docs/reference/ui-chat-transcript.md#useResolveChipNow), [`useRowIcons`](https://zidane.si/docs/reference/ui-chat-transcript.md#useRowIcons), [`UserPromptAttachments`](https://zidane.si/docs/reference/ui-chat-transcript.md#UserPromptAttachments), [`UserPromptAttachmentsProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#UserPromptAttachmentsProps), [`UserPromptRow`](https://zidane.si/docs/reference/ui-chat-transcript.md#UserPromptRow), [`UserPromptRowProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#UserPromptRowProps), [`useSelectStops`](https://zidane.si/docs/reference/ui-chat-transcript.md#useSelectStops), [`useSelectTurn`](https://zidane.si/docs/reference/ui-chat-transcript.md#useSelectTurn), [`useSelectTurnKeys`](https://zidane.si/docs/reference/ui-chat-transcript.md#useSelectTurnKeys), [`useSettledReveal`](https://zidane.si/docs/reference/ui-chat-transcript.md#useSettledReveal), [`useShellBlockScope`](https://zidane.si/docs/reference/ui-chat-transcript.md#useShellBlockScope), [`useSiteIcon`](https://zidane.si/docs/reference/ui-chat-transcript.md#useSiteIcon), [`useSkill`](https://zidane.si/docs/reference/ui-chat-transcript.md#useSkill), [`useStickToBottom`](https://zidane.si/docs/reference/ui-chat-transcript.md#useStickToBottom), [`useToolMedia`](https://zidane.si/docs/reference/ui-chat-transcript.md#useToolMedia), [`useTranscriptActions`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptActions), [`useTranscriptFind`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptFind), [`useTranscriptFindKey`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptFindKey), [`useTranscriptRenderers`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptRenderers), [`useTranscriptRows`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptRows), [`useTranscriptScroll`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptScroll), [`useTranscriptSearch`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptSearch), [`useTranscriptSelectionCopy`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTranscriptSelectionCopy), [`useTurnCommands`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTurnCommands), [`useTurnMenu`](https://zidane.si/docs/reference/ui-chat-transcript.md#useTurnMenu), [`useWheelHoverPause`](https://zidane.si/docs/reference/ui-chat-transcript.md#useWheelHoverPause), [`WorkerDetails`](https://zidane.si/docs/reference/ui-chat-transcript.md#WorkerDetails), [`WorkerDetailsProps`](https://zidane.si/docs/reference/ui-chat-transcript.md#WorkerDetailsProps)
- [zidane-ui/chat/interactions](https://zidane.si/docs/reference/ui-chat-interactions.md): [`AnsweredQuestions`](https://zidane.si/docs/reference/ui-chat-interactions.md#AnsweredQuestions), [`AnsweredQuestionsProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#AnsweredQuestionsProps), [`HostInteractions`](https://zidane.si/docs/reference/ui-chat-interactions.md#HostInteractions), [`HostInteractionsProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#HostInteractionsProps), [`InboxPanel`](https://zidane.si/docs/reference/ui-chat-interactions.md#InboxPanel), [`InboxPanelProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#InboxPanelProps), [`InteractionCard`](https://zidane.si/docs/reference/ui-chat-interactions.md#InteractionCard), [`InteractionCardProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#InteractionCardProps), [`isRequired`](https://zidane.si/docs/reference/ui-chat-interactions.md#isRequired), [`PlanBody`](https://zidane.si/docs/reference/ui-chat-interactions.md#PlanBody), [`PlanBodyProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#PlanBodyProps), [`PlanCard`](https://zidane.si/docs/reference/ui-chat-interactions.md#PlanCard), [`PlanCardProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#PlanCardProps), [`QuestionField`](https://zidane.si/docs/reference/ui-chat-interactions.md#QuestionField), [`QuestionFieldProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#QuestionFieldProps), [`QuestionForm`](https://zidane.si/docs/reference/ui-chat-interactions.md#QuestionForm), [`QuestionFormProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#QuestionFormProps), [`SecretInput`](https://zidane.si/docs/reference/ui-chat-interactions.md#SecretInput), [`SecretInputProps`](https://zidane.si/docs/reference/ui-chat-interactions.md#SecretInputProps), [`seedDefaults`](https://zidane.si/docs/reference/ui-chat-interactions.md#seedDefaults), [`useAllInteractions`](https://zidane.si/docs/reference/ui-chat-interactions.md#useAllInteractions), [`useInteractionHead`](https://zidane.si/docs/reference/ui-chat-interactions.md#useInteractionHead), [`usePendingInteractions`](https://zidane.si/docs/reference/ui-chat-interactions.md#usePendingInteractions)
- [zidane-ui/chat/headless](https://zidane.si/docs/reference/ui-chat-headless.md): [`ComposerAttachment`](https://zidane.si/docs/reference/ui-chat-headless.md#ComposerAttachment), [`ImageModelRow`](https://zidane.si/docs/reference/ui-chat-headless.md#ImageModelRow), [`ModelCatalogRow`](https://zidane.si/docs/reference/ui-chat-headless.md#ModelCatalogRow), [`ModelPickRef`](https://zidane.si/docs/reference/ui-chat-headless.md#ModelPickRef)
- [components/RowActionsMenu](https://zidane.si/docs/reference/ui-components-row-actions-menu.md): [`RowActionItem`](https://zidane.si/docs/reference/ui-components-row-actions-menu.md#RowActionItem)
