@assistant-ui/core 0.3.14 → 0.3.15

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.
Files changed (137) hide show
  1. package/dist/adapters/voice.js +11 -0
  2. package/dist/adapters/voice.js.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/internal.d.ts +2 -1
  5. package/dist/internal.js +2 -1
  6. package/dist/model-context/frame/host.d.ts +1 -1
  7. package/dist/model-context/frame/host.d.ts.map +1 -1
  8. package/dist/model-context/frame/host.js +17 -3
  9. package/dist/model-context/frame/host.js.map +1 -1
  10. package/dist/model-context/frame/provider.d.ts +4 -0
  11. package/dist/model-context/frame/provider.d.ts.map +1 -1
  12. package/dist/model-context/frame/provider.js +50 -3
  13. package/dist/model-context/frame/provider.js.map +1 -1
  14. package/dist/model-context/frame/types.d.ts +4 -1
  15. package/dist/model-context/frame/types.d.ts.map +1 -1
  16. package/dist/model-context/frame/types.js.map +1 -1
  17. package/dist/react/client/RemoteThreadList.d.ts +1 -1
  18. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  19. package/dist/react/client/RemoteThreadList.js +95 -23
  20. package/dist/react/client/RemoteThreadList.js.map +1 -1
  21. package/dist/react/primitive-hooks/useActionBarCopy.js +7 -1
  22. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
  23. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +3 -0
  24. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  25. package/dist/react/primitive-hooks/useThreadIsEmpty.js +3 -0
  26. package/dist/react/primitive-hooks/useThreadIsEmpty.js.map +1 -1
  27. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +3 -0
  28. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  29. package/dist/react/primitive-hooks/useThreadIsRunning.js +3 -0
  30. package/dist/react/primitive-hooks/useThreadIsRunning.js.map +1 -1
  31. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +2 -0
  32. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  33. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +6 -0
  34. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  35. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +6 -0
  36. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  37. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +192 -50
  38. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  39. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  40. package/dist/react/runtimes/RemoteThreadResource.js +2 -0
  41. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
  42. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  43. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +1 -1
  44. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  45. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  46. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +38 -5
  47. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
  48. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  49. package/dist/runtime/utils/message-repository.js +27 -18
  50. package/dist/runtime/utils/message-repository.js.map +1 -1
  51. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  52. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +2 -0
  53. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  54. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +102 -0
  55. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -0
  56. package/dist/runtimes/inert/InertThreadRuntimeCore.js +156 -0
  57. package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -0
  58. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  59. package/dist/runtimes/local/local-thread-runtime-core.js +25 -6
  60. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  61. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +12 -60
  62. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  63. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +10 -145
  64. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  65. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +9 -0
  66. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -0
  67. package/dist/runtimes/remote-thread-list/adapter-changed.js +13 -0
  68. package/dist/runtimes/remote-thread-list/adapter-changed.js.map +1 -0
  69. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  70. package/dist/runtimes/remote-thread-list/empty-thread-core.js +16 -155
  71. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  72. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +2 -0
  73. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  74. package/dist/runtimes/remote-thread-list/optimistic-state.js +11 -0
  75. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  76. package/dist/runtimes/remote-thread-list/types.d.ts +3 -0
  77. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  78. package/dist/store/clients/external-thread.js +1 -1
  79. package/dist/store/clients/external-thread.js.map +1 -1
  80. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
  81. package/dist/store/runtime-clients/handle-runtime-action.js +2 -0
  82. package/dist/store/runtime-clients/handle-runtime-action.js.map +1 -1
  83. package/dist/types/message.d.ts +1 -1
  84. package/dist/types/message.js.map +1 -1
  85. package/dist/utils/silent-runtime-action.d.ts +6 -0
  86. package/dist/utils/silent-runtime-action.d.ts.map +1 -0
  87. package/dist/utils/silent-runtime-action.js +7 -0
  88. package/dist/utils/silent-runtime-action.js.map +1 -0
  89. package/package.json +4 -4
  90. package/src/adapters/voice.test.ts +66 -1
  91. package/src/adapters/voice.ts +8 -0
  92. package/src/internal.ts +1 -0
  93. package/src/model-context/frame/host.test.ts +64 -5
  94. package/src/model-context/frame/host.ts +16 -3
  95. package/src/model-context/frame/provider.test.ts +347 -20
  96. package/src/model-context/frame/provider.ts +58 -2
  97. package/src/model-context/frame/types.ts +5 -0
  98. package/src/react/client/RemoteThreadList.test.ts +196 -0
  99. package/src/react/client/RemoteThreadList.ts +93 -24
  100. package/src/react/primitive-hooks/useActionBarCopy.test.ts +15 -0
  101. package/src/react/primitive-hooks/useActionBarCopy.ts +13 -3
  102. package/src/react/primitive-hooks/useThreadIsEmpty.ts +3 -0
  103. package/src/react/primitive-hooks/useThreadIsRunning.ts +3 -0
  104. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +12 -0
  105. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.republish.test.ts +87 -0
  106. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +268 -63
  107. package/src/react/runtimes/RemoteThreadResource.ts +2 -0
  108. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +58 -0
  109. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +3 -1
  110. package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +98 -3
  111. package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +68 -6
  112. package/src/react/runtimes/useLocalRuntime.test.tsx +5 -5
  113. package/src/runtime/utils/message-repository.ts +26 -18
  114. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +4 -0
  115. package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +253 -0
  116. package/src/runtimes/inert/InertThreadRuntimeCore.ts +232 -0
  117. package/src/runtimes/local/local-thread-runtime-core.test.ts +319 -0
  118. package/src/runtimes/local/local-thread-runtime-core.ts +38 -8
  119. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +17 -209
  120. package/src/runtimes/remote-thread-list/adapter-changed.ts +10 -0
  121. package/src/runtimes/remote-thread-list/empty-thread-core.ts +28 -221
  122. package/src/runtimes/remote-thread-list/optimistic-state.test.ts +18 -0
  123. package/src/runtimes/remote-thread-list/optimistic-state.ts +13 -0
  124. package/src/runtimes/remote-thread-list/types.ts +4 -0
  125. package/src/store/clients/external-thread.ts +1 -1
  126. package/src/store/runtime-clients/handle-runtime-action.test.ts +40 -0
  127. package/src/store/runtime-clients/handle-runtime-action.ts +3 -0
  128. package/src/tests/MessageRepository.test.ts +48 -0
  129. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +2 -2
  130. package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +8 -6
  131. package/src/tests/empty-thread-core.test.ts +6 -0
  132. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +20 -0
  133. package/src/tests/external-thread-isEmpty.test.tsx +100 -0
  134. package/src/tests/remote-thread-list-adapter-switch.test.ts +383 -0
  135. package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +67 -0
  136. package/src/types/message.ts +1 -1
  137. package/src/utils/silent-runtime-action.ts +6 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/runtimes/remote-thread-list/types.ts"],"mappings":";;;;;;;KAQK;EAAkC;;KAE3B,sCACN,OAAO,+CACH,OAAO;KAGL;EACV;EACA;;KAGU;WACD;WACA;WACA;WACA;WACA,gBAAgB;WAChB,SAAS;;KAGR;EACV,SAAS;EACT;;KAGU;EACV;;KAGU;EACV,eAAe;EACf,UAAU;EACV,cAAc;;KAGJ;EACV,KAAK,SAAS,8BAA8B,QAAQ;EAEpD,OAAO,kBAAkB,mBAAmB;EAC5C,cACE,kBACA,QAAQ,sCACP;EACH,QAAQ,mBAAmB;EAC3B,UAAU,mBAAmB;EAC7B,OAAO,mBAAmB;EAC1B,WAAW,mBAAmB,QAAQ;EACtC,cACE,kBACA,4BAA4B,kBAC3B,QAAQ;EACX,MAAM,mBAAmB,QAAQ;;;;;;;;;;;;;;;;EAiBjC,oBAAoB;;;;;;;;;;;;;;;EAgBpB,8BAA8B;;KAGpB;EACV,mBAAmB;EACnB,SAAS;;;;;;;;EAST;;;;;;EAOA;;;;;;;;;;;;;EAcA,qBAAqB;;;;;;EAOrB"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/runtimes/remote-thread-list/types.ts"],"mappings":";;;;;;;KAQK;EAAkC;;KAE3B,sCACN,OAAO,+CACH,OAAO;KAGL;EACV;EACA;;KAGU;WACD;WACA;WACA;WACA;WACA,gBAAgB;WAChB,SAAS;;KAGR;EACV,SAAS;EACT;;KAGU;EACV;;KAGU;EACV,eAAe;EACf,UAAU;EACV,cAAc;;KAGJ;EACV,KAAK,SAAS,8BAA8B,QAAQ;EAEpD,OAAO,kBAAkB,mBAAmB;EAC5C,cACE,kBACA,QAAQ,sCACP;EACH,QAAQ,mBAAmB;EAC3B,UAAU,mBAAmB;EAC7B,OAAO,mBAAmB;EAC1B,WAAW,mBAAmB,QAAQ;EACtC,cACE,kBACA,4BAA4B,kBAC3B,QAAQ;EACX,MAAM,mBAAmB,QAAQ;;;;;;;;;;;;;;;;EAiBjC,oBAAoB;;;;;;;;;;;;;;;EAgBpB,8BAA8B;;KAGpB;EACV,mBAAmB;;;;EAKnB,SAAS;;;;;;;;EAST;;;;;;EAOA;;;;;;;;;;;;;EAcA,qBAAqB;;;;;;EAOrB"}
@@ -1162,7 +1162,7 @@ const useExternalThread = (t0) => {
1162
1162
  $[60] = t25;
1163
1163
  } else t25 = $[60];
1164
1164
  const messageStates = t25;
1165
- const t26 = messages.length === 0;
1165
+ const t26 = messages.length === 0 && !isLoading;
1166
1166
  let t27;
1167
1167
  if ($[61] !== hasAttachments || $[62] !== hasBranches || $[63] !== hasCancel || $[64] !== hasEdit || $[65] !== hasFeedback || $[66] !== hasQueue || $[67] !== hasRefetchThread || $[68] !== hasReload || $[69] !== hasSpeech) {
1168
1168
  t27 = {
@@ -1 +1 @@
1
- {"version":3,"file":"external-thread.js","names":["useState","useMemo","useEffect","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AppendMessage","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","Attachment","CreateAttachment","PendingAttachment","isCreateAttachment","AddToolResultOptions","RespondToToolApprovalOptions","ResumeToolCallOptions","SpeechState","ThreadSuggestion","ExternalThreadQueueAdapter","QueuePlacement","ExternalThreadBranchAdapter","AttachmentAdapter","FeedbackAdapter","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","resolveToolApprovalResponse","toMessagePartStatus","ModelContext","ThreadSuggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","EMPTY_SUGGESTIONS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onRefetchThread","Promise","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Error","handleBeginEdit","t5","msg","sourceId","handleSendEdit","t6","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t7","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t8","role","metadata","messageWithFeedback","t9","t10","isLast","parts","composer","t11","t12","methods","t13","t14","t15","position","branchId","target","undefined","switchToBranch","t16","selector","get","findIndex","p","toolCallId","t17","selector_0","key","t18","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","AttachmentAddOperation","cancelled","attachmentIds","Set","AttachmentAddOperations","operations","start","operation","add","accept","attachmentId","finish","isCancelled","cancel","has","cancelAll","clear","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","drainAdapterAdd","ReturnType","upsert","Symbol","asyncIterator","useLiveState","initial","setState","ref","for","next","current","prev","T","set","const","useComposerClientResource","isEditing","setIsEditing","isEditingRef","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","setAttachments","attachmentsRef","quote","setQuote","quoteRef","attachmentAddOperations","messageText","filter","_temp4","_temp5","join","updateFromMessage","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","attachment_1","error","newAttachment","Math","random","toString","substring","prev_1","newAttachment_0","prev_2","removed_0","removed_1","t19","opts","currentQuote","currentText","currentRole","currentRunConfig","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_2","send","then","error_0","prev_3","prev_4","prev_5","console","t20","t21","t22","t23","addAttachment","clearAttachments","reset","beginEdit","startDictation","_temp7","stopDictation","_temp8","queueItem","createSpeechController","notify","session","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","deduped","i","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","__internal_notifyCancelled","handleCancelRun","message_1","at","handleSendNew","headId","hasCancel","hasRefetchThread","message_2","message_3","composerQueue","t24","suggestionsClient","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t25","_temp9","messageStates","t26","t27","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t28","t29","isDisabled","capabilities","suggestions","t30","t31","t32","t33","message_4","appendMessage","t34","t35","t36","unstable_refetchThread","t37","state_0","t38","t39","append","deleteMessage","_temp0","resumeRun","cancelRun","importExternalState","getModelContext","_temp1","export","_temp10","import","_temp11","_temp12","connectVoice","_temp13","disconnectVoice","_temp14","getVoiceVolume","_temp15","subscribeVoiceVolume","_temp17","muteVoice","_temp18","unmuteVoice","_temp19","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","s","arr","config","_temp16"],"sources":["../../../src/store/clients/external-thread.ts"],"sourcesContent":["import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store/client\";\n\nimport type {\n AppendMessage,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n} from \"../../types/message\";\nimport type {\n Attachment,\n CreateAttachment,\n PendingAttachment,\n} from \"../../types/attachment\";\nimport { isCreateAttachment } from \"../../types/attachment\";\nimport type {\n AddToolResultOptions,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n SpeechState,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"../../runtime/queue/external-thread-queue-adapter\";\nimport type { ExternalThreadBranchAdapter } from \"../../runtime/branch/external-thread-branch-adapter\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { ComposerSendOptions } from \"../scopes/composer\";\nimport { fileMatchesAccept } from \"../../adapters/attachment\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { resolveToolApprovalResponse } from \"../../runtime/utils/resolveToolApprovalResponse\";\nimport { toMessagePartStatus } from \"../../utils/normalizePartStatus\";\nimport { ModelContext } from \"./model-context-client\";\nimport { ThreadSuggestions } from \"./suggestions\";\nimport { Tools } from \"../../react/client/Tools\";\nimport { DataRenderers } from \"../../react/client/DataRenderers\";\nimport { SingleThreadList } from \"./single-thread-list\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\nconst EMPTY_SUGGESTIONS: readonly ThreadSuggestion[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n /**\n * Handler for re-fetching this thread's state in place, driving\n * `threads.reloadMainThread()`. Unrelated to `onReload`, which re-generates\n * an assistant message. Presence enables the `refetchThread` capability;\n * rejections propagate to the caller.\n */\n onRefetchThread?: (() => Promise<void>) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (options: RespondToToolApprovalOptions) => void;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n onEdit({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n canCancel: true,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n onRespondToToolApproval(\n resolveToolApprovalResponse(part.approval, response),\n );\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n canCancel: boolean;\n isRunning?: boolean;\n isSendDisabled?: boolean;\n onCancel?: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\ntype AttachmentAddOperation = {\n cancelled: boolean;\n attachmentIds: Set<string>;\n};\n\nclass AttachmentAddOperations {\n private readonly operations = new Set<AttachmentAddOperation>();\n\n start() {\n const operation: AttachmentAddOperation = {\n cancelled: false,\n attachmentIds: new Set(),\n };\n this.operations.add(operation);\n return operation;\n }\n\n accept(operation: AttachmentAddOperation, attachmentId: string) {\n if (operation.cancelled) return false;\n operation.attachmentIds.add(attachmentId);\n return true;\n }\n\n finish(operation: AttachmentAddOperation) {\n this.operations.delete(operation);\n }\n\n isCancelled(operation: AttachmentAddOperation) {\n return operation.cancelled;\n }\n\n cancel(attachmentId: string) {\n for (const operation of [...this.operations]) {\n if (!operation.attachmentIds.has(attachmentId)) continue;\n operation.cancelled = true;\n this.operations.delete(operation);\n }\n }\n\n cancelAll() {\n for (const operation of this.operations) {\n operation.cancelled = true;\n }\n this.operations.clear();\n }\n}\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst drainAdapterAdd = async (\n result: ReturnType<AttachmentAdapter[\"add\"]>,\n upsert: (attachment: Attachment) => boolean,\n) => {\n if (Symbol.asyncIterator in result) {\n for await (const attachment of result) {\n if (!upsert(attachment)) break;\n }\n } else {\n upsert(await result);\n }\n};\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n canCancel,\n isRunning = false,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [isEditing, setIsEditing, isEditingRef] = useLiveState(\n type === \"thread\",\n );\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n const attachmentAddOperations = useMemo(\n () => new AttachmentAddOperations(),\n [],\n );\n\n const updateFromMessage = () => {\n if (!message) return;\n const messageText = message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\\n\");\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n };\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n attachmentAddOperations.cancel(attachment.id);\n await attachmentAdapter?.remove(attachment);\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n const operation = attachmentAddOperations.start();\n try {\n await drainAdapterAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n (attachment) => {\n if (!attachmentAddOperations.accept(operation, attachment.id))\n return false;\n upsertAttachment(attachment);\n return true;\n },\n );\n attachmentAddOperations.finish(operation);\n } catch (error) {\n attachmentAddOperations.finish(operation);\n if (!attachmentAddOperations.isCancelled(operation)) throw error;\n }\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: Math.random().toString(36).substring(7),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentRole = roleRef.current;\n const currentRunConfig = runConfigRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditingRef.current) throw new Error(\"Composer is not available\");\n if (isEmpty || isSendDisabled) return;\n\n attachmentAddOperations.cancelAll();\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: currentRole,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: currentRunConfig,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? isRunning) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n if (type === \"edit\") setIsEditing(false);\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: () => {\n onCancel?.();\n if (type === \"edit\") setIsEditing(false);\n },\n beginEdit: () => {\n onBeginEdit?.();\n if (type === \"thread\") return;\n if (isEditingRef.current) throw new Error(\"Edit already in progress\");\n setIsEditing(true);\n updateFromMessage();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onRefetchThread,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n useEffect(() => {\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n // Nothing is aborted without a handler, so pausing the queue would hold\n // the pending items against a run that keeps going.\n if (!onCancel) return;\n\n // Before the run is aborted, so the settle it produces keeps the pending\n // items instead of dispatching the next one at the moment the user\n // stopped.\n queue?.__internal_notifyCancelled?.();\n onCancel();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const hasCancel = !!onCancel;\n const hasRefetchThread = !!onRefetchThread;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n canCancel: isRunning && hasCancel,\n isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n const suggestionsClient = useClientResource(\n ThreadSuggestions(EMPTY_SUGGESTIONS),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: hasRefetchThread,\n cancel: hasCancel,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: EMPTY_SUGGESTIONS,\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasCancel,\n hasRefetchThread,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n suggestions: () => suggestionsClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n ...(onRefetchThread && { unstable_refetchThread: onRefetchThread }),\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"external-thread.js","names":["useState","useMemo","useEffect","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AppendMessage","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","Attachment","CreateAttachment","PendingAttachment","isCreateAttachment","AddToolResultOptions","RespondToToolApprovalOptions","ResumeToolCallOptions","SpeechState","ThreadSuggestion","ExternalThreadQueueAdapter","QueuePlacement","ExternalThreadBranchAdapter","AttachmentAdapter","FeedbackAdapter","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","resolveToolApprovalResponse","toMessagePartStatus","ModelContext","ThreadSuggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","EMPTY_SUGGESTIONS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onRefetchThread","Promise","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Error","handleBeginEdit","t5","msg","sourceId","handleSendEdit","t6","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t7","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t8","role","metadata","messageWithFeedback","t9","t10","isLast","parts","composer","t11","t12","methods","t13","t14","t15","position","branchId","target","undefined","switchToBranch","t16","selector","get","findIndex","p","toolCallId","t17","selector_0","key","t18","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","AttachmentAddOperation","cancelled","attachmentIds","Set","AttachmentAddOperations","operations","start","operation","add","accept","attachmentId","finish","isCancelled","cancel","has","cancelAll","clear","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","drainAdapterAdd","ReturnType","upsert","Symbol","asyncIterator","useLiveState","initial","setState","ref","for","next","current","prev","T","set","const","useComposerClientResource","isEditing","setIsEditing","isEditingRef","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","setAttachments","attachmentsRef","quote","setQuote","quoteRef","attachmentAddOperations","messageText","filter","_temp4","_temp5","join","updateFromMessage","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","attachment_1","error","newAttachment","Math","random","toString","substring","prev_1","newAttachment_0","prev_2","removed_0","removed_1","t19","opts","currentQuote","currentText","currentRole","currentRunConfig","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_2","send","then","error_0","prev_3","prev_4","prev_5","console","t20","t21","t22","t23","addAttachment","clearAttachments","reset","beginEdit","startDictation","_temp7","stopDictation","_temp8","queueItem","createSpeechController","notify","session","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","deduped","i","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","__internal_notifyCancelled","handleCancelRun","message_1","at","handleSendNew","headId","hasCancel","hasRefetchThread","message_2","message_3","composerQueue","t24","suggestionsClient","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t25","_temp9","messageStates","t26","t27","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t28","t29","isDisabled","capabilities","suggestions","t30","t31","t32","t33","message_4","appendMessage","t34","t35","t36","unstable_refetchThread","t37","state_0","t38","t39","append","deleteMessage","_temp0","resumeRun","cancelRun","importExternalState","getModelContext","_temp1","export","_temp10","import","_temp11","_temp12","connectVoice","_temp13","disconnectVoice","_temp14","getVoiceVolume","_temp15","subscribeVoiceVolume","_temp17","muteVoice","_temp18","unmuteVoice","_temp19","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","s","arr","config","_temp16"],"sources":["../../../src/store/clients/external-thread.ts"],"sourcesContent":["import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store/client\";\n\nimport type {\n AppendMessage,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n} from \"../../types/message\";\nimport type {\n Attachment,\n CreateAttachment,\n PendingAttachment,\n} from \"../../types/attachment\";\nimport { isCreateAttachment } from \"../../types/attachment\";\nimport type {\n AddToolResultOptions,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n SpeechState,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport type {\n ExternalThreadQueueAdapter,\n QueuePlacement,\n} from \"../../runtime/queue/external-thread-queue-adapter\";\nimport type { ExternalThreadBranchAdapter } from \"../../runtime/branch/external-thread-branch-adapter\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { ComposerSendOptions } from \"../scopes/composer\";\nimport { fileMatchesAccept } from \"../../adapters/attachment\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { resolveToolApprovalResponse } from \"../../runtime/utils/resolveToolApprovalResponse\";\nimport { toMessagePartStatus } from \"../../utils/normalizePartStatus\";\nimport { ModelContext } from \"./model-context-client\";\nimport { ThreadSuggestions } from \"./suggestions\";\nimport { Tools } from \"../../react/client/Tools\";\nimport { DataRenderers } from \"../../react/client/DataRenderers\";\nimport { SingleThreadList } from \"./single-thread-list\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\nconst EMPTY_SUGGESTIONS: readonly ThreadSuggestion[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n /**\n * Handler for re-fetching this thread's state in place, driving\n * `threads.reloadMainThread()`. Unrelated to `onReload`, which re-generates\n * an assistant message. Presence enables the `refetchThread` capability;\n * rejections propagate to the caller.\n */\n onRefetchThread?: (() => Promise<void>) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (options: RespondToToolApprovalOptions) => void;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n onEdit({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n canCancel: true,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n onRespondToToolApproval(\n resolveToolApprovalResponse(part.approval, response),\n );\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n canCancel: boolean;\n isRunning?: boolean;\n isSendDisabled?: boolean;\n onCancel?: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\ntype AttachmentAddOperation = {\n cancelled: boolean;\n attachmentIds: Set<string>;\n};\n\nclass AttachmentAddOperations {\n private readonly operations = new Set<AttachmentAddOperation>();\n\n start() {\n const operation: AttachmentAddOperation = {\n cancelled: false,\n attachmentIds: new Set(),\n };\n this.operations.add(operation);\n return operation;\n }\n\n accept(operation: AttachmentAddOperation, attachmentId: string) {\n if (operation.cancelled) return false;\n operation.attachmentIds.add(attachmentId);\n return true;\n }\n\n finish(operation: AttachmentAddOperation) {\n this.operations.delete(operation);\n }\n\n isCancelled(operation: AttachmentAddOperation) {\n return operation.cancelled;\n }\n\n cancel(attachmentId: string) {\n for (const operation of [...this.operations]) {\n if (!operation.attachmentIds.has(attachmentId)) continue;\n operation.cancelled = true;\n this.operations.delete(operation);\n }\n }\n\n cancelAll() {\n for (const operation of this.operations) {\n operation.cancelled = true;\n }\n this.operations.clear();\n }\n}\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst drainAdapterAdd = async (\n result: ReturnType<AttachmentAdapter[\"add\"]>,\n upsert: (attachment: Attachment) => boolean,\n) => {\n if (Symbol.asyncIterator in result) {\n for await (const attachment of result) {\n if (!upsert(attachment)) break;\n }\n } else {\n upsert(await result);\n }\n};\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n canCancel,\n isRunning = false,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [isEditing, setIsEditing, isEditingRef] = useLiveState(\n type === \"thread\",\n );\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n const attachmentAddOperations = useMemo(\n () => new AttachmentAddOperations(),\n [],\n );\n\n const updateFromMessage = () => {\n if (!message) return;\n const messageText = message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\\n\");\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n };\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n attachmentAddOperations.cancel(attachment.id);\n await attachmentAdapter?.remove(attachment);\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n const operation = attachmentAddOperations.start();\n try {\n await drainAdapterAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n (attachment) => {\n if (!attachmentAddOperations.accept(operation, attachment.id))\n return false;\n upsertAttachment(attachment);\n return true;\n },\n );\n attachmentAddOperations.finish(operation);\n } catch (error) {\n attachmentAddOperations.finish(operation);\n if (!attachmentAddOperations.isCancelled(operation)) throw error;\n }\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: Math.random().toString(36).substring(7),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n attachmentAddOperations.cancelAll();\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentRole = roleRef.current;\n const currentRunConfig = runConfigRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditingRef.current) throw new Error(\"Composer is not available\");\n if (isEmpty || isSendDisabled) return;\n\n attachmentAddOperations.cancelAll();\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: currentRole,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: currentRunConfig,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? isRunning) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n if (type === \"edit\") setIsEditing(false);\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: () => {\n onCancel?.();\n if (type === \"edit\") setIsEditing(false);\n },\n beginEdit: () => {\n onBeginEdit?.();\n if (type === \"thread\") return;\n if (isEditingRef.current) throw new Error(\"Edit already in progress\");\n setIsEditing(true);\n updateFromMessage();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onRefetchThread,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n useEffect(() => {\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n // Nothing is aborted without a handler, so pausing the queue would hold\n // the pending items against a run that keeps going.\n if (!onCancel) return;\n\n // Before the run is aborted, so the settle it produces keeps the pending\n // items instead of dispatching the next one at the moment the user\n // stopped.\n queue?.__internal_notifyCancelled?.();\n onCancel();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const hasCancel = !!onCancel;\n const hasRefetchThread = !!onRefetchThread;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n canCancel: isRunning && hasCancel,\n isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n const suggestionsClient = useClientResource(\n ThreadSuggestions(EMPTY_SUGGESTIONS),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0 && !isLoading,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: hasRefetchThread,\n cancel: hasCancel,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: EMPTY_SUGGESTIONS,\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasCancel,\n hasRefetchThread,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n suggestions: () => suggestionsClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n ...(onRefetchThread && { unstable_refetchThread: onRefetchThread }),\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handle-runtime-action.d.ts","names":[],"sources":["../../../src/store/runtime-clients/handle-runtime-action.ts"],"mappings":";cAAa,sBACX,eACA,eAAe,kBACd"}
1
+ {"version":3,"file":"handle-runtime-action.d.ts","names":[],"sources":["../../../src/store/runtime-clients/handle-runtime-action.ts"],"mappings":";cAEa,sBACX,eACA,eAAe,kBACd"}
@@ -1,7 +1,9 @@
1
+ import { isSilentRuntimeAction } from "../../utils/silent-runtime-action.js";
1
2
  //#region src/store/runtime-clients/handle-runtime-action.ts
2
3
  const handleRuntimeAction = (label, execute) => {
3
4
  const task = execute();
4
5
  task.catch((error) => {
6
+ if (isSilentRuntimeAction(error)) return;
5
7
  console.error(`[assistant-ui] ${label} failed:`, error);
6
8
  });
7
9
  return task;
@@ -1 +1 @@
1
- {"version":3,"file":"handle-runtime-action.js","names":["handleRuntimeAction","label","execute","Promise","task","catch","error","console"],"sources":["../../../src/store/runtime-clients/handle-runtime-action.ts"],"sourcesContent":["export const handleRuntimeAction = (\n label: string,\n execute: () => Promise<void>,\n): Promise<void> => {\n const task = execute();\n\n void task.catch((error: unknown) => {\n console.error(`[assistant-ui] ${label} failed:`, error);\n });\n return task;\n};\n"],"mappings":";AAAA,MAAaA,uBACXC,OACAC,YACkB;CAClB,MAAME,OAAOF,QAAQ;CAErB,KAAUG,OAAOC,UAAmB;EAClCC,QAAQD,MAAM,kBAAkBL,MAAK,WAAYK,KAAK;CACxD,CAAC;CACD,OAAOF;AACT"}
1
+ {"version":3,"file":"handle-runtime-action.js","names":["isSilentRuntimeAction","handleRuntimeAction","label","execute","Promise","task","catch","error","console"],"sources":["../../../src/store/runtime-clients/handle-runtime-action.ts"],"sourcesContent":["import { isSilentRuntimeAction } from \"../../utils/silent-runtime-action\";\n\nexport const handleRuntimeAction = (\n label: string,\n execute: () => Promise<void>,\n): Promise<void> => {\n const task = execute();\n\n void task.catch((error: unknown) => {\n if (isSilentRuntimeAction(error)) return;\n console.error(`[assistant-ui] ${label} failed:`, error);\n });\n return task;\n};\n"],"mappings":";;AAEA,MAAaC,uBACXC,OACAC,YACkB;CAClB,MAAME,OAAOF,QAAQ;CAErB,KAAUG,OAAOC,UAAmB;EAClC,IAAIP,sBAAsBO,KAAK,GAAG;EAClCC,QAAQD,MAAM,kBAAkBL,MAAK,WAAYK,KAAK;CACxD,CAAC;CACD,OAAOF;AACT"}
@@ -242,7 +242,7 @@ type ToolCallMessagePartStatus = {
242
242
  /** The tool call is waiting for UI or human input before continuing. */
243
243
  readonly type: "requires-action";
244
244
  /** Reason the tool call requires action. */
245
- readonly reason: "interrupt";
245
+ readonly reason: "tool-calls" | "interrupt";
246
246
  } | MessagePartStatus;
247
247
  type MessageStatus = {
248
248
  readonly type: "running";
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","names":["ReadonlyJSONObject","ReadonlyJSONValue","ToolCallTiming","ToolModelContentPart","CompleteAttachment","PartProviderMetadata","providerName","TextMessagePart","type","text","status","MessagePartStreamStatus","providerMetadata","parentId","ReasoningMessagePart","unstable_summary","SourceProviderMetadata","SourceMessagePart","sourceType","id","url","title","mediaType","filename","ImageMessagePart","image","FileMessagePart","data","mimeType","Unstable_AudioMessagePart","audio","format","DataMessagePart","name","T","GenerativeUINode","component","props","Record","children","key","GenerativeUISpec","root","GenerativeUIMessagePart","spec","McpAppMetadata","resourceUri","visibility","serverId","MCP_APP_URI_SCHEME","isMcpAppUri","uri","startsWith","ToolCallMessagePartMcpMetadata","app","ToolApprovalOptionKind","ToolApprovalOption","kind","label","description","grants","confirm","ToolApprovalResponse","approved","reason","optionId","ToolCallMessagePart","toolCallId","toolName","args","TArgs","result","TResult","isError","argsText","artifact","timing","mcp","modelContent","interrupt","payload","approval","isAutomatic","options","resolution","messages","ThreadMessage","ThreadUserMessagePart","ThreadAssistantMessagePart","MessagePartStatus","error","ToolCallMessagePartStatus","MessageStatus","MessageTiming","streamStartTime","firstTokenTime","totalStreamTime","tokenCount","tokensPerSecond","totalChunks","toolCallCount","ThreadStep","messageId","usage","inputTokens","outputTokens","MessageCommonProps","createdAt","Date","ThreadSystemMessage","role","content","metadata","unstable_state","unstable_annotations","unstable_data","steps","submittedFeedback","custom","ThreadUserMessage","attachments","isOptimistic","ThreadAssistantMessage","BaseThreadMessage","MessageRole","RunConfig","AppendMessage","Omit","sourceId","runConfig","startRun","steer"],"sources":["../../src/types/message.ts"],"sourcesContent":["import type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ToolCallTiming, ToolModelContentPart } from \"assistant-stream\";\nimport type { CompleteAttachment } from \"./attachment\";\n\nexport type { ToolCallTiming, ToolModelContentPart };\n\nexport type PartProviderMetadata = {\n readonly [providerName: string]: ReadonlyJSONObject;\n};\n\nexport type TextMessagePart = {\n readonly type: \"text\";\n readonly text: string;\n readonly status?: MessagePartStreamStatus;\n readonly providerMetadata?: PartProviderMetadata;\n readonly parentId?: string;\n};\n\nexport type ReasoningMessagePart = {\n readonly type: \"reasoning\";\n readonly text: string;\n readonly status?: MessagePartStreamStatus;\n readonly unstable_summary?: string;\n readonly providerMetadata?: PartProviderMetadata;\n readonly parentId?: string;\n};\n\nexport type SourceProviderMetadata = PartProviderMetadata;\n\nexport type SourceMessagePart =\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"document\";\n readonly id: string;\n readonly url?: undefined;\n readonly title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n };\n\nexport type ImageMessagePart = {\n readonly type: \"image\";\n readonly image: string;\n readonly filename?: string;\n readonly providerMetadata?: PartProviderMetadata;\n};\n\nexport type FileMessagePart = {\n readonly type: \"file\";\n readonly filename?: string;\n readonly data: string;\n readonly mimeType: string;\n /** How `data` goes on the wire: a url or id reference; omitted = inferred (http(s) → url, else base64). \"url\" is honored by the LangChain-family, A2A, AG-UI, and Google ADK runtimes; \"id\" by the LangChain family only. */\n readonly sourceType?: \"url\" | \"id\";\n readonly providerMetadata?: PartProviderMetadata;\n readonly parentId?: string;\n};\n\n/**\n * @deprecated Use {@link FileMessagePart} with an `audio/*` mime type. `file`\n * is the carrier for every non-image binary modality: it is a member of both\n * the user and assistant unions, carries a filename, and can declare how its\n * payload goes on the wire, none of which this shape can express. The payload\n * form a `file` part needs is still adapter specific; see the Part Types\n * section of the message primitive docs. Honored everywhere it is accepted; it\n * will not gain fields.\n */\nexport type Unstable_AudioMessagePart = {\n readonly type: \"audio\";\n readonly audio: {\n readonly data: string;\n readonly format: \"mp3\" | \"wav\";\n };\n};\n\nexport type DataMessagePart<T = any> = {\n readonly type: \"data\";\n readonly name: string;\n readonly data: T;\n};\n\n/**\n * A JSON spec describing a tree of UI components to render.\n *\n * The agent emits a {@link GenerativeUIMessagePart} containing this spec, and\n * the consumer-provided component allowlist is used to resolve `component`\n * names. Any component referenced that is not present in the allowlist is\n * rejected with a typed error — the allowlist is the security boundary in the\n * default same-realm rendering path.\n */\nexport type GenerativeUINode =\n | string\n | {\n /** Allowlisted component name (resolved against the consumer registry). */\n readonly component: string;\n /** Props passed to the resolved component (must be JSON-serializable). */\n readonly props?: Record<string, unknown>;\n /** Optional children — strings render as text, objects recurse. */\n readonly children?: readonly GenerativeUINode[];\n /** Optional stable key for React reconciliation. */\n readonly key?: string;\n };\n\n/**\n * The root spec for a generative UI tree.\n */\nexport type GenerativeUISpec = {\n /** Root node(s) to render. */\n readonly root: GenerativeUINode | readonly GenerativeUINode[];\n};\n\n/**\n * A message part that carries a JSON spec describing UI to render.\n *\n * Render with `<MessagePrimitive.GenerativeUI components={...} />`. The\n * primitive resolves component names against the consumer-provided allowlist\n * — any unknown name throws a typed error rather than rendering. Stream-\n * friendly: a partially-streamed spec renders progressively.\n */\nexport type GenerativeUIMessagePart = {\n readonly type: \"generative-ui\";\n /** The JSON spec describing the UI tree. */\n readonly spec: GenerativeUISpec;\n /** Optional id (useful for replays / stable keys). */\n readonly id?: string;\n readonly parentId?: string;\n};\n\nexport type McpAppMetadata = {\n readonly resourceUri: string;\n readonly mimeType?: string;\n readonly visibility?: readonly (\"model\" | \"app\")[];\n /** Routable server identity emitted by the agent stack when multiple MCP servers back one agent; for @ag-ui/mcp-apps-middleware this is the configured serverId, falling back to its serverHash. */\n readonly serverId?: string;\n};\n\nexport const MCP_APP_URI_SCHEME = \"ui://\";\n\nexport const isMcpAppUri = (uri: string | undefined): boolean =>\n !!uri?.startsWith(MCP_APP_URI_SCHEME);\n\nexport type ToolCallMessagePartMcpMetadata = {\n readonly app?: McpAppMetadata;\n};\n\nexport type ToolApprovalOptionKind =\n | \"allow-once\"\n | \"allow-always\"\n | \"reject-once\"\n | \"reject-always\";\n\nexport type ToolApprovalOption = {\n /** Opaque, host-defined identifier. Scope semantics (session vs project vs global) belong to the option supplier. */\n readonly id: string;\n /**\n * Decision class. Drives approved-resolution and default rendering.\n * Open union: `_`-prefixed custom kinds are never auto-resolved and the\n * default kit skips them; they must be answered with an explicit\n * `approved` value (optionally alongside the `optionId`).\n */\n readonly kind: ToolApprovalOptionKind | (string & {});\n /** Human label. Renderers supply defaults per kind when omitted. */\n readonly label?: string;\n readonly description?: string;\n /** Patterns or rules this option would persist, shown before the user commits. Supplied by the host; never derived by the library. */\n readonly grants?: readonly string[];\n /** Opt-in confirmation step before this option resolves. */\n readonly confirm?: boolean | { title?: string; description?: string };\n};\n\nexport type ToolApprovalResponse =\n | { readonly approved: boolean; readonly reason?: string }\n | { readonly optionId: string; readonly reason?: string }\n | {\n readonly approved: boolean;\n readonly optionId: string;\n readonly reason?: string;\n };\n\nexport type ToolCallMessagePart<\n TArgs = ReadonlyJSONObject,\n TResult = unknown,\n> = {\n /** Identifies this part as a tool call. */\n readonly type: \"tool-call\";\n /** Stable identifier for this invocation of the tool. */\n readonly toolCallId: string;\n /** Name of the tool requested by the model. */\n readonly toolName: string;\n /**\n * Arguments supplied by the model. During streaming this is a partial parse:\n * fields may be missing or incomplete. From a tool-call renderer, use\n * `useToolArgsStatus` to detect which fields are still arriving.\n */\n readonly args: TArgs;\n /** Result returned by the tool, if it has completed. */\n readonly result?: TResult | undefined;\n /** Whether the result represents a tool execution error. */\n readonly isError?: boolean | undefined;\n /** Raw JSON argument text streamed by the model. */\n readonly argsText: string;\n /** UI-only artifact associated with the tool result. */\n readonly artifact?: unknown;\n /** Wall-clock timing for this call, when the runtime or host tracks it. */\n readonly timing?: ToolCallTiming;\n /** MCP app metadata associated with this tool call, when present. */\n readonly mcp?: ToolCallMessagePartMcpMetadata;\n /** Provider metadata associated with this tool call, when present. */\n readonly providerMetadata?: PartProviderMetadata;\n /** Content returned to the model for this tool result. */\n readonly modelContent?: readonly ToolModelContentPart[] | undefined;\n /** Human-input request that must be resolved before the run can continue. */\n readonly interrupt?: { type: \"human\"; payload: unknown };\n /** Server-side approval gate. `respondToApproval` may only be called while `approved` is undefined and no `resolution` is recorded. */\n readonly approval?: {\n readonly id: string;\n readonly approved?: boolean;\n readonly reason?: string;\n readonly isAutomatic?: boolean;\n /** Available decisions for this call. Absent: a plain allow / deny pair. */\n readonly options?: readonly ToolApprovalOption[];\n /** The option chosen at resolution, when options were present. */\n readonly optionId?: string;\n /** Terminal non-decision state: the request was cancelled or expired without a user decision. Set by the host. */\n readonly resolution?: \"cancelled\" | \"expired\";\n };\n /** Parent message-part ID when this part belongs to a nested structure. */\n readonly parentId?: string;\n /**\n * Nested thread messages produced by this tool call, for example a sub-agent\n * conversation.\n */\n readonly messages?: readonly ThreadMessage[];\n};\n\nexport type ThreadUserMessagePart =\n | TextMessagePart\n | ImageMessagePart\n | FileMessagePart\n | DataMessagePart\n | Unstable_AudioMessagePart;\n\nexport type ThreadAssistantMessagePart =\n | TextMessagePart\n | ReasoningMessagePart\n | ToolCallMessagePart\n | SourceMessagePart\n | FileMessagePart\n | ImageMessagePart\n | DataMessagePart\n | GenerativeUIMessagePart;\n\nexport type MessagePartStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"complete\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: unknown;\n };\n\nexport type MessagePartStreamStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"complete\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n };\n\nexport type ToolCallMessagePartStatus =\n | {\n /** The tool call is waiting for UI or human input before continuing. */\n readonly type: \"requires-action\";\n /** Reason the tool call requires action. */\n readonly reason: \"interrupt\";\n }\n | MessagePartStatus;\n\nexport type MessageStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"requires-action\";\n readonly reason: \"tool-calls\" | \"interrupt\";\n }\n | {\n readonly type: \"complete\";\n readonly reason: \"stop\" | \"unknown\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"tool-calls\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: ReadonlyJSONValue;\n };\n\nexport type MessageTiming = {\n readonly streamStartTime: number;\n readonly firstTokenTime?: number;\n readonly totalStreamTime?: number;\n readonly tokenCount?: number;\n readonly tokensPerSecond?: number;\n readonly totalChunks: number;\n readonly toolCallCount: number;\n};\n\nexport type ThreadStep = {\n readonly messageId?: string;\n readonly usage?:\n | {\n readonly inputTokens: number;\n readonly outputTokens: number;\n }\n | undefined;\n};\n\ntype MessageCommonProps = {\n readonly id: string;\n readonly createdAt: Date;\n};\n\nexport type ThreadSystemMessage = MessageCommonProps & {\n readonly role: \"system\";\n readonly content: readonly [TextMessagePart];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadUserMessage = MessageCommonProps & {\n readonly role: \"user\";\n readonly content: readonly ThreadUserMessagePart[];\n readonly attachments: readonly CompleteAttachment[];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadAssistantMessage = MessageCommonProps & {\n readonly role: \"assistant\";\n readonly content: readonly ThreadAssistantMessagePart[];\n readonly status: MessageStatus;\n readonly metadata: {\n readonly unstable_state: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n /**\n * Marks a client-side optimistic placeholder. Such messages are evicted\n * once off the head branch and are never persisted.\n */\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n};\n\ntype BaseThreadMessage = {\n readonly status?: ThreadAssistantMessage[\"status\"];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations?: readonly ReadonlyJSONValue[];\n readonly unstable_data?: readonly ReadonlyJSONValue[];\n readonly steps?: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n readonly attachments?: ThreadUserMessage[\"attachments\"];\n};\n\nexport type ThreadMessage = BaseThreadMessage &\n (ThreadSystemMessage | ThreadUserMessage | ThreadAssistantMessage);\n\nexport type MessageRole = ThreadMessage[\"role\"];\n\nexport type RunConfig = {\n readonly custom?: Record<string, unknown>;\n};\n\nexport type AppendMessage = Omit<ThreadMessage, \"id\"> & {\n parentId: string | null;\n\n /** The ID of the message that was edited or undefined. */\n sourceId: string | null;\n runConfig: RunConfig | undefined;\n startRun?: boolean | undefined;\n /** Process this message next; only meaningful for queue-capable runtimes. */\n steer?: boolean | undefined;\n};\n"],"mappings":";AAsJA,MAAaiD,qBAAqB;AAElC,MAAaC,eAAeC,QAC1B,CAAC,CAACA,KAAKC,WAAWH,kBAAkB"}
1
+ {"version":3,"file":"message.js","names":["ReadonlyJSONObject","ReadonlyJSONValue","ToolCallTiming","ToolModelContentPart","CompleteAttachment","PartProviderMetadata","providerName","TextMessagePart","type","text","status","MessagePartStreamStatus","providerMetadata","parentId","ReasoningMessagePart","unstable_summary","SourceProviderMetadata","SourceMessagePart","sourceType","id","url","title","mediaType","filename","ImageMessagePart","image","FileMessagePart","data","mimeType","Unstable_AudioMessagePart","audio","format","DataMessagePart","name","T","GenerativeUINode","component","props","Record","children","key","GenerativeUISpec","root","GenerativeUIMessagePart","spec","McpAppMetadata","resourceUri","visibility","serverId","MCP_APP_URI_SCHEME","isMcpAppUri","uri","startsWith","ToolCallMessagePartMcpMetadata","app","ToolApprovalOptionKind","ToolApprovalOption","kind","label","description","grants","confirm","ToolApprovalResponse","approved","reason","optionId","ToolCallMessagePart","toolCallId","toolName","args","TArgs","result","TResult","isError","argsText","artifact","timing","mcp","modelContent","interrupt","payload","approval","isAutomatic","options","resolution","messages","ThreadMessage","ThreadUserMessagePart","ThreadAssistantMessagePart","MessagePartStatus","error","ToolCallMessagePartStatus","MessageStatus","MessageTiming","streamStartTime","firstTokenTime","totalStreamTime","tokenCount","tokensPerSecond","totalChunks","toolCallCount","ThreadStep","messageId","usage","inputTokens","outputTokens","MessageCommonProps","createdAt","Date","ThreadSystemMessage","role","content","metadata","unstable_state","unstable_annotations","unstable_data","steps","submittedFeedback","custom","ThreadUserMessage","attachments","isOptimistic","ThreadAssistantMessage","BaseThreadMessage","MessageRole","RunConfig","AppendMessage","Omit","sourceId","runConfig","startRun","steer"],"sources":["../../src/types/message.ts"],"sourcesContent":["import type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ToolCallTiming, ToolModelContentPart } from \"assistant-stream\";\nimport type { CompleteAttachment } from \"./attachment\";\n\nexport type { ToolCallTiming, ToolModelContentPart };\n\nexport type PartProviderMetadata = {\n readonly [providerName: string]: ReadonlyJSONObject;\n};\n\nexport type TextMessagePart = {\n readonly type: \"text\";\n readonly text: string;\n readonly status?: MessagePartStreamStatus;\n readonly providerMetadata?: PartProviderMetadata;\n readonly parentId?: string;\n};\n\nexport type ReasoningMessagePart = {\n readonly type: \"reasoning\";\n readonly text: string;\n readonly status?: MessagePartStreamStatus;\n readonly unstable_summary?: string;\n readonly providerMetadata?: PartProviderMetadata;\n readonly parentId?: string;\n};\n\nexport type SourceProviderMetadata = PartProviderMetadata;\n\nexport type SourceMessagePart =\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"document\";\n readonly id: string;\n readonly url?: undefined;\n readonly title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n };\n\nexport type ImageMessagePart = {\n readonly type: \"image\";\n readonly image: string;\n readonly filename?: string;\n readonly providerMetadata?: PartProviderMetadata;\n};\n\nexport type FileMessagePart = {\n readonly type: \"file\";\n readonly filename?: string;\n readonly data: string;\n readonly mimeType: string;\n /** How `data` goes on the wire: a url or id reference; omitted = inferred (http(s) → url, else base64). \"url\" is honored by the LangChain-family, A2A, AG-UI, and Google ADK runtimes; \"id\" by the LangChain family only. */\n readonly sourceType?: \"url\" | \"id\";\n readonly providerMetadata?: PartProviderMetadata;\n readonly parentId?: string;\n};\n\n/**\n * @deprecated Use {@link FileMessagePart} with an `audio/*` mime type. `file`\n * is the carrier for every non-image binary modality: it is a member of both\n * the user and assistant unions, carries a filename, and can declare how its\n * payload goes on the wire, none of which this shape can express. The payload\n * form a `file` part needs is still adapter specific; see the Part Types\n * section of the message primitive docs. Honored everywhere it is accepted; it\n * will not gain fields.\n */\nexport type Unstable_AudioMessagePart = {\n readonly type: \"audio\";\n readonly audio: {\n readonly data: string;\n readonly format: \"mp3\" | \"wav\";\n };\n};\n\nexport type DataMessagePart<T = any> = {\n readonly type: \"data\";\n readonly name: string;\n readonly data: T;\n};\n\n/**\n * A JSON spec describing a tree of UI components to render.\n *\n * The agent emits a {@link GenerativeUIMessagePart} containing this spec, and\n * the consumer-provided component allowlist is used to resolve `component`\n * names. Any component referenced that is not present in the allowlist is\n * rejected with a typed error — the allowlist is the security boundary in the\n * default same-realm rendering path.\n */\nexport type GenerativeUINode =\n | string\n | {\n /** Allowlisted component name (resolved against the consumer registry). */\n readonly component: string;\n /** Props passed to the resolved component (must be JSON-serializable). */\n readonly props?: Record<string, unknown>;\n /** Optional children — strings render as text, objects recurse. */\n readonly children?: readonly GenerativeUINode[];\n /** Optional stable key for React reconciliation. */\n readonly key?: string;\n };\n\n/**\n * The root spec for a generative UI tree.\n */\nexport type GenerativeUISpec = {\n /** Root node(s) to render. */\n readonly root: GenerativeUINode | readonly GenerativeUINode[];\n};\n\n/**\n * A message part that carries a JSON spec describing UI to render.\n *\n * Render with `<MessagePrimitive.GenerativeUI components={...} />`. The\n * primitive resolves component names against the consumer-provided allowlist\n * — any unknown name throws a typed error rather than rendering. Stream-\n * friendly: a partially-streamed spec renders progressively.\n */\nexport type GenerativeUIMessagePart = {\n readonly type: \"generative-ui\";\n /** The JSON spec describing the UI tree. */\n readonly spec: GenerativeUISpec;\n /** Optional id (useful for replays / stable keys). */\n readonly id?: string;\n readonly parentId?: string;\n};\n\nexport type McpAppMetadata = {\n readonly resourceUri: string;\n readonly mimeType?: string;\n readonly visibility?: readonly (\"model\" | \"app\")[];\n /** Routable server identity emitted by the agent stack when multiple MCP servers back one agent; for @ag-ui/mcp-apps-middleware this is the configured serverId, falling back to its serverHash. */\n readonly serverId?: string;\n};\n\nexport const MCP_APP_URI_SCHEME = \"ui://\";\n\nexport const isMcpAppUri = (uri: string | undefined): boolean =>\n !!uri?.startsWith(MCP_APP_URI_SCHEME);\n\nexport type ToolCallMessagePartMcpMetadata = {\n readonly app?: McpAppMetadata;\n};\n\nexport type ToolApprovalOptionKind =\n | \"allow-once\"\n | \"allow-always\"\n | \"reject-once\"\n | \"reject-always\";\n\nexport type ToolApprovalOption = {\n /** Opaque, host-defined identifier. Scope semantics (session vs project vs global) belong to the option supplier. */\n readonly id: string;\n /**\n * Decision class. Drives approved-resolution and default rendering.\n * Open union: `_`-prefixed custom kinds are never auto-resolved and the\n * default kit skips them; they must be answered with an explicit\n * `approved` value (optionally alongside the `optionId`).\n */\n readonly kind: ToolApprovalOptionKind | (string & {});\n /** Human label. Renderers supply defaults per kind when omitted. */\n readonly label?: string;\n readonly description?: string;\n /** Patterns or rules this option would persist, shown before the user commits. Supplied by the host; never derived by the library. */\n readonly grants?: readonly string[];\n /** Opt-in confirmation step before this option resolves. */\n readonly confirm?: boolean | { title?: string; description?: string };\n};\n\nexport type ToolApprovalResponse =\n | { readonly approved: boolean; readonly reason?: string }\n | { readonly optionId: string; readonly reason?: string }\n | {\n readonly approved: boolean;\n readonly optionId: string;\n readonly reason?: string;\n };\n\nexport type ToolCallMessagePart<\n TArgs = ReadonlyJSONObject,\n TResult = unknown,\n> = {\n /** Identifies this part as a tool call. */\n readonly type: \"tool-call\";\n /** Stable identifier for this invocation of the tool. */\n readonly toolCallId: string;\n /** Name of the tool requested by the model. */\n readonly toolName: string;\n /**\n * Arguments supplied by the model. During streaming this is a partial parse:\n * fields may be missing or incomplete. From a tool-call renderer, use\n * `useToolArgsStatus` to detect which fields are still arriving.\n */\n readonly args: TArgs;\n /** Result returned by the tool, if it has completed. */\n readonly result?: TResult | undefined;\n /** Whether the result represents a tool execution error. */\n readonly isError?: boolean | undefined;\n /** Raw JSON argument text streamed by the model. */\n readonly argsText: string;\n /** UI-only artifact associated with the tool result. */\n readonly artifact?: unknown;\n /** Wall-clock timing for this call, when the runtime or host tracks it. */\n readonly timing?: ToolCallTiming;\n /** MCP app metadata associated with this tool call, when present. */\n readonly mcp?: ToolCallMessagePartMcpMetadata;\n /** Provider metadata associated with this tool call, when present. */\n readonly providerMetadata?: PartProviderMetadata;\n /** Content returned to the model for this tool result. */\n readonly modelContent?: readonly ToolModelContentPart[] | undefined;\n /** Human-input request that must be resolved before the run can continue. */\n readonly interrupt?: { type: \"human\"; payload: unknown };\n /** Server-side approval gate. `respondToApproval` may only be called while `approved` is undefined and no `resolution` is recorded. */\n readonly approval?: {\n readonly id: string;\n readonly approved?: boolean;\n readonly reason?: string;\n readonly isAutomatic?: boolean;\n /** Available decisions for this call. Absent: a plain allow / deny pair. */\n readonly options?: readonly ToolApprovalOption[];\n /** The option chosen at resolution, when options were present. */\n readonly optionId?: string;\n /** Terminal non-decision state: the request was cancelled or expired without a user decision. Set by the host. */\n readonly resolution?: \"cancelled\" | \"expired\";\n };\n /** Parent message-part ID when this part belongs to a nested structure. */\n readonly parentId?: string;\n /**\n * Nested thread messages produced by this tool call, for example a sub-agent\n * conversation.\n */\n readonly messages?: readonly ThreadMessage[];\n};\n\nexport type ThreadUserMessagePart =\n | TextMessagePart\n | ImageMessagePart\n | FileMessagePart\n | DataMessagePart\n | Unstable_AudioMessagePart;\n\nexport type ThreadAssistantMessagePart =\n | TextMessagePart\n | ReasoningMessagePart\n | ToolCallMessagePart\n | SourceMessagePart\n | FileMessagePart\n | ImageMessagePart\n | DataMessagePart\n | GenerativeUIMessagePart;\n\nexport type MessagePartStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"complete\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: unknown;\n };\n\nexport type MessagePartStreamStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"complete\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n };\n\nexport type ToolCallMessagePartStatus =\n | {\n /** The tool call is waiting for UI or human input before continuing. */\n readonly type: \"requires-action\";\n /** Reason the tool call requires action. */\n readonly reason: \"tool-calls\" | \"interrupt\";\n }\n | MessagePartStatus;\n\nexport type MessageStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"requires-action\";\n readonly reason: \"tool-calls\" | \"interrupt\";\n }\n | {\n readonly type: \"complete\";\n readonly reason: \"stop\" | \"unknown\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"tool-calls\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: ReadonlyJSONValue;\n };\n\nexport type MessageTiming = {\n readonly streamStartTime: number;\n readonly firstTokenTime?: number;\n readonly totalStreamTime?: number;\n readonly tokenCount?: number;\n readonly tokensPerSecond?: number;\n readonly totalChunks: number;\n readonly toolCallCount: number;\n};\n\nexport type ThreadStep = {\n readonly messageId?: string;\n readonly usage?:\n | {\n readonly inputTokens: number;\n readonly outputTokens: number;\n }\n | undefined;\n};\n\ntype MessageCommonProps = {\n readonly id: string;\n readonly createdAt: Date;\n};\n\nexport type ThreadSystemMessage = MessageCommonProps & {\n readonly role: \"system\";\n readonly content: readonly [TextMessagePart];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadUserMessage = MessageCommonProps & {\n readonly role: \"user\";\n readonly content: readonly ThreadUserMessagePart[];\n readonly attachments: readonly CompleteAttachment[];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadAssistantMessage = MessageCommonProps & {\n readonly role: \"assistant\";\n readonly content: readonly ThreadAssistantMessagePart[];\n readonly status: MessageStatus;\n readonly metadata: {\n readonly unstable_state: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n /**\n * Marks a client-side optimistic placeholder. Such messages are evicted\n * once off the head branch and are never persisted.\n */\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n};\n\ntype BaseThreadMessage = {\n readonly status?: ThreadAssistantMessage[\"status\"];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations?: readonly ReadonlyJSONValue[];\n readonly unstable_data?: readonly ReadonlyJSONValue[];\n readonly steps?: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n readonly attachments?: ThreadUserMessage[\"attachments\"];\n};\n\nexport type ThreadMessage = BaseThreadMessage &\n (ThreadSystemMessage | ThreadUserMessage | ThreadAssistantMessage);\n\nexport type MessageRole = ThreadMessage[\"role\"];\n\nexport type RunConfig = {\n readonly custom?: Record<string, unknown>;\n};\n\nexport type AppendMessage = Omit<ThreadMessage, \"id\"> & {\n parentId: string | null;\n\n /** The ID of the message that was edited or undefined. */\n sourceId: string | null;\n runConfig: RunConfig | undefined;\n startRun?: boolean | undefined;\n /** Process this message next; only meaningful for queue-capable runtimes. */\n steer?: boolean | undefined;\n};\n"],"mappings":";AAsJA,MAAaiD,qBAAqB;AAElC,MAAaC,eAAeC,QAC1B,CAAC,CAACA,KAAKC,WAAWH,kBAAkB"}
@@ -0,0 +1,6 @@
1
+ //#region src/utils/silent-runtime-action.d.ts
2
+ declare const SILENT_RUNTIME_ACTION: unique symbol;
3
+ declare const isSilentRuntimeAction: (error: unknown) => boolean;
4
+ //#endregion
5
+ export { SILENT_RUNTIME_ACTION, isSilentRuntimeAction };
6
+ //# sourceMappingURL=silent-runtime-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"silent-runtime-action.d.ts","names":[],"sources":["../../src/utils/silent-runtime-action.ts"],"mappings":";cAAa;cAIA,wBAAyB"}
@@ -0,0 +1,7 @@
1
+ //#region src/utils/silent-runtime-action.ts
2
+ const SILENT_RUNTIME_ACTION = Symbol.for("assistant-ui.silent-runtime-action");
3
+ const isSilentRuntimeAction = (error) => typeof error === "object" && error !== null && SILENT_RUNTIME_ACTION in error;
4
+ //#endregion
5
+ export { SILENT_RUNTIME_ACTION, isSilentRuntimeAction };
6
+
7
+ //# sourceMappingURL=silent-runtime-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"silent-runtime-action.js","names":["SILENT_RUNTIME_ACTION","Symbol","for","isSilentRuntimeAction","error"],"sources":["../../src/utils/silent-runtime-action.ts"],"sourcesContent":["export const SILENT_RUNTIME_ACTION = Symbol.for(\n \"assistant-ui.silent-runtime-action\",\n);\n\nexport const isSilentRuntimeAction = (error: unknown): boolean =>\n typeof error === \"object\" && error !== null && SILENT_RUNTIME_ACTION in error;\n"],"mappings":";AAAA,MAAaA,wBAAwBC,OAAOC,IAC1C,oCACF;AAEA,MAAaC,yBAAyBC,UACpC,OAAOA,UAAU,YAAYA,UAAU,QAAQJ,yBAAyBI"}