@assistant-ui/core 0.2.19 → 0.2.21

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 (512) hide show
  1. package/dist/adapters/attachment.d.ts +2 -2
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +14 -7
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/directive-formatter.d.ts +0 -1
  6. package/dist/adapters/directive-formatter.d.ts.map +1 -1
  7. package/dist/adapters/feedback.d.ts +0 -1
  8. package/dist/adapters/feedback.d.ts.map +1 -1
  9. package/dist/adapters/index.d.ts +2 -2
  10. package/dist/adapters/index.js +2 -1
  11. package/dist/adapters/speech.d.ts +0 -1
  12. package/dist/adapters/speech.d.ts.map +1 -1
  13. package/dist/adapters/suggestion.d.ts +16 -2
  14. package/dist/adapters/suggestion.d.ts.map +1 -1
  15. package/dist/adapters/suggestion.js +36 -0
  16. package/dist/adapters/suggestion.js.map +1 -0
  17. package/dist/adapters/thread-history.d.ts +2 -2
  18. package/dist/adapters/thread-history.d.ts.map +1 -1
  19. package/dist/adapters/trigger.d.ts +5 -3
  20. package/dist/adapters/trigger.d.ts.map +1 -1
  21. package/dist/adapters/voice.d.ts +0 -1
  22. package/dist/adapters/voice.d.ts.map +1 -1
  23. package/dist/index.d.ts +4 -3
  24. package/dist/index.js +3 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/internal/duplicate-detection.d.ts.map +1 -1
  27. package/dist/internal.d.ts +7 -1
  28. package/dist/internal.js +6 -2
  29. package/dist/model-context/frame/host.d.ts +0 -1
  30. package/dist/model-context/frame/host.d.ts.map +1 -1
  31. package/dist/model-context/frame/provider.d.ts +0 -1
  32. package/dist/model-context/frame/provider.d.ts.map +1 -1
  33. package/dist/model-context/frame/types.d.ts.map +1 -1
  34. package/dist/model-context/interactable-composer-metadata.d.ts +4 -2
  35. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  36. package/dist/model-context/registry-handles.d.ts +0 -1
  37. package/dist/model-context/registry-handles.d.ts.map +1 -1
  38. package/dist/model-context/registry.d.ts +0 -1
  39. package/dist/model-context/registry.d.ts.map +1 -1
  40. package/dist/model-context/tool.d.ts +23 -9
  41. package/dist/model-context/tool.d.ts.map +1 -1
  42. package/dist/model-context/tool.js +0 -25
  43. package/dist/model-context/tool.js.map +1 -1
  44. package/dist/model-context/types.d.ts +0 -1
  45. package/dist/model-context/types.d.ts.map +1 -1
  46. package/dist/react/AssistantProvider.d.ts +0 -1
  47. package/dist/react/AssistantProvider.d.ts.map +1 -1
  48. package/dist/react/AssistantRuntimeProvider.d.ts +1 -6
  49. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  50. package/dist/react/RuntimeAdapter.d.ts +1 -0
  51. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  52. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +13 -2
  53. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  54. package/dist/react/adapters/LocalStorageThreadListAdapter.js +122 -7
  55. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  56. package/dist/react/adapters/TitleGenerationAdapter.d.ts +0 -1
  57. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  58. package/dist/react/client/DataRenderers.d.ts +0 -1
  59. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  60. package/dist/react/client/Interactables.d.ts +0 -1
  61. package/dist/react/client/Interactables.d.ts.map +1 -1
  62. package/dist/react/client/Tools.d.ts +3 -2
  63. package/dist/react/client/Tools.d.ts.map +1 -1
  64. package/dist/react/client/interactable-model-context.d.ts +0 -1
  65. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  66. package/dist/react/index.d.ts +2 -2
  67. package/dist/react/interactables-legacy/Interactables.d.ts +0 -1
  68. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  69. package/dist/react/interactables-legacy/interactable-model-context.d.ts +0 -1
  70. package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
  71. package/dist/react/interactables-legacy/scopes.d.ts +4 -2
  72. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  73. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +0 -1
  74. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  75. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  76. package/dist/react/model-context/define-mcp-toolkit.d.ts +19 -4
  77. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  78. package/dist/react/model-context/define-mcp-toolkit.js +17 -5
  79. package/dist/react/model-context/define-mcp-toolkit.js.map +1 -1
  80. package/dist/react/model-context/define-toolkit.d.ts +1 -2
  81. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  82. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  83. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  84. package/dist/react/model-context/interactableTool.d.ts +2 -2
  85. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  86. package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -2
  87. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  88. package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
  89. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  90. package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -2
  91. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  92. package/dist/react/model-context/provider-tool.d.ts +0 -1
  93. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  94. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  95. package/dist/react/model-context/toolbox.d.ts +5 -5
  96. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  97. package/dist/react/model-context/useAssistantContext.d.ts +1 -0
  98. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  99. package/dist/react/model-context/useAssistantDataUI.d.ts +3 -2
  100. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  101. package/dist/react/model-context/useAssistantInstructions.d.ts +1 -0
  102. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  103. package/dist/react/model-context/useAssistantTool.d.ts +4 -2
  104. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  105. package/dist/react/model-context/useAssistantToolUI.d.ts +3 -2
  106. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  107. package/dist/react/model-context/useAuiToolOverrides.d.ts +0 -1
  108. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  109. package/dist/react/model-context/useInlineRender.d.ts +0 -1
  110. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  111. package/dist/react/model-context/useInteractable.d.ts +7 -4
  112. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  113. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  114. package/dist/react/model-context/useInteractableVersions.d.ts +0 -1
  115. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  116. package/dist/react/model-context/useToolArgsStatus.d.ts +3 -1
  117. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  118. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +1 -4
  119. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  120. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  121. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  122. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  123. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  124. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  125. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  126. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  127. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +0 -1
  128. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  129. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  130. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  131. package/dist/react/primitive-hooks/useComposerSend.d.ts +0 -1
  132. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  133. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  134. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  135. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  136. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  137. package/dist/react/primitive-hooks/useMessageError.js +5 -1
  138. package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
  139. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  140. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +1 -5
  141. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  142. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  143. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  144. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  145. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  146. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  147. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  148. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  149. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  150. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  151. package/dist/react/primitive-hooks/useThreadMessages.d.ts +0 -1
  152. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  153. package/dist/react/primitive-hooks/useVoice.d.ts +0 -1
  154. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  155. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +7 -4
  156. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  157. package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -3
  158. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  159. package/dist/react/primitives/composer/ComposerIf.d.ts +4 -3
  160. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  161. package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -2
  162. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  163. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +2 -2
  164. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  165. package/dist/react/primitives/generativeUI/GenerativeUI.js +1 -1
  166. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  167. package/dist/react/primitives/message/MessageAttachments.d.ts +4 -3
  168. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  169. package/dist/react/primitives/message/MessageGroupedParts.d.ts +1 -6
  170. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  171. package/dist/react/primitives/message/MessageParts.d.ts +42 -24
  172. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  173. package/dist/react/primitives/message/MessageParts.js +2 -1
  174. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  175. package/dist/react/primitives/message/MessageQuote.d.ts +2 -2
  176. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  177. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +0 -1
  178. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  179. package/dist/react/primitives/part/PartMessages.d.ts +2 -2
  180. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  181. package/dist/react/primitives/thread/ThreadMessages.d.ts +35 -17
  182. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  183. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +6 -4
  184. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  185. package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -3
  186. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  187. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +0 -1
  188. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  189. package/dist/react/providers/AttachmentByIndexProvider.d.ts +0 -1
  190. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  191. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +0 -1
  192. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  193. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +0 -1
  194. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  195. package/dist/react/providers/MessageByIdProvider.d.ts +0 -1
  196. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  197. package/dist/react/providers/MessageByIndexProvider.d.ts +0 -1
  198. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  199. package/dist/react/providers/PartByIndexProvider.d.ts +0 -1
  200. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  201. package/dist/react/providers/QueueItemByIndexProvider.d.ts +0 -1
  202. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  203. package/dist/react/providers/ReadonlyThreadProvider.d.ts +0 -1
  204. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  205. package/dist/react/providers/SuggestionByIndexProvider.d.ts +0 -1
  206. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  207. package/dist/react/providers/TextMessagePartProvider.d.ts +0 -1
  208. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  209. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +0 -1
  210. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  211. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -1
  212. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  213. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +2 -1
  214. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  215. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +1 -1
  216. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  217. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +3 -1
  218. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  219. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +21 -19
  220. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  221. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +0 -1
  222. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  223. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +0 -1
  224. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  225. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +1 -4
  226. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  227. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +6 -3
  228. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  229. package/dist/react/runtimes/cloud/auiV0.d.ts +12 -2
  230. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  231. package/dist/react/runtimes/cloud/auiV0.js +30 -1
  232. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  233. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +0 -1
  234. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  235. package/dist/react/runtimes/createMessageConverter.d.ts +1 -7
  236. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  237. package/dist/react/runtimes/createRuntimeExtras.d.ts +0 -1
  238. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  239. package/dist/react/runtimes/external-message-converter.d.ts +1 -8
  240. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  241. package/dist/react/runtimes/external-message-converter.js +42 -44
  242. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  243. package/dist/react/runtimes/useExternalStoreRuntime.d.ts +0 -1
  244. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  245. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +0 -1
  246. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  247. package/dist/react/runtimes/useLocalRuntime.d.ts +2 -5
  248. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  249. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +0 -1
  250. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  251. package/dist/react/runtimes/useStreamingTiming.d.ts +0 -1
  252. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  253. package/dist/react/types/MessagePartComponentTypes.d.ts +6 -3
  254. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  255. package/dist/react/types/scopes/dataRenderers.d.ts +1 -1
  256. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  257. package/dist/react/types/scopes/interactables.d.ts +4 -2
  258. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  259. package/dist/react/types/scopes/tools.d.ts +5 -3
  260. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  261. package/dist/react/types/store-augmentation.d.ts +1 -2
  262. package/dist/react/types/store-augmentation.d.ts.map +1 -1
  263. package/dist/react/utils/getMessageQuote.d.ts +0 -1
  264. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  265. package/dist/react/utils/groupParts.d.ts +2 -2
  266. package/dist/react/utils/groupParts.d.ts.map +1 -1
  267. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  268. package/dist/runtime/api/assistant-runtime.d.ts +0 -1
  269. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  270. package/dist/runtime/api/attachment-runtime.d.ts +0 -1
  271. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  272. package/dist/runtime/api/bindings.d.ts +0 -1
  273. package/dist/runtime/api/bindings.d.ts.map +1 -1
  274. package/dist/runtime/api/composer-runtime.d.ts +6 -4
  275. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  276. package/dist/runtime/api/message-part-runtime.d.ts +0 -1
  277. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  278. package/dist/runtime/api/message-runtime.d.ts +6 -16
  279. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  280. package/dist/runtime/api/message-runtime.js +1 -1
  281. package/dist/runtime/api/paths.d.ts.map +1 -1
  282. package/dist/runtime/api/thread-list-item-runtime.d.ts +0 -1
  283. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  284. package/dist/runtime/api/thread-list-runtime.d.ts +0 -1
  285. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  286. package/dist/runtime/api/thread-runtime.d.ts +3 -1
  287. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  288. package/dist/runtime/base/base-assistant-runtime-core.d.ts +0 -1
  289. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  290. package/dist/runtime/base/base-composer-runtime-core.d.ts +0 -1
  291. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  292. package/dist/runtime/base/base-composer-runtime-core.js +17 -3
  293. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  294. package/dist/runtime/base/base-thread-runtime-core.d.ts +2 -4
  295. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  296. package/dist/runtime/base/base-thread-runtime-core.js +1 -1
  297. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -5
  298. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  299. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -0
  300. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  301. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  302. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +0 -1
  303. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  304. package/dist/runtime/interfaces/composer-runtime-core.d.ts +2 -2
  305. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  306. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +0 -1
  307. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  308. package/dist/runtime/interfaces/thread-runtime-core.d.ts +2 -2
  309. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  310. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +0 -1
  311. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  312. package/dist/runtime/queue/message-queue.d.ts +6 -4
  313. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  314. package/dist/runtime/queue/message-queue.js +1 -1
  315. package/dist/runtime/utils/auto-status.d.ts +0 -1
  316. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  317. package/dist/runtime/utils/chat-model-adapter.d.ts +0 -1
  318. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  319. package/dist/runtime/utils/external-store-message.d.ts +0 -1
  320. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  321. package/dist/runtime/utils/message-repository.d.ts +1 -5
  322. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  323. package/dist/runtime/utils/message-repository.js +3 -1
  324. package/dist/runtime/utils/message-repository.js.map +1 -1
  325. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +0 -1
  326. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  327. package/dist/runtime/utils/streaming-timing.d.ts +5 -3
  328. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  329. package/dist/runtime/utils/thread-message-like.d.ts +2 -2
  330. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  331. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  332. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  333. package/dist/runtimes/external-store/external-store-adapter.d.ts +2 -2
  334. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  335. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +0 -1
  336. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  337. package/dist/runtimes/external-store/external-store-shared-options.d.ts +0 -1
  338. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  339. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +0 -1
  340. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  341. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +2 -0
  342. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  343. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +1 -1
  344. package/dist/runtimes/external-store/thread-message-converter.d.ts +0 -1
  345. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  346. package/dist/runtimes/local/local-runtime-core.d.ts +0 -1
  347. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  348. package/dist/runtimes/local/local-runtime-options.d.ts +0 -1
  349. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  350. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +0 -1
  351. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  352. package/dist/runtimes/local/local-thread-runtime-core.d.ts +5 -21
  353. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  354. package/dist/runtimes/local/local-thread-runtime-core.js +24 -15
  355. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  356. package/dist/runtimes/local/should-continue.d.ts +0 -1
  357. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  358. package/dist/runtimes/local/should-continue.js +2 -2
  359. package/dist/runtimes/local/should-continue.js.map +1 -1
  360. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +0 -1
  361. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  362. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
  363. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  364. package/dist/runtimes/remote-thread-list/adapter/in-memory.js +5 -3
  365. package/dist/runtimes/remote-thread-list/adapter/in-memory.js.map +1 -1
  366. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +0 -1
  367. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  368. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +6 -4
  369. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  370. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +0 -1
  371. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  372. package/dist/runtimes/remote-thread-list/types.d.ts +0 -1
  373. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  374. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +2 -2
  375. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  376. package/dist/store/clients/chain-of-thought-client.d.ts +0 -1
  377. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  378. package/dist/store/clients/model-context-client.d.ts +0 -1
  379. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  380. package/dist/store/clients/no-op-composer-client.d.ts +0 -1
  381. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  382. package/dist/store/clients/runtime-adapter.d.ts +0 -1
  383. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  384. package/dist/store/clients/suggestions.d.ts +0 -1
  385. package/dist/store/clients/suggestions.d.ts.map +1 -1
  386. package/dist/store/clients/thread-message-client.d.ts +0 -1
  387. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  388. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +0 -1
  389. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  390. package/dist/store/runtime-clients/composer-runtime-client.d.ts +0 -1
  391. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  392. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  393. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +0 -1
  394. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  395. package/dist/store/runtime-clients/message-runtime-client.d.ts +0 -1
  396. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  397. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +0 -1
  398. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  399. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +0 -1
  400. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  401. package/dist/store/runtime-clients/thread-runtime-client.d.ts +0 -1
  402. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  403. package/dist/store/runtime-clients/useSubscribable.d.ts +0 -1
  404. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  405. package/dist/store/scope-registration.d.ts +1 -2
  406. package/dist/store/scope-registration.d.ts.map +1 -1
  407. package/dist/store/scopes/attachment.d.ts +0 -1
  408. package/dist/store/scopes/attachment.d.ts.map +1 -1
  409. package/dist/store/scopes/chain-of-thought.d.ts +0 -1
  410. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  411. package/dist/store/scopes/composer.d.ts +0 -1
  412. package/dist/store/scopes/composer.d.ts.map +1 -1
  413. package/dist/store/scopes/message.d.ts +6 -4
  414. package/dist/store/scopes/message.d.ts.map +1 -1
  415. package/dist/store/scopes/model-context.d.ts +0 -1
  416. package/dist/store/scopes/model-context.d.ts.map +1 -1
  417. package/dist/store/scopes/part.d.ts +0 -1
  418. package/dist/store/scopes/part.d.ts.map +1 -1
  419. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  420. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  421. package/dist/store/scopes/suggestions.d.ts +0 -1
  422. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  423. package/dist/store/scopes/thread-list-item.d.ts +0 -1
  424. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  425. package/dist/store/scopes/thread.d.ts +4 -3
  426. package/dist/store/scopes/thread.d.ts.map +1 -1
  427. package/dist/store/scopes/threads.d.ts +0 -1
  428. package/dist/store/scopes/threads.d.ts.map +1 -1
  429. package/dist/subscribable/subscribable.d.ts +0 -1
  430. package/dist/subscribable/subscribable.d.ts.map +1 -1
  431. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -1
  432. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  433. package/dist/types/attachment.d.ts +1 -1
  434. package/dist/types/attachment.d.ts.map +1 -1
  435. package/dist/types/directive.d.ts +3 -2
  436. package/dist/types/directive.d.ts.map +1 -1
  437. package/dist/types/error.d.ts +15 -0
  438. package/dist/types/error.d.ts.map +1 -0
  439. package/dist/types/error.js +46 -0
  440. package/dist/types/error.js.map +1 -0
  441. package/dist/types/index.d.ts +2 -2
  442. package/dist/types/message.d.ts +70 -33
  443. package/dist/types/message.d.ts.map +1 -1
  444. package/dist/types/message.js.map +1 -1
  445. package/dist/types/quote.d.ts.map +1 -1
  446. package/dist/types/trigger.d.ts +0 -1
  447. package/dist/types/trigger.d.ts.map +1 -1
  448. package/dist/types/unsubscribe.d.ts.map +1 -1
  449. package/dist/utils/composite-context-provider.d.ts +1 -0
  450. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  451. package/dist/utils/id.d.ts.map +1 -1
  452. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  453. package/dist/utils/json/is-json.d.ts +0 -1
  454. package/dist/utils/json/is-json.d.ts.map +1 -1
  455. package/dist/utils/json/is-json.js +1 -1
  456. package/dist/utils/json/is-json.js.map +1 -1
  457. package/dist/utils/json/stable-stringify-tool-args.d.ts +7 -0
  458. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -0
  459. package/dist/utils/json/stable-stringify-tool-args.js +32 -0
  460. package/dist/utils/json/stable-stringify-tool-args.js.map +1 -0
  461. package/dist/utils/text.d.ts +0 -1
  462. package/dist/utils/text.d.ts.map +1 -1
  463. package/package.json +12 -9
  464. package/src/adapters/attachment.test.ts +107 -0
  465. package/src/adapters/attachment.ts +20 -10
  466. package/src/adapters/index.ts +6 -1
  467. package/src/adapters/suggestion.test.ts +187 -0
  468. package/src/adapters/suggestion.ts +75 -1
  469. package/src/index.ts +15 -1
  470. package/src/internal.ts +16 -0
  471. package/src/model-context/tool.test.ts +110 -0
  472. package/src/model-context/tool.ts +31 -9
  473. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +222 -0
  474. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +214 -7
  475. package/src/react/index.ts +2 -0
  476. package/src/react/model-context/define-mcp-toolkit.ts +39 -6
  477. package/src/react/model-context/define-toolkit.test.ts +107 -0
  478. package/src/react/primitive-hooks/useMessageError.test.ts +64 -0
  479. package/src/react/primitive-hooks/useMessageError.ts +19 -6
  480. package/src/react/primitives/generativeUI/GenerativeUI.tsx +5 -1
  481. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +3 -1
  482. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +48 -19
  483. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +111 -0
  484. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +13 -3
  485. package/src/react/runtimes/cloud/auiV0.ts +71 -2
  486. package/src/react/runtimes/external-message-converter.test.tsx +102 -0
  487. package/src/react/runtimes/external-message-converter.ts +35 -10
  488. package/src/runtime/base/base-composer-runtime-core.ts +26 -7
  489. package/src/runtime/utils/message-repository.ts +8 -3
  490. package/src/runtime/utils/thread-message-like.ts +2 -0
  491. package/src/runtimes/local/local-thread-runtime-core.test.ts +127 -3
  492. package/src/runtimes/local/local-thread-runtime-core.ts +25 -23
  493. package/src/runtimes/local/should-continue.ts +5 -2
  494. package/src/runtimes/remote-thread-list/adapter/in-memory.test.ts +14 -0
  495. package/src/runtimes/remote-thread-list/adapter/in-memory.ts +13 -5
  496. package/src/tests/MessageRepository.test.ts +26 -0
  497. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +42 -0
  498. package/src/tests/attachment-adapters.test.ts +14 -2
  499. package/src/tests/auiV0Encode.test.ts +134 -1
  500. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +79 -5
  501. package/src/tests/base-composer-runtime-core-send.test.ts +145 -0
  502. package/src/tests/thread-message-like.test.ts +40 -0
  503. package/src/types/attachment.ts +1 -0
  504. package/src/types/error.test.ts +122 -0
  505. package/src/types/error.ts +74 -0
  506. package/src/types/index.ts +1 -0
  507. package/src/types/message.ts +11 -3
  508. package/src/utils/json/is-json-equal.test.ts +84 -0
  509. package/src/utils/json/is-json.test.ts +123 -0
  510. package/src/utils/json/is-json.ts +1 -1
  511. package/src/utils/json/stable-stringify-tool-args.test.ts +105 -0
  512. package/src/utils/json/stable-stringify-tool-args.ts +70 -0
@@ -0,0 +1,46 @@
1
+ //#region src/types/error.ts
2
+ const ERROR_SEVERITIES = [
3
+ "critical",
4
+ "warning",
5
+ "info"
6
+ ];
7
+ const ERROR_DISPLAYS = [
8
+ "inline",
9
+ "toast",
10
+ "silent",
11
+ "dev-only"
12
+ ];
13
+ const isAssistantError = (value) => {
14
+ if (typeof value !== "object" || value === null) return false;
15
+ const candidate = value;
16
+ if (typeof candidate.code !== "string" || typeof candidate.message !== "string") return false;
17
+ if ("severity" in candidate && candidate.severity !== void 0 && (typeof candidate.severity !== "string" || !ERROR_SEVERITIES.includes(candidate.severity))) return false;
18
+ if ("display" in candidate && candidate.display !== void 0 && (typeof candidate.display !== "string" || !ERROR_DISPLAYS.includes(candidate.display))) return false;
19
+ return true;
20
+ };
21
+ const toAssistantError = (error) => {
22
+ if (isAssistantError(error)) return error;
23
+ if (error instanceof Error) return {
24
+ code: "unknown",
25
+ message: error.message
26
+ };
27
+ if (typeof error === "string") return {
28
+ code: "unknown",
29
+ message: error
30
+ };
31
+ try {
32
+ return {
33
+ code: "unknown",
34
+ message: `[${typeof error}] ${String(error)}`
35
+ };
36
+ } catch {
37
+ return {
38
+ code: "unknown",
39
+ message: `[${typeof error}]`
40
+ };
41
+ }
42
+ };
43
+ //#endregion
44
+ export { isAssistantError, toAssistantError };
45
+
46
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","names":["ErrorSeverity","ErrorDisplay","AssistantErrorCode","AssistantError","code","message","severity","display","ERROR_SEVERITIES","ERROR_DISPLAYS","isAssistantError","value","candidate","Record","undefined","includes","toAssistantError","error","Error","String"],"sources":["../../src/types/error.ts"],"sourcesContent":["export type ErrorSeverity = \"critical\" | \"warning\" | \"info\";\n\nexport type ErrorDisplay = \"inline\" | \"toast\" | \"silent\" | \"dev-only\";\n\nexport type AssistantErrorCode =\n | \"unknown\"\n | \"network\"\n | \"provider\"\n | (string & {});\n\nexport type AssistantError = {\n readonly code: AssistantErrorCode;\n readonly message: string;\n readonly severity?: ErrorSeverity;\n readonly display?: ErrorDisplay;\n};\n\nconst ERROR_SEVERITIES: readonly string[] = [\"critical\", \"warning\", \"info\"];\n\nconst ERROR_DISPLAYS: readonly string[] = [\n \"inline\",\n \"toast\",\n \"silent\",\n \"dev-only\",\n];\n\nexport const isAssistantError = (value: unknown): value is AssistantError => {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Record<string, unknown>;\n if (\n typeof candidate.code !== \"string\" ||\n typeof candidate.message !== \"string\"\n ) {\n return false;\n }\n if (\n \"severity\" in candidate &&\n candidate.severity !== undefined &&\n (typeof candidate.severity !== \"string\" ||\n !ERROR_SEVERITIES.includes(candidate.severity))\n ) {\n return false;\n }\n if (\n \"display\" in candidate &&\n candidate.display !== undefined &&\n (typeof candidate.display !== \"string\" ||\n !ERROR_DISPLAYS.includes(candidate.display))\n ) {\n return false;\n }\n return true;\n};\n\nexport const toAssistantError = (error: unknown): AssistantError => {\n if (isAssistantError(error)) return error;\n if (error instanceof Error) {\n return { code: \"unknown\", message: error.message };\n }\n if (typeof error === \"string\") {\n return { code: \"unknown\", message: error };\n }\n try {\n return {\n code: \"unknown\",\n message: `[${typeof error}] ${String(error)}`,\n };\n } catch {\n return {\n code: \"unknown\",\n message: `[${typeof error}]`,\n };\n }\n};\n"],"mappings":";AAiBA,MAAMQ,mBAAsC;CAAC;CAAY;CAAW;AAAM;AAE1E,MAAMC,iBAAoC;CACxC;CACA;CACA;CACA;AAAU;AAGZ,MAAaC,oBAAoBC,UAA4C;CAC3E,IAAI,OAAOA,UAAU,YAAYA,UAAU,MAAM,OAAO;CACxD,MAAMC,YAAYD;CAClB,IACE,OAAOC,UAAUR,SAAS,YAC1B,OAAOQ,UAAUP,YAAY,UAE7B,OAAO;CAET,IACE,cAAcO,aACdA,UAAUN,aAAaQ,KAAAA,MACtB,OAAOF,UAAUN,aAAa,YAC7B,CAACE,iBAAiBO,SAASH,UAAUN,QAAQ,IAE/C,OAAO;CAET,IACE,aAAaM,aACbA,UAAUL,YAAYO,KAAAA,MACrB,OAAOF,UAAUL,YAAY,YAC5B,CAACE,eAAeM,SAASH,UAAUL,OAAO,IAE5C,OAAO;CAET,OAAO;AACT;AAEA,MAAaS,oBAAoBC,UAAmC;CAClE,IAAIP,iBAAiBO,KAAK,GAAG,OAAOA;CACpC,IAAIA,iBAAiBC,OACnB,OAAO;EAAEd,MAAM;EAAWC,SAASY,MAAMZ;CAAQ;CAEnD,IAAI,OAAOY,UAAU,UACnB,OAAO;EAAEb,MAAM;EAAWC,SAASY;CAAM;CAE3C,IAAI;EACF,OAAO;GACLb,MAAM;GACNC,SAAS,IAAI,OAAOY,MAAK,IAAKE,OAAOF,KAAK;EAC5C;CACF,QAAQ;EACN,OAAO;GACLb,MAAM;GACNC,SAAS,IAAI,OAAOY,MAAK;EAC3B;CACF;AACF"}
@@ -1,7 +1,7 @@
1
- import { AppendMessage, DataMessagePart, FileMessagePart, GenerativeUIMessagePart, GenerativeUINode, GenerativeUISpec, ImageMessagePart, MessagePartStatus, MessageRole, MessageStatus, MessageTiming, ReasoningMessagePart, RunConfig, SourceMessagePart, SourceProviderMetadata, TextMessagePart, ThreadAssistantMessage, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ThreadSystemMessage, ThreadUserMessage, ThreadUserMessagePart, ToolCallMessagePart, ToolCallMessagePartStatus, ToolModelContentPart, Unstable_AudioMessagePart } from "./message.js";
1
+ import { AppendMessage, DataMessagePart, FileMessagePart, GenerativeUIMessagePart, GenerativeUINode, GenerativeUISpec, ImageMessagePart, MessagePartStatus, MessageRole, MessageStatus, MessageTiming, PartProviderMetadata, ReasoningMessagePart, RunConfig, SourceMessagePart, SourceProviderMetadata, TextMessagePart, ThreadAssistantMessage, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ThreadSystemMessage, ThreadUserMessage, ThreadUserMessagePart, ToolCallMessagePart, ToolCallMessagePartStatus, ToolModelContentPart, Unstable_AudioMessagePart } from "./message.js";
2
2
  import { Attachment, AttachmentStatus, CompleteAttachment, CreateAttachment, PendingAttachment } from "./attachment.js";
3
3
  import { Unstable_TriggerCategory, Unstable_TriggerItem } from "./trigger.js";
4
4
  import { Unstable_DirectiveFormatter, Unstable_DirectiveSegment } from "./directive.js";
5
5
  import { Unsubscribe } from "./unsubscribe.js";
6
6
  import { QuoteInfo } from "./quote.js";
7
- export type { AppendMessage, Attachment, AttachmentStatus, CompleteAttachment, CreateAttachment, DataMessagePart, FileMessagePart, GenerativeUIMessagePart, GenerativeUINode, GenerativeUISpec, ImageMessagePart, MessagePartStatus, MessageRole, MessageStatus, MessageTiming, PendingAttachment, QuoteInfo, ReasoningMessagePart, RunConfig, SourceMessagePart, SourceProviderMetadata, TextMessagePart, ThreadAssistantMessage, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ThreadSystemMessage, ThreadUserMessage, ThreadUserMessagePart, ToolCallMessagePart, ToolCallMessagePartStatus, ToolModelContentPart, Unstable_AudioMessagePart, Unstable_DirectiveFormatter, Unstable_DirectiveSegment, Unstable_TriggerCategory, Unstable_TriggerItem, Unsubscribe };
7
+ export type { AppendMessage, Attachment, AttachmentStatus, CompleteAttachment, CreateAttachment, DataMessagePart, FileMessagePart, GenerativeUIMessagePart, GenerativeUINode, GenerativeUISpec, ImageMessagePart, MessagePartStatus, MessageRole, MessageStatus, MessageTiming, PartProviderMetadata, PendingAttachment, QuoteInfo, ReasoningMessagePart, RunConfig, SourceMessagePart, SourceProviderMetadata, TextMessagePart, ThreadAssistantMessage, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ThreadSystemMessage, ThreadUserMessage, ThreadUserMessagePart, ToolCallMessagePart, ToolCallMessagePartStatus, ToolModelContentPart, Unstable_AudioMessagePart, Unstable_DirectiveFormatter, Unstable_DirectiveSegment, Unstable_TriggerCategory, Unstable_TriggerItem, Unsubscribe };
@@ -1,21 +1,23 @@
1
1
  import { CompleteAttachment } from "./attachment.js";
2
2
  import { ToolCallTiming, ToolModelContentPart } from "assistant-stream";
3
3
  import { ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
4
-
5
4
  //#region src/types/message.d.ts
5
+ type PartProviderMetadata = {
6
+ readonly [providerName: string]: ReadonlyJSONObject;
7
+ };
6
8
  type TextMessagePart = {
7
9
  readonly type: "text";
8
10
  readonly text: string;
11
+ readonly providerMetadata?: PartProviderMetadata;
9
12
  readonly parentId?: string;
10
13
  };
11
14
  type ReasoningMessagePart = {
12
15
  readonly type: "reasoning";
13
16
  readonly text: string;
17
+ readonly providerMetadata?: PartProviderMetadata;
14
18
  readonly parentId?: string;
15
19
  };
16
- type SourceProviderMetadata = {
17
- readonly [providerName: string]: ReadonlyJSONObject;
18
- };
20
+ type SourceProviderMetadata = PartProviderMetadata;
19
21
  type SourceMessagePart = {
20
22
  readonly type: "source";
21
23
  readonly sourceType: "url";
@@ -69,16 +71,21 @@ type DataMessagePart<T = any> = {
69
71
  * default same-realm rendering path.
70
72
  */
71
73
  type GenerativeUINode = string | {
72
- /** Allowlisted component name (resolved against the consumer registry). */readonly component: string; /** Props passed to the resolved component (must be JSON-serializable). */
73
- readonly props?: Record<string, unknown>; /** Optional children — strings render as text, objects recurse. */
74
- readonly children?: readonly GenerativeUINode[]; /** Optional stable key for React reconciliation. */
74
+ /** Allowlisted component name (resolved against the consumer registry). */
75
+ readonly component: string;
76
+ /** Props passed to the resolved component (must be JSON-serializable). */
77
+ readonly props?: Record<string, unknown>;
78
+ /** Optional children — strings render as text, objects recurse. */
79
+ readonly children?: readonly GenerativeUINode[];
80
+ /** Optional stable key for React reconciliation. */
75
81
  readonly key?: string;
76
82
  };
77
83
  /**
78
84
  * The root spec for a generative UI tree.
79
85
  */
80
86
  type GenerativeUISpec = {
81
- /** Root node(s) to render. */readonly root: GenerativeUINode | readonly GenerativeUINode[];
87
+ /** Root node(s) to render. */
88
+ readonly root: GenerativeUINode | readonly GenerativeUINode[];
82
89
  };
83
90
  /**
84
91
  * A message part that carries a JSON spec describing UI to render.
@@ -89,8 +96,10 @@ type GenerativeUISpec = {
89
96
  * friendly: a partially-streamed spec renders progressively.
90
97
  */
91
98
  type GenerativeUIMessagePart = {
92
- readonly type: "generative-ui"; /** The JSON spec describing the UI tree. */
93
- readonly spec: GenerativeUISpec; /** Optional id (useful for replays / stable keys). */
99
+ readonly type: "generative-ui";
100
+ /** The JSON spec describing the UI tree. */
101
+ readonly spec: GenerativeUISpec;
102
+ /** Optional id (useful for replays / stable keys). */
94
103
  readonly id?: string;
95
104
  readonly parentId?: string;
96
105
  };
@@ -98,6 +107,8 @@ type McpAppMetadata = {
98
107
  readonly resourceUri: string;
99
108
  readonly mimeType?: string;
100
109
  readonly visibility?: readonly ("model" | "app")[];
110
+ /** 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. */
111
+ readonly serverId?: string;
101
112
  };
102
113
  declare const MCP_APP_URI_SCHEME = "ui://";
103
114
  declare const isMcpAppUri: (uri: string | undefined) => boolean;
@@ -106,17 +117,21 @@ type ToolCallMessagePartMcpMetadata = {
106
117
  };
107
118
  type ToolApprovalOptionKind = "allow-once" | "allow-always" | "reject-once" | "reject-always";
108
119
  type ToolApprovalOption = {
109
- /** Opaque, host-defined identifier. Scope semantics (session vs project vs global) belong to the option supplier. */readonly id: string;
120
+ /** Opaque, host-defined identifier. Scope semantics (session vs project vs global) belong to the option supplier. */
121
+ readonly id: string;
110
122
  /**
111
123
  * Decision class. Drives approved-resolution and default rendering.
112
124
  * Open union: `_`-prefixed custom kinds are never auto-resolved and the
113
125
  * default kit skips them; they must be answered with an explicit
114
126
  * `approved` value (optionally alongside the `optionId`).
115
127
  */
116
- readonly kind: ToolApprovalOptionKind | (string & {}); /** Human label. Renderers supply defaults per kind when omitted. */
128
+ readonly kind: ToolApprovalOptionKind | (string & {});
129
+ /** Human label. Renderers supply defaults per kind when omitted. */
117
130
  readonly label?: string;
118
- readonly description?: string; /** Patterns or rules this option would persist, shown before the user commits. Supplied by the host; never derived by the library. */
119
- readonly grants?: readonly string[]; /** Opt-in confirmation step before this option resolves. */
131
+ readonly description?: string;
132
+ /** Patterns or rules this option would persist, shown before the user commits. Supplied by the host; never derived by the library. */
133
+ readonly grants?: readonly string[];
134
+ /** Opt-in confirmation step before this option resolves. */
120
135
  readonly confirm?: boolean | {
121
136
  title?: string;
122
137
  description?: string;
@@ -134,35 +149,53 @@ type ToolApprovalResponse = {
134
149
  readonly reason?: string;
135
150
  };
136
151
  type ToolCallMessagePart<TArgs = ReadonlyJSONObject, TResult = unknown> = {
137
- /** Identifies this part as a tool call. */readonly type: "tool-call"; /** Stable identifier for this invocation of the tool. */
138
- readonly toolCallId: string; /** Name of the tool requested by the model. */
152
+ /** Identifies this part as a tool call. */
153
+ readonly type: "tool-call";
154
+ /** Stable identifier for this invocation of the tool. */
155
+ readonly toolCallId: string;
156
+ /** Name of the tool requested by the model. */
139
157
  readonly toolName: string;
140
158
  /**
141
159
  * Arguments supplied by the model. During streaming this is a partial parse:
142
160
  * fields may be missing or incomplete. From a tool-call renderer, use
143
161
  * `useToolArgsStatus` to detect which fields are still arriving.
144
162
  */
145
- readonly args: TArgs; /** Result returned by the tool, if it has completed. */
146
- readonly result?: TResult | undefined; /** Whether the result represents a tool execution error. */
147
- readonly isError?: boolean | undefined; /** Raw JSON argument text streamed by the model. */
148
- readonly argsText: string; /** UI-only artifact associated with the tool result. */
149
- readonly artifact?: unknown; /** Wall-clock timing for this call, when the runtime or host tracks it. */
150
- readonly timing?: ToolCallTiming; /** MCP app metadata associated with this tool call, when present. */
151
- readonly mcp?: ToolCallMessagePartMcpMetadata; /** Content returned to the model for this tool result. */
152
- readonly modelContent?: readonly ToolModelContentPart[] | undefined; /** Human-input request that must be resolved before the run can continue. */
163
+ readonly args: TArgs;
164
+ /** Result returned by the tool, if it has completed. */
165
+ readonly result?: TResult | undefined;
166
+ /** Whether the result represents a tool execution error. */
167
+ readonly isError?: boolean | undefined;
168
+ /** Raw JSON argument text streamed by the model. */
169
+ readonly argsText: string;
170
+ /** UI-only artifact associated with the tool result. */
171
+ readonly artifact?: unknown;
172
+ /** Wall-clock timing for this call, when the runtime or host tracks it. */
173
+ readonly timing?: ToolCallTiming;
174
+ /** MCP app metadata associated with this tool call, when present. */
175
+ readonly mcp?: ToolCallMessagePartMcpMetadata;
176
+ /** Provider metadata associated with this tool call, when present. */
177
+ readonly providerMetadata?: PartProviderMetadata;
178
+ /** Content returned to the model for this tool result. */
179
+ readonly modelContent?: readonly ToolModelContentPart[] | undefined;
180
+ /** Human-input request that must be resolved before the run can continue. */
153
181
  readonly interrupt?: {
154
182
  type: "human";
155
183
  payload: unknown;
156
- }; /** Server-side approval gate. `respondToApproval` may only be called while `approved` is undefined and no `resolution` is recorded. */
184
+ };
185
+ /** Server-side approval gate. `respondToApproval` may only be called while `approved` is undefined and no `resolution` is recorded. */
157
186
  readonly approval?: {
158
187
  readonly id: string;
159
188
  readonly approved?: boolean;
160
189
  readonly reason?: string;
161
- readonly isAutomatic?: boolean; /** Available decisions for this call. Absent: a plain allow / deny pair. */
162
- readonly options?: readonly ToolApprovalOption[]; /** The option chosen at resolution, when options were present. */
163
- readonly optionId?: string; /** Terminal non-decision state: the request was cancelled or expired without a user decision. Set by the host. */
190
+ readonly isAutomatic?: boolean;
191
+ /** Available decisions for this call. Absent: a plain allow / deny pair. */
192
+ readonly options?: readonly ToolApprovalOption[];
193
+ /** The option chosen at resolution, when options were present. */
194
+ readonly optionId?: string;
195
+ /** Terminal non-decision state: the request was cancelled or expired without a user decision. Set by the host. */
164
196
  readonly resolution?: "cancelled" | "expired";
165
- }; /** Parent message-part ID when this part belongs to a nested structure. */
197
+ };
198
+ /** Parent message-part ID when this part belongs to a nested structure. */
166
199
  readonly parentId?: string;
167
200
  /**
168
201
  * Nested thread messages produced by this tool call, for example a sub-agent
@@ -182,7 +215,9 @@ type MessagePartStatus = {
182
215
  readonly error?: unknown;
183
216
  };
184
217
  type ToolCallMessagePartStatus = {
185
- /** The tool call is waiting for UI or human input before continuing. */readonly type: "requires-action"; /** Reason the tool call requires action. */
218
+ /** The tool call is waiting for UI or human input before continuing. */
219
+ readonly type: "requires-action";
220
+ /** Reason the tool call requires action. */
186
221
  readonly reason: "interrupt";
187
222
  } | MessagePartStatus;
188
223
  type MessageStatus = {
@@ -288,12 +323,14 @@ type RunConfig = {
288
323
  readonly custom?: Record<string, unknown>;
289
324
  };
290
325
  type AppendMessage = Omit<ThreadMessage, "id"> & {
291
- parentId: string | null; /** The ID of the message that was edited or undefined. */
326
+ parentId: string | null;
327
+ /** The ID of the message that was edited or undefined. */
292
328
  sourceId: string | null;
293
329
  runConfig: RunConfig | undefined;
294
- startRun?: boolean | undefined; /** Process this message next; only meaningful for queue-capable runtimes. */
330
+ startRun?: boolean | undefined;
331
+ /** Process this message next; only meaningful for queue-capable runtimes. */
295
332
  steer?: boolean | undefined;
296
333
  };
297
334
  //#endregion
298
- export { AppendMessage, DataMessagePart, FileMessagePart, GenerativeUIMessagePart, GenerativeUINode, GenerativeUISpec, ImageMessagePart, MCP_APP_URI_SCHEME, McpAppMetadata, MessagePartStatus, MessageRole, MessageStatus, MessageTiming, ReasoningMessagePart, RunConfig, SourceMessagePart, SourceProviderMetadata, TextMessagePart, ThreadAssistantMessage, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ThreadSystemMessage, ThreadUserMessage, ThreadUserMessagePart, ToolApprovalOption, ToolApprovalOptionKind, ToolApprovalResponse, ToolCallMessagePart, ToolCallMessagePartMcpMetadata, ToolCallMessagePartStatus, type ToolCallTiming, type ToolModelContentPart, Unstable_AudioMessagePart, isMcpAppUri };
335
+ export { AppendMessage, DataMessagePart, FileMessagePart, GenerativeUIMessagePart, GenerativeUINode, GenerativeUISpec, ImageMessagePart, MCP_APP_URI_SCHEME, McpAppMetadata, MessagePartStatus, MessageRole, MessageStatus, MessageTiming, PartProviderMetadata, ReasoningMessagePart, RunConfig, SourceMessagePart, SourceProviderMetadata, TextMessagePart, ThreadAssistantMessage, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ThreadSystemMessage, ThreadUserMessage, ThreadUserMessagePart, ToolApprovalOption, ToolApprovalOptionKind, ToolApprovalResponse, ToolCallMessagePart, ToolCallMessagePartMcpMetadata, ToolCallMessagePartStatus, type ToolCallTiming, type ToolModelContentPart, Unstable_AudioMessagePart, isMcpAppUri };
299
336
  //# sourceMappingURL=message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","names":[],"sources":["../../src/types/message.ts"],"mappings":"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"}
1
+ {"version":3,"file":"message.d.ts","names":[],"sources":["../../src/types/message.ts"],"mappings":";;;;KASY;YACA,uBAAuB;;KAGvB;WACD;WACA;WACA,mBAAmB;WACnB;;KAGC;WACD;WACA;WACA,mBAAmB;WACnB;;KAGC,yBAAyB;KAEzB;WAEG;WACA;WACA;WACA;WACA;WACA,mBAAmB;WACnB;;WAGA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB;WACnB;;KAGH;WACD;WACA;WACA;;KAGC;WACD;WACA;WACA;WACA;WACA;;KAGC;WACD;WACA;aACE;aACA;;;KAID,gBAAgB;WACjB;WACA;WACA,MAAM;;;;;;;;;;;KAYL;;WAIG;;WAEA,QAAQ;;WAER,oBAAoB;;WAEpB;;;;;KAMH;;WAED,MAAM,4BAA4B;;;;;;;;;;KAWjC;WACD;;WAEA,MAAM;;WAEN;WACA;;KAGC;WACD;WACA;WACA;;WAEA;;cAGE;cAEA,cAAe;KAGhB;WACD,MAAM;;KAGL;KAMA;;WAED;;;;;;;WAOA,MAAM;;WAEN;WACA;;WAEA;;WAEA;IAAsB;IAAgB;;;KAGrC;WACG;WAA4B;;WAC5B;WAA2B;;WAE3B;WACA;WACA;;KAGH,oBACV,QAAQ,oBACR;;WAGS;;WAEA;;WAEA;;;;;;WAMA,MAAM;;WAEN,SAAS;;WAET;;WAEA;;WAEA;;WAEA,SAAS;;WAET,MAAM;;WAEN,mBAAmB;;WAEnB,wBAAwB;;WAExB;IAAc;IAAe;;;WAE7B;aACE;aACA;aACA;aACA;;aAEA,mBAAmB;;aAEnB;;aAEA;;;WAGF;;;;;WAKA,oBAAoB;;KAGnB,wBACR,kBACA,mBACA,kBACA,kBACA;KAEQ,6BACR,kBACA,uBACA,sBACA,oBACA,kBACA,mBACA,kBACA;KAEQ;WAEG;;WAGA;;WAGA;WACA;WAMA;;KAGH;;WAGG;;WAEA;IAEX;KAEQ;WAEG;;WAGA;WACA;;WAGA;WACA;;WAGA;WACA;WAOA,QAAQ;;KAGX;WACD;WACA;WACA;WACA;WACA;WACA;WACA;;KAGC;WACD;WACA;aAEM;aACA;;;KAKZ;WACM;WACA,WAAW;;KAGV,sBAAsB;WACvB;WACA,mBAAmB;WACnB;aACE;aACA;aACA;aACA;aACA;aACA;aACA,QAAQ;;;KAIT,oBAAoB;WACrB;WACA,kBAAkB;WAClB,sBAAsB;WACtB;aACE;aACA;aACA;aACA;aACA;aACA;aACA,QAAQ;;;KAIT,yBAAyB;WAC1B;WACA,kBAAkB;WAClB,QAAQ;WACR;aACE,gBAAgB;aAChB,+BAA+B;aAC/B,wBAAwB;aACxB,gBAAgB;aAChB;eAA+B;;aAC/B,SAAS;;;;;aAKT;aACA,QAAQ;;;KAIhB;WACM,SAAS;WACT;aACE,iBAAiB;aACjB,gCAAgC;aAChC,yBAAyB;aACzB,iBAAiB;aACjB;eAA+B;;aAC/B,SAAS;aACT;aACA,QAAQ;;WAEV,cAAc;;KAGb,gBAAgB,qBACzB,sBAAsB,oBAAoB;KAEjC,cAAc;KAEd;WACD,SAAS;;KAGR,gBAAgB,KAAK;EAC/B;;EAGA;EACA,WAAW;EACX;;EAEA"}
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","names":["ReadonlyJSONObject","ReadonlyJSONValue","ToolCallTiming","ToolModelContentPart","CompleteAttachment","TextMessagePart","type","text","parentId","ReasoningMessagePart","SourceProviderMetadata","providerName","SourceMessagePart","sourceType","id","url","title","providerMetadata","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","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","ThreadAssistantMessage","status","isOptimistic","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 TextMessagePart = {\n readonly type: \"text\";\n readonly text: string;\n readonly parentId?: string;\n};\n\nexport type ReasoningMessagePart = {\n readonly type: \"reasoning\";\n readonly text: string;\n readonly parentId?: string;\n};\n\nexport type SourceProviderMetadata = {\n readonly [providerName: string]: ReadonlyJSONObject;\n};\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};\n\nexport type FileMessagePart = {\n readonly type: \"file\";\n readonly filename?: string;\n readonly data: string;\n readonly mimeType: string;\n readonly parentId?: string;\n};\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};\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 /** 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 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 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":";AAgIA,MAAa4C,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","providerMetadata","parentId","ReasoningMessagePart","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","ThreadAssistantMessage","status","isOptimistic","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 providerMetadata?: PartProviderMetadata;\n readonly parentId?: string;\n};\n\nexport type ReasoningMessagePart = {\n readonly type: \"reasoning\";\n readonly text: 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};\n\nexport type FileMessagePart = {\n readonly type: \"file\";\n readonly filename?: string;\n readonly data: string;\n readonly mimeType: string;\n readonly parentId?: string;\n};\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 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 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":";AAsIA,MAAa8C,qBAAqB;AAElC,MAAaC,eAAeC,QAC1B,CAAC,CAACA,KAAKC,WAAWH,kBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"quote.d.ts","names":[],"sources":["../../src/types/quote.ts"],"mappings":";KAAY,SAAA;EAAA,SACD,IAAA;EAAA,SACA,SAAS;AAAA"}
1
+ {"version":3,"file":"quote.d.ts","names":[],"sources":["../../src/types/quote.ts"],"mappings":";KAAY;WACD;WACA"}
@@ -1,5 +1,4 @@
1
1
  import { ReadonlyJSONObject } from "assistant-stream/utils";
2
-
3
2
  //#region src/types/trigger.d.ts
4
3
  /** A selectable item displayed inside a trigger popover (e.g. mention, slash command). */
5
4
  type Unstable_TriggerItem = {
@@ -1 +1 @@
1
- {"version":3,"file":"trigger.d.ts","names":[],"sources":["../../src/types/trigger.ts"],"mappings":";;;;KAGY,oBAAA;EAAA,SACD,EAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;EAAA,SACA,WAAA;EAAA,SACA,QAAA,GAAW,kBAAkB;AAAA;;KAI5B,wBAAA;EAAA,SACD,EAAA;EAAA,SACA,KAAK;AAAA"}
1
+ {"version":3,"file":"trigger.d.ts","names":[],"sources":["../../src/types/trigger.ts"],"mappings":";;;KAGY;WACD;WACA;WACA;WACA;WACA,WAAW;;;KAIV;WACD;WACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscribe.d.ts","names":[],"sources":["../../src/types/unsubscribe.ts"],"mappings":";KAAY,WAAA"}
1
+ {"version":3,"file":"unsubscribe.d.ts","names":[],"sources":["../../src/types/unsubscribe.ts"],"mappings":";KAAY"}
@@ -1,4 +1,5 @@
1
1
  import { ModelContext, ModelContextProvider } from "../model-context/types.js";
2
+ import "../index.js";
2
3
  //#region src/utils/composite-context-provider.d.ts
3
4
  declare class CompositeContextProvider implements ModelContextProvider {
4
5
  private _providers;
@@ -1 +1 @@
1
- {"version":3,"file":"composite-context-provider.d.ts","names":[],"sources":["../../src/utils/composite-context-provider.ts"],"mappings":";;cAKa,wBAAA,YAAoC,oBAAA;EAAA,QACvC,UAAA;EAER,eAAA,IAHoC,YAAA;EAOpC,4BAAA,CAA6B,QAAA,EAAU,oBAAA;EAAA,QAa/B,YAAA;EAER,iBAAA;EAIA,SAAA,CAAU,QAAA;AAAA"}
1
+ {"version":3,"file":"composite-context-provider.d.ts","names":[],"sources":["../../src/utils/composite-context-provider.ts"],"mappings":";;;cAKa,oCAAoC;UACvC;EAER,mBAHW;EAOX,6BAA6B,UAAU;UAa/B;EAER;EAIA,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"id.d.ts","names":[],"sources":["../../src/utils/id.ts"],"mappings":";;AAKA;;cAAa,UAAA,GAAU,IAAA;AAAA,cAMV,sBAAA;AAAA,cACA,gBAAA,GAAoB,EAAU"}
1
+ {"version":3,"file":"id.d.ts","names":[],"sources":["../../src/utils/id.ts"],"mappings":";;;;cAKa,aAAU;cAMV;cACA,mBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-json-equal.d.ts","names":[],"sources":["../../../src/utils/json/is-json-equal.ts"],"mappings":";cA4Ca,gBAAA,GAAoB,CAAA,WAAY,CAAU"}
1
+ {"version":3,"file":"is-json-equal.d.ts","names":[],"sources":["../../../src/utils/json/is-json-equal.ts"],"mappings":";cA4Ca,mBAAoB,YAAY"}
@@ -1,5 +1,4 @@
1
1
  import { ReadonlyJSONArray, ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
2
-
3
2
  //#region src/utils/json/is-json.d.ts
4
3
  declare function isRecord(value: unknown): value is Record<string, unknown>;
5
4
  declare function isJSONValue(value: unknown, currentDepth?: number): value is ReadonlyJSONValue;
@@ -1 +1 @@
1
- {"version":3,"file":"is-json.d.ts","names":[],"sources":["../../../src/utils/json/is-json.ts"],"mappings":";;;iBAMgB,QAAA,CAAS,KAAA,YAAiB,KAAA,IAAS,MAAM;AAAA,iBAIzC,WAAA,CACd,KAAA,WACA,YAAA,YACC,KAAA,IAAS,iBAAiB;AAAA,iBAiCb,WAAA,CAAY,KAAA,YAAiB,KAAA,IAAS,iBAAiB;AAAA,iBAIvD,YAAA,CAAa,KAAA,YAAiB,KAAA,IAAS,kBAAkB"}
1
+ {"version":3,"file":"is-json.d.ts","names":[],"sources":["../../../src/utils/json/is-json.ts"],"mappings":";;iBAMgB,SAAS,iBAAiB,SAAS;iBAInC,YACd,gBACA,wBACC,SAAS;iBAiCI,YAAY,iBAAiB,SAAS;iBAItC,aAAa,iBAAiB,SAAS"}
@@ -11,7 +11,7 @@ function isJSONValue(value, currentDepth = 0) {
11
11
  return false;
12
12
  }
13
13
  function isJSONArray(value) {
14
- return Array.isArray(value) && value.every(isJSONValue);
14
+ return Array.isArray(value) && value.every((item) => isJSONValue(item));
15
15
  }
16
16
  function isJSONObject(value) {
17
17
  return isRecord(value) && Object.entries(value).every(([key, val]) => typeof key === "string" && isJSONValue(val));
@@ -1 +1 @@
1
- {"version":3,"file":"is-json.js","names":["ReadonlyJSONArray","ReadonlyJSONObject","ReadonlyJSONValue","isRecord","value","Record","Array","isArray","isJSONValue","currentDepth","Number","isNaN","isFinite","every","item","Object","entries","key","val","isJSONArray","isJSONObject"],"sources":["../../../src/utils/json/is-json.ts"],"sourcesContent":["import type {\n ReadonlyJSONArray,\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isJSONValue(\n value: unknown,\n currentDepth: number = 0,\n): value is ReadonlyJSONValue {\n // Protect against too deep recursion\n if (currentDepth > 100) {\n return false;\n }\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n // Handle special number cases\n if (typeof value === \"number\") {\n return !Number.isNaN(value) && Number.isFinite(value);\n }\n\n if (Array.isArray(value)) {\n return value.every((item) => isJSONValue(item, currentDepth + 1));\n }\n\n if (isRecord(value)) {\n return Object.entries(value).every(\n ([key, val]) =>\n typeof key === \"string\" && isJSONValue(val, currentDepth + 1),\n );\n }\n\n return false;\n}\n\nexport function isJSONArray(value: unknown): value is ReadonlyJSONArray {\n return Array.isArray(value) && value.every(isJSONValue);\n}\n\nexport function isJSONObject(value: unknown): value is ReadonlyJSONObject {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val),\n )\n );\n}\n"],"mappings":";AAMA,SAAgBG,SAASC,OAAkD;CACzE,OAAOA,SAAS,QAAQ,OAAOA,UAAU,YAAY,CAACE,MAAMC,QAAQH,KAAK;AAC3E;AAEA,SAAgBI,YACdJ,OACAK,eAAuB,GACK;CAE5B,IAAIA,eAAe,KACjB,OAAO;CAGT,IACEL,UAAU,QACV,OAAOA,UAAU,YACjB,OAAOA,UAAU,WAEjB,OAAO;CAIT,IAAI,OAAOA,UAAU,UACnB,OAAO,CAACM,OAAOC,MAAMP,KAAK,KAAKM,OAAOE,SAASR,KAAK;CAGtD,IAAIE,MAAMC,QAAQH,KAAK,GACrB,OAAOA,MAAMS,OAAOC,SAASN,YAAYM,MAAML,eAAe,CAAC,CAAC;CAGlE,IAAIN,SAASC,KAAK,GAChB,OAAOW,OAAOC,QAAQZ,KAAK,CAAC,CAACS,OAC1B,CAACI,KAAKC,SACL,OAAOD,QAAQ,YAAYT,YAAYU,KAAKT,eAAe,CAAC,CAChE;CAGF,OAAO;AACT;AAEA,SAAgBU,YAAYf,OAA4C;CACtE,OAAOE,MAAMC,QAAQH,KAAK,KAAKA,MAAMS,MAAML,WAAW;AACxD;AAEA,SAAgBY,aAAahB,OAA6C;CACxE,OACED,SAASC,KAAK,KACdW,OAAOC,QAAQZ,KAAK,CAAC,CAACS,OACnB,CAACI,KAAKC,SAAS,OAAOD,QAAQ,YAAYT,YAAYU,GAAG,CAC5D;AAEJ"}
1
+ {"version":3,"file":"is-json.js","names":["ReadonlyJSONArray","ReadonlyJSONObject","ReadonlyJSONValue","isRecord","value","Record","Array","isArray","isJSONValue","currentDepth","Number","isNaN","isFinite","every","item","Object","entries","key","val","isJSONArray","isJSONObject"],"sources":["../../../src/utils/json/is-json.ts"],"sourcesContent":["import type {\n ReadonlyJSONArray,\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isJSONValue(\n value: unknown,\n currentDepth: number = 0,\n): value is ReadonlyJSONValue {\n // Protect against too deep recursion\n if (currentDepth > 100) {\n return false;\n }\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n // Handle special number cases\n if (typeof value === \"number\") {\n return !Number.isNaN(value) && Number.isFinite(value);\n }\n\n if (Array.isArray(value)) {\n return value.every((item) => isJSONValue(item, currentDepth + 1));\n }\n\n if (isRecord(value)) {\n return Object.entries(value).every(\n ([key, val]) =>\n typeof key === \"string\" && isJSONValue(val, currentDepth + 1),\n );\n }\n\n return false;\n}\n\nexport function isJSONArray(value: unknown): value is ReadonlyJSONArray {\n return Array.isArray(value) && value.every((item) => isJSONValue(item));\n}\n\nexport function isJSONObject(value: unknown): value is ReadonlyJSONObject {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val),\n )\n );\n}\n"],"mappings":";AAMA,SAAgBG,SAASC,OAAkD;CACzE,OAAOA,SAAS,QAAQ,OAAOA,UAAU,YAAY,CAACE,MAAMC,QAAQH,KAAK;AAC3E;AAEA,SAAgBI,YACdJ,OACAK,eAAuB,GACK;CAE5B,IAAIA,eAAe,KACjB,OAAO;CAGT,IACEL,UAAU,QACV,OAAOA,UAAU,YACjB,OAAOA,UAAU,WAEjB,OAAO;CAIT,IAAI,OAAOA,UAAU,UACnB,OAAO,CAACM,OAAOC,MAAMP,KAAK,KAAKM,OAAOE,SAASR,KAAK;CAGtD,IAAIE,MAAMC,QAAQH,KAAK,GACrB,OAAOA,MAAMS,OAAOC,SAASN,YAAYM,MAAML,eAAe,CAAC,CAAC;CAGlE,IAAIN,SAASC,KAAK,GAChB,OAAOW,OAAOC,QAAQZ,KAAK,CAAC,CAACS,OAC1B,CAACI,KAAKC,SACL,OAAOD,QAAQ,YAAYT,YAAYU,KAAKT,eAAe,CAAC,CAChE;CAGF,OAAO;AACT;AAEA,SAAgBU,YAAYf,OAA4C;CACtE,OAAOE,MAAMC,QAAQH,KAAK,KAAKA,MAAMS,OAAOC,SAASN,YAAYM,IAAI,CAAC;AACxE;AAEA,SAAgBM,aAAahB,OAA6C;CACxE,OACED,SAASC,KAAK,KACdW,OAAOC,QAAQZ,KAAK,CAAC,CAACS,OACnB,CAACI,KAAKC,SAAS,OAAOD,QAAQ,YAAYT,YAAYU,GAAG,CAC5D;AAEJ"}
@@ -0,0 +1,7 @@
1
+ import { ReadonlyJSONObject } from "assistant-stream/utils";
2
+ //#region src/utils/json/stable-stringify-tool-args.d.ts
3
+ declare const trackToolArgsKeyOrder: (keyOrderCache: Map<string, Map<string, string[]>> | undefined, cacheKey: string, args: ReadonlyJSONObject) => void;
4
+ declare const stableStringifyToolArgs: (keyOrderCache: Map<string, Map<string, string[]>> | undefined, cacheKey: string, args: ReadonlyJSONObject) => string;
5
+ //#endregion
6
+ export { stableStringifyToolArgs, trackToolArgsKeyOrder };
7
+ //# sourceMappingURL=stable-stringify-tool-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-stringify-tool-args.d.ts","names":[],"sources":["../../../src/utils/json/stable-stringify-tool-args.ts"],"mappings":";;cAgDa,wBACX,eAAe,YAAY,oCAC3B,kBACA,MAAM;cAMK,0BACX,eAAe,YAAY,oCAC3B,kBACA,MAAM"}
@@ -0,0 +1,32 @@
1
+ //#region src/utils/json/stable-stringify-tool-args.ts
2
+ const stabilizeToolArgsValue = (value, path, keyOrderByPath) => {
3
+ if (Array.isArray(value)) return value.map((item, idx) => stabilizeToolArgsValue(item, `${path}[${idx}]`, keyOrderByPath));
4
+ if (value && typeof value === "object") {
5
+ const record = value;
6
+ const currentKeys = Object.keys(record);
7
+ const previousOrder = keyOrderByPath.get(path) ?? [];
8
+ const previousOrderSet = new Set(previousOrder);
9
+ const nextOrder = [...previousOrder.filter((key) => Object.hasOwn(record, key)), ...currentKeys.filter((key) => !previousOrderSet.has(key))];
10
+ keyOrderByPath.set(path, nextOrder);
11
+ return Object.fromEntries(nextOrder.map((key) => [key, stabilizeToolArgsValue(record[key], `${path}.${JSON.stringify(key)}`, keyOrderByPath)]));
12
+ }
13
+ return value;
14
+ };
15
+ const getToolArgsKeyOrder = (keyOrderCache, cacheKey) => {
16
+ const keyOrderByPath = keyOrderCache?.get(cacheKey) ?? /* @__PURE__ */ new Map();
17
+ keyOrderCache?.set(cacheKey, keyOrderByPath);
18
+ return keyOrderByPath;
19
+ };
20
+ const trackToolArgsKeyOrder = (keyOrderCache, cacheKey, args) => {
21
+ const keyOrderByPath = getToolArgsKeyOrder(keyOrderCache, cacheKey);
22
+ stabilizeToolArgsValue(args, "$", keyOrderByPath);
23
+ };
24
+ const stableStringifyToolArgs = (keyOrderCache, cacheKey, args) => {
25
+ const keyOrderByPath = getToolArgsKeyOrder(keyOrderCache, cacheKey);
26
+ const stableArgs = stabilizeToolArgsValue(args, "$", keyOrderByPath);
27
+ return JSON.stringify(stableArgs);
28
+ };
29
+ //#endregion
30
+ export { stableStringifyToolArgs, trackToolArgsKeyOrder };
31
+
32
+ //# sourceMappingURL=stable-stringify-tool-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-stringify-tool-args.js","names":["ReadonlyJSONObject","stabilizeToolArgsValue","value","path","keyOrderByPath","Map","Array","isArray","map","item","idx","record","Record","currentKeys","Object","keys","previousOrder","get","previousOrderSet","Set","nextOrder","filter","key","hasOwn","has","set","fromEntries","JSON","stringify","getToolArgsKeyOrder","keyOrderCache","cacheKey","trackToolArgsKeyOrder","args","stableStringifyToolArgs","stableArgs"],"sources":["../../../src/utils/json/stable-stringify-tool-args.ts"],"sourcesContent":["import type { ReadonlyJSONObject } from \"assistant-stream/utils\";\n\nconst stabilizeToolArgsValue = (\n value: unknown,\n path: string,\n keyOrderByPath: Map<string, string[]>,\n): unknown => {\n if (Array.isArray(value)) {\n return value.map((item, idx) =>\n stabilizeToolArgsValue(item, `${path}[${idx}]`, keyOrderByPath),\n );\n }\n\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const currentKeys = Object.keys(record);\n const previousOrder = keyOrderByPath.get(path) ?? [];\n const previousOrderSet = new Set(previousOrder);\n const nextOrder = [\n ...previousOrder.filter((key) => Object.hasOwn(record, key)),\n ...currentKeys.filter((key) => !previousOrderSet.has(key)),\n ];\n keyOrderByPath.set(path, nextOrder);\n\n return Object.fromEntries(\n nextOrder.map((key) => [\n key,\n stabilizeToolArgsValue(\n record[key],\n `${path}.${JSON.stringify(key)}`,\n keyOrderByPath,\n ),\n ]),\n );\n }\n\n return value;\n};\n\nconst getToolArgsKeyOrder = (\n keyOrderCache: Map<string, Map<string, string[]>> | undefined,\n cacheKey: string,\n): Map<string, string[]> => {\n const keyOrderByPath = keyOrderCache?.get(cacheKey) ?? new Map();\n keyOrderCache?.set(cacheKey, keyOrderByPath);\n return keyOrderByPath;\n};\n\nexport const trackToolArgsKeyOrder = (\n keyOrderCache: Map<string, Map<string, string[]>> | undefined,\n cacheKey: string,\n args: ReadonlyJSONObject,\n) => {\n const keyOrderByPath = getToolArgsKeyOrder(keyOrderCache, cacheKey);\n stabilizeToolArgsValue(args, \"$\", keyOrderByPath);\n};\n\nexport const stableStringifyToolArgs = (\n keyOrderCache: Map<string, Map<string, string[]>> | undefined,\n cacheKey: string,\n args: ReadonlyJSONObject,\n): string => {\n const keyOrderByPath = getToolArgsKeyOrder(keyOrderCache, cacheKey);\n const stableArgs = stabilizeToolArgsValue(\n args,\n \"$\",\n keyOrderByPath,\n ) as ReadonlyJSONObject;\n return JSON.stringify(stableArgs);\n};\n"],"mappings":";AAEA,MAAMC,0BACJC,OACAC,MACAC,mBACY;CACZ,IAAIE,MAAMC,QAAQL,KAAK,GACrB,OAAOA,MAAMM,KAAKC,MAAMC,QACtBT,uBAAuBQ,MAAM,GAAGN,KAAI,GAAIO,IAAG,IAAKN,cAAc,CAChE;CAGF,IAAIF,SAAS,OAAOA,UAAU,UAAU;EACtC,MAAMS,SAAST;EACf,MAAMW,cAAcC,OAAOC,KAAKJ,MAAM;EACtC,MAAMK,gBAAgBZ,eAAea,IAAId,IAAI,KAAK,CAAA;EAClD,MAAMe,mBAAmB,IAAIC,IAAIH,aAAa;EAC9C,MAAMI,YAAY,CAChB,GAAGJ,cAAcK,QAAQC,QAAQR,OAAOS,OAAOZ,QAAQW,GAAG,CAAC,GAC3D,GAAGT,YAAYQ,QAAQC,QAAQ,CAACJ,iBAAiBM,IAAIF,GAAG,CAAC,CAAC;EAE5DlB,eAAeqB,IAAItB,MAAMiB,SAAS;EAElC,OAAON,OAAOY,YACZN,UAAUZ,KAAKc,QAAQ,CACrBA,KACArB,uBACEU,OAAOW,MACP,GAAGnB,KAAI,GAAIwB,KAAKC,UAAUN,GAAG,KAC7BlB,cACF,CAAC,CACF,CACH;CACF;CAEA,OAAOF;AACT;AAEA,MAAM2B,uBACJC,eACAC,aAC0B;CAC1B,MAAM3B,iBAAiB0B,eAAeb,IAAIc,QAAQ,qBAAK,IAAI1B,IAAI;CAC/DyB,eAAeL,IAAIM,UAAU3B,cAAc;CAC3C,OAAOA;AACT;AAEA,MAAa4B,yBACXF,eACAC,UACAE,SACG;CACH,MAAM7B,iBAAiByB,oBAAoBC,eAAeC,QAAQ;CAClE9B,uBAAuBgC,MAAM,KAAK7B,cAAc;AAClD;AAEA,MAAa8B,2BACXJ,eACAC,UACAE,SACW;CACX,MAAM7B,iBAAiByB,oBAAoBC,eAAeC,QAAQ;CAClE,MAAMI,aAAalC,uBACjBgC,MACA,KACA7B,cACF;CACA,OAAOuB,KAAKC,UAAUO,UAAU;AAClC"}
@@ -1,5 +1,4 @@
1
1
  import { AppendMessage, ThreadMessage } from "../types/message.js";
2
-
3
2
  //#region src/utils/text.d.ts
4
3
  declare const getThreadMessageText: (message: ThreadMessage | AppendMessage) => string;
5
4
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","names":[],"sources":["../../src/utils/text.ts"],"mappings":";;;cAGa,oBAAA,GACX,OAAA,EAAS,aAAA,GAAgB,aAAa"}
1
+ {"version":3,"file":"text.d.ts","names":[],"sources":["../../src/utils/text.ts"],"mappings":";;cAGa,uBACX,SAAS,gBAAgB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/core",
3
- "version": "0.2.19",
3
+ "version": "0.2.21",
4
4
  "description": "Framework-agnostic core runtime for assistant-ui",
5
5
  "keywords": [
6
6
  "assistant",
@@ -59,8 +59,8 @@
59
59
  ],
60
60
  "sideEffects": false,
61
61
  "dependencies": {
62
- "assistant-stream": "^0.3.24",
63
- "nanoid": "^5.1.15"
62
+ "assistant-stream": "^0.3.26",
63
+ "nanoid": "^6.0.0"
64
64
  },
65
65
  "optionalDevDependencies": {
66
66
  "@assistant-ui/x-generative-compiler": ">=0.0.3"
@@ -88,15 +88,18 @@
88
88
  }
89
89
  },
90
90
  "devDependencies": {
91
+ "@testing-library/react": "^16.3.2",
91
92
  "@types/react": "^19.2.17",
93
+ "jsdom": "^29.1.1",
92
94
  "react": "^19.2.7",
93
- "vitest": "^4.1.9",
95
+ "react-dom": "^19.2.7",
96
+ "vitest": "^4.1.10",
94
97
  "zustand": "^5.0.14",
95
- "@assistant-ui/store": "0.2.19",
96
- "@assistant-ui/tap": "0.9.3",
97
- "@assistant-ui/vite": "0.0.6",
98
- "@assistant-ui/x-buildutils": "0.0.16",
99
- "assistant-cloud": "0.1.34"
98
+ "@assistant-ui/store": "0.2.20",
99
+ "@assistant-ui/tap": "0.9.4",
100
+ "@assistant-ui/vite": "0.0.9",
101
+ "@assistant-ui/x-buildutils": "0.0.18",
102
+ "assistant-cloud": "0.1.35"
100
103
  },
101
104
  "publishConfig": {
102
105
  "access": "public",