@dudousxd/nestjs-agent-react 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,13 +1,13 @@
1
1
  import * as ai from 'ai';
2
2
  import { ChatTransport, UIMessage, UIMessageChunk, DataUIPart, UIDataTypes } from 'ai';
3
- import { A as AgentBackend, U as UploadAttachmentOptions, H as HttpErrorListener, a as AttachmentUploadStrategy } from './client-D4ZSbZJ8.cjs';
4
- export { b as AgentBackendUnsupportedError, c as AgentClient, d as AgentClientOptions, e as AgentConnection, f as AgentHttpError, g as AgentRequestError, C as CancelResult, h as ChatStreamRequest, i as ChatStreamResponse, M as MessageFeedbackInput, R as ResumeStreamRequest, T as ThreadPatch, r as requireBackendMethod } from './client-D4ZSbZJ8.cjs';
5
- import { MessageAttachment, AgentClientConfig, AgentCatalogEntry, ModelCatalogEntry, ModelCatalogView, ModelCatalogLock, QuotaReport, QuotaWindow, QuotaBlock, QuotaWarning, MessageFeedback, MessageFeedbackValue, ThreadSummary, StoredMessage, ToolCatalogEntry } from '@dudousxd/nestjs-agent-core';
6
- export { ALL_AGENTS, ElicitationInput, ElicitationInputType, validateElicitationAnswer as validateAnswer, validateElicitationValue as validateAnswerValue } from '@dudousxd/nestjs-agent-core';
3
+ import { A as AgentBackend, U as UploadAttachmentOptions, H as HttpErrorListener, a as AttachmentUploadStrategy } from './client-DNM5Qm5N.cjs';
4
+ export { b as AgentBackendUnsupportedError, c as AgentClient, d as AgentClientOptions, e as AgentConnection, f as AgentHttpError, g as AgentRequestError, C as CancelResult, h as ChatStreamRequest, i as ChatStreamResponse, M as MessageFeedbackInput, Q as QueuedMessageUpdate, j as QueuedSendResult, R as ResumeStreamRequest, T as ThreadPatch, r as requireBackendMethod } from './client-DNM5Qm5N.cjs';
5
+ import { MessageAttachment, AgentClientConfig, AgentCatalogEntry, ModelCatalogEntry, ModelCatalogView, ModelCatalogLock, QuotaReport, QuotaWindow, QuotaBlock, QuotaWarning, MessageFeedback, MessageFeedbackValue, ThreadSummary, StoredMessage, QueuePause, ToolCatalogEntry } from '@dudousxd/nestjs-agent-core';
6
+ export { ALL_AGENTS, ChatQueueState, ElicitationInput, ElicitationInputType, QueuePause, QueuePauseReason, QueuedMessageView, validateElicitationAnswer as validateAnswer, validateElicitationValue as validateAnswerValue } from '@dudousxd/nestjs-agent-core';
7
7
  import * as React from 'react';
8
8
  import React__default, { ReactNode, Context } from 'react';
9
- import { o as GenuiProviderValue, T as TranscriptUiBlock, A as ApproveOptions, t as TranscriptBlock, U as UsageSummary, v as TimestampInfo, C as ChatStatus, M as MessageUsageInfo, w as ToolCatalog, x as AnyToolUIPart, y as TranscriptFile } from './generative-ui-BejHxxbR.cjs';
10
- export { z as ApprovalBlockOptions, B as BuildBlocksOptions, D as CoercibleQuestion, E as DescribeToolCallOptions, F as ElicitationBlockOptions, H as GroupToolActivityOptions, I as RawAnswer, J as ResolvedReading, K as ResolvedResultView, L as RetrievedPassage, S as SettleAction, N as ToolActivityGroup, O as ToolCallDescription, P as ToolCallState, Q as ToolCallStatus, V as TranscriptApproval, W as TranscriptApprovalStatus, X as TranscriptElicitationBlock, Y as TranscriptElicitationOutcome, Z as TranscriptFilesBlock, _ as TranscriptQuestion, $ as TranscriptQuestionOption, a0 as TranscriptReasoningBlock, a1 as TranscriptSettleState, a2 as TranscriptSource, a3 as TranscriptSourcesBlock, a4 as TranscriptTextBlock, a5 as TranscriptToolBlock, a6 as TranscriptToolCall, a7 as buildTranscriptBlocks, a8 as coerceAnswer, a9 as correctedCallIds, aa as describeTimestamp, ab as describeToolCall, ac as describeUsage, ad as extractMessageText, ae as fillTemplate, af as formatRelativeTime, ag as groupToolActivity, ah as inferResultView, ai as isActionCall, aj as phraseFor, ak as readPath, al as resolveResultView, am as toolCallState, an as toolCatalogFrom } from './generative-ui-BejHxxbR.cjs';
9
+ import { o as GenuiProviderValue, T as TranscriptUiBlock, A as ApproveOptions, t as TranscriptBlock, U as UsageSummary, v as TimestampInfo, C as ChatStatus, w as TranscriptFile, M as MessageUsageInfo, x as ToolCatalog, y as AnyToolUIPart } from './generative-ui-jT9TYfCi.cjs';
10
+ export { z as ApprovalBlockOptions, B as BuildBlocksOptions, D as CoercibleQuestion, E as DescribeToolCallOptions, F as ElicitationBlockOptions, H as GroupToolActivityOptions, I as RawAnswer, J as ResolvedReading, K as ResolvedResultView, L as RetrievedPassage, S as SettleAction, N as ToolActivityGroup, O as ToolCallDescription, P as ToolCallState, Q as ToolCallStatus, V as TranscriptApproval, W as TranscriptApprovalStatus, X as TranscriptElicitationBlock, Y as TranscriptElicitationOutcome, Z as TranscriptFilesBlock, _ as TranscriptQuestion, $ as TranscriptQuestionOption, a0 as TranscriptReasoningBlock, a1 as TranscriptSettleState, a2 as TranscriptSource, a3 as TranscriptSourcesBlock, a4 as TranscriptTextBlock, a5 as TranscriptToolBlock, a6 as TranscriptToolCall, a7 as buildTranscriptBlocks, a8 as coerceAnswer, a9 as correctedCallIds, aa as describeTimestamp, ab as describeToolCall, ac as describeUsage, ad as extractMessageText, ae as fillTemplate, af as formatRelativeTime, ag as groupToolActivity, ah as inferResultView, ai as isActionCall, aj as phraseFor, ak as readPath, al as resolveResultView, am as toolCallState, an as toolCatalogFrom } from './generative-ui-jT9TYfCi.cjs';
11
11
 
12
12
  /** Identity surfaced by the backend's `meta` SSE frame / response headers. */
13
13
  interface AgentStreamMeta {
@@ -94,6 +94,12 @@ interface AgentChatTransportOptions {
94
94
  * an early failure (no meta ever arrives) to a PRIOR attempt's id.
95
95
  */
96
96
  onAttemptStart?: () => void;
97
+ /**
98
+ * A resume found nothing streaming under the run id (the backend answered 404): the run already
99
+ * ended. The SDK is told there is nothing to resume, so the caller is the one that has to reload
100
+ * what the run wrote — `useAgentChat` re-reads the thread.
101
+ */
102
+ onResumeGone?: (runId: string) => void;
97
103
  /** Injectable for tests / non-browser runtimes. Defaults to global fetch. */
98
104
  fetch?: typeof fetch;
99
105
  }
@@ -120,7 +126,9 @@ interface AgentChatTransportOptions {
120
126
  * native `tool-approval-request` (the part moves to `approval-requested`)
121
127
  * - `approval-settled` → `data-approval-settled` part keyed by the call id (who decided, through
122
128
  * what, remembered or not); the outcome still rides the call's own output
123
- * - `title`, `cancelled` → transient `data-title` / `data-cancelled` (never stored on the message)
129
+ * - `title`, `cancelled`, `queue` → transient `data-title` / `data-cancelled` / `data-queue` (never
130
+ * stored on the message). A send the server queued (`202`) is reported
131
+ * as a transient `data-queue` too, carrying `queuedSend`
124
132
  * - any other kind → `data-<kind>` part carrying the frame minus `kind`, keyed by its `id`
125
133
  * when it has one — forwarded, never dropped
126
134
  * `parentId` on a tool frame rides the part's `toolMetadata` next to `toolKind`.
@@ -645,6 +653,55 @@ interface ChatInputProps {
645
653
  */
646
654
  declare function ChatInput({ onSubmit, disabled, placeholder, rows, enableSpeech, speechLang, sendLabel, onStop, isStreaming, stopLabel, className, textareaClassName, sendButtonClassName, micButtonClassName, stopButtonClassName, renderMic, }: ChatInputProps): React__default.JSX.Element;
647
655
 
656
+ /**
657
+ * What the composer (and `sendMessage`) does with a message sent while a turn is still running:
658
+ * - `'queue'` (default) — it waits in the thread's queue and runs when the turn settles.
659
+ * - `'interrupt'` — the running turn is cancelled and this message runs next.
660
+ * - `'block'` — the composer refuses it (`blockedBy: 'busy'`), as before queues existed.
661
+ */
662
+ type WhileRunning = 'queue' | 'interrupt' | 'block';
663
+ /** A message waiting in the thread's queue, as the chat shows it. */
664
+ interface QueuedChatMessage {
665
+ /** The server's id once it is queued; a local id while `state` is `'sending'`. */
666
+ id: string;
667
+ text: string;
668
+ attachments: MessageAttachment[];
669
+ /**
670
+ * `'sending'` — on its way to the server (it has no server id yet, so it cannot be edited).
671
+ * `'queued'` — waiting its turn.
672
+ */
673
+ state: 'sending' | 'queued';
674
+ /** Queued by an interrupt: it runs as soon as the cancelled turn settles. */
675
+ interrupt: boolean;
676
+ createdAt: string;
677
+ }
678
+ /** `chat.queue` — the thread's queue of waiting messages, and what can be done to it. */
679
+ interface ChatQueue {
680
+ /** Waiting messages, in the order they will run. */
681
+ items: QueuedChatMessage[];
682
+ /** Why the queue stopped draining (a failed turn, a Stop, the quota), or `null`. */
683
+ paused: QueuePause | null;
684
+ /** The backend can queue (`enqueueMessage`). Without it sends made mid-turn are refused. */
685
+ isSupported: boolean;
686
+ /**
687
+ * Queue `text` (with already-uploaded `attachments`) on this chat's thread. `mode: 'interrupt'`
688
+ * cancels the running turn and runs it next. Starts at once when nothing is running.
689
+ */
690
+ add: (text: string, options?: {
691
+ attachments?: MessageAttachment[];
692
+ mode?: 'queue' | 'interrupt';
693
+ }) => Promise<void>;
694
+ remove: (id: string) => Promise<void>;
695
+ edit: (id: string, text: string) => Promise<void>;
696
+ /** Move a waiting message to `index` (0 → next). */
697
+ move: (id: string, index: number) => Promise<void>;
698
+ clear: () => Promise<void>;
699
+ /** Lift a pause; the head starts when nothing is running. */
700
+ resume: () => Promise<void>;
701
+ /** The last queue operation that failed, or `null`. */
702
+ error: Error | null;
703
+ }
704
+
648
705
  interface StickToBottomOptions {
649
706
  /**
650
707
  * Changes whenever the rendered content grows — the signal to re-pin. A string rather than the
@@ -840,6 +897,37 @@ interface UseChatTranscriptOptions extends TranscriptItemOptions {
840
897
  /** Suggested follow-ups. The model only decides WHETHER they belong on screen. */
841
898
  followUps?: string[] | null;
842
899
  stickToBottomThreshold?: number;
900
+ /**
901
+ * Messages waiting in the thread's queue — `chat.queue` (`useAgentChat` wires it). They render
902
+ * after the transcript as {@link ChatTranscript.queued}: pending user messages, not yet sent.
903
+ */
904
+ queue?: {
905
+ items: QueuedChatMessage[];
906
+ paused: QueuePause | null;
907
+ remove?: (id: string) => void | Promise<void>;
908
+ } | null;
909
+ }
910
+ /**
911
+ * A message waiting in the thread's queue, as the transcript shows it: a user message that has not
912
+ * been sent to the model yet. Render it after {@link ChatTranscript.items}, dimmed or tagged.
913
+ */
914
+ interface TranscriptQueuedItem {
915
+ id: string;
916
+ role: 'user';
917
+ text: string;
918
+ files: TranscriptFile[];
919
+ /**
920
+ * `'sending'` — on its way to the server. `'queued'` — waiting for the running turn.
921
+ * `'paused'` — waiting, but the queue is paused (see {@link ChatTranscript.queuePaused}).
922
+ */
923
+ state: 'sending' | 'queued' | 'paused';
924
+ /** 0-based place in the queue. */
925
+ position: number;
926
+ /** Runs next. */
927
+ isNext: boolean;
928
+ /** Queued by an interrupt — it runs as soon as the cancelled turn settles. */
929
+ interrupt: boolean;
930
+ remove: TranscriptActionState;
843
931
  }
844
932
  interface ChatTranscript {
845
933
  /** The mounted window, oldest first. `window.hiddenCount` says what is held back. */
@@ -857,6 +945,10 @@ interface ChatTranscript {
857
945
  window: TranscriptWindow;
858
946
  scroll: StickToBottom;
859
947
  stop: TranscriptStopState;
948
+ /** Messages waiting in the thread's queue, in run order — render after `items`. */
949
+ queued: TranscriptQueuedItem[];
950
+ /** Why the queue is not draining, or `null`. */
951
+ queuePaused: QueuePause | null;
860
952
  }
861
953
  /**
862
954
  * The model behind a chat transcript: messages normalized into items with their parts grouped into
@@ -980,6 +1072,14 @@ interface MessageListClassNames {
980
1072
  errorRetry?: string;
981
1073
  followUps?: string;
982
1074
  followUpChip?: string;
1075
+ /** The block of waiting (queued) messages after the transcript. */
1076
+ queue?: string;
1077
+ /** One waiting message; it also carries `data-state="sending|queued|paused"`. */
1078
+ queuedItem?: string;
1079
+ queuedRemove?: string;
1080
+ /** The "queue paused" line and its resume button. */
1081
+ queuePaused?: string;
1082
+ queueResume?: string;
983
1083
  message?: MessageItemClassNames;
984
1084
  }
985
1085
  interface MessageListProps {
@@ -1023,6 +1123,11 @@ interface MessageListProps {
1023
1123
  /** Last turn's error — paired with `onRetry`, renders a retry banner. */
1024
1124
  error?: Error | null;
1025
1125
  onRetry?: () => void | Promise<void>;
1126
+ /**
1127
+ * `chat.queue` — messages sent while a turn was running, drawn after the transcript as pending
1128
+ * user messages (with a remove button), and a resume button while the queue is paused.
1129
+ */
1130
+ queue?: ChatQueue;
1026
1131
  classNames?: MessageListClassNames;
1027
1132
  }
1028
1133
  /**
@@ -1034,7 +1139,7 @@ interface MessageListProps {
1034
1139
  * Every decision here comes from `useChatTranscript`; the file below it is markup. A host that
1035
1140
  * wants a different layout drives that hook directly and never imports this component.
1036
1141
  */
1037
- declare function MessageList({ messages, status, renderToolPart, renderToolGroup, renderText, renderReasoning, renderFiles, renderUi, reasoningLabel, getMeta, readOnly, onFork, editable, onEditSubmit, regeneratable, onRegenerate, getUsage, getCreatedAt, emptyState, typingIndicator, followUps, onFollowUpClick, error, onRetry, classNames, }: MessageListProps): React__default.JSX.Element;
1142
+ declare function MessageList({ messages, status, renderToolPart, renderToolGroup, renderText, renderReasoning, renderFiles, renderUi, reasoningLabel, getMeta, readOnly, onFork, editable, onEditSubmit, regeneratable, onRegenerate, getUsage, getCreatedAt, emptyState, typingIndicator, followUps, onFollowUpClick, error, onRetry, queue, classNames, }: MessageListProps): React__default.JSX.Element;
1038
1143
 
1039
1144
  /**
1040
1145
  * Languages the dictation mic offers. The Web Speech API expects a
@@ -1482,6 +1587,14 @@ interface UseAgentChatOptions<B extends AgentBackend = AgentBackend> {
1482
1587
  blocked?: QuotaBlock | null;
1483
1588
  /** Validation and upload for `chat.composer.files` — see `useAttachments`. */
1484
1589
  composer?: Omit<UseAttachmentsOptions, 'backend'>;
1590
+ /**
1591
+ * What `composer.submit()` and `sendMessage` do while a turn is still running. Default `'queue'`:
1592
+ * the message waits in the thread's queue (server-side — it survives a reload) and runs when the
1593
+ * turn settles; `chat.queue` lists and edits what is waiting. `'interrupt'` cancels the running
1594
+ * turn and runs the message next. `'block'` refuses the send (`composer.blockedBy === 'busy'`).
1595
+ * A backend without `enqueueMessage` behaves as `'block'`.
1596
+ */
1597
+ whileRunning?: WhileRunning;
1485
1598
  /**
1486
1599
  * Overrides for `chat.transcript` — anything `useChatTranscript` takes (`sources`, `editable` +
1487
1600
  * `onEditSubmit`, `followUps`, `getUsage`, a `toolCatalog` of your own, `onApprove: null`, …).
@@ -1650,6 +1763,11 @@ declare function useAgentChat<B extends AgentBackend = AgentBackend>(options?: U
1650
1763
  transcript: ChatTranscript;
1651
1764
  /** A headless composer: draft, files, send gate, `submit()`. */
1652
1765
  composer: ChatComposer;
1766
+ /**
1767
+ * Messages sent while a turn was running, waiting their turn (server-side): list, edit, move,
1768
+ * remove, clear, and resume a paused queue.
1769
+ */
1770
+ queue: ChatQueue;
1653
1771
  /** The model picker: `list`, `selected`, `select(id)`, `pinToThread(id)`. */
1654
1772
  models: ChatModels;
1655
1773
  /** The caller's budget (`GET <base>/quota`); `quota.blocked` gates sends. */
@@ -1687,4 +1805,4 @@ declare class QuotaBlockedError extends Error {
1687
1805
  constructor(block: QuotaBlock);
1688
1806
  }
1689
1807
 
1690
- export { AgentBackend, AgentChatTransport, type AgentChatTransportOptions, type AgentConfigState, type AgentMessageMetadata, AgentProvider, type AgentProviderProps, type AgentStreamMeta, type AgentsState, type AggregatedTurnUsage, type AmbientRenderUi, AmbientRenderUiContext, type AnswerInput, AnyToolUIPart, type ApprovalCountdown, type ApproveInput, ApproveOptions, type AttachmentRejection, AttachmentUploadStrategy, type AttachmentsState, type AutocompleteInputProps, type AutocompleteItem, type AutocompleteListboxProps, type AutocompleteOptionProps, type AutocompleteSource, type BackgroundRun, type ChatBackground, ChatInput, type ChatInputProps, ChatStatus, type ChatTranscript, type ClipboardLikeEvent, type CompletionEdit, type ComposerAutocomplete, DEFAULT_SPEECH_LANG, type DragLikeEvent, type EditSubmitInput, HttpErrorListener, type MessageActionInput, type MessageFeedbackState, type MessageFile, type MessageFileKind, MessageItem, type MessageItemClassNames, type MessageItemProps, MessageItemView, type MessageItemViewProps, MessageList, type MessageListClassNames, type MessageListProps, MessageUsageInfo, type ModelOption, type ModelsState, QuotaBlockedError, type QuotaState, type ReconnectOptions, type RejectInput, type RenderFilesFn, type RenderReasoningFn, type RenderTextFn, type RenderToolGroupFn, type RenderToolPartFn, type RenderUiFn, SPEECH_LANGUAGES, type SkillSuggestionData, type SkillsSourceOptions, type SkipInput, type SpeechLanguage, type SpeechRecognitionHook, type StagedAttachment, type StagedAttachmentStatus, type StickToBottom, type StickToBottomOptions, type StoredTurnMetadata, type StreamConnectionState, type ThreadsEvent, type ThreadsState, TimestampInfo, ToolCatalog, type ToolCatalogState, type TranscriptActionState, TranscriptBlock, type TranscriptCopyState, type TranscriptEditState, TranscriptFile, type TranscriptItem, type TranscriptItemOptions, type TranscriptStopState, TranscriptUiBlock, type TranscriptWindow, type TriggerMatch, type TriggerPosition, UploadAttachmentOptions, UsageSummary, type UseAgentChatOptions, type UseAgentConfigOptions, type UseAgentsOptions, type UseApprovalCountdownOptions, type UseAttachmentsOptions, type UseChatTranscriptOptions, type UseComposerAutocompleteOptions, type UseElapsedOptions, type UseMessageFeedbackOptions, type UseModelsOptions, type UseQuotaOptions, type UseSpeechRecognitionOptions, type UseThreadsOptions, type UseToolCatalogOptions, type UseTranscriptItemOptions, acceptsFile, applyCompletion, approvalCountdown, backgroundRunsFromThread, createSkillsSource, dragHasFiles, fileKind, filesFromClipboard, filterAutocompleteItems, findActiveTrigger, formatElapsed, loadStoredSpeechLang, messageFiles, notifyThreads, onThreadsEvent, persistSpeechLang, readReasoningMs, storedMessageToUiMessage, storedThreadToUiMessages, useAgentBackend, useAgentChat, useAgentConfig, useAgents, useAmbientRenderUi, useApprovalCountdown, useAttachments, useChatTranscript, useComposerAutocomplete, useElapsed, useMessageFeedback, useModels, useQuota, useSpeechRecognition, useStickToBottom, useThreads, useToolCatalog, useTranscriptItem };
1808
+ export { AgentBackend, AgentChatTransport, type AgentChatTransportOptions, type AgentConfigState, type AgentMessageMetadata, AgentProvider, type AgentProviderProps, type AgentStreamMeta, type AgentsState, type AggregatedTurnUsage, type AmbientRenderUi, AmbientRenderUiContext, type AnswerInput, AnyToolUIPart, type ApprovalCountdown, type ApproveInput, ApproveOptions, type AttachmentRejection, AttachmentUploadStrategy, type AttachmentsState, type AutocompleteInputProps, type AutocompleteItem, type AutocompleteListboxProps, type AutocompleteOptionProps, type AutocompleteSource, type BackgroundRun, type ChatBackground, ChatInput, type ChatInputProps, type ChatQueue, ChatStatus, type ChatTranscript, type ClipboardLikeEvent, type CompletionEdit, type ComposerAutocomplete, DEFAULT_SPEECH_LANG, type DragLikeEvent, type EditSubmitInput, HttpErrorListener, type MessageActionInput, type MessageFeedbackState, type MessageFile, type MessageFileKind, MessageItem, type MessageItemClassNames, type MessageItemProps, MessageItemView, type MessageItemViewProps, MessageList, type MessageListClassNames, type MessageListProps, MessageUsageInfo, type ModelOption, type ModelsState, type QueuedChatMessage, QuotaBlockedError, type QuotaState, type ReconnectOptions, type RejectInput, type RenderFilesFn, type RenderReasoningFn, type RenderTextFn, type RenderToolGroupFn, type RenderToolPartFn, type RenderUiFn, SPEECH_LANGUAGES, type SkillSuggestionData, type SkillsSourceOptions, type SkipInput, type SpeechLanguage, type SpeechRecognitionHook, type StagedAttachment, type StagedAttachmentStatus, type StickToBottom, type StickToBottomOptions, type StoredTurnMetadata, type StreamConnectionState, type ThreadsEvent, type ThreadsState, TimestampInfo, ToolCatalog, type ToolCatalogState, type TranscriptActionState, TranscriptBlock, type TranscriptCopyState, type TranscriptEditState, TranscriptFile, type TranscriptItem, type TranscriptItemOptions, type TranscriptQueuedItem, type TranscriptStopState, TranscriptUiBlock, type TranscriptWindow, type TriggerMatch, type TriggerPosition, UploadAttachmentOptions, UsageSummary, type UseAgentChatOptions, type UseAgentConfigOptions, type UseAgentsOptions, type UseApprovalCountdownOptions, type UseAttachmentsOptions, type UseChatTranscriptOptions, type UseComposerAutocompleteOptions, type UseElapsedOptions, type UseMessageFeedbackOptions, type UseModelsOptions, type UseQuotaOptions, type UseSpeechRecognitionOptions, type UseThreadsOptions, type UseToolCatalogOptions, type UseTranscriptItemOptions, type WhileRunning, acceptsFile, applyCompletion, approvalCountdown, backgroundRunsFromThread, createSkillsSource, dragHasFiles, fileKind, filesFromClipboard, filterAutocompleteItems, findActiveTrigger, formatElapsed, loadStoredSpeechLang, messageFiles, notifyThreads, onThreadsEvent, persistSpeechLang, readReasoningMs, storedMessageToUiMessage, storedThreadToUiMessages, useAgentBackend, useAgentChat, useAgentConfig, useAgents, useAmbientRenderUi, useApprovalCountdown, useAttachments, useChatTranscript, useComposerAutocomplete, useElapsed, useMessageFeedback, useModels, useQuota, useSpeechRecognition, useStickToBottom, useThreads, useToolCatalog, useTranscriptItem };
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import * as ai from 'ai';
2
2
  import { ChatTransport, UIMessage, UIMessageChunk, DataUIPart, UIDataTypes } from 'ai';
3
- import { A as AgentBackend, U as UploadAttachmentOptions, H as HttpErrorListener, a as AttachmentUploadStrategy } from './client-D4ZSbZJ8.js';
4
- export { b as AgentBackendUnsupportedError, c as AgentClient, d as AgentClientOptions, e as AgentConnection, f as AgentHttpError, g as AgentRequestError, C as CancelResult, h as ChatStreamRequest, i as ChatStreamResponse, M as MessageFeedbackInput, R as ResumeStreamRequest, T as ThreadPatch, r as requireBackendMethod } from './client-D4ZSbZJ8.js';
5
- import { MessageAttachment, AgentClientConfig, AgentCatalogEntry, ModelCatalogEntry, ModelCatalogView, ModelCatalogLock, QuotaReport, QuotaWindow, QuotaBlock, QuotaWarning, MessageFeedback, MessageFeedbackValue, ThreadSummary, StoredMessage, ToolCatalogEntry } from '@dudousxd/nestjs-agent-core';
6
- export { ALL_AGENTS, ElicitationInput, ElicitationInputType, validateElicitationAnswer as validateAnswer, validateElicitationValue as validateAnswerValue } from '@dudousxd/nestjs-agent-core';
3
+ import { A as AgentBackend, U as UploadAttachmentOptions, H as HttpErrorListener, a as AttachmentUploadStrategy } from './client-DNM5Qm5N.js';
4
+ export { b as AgentBackendUnsupportedError, c as AgentClient, d as AgentClientOptions, e as AgentConnection, f as AgentHttpError, g as AgentRequestError, C as CancelResult, h as ChatStreamRequest, i as ChatStreamResponse, M as MessageFeedbackInput, Q as QueuedMessageUpdate, j as QueuedSendResult, R as ResumeStreamRequest, T as ThreadPatch, r as requireBackendMethod } from './client-DNM5Qm5N.js';
5
+ import { MessageAttachment, AgentClientConfig, AgentCatalogEntry, ModelCatalogEntry, ModelCatalogView, ModelCatalogLock, QuotaReport, QuotaWindow, QuotaBlock, QuotaWarning, MessageFeedback, MessageFeedbackValue, ThreadSummary, StoredMessage, QueuePause, ToolCatalogEntry } from '@dudousxd/nestjs-agent-core';
6
+ export { ALL_AGENTS, ChatQueueState, ElicitationInput, ElicitationInputType, QueuePause, QueuePauseReason, QueuedMessageView, validateElicitationAnswer as validateAnswer, validateElicitationValue as validateAnswerValue } from '@dudousxd/nestjs-agent-core';
7
7
  import * as React from 'react';
8
8
  import React__default, { ReactNode, Context } from 'react';
9
- import { o as GenuiProviderValue, T as TranscriptUiBlock, A as ApproveOptions, t as TranscriptBlock, U as UsageSummary, v as TimestampInfo, C as ChatStatus, M as MessageUsageInfo, w as ToolCatalog, x as AnyToolUIPart, y as TranscriptFile } from './generative-ui-BejHxxbR.js';
10
- export { z as ApprovalBlockOptions, B as BuildBlocksOptions, D as CoercibleQuestion, E as DescribeToolCallOptions, F as ElicitationBlockOptions, H as GroupToolActivityOptions, I as RawAnswer, J as ResolvedReading, K as ResolvedResultView, L as RetrievedPassage, S as SettleAction, N as ToolActivityGroup, O as ToolCallDescription, P as ToolCallState, Q as ToolCallStatus, V as TranscriptApproval, W as TranscriptApprovalStatus, X as TranscriptElicitationBlock, Y as TranscriptElicitationOutcome, Z as TranscriptFilesBlock, _ as TranscriptQuestion, $ as TranscriptQuestionOption, a0 as TranscriptReasoningBlock, a1 as TranscriptSettleState, a2 as TranscriptSource, a3 as TranscriptSourcesBlock, a4 as TranscriptTextBlock, a5 as TranscriptToolBlock, a6 as TranscriptToolCall, a7 as buildTranscriptBlocks, a8 as coerceAnswer, a9 as correctedCallIds, aa as describeTimestamp, ab as describeToolCall, ac as describeUsage, ad as extractMessageText, ae as fillTemplate, af as formatRelativeTime, ag as groupToolActivity, ah as inferResultView, ai as isActionCall, aj as phraseFor, ak as readPath, al as resolveResultView, am as toolCallState, an as toolCatalogFrom } from './generative-ui-BejHxxbR.js';
9
+ import { o as GenuiProviderValue, T as TranscriptUiBlock, A as ApproveOptions, t as TranscriptBlock, U as UsageSummary, v as TimestampInfo, C as ChatStatus, w as TranscriptFile, M as MessageUsageInfo, x as ToolCatalog, y as AnyToolUIPart } from './generative-ui-jT9TYfCi.js';
10
+ export { z as ApprovalBlockOptions, B as BuildBlocksOptions, D as CoercibleQuestion, E as DescribeToolCallOptions, F as ElicitationBlockOptions, H as GroupToolActivityOptions, I as RawAnswer, J as ResolvedReading, K as ResolvedResultView, L as RetrievedPassage, S as SettleAction, N as ToolActivityGroup, O as ToolCallDescription, P as ToolCallState, Q as ToolCallStatus, V as TranscriptApproval, W as TranscriptApprovalStatus, X as TranscriptElicitationBlock, Y as TranscriptElicitationOutcome, Z as TranscriptFilesBlock, _ as TranscriptQuestion, $ as TranscriptQuestionOption, a0 as TranscriptReasoningBlock, a1 as TranscriptSettleState, a2 as TranscriptSource, a3 as TranscriptSourcesBlock, a4 as TranscriptTextBlock, a5 as TranscriptToolBlock, a6 as TranscriptToolCall, a7 as buildTranscriptBlocks, a8 as coerceAnswer, a9 as correctedCallIds, aa as describeTimestamp, ab as describeToolCall, ac as describeUsage, ad as extractMessageText, ae as fillTemplate, af as formatRelativeTime, ag as groupToolActivity, ah as inferResultView, ai as isActionCall, aj as phraseFor, ak as readPath, al as resolveResultView, am as toolCallState, an as toolCatalogFrom } from './generative-ui-jT9TYfCi.js';
11
11
 
12
12
  /** Identity surfaced by the backend's `meta` SSE frame / response headers. */
13
13
  interface AgentStreamMeta {
@@ -94,6 +94,12 @@ interface AgentChatTransportOptions {
94
94
  * an early failure (no meta ever arrives) to a PRIOR attempt's id.
95
95
  */
96
96
  onAttemptStart?: () => void;
97
+ /**
98
+ * A resume found nothing streaming under the run id (the backend answered 404): the run already
99
+ * ended. The SDK is told there is nothing to resume, so the caller is the one that has to reload
100
+ * what the run wrote — `useAgentChat` re-reads the thread.
101
+ */
102
+ onResumeGone?: (runId: string) => void;
97
103
  /** Injectable for tests / non-browser runtimes. Defaults to global fetch. */
98
104
  fetch?: typeof fetch;
99
105
  }
@@ -120,7 +126,9 @@ interface AgentChatTransportOptions {
120
126
  * native `tool-approval-request` (the part moves to `approval-requested`)
121
127
  * - `approval-settled` → `data-approval-settled` part keyed by the call id (who decided, through
122
128
  * what, remembered or not); the outcome still rides the call's own output
123
- * - `title`, `cancelled` → transient `data-title` / `data-cancelled` (never stored on the message)
129
+ * - `title`, `cancelled`, `queue` → transient `data-title` / `data-cancelled` / `data-queue` (never
130
+ * stored on the message). A send the server queued (`202`) is reported
131
+ * as a transient `data-queue` too, carrying `queuedSend`
124
132
  * - any other kind → `data-<kind>` part carrying the frame minus `kind`, keyed by its `id`
125
133
  * when it has one — forwarded, never dropped
126
134
  * `parentId` on a tool frame rides the part's `toolMetadata` next to `toolKind`.
@@ -645,6 +653,55 @@ interface ChatInputProps {
645
653
  */
646
654
  declare function ChatInput({ onSubmit, disabled, placeholder, rows, enableSpeech, speechLang, sendLabel, onStop, isStreaming, stopLabel, className, textareaClassName, sendButtonClassName, micButtonClassName, stopButtonClassName, renderMic, }: ChatInputProps): React__default.JSX.Element;
647
655
 
656
+ /**
657
+ * What the composer (and `sendMessage`) does with a message sent while a turn is still running:
658
+ * - `'queue'` (default) — it waits in the thread's queue and runs when the turn settles.
659
+ * - `'interrupt'` — the running turn is cancelled and this message runs next.
660
+ * - `'block'` — the composer refuses it (`blockedBy: 'busy'`), as before queues existed.
661
+ */
662
+ type WhileRunning = 'queue' | 'interrupt' | 'block';
663
+ /** A message waiting in the thread's queue, as the chat shows it. */
664
+ interface QueuedChatMessage {
665
+ /** The server's id once it is queued; a local id while `state` is `'sending'`. */
666
+ id: string;
667
+ text: string;
668
+ attachments: MessageAttachment[];
669
+ /**
670
+ * `'sending'` — on its way to the server (it has no server id yet, so it cannot be edited).
671
+ * `'queued'` — waiting its turn.
672
+ */
673
+ state: 'sending' | 'queued';
674
+ /** Queued by an interrupt: it runs as soon as the cancelled turn settles. */
675
+ interrupt: boolean;
676
+ createdAt: string;
677
+ }
678
+ /** `chat.queue` — the thread's queue of waiting messages, and what can be done to it. */
679
+ interface ChatQueue {
680
+ /** Waiting messages, in the order they will run. */
681
+ items: QueuedChatMessage[];
682
+ /** Why the queue stopped draining (a failed turn, a Stop, the quota), or `null`. */
683
+ paused: QueuePause | null;
684
+ /** The backend can queue (`enqueueMessage`). Without it sends made mid-turn are refused. */
685
+ isSupported: boolean;
686
+ /**
687
+ * Queue `text` (with already-uploaded `attachments`) on this chat's thread. `mode: 'interrupt'`
688
+ * cancels the running turn and runs it next. Starts at once when nothing is running.
689
+ */
690
+ add: (text: string, options?: {
691
+ attachments?: MessageAttachment[];
692
+ mode?: 'queue' | 'interrupt';
693
+ }) => Promise<void>;
694
+ remove: (id: string) => Promise<void>;
695
+ edit: (id: string, text: string) => Promise<void>;
696
+ /** Move a waiting message to `index` (0 → next). */
697
+ move: (id: string, index: number) => Promise<void>;
698
+ clear: () => Promise<void>;
699
+ /** Lift a pause; the head starts when nothing is running. */
700
+ resume: () => Promise<void>;
701
+ /** The last queue operation that failed, or `null`. */
702
+ error: Error | null;
703
+ }
704
+
648
705
  interface StickToBottomOptions {
649
706
  /**
650
707
  * Changes whenever the rendered content grows — the signal to re-pin. A string rather than the
@@ -840,6 +897,37 @@ interface UseChatTranscriptOptions extends TranscriptItemOptions {
840
897
  /** Suggested follow-ups. The model only decides WHETHER they belong on screen. */
841
898
  followUps?: string[] | null;
842
899
  stickToBottomThreshold?: number;
900
+ /**
901
+ * Messages waiting in the thread's queue — `chat.queue` (`useAgentChat` wires it). They render
902
+ * after the transcript as {@link ChatTranscript.queued}: pending user messages, not yet sent.
903
+ */
904
+ queue?: {
905
+ items: QueuedChatMessage[];
906
+ paused: QueuePause | null;
907
+ remove?: (id: string) => void | Promise<void>;
908
+ } | null;
909
+ }
910
+ /**
911
+ * A message waiting in the thread's queue, as the transcript shows it: a user message that has not
912
+ * been sent to the model yet. Render it after {@link ChatTranscript.items}, dimmed or tagged.
913
+ */
914
+ interface TranscriptQueuedItem {
915
+ id: string;
916
+ role: 'user';
917
+ text: string;
918
+ files: TranscriptFile[];
919
+ /**
920
+ * `'sending'` — on its way to the server. `'queued'` — waiting for the running turn.
921
+ * `'paused'` — waiting, but the queue is paused (see {@link ChatTranscript.queuePaused}).
922
+ */
923
+ state: 'sending' | 'queued' | 'paused';
924
+ /** 0-based place in the queue. */
925
+ position: number;
926
+ /** Runs next. */
927
+ isNext: boolean;
928
+ /** Queued by an interrupt — it runs as soon as the cancelled turn settles. */
929
+ interrupt: boolean;
930
+ remove: TranscriptActionState;
843
931
  }
844
932
  interface ChatTranscript {
845
933
  /** The mounted window, oldest first. `window.hiddenCount` says what is held back. */
@@ -857,6 +945,10 @@ interface ChatTranscript {
857
945
  window: TranscriptWindow;
858
946
  scroll: StickToBottom;
859
947
  stop: TranscriptStopState;
948
+ /** Messages waiting in the thread's queue, in run order — render after `items`. */
949
+ queued: TranscriptQueuedItem[];
950
+ /** Why the queue is not draining, or `null`. */
951
+ queuePaused: QueuePause | null;
860
952
  }
861
953
  /**
862
954
  * The model behind a chat transcript: messages normalized into items with their parts grouped into
@@ -980,6 +1072,14 @@ interface MessageListClassNames {
980
1072
  errorRetry?: string;
981
1073
  followUps?: string;
982
1074
  followUpChip?: string;
1075
+ /** The block of waiting (queued) messages after the transcript. */
1076
+ queue?: string;
1077
+ /** One waiting message; it also carries `data-state="sending|queued|paused"`. */
1078
+ queuedItem?: string;
1079
+ queuedRemove?: string;
1080
+ /** The "queue paused" line and its resume button. */
1081
+ queuePaused?: string;
1082
+ queueResume?: string;
983
1083
  message?: MessageItemClassNames;
984
1084
  }
985
1085
  interface MessageListProps {
@@ -1023,6 +1123,11 @@ interface MessageListProps {
1023
1123
  /** Last turn's error — paired with `onRetry`, renders a retry banner. */
1024
1124
  error?: Error | null;
1025
1125
  onRetry?: () => void | Promise<void>;
1126
+ /**
1127
+ * `chat.queue` — messages sent while a turn was running, drawn after the transcript as pending
1128
+ * user messages (with a remove button), and a resume button while the queue is paused.
1129
+ */
1130
+ queue?: ChatQueue;
1026
1131
  classNames?: MessageListClassNames;
1027
1132
  }
1028
1133
  /**
@@ -1034,7 +1139,7 @@ interface MessageListProps {
1034
1139
  * Every decision here comes from `useChatTranscript`; the file below it is markup. A host that
1035
1140
  * wants a different layout drives that hook directly and never imports this component.
1036
1141
  */
1037
- declare function MessageList({ messages, status, renderToolPart, renderToolGroup, renderText, renderReasoning, renderFiles, renderUi, reasoningLabel, getMeta, readOnly, onFork, editable, onEditSubmit, regeneratable, onRegenerate, getUsage, getCreatedAt, emptyState, typingIndicator, followUps, onFollowUpClick, error, onRetry, classNames, }: MessageListProps): React__default.JSX.Element;
1142
+ declare function MessageList({ messages, status, renderToolPart, renderToolGroup, renderText, renderReasoning, renderFiles, renderUi, reasoningLabel, getMeta, readOnly, onFork, editable, onEditSubmit, regeneratable, onRegenerate, getUsage, getCreatedAt, emptyState, typingIndicator, followUps, onFollowUpClick, error, onRetry, queue, classNames, }: MessageListProps): React__default.JSX.Element;
1038
1143
 
1039
1144
  /**
1040
1145
  * Languages the dictation mic offers. The Web Speech API expects a
@@ -1482,6 +1587,14 @@ interface UseAgentChatOptions<B extends AgentBackend = AgentBackend> {
1482
1587
  blocked?: QuotaBlock | null;
1483
1588
  /** Validation and upload for `chat.composer.files` — see `useAttachments`. */
1484
1589
  composer?: Omit<UseAttachmentsOptions, 'backend'>;
1590
+ /**
1591
+ * What `composer.submit()` and `sendMessage` do while a turn is still running. Default `'queue'`:
1592
+ * the message waits in the thread's queue (server-side — it survives a reload) and runs when the
1593
+ * turn settles; `chat.queue` lists and edits what is waiting. `'interrupt'` cancels the running
1594
+ * turn and runs the message next. `'block'` refuses the send (`composer.blockedBy === 'busy'`).
1595
+ * A backend without `enqueueMessage` behaves as `'block'`.
1596
+ */
1597
+ whileRunning?: WhileRunning;
1485
1598
  /**
1486
1599
  * Overrides for `chat.transcript` — anything `useChatTranscript` takes (`sources`, `editable` +
1487
1600
  * `onEditSubmit`, `followUps`, `getUsage`, a `toolCatalog` of your own, `onApprove: null`, …).
@@ -1650,6 +1763,11 @@ declare function useAgentChat<B extends AgentBackend = AgentBackend>(options?: U
1650
1763
  transcript: ChatTranscript;
1651
1764
  /** A headless composer: draft, files, send gate, `submit()`. */
1652
1765
  composer: ChatComposer;
1766
+ /**
1767
+ * Messages sent while a turn was running, waiting their turn (server-side): list, edit, move,
1768
+ * remove, clear, and resume a paused queue.
1769
+ */
1770
+ queue: ChatQueue;
1653
1771
  /** The model picker: `list`, `selected`, `select(id)`, `pinToThread(id)`. */
1654
1772
  models: ChatModels;
1655
1773
  /** The caller's budget (`GET <base>/quota`); `quota.blocked` gates sends. */
@@ -1687,4 +1805,4 @@ declare class QuotaBlockedError extends Error {
1687
1805
  constructor(block: QuotaBlock);
1688
1806
  }
1689
1807
 
1690
- export { AgentBackend, AgentChatTransport, type AgentChatTransportOptions, type AgentConfigState, type AgentMessageMetadata, AgentProvider, type AgentProviderProps, type AgentStreamMeta, type AgentsState, type AggregatedTurnUsage, type AmbientRenderUi, AmbientRenderUiContext, type AnswerInput, AnyToolUIPart, type ApprovalCountdown, type ApproveInput, ApproveOptions, type AttachmentRejection, AttachmentUploadStrategy, type AttachmentsState, type AutocompleteInputProps, type AutocompleteItem, type AutocompleteListboxProps, type AutocompleteOptionProps, type AutocompleteSource, type BackgroundRun, type ChatBackground, ChatInput, type ChatInputProps, ChatStatus, type ChatTranscript, type ClipboardLikeEvent, type CompletionEdit, type ComposerAutocomplete, DEFAULT_SPEECH_LANG, type DragLikeEvent, type EditSubmitInput, HttpErrorListener, type MessageActionInput, type MessageFeedbackState, type MessageFile, type MessageFileKind, MessageItem, type MessageItemClassNames, type MessageItemProps, MessageItemView, type MessageItemViewProps, MessageList, type MessageListClassNames, type MessageListProps, MessageUsageInfo, type ModelOption, type ModelsState, QuotaBlockedError, type QuotaState, type ReconnectOptions, type RejectInput, type RenderFilesFn, type RenderReasoningFn, type RenderTextFn, type RenderToolGroupFn, type RenderToolPartFn, type RenderUiFn, SPEECH_LANGUAGES, type SkillSuggestionData, type SkillsSourceOptions, type SkipInput, type SpeechLanguage, type SpeechRecognitionHook, type StagedAttachment, type StagedAttachmentStatus, type StickToBottom, type StickToBottomOptions, type StoredTurnMetadata, type StreamConnectionState, type ThreadsEvent, type ThreadsState, TimestampInfo, ToolCatalog, type ToolCatalogState, type TranscriptActionState, TranscriptBlock, type TranscriptCopyState, type TranscriptEditState, TranscriptFile, type TranscriptItem, type TranscriptItemOptions, type TranscriptStopState, TranscriptUiBlock, type TranscriptWindow, type TriggerMatch, type TriggerPosition, UploadAttachmentOptions, UsageSummary, type UseAgentChatOptions, type UseAgentConfigOptions, type UseAgentsOptions, type UseApprovalCountdownOptions, type UseAttachmentsOptions, type UseChatTranscriptOptions, type UseComposerAutocompleteOptions, type UseElapsedOptions, type UseMessageFeedbackOptions, type UseModelsOptions, type UseQuotaOptions, type UseSpeechRecognitionOptions, type UseThreadsOptions, type UseToolCatalogOptions, type UseTranscriptItemOptions, acceptsFile, applyCompletion, approvalCountdown, backgroundRunsFromThread, createSkillsSource, dragHasFiles, fileKind, filesFromClipboard, filterAutocompleteItems, findActiveTrigger, formatElapsed, loadStoredSpeechLang, messageFiles, notifyThreads, onThreadsEvent, persistSpeechLang, readReasoningMs, storedMessageToUiMessage, storedThreadToUiMessages, useAgentBackend, useAgentChat, useAgentConfig, useAgents, useAmbientRenderUi, useApprovalCountdown, useAttachments, useChatTranscript, useComposerAutocomplete, useElapsed, useMessageFeedback, useModels, useQuota, useSpeechRecognition, useStickToBottom, useThreads, useToolCatalog, useTranscriptItem };
1808
+ export { AgentBackend, AgentChatTransport, type AgentChatTransportOptions, type AgentConfigState, type AgentMessageMetadata, AgentProvider, type AgentProviderProps, type AgentStreamMeta, type AgentsState, type AggregatedTurnUsage, type AmbientRenderUi, AmbientRenderUiContext, type AnswerInput, AnyToolUIPart, type ApprovalCountdown, type ApproveInput, ApproveOptions, type AttachmentRejection, AttachmentUploadStrategy, type AttachmentsState, type AutocompleteInputProps, type AutocompleteItem, type AutocompleteListboxProps, type AutocompleteOptionProps, type AutocompleteSource, type BackgroundRun, type ChatBackground, ChatInput, type ChatInputProps, type ChatQueue, ChatStatus, type ChatTranscript, type ClipboardLikeEvent, type CompletionEdit, type ComposerAutocomplete, DEFAULT_SPEECH_LANG, type DragLikeEvent, type EditSubmitInput, HttpErrorListener, type MessageActionInput, type MessageFeedbackState, type MessageFile, type MessageFileKind, MessageItem, type MessageItemClassNames, type MessageItemProps, MessageItemView, type MessageItemViewProps, MessageList, type MessageListClassNames, type MessageListProps, MessageUsageInfo, type ModelOption, type ModelsState, type QueuedChatMessage, QuotaBlockedError, type QuotaState, type ReconnectOptions, type RejectInput, type RenderFilesFn, type RenderReasoningFn, type RenderTextFn, type RenderToolGroupFn, type RenderToolPartFn, type RenderUiFn, SPEECH_LANGUAGES, type SkillSuggestionData, type SkillsSourceOptions, type SkipInput, type SpeechLanguage, type SpeechRecognitionHook, type StagedAttachment, type StagedAttachmentStatus, type StickToBottom, type StickToBottomOptions, type StoredTurnMetadata, type StreamConnectionState, type ThreadsEvent, type ThreadsState, TimestampInfo, ToolCatalog, type ToolCatalogState, type TranscriptActionState, TranscriptBlock, type TranscriptCopyState, type TranscriptEditState, TranscriptFile, type TranscriptItem, type TranscriptItemOptions, type TranscriptQueuedItem, type TranscriptStopState, TranscriptUiBlock, type TranscriptWindow, type TriggerMatch, type TriggerPosition, UploadAttachmentOptions, UsageSummary, type UseAgentChatOptions, type UseAgentConfigOptions, type UseAgentsOptions, type UseApprovalCountdownOptions, type UseAttachmentsOptions, type UseChatTranscriptOptions, type UseComposerAutocompleteOptions, type UseElapsedOptions, type UseMessageFeedbackOptions, type UseModelsOptions, type UseQuotaOptions, type UseSpeechRecognitionOptions, type UseThreadsOptions, type UseToolCatalogOptions, type UseTranscriptItemOptions, type WhileRunning, acceptsFile, applyCompletion, approvalCountdown, backgroundRunsFromThread, createSkillsSource, dragHasFiles, fileKind, filesFromClipboard, filterAutocompleteItems, findActiveTrigger, formatElapsed, loadStoredSpeechLang, messageFiles, notifyThreads, onThreadsEvent, persistSpeechLang, readReasoningMs, storedMessageToUiMessage, storedThreadToUiMessages, useAgentBackend, useAgentChat, useAgentConfig, useAgents, useAmbientRenderUi, useApprovalCountdown, useAttachments, useChatTranscript, useComposerAutocomplete, useElapsed, useMessageFeedback, useModels, useQuota, useSpeechRecognition, useStickToBottom, useThreads, useToolCatalog, useTranscriptItem };