@assistant-ui/react-native 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/README.md +29 -0
  2. package/dist/adapters/LocalStorageThreadListAdapter.d.ts +15 -0
  3. package/dist/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -0
  4. package/dist/adapters/LocalStorageThreadListAdapter.js +154 -0
  5. package/dist/adapters/LocalStorageThreadListAdapter.js.map +1 -0
  6. package/dist/adapters/TitleGenerationAdapter.d.ts +6 -0
  7. package/dist/adapters/TitleGenerationAdapter.d.ts.map +1 -0
  8. package/dist/adapters/TitleGenerationAdapter.js +15 -0
  9. package/dist/adapters/TitleGenerationAdapter.js.map +1 -0
  10. package/dist/adapters/index.d.ts +3 -0
  11. package/dist/adapters/index.d.ts.map +1 -0
  12. package/dist/adapters/index.js +3 -0
  13. package/dist/adapters/index.js.map +1 -0
  14. package/dist/context/AssistantContext.d.ts +8 -0
  15. package/dist/context/AssistantContext.d.ts.map +1 -0
  16. package/dist/context/AssistantContext.js +21 -0
  17. package/dist/context/AssistantContext.js.map +1 -0
  18. package/dist/context/index.d.ts +2 -0
  19. package/dist/context/index.d.ts.map +1 -0
  20. package/dist/context/index.js +2 -0
  21. package/dist/context/index.js.map +1 -0
  22. package/dist/context/providers/RuntimeAdapterProvider.d.ts +15 -0
  23. package/dist/context/providers/RuntimeAdapterProvider.d.ts.map +1 -0
  24. package/dist/context/providers/RuntimeAdapterProvider.js +14 -0
  25. package/dist/context/providers/RuntimeAdapterProvider.js.map +1 -0
  26. package/dist/context/providers/ThreadListItemRuntimeProvider.d.ts +6 -0
  27. package/dist/context/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -0
  28. package/dist/context/providers/ThreadListItemRuntimeProvider.js +10 -0
  29. package/dist/context/providers/ThreadListItemRuntimeProvider.js.map +1 -0
  30. package/dist/hooks/index.d.ts +6 -0
  31. package/dist/hooks/index.d.ts.map +1 -0
  32. package/dist/hooks/index.js +6 -0
  33. package/dist/hooks/index.js.map +1 -0
  34. package/dist/hooks/useComposer.d.ts +4 -0
  35. package/dist/hooks/useComposer.d.ts.map +1 -0
  36. package/dist/hooks/useComposer.js +5 -0
  37. package/dist/hooks/useComposer.js.map +1 -0
  38. package/dist/hooks/useContentPart.d.ts +2 -0
  39. package/dist/hooks/useContentPart.d.ts.map +1 -0
  40. package/dist/hooks/useContentPart.js +5 -0
  41. package/dist/hooks/useContentPart.js.map +1 -0
  42. package/dist/hooks/useMessage.d.ts +4 -0
  43. package/dist/hooks/useMessage.d.ts.map +1 -0
  44. package/dist/hooks/useMessage.js +5 -0
  45. package/dist/hooks/useMessage.js.map +1 -0
  46. package/dist/hooks/useThread.d.ts +4 -0
  47. package/dist/hooks/useThread.d.ts.map +1 -0
  48. package/dist/hooks/useThread.js +5 -0
  49. package/dist/hooks/useThread.js.map +1 -0
  50. package/dist/hooks/useThreadList.d.ts +4 -0
  51. package/dist/hooks/useThreadList.d.ts.map +1 -0
  52. package/dist/hooks/useThreadList.js +5 -0
  53. package/dist/hooks/useThreadList.js.map +1 -0
  54. package/dist/index.d.ts +17 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +21 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/internal.d.ts +4 -0
  59. package/dist/internal.d.ts.map +1 -0
  60. package/dist/internal.js +3 -0
  61. package/dist/internal.js.map +1 -0
  62. package/dist/primitive-hooks/index.d.ts +14 -0
  63. package/dist/primitive-hooks/index.d.ts.map +1 -0
  64. package/dist/primitive-hooks/index.js +14 -0
  65. package/dist/primitive-hooks/index.js.map +1 -0
  66. package/dist/primitive-hooks/useActionBarCopy.d.ts +10 -0
  67. package/dist/primitive-hooks/useActionBarCopy.d.ts.map +1 -0
  68. package/dist/primitive-hooks/useActionBarCopy.js +26 -0
  69. package/dist/primitive-hooks/useActionBarCopy.js.map +1 -0
  70. package/dist/primitive-hooks/useActionBarEdit.d.ts +5 -0
  71. package/dist/primitive-hooks/useActionBarEdit.d.ts.map +1 -0
  72. package/dist/primitive-hooks/useActionBarEdit.js +11 -0
  73. package/dist/primitive-hooks/useActionBarEdit.js.map +1 -0
  74. package/dist/primitive-hooks/useActionBarFeedback.d.ts +9 -0
  75. package/dist/primitive-hooks/useActionBarFeedback.d.ts.map +1 -0
  76. package/dist/primitive-hooks/useActionBarFeedback.js +19 -0
  77. package/dist/primitive-hooks/useActionBarFeedback.js.map +1 -0
  78. package/dist/primitive-hooks/useActionBarReload.d.ts +5 -0
  79. package/dist/primitive-hooks/useActionBarReload.d.ts.map +1 -0
  80. package/dist/primitive-hooks/useActionBarReload.js +13 -0
  81. package/dist/primitive-hooks/useActionBarReload.js.map +1 -0
  82. package/dist/primitive-hooks/useComposerCancel.d.ts +5 -0
  83. package/dist/primitive-hooks/useComposerCancel.d.ts.map +1 -0
  84. package/dist/primitive-hooks/useComposerCancel.js +11 -0
  85. package/dist/primitive-hooks/useComposerCancel.js.map +1 -0
  86. package/dist/primitive-hooks/useComposerSend.d.ts +5 -0
  87. package/dist/primitive-hooks/useComposerSend.d.ts.map +1 -0
  88. package/dist/primitive-hooks/useComposerSend.js +11 -0
  89. package/dist/primitive-hooks/useComposerSend.js.map +1 -0
  90. package/dist/primitive-hooks/useEditComposerCancel.d.ts +4 -0
  91. package/dist/primitive-hooks/useEditComposerCancel.d.ts.map +1 -0
  92. package/dist/primitive-hooks/useEditComposerCancel.js +10 -0
  93. package/dist/primitive-hooks/useEditComposerCancel.js.map +1 -0
  94. package/dist/primitive-hooks/useEditComposerSend.d.ts +5 -0
  95. package/dist/primitive-hooks/useEditComposerSend.d.ts.map +1 -0
  96. package/dist/primitive-hooks/useEditComposerSend.js +11 -0
  97. package/dist/primitive-hooks/useEditComposerSend.js.map +1 -0
  98. package/dist/primitive-hooks/useMessageBranching.d.ts +7 -0
  99. package/dist/primitive-hooks/useMessageBranching.d.ts.map +1 -0
  100. package/dist/primitive-hooks/useMessageBranching.js +15 -0
  101. package/dist/primitive-hooks/useMessageBranching.js.map +1 -0
  102. package/dist/primitive-hooks/useMessageReload.d.ts +5 -0
  103. package/dist/primitive-hooks/useMessageReload.d.ts.map +1 -0
  104. package/dist/primitive-hooks/useMessageReload.js +11 -0
  105. package/dist/primitive-hooks/useMessageReload.js.map +1 -0
  106. package/dist/primitive-hooks/useThreadIsEmpty.d.ts +2 -0
  107. package/dist/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -0
  108. package/dist/primitive-hooks/useThreadIsEmpty.js +5 -0
  109. package/dist/primitive-hooks/useThreadIsEmpty.js.map +1 -0
  110. package/dist/primitive-hooks/useThreadIsRunning.d.ts +2 -0
  111. package/dist/primitive-hooks/useThreadIsRunning.d.ts.map +1 -0
  112. package/dist/primitive-hooks/useThreadIsRunning.js +5 -0
  113. package/dist/primitive-hooks/useThreadIsRunning.js.map +1 -0
  114. package/dist/primitive-hooks/useThreadMessages.d.ts +3 -0
  115. package/dist/primitive-hooks/useThreadMessages.d.ts.map +1 -0
  116. package/dist/primitive-hooks/useThreadMessages.js +5 -0
  117. package/dist/primitive-hooks/useThreadMessages.js.map +1 -0
  118. package/dist/primitives/actionBar/ActionBarCopy.d.ts +10 -0
  119. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -0
  120. package/dist/primitives/actionBar/ActionBarCopy.js +11 -0
  121. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -0
  122. package/dist/primitives/actionBar/ActionBarEdit.d.ts +7 -0
  123. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -0
  124. package/dist/primitives/actionBar/ActionBarEdit.js +8 -0
  125. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -0
  126. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +9 -0
  127. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -0
  128. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +8 -0
  129. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -0
  130. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +9 -0
  131. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -0
  132. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +8 -0
  133. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -0
  134. package/dist/primitives/actionBar/ActionBarReload.d.ts +7 -0
  135. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -0
  136. package/dist/primitives/actionBar/ActionBarReload.js +8 -0
  137. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -0
  138. package/dist/primitives/actionBar/index.d.ts +6 -0
  139. package/dist/primitives/actionBar/index.d.ts.map +1 -0
  140. package/dist/primitives/actionBar/index.js +6 -0
  141. package/dist/primitives/actionBar/index.js.map +1 -0
  142. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +4 -0
  143. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -0
  144. package/dist/primitives/branchPicker/BranchPickerCount.js +8 -0
  145. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -0
  146. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +7 -0
  147. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -0
  148. package/dist/primitives/branchPicker/BranchPickerNext.js +20 -0
  149. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -0
  150. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +4 -0
  151. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -0
  152. package/dist/primitives/branchPicker/BranchPickerNumber.js +8 -0
  153. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -0
  154. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +7 -0
  155. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -0
  156. package/dist/primitives/branchPicker/BranchPickerPrevious.js +20 -0
  157. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -0
  158. package/dist/primitives/branchPicker/index.d.ts +5 -0
  159. package/dist/primitives/branchPicker/index.d.ts.map +1 -0
  160. package/dist/primitives/branchPicker/index.js +5 -0
  161. package/dist/primitives/branchPicker/index.js.map +1 -0
  162. package/dist/primitives/composer/ComposerCancel.d.ts +7 -0
  163. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -0
  164. package/dist/primitives/composer/ComposerCancel.js +8 -0
  165. package/dist/primitives/composer/ComposerCancel.js.map +1 -0
  166. package/dist/primitives/composer/ComposerInput.d.ts +4 -0
  167. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -0
  168. package/dist/primitives/composer/ComposerInput.js +13 -0
  169. package/dist/primitives/composer/ComposerInput.js.map +1 -0
  170. package/dist/primitives/composer/ComposerRoot.d.ts +7 -0
  171. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -0
  172. package/dist/primitives/composer/ComposerRoot.js +6 -0
  173. package/dist/primitives/composer/ComposerRoot.js.map +1 -0
  174. package/dist/primitives/composer/ComposerSend.d.ts +7 -0
  175. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -0
  176. package/dist/primitives/composer/ComposerSend.js +8 -0
  177. package/dist/primitives/composer/ComposerSend.js.map +1 -0
  178. package/dist/primitives/composer/EditComposerCancel.d.ts +7 -0
  179. package/dist/primitives/composer/EditComposerCancel.d.ts.map +1 -0
  180. package/dist/primitives/composer/EditComposerCancel.js +8 -0
  181. package/dist/primitives/composer/EditComposerCancel.js.map +1 -0
  182. package/dist/primitives/composer/EditComposerInput.d.ts +4 -0
  183. package/dist/primitives/composer/EditComposerInput.d.ts.map +1 -0
  184. package/dist/primitives/composer/EditComposerInput.js +13 -0
  185. package/dist/primitives/composer/EditComposerInput.js.map +1 -0
  186. package/dist/primitives/composer/EditComposerSend.d.ts +7 -0
  187. package/dist/primitives/composer/EditComposerSend.d.ts.map +1 -0
  188. package/dist/primitives/composer/EditComposerSend.js +8 -0
  189. package/dist/primitives/composer/EditComposerSend.js.map +1 -0
  190. package/dist/primitives/composer/index.d.ts +8 -0
  191. package/dist/primitives/composer/index.d.ts.map +1 -0
  192. package/dist/primitives/composer/index.js +8 -0
  193. package/dist/primitives/composer/index.js.map +1 -0
  194. package/dist/primitives/message/MessageContent.d.ts +50 -0
  195. package/dist/primitives/message/MessageContent.d.ts.map +1 -0
  196. package/dist/primitives/message/MessageContent.js +44 -0
  197. package/dist/primitives/message/MessageContent.js.map +1 -0
  198. package/dist/primitives/message/MessageIf.d.ts +10 -0
  199. package/dist/primitives/message/MessageIf.d.ts.map +1 -0
  200. package/dist/primitives/message/MessageIf.js +24 -0
  201. package/dist/primitives/message/MessageIf.js.map +1 -0
  202. package/dist/primitives/message/MessageRoot.d.ts +7 -0
  203. package/dist/primitives/message/MessageRoot.d.ts.map +1 -0
  204. package/dist/primitives/message/MessageRoot.js +6 -0
  205. package/dist/primitives/message/MessageRoot.js.map +1 -0
  206. package/dist/primitives/message/index.d.ts +4 -0
  207. package/dist/primitives/message/index.d.ts.map +1 -0
  208. package/dist/primitives/message/index.js +4 -0
  209. package/dist/primitives/message/index.js.map +1 -0
  210. package/dist/primitives/thread/ThreadEmpty.d.ts +6 -0
  211. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -0
  212. package/dist/primitives/thread/ThreadEmpty.js +9 -0
  213. package/dist/primitives/thread/ThreadEmpty.js.map +1 -0
  214. package/dist/primitives/thread/ThreadIf.d.ts +8 -0
  215. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -0
  216. package/dist/primitives/thread/ThreadIf.js +16 -0
  217. package/dist/primitives/thread/ThreadIf.js.map +1 -0
  218. package/dist/primitives/thread/ThreadMessages.d.ts +11 -0
  219. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -0
  220. package/dist/primitives/thread/ThreadMessages.js +23 -0
  221. package/dist/primitives/thread/ThreadMessages.js.map +1 -0
  222. package/dist/primitives/thread/ThreadRoot.d.ts +7 -0
  223. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -0
  224. package/dist/primitives/thread/ThreadRoot.js +6 -0
  225. package/dist/primitives/thread/ThreadRoot.js.map +1 -0
  226. package/dist/primitives/thread/index.d.ts +5 -0
  227. package/dist/primitives/thread/index.d.ts.map +1 -0
  228. package/dist/primitives/thread/index.js +5 -0
  229. package/dist/primitives/thread/index.js.map +1 -0
  230. package/dist/primitives/threadList/ThreadListItems.d.ts +10 -0
  231. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -0
  232. package/dist/primitives/threadList/ThreadListItems.js +13 -0
  233. package/dist/primitives/threadList/ThreadListItems.js.map +1 -0
  234. package/dist/primitives/threadList/ThreadListNew.d.ts +7 -0
  235. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -0
  236. package/dist/primitives/threadList/ThreadListNew.js +12 -0
  237. package/dist/primitives/threadList/ThreadListNew.js.map +1 -0
  238. package/dist/primitives/threadList/ThreadListRoot.d.ts +7 -0
  239. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -0
  240. package/dist/primitives/threadList/ThreadListRoot.js +6 -0
  241. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -0
  242. package/dist/primitives/threadList/index.d.ts +4 -0
  243. package/dist/primitives/threadList/index.d.ts.map +1 -0
  244. package/dist/primitives/threadList/index.js +4 -0
  245. package/dist/primitives/threadList/index.js.map +1 -0
  246. package/dist/runtimes/RemoteThreadListHookInstanceManager.d.ts +96 -0
  247. package/dist/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -0
  248. package/dist/runtimes/RemoteThreadListHookInstanceManager.js +110 -0
  249. package/dist/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -0
  250. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +112 -0
  251. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -0
  252. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.js +434 -0
  253. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -0
  254. package/dist/runtimes/index.d.ts +3 -0
  255. package/dist/runtimes/index.d.ts.map +1 -0
  256. package/dist/runtimes/index.js +3 -0
  257. package/dist/runtimes/index.js.map +1 -0
  258. package/dist/runtimes/runtime-adapter.d.ts +3 -0
  259. package/dist/runtimes/runtime-adapter.d.ts.map +1 -0
  260. package/dist/runtimes/runtime-adapter.js +44 -0
  261. package/dist/runtimes/runtime-adapter.js.map +1 -0
  262. package/dist/runtimes/useLocalRuntime.d.ts +18 -0
  263. package/dist/runtimes/useLocalRuntime.d.ts.map +1 -0
  264. package/dist/runtimes/useLocalRuntime.js +57 -0
  265. package/dist/runtimes/useLocalRuntime.js.map +1 -0
  266. package/dist/runtimes/useRemoteThreadListRuntime.d.ts +4 -0
  267. package/dist/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -0
  268. package/dist/runtimes/useRemoteThreadListRuntime.js +37 -0
  269. package/dist/runtimes/useRemoteThreadListRuntime.js.map +1 -0
  270. package/package.json +77 -0
  271. package/src/adapters/LocalStorageThreadListAdapter.tsx +227 -0
  272. package/src/adapters/TitleGenerationAdapter.ts +20 -0
  273. package/src/adapters/index.ts +5 -0
  274. package/src/context/AssistantContext.tsx +44 -0
  275. package/src/context/index.ts +1 -0
  276. package/src/context/providers/RuntimeAdapterProvider.tsx +40 -0
  277. package/src/context/providers/ThreadListItemRuntimeProvider.tsx +16 -0
  278. package/src/hooks/index.ts +5 -0
  279. package/src/hooks/useComposer.ts +14 -0
  280. package/src/hooks/useContentPart.ts +5 -0
  281. package/src/hooks/useMessage.ts +14 -0
  282. package/src/hooks/useThread.ts +14 -0
  283. package/src/hooks/useThreadList.ts +14 -0
  284. package/src/index.ts +122 -0
  285. package/src/internal.ts +22 -0
  286. package/src/primitive-hooks/index.ts +19 -0
  287. package/src/primitive-hooks/useActionBarCopy.ts +38 -0
  288. package/src/primitive-hooks/useActionBarEdit.ts +13 -0
  289. package/src/primitive-hooks/useActionBarFeedback.ts +28 -0
  290. package/src/primitive-hooks/useActionBarReload.ts +18 -0
  291. package/src/primitive-hooks/useComposerCancel.ts +13 -0
  292. package/src/primitive-hooks/useComposerSend.ts +13 -0
  293. package/src/primitive-hooks/useEditComposerCancel.ts +12 -0
  294. package/src/primitive-hooks/useEditComposerSend.ts +13 -0
  295. package/src/primitive-hooks/useMessageBranching.ts +18 -0
  296. package/src/primitive-hooks/useMessageReload.ts +13 -0
  297. package/src/primitive-hooks/useThreadIsEmpty.ts +5 -0
  298. package/src/primitive-hooks/useThreadIsRunning.ts +5 -0
  299. package/src/primitive-hooks/useThreadMessages.ts +6 -0
  300. package/src/primitives/actionBar/ActionBarCopy.tsx +34 -0
  301. package/src/primitives/actionBar/ActionBarEdit.tsx +25 -0
  302. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +23 -0
  303. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +23 -0
  304. package/src/primitives/actionBar/ActionBarReload.tsx +25 -0
  305. package/src/primitives/actionBar/index.ts +11 -0
  306. package/src/primitives/branchPicker/BranchPickerCount.tsx +9 -0
  307. package/src/primitives/branchPicker/BranchPickerNext.tsx +37 -0
  308. package/src/primitives/branchPicker/BranchPickerNumber.tsx +9 -0
  309. package/src/primitives/branchPicker/BranchPickerPrevious.tsx +37 -0
  310. package/src/primitives/branchPicker/index.ts +16 -0
  311. package/src/primitives/composer/ComposerCancel.tsx +25 -0
  312. package/src/primitives/composer/ComposerInput.tsx +19 -0
  313. package/src/primitives/composer/ComposerRoot.tsx +10 -0
  314. package/src/primitives/composer/ComposerSend.tsx +25 -0
  315. package/src/primitives/composer/EditComposerCancel.tsx +20 -0
  316. package/src/primitives/composer/EditComposerInput.tsx +22 -0
  317. package/src/primitives/composer/EditComposerSend.tsx +25 -0
  318. package/src/primitives/composer/index.ts +16 -0
  319. package/src/primitives/message/MessageContent.tsx +108 -0
  320. package/src/primitives/message/MessageIf.tsx +40 -0
  321. package/src/primitives/message/MessageRoot.tsx +10 -0
  322. package/src/primitives/message/index.ts +3 -0
  323. package/src/primitives/thread/ThreadEmpty.tsx +12 -0
  324. package/src/primitives/thread/ThreadIf.tsx +23 -0
  325. package/src/primitives/thread/ThreadMessages.tsx +61 -0
  326. package/src/primitives/thread/ThreadRoot.tsx +10 -0
  327. package/src/primitives/thread/index.ts +4 -0
  328. package/src/primitives/threadList/ThreadListItems.tsx +35 -0
  329. package/src/primitives/threadList/ThreadListNew.tsx +24 -0
  330. package/src/primitives/threadList/ThreadListRoot.tsx +13 -0
  331. package/src/primitives/threadList/index.ts +3 -0
  332. package/src/runtimes/RemoteThreadListHookInstanceManager.tsx +180 -0
  333. package/src/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +528 -0
  334. package/src/runtimes/index.ts +2 -0
  335. package/src/runtimes/runtime-adapter.ts +63 -0
  336. package/src/runtimes/useLocalRuntime.ts +100 -0
  337. package/src/runtimes/useRemoteThreadListRuntime.ts +64 -0
@@ -0,0 +1,37 @@
1
+ import { useState, useEffect, useMemo } from "react";
2
+ import { BaseAssistantRuntimeCore, AssistantRuntimeImpl, } from "@assistant-ui/core/internal";
3
+ import { RemoteThreadListThreadListRuntimeCore } from "./RemoteThreadListThreadListRuntimeCore.js";
4
+ import { useAui } from "@assistant-ui/store";
5
+ class RemoteThreadListRuntimeCore extends BaseAssistantRuntimeCore {
6
+ threads;
7
+ constructor(options) {
8
+ super();
9
+ this.threads = new RemoteThreadListThreadListRuntimeCore(options, this._contextProvider);
10
+ }
11
+ get RenderComponent() {
12
+ return this.threads.__internal_RenderComponent;
13
+ }
14
+ }
15
+ const useRemoteThreadListRuntimeImpl = (options) => {
16
+ const [runtime] = useState(() => new RemoteThreadListRuntimeCore(options));
17
+ useEffect(() => {
18
+ runtime.threads.__internal_setOptions(options);
19
+ runtime.threads.__internal_load();
20
+ }, [runtime, options]);
21
+ return useMemo(() => new AssistantRuntimeImpl(runtime), [runtime]);
22
+ };
23
+ export const useRemoteThreadListRuntime = (options) => {
24
+ const aui = useAui();
25
+ const isNested = aui.threadListItem.source !== null;
26
+ if (isNested) {
27
+ if (!options.allowNesting) {
28
+ throw new Error("useRemoteThreadListRuntime cannot be nested inside another RemoteThreadListRuntime. " +
29
+ "Set allowNesting: true to allow nesting (the inner runtime will become a no-op).");
30
+ }
31
+ // If allowNesting is true and already inside a thread list context,
32
+ // just call the runtimeHook directly (no-op behavior)
33
+ return options.runtimeHook();
34
+ }
35
+ return useRemoteThreadListRuntimeImpl(options);
36
+ };
37
+ //# sourceMappingURL=useRemoteThreadListRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRemoteThreadListRuntime.js","sourceRoot":"","sources":["../../src/runtimes/useRemoteThreadListRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,GAErB,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAAE,qCAAqC,EAAE,mDAAgD;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,2BACJ,SAAQ,wBAAwB;IAGhB,OAAO,CAAC;IAExB,YAAY,OAAgC;QAC1C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,qCAAqC,CACtD,OAAO,EACP,IAAI,CAAC,gBAAgB,CACtB,CAAC;IACJ,CAAC;IAED,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;IACjD,CAAC;CACF;AAED,MAAM,8BAA8B,GAAG,CACrC,OAAgC,EACd,EAAE;IACpB,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAgC,EACd,EAAE;IACpB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,CAAC,MAAM,KAAK,IAAI,CAAC;IAEpD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,sFAAsF;gBACpF,kFAAkF,CACrF,CAAC;QACJ,CAAC;QAED,oEAAoE;QACpE,sDAAsD;QACtD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "@assistant-ui/react-native",
3
+ "version": "0.1.0",
4
+ "description": "React Native bindings for assistant-ui",
5
+ "keywords": [
6
+ "assistant",
7
+ "ai",
8
+ "chat",
9
+ "react-native",
10
+ "mobile"
11
+ ],
12
+ "author": "AgentbaseAI Inc.",
13
+ "license": "MIT",
14
+ "type": "module",
15
+ "exports": {
16
+ ".": {
17
+ "aui-source": "./src/index.ts",
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./internal": {
22
+ "aui-source": "./src/internal.ts",
23
+ "types": "./dist/internal.d.ts",
24
+ "default": "./dist/internal.js"
25
+ }
26
+ },
27
+ "main": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "files": [
30
+ "dist",
31
+ "src",
32
+ "README.md"
33
+ ],
34
+ "sideEffects": false,
35
+ "scripts": {
36
+ "build": "aui-build",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest"
39
+ },
40
+ "dependencies": {
41
+ "@assistant-ui/core": "^0.1.0",
42
+ "@assistant-ui/store": "^0.2.0",
43
+ "@assistant-ui/tap": "^0.5.0",
44
+ "assistant-stream": "^0.3.3",
45
+ "zustand": "^5.0.11"
46
+ },
47
+ "peerDependencies": {
48
+ "@types/react": "*",
49
+ "react": "^18 || ^19",
50
+ "react-native": "*"
51
+ },
52
+ "peerDependenciesMeta": {
53
+ "@types/react": {
54
+ "optional": true
55
+ }
56
+ },
57
+ "devDependencies": {
58
+ "@assistant-ui/x-buildutils": "workspace:*",
59
+ "@types/react": "^19.2.14",
60
+ "react": "^19.2.4",
61
+ "react-native": "^0.84.0",
62
+ "vitest": "^4.0.18"
63
+ },
64
+ "publishConfig": {
65
+ "access": "public",
66
+ "provenance": true
67
+ },
68
+ "homepage": "https://www.assistant-ui.com/",
69
+ "repository": {
70
+ "type": "git",
71
+ "url": "git+https://github.com/assistant-ui/assistant-ui.git",
72
+ "directory": "packages/react-native"
73
+ },
74
+ "bugs": {
75
+ "url": "https://github.com/assistant-ui/assistant-ui/issues"
76
+ }
77
+ }
@@ -0,0 +1,227 @@
1
+ import { type AssistantStream, createAssistantStream } from "assistant-stream";
2
+ import { FC, PropsWithChildren, useMemo } from "react";
3
+ import { useAui } from "@assistant-ui/store";
4
+ import type {
5
+ RemoteThreadInitializeResponse,
6
+ RemoteThreadListAdapter,
7
+ RemoteThreadListResponse,
8
+ RemoteThreadMetadata,
9
+ ThreadHistoryAdapter,
10
+ ThreadMessage,
11
+ } from "@assistant-ui/core";
12
+ import type {
13
+ ExportedMessageRepository,
14
+ ExportedMessageRepositoryItem,
15
+ } from "@assistant-ui/core/internal";
16
+ import { RuntimeAdapterProvider } from "../context/providers/RuntimeAdapterProvider";
17
+ import type { TitleGenerationAdapter } from "./TitleGenerationAdapter";
18
+
19
+ type AsyncStorageLike = {
20
+ getItem(key: string): Promise<string | null>;
21
+ setItem(key: string, value: string): Promise<void>;
22
+ removeItem(key: string): Promise<void>;
23
+ };
24
+
25
+ type LocalStorageAdapterOptions = {
26
+ storage: AsyncStorageLike;
27
+ prefix?: string | undefined;
28
+ titleGenerator?: TitleGenerationAdapter | undefined;
29
+ };
30
+
31
+ type StoredThreadMetadata = {
32
+ remoteId: string;
33
+ externalId?: string;
34
+ status: "regular" | "archived";
35
+ title?: string;
36
+ };
37
+
38
+ class AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {
39
+ constructor(
40
+ private storage: AsyncStorageLike,
41
+ private aui: ReturnType<typeof useAui>,
42
+ private prefix: string,
43
+ ) {}
44
+
45
+ private _messagesKey(remoteId: string) {
46
+ return `${this.prefix}messages:${remoteId}`;
47
+ }
48
+
49
+ async load(): Promise<ExportedMessageRepository> {
50
+ const remoteId = this.aui.threadListItem().getState().remoteId;
51
+ if (!remoteId) return { messages: [] };
52
+
53
+ const raw = await this.storage.getItem(this._messagesKey(remoteId));
54
+ if (!raw) return { messages: [] };
55
+ return JSON.parse(raw) as ExportedMessageRepository;
56
+ }
57
+
58
+ async append(item: ExportedMessageRepositoryItem): Promise<void> {
59
+ const { remoteId } = await this.aui.threadListItem().initialize();
60
+
61
+ const key = this._messagesKey(remoteId);
62
+ const raw = await this.storage.getItem(key);
63
+ const repo: ExportedMessageRepository = raw
64
+ ? (JSON.parse(raw) as ExportedMessageRepository)
65
+ : { messages: [] };
66
+
67
+ const idx = repo.messages.findIndex(
68
+ (m) => m.message.id === item.message.id,
69
+ );
70
+ if (idx >= 0) {
71
+ repo.messages[idx] = item;
72
+ } else {
73
+ repo.messages.push(item);
74
+ }
75
+ repo.headId = item.message.id;
76
+
77
+ await this.storage.setItem(key, JSON.stringify(repo));
78
+ }
79
+ }
80
+
81
+ const createHistoryProvider = (
82
+ storage: AsyncStorageLike,
83
+ prefix: string,
84
+ ): FC<PropsWithChildren> => {
85
+ const Provider: FC<PropsWithChildren> = ({ children }) => {
86
+ const aui = useAui();
87
+ const history = useMemo(
88
+ () => new AsyncStorageHistoryAdapter(storage, aui, prefix),
89
+ [aui],
90
+ );
91
+ const adapters = useMemo(() => ({ history }), [history]);
92
+
93
+ return (
94
+ <RuntimeAdapterProvider adapters={adapters}>
95
+ {children}
96
+ </RuntimeAdapterProvider>
97
+ );
98
+ };
99
+ return Provider;
100
+ };
101
+
102
+ export const createLocalStorageAdapter = (
103
+ options: LocalStorageAdapterOptions,
104
+ ): RemoteThreadListAdapter => {
105
+ const { storage, prefix = "@assistant-ui:", titleGenerator } = options;
106
+
107
+ const threadsKey = `${prefix}threads`;
108
+ const messagesKey = (threadId: string) => `${prefix}messages:${threadId}`;
109
+
110
+ const loadThreadMetadata = async (): Promise<StoredThreadMetadata[]> => {
111
+ const raw = await storage.getItem(threadsKey);
112
+ return raw ? (JSON.parse(raw) as StoredThreadMetadata[]) : [];
113
+ };
114
+
115
+ const saveThreadMetadata = async (
116
+ threads: StoredThreadMetadata[],
117
+ ): Promise<void> => {
118
+ await storage.setItem(threadsKey, JSON.stringify(threads));
119
+ };
120
+
121
+ const adapter: RemoteThreadListAdapter = {
122
+ unstable_Provider: createHistoryProvider(storage, prefix),
123
+
124
+ async list(): Promise<RemoteThreadListResponse> {
125
+ const threads = await loadThreadMetadata();
126
+ return {
127
+ threads: threads.map((t) => ({
128
+ remoteId: t.remoteId,
129
+ externalId: t.externalId,
130
+ status: t.status,
131
+ title: t.title,
132
+ })),
133
+ };
134
+ },
135
+
136
+ async initialize(
137
+ threadId: string,
138
+ ): Promise<RemoteThreadInitializeResponse> {
139
+ const remoteId = threadId;
140
+ const threads = await loadThreadMetadata();
141
+
142
+ // Only add if not already present
143
+ if (!threads.some((t) => t.remoteId === remoteId)) {
144
+ threads.unshift({
145
+ remoteId,
146
+ status: "regular",
147
+ });
148
+ await saveThreadMetadata(threads);
149
+ }
150
+
151
+ return { remoteId, externalId: undefined };
152
+ },
153
+
154
+ async rename(remoteId: string, newTitle: string): Promise<void> {
155
+ const threads = await loadThreadMetadata();
156
+ const thread = threads.find((t) => t.remoteId === remoteId);
157
+ if (thread) {
158
+ thread.title = newTitle;
159
+ await saveThreadMetadata(threads);
160
+ }
161
+ },
162
+
163
+ async archive(remoteId: string): Promise<void> {
164
+ const threads = await loadThreadMetadata();
165
+ const thread = threads.find((t) => t.remoteId === remoteId);
166
+ if (thread) {
167
+ thread.status = "archived";
168
+ await saveThreadMetadata(threads);
169
+ }
170
+ },
171
+
172
+ async unarchive(remoteId: string): Promise<void> {
173
+ const threads = await loadThreadMetadata();
174
+ const thread = threads.find((t) => t.remoteId === remoteId);
175
+ if (thread) {
176
+ thread.status = "regular";
177
+ await saveThreadMetadata(threads);
178
+ }
179
+ },
180
+
181
+ async delete(remoteId: string): Promise<void> {
182
+ const threads = await loadThreadMetadata();
183
+ const filtered = threads.filter((t) => t.remoteId !== remoteId);
184
+ await saveThreadMetadata(filtered);
185
+ await storage.removeItem(messagesKey(remoteId));
186
+ },
187
+
188
+ async fetch(threadId: string): Promise<RemoteThreadMetadata> {
189
+ const threads = await loadThreadMetadata();
190
+ const thread = threads.find((t) => t.remoteId === threadId);
191
+ if (!thread) throw new Error("Thread not found");
192
+ return {
193
+ remoteId: thread.remoteId,
194
+ externalId: thread.externalId,
195
+ status: thread.status,
196
+ title: thread.title,
197
+ };
198
+ },
199
+
200
+ async generateTitle(
201
+ remoteId: string,
202
+ messages: readonly ThreadMessage[],
203
+ ): Promise<AssistantStream> {
204
+ if (titleGenerator) {
205
+ const title = await titleGenerator.generateTitle(messages);
206
+
207
+ // Update the stored title
208
+ const threads = await loadThreadMetadata();
209
+ const thread = threads.find((t) => t.remoteId === remoteId);
210
+ if (thread) {
211
+ thread.title = title;
212
+ await saveThreadMetadata(threads);
213
+ }
214
+
215
+ // Return a stream with a single text part
216
+ return createAssistantStream((controller) => {
217
+ controller.appendText(title);
218
+ });
219
+ }
220
+
221
+ // No title generator — return empty stream
222
+ return createAssistantStream(() => {});
223
+ },
224
+ };
225
+
226
+ return adapter;
227
+ };
@@ -0,0 +1,20 @@
1
+ import type { ThreadMessage } from "@assistant-ui/core";
2
+
3
+ export type TitleGenerationAdapter = {
4
+ generateTitle(messages: readonly ThreadMessage[]): Promise<string>;
5
+ };
6
+
7
+ export const createSimpleTitleAdapter = (): TitleGenerationAdapter => {
8
+ return {
9
+ async generateTitle(messages) {
10
+ const firstUserMessage = messages.find((m) => m.role === "user");
11
+ if (!firstUserMessage) return "New Thread";
12
+
13
+ const textPart = firstUserMessage.content.find((p) => p.type === "text");
14
+ if (!textPart || textPart.type !== "text") return "New Thread";
15
+
16
+ const text = textPart.text.trim();
17
+ return text.length > 50 ? `${text.slice(0, 47)}...` : text;
18
+ },
19
+ };
20
+ };
@@ -0,0 +1,5 @@
1
+ export {
2
+ type TitleGenerationAdapter,
3
+ createSimpleTitleAdapter,
4
+ } from "./TitleGenerationAdapter";
5
+ export { createLocalStorageAdapter } from "./LocalStorageThreadListAdapter";
@@ -0,0 +1,44 @@
1
+ import { type ComponentType, type ReactNode, memo } from "react";
2
+ import { useAui, AuiProvider } from "@assistant-ui/store";
3
+ import type {
4
+ AssistantRuntime,
5
+ AssistantRuntimeCore,
6
+ } from "@assistant-ui/core";
7
+ import { RuntimeAdapter } from "../runtimes/runtime-adapter";
8
+
9
+ export const useAssistantRuntime = (): AssistantRuntime => {
10
+ const aui = useAui();
11
+ const runtime = aui.threads().__internal_getAssistantRuntime?.();
12
+ if (!runtime) {
13
+ throw new Error(
14
+ "useAssistantRuntime must be used within an AssistantProvider",
15
+ );
16
+ }
17
+ return runtime;
18
+ };
19
+
20
+ const getRenderComponent = (runtime: AssistantRuntime) => {
21
+ return (runtime as { _core?: AssistantRuntimeCore })._core?.RenderComponent as
22
+ | ComponentType
23
+ | undefined;
24
+ };
25
+
26
+ export const AssistantProvider = memo(
27
+ ({
28
+ runtime,
29
+ children,
30
+ }: {
31
+ runtime: AssistantRuntime;
32
+ children: ReactNode;
33
+ }) => {
34
+ const aui = useAui({ threads: RuntimeAdapter(runtime) }, { parent: null });
35
+ const RenderComponent = getRenderComponent(runtime);
36
+
37
+ return (
38
+ <AuiProvider value={aui}>
39
+ {RenderComponent && <RenderComponent />}
40
+ {children}
41
+ </AuiProvider>
42
+ );
43
+ },
44
+ );
@@ -0,0 +1 @@
1
+ export { AssistantProvider, useAssistantRuntime } from "./AssistantContext";
@@ -0,0 +1,40 @@
1
+ import { createContext, FC, ReactNode, useContext } from "react";
2
+ import type {
3
+ ThreadHistoryAdapter,
4
+ AttachmentAdapter,
5
+ } from "@assistant-ui/core";
6
+
7
+ export type RuntimeAdapters = {
8
+ history?: ThreadHistoryAdapter | undefined;
9
+ attachments?: AttachmentAdapter | undefined;
10
+ };
11
+
12
+ const RuntimeAdaptersContext = createContext<RuntimeAdapters | null>(null);
13
+
14
+ export namespace RuntimeAdapterProvider {
15
+ export type Props = {
16
+ adapters: RuntimeAdapters;
17
+ children: ReactNode;
18
+ };
19
+ }
20
+
21
+ export const RuntimeAdapterProvider: FC<RuntimeAdapterProvider.Props> = ({
22
+ adapters,
23
+ children,
24
+ }) => {
25
+ const context = useContext(RuntimeAdaptersContext);
26
+ return (
27
+ <RuntimeAdaptersContext.Provider
28
+ value={{
29
+ ...context,
30
+ ...adapters,
31
+ }}
32
+ >
33
+ {children}
34
+ </RuntimeAdaptersContext.Provider>
35
+ );
36
+ };
37
+
38
+ export const useRuntimeAdapters = () => {
39
+ return useContext(RuntimeAdaptersContext);
40
+ };
@@ -0,0 +1,16 @@
1
+ import { type FC, type PropsWithChildren } from "react";
2
+ import { useAui, AuiProvider } from "@assistant-ui/store";
3
+ import type { ThreadListItemRuntime } from "@assistant-ui/core";
4
+ import { ThreadListItemClient } from "@assistant-ui/core/store/internal";
5
+
6
+ export const ThreadListItemRuntimeProvider: FC<
7
+ PropsWithChildren<{
8
+ runtime: ThreadListItemRuntime;
9
+ }>
10
+ > = ({ runtime, children }) => {
11
+ const aui = useAui({
12
+ threadListItem: ThreadListItemClient({ runtime }),
13
+ });
14
+
15
+ return <AuiProvider value={aui}>{children}</AuiProvider>;
16
+ };
@@ -0,0 +1,5 @@
1
+ export { useThread } from "./useThread";
2
+ export { useMessage } from "./useMessage";
3
+ export { useComposer } from "./useComposer";
4
+ export { useContentPart } from "./useContentPart";
5
+ export { useThreadList } from "./useThreadList";
@@ -0,0 +1,14 @@
1
+ import type { ComposerState } from "@assistant-ui/core/store";
2
+ import { useAuiState } from "@assistant-ui/store";
3
+
4
+ export function useComposer(): ComposerState;
5
+ export function useComposer<TSelected>(
6
+ selector: (state: ComposerState) => TSelected,
7
+ ): TSelected;
8
+ export function useComposer<TSelected = ComposerState>(
9
+ selector?: (state: ComposerState) => TSelected,
10
+ ): TSelected {
11
+ return useAuiState((s) =>
12
+ selector ? selector(s.composer) : (s.composer as unknown as TSelected),
13
+ );
14
+ }
@@ -0,0 +1,5 @@
1
+ import { useAuiState } from "@assistant-ui/store";
2
+
3
+ export function useContentPart(index: number) {
4
+ return useAuiState((s) => s.message.parts[index]);
5
+ }
@@ -0,0 +1,14 @@
1
+ import type { MessageState } from "@assistant-ui/core/store";
2
+ import { useAuiState } from "@assistant-ui/store";
3
+
4
+ export function useMessage(): MessageState;
5
+ export function useMessage<TSelected>(
6
+ selector: (state: MessageState) => TSelected,
7
+ ): TSelected;
8
+ export function useMessage<TSelected = MessageState>(
9
+ selector?: (state: MessageState) => TSelected,
10
+ ): TSelected {
11
+ return useAuiState((s) =>
12
+ selector ? selector(s.message) : (s.message as unknown as TSelected),
13
+ );
14
+ }
@@ -0,0 +1,14 @@
1
+ import type { ThreadState } from "@assistant-ui/core/store";
2
+ import { useAuiState } from "@assistant-ui/store";
3
+
4
+ export function useThread(): ThreadState;
5
+ export function useThread<TSelected>(
6
+ selector: (state: ThreadState) => TSelected,
7
+ ): TSelected;
8
+ export function useThread<TSelected = ThreadState>(
9
+ selector?: (state: ThreadState) => TSelected,
10
+ ): TSelected {
11
+ return useAuiState((s) =>
12
+ selector ? selector(s.thread) : (s.thread as unknown as TSelected),
13
+ );
14
+ }
@@ -0,0 +1,14 @@
1
+ import type { ThreadsState } from "@assistant-ui/core/store";
2
+ import { useAuiState } from "@assistant-ui/store";
3
+
4
+ export function useThreadList(): ThreadsState;
5
+ export function useThreadList<TSelected>(
6
+ selector: (state: ThreadsState) => TSelected,
7
+ ): TSelected;
8
+ export function useThreadList<TSelected = ThreadsState>(
9
+ selector?: (state: ThreadsState) => TSelected,
10
+ ): TSelected {
11
+ return useAuiState((s) =>
12
+ selector ? selector(s.threads) : (s.threads as unknown as TSelected),
13
+ );
14
+ }
package/src/index.ts ADDED
@@ -0,0 +1,122 @@
1
+ // Re-export core types
2
+ export type {
3
+ // Message types
4
+ ThreadMessage,
5
+ ThreadUserMessage,
6
+ ThreadAssistantMessage,
7
+ ThreadSystemMessage,
8
+ MessageStatus,
9
+ MessageRole,
10
+ ThreadMessageLike,
11
+ AppendMessage,
12
+ RunConfig,
13
+ // Message parts
14
+ TextMessagePart,
15
+ ReasoningMessagePart,
16
+ SourceMessagePart,
17
+ ToolCallMessagePart,
18
+ ImageMessagePart,
19
+ FileMessagePart,
20
+ DataMessagePart,
21
+ Unstable_AudioMessagePart,
22
+ ThreadUserMessagePart,
23
+ ThreadAssistantMessagePart,
24
+ // Runtime types
25
+ AssistantRuntime,
26
+ ThreadRuntime,
27
+ MessageRuntime,
28
+ ThreadComposerRuntime,
29
+ EditComposerRuntime,
30
+ ComposerRuntime,
31
+ ThreadListRuntime,
32
+ ThreadListItemRuntime,
33
+ // Runtime core types
34
+ ChatModelAdapter,
35
+ ChatModelRunOptions,
36
+ ChatModelRunResult,
37
+ RuntimeCapabilities,
38
+ // Attachment types
39
+ Attachment,
40
+ PendingAttachment,
41
+ AttachmentRuntime,
42
+ // Other
43
+ Unsubscribe,
44
+ } from "@assistant-ui/core";
45
+
46
+ // Re-export store scope state types
47
+ export type {
48
+ ThreadState,
49
+ ThreadsState,
50
+ MessageState,
51
+ ComposerState,
52
+ AttachmentState,
53
+ ThreadListItemState,
54
+ } from "@assistant-ui/core/store";
55
+
56
+ // Store hooks
57
+ export {
58
+ useAui,
59
+ useAuiState,
60
+ useAuiEvent,
61
+ AuiProvider,
62
+ } from "@assistant-ui/store";
63
+
64
+ // Context providers and hooks
65
+ export { AssistantProvider, useAssistantRuntime } from "./context";
66
+
67
+ // State hooks
68
+ export {
69
+ useThread,
70
+ useMessage,
71
+ useComposer,
72
+ useContentPart,
73
+ useThreadList,
74
+ } from "./hooks";
75
+
76
+ // Primitive hooks
77
+ export {
78
+ useThreadMessages,
79
+ useThreadIsRunning,
80
+ useThreadIsEmpty,
81
+ useComposerSend,
82
+ useComposerCancel,
83
+ useMessageReload,
84
+ useMessageBranching,
85
+ useActionBarCopy,
86
+ type UseActionBarCopyOptions,
87
+ useActionBarEdit,
88
+ useActionBarReload,
89
+ useActionBarFeedbackPositive,
90
+ useActionBarFeedbackNegative,
91
+ useEditComposerSend,
92
+ useEditComposerCancel,
93
+ } from "./primitive-hooks";
94
+
95
+ // Runtime
96
+ export {
97
+ useLocalRuntime,
98
+ type LocalRuntimeOptions,
99
+ useRemoteThreadListRuntime,
100
+ } from "./runtimes";
101
+
102
+ // Re-export core remote thread list types
103
+ export type {
104
+ RemoteThreadListAdapter,
105
+ RemoteThreadListOptions,
106
+ } from "@assistant-ui/core";
107
+ export { InMemoryThreadListAdapter } from "@assistant-ui/core";
108
+
109
+ // Primitives
110
+ export * from "./primitives/thread";
111
+ export * from "./primitives/composer";
112
+ export * from "./primitives/message";
113
+ export * from "./primitives/threadList";
114
+ export * from "./primitives/actionBar";
115
+ export * from "./primitives/branchPicker";
116
+
117
+ // Adapters
118
+ export {
119
+ type TitleGenerationAdapter,
120
+ createSimpleTitleAdapter,
121
+ createLocalStorageAdapter,
122
+ } from "./adapters";