@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,25 @@
1
+ import type { ReactNode } from "react";
2
+ import { Pressable, type PressableProps } from "react-native";
3
+ import { useEditComposerSend } from "../../primitive-hooks/useEditComposerSend";
4
+
5
+ export type EditComposerSendProps = Omit<PressableProps, "onPress"> & {
6
+ children: ReactNode;
7
+ };
8
+
9
+ export const EditComposerSend = ({
10
+ children,
11
+ disabled: disabledProp,
12
+ ...pressableProps
13
+ }: EditComposerSendProps) => {
14
+ const { send, disabled } = useEditComposerSend();
15
+
16
+ return (
17
+ <Pressable
18
+ onPress={send}
19
+ disabled={disabledProp ?? disabled}
20
+ {...pressableProps}
21
+ >
22
+ {children}
23
+ </Pressable>
24
+ );
25
+ };
@@ -0,0 +1,16 @@
1
+ export { ComposerRoot, type ComposerRootProps } from "./ComposerRoot";
2
+ export { ComposerInput, type ComposerInputProps } from "./ComposerInput";
3
+ export { ComposerSend, type ComposerSendProps } from "./ComposerSend";
4
+ export { ComposerCancel, type ComposerCancelProps } from "./ComposerCancel";
5
+ export {
6
+ EditComposerInput,
7
+ type EditComposerInputProps,
8
+ } from "./EditComposerInput";
9
+ export {
10
+ EditComposerSend,
11
+ type EditComposerSendProps,
12
+ } from "./EditComposerSend";
13
+ export {
14
+ EditComposerCancel,
15
+ type EditComposerCancelProps,
16
+ } from "./EditComposerCancel";
@@ -0,0 +1,108 @@
1
+ import { type ReactElement, Fragment } from "react";
2
+ import { Text } from "react-native";
3
+ import type {
4
+ ThreadUserMessagePart,
5
+ ThreadAssistantMessagePart,
6
+ } from "@assistant-ui/core";
7
+ import { useMessage } from "../../hooks/useMessage";
8
+
9
+ type MessageContentPart = ThreadUserMessagePart | ThreadAssistantMessagePart;
10
+
11
+ export type MessageContentProps = {
12
+ renderText?: (props: {
13
+ part: Extract<MessageContentPart, { type: "text" }>;
14
+ index: number;
15
+ }) => ReactElement;
16
+ renderToolCall?: (props: {
17
+ part: Extract<MessageContentPart, { type: "tool-call" }>;
18
+ index: number;
19
+ }) => ReactElement;
20
+ renderImage?: (props: {
21
+ part: Extract<MessageContentPart, { type: "image" }>;
22
+ index: number;
23
+ }) => ReactElement;
24
+ renderReasoning?: (props: {
25
+ part: Extract<MessageContentPart, { type: "reasoning" }>;
26
+ index: number;
27
+ }) => ReactElement;
28
+ renderSource?: (props: {
29
+ part: Extract<MessageContentPart, { type: "source" }>;
30
+ index: number;
31
+ }) => ReactElement;
32
+ renderFile?: (props: {
33
+ part: Extract<MessageContentPart, { type: "file" }>;
34
+ index: number;
35
+ }) => ReactElement;
36
+ renderData?: (props: {
37
+ part: Extract<MessageContentPart, { type: "data" }>;
38
+ index: number;
39
+ }) => ReactElement;
40
+ };
41
+
42
+ const DefaultTextRenderer = ({
43
+ part,
44
+ }: {
45
+ part: Extract<MessageContentPart, { type: "text" }>;
46
+ }) => {
47
+ return <Text>{part.text}</Text>;
48
+ };
49
+
50
+ export const MessageContent = ({
51
+ renderText,
52
+ renderToolCall,
53
+ renderImage,
54
+ renderReasoning,
55
+ renderSource,
56
+ renderFile,
57
+ renderData,
58
+ }: MessageContentProps) => {
59
+ const content = useMessage((s) => s.content);
60
+
61
+ return (
62
+ <>
63
+ {content.map((part, index) => {
64
+ const key = `${part.type}-${index}`;
65
+ switch (part.type) {
66
+ case "text":
67
+ return (
68
+ <Fragment key={key}>
69
+ {renderText ? (
70
+ renderText({ part, index })
71
+ ) : (
72
+ <DefaultTextRenderer part={part} />
73
+ )}
74
+ </Fragment>
75
+ );
76
+ case "tool-call":
77
+ if (!renderToolCall) return null;
78
+ return (
79
+ <Fragment key={key}>{renderToolCall({ part, index })}</Fragment>
80
+ );
81
+ case "image":
82
+ if (!renderImage) return null;
83
+ return (
84
+ <Fragment key={key}>{renderImage({ part, index })}</Fragment>
85
+ );
86
+ case "reasoning":
87
+ if (!renderReasoning) return null;
88
+ return (
89
+ <Fragment key={key}>{renderReasoning({ part, index })}</Fragment>
90
+ );
91
+ case "source":
92
+ if (!renderSource) return null;
93
+ return (
94
+ <Fragment key={key}>{renderSource({ part, index })}</Fragment>
95
+ );
96
+ case "file":
97
+ if (!renderFile) return null;
98
+ return <Fragment key={key}>{renderFile({ part, index })}</Fragment>;
99
+ case "data":
100
+ if (!renderData) return null;
101
+ return <Fragment key={key}>{renderData({ part, index })}</Fragment>;
102
+ default:
103
+ return null;
104
+ }
105
+ })}
106
+ </>
107
+ );
108
+ };
@@ -0,0 +1,40 @@
1
+ import type { ReactNode } from "react";
2
+ import { useMessage } from "../../hooks/useMessage";
3
+
4
+ export type MessageIfProps = {
5
+ children: ReactNode;
6
+ user?: boolean | undefined;
7
+ assistant?: boolean | undefined;
8
+ running?: boolean | undefined;
9
+ last?: boolean | undefined;
10
+ };
11
+
12
+ export const MessageIf = ({
13
+ children,
14
+ user,
15
+ assistant,
16
+ running,
17
+ last,
18
+ }: MessageIfProps) => {
19
+ const message = useMessage();
20
+
21
+ if (user !== undefined) {
22
+ if (user !== (message.role === "user")) return null;
23
+ }
24
+
25
+ if (assistant !== undefined) {
26
+ if (assistant !== (message.role === "assistant")) return null;
27
+ }
28
+
29
+ if (running !== undefined) {
30
+ const isRunning =
31
+ message.role === "assistant" && message.status.type === "running";
32
+ if (running !== isRunning) return null;
33
+ }
34
+
35
+ if (last !== undefined) {
36
+ if (last !== message.isLast) return null;
37
+ }
38
+
39
+ return <>{children}</>;
40
+ };
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from "react";
2
+ import { View, type ViewProps } from "react-native";
3
+
4
+ export type MessageRootProps = ViewProps & {
5
+ children: ReactNode;
6
+ };
7
+
8
+ export const MessageRoot = ({ children, ...viewProps }: MessageRootProps) => {
9
+ return <View {...viewProps}>{children}</View>;
10
+ };
@@ -0,0 +1,3 @@
1
+ export { MessageRoot, type MessageRootProps } from "./MessageRoot";
2
+ export { MessageContent, type MessageContentProps } from "./MessageContent";
3
+ export { MessageIf, type MessageIfProps } from "./MessageIf";
@@ -0,0 +1,12 @@
1
+ import type { ReactNode } from "react";
2
+ import { useThreadIsEmpty } from "../../primitive-hooks/useThreadIsEmpty";
3
+
4
+ export type ThreadEmptyProps = {
5
+ children: ReactNode;
6
+ };
7
+
8
+ export const ThreadEmpty = ({ children }: ThreadEmptyProps) => {
9
+ const isEmpty = useThreadIsEmpty();
10
+ if (!isEmpty) return null;
11
+ return <>{children}</>;
12
+ };
@@ -0,0 +1,23 @@
1
+ import type { ReactNode } from "react";
2
+ import { useThread } from "../../hooks/useThread";
3
+
4
+ export type ThreadIfProps = {
5
+ children: ReactNode;
6
+ empty?: boolean | undefined;
7
+ running?: boolean | undefined;
8
+ };
9
+
10
+ export const ThreadIf = ({ children, empty, running }: ThreadIfProps) => {
11
+ const thread = useThread();
12
+
13
+ if (empty !== undefined) {
14
+ const isEmpty = thread.messages.length === 0;
15
+ if (empty !== isEmpty) return null;
16
+ }
17
+
18
+ if (running !== undefined) {
19
+ if (running !== thread.isRunning) return null;
20
+ }
21
+
22
+ return <>{children}</>;
23
+ };
@@ -0,0 +1,61 @@
1
+ import { type ReactElement, useCallback } from "react";
2
+ import { FlatList, type FlatListProps } from "react-native";
3
+ import type { ThreadMessage } from "@assistant-ui/core";
4
+ import { useAui, useAuiState, AuiProvider, Derived } from "@assistant-ui/store";
5
+
6
+ export type ThreadMessagesProps = Omit<
7
+ FlatListProps<ThreadMessage>,
8
+ "data" | "renderItem"
9
+ > & {
10
+ renderMessage: (props: {
11
+ message: ThreadMessage;
12
+ index: number;
13
+ }) => ReactElement;
14
+ };
15
+
16
+ const MessageScope = ({
17
+ index,
18
+ children,
19
+ }: {
20
+ index: number;
21
+ children: ReactElement;
22
+ }) => {
23
+ const aui = useAui({
24
+ message: Derived({
25
+ source: "thread",
26
+ query: { type: "index", index },
27
+ get: (aui) => aui.threads().thread("main").message({ index }),
28
+ }),
29
+ });
30
+
31
+ return <AuiProvider value={aui}>{children}</AuiProvider>;
32
+ };
33
+
34
+ export const ThreadMessages = ({
35
+ renderMessage,
36
+ ...flatListProps
37
+ }: ThreadMessagesProps) => {
38
+ const messages = useAuiState((s) => s.thread.messages);
39
+
40
+ const renderItem = useCallback(
41
+ ({ item, index }: { item: ThreadMessage; index: number }) => {
42
+ return (
43
+ <MessageScope index={index}>
44
+ {renderMessage({ message: item as ThreadMessage, index })}
45
+ </MessageScope>
46
+ );
47
+ },
48
+ [renderMessage],
49
+ );
50
+
51
+ const keyExtractor = useCallback((item: ThreadMessage) => item.id, []);
52
+
53
+ return (
54
+ <FlatList
55
+ data={messages as unknown as ThreadMessage[]}
56
+ renderItem={renderItem}
57
+ keyExtractor={keyExtractor}
58
+ {...flatListProps}
59
+ />
60
+ );
61
+ };
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from "react";
2
+ import { View, type ViewProps } from "react-native";
3
+
4
+ export type ThreadRootProps = ViewProps & {
5
+ children: ReactNode;
6
+ };
7
+
8
+ export const ThreadRoot = ({ children, ...viewProps }: ThreadRootProps) => {
9
+ return <View {...viewProps}>{children}</View>;
10
+ };
@@ -0,0 +1,4 @@
1
+ export { ThreadRoot, type ThreadRootProps } from "./ThreadRoot";
2
+ export { ThreadMessages, type ThreadMessagesProps } from "./ThreadMessages";
3
+ export { ThreadEmpty, type ThreadEmptyProps } from "./ThreadEmpty";
4
+ export { ThreadIf, type ThreadIfProps } from "./ThreadIf";
@@ -0,0 +1,35 @@
1
+ import { type ReactElement, useCallback } from "react";
2
+ import { FlatList, type FlatListProps } from "react-native";
3
+ import { useThreadList } from "../../hooks/useThreadList";
4
+
5
+ export type ThreadListItemsProps = Omit<
6
+ FlatListProps<string>,
7
+ "data" | "renderItem"
8
+ > & {
9
+ renderItem: (props: { threadId: string; index: number }) => ReactElement;
10
+ };
11
+
12
+ export const ThreadListItems = ({
13
+ renderItem,
14
+ ...flatListProps
15
+ }: ThreadListItemsProps) => {
16
+ const threadIds = useThreadList((s) => s.threadIds);
17
+
18
+ const renderFlatListItem = useCallback(
19
+ ({ item, index }: { item: string; index: number }) => {
20
+ return renderItem({ threadId: item, index });
21
+ },
22
+ [renderItem],
23
+ );
24
+
25
+ const keyExtractor = useCallback((item: string) => item, []);
26
+
27
+ return (
28
+ <FlatList
29
+ data={threadIds as string[]}
30
+ renderItem={renderFlatListItem}
31
+ keyExtractor={keyExtractor}
32
+ {...flatListProps}
33
+ />
34
+ );
35
+ };
@@ -0,0 +1,24 @@
1
+ import { useCallback, type ReactNode } from "react";
2
+ import { Pressable, type PressableProps } from "react-native";
3
+ import { useAui } from "@assistant-ui/store";
4
+
5
+ export type ThreadListNewProps = Omit<PressableProps, "onPress"> & {
6
+ children: ReactNode;
7
+ };
8
+
9
+ export const ThreadListNew = ({
10
+ children,
11
+ ...pressableProps
12
+ }: ThreadListNewProps) => {
13
+ const aui = useAui();
14
+
15
+ const onPress = useCallback(() => {
16
+ aui.threads().switchToNewThread();
17
+ }, [aui]);
18
+
19
+ return (
20
+ <Pressable onPress={onPress} {...pressableProps}>
21
+ {children}
22
+ </Pressable>
23
+ );
24
+ };
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from "react";
2
+ import { View, type ViewProps } from "react-native";
3
+
4
+ export type ThreadListRootProps = ViewProps & {
5
+ children: ReactNode;
6
+ };
7
+
8
+ export const ThreadListRoot = ({
9
+ children,
10
+ ...viewProps
11
+ }: ThreadListRootProps) => {
12
+ return <View {...viewProps}>{children}</View>;
13
+ };
@@ -0,0 +1,3 @@
1
+ export { ThreadListRoot, type ThreadListRootProps } from "./ThreadListRoot";
2
+ export { ThreadListItems, type ThreadListItemsProps } from "./ThreadListItems";
3
+ export { ThreadListNew, type ThreadListNewProps } from "./ThreadListNew";
@@ -0,0 +1,180 @@
1
+ import {
2
+ FC,
3
+ useCallback,
4
+ useRef,
5
+ useEffect,
6
+ memo,
7
+ PropsWithChildren,
8
+ ComponentType,
9
+ useMemo,
10
+ } from "react";
11
+ import { UseBoundStore, StoreApi, create } from "zustand";
12
+ import { useAui } from "@assistant-ui/store";
13
+ import { ThreadListItemRuntimeProvider } from "../context/providers/ThreadListItemRuntimeProvider";
14
+ import type {
15
+ ThreadListRuntimeCore,
16
+ ThreadRuntimeCore,
17
+ AssistantRuntime,
18
+ } from "@assistant-ui/core";
19
+ import {
20
+ BaseSubscribable,
21
+ ThreadRuntimeImpl,
22
+ ThreadListRuntimeImpl,
23
+ } from "@assistant-ui/core/internal";
24
+
25
+ type RemoteThreadListHook = () => AssistantRuntime;
26
+
27
+ type RemoteThreadListHookInstance = {
28
+ runtime?: ThreadRuntimeCore;
29
+ };
30
+ export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
31
+ private useRuntimeHook: UseBoundStore<
32
+ StoreApi<{ useRuntime: RemoteThreadListHook }>
33
+ >;
34
+ private instances = new Map<string, RemoteThreadListHookInstance>();
35
+ private useAliveThreadsKeysChanged = create(() => ({}));
36
+ private parent: ThreadListRuntimeCore;
37
+
38
+ constructor(
39
+ runtimeHook: RemoteThreadListHook,
40
+ parent: ThreadListRuntimeCore,
41
+ ) {
42
+ super();
43
+ this.parent = parent;
44
+ this.useRuntimeHook = create(() => ({ useRuntime: runtimeHook }));
45
+ }
46
+
47
+ public startThreadRuntime(threadId: string) {
48
+ if (!this.instances.has(threadId)) {
49
+ this.instances.set(threadId, {});
50
+ this.useAliveThreadsKeysChanged.setState({}, true);
51
+ }
52
+
53
+ return new Promise<ThreadRuntimeCore>((resolve, reject) => {
54
+ const callback = () => {
55
+ const instance = this.instances.get(threadId);
56
+ if (!instance) {
57
+ dispose();
58
+ reject(new Error("Thread was deleted before runtime was started"));
59
+ } else if (!instance.runtime) {
60
+ return; // misc update
61
+ } else {
62
+ dispose();
63
+ resolve(instance.runtime);
64
+ }
65
+ };
66
+ const dispose = this.subscribe(callback);
67
+ callback();
68
+ });
69
+ }
70
+
71
+ public getThreadRuntimeCore(threadId: string) {
72
+ const instance = this.instances.get(threadId);
73
+ if (!instance) return undefined;
74
+ return instance.runtime;
75
+ }
76
+
77
+ public stopThreadRuntime(threadId: string) {
78
+ this.instances.delete(threadId);
79
+ this.useAliveThreadsKeysChanged.setState({}, true);
80
+ }
81
+
82
+ public setRuntimeHook(newRuntimeHook: RemoteThreadListHook) {
83
+ const prevRuntimeHook = this.useRuntimeHook.getState().useRuntime;
84
+ if (prevRuntimeHook !== newRuntimeHook) {
85
+ this.useRuntimeHook.setState({ useRuntime: newRuntimeHook }, true);
86
+ }
87
+ }
88
+
89
+ private _InnerActiveThreadProvider: FC<{
90
+ threadId: string;
91
+ }> = ({ threadId }) => {
92
+ const { useRuntime } = this.useRuntimeHook();
93
+ const runtime = useRuntime();
94
+
95
+ const threadBinding = (runtime.thread as ThreadRuntimeImpl)
96
+ .__internal_threadBinding;
97
+
98
+ const updateRuntime = useCallback(() => {
99
+ const aliveThread = this.instances.get(threadId);
100
+ if (!aliveThread)
101
+ throw new Error("Thread not found. This is a bug in assistant-ui.");
102
+
103
+ aliveThread.runtime = threadBinding.getState();
104
+ this._notifySubscribers();
105
+ }, [threadId, threadBinding]);
106
+
107
+ const isMounted = useRef(false);
108
+ if (!isMounted.current) {
109
+ updateRuntime();
110
+ }
111
+
112
+ useEffect(() => {
113
+ isMounted.current = true;
114
+ updateRuntime();
115
+ return threadBinding.outerSubscribe(updateRuntime);
116
+ }, [threadBinding, updateRuntime]);
117
+
118
+ const aui = useAui();
119
+ const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);
120
+
121
+ useEffect(() => {
122
+ const runtimeCore = threadBinding.getState();
123
+ const setGetInitializePromise = (runtimeCore as Record<string, unknown>)[
124
+ "__internal_setGetInitializePromise"
125
+ ];
126
+ if (typeof setGetInitializePromise === "function") {
127
+ setGetInitializePromise.call(runtimeCore, () => initPromiseRef.current);
128
+ }
129
+ }, [threadBinding]);
130
+
131
+ useEffect(() => {
132
+ return runtime.threads.main.unstable_on("initialize", () => {
133
+ const state = aui.threadListItem().getState();
134
+ if (state.status === "new") {
135
+ initPromiseRef.current = aui.threadListItem().initialize();
136
+
137
+ const dispose = runtime.thread.unstable_on("runEnd", () => {
138
+ dispose();
139
+
140
+ aui.threadListItem().generateTitle();
141
+ });
142
+ }
143
+ });
144
+ }, [runtime, aui]);
145
+
146
+ return null;
147
+ };
148
+
149
+ private _OuterActiveThreadProvider: FC<{
150
+ threadId: string;
151
+ provider: ComponentType<PropsWithChildren>;
152
+ }> = memo(({ threadId, provider: Provider }) => {
153
+ const runtime = useMemo(
154
+ () => new ThreadListRuntimeImpl(this.parent).getItemById(threadId),
155
+ [threadId],
156
+ );
157
+
158
+ return (
159
+ <ThreadListItemRuntimeProvider runtime={runtime}>
160
+ <Provider>
161
+ <this._InnerActiveThreadProvider threadId={threadId} />
162
+ </Provider>
163
+ </ThreadListItemRuntimeProvider>
164
+ );
165
+ });
166
+
167
+ public __internal_RenderThreadRuntimes: FC<{
168
+ provider: ComponentType<PropsWithChildren>;
169
+ }> = ({ provider }) => {
170
+ this.useAliveThreadsKeysChanged(); // trigger re-render on alive threads change
171
+
172
+ return Array.from(this.instances.keys()).map((threadId) => (
173
+ <this._OuterActiveThreadProvider
174
+ key={threadId}
175
+ threadId={threadId}
176
+ provider={provider}
177
+ />
178
+ ));
179
+ };
180
+ }