octocms 0.4.13 → 0.4.16

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 (796) hide show
  1. package/dist/admin/AdminApp.d.ts +1 -1
  2. package/dist/admin/AdminApp.js +2 -2
  3. package/dist/admin/AdminApp.js.map +1 -1
  4. package/dist/admin/actions/agent.d.ts +3 -3
  5. package/dist/admin/actions/agent.js.map +1 -1
  6. package/dist/admin/actions/media.d.ts.map +1 -1
  7. package/dist/admin/actions/media.js +3 -1
  8. package/dist/admin/actions/media.js.map +1 -1
  9. package/dist/admin/pages/AdminErrorView.d.ts.map +1 -1
  10. package/dist/admin/pages/AdminErrorView.js +9 -9
  11. package/dist/admin/pages/AdminErrorView.js.map +1 -1
  12. package/dist/admin/pages/AdminLayout.d.ts +1 -1
  13. package/dist/admin/pages/AdminLayout.d.ts.map +1 -1
  14. package/dist/admin/pages/AdminLayout.js +2 -2
  15. package/dist/admin/pages/AdminLayout.js.map +1 -1
  16. package/dist/admin/pages/ChatPage.d.ts +3 -3
  17. package/dist/admin/pages/ChatPage.d.ts.map +1 -1
  18. package/dist/admin/pages/ChatPage.js +8 -5
  19. package/dist/admin/pages/ChatPage.js.map +1 -1
  20. package/dist/admin/pages/CollectionPage.d.ts.map +1 -1
  21. package/dist/admin/pages/CollectionPage.js +5 -1
  22. package/dist/admin/pages/CollectionPage.js.map +1 -1
  23. package/dist/admin/pages/ContentModelPage.d.ts.map +1 -1
  24. package/dist/admin/pages/ContentModelPage.js +5 -1
  25. package/dist/admin/pages/ContentModelPage.js.map +1 -1
  26. package/dist/admin/pages/ContentPage.d.ts.map +1 -1
  27. package/dist/admin/pages/ContentPage.js +5 -1
  28. package/dist/admin/pages/ContentPage.js.map +1 -1
  29. package/dist/admin/pages/ContentTypePage.d.ts.map +1 -1
  30. package/dist/admin/pages/ContentTypePage.js +6 -2
  31. package/dist/admin/pages/ContentTypePage.js.map +1 -1
  32. package/dist/admin/pages/EntryPage.d.ts.map +1 -1
  33. package/dist/admin/pages/EntryPage.js +5 -1
  34. package/dist/admin/pages/EntryPage.js.map +1 -1
  35. package/dist/admin/pages/MediaAssetPage.d.ts.map +1 -1
  36. package/dist/admin/pages/MediaAssetPage.js +6 -2
  37. package/dist/admin/pages/MediaAssetPage.js.map +1 -1
  38. package/dist/admin/pages/MediaPage.d.ts.map +1 -1
  39. package/dist/admin/pages/MediaPage.js +6 -2
  40. package/dist/admin/pages/MediaPage.js.map +1 -1
  41. package/dist/admin/theme/toggle.d.ts.map +1 -1
  42. package/dist/admin/theme/toggle.js +27 -27
  43. package/dist/admin/theme/toggle.js.map +1 -1
  44. package/dist/agent/chatSetup.d.ts +19 -0
  45. package/dist/agent/chatSetup.d.ts.map +1 -0
  46. package/dist/agent/chatSetup.js +119 -0
  47. package/dist/agent/chatSetup.js.map +1 -0
  48. package/dist/agent/featureFlag.d.ts +3 -3
  49. package/dist/agent/featureFlag.js.map +1 -1
  50. package/dist/agent/index.cjs +75 -5309
  51. package/dist/agent/index.cjs.map +1 -1
  52. package/dist/{agentDocs-M3R2CPUQ.js → agentDocs-QZ4NOQVH.js} +2 -2
  53. package/dist/{chunk-DCDFWNC6.js → chunk-I7VNI2IG.js} +4 -7
  54. package/dist/{chunk-DCDFWNC6.js.map → chunk-I7VNI2IG.js.map} +1 -1
  55. package/dist/chunk-TOUAHFDW.js +7 -0
  56. package/dist/{chunk-NAHOP7TG.js.map → chunk-TOUAHFDW.js.map} +1 -1
  57. package/dist/cli/index.js +4 -4
  58. package/dist/cli/lib/templates.js +3 -6
  59. package/dist/cli/lib/templates.js.map +1 -1
  60. package/dist/components/Chat/ChatAgentSetup.d.ts +7 -0
  61. package/dist/components/Chat/ChatAgentSetup.d.ts.map +1 -0
  62. package/dist/components/Chat/ChatAgentSetup.js +37 -0
  63. package/dist/components/Chat/ChatAgentSetup.js.map +1 -0
  64. package/dist/components/Chat/ChatPage.d.ts +6 -1
  65. package/dist/components/Chat/ChatPage.d.ts.map +1 -1
  66. package/dist/components/Chat/ChatPage.js +123 -128
  67. package/dist/components/Chat/ChatPage.js.map +1 -1
  68. package/dist/components/Chat/ChatSidebar.d.ts +10 -0
  69. package/dist/components/Chat/ChatSidebar.d.ts.map +1 -0
  70. package/dist/components/Chat/ChatSidebar.js +45 -0
  71. package/dist/components/Chat/ChatSidebar.js.map +1 -0
  72. package/dist/components/Chat/Composer.d.ts.map +1 -1
  73. package/dist/components/Chat/Composer.js +28 -45
  74. package/dist/components/Chat/Composer.js.map +1 -1
  75. package/dist/components/Chat/Message.d.ts.map +1 -1
  76. package/dist/components/Chat/Message.js +40 -39
  77. package/dist/components/Chat/Message.js.map +1 -1
  78. package/dist/components/Chat/ProposalCard.d.ts.map +1 -1
  79. package/dist/components/Chat/ProposalCard.js +56 -67
  80. package/dist/components/Chat/ProposalCard.js.map +1 -1
  81. package/dist/components/Chat/ToolCallCard.d.ts.map +1 -1
  82. package/dist/components/Chat/ToolCallCard.js +29 -38
  83. package/dist/components/Chat/ToolCallCard.js.map +1 -1
  84. package/dist/components/Chat/chatStorage.d.ts +64 -0
  85. package/dist/components/Chat/chatStorage.d.ts.map +1 -0
  86. package/dist/components/Chat/chatStorage.js +154 -0
  87. package/dist/components/Chat/chatStorage.js.map +1 -0
  88. package/dist/components/Chat/useChatHistory.d.ts +12 -0
  89. package/dist/components/Chat/useChatHistory.d.ts.map +1 -0
  90. package/dist/components/Chat/useChatHistory.js +196 -0
  91. package/dist/components/Chat/useChatHistory.js.map +1 -0
  92. package/dist/components/Chat/useChatStream.d.ts +6 -0
  93. package/dist/components/Chat/useChatStream.d.ts.map +1 -1
  94. package/dist/components/Chat/useChatStream.js +31 -2
  95. package/dist/components/Chat/useChatStream.js.map +1 -1
  96. package/dist/components/CommandK/CommandK.d.ts +1 -1
  97. package/dist/components/CommandK/CommandK.d.ts.map +1 -1
  98. package/dist/components/CommandK/CommandK.js +100 -116
  99. package/dist/components/CommandK/CommandK.js.map +1 -1
  100. package/dist/components/CommandK/parts.d.ts.map +1 -1
  101. package/dist/components/CommandK/parts.js +9 -11
  102. package/dist/components/CommandK/parts.js.map +1 -1
  103. package/dist/components/ContentModel/ConditionalBranchesEditor.d.ts.map +1 -1
  104. package/dist/components/ContentModel/ConditionalBranchesEditor.js +40 -45
  105. package/dist/components/ContentModel/ConditionalBranchesEditor.js.map +1 -1
  106. package/dist/components/ContentModel/ContentModelList.d.ts.map +1 -1
  107. package/dist/components/ContentModel/ContentModelList.js +65 -80
  108. package/dist/components/ContentModel/ContentModelList.js.map +1 -1
  109. package/dist/components/ContentModel/ContentTypeDetail.d.ts.map +1 -1
  110. package/dist/components/ContentModel/ContentTypeDetail.js +253 -280
  111. package/dist/components/ContentModel/ContentTypeDetail.js.map +1 -1
  112. package/dist/components/ContentModel/CreateContentTypeDialog.d.ts.map +1 -1
  113. package/dist/components/ContentModel/CreateContentTypeDialog.js +42 -30
  114. package/dist/components/ContentModel/CreateContentTypeDialog.js.map +1 -1
  115. package/dist/components/ContentModel/DeleteContentTypeDialog.d.ts.map +1 -1
  116. package/dist/components/ContentModel/DeleteContentTypeDialog.js +14 -15
  117. package/dist/components/ContentModel/DeleteContentTypeDialog.js.map +1 -1
  118. package/dist/components/ContentModel/DeleteFieldDialog.d.ts.map +1 -1
  119. package/dist/components/ContentModel/DeleteFieldDialog.js +27 -20
  120. package/dist/components/ContentModel/DeleteFieldDialog.js.map +1 -1
  121. package/dist/components/ContentModel/EditContentTypeDialog.d.ts.map +1 -1
  122. package/dist/components/ContentModel/EditContentTypeDialog.js +46 -34
  123. package/dist/components/ContentModel/EditContentTypeDialog.js.map +1 -1
  124. package/dist/components/ContentModel/FieldDialog.d.ts.map +1 -1
  125. package/dist/components/ContentModel/FieldDialog.js +95 -84
  126. package/dist/components/ContentModel/FieldDialog.js.map +1 -1
  127. package/dist/components/ContentModel/RichTextOptionsEditor.d.ts.map +1 -1
  128. package/dist/components/ContentModel/RichTextOptionsEditor.js +90 -81
  129. package/dist/components/ContentModel/RichTextOptionsEditor.js.map +1 -1
  130. package/dist/components/ContentModel/SchemaImpactList.d.ts.map +1 -1
  131. package/dist/components/ContentModel/SchemaImpactList.js +19 -36
  132. package/dist/components/ContentModel/SchemaImpactList.js.map +1 -1
  133. package/dist/components/ContentModel/SchemaOptionFieldInput.d.ts.map +1 -1
  134. package/dist/components/ContentModel/SchemaOptionFieldInput.js +63 -84
  135. package/dist/components/ContentModel/SchemaOptionFieldInput.js.map +1 -1
  136. package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts +3 -0
  137. package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.d.ts.map +1 -0
  138. package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js +15 -0
  139. package/dist/components/ContentModel/skeletons/ContentModelListPageSkeleton.js.map +1 -0
  140. package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts +3 -0
  141. package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.d.ts.map +1 -0
  142. package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js +11 -0
  143. package/dist/components/ContentModel/skeletons/ContentTypeDetailPageSkeleton.js.map +1 -0
  144. package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js +3 -3
  145. package/dist/components/ContentModel/skeletons/FieldTableSkeleton.js.map +1 -1
  146. package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.d.ts.map +1 -1
  147. package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js +4 -12
  148. package/dist/components/ContentModel/skeletons/SchemaTableSkeleton.js.map +1 -1
  149. package/dist/components/Dashboard/DashboardContent.d.ts.map +1 -1
  150. package/dist/components/Dashboard/DashboardContent.js +87 -114
  151. package/dist/components/Dashboard/DashboardContent.js.map +1 -1
  152. package/dist/components/Dashboard/RecentPullRequests.d.ts.map +1 -1
  153. package/dist/components/Dashboard/RecentPullRequests.js +33 -45
  154. package/dist/components/Dashboard/RecentPullRequests.js.map +1 -1
  155. package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts +2 -7
  156. package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.d.ts.map +1 -1
  157. package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js +5 -20
  158. package/dist/components/Dashboard/skeletons/ContentPageChromeSkeleton.js.map +1 -1
  159. package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js +9 -9
  160. package/dist/components/Dashboard/skeletons/ContentTableSkeleton.js.map +1 -1
  161. package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts +3 -0
  162. package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.d.ts.map +1 -0
  163. package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js +10 -0
  164. package/dist/components/Dashboard/skeletons/DashboardCollectionPageSkeleton.js.map +1 -0
  165. package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts +9 -0
  166. package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.d.ts.map +1 -0
  167. package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js +16 -0
  168. package/dist/components/Dashboard/skeletons/DashboardPageSkeleton.js.map +1 -0
  169. package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.d.ts.map +1 -1
  170. package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js +7 -18
  171. package/dist/components/Dashboard/skeletons/LeftPanelSkeleton.js.map +1 -1
  172. package/dist/components/DiffView/DiffHunk.d.ts.map +1 -1
  173. package/dist/components/DiffView/DiffHunk.js +12 -40
  174. package/dist/components/DiffView/DiffHunk.js.map +1 -1
  175. package/dist/components/DiffView/DiffView.d.ts.map +1 -1
  176. package/dist/components/DiffView/DiffView.js +33 -52
  177. package/dist/components/DiffView/DiffView.js.map +1 -1
  178. package/dist/components/EditPost/EditPost.d.ts.map +1 -1
  179. package/dist/components/EditPost/EditPost.js +139 -200
  180. package/dist/components/EditPost/EditPost.js.map +1 -1
  181. package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts +3 -0
  182. package/dist/components/EditPost/skeletons/EditPostPageSkeleton.d.ts.map +1 -0
  183. package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js +21 -0
  184. package/dist/components/EditPost/skeletons/EditPostPageSkeleton.js.map +1 -0
  185. package/dist/components/EditPost/skeletons/EntryFormSkeleton.d.ts.map +1 -1
  186. package/dist/components/EditPost/skeletons/EntryFormSkeleton.js +1 -9
  187. package/dist/components/EditPost/skeletons/EntryFormSkeleton.js.map +1 -1
  188. package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.d.ts.map +1 -1
  189. package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js +12 -20
  190. package/dist/components/EditPost/skeletons/EntrySidebarSkeleton.js.map +1 -1
  191. package/dist/components/ErrorBoundary/ErrorBoundary.d.ts.map +1 -0
  192. package/dist/components/{ErrorBoundary.js → ErrorBoundary/ErrorBoundary.js} +15 -21
  193. package/dist/components/ErrorBoundary/ErrorBoundary.js.map +1 -0
  194. package/dist/components/HistorySection/HistorySection.d.ts.map +1 -1
  195. package/dist/components/HistorySection/HistorySection.js +23 -42
  196. package/dist/components/HistorySection/HistorySection.js.map +1 -1
  197. package/dist/components/InlineEntryEditor/InlineEntryEditor.d.ts.map +1 -1
  198. package/dist/components/InlineEntryEditor/InlineEntryEditor.js +120 -123
  199. package/dist/components/InlineEntryEditor/InlineEntryEditor.js.map +1 -1
  200. package/dist/components/Layout/BranchSelectorDialog.d.ts +9 -0
  201. package/dist/components/Layout/BranchSelectorDialog.d.ts.map +1 -0
  202. package/dist/components/Layout/BranchSelectorDialog.js +130 -0
  203. package/dist/components/Layout/BranchSelectorDialog.js.map +1 -0
  204. package/dist/components/Layout/CreateBranchDialog.d.ts.map +1 -0
  205. package/dist/components/{CreateBranchDialog.js → Layout/CreateBranchDialog.js} +16 -16
  206. package/dist/components/Layout/CreateBranchDialog.js.map +1 -0
  207. package/dist/components/Layout/Layout.d.ts.map +1 -1
  208. package/dist/components/Layout/Layout.js +18 -26
  209. package/dist/components/Layout/Layout.js.map +1 -1
  210. package/dist/components/Layout/LeftNavItem.d.ts.map +1 -1
  211. package/dist/components/Layout/LeftNavItem.js +7 -7
  212. package/dist/components/Layout/LeftNavItem.js.map +1 -1
  213. package/dist/components/Layout/Page.d.ts +16 -0
  214. package/dist/components/Layout/Page.d.ts.map +1 -0
  215. package/dist/components/Layout/Page.js +47 -0
  216. package/dist/components/Layout/Page.js.map +1 -0
  217. package/dist/components/Layout/TopHeader.d.ts +1 -1
  218. package/dist/components/Layout/TopHeader.d.ts.map +1 -1
  219. package/dist/components/Layout/TopHeader.js +70 -165
  220. package/dist/components/Layout/TopHeader.js.map +1 -1
  221. package/dist/components/Layout/UserAccountDialog.d.ts +12 -0
  222. package/dist/components/Layout/UserAccountDialog.d.ts.map +1 -0
  223. package/dist/components/Layout/UserAccountDialog.js +48 -0
  224. package/dist/components/Layout/UserAccountDialog.js.map +1 -0
  225. package/dist/components/Layout/skeletons/AgentNavSkeleton.js +1 -1
  226. package/dist/components/Layout/skeletons/AgentNavSkeleton.js.map +1 -1
  227. package/dist/components/Layout/skeletons/BranchChipSkeleton.d.ts.map +1 -1
  228. package/dist/components/Layout/skeletons/BranchChipSkeleton.js +1 -8
  229. package/dist/components/Layout/skeletons/BranchChipSkeleton.js.map +1 -1
  230. package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts +3 -0
  231. package/dist/components/Layout/skeletons/NeutralPageSkeleton.d.ts.map +1 -0
  232. package/dist/components/Layout/skeletons/NeutralPageSkeleton.js +11 -0
  233. package/dist/components/Layout/skeletons/NeutralPageSkeleton.js.map +1 -0
  234. package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts +19 -0
  235. package/dist/components/Layout/skeletons/PageChromeSkeleton.d.ts.map +1 -0
  236. package/dist/components/Layout/skeletons/PageChromeSkeleton.js +31 -0
  237. package/dist/components/Layout/skeletons/PageChromeSkeleton.js.map +1 -0
  238. package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts +9 -0
  239. package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.d.ts.map +1 -0
  240. package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js +15 -0
  241. package/dist/components/Layout/skeletons/RouteMainSlotSkeleton.js.map +1 -0
  242. package/dist/components/Layout/skeletons/TopHeaderSkeleton.d.ts.map +1 -1
  243. package/dist/components/Layout/skeletons/TopHeaderSkeleton.js +10 -17
  244. package/dist/components/Layout/skeletons/TopHeaderSkeleton.js.map +1 -1
  245. package/dist/components/Layout/skeletons/routeSkeletons.d.ts +16 -0
  246. package/dist/components/Layout/skeletons/routeSkeletons.d.ts.map +1 -0
  247. package/dist/components/Layout/skeletons/routeSkeletons.js +48 -0
  248. package/dist/components/Layout/skeletons/routeSkeletons.js.map +1 -0
  249. package/dist/components/LinkedBySection/LinkedBySection.js +13 -13
  250. package/dist/components/LinkedBySection/LinkedBySection.js.map +1 -1
  251. package/dist/components/MediaAsset/MediaAsset.d.ts +1 -1
  252. package/dist/components/MediaAsset/MediaAsset.d.ts.map +1 -1
  253. package/dist/components/MediaAsset/MediaAsset.js +126 -136
  254. package/dist/components/MediaAsset/MediaAsset.js.map +1 -1
  255. package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts +3 -0
  256. package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.d.ts.map +1 -0
  257. package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js +21 -0
  258. package/dist/components/MediaAsset/skeletons/MediaAssetPageSkeleton.js.map +1 -0
  259. package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.d.ts.map +1 -1
  260. package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js +26 -22
  261. package/dist/components/MediaAsset/skeletons/MediaMetadataFormSkeleton.js.map +1 -1
  262. package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.d.ts.map +1 -1
  263. package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js +1 -9
  264. package/dist/components/MediaAsset/skeletons/MediaPreviewSkeleton.js.map +1 -1
  265. package/dist/components/MediaManager/CreateFolderDialog.d.ts.map +1 -1
  266. package/dist/components/MediaManager/CreateFolderDialog.js +15 -8
  267. package/dist/components/MediaManager/CreateFolderDialog.js.map +1 -1
  268. package/dist/components/MediaManager/DeleteFolderDialog.d.ts.map +1 -1
  269. package/dist/components/MediaManager/DeleteFolderDialog.js +1 -2
  270. package/dist/components/MediaManager/DeleteFolderDialog.js.map +1 -1
  271. package/dist/components/MediaManager/MarkdownImageEditToolbar.d.ts.map +1 -1
  272. package/dist/components/MediaManager/MarkdownImageEditToolbar.js +7 -9
  273. package/dist/components/MediaManager/MarkdownImageEditToolbar.js.map +1 -1
  274. package/dist/components/MediaManager/MarkdownInsertImageDialog.d.ts.map +1 -1
  275. package/dist/components/MediaManager/MarkdownInsertImageDialog.js +6 -9
  276. package/dist/components/MediaManager/MarkdownInsertImageDialog.js.map +1 -1
  277. package/dist/components/MediaManager/MediaLeftPanel.d.ts.map +1 -1
  278. package/dist/components/MediaManager/MediaLeftPanel.js +21 -23
  279. package/dist/components/MediaManager/MediaLeftPanel.js.map +1 -1
  280. package/dist/components/MediaManager/MediaListTable.d.ts.map +1 -1
  281. package/dist/components/MediaManager/MediaListTable.js +15 -21
  282. package/dist/components/MediaManager/MediaListTable.js.map +1 -1
  283. package/dist/components/MediaManager/MediaManager.d.ts.map +1 -1
  284. package/dist/components/MediaManager/MediaManager.js +101 -151
  285. package/dist/components/MediaManager/MediaManager.js.map +1 -1
  286. package/dist/components/MediaManager/MediaSelectDialog.js +22 -64
  287. package/dist/components/MediaManager/MediaSelectDialog.js.map +1 -1
  288. package/dist/components/MediaManager/MediaUploadBar.d.ts.map +1 -1
  289. package/dist/components/MediaManager/MediaUploadBar.js +9 -10
  290. package/dist/components/MediaManager/MediaUploadBar.js.map +1 -1
  291. package/dist/components/MediaManager/MediaUploadDialog.d.ts.map +1 -1
  292. package/dist/components/MediaManager/MediaUploadDialog.js +18 -11
  293. package/dist/components/MediaManager/MediaUploadDialog.js.map +1 -1
  294. package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts +8 -0
  295. package/dist/components/MediaManager/MediaViewModeSwitcher.d.ts.map +1 -0
  296. package/dist/components/MediaManager/MediaViewModeSwitcher.js +14 -0
  297. package/dist/components/MediaManager/MediaViewModeSwitcher.js.map +1 -0
  298. package/dist/components/MediaManager/skeletons/MediaGridSkeleton.d.ts.map +1 -1
  299. package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js +4 -12
  300. package/dist/components/MediaManager/skeletons/MediaGridSkeleton.js.map +1 -1
  301. package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.d.ts.map +1 -1
  302. package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js +5 -13
  303. package/dist/components/MediaManager/skeletons/MediaLeftPanelSkeleton.js.map +1 -1
  304. package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.d.ts.map +1 -1
  305. package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js +7 -15
  306. package/dist/components/MediaManager/skeletons/MediaListTableSkeleton.js.map +1 -1
  307. package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts +3 -0
  308. package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.d.ts.map +1 -0
  309. package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js +15 -0
  310. package/dist/components/MediaManager/skeletons/MediaManagerMainSkeleton.js.map +1 -0
  311. package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts +3 -0
  312. package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.d.ts.map +1 -0
  313. package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js +21 -0
  314. package/dist/components/MediaManager/skeletons/MediaManagerPageSkeleton.js.map +1 -0
  315. package/dist/components/public/MarkdownContent.d.ts.map +1 -1
  316. package/dist/components/public/MarkdownContent.js +1 -2
  317. package/dist/components/public/MarkdownContent.js.map +1 -1
  318. package/dist/components/public/RichTextContent.d.ts.map +1 -1
  319. package/dist/components/public/RichTextContent.js +19 -8
  320. package/dist/components/public/RichTextContent.js.map +1 -1
  321. package/dist/components/public/SearchBox.d.ts.map +1 -1
  322. package/dist/components/public/SearchBox.js +32 -60
  323. package/dist/components/public/SearchBox.js.map +1 -1
  324. package/dist/components/public/index.cjs +6 -413
  325. package/dist/components/public/index.cjs.map +1 -1
  326. package/dist/components/skeletons/MainSlotSkeleton.d.ts +0 -7
  327. package/dist/components/skeletons/MainSlotSkeleton.d.ts.map +1 -1
  328. package/dist/components/skeletons/MainSlotSkeleton.js +4 -17
  329. package/dist/components/skeletons/MainSlotSkeleton.js.map +1 -1
  330. package/dist/components/skeletons/blocks.d.ts.map +1 -1
  331. package/dist/components/skeletons/blocks.js +15 -7
  332. package/dist/components/skeletons/blocks.js.map +1 -1
  333. package/dist/components/skeletons/index.d.ts +4 -4
  334. package/dist/components/skeletons/index.d.ts.map +1 -1
  335. package/dist/components/skeletons/index.js +1 -2
  336. package/dist/components/skeletons/index.js.map +1 -1
  337. package/dist/components/skeletons/primitives.d.ts +2 -2
  338. package/dist/components/skeletons/primitives.d.ts.map +1 -1
  339. package/dist/components/skeletons/primitives.js +3 -3
  340. package/dist/components/skeletons/primitives.js.map +1 -1
  341. package/dist/components/test/dndTestUtils.d.ts +7 -0
  342. package/dist/components/test/dndTestUtils.d.ts.map +1 -0
  343. package/dist/components/test/dndTestUtils.js +15 -0
  344. package/dist/components/test/dndTestUtils.js.map +1 -0
  345. package/dist/components/ui/Avatar/Avatar.d.ts +5 -0
  346. package/dist/components/ui/Avatar/Avatar.d.ts.map +1 -0
  347. package/dist/components/ui/Avatar/Avatar.js +63 -0
  348. package/dist/components/ui/Avatar/Avatar.js.map +1 -0
  349. package/dist/components/ui/{branch-chip.d.ts → BranchChip/BranchChip.d.ts} +2 -5
  350. package/dist/components/ui/BranchChip/BranchChip.d.ts.map +1 -0
  351. package/dist/components/ui/BranchChip/BranchChip.js +47 -0
  352. package/dist/components/ui/BranchChip/BranchChip.js.map +1 -0
  353. package/dist/components/ui/Button/Button.d.ts +15 -0
  354. package/dist/components/ui/Button/Button.d.ts.map +1 -0
  355. package/dist/components/ui/Button/Button.js +49 -0
  356. package/dist/components/ui/Button/Button.js.map +1 -0
  357. package/dist/components/ui/Card/Card.d.ts +6 -0
  358. package/dist/components/ui/Card/Card.d.ts.map +1 -0
  359. package/dist/components/ui/{card.js → Card/Card.js} +12 -22
  360. package/dist/components/ui/Card/Card.js.map +1 -0
  361. package/dist/components/ui/{chip.d.ts → Chip/Chip.d.ts} +1 -1
  362. package/dist/components/ui/Chip/Chip.d.ts.map +1 -0
  363. package/dist/components/ui/Chip/Chip.js +24 -0
  364. package/dist/components/ui/Chip/Chip.js.map +1 -0
  365. package/dist/components/ui/Dialog/Dialog.d.ts +32 -0
  366. package/dist/components/ui/Dialog/Dialog.d.ts.map +1 -0
  367. package/dist/components/ui/Dialog/Dialog.js +194 -0
  368. package/dist/components/ui/Dialog/Dialog.js.map +1 -0
  369. package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts +66 -0
  370. package/dist/components/ui/DropdownMenu/DropdownMenu.d.ts.map +1 -0
  371. package/dist/components/ui/DropdownMenu/DropdownMenu.js +308 -0
  372. package/dist/components/ui/DropdownMenu/DropdownMenu.js.map +1 -0
  373. package/dist/components/ui/{field.d.ts → FormField/Field.d.ts} +1 -1
  374. package/dist/components/ui/FormField/Field.d.ts.map +1 -0
  375. package/dist/components/ui/FormField/Field.js +41 -0
  376. package/dist/components/ui/FormField/Field.js.map +1 -0
  377. package/dist/components/{FieldShell.d.ts → ui/FormField/FieldShell.d.ts} +2 -2
  378. package/dist/components/ui/FormField/FieldShell.d.ts.map +1 -0
  379. package/dist/components/ui/FormField/FieldShell.js +29 -0
  380. package/dist/components/ui/FormField/FieldShell.js.map +1 -0
  381. package/dist/components/ui/FormField/FormBooleanField.d.ts.map +1 -0
  382. package/dist/components/ui/FormField/FormBooleanField.js +56 -0
  383. package/dist/components/ui/FormField/FormBooleanField.js.map +1 -0
  384. package/dist/components/ui/FormField/FormColorField.d.ts.map +1 -0
  385. package/dist/components/{FormColorField.js → ui/FormField/FormColorField.js} +10 -13
  386. package/dist/components/ui/FormField/FormColorField.js.map +1 -0
  387. package/dist/components/{FormConditionalField.d.ts → ui/FormField/FormConditionalField.d.ts} +1 -1
  388. package/dist/components/ui/FormField/FormConditionalField.d.ts.map +1 -0
  389. package/dist/components/{FormConditionalField.js → ui/FormField/FormConditionalField.js} +61 -58
  390. package/dist/components/ui/FormField/FormConditionalField.js.map +1 -0
  391. package/dist/components/ui/FormField/FormDatetimeField.d.ts.map +1 -0
  392. package/dist/components/ui/FormField/FormDatetimeField.js +48 -0
  393. package/dist/components/ui/FormField/FormDatetimeField.js.map +1 -0
  394. package/dist/components/{FormFields.d.ts → ui/FormField/FormFields.d.ts} +1 -1
  395. package/dist/components/ui/FormField/FormFields.d.ts.map +1 -0
  396. package/dist/components/{FormFields.js → ui/FormField/FormFields.js} +6 -6
  397. package/dist/components/ui/FormField/FormFields.js.map +1 -0
  398. package/dist/components/{FormImageField.d.ts → ui/FormField/FormImageField.d.ts} +1 -1
  399. package/dist/components/ui/FormField/FormImageField.d.ts.map +1 -0
  400. package/dist/components/{FormImageField.js → ui/FormField/FormImageField.js} +25 -30
  401. package/dist/components/ui/FormField/FormImageField.js.map +1 -0
  402. package/dist/components/ui/FormField/FormJsonField.d.ts.map +1 -0
  403. package/dist/components/{FormJsonField.js → ui/FormField/FormJsonField.js} +7 -10
  404. package/dist/components/ui/FormField/FormJsonField.js.map +1 -0
  405. package/dist/components/ui/FormField/FormMarkdownField.d.ts.map +1 -0
  406. package/dist/components/{FormMarkdownField.js → ui/FormField/FormMarkdownField.js} +11 -20
  407. package/dist/components/ui/FormField/FormMarkdownField.js.map +1 -0
  408. package/dist/components/ui/FormField/FormNumberField.d.ts.map +1 -0
  409. package/dist/components/ui/FormField/FormNumberField.js +38 -0
  410. package/dist/components/ui/FormField/FormNumberField.js.map +1 -0
  411. package/dist/components/{FormReferenceField.d.ts → ui/FormField/FormReferenceField.d.ts} +1 -1
  412. package/dist/components/ui/FormField/FormReferenceField.d.ts.map +1 -0
  413. package/dist/components/{FormReferenceField.js → ui/FormField/FormReferenceField.js} +109 -118
  414. package/dist/components/ui/FormField/FormReferenceField.js.map +1 -0
  415. package/dist/components/{FormRichTextField.d.ts → ui/FormField/FormRichTextField.d.ts} +1 -1
  416. package/dist/components/ui/FormField/FormRichTextField.d.ts.map +1 -0
  417. package/dist/components/{FormRichTextField.js → ui/FormField/FormRichTextField.js} +28 -33
  418. package/dist/components/ui/FormField/FormRichTextField.js.map +1 -0
  419. package/dist/components/{FormSelectField.d.ts → ui/FormField/FormSelectField.d.ts} +1 -1
  420. package/dist/components/ui/FormField/FormSelectField.d.ts.map +1 -0
  421. package/dist/components/{FormSelectField.js → ui/FormField/FormSelectField.js} +11 -23
  422. package/dist/components/ui/FormField/FormSelectField.js.map +1 -0
  423. package/dist/components/ui/FormField/FormSlugField.d.ts.map +1 -0
  424. package/dist/components/{FormSlugField.js → ui/FormField/FormSlugField.js} +21 -26
  425. package/dist/components/ui/FormField/FormSlugField.js.map +1 -0
  426. package/dist/components/ui/FormField/FormStringField.d.ts.map +1 -0
  427. package/dist/components/ui/FormField/FormStringField.js +23 -0
  428. package/dist/components/ui/FormField/FormStringField.js.map +1 -0
  429. package/dist/components/ui/FormField/FormStringListField.d.ts.map +1 -0
  430. package/dist/components/{FormStringListField.js → ui/FormField/FormStringListField.js} +14 -25
  431. package/dist/components/ui/FormField/FormStringListField.js.map +1 -0
  432. package/dist/components/ui/FormField/FormTextField.d.ts.map +1 -0
  433. package/dist/components/ui/FormField/FormTextField.js +35 -0
  434. package/dist/components/ui/FormField/FormTextField.js.map +1 -0
  435. package/dist/components/ui/FormField/FormUrlField.d.ts.map +1 -0
  436. package/dist/components/ui/FormField/FormUrlField.js +26 -0
  437. package/dist/components/ui/FormField/FormUrlField.js.map +1 -0
  438. package/dist/components/{richtext → ui/FormField/richtext}/ComponentEmbedEditor.d.ts +1 -1
  439. package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.d.ts.map +1 -0
  440. package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js +165 -0
  441. package/dist/components/ui/FormField/richtext/ComponentEmbedEditor.js.map +1 -0
  442. package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.d.ts.map +1 -0
  443. package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.js +25 -39
  444. package/dist/components/ui/FormField/richtext/ConditionEmbedEditor.js.map +1 -0
  445. package/dist/components/ui/FormField/richtext/ImageEmbedEditor.d.ts.map +1 -0
  446. package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.js +77 -56
  447. package/dist/components/ui/FormField/richtext/ImageEmbedEditor.js.map +1 -0
  448. package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.d.ts.map +1 -0
  449. package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.js +55 -43
  450. package/dist/components/ui/FormField/richtext/ReferenceEmbedEditor.js.map +1 -0
  451. package/dist/components/ui/FormField/richtext/SlashCommandMenu.d.ts.map +1 -0
  452. package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.js +21 -33
  453. package/dist/components/ui/FormField/richtext/SlashCommandMenu.js.map +1 -0
  454. package/dist/components/ui/FormField/richtext/VariableEmbedEditor.d.ts.map +1 -0
  455. package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js +61 -0
  456. package/dist/components/ui/FormField/richtext/VariableEmbedEditor.js.map +1 -0
  457. package/dist/components/ui/Icon/Icon.d.ts +77 -0
  458. package/dist/components/ui/Icon/Icon.d.ts.map +1 -0
  459. package/dist/components/ui/Icon/Icon.js +618 -0
  460. package/dist/components/ui/Icon/Icon.js.map +1 -0
  461. package/dist/components/ui/{input.d.ts → Input/Input.d.ts} +1 -1
  462. package/dist/components/ui/Input/Input.d.ts.map +1 -0
  463. package/dist/components/ui/Input/Input.js +25 -0
  464. package/dist/components/ui/Input/Input.js.map +1 -0
  465. package/dist/components/ui/{kbd.d.ts → Kbd/Kbd.d.ts} +1 -1
  466. package/dist/components/ui/Kbd/Kbd.d.ts.map +1 -0
  467. package/dist/components/ui/Kbd/Kbd.js +19 -0
  468. package/dist/components/ui/Kbd/Kbd.js.map +1 -0
  469. package/dist/components/ui/Label/Label.d.ts +3 -0
  470. package/dist/components/ui/Label/Label.d.ts.map +1 -0
  471. package/dist/components/ui/Label/Label.js +20 -0
  472. package/dist/components/ui/Label/Label.js.map +1 -0
  473. package/dist/components/ui/Portal/Portal.d.ts +8 -0
  474. package/dist/components/ui/Portal/Portal.d.ts.map +1 -0
  475. package/dist/components/ui/Portal/Portal.js +14 -0
  476. package/dist/components/ui/Portal/Portal.js.map +1 -0
  477. package/dist/components/ui/Select/Select.d.ts +33 -0
  478. package/dist/components/ui/Select/Select.d.ts.map +1 -0
  479. package/dist/components/ui/Select/Select.js +280 -0
  480. package/dist/components/ui/Select/Select.js.map +1 -0
  481. package/dist/components/ui/Slot/Slot.d.ts +6 -0
  482. package/dist/components/ui/Slot/Slot.d.ts.map +1 -0
  483. package/dist/components/ui/Slot/Slot.js +39 -0
  484. package/dist/components/ui/Slot/Slot.js.map +1 -0
  485. package/dist/components/ui/{status-badge.d.ts → StatusBadge/StatusBadge.d.ts} +2 -2
  486. package/dist/components/ui/StatusBadge/StatusBadge.d.ts.map +1 -0
  487. package/dist/components/ui/{status-badge.js → StatusBadge/StatusBadge.js} +8 -9
  488. package/dist/components/ui/StatusBadge/StatusBadge.js.map +1 -0
  489. package/dist/components/ui/Switcher/Switcher.d.ts +9 -0
  490. package/dist/components/ui/Switcher/Switcher.d.ts.map +1 -0
  491. package/dist/components/ui/Switcher/Switcher.js +75 -0
  492. package/dist/components/ui/Switcher/Switcher.js.map +1 -0
  493. package/dist/components/ui/{table.d.ts → Table/Table.d.ts} +1 -1
  494. package/dist/components/ui/Table/Table.d.ts.map +1 -0
  495. package/dist/components/ui/{table.js → Table/Table.js} +11 -29
  496. package/dist/components/ui/Table/Table.js.map +1 -0
  497. package/dist/components/ui/Tabs/Tabs.d.ts +16 -0
  498. package/dist/components/ui/Tabs/Tabs.d.ts.map +1 -0
  499. package/dist/components/ui/Tabs/Tabs.js +96 -0
  500. package/dist/components/ui/Tabs/Tabs.js.map +1 -0
  501. package/dist/components/ui/{textarea.d.ts → Textarea/Textarea.d.ts} +1 -1
  502. package/dist/components/ui/Textarea/Textarea.d.ts.map +1 -0
  503. package/dist/components/ui/Textarea/Textarea.js +16 -0
  504. package/dist/components/ui/Textarea/Textarea.js.map +1 -0
  505. package/dist/components/ui/Toast/Toast.d.ts +21 -0
  506. package/dist/components/ui/Toast/Toast.d.ts.map +1 -0
  507. package/dist/components/ui/Toast/Toast.js +98 -0
  508. package/dist/components/ui/Toast/Toast.js.map +1 -0
  509. package/dist/components/ui/{toaster.d.ts → Toaster/Toaster.d.ts} +1 -1
  510. package/dist/components/ui/Toaster/Toaster.d.ts.map +1 -0
  511. package/dist/components/ui/Toaster/Toaster.js +27 -0
  512. package/dist/components/ui/Toaster/Toaster.js.map +1 -0
  513. package/dist/components/ui/index.d.ts +45 -31
  514. package/dist/components/ui/index.d.ts.map +1 -1
  515. package/dist/components/ui/index.js +76 -36
  516. package/dist/components/ui/index.js.map +1 -1
  517. package/dist/config.cjs +4 -99
  518. package/dist/config.cjs.map +1 -1
  519. package/dist/defineConfig.cjs +0 -2
  520. package/dist/defineConfig.cjs.map +1 -1
  521. package/dist/globals.css +9648 -430
  522. package/dist/hooks/useComposedRefs.d.ts +5 -0
  523. package/dist/hooks/useComposedRefs.d.ts.map +1 -0
  524. package/dist/hooks/useComposedRefs.js +23 -0
  525. package/dist/hooks/useComposedRefs.js.map +1 -0
  526. package/dist/hooks/useControllableState.d.ts +8 -0
  527. package/dist/hooks/useControllableState.d.ts.map +1 -0
  528. package/dist/hooks/useControllableState.js +28 -0
  529. package/dist/hooks/useControllableState.js.map +1 -0
  530. package/dist/hooks/usePopoverContent.d.ts +26 -0
  531. package/dist/hooks/usePopoverContent.d.ts.map +1 -0
  532. package/dist/hooks/usePopoverContent.js +44 -0
  533. package/dist/hooks/usePopoverContent.js.map +1 -0
  534. package/dist/hooks/useToast.d.ts +4 -4
  535. package/dist/hooks/useToast.d.ts.map +1 -1
  536. package/dist/hooks/useToast.js +1 -3
  537. package/dist/hooks/useToast.js.map +1 -1
  538. package/dist/index.cjs +11 -9506
  539. package/dist/index.cjs.map +1 -1
  540. package/dist/{init-KWH66PKY.js → init-KNIWQGJL.js} +3 -18
  541. package/dist/init-KNIWQGJL.js.map +1 -0
  542. package/dist/lib/configStore.cjs +1 -3
  543. package/dist/lib/configStore.cjs.map +1 -1
  544. package/dist/lib/slugField.d.ts.map +1 -1
  545. package/dist/lib/slugField.js +3 -3
  546. package/dist/lib/slugField.js.map +1 -1
  547. package/dist/lib/slugify.d.ts +13 -0
  548. package/dist/lib/slugify.d.ts.map +1 -0
  549. package/dist/lib/slugify.js +8 -0
  550. package/dist/lib/slugify.js.map +1 -0
  551. package/dist/lib/utils.d.ts +5 -9
  552. package/dist/lib/utils.d.ts.map +1 -1
  553. package/dist/lib/utils.js +29 -3
  554. package/dist/lib/utils.js.map +1 -1
  555. package/dist/query.cjs +58 -9011
  556. package/dist/query.cjs.map +1 -1
  557. package/dist/types.cjs +0 -2
  558. package/dist/types.cjs.map +1 -1
  559. package/dist/types.d.ts +3 -1
  560. package/dist/types.d.ts.map +1 -1
  561. package/dist/{update-QNJRYPMC.js → update-QALIQG76.js} +2 -2
  562. package/dist/withOctoCMS.cjs +2 -36
  563. package/dist/withOctoCMS.cjs.map +1 -1
  564. package/globals.css +9648 -430
  565. package/package.json +1 -16
  566. package/dist/chunk-NAHOP7TG.js +0 -7
  567. package/dist/components/ContentModel/ContentModelList.skeleton.d.ts +0 -5
  568. package/dist/components/ContentModel/ContentModelList.skeleton.d.ts.map +0 -1
  569. package/dist/components/ContentModel/ContentModelList.skeleton.js +0 -16
  570. package/dist/components/ContentModel/ContentModelList.skeleton.js.map +0 -1
  571. package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts +0 -5
  572. package/dist/components/ContentModel/ContentTypeDetail.skeleton.d.ts.map +0 -1
  573. package/dist/components/ContentModel/ContentTypeDetail.skeleton.js +0 -22
  574. package/dist/components/ContentModel/ContentTypeDetail.skeleton.js.map +0 -1
  575. package/dist/components/ContentTypes.d.ts +0 -7
  576. package/dist/components/ContentTypes.d.ts.map +0 -1
  577. package/dist/components/ContentTypes.js +0 -132
  578. package/dist/components/ContentTypes.js.map +0 -1
  579. package/dist/components/CreateBranchDialog.d.ts.map +0 -1
  580. package/dist/components/CreateBranchDialog.js.map +0 -1
  581. package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts +0 -3
  582. package/dist/components/Dashboard/DashboardContent.collection.skeleton.d.ts.map +0 -1
  583. package/dist/components/Dashboard/DashboardContent.collection.skeleton.js +0 -10
  584. package/dist/components/Dashboard/DashboardContent.collection.skeleton.js.map +0 -1
  585. package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts +0 -7
  586. package/dist/components/Dashboard/DashboardContent.list.skeleton.d.ts.map +0 -1
  587. package/dist/components/Dashboard/DashboardContent.list.skeleton.js +0 -22
  588. package/dist/components/Dashboard/DashboardContent.list.skeleton.js.map +0 -1
  589. package/dist/components/Dashboard/DashboardContent.skeleton.d.ts +0 -2
  590. package/dist/components/Dashboard/DashboardContent.skeleton.d.ts.map +0 -1
  591. package/dist/components/Dashboard/DashboardContent.skeleton.js +0 -13
  592. package/dist/components/Dashboard/DashboardContent.skeleton.js.map +0 -1
  593. package/dist/components/EditPost/EditPost.skeleton.d.ts +0 -5
  594. package/dist/components/EditPost/EditPost.skeleton.d.ts.map +0 -1
  595. package/dist/components/EditPost/EditPost.skeleton.js +0 -34
  596. package/dist/components/EditPost/EditPost.skeleton.js.map +0 -1
  597. package/dist/components/ErrorBoundary.d.ts.map +0 -1
  598. package/dist/components/ErrorBoundary.js.map +0 -1
  599. package/dist/components/FieldHintAndError.d.ts +0 -8
  600. package/dist/components/FieldHintAndError.d.ts.map +0 -1
  601. package/dist/components/FieldHintAndError.js +0 -14
  602. package/dist/components/FieldHintAndError.js.map +0 -1
  603. package/dist/components/FieldLabel.d.ts +0 -11
  604. package/dist/components/FieldLabel.d.ts.map +0 -1
  605. package/dist/components/FieldLabel.js +0 -17
  606. package/dist/components/FieldLabel.js.map +0 -1
  607. package/dist/components/FieldShell.d.ts.map +0 -1
  608. package/dist/components/FieldShell.js +0 -29
  609. package/dist/components/FieldShell.js.map +0 -1
  610. package/dist/components/FileExplorer/FileExplorer.d.ts +0 -8
  611. package/dist/components/FileExplorer/FileExplorer.d.ts.map +0 -1
  612. package/dist/components/FileExplorer/FileExplorer.js +0 -68
  613. package/dist/components/FileExplorer/FileExplorer.js.map +0 -1
  614. package/dist/components/FormBooleanField.d.ts.map +0 -1
  615. package/dist/components/FormBooleanField.js +0 -52
  616. package/dist/components/FormBooleanField.js.map +0 -1
  617. package/dist/components/FormColorField.d.ts.map +0 -1
  618. package/dist/components/FormColorField.js.map +0 -1
  619. package/dist/components/FormConditionalField.d.ts.map +0 -1
  620. package/dist/components/FormConditionalField.js.map +0 -1
  621. package/dist/components/FormDatetimeField.d.ts.map +0 -1
  622. package/dist/components/FormDatetimeField.js +0 -42
  623. package/dist/components/FormDatetimeField.js.map +0 -1
  624. package/dist/components/FormFields.d.ts.map +0 -1
  625. package/dist/components/FormFields.js.map +0 -1
  626. package/dist/components/FormImageField.d.ts.map +0 -1
  627. package/dist/components/FormImageField.js.map +0 -1
  628. package/dist/components/FormJsonField.d.ts.map +0 -1
  629. package/dist/components/FormJsonField.js.map +0 -1
  630. package/dist/components/FormMarkdownField.d.ts.map +0 -1
  631. package/dist/components/FormMarkdownField.js.map +0 -1
  632. package/dist/components/FormNumberField.d.ts.map +0 -1
  633. package/dist/components/FormNumberField.js +0 -43
  634. package/dist/components/FormNumberField.js.map +0 -1
  635. package/dist/components/FormReferenceField.d.ts.map +0 -1
  636. package/dist/components/FormReferenceField.js.map +0 -1
  637. package/dist/components/FormRichTextField.d.ts.map +0 -1
  638. package/dist/components/FormRichTextField.js.map +0 -1
  639. package/dist/components/FormSelectField.d.ts.map +0 -1
  640. package/dist/components/FormSelectField.js.map +0 -1
  641. package/dist/components/FormSlugField.d.ts.map +0 -1
  642. package/dist/components/FormSlugField.js.map +0 -1
  643. package/dist/components/FormStringField.d.ts.map +0 -1
  644. package/dist/components/FormStringField.js +0 -28
  645. package/dist/components/FormStringField.js.map +0 -1
  646. package/dist/components/FormStringListField.d.ts.map +0 -1
  647. package/dist/components/FormStringListField.js.map +0 -1
  648. package/dist/components/FormTextField.d.ts.map +0 -1
  649. package/dist/components/FormTextField.js +0 -40
  650. package/dist/components/FormTextField.js.map +0 -1
  651. package/dist/components/FormUrlField.d.ts.map +0 -1
  652. package/dist/components/FormUrlField.js +0 -31
  653. package/dist/components/FormUrlField.js.map +0 -1
  654. package/dist/components/Layout/PageBar.d.ts +0 -10
  655. package/dist/components/Layout/PageBar.d.ts.map +0 -1
  656. package/dist/components/Layout/PageBar.js +0 -43
  657. package/dist/components/Layout/PageBar.js.map +0 -1
  658. package/dist/components/Layout/PageShell.d.ts +0 -30
  659. package/dist/components/Layout/PageShell.d.ts.map +0 -1
  660. package/dist/components/Layout/PageShell.js +0 -33
  661. package/dist/components/Layout/PageShell.js.map +0 -1
  662. package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts +0 -3
  663. package/dist/components/MediaAsset/MediaAsset.skeleton.d.ts.map +0 -1
  664. package/dist/components/MediaAsset/MediaAsset.skeleton.js +0 -42
  665. package/dist/components/MediaAsset/MediaAsset.skeleton.js.map +0 -1
  666. package/dist/components/MediaManager/MediaManager.skeleton.d.ts +0 -3
  667. package/dist/components/MediaManager/MediaManager.skeleton.d.ts.map +0 -1
  668. package/dist/components/MediaManager/MediaManager.skeleton.js +0 -30
  669. package/dist/components/MediaManager/MediaManager.skeleton.js.map +0 -1
  670. package/dist/components/StatusBadge.d.ts +0 -2
  671. package/dist/components/StatusBadge.d.ts.map +0 -1
  672. package/dist/components/StatusBadge.js +0 -7
  673. package/dist/components/StatusBadge.js.map +0 -1
  674. package/dist/components/richtext/ComponentEmbedEditor.d.ts.map +0 -1
  675. package/dist/components/richtext/ComponentEmbedEditor.js +0 -153
  676. package/dist/components/richtext/ComponentEmbedEditor.js.map +0 -1
  677. package/dist/components/richtext/ConditionEmbedEditor.d.ts.map +0 -1
  678. package/dist/components/richtext/ConditionEmbedEditor.js.map +0 -1
  679. package/dist/components/richtext/ImageEmbedEditor.d.ts.map +0 -1
  680. package/dist/components/richtext/ImageEmbedEditor.js.map +0 -1
  681. package/dist/components/richtext/ReferenceEmbedEditor.d.ts.map +0 -1
  682. package/dist/components/richtext/ReferenceEmbedEditor.js.map +0 -1
  683. package/dist/components/richtext/SlashCommandMenu.d.ts.map +0 -1
  684. package/dist/components/richtext/SlashCommandMenu.js.map +0 -1
  685. package/dist/components/richtext/VariableEmbedEditor.d.ts.map +0 -1
  686. package/dist/components/richtext/VariableEmbedEditor.js +0 -58
  687. package/dist/components/richtext/VariableEmbedEditor.js.map +0 -1
  688. package/dist/components/ui/avatar-stack.d.ts +0 -13
  689. package/dist/components/ui/avatar-stack.d.ts.map +0 -1
  690. package/dist/components/ui/avatar-stack.js +0 -27
  691. package/dist/components/ui/avatar-stack.js.map +0 -1
  692. package/dist/components/ui/avatar.d.ts +0 -7
  693. package/dist/components/ui/avatar.d.ts.map +0 -1
  694. package/dist/components/ui/avatar.js +0 -45
  695. package/dist/components/ui/avatar.js.map +0 -1
  696. package/dist/components/ui/banner.d.ts +0 -13
  697. package/dist/components/ui/banner.d.ts.map +0 -1
  698. package/dist/components/ui/banner.js +0 -24
  699. package/dist/components/ui/banner.js.map +0 -1
  700. package/dist/components/ui/branch-chip.d.ts.map +0 -1
  701. package/dist/components/ui/branch-chip.js +0 -58
  702. package/dist/components/ui/branch-chip.js.map +0 -1
  703. package/dist/components/ui/button.d.ts +0 -14
  704. package/dist/components/ui/button.d.ts.map +0 -1
  705. package/dist/components/ui/button.js +0 -65
  706. package/dist/components/ui/button.js.map +0 -1
  707. package/dist/components/ui/card.d.ts +0 -7
  708. package/dist/components/ui/card.d.ts.map +0 -1
  709. package/dist/components/ui/card.js.map +0 -1
  710. package/dist/components/ui/chip.d.ts.map +0 -1
  711. package/dist/components/ui/chip.js +0 -44
  712. package/dist/components/ui/chip.js.map +0 -1
  713. package/dist/components/ui/dialog.d.ts +0 -20
  714. package/dist/components/ui/dialog.d.ts.map +0 -1
  715. package/dist/components/ui/dialog.js +0 -93
  716. package/dist/components/ui/dialog.js.map +0 -1
  717. package/dist/components/ui/dropdown-menu.d.ts +0 -28
  718. package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
  719. package/dist/components/ui/dropdown-menu.js +0 -165
  720. package/dist/components/ui/dropdown-menu.js.map +0 -1
  721. package/dist/components/ui/empty.d.ts +0 -11
  722. package/dist/components/ui/empty.d.ts.map +0 -1
  723. package/dist/components/ui/empty.js +0 -24
  724. package/dist/components/ui/empty.js.map +0 -1
  725. package/dist/components/ui/field.d.ts.map +0 -1
  726. package/dist/components/ui/field.js +0 -52
  727. package/dist/components/ui/field.js.map +0 -1
  728. package/dist/components/ui/input.d.ts.map +0 -1
  729. package/dist/components/ui/input.js +0 -51
  730. package/dist/components/ui/input.js.map +0 -1
  731. package/dist/components/ui/kbd.d.ts.map +0 -1
  732. package/dist/components/ui/kbd.js +0 -30
  733. package/dist/components/ui/kbd.js.map +0 -1
  734. package/dist/components/ui/label.d.ts +0 -6
  735. package/dist/components/ui/label.d.ts.map +0 -1
  736. package/dist/components/ui/label.js +0 -20
  737. package/dist/components/ui/label.js.map +0 -1
  738. package/dist/components/ui/publish-button.d.ts +0 -7
  739. package/dist/components/ui/publish-button.d.ts.map +0 -1
  740. package/dist/components/ui/publish-button.js +0 -50
  741. package/dist/components/ui/publish-button.js.map +0 -1
  742. package/dist/components/ui/select.d.ts +0 -14
  743. package/dist/components/ui/select.d.ts.map +0 -1
  744. package/dist/components/ui/select.js +0 -132
  745. package/dist/components/ui/select.js.map +0 -1
  746. package/dist/components/ui/sonner.d.ts +0 -6
  747. package/dist/components/ui/sonner.d.ts.map +0 -1
  748. package/dist/components/ui/sonner.js +0 -37
  749. package/dist/components/ui/sonner.js.map +0 -1
  750. package/dist/components/ui/status-badge.d.ts.map +0 -1
  751. package/dist/components/ui/status-badge.js.map +0 -1
  752. package/dist/components/ui/table.d.ts.map +0 -1
  753. package/dist/components/ui/table.js.map +0 -1
  754. package/dist/components/ui/tabs-pill.d.ts +0 -17
  755. package/dist/components/ui/tabs-pill.d.ts.map +0 -1
  756. package/dist/components/ui/tabs-pill.js +0 -67
  757. package/dist/components/ui/tabs-pill.js.map +0 -1
  758. package/dist/components/ui/tabs.d.ts +0 -8
  759. package/dist/components/ui/tabs.d.ts.map +0 -1
  760. package/dist/components/ui/tabs.js +0 -59
  761. package/dist/components/ui/tabs.js.map +0 -1
  762. package/dist/components/ui/textarea.d.ts.map +0 -1
  763. package/dist/components/ui/textarea.js +0 -25
  764. package/dist/components/ui/textarea.js.map +0 -1
  765. package/dist/components/ui/toast-card.d.ts +0 -15
  766. package/dist/components/ui/toast-card.d.ts.map +0 -1
  767. package/dist/components/ui/toast-card.js +0 -90
  768. package/dist/components/ui/toast-card.js.map +0 -1
  769. package/dist/components/ui/toast.d.ts +0 -16
  770. package/dist/components/ui/toast.d.ts.map +0 -1
  771. package/dist/components/ui/toast.js +0 -95
  772. package/dist/components/ui/toast.js.map +0 -1
  773. package/dist/components/ui/toaster.d.ts.map +0 -1
  774. package/dist/components/ui/toaster.js +0 -30
  775. package/dist/components/ui/toaster.js.map +0 -1
  776. package/dist/init-KWH66PKY.js.map +0 -1
  777. /package/dist/{agentDocs-M3R2CPUQ.js.map → agentDocs-QZ4NOQVH.js.map} +0 -0
  778. /package/dist/components/{ErrorBoundary.d.ts → ErrorBoundary/ErrorBoundary.d.ts} +0 -0
  779. /package/dist/components/{CreateBranchDialog.d.ts → Layout/CreateBranchDialog.d.ts} +0 -0
  780. /package/dist/components/{FormBooleanField.d.ts → ui/FormField/FormBooleanField.d.ts} +0 -0
  781. /package/dist/components/{FormColorField.d.ts → ui/FormField/FormColorField.d.ts} +0 -0
  782. /package/dist/components/{FormDatetimeField.d.ts → ui/FormField/FormDatetimeField.d.ts} +0 -0
  783. /package/dist/components/{FormJsonField.d.ts → ui/FormField/FormJsonField.d.ts} +0 -0
  784. /package/dist/components/{FormMarkdownField.d.ts → ui/FormField/FormMarkdownField.d.ts} +0 -0
  785. /package/dist/components/{FormNumberField.d.ts → ui/FormField/FormNumberField.d.ts} +0 -0
  786. /package/dist/components/{FormSlugField.d.ts → ui/FormField/FormSlugField.d.ts} +0 -0
  787. /package/dist/components/{FormStringField.d.ts → ui/FormField/FormStringField.d.ts} +0 -0
  788. /package/dist/components/{FormStringListField.d.ts → ui/FormField/FormStringListField.d.ts} +0 -0
  789. /package/dist/components/{FormTextField.d.ts → ui/FormField/FormTextField.d.ts} +0 -0
  790. /package/dist/components/{FormUrlField.d.ts → ui/FormField/FormUrlField.d.ts} +0 -0
  791. /package/dist/components/{richtext → ui/FormField/richtext}/ConditionEmbedEditor.d.ts +0 -0
  792. /package/dist/components/{richtext → ui/FormField/richtext}/ImageEmbedEditor.d.ts +0 -0
  793. /package/dist/components/{richtext → ui/FormField/richtext}/ReferenceEmbedEditor.d.ts +0 -0
  794. /package/dist/components/{richtext → ui/FormField/richtext}/SlashCommandMenu.d.ts +0 -0
  795. /package/dist/components/{richtext → ui/FormField/richtext}/VariableEmbedEditor.d.ts +0 -0
  796. /package/dist/{update-QNJRYPMC.js.map → update-QALIQG76.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../components/Chat/ToolCallCard.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { ChevronRight, Wrench, AlertCircle, CheckCircle2 } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\n\nimport type { ChatToolCall } from './types';\n\ntype Props = {\n call: ChatToolCall;\n};\n\nexport function ToolCallCard({ call }: Props) {\n const [expanded, setExpanded] = useState(false);\n const status = call.result ? (call.result.isError ? 'error' : 'ok') : 'pending';\n\n const inputPreview = formatInputPreview(call.parsedInput, call.inputJson);\n const resultPreview = call.result ? truncate(call.result.content, 280) : 'Running…';\n\n return (\n <div\n className={cn(\n 'my-2 rounded-md border bg-muted/40 text-xs',\n status === 'error' ? 'border-destructive/40' : 'border-border',\n )}\n >\n <button\n type=\"button\"\n onClick={() => setExpanded((v) => !v)}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-left bg-transparent border-0 cursor-pointer\"\n >\n <ChevronRight className={cn('h-3 w-3 transition-transform', expanded && 'rotate-90')} />\n <Wrench className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"font-mono font-semibold\">{call.name}</span>\n <span className=\"text-muted-foreground truncate flex-1\">{inputPreview}</span>\n {status === 'pending' && <span className=\"text-muted-foreground\">…</span>}\n {status === 'ok' && <CheckCircle2 className=\"h-3 w-3 text-green-600\" />}\n {status === 'error' && <AlertCircle className=\"h-3 w-3 text-destructive\" />}\n </button>\n {expanded && (\n <div className=\"border-t border-border/50 px-3 py-2 space-y-2\">\n <div>\n <div className=\"text-muted-foreground mb-1 text-[11px] uppercase tracking-wide\">Input</div>\n <pre className=\"whitespace-pre-wrap break-words font-mono text-[11px] text-foreground/80\">\n {prettyJson(call.parsedInput, call.inputJson)}\n </pre>\n </div>\n {call.result && (\n <div>\n <div className=\"text-muted-foreground mb-1 text-[11px] uppercase tracking-wide\">Result</div>\n <pre className=\"whitespace-pre-wrap break-words font-mono text-[11px] text-foreground/80\">\n {prettyResult(resultPreview, call.result.content)}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction formatInputPreview(parsed: unknown, raw: string): string {\n if (parsed && typeof parsed === 'object') {\n const obj = parsed as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 0) return '{}';\n const first = keys[0];\n const value = obj[first];\n return `${first}=${formatScalar(value)}${keys.length > 1 ? ', …' : ''}`;\n }\n return truncate(raw || '', 60);\n}\n\nfunction formatScalar(v: unknown): string {\n if (typeof v === 'string') return JSON.stringify(truncate(v, 40));\n if (typeof v === 'number' || typeof v === 'boolean' || v === null) return String(v);\n return '…';\n}\n\nfunction prettyJson(parsed: unknown, raw: string): string {\n if (parsed === undefined) return raw || '(no input yet)';\n try {\n return JSON.stringify(parsed, null, 2);\n } catch {\n return raw || String(parsed);\n }\n}\n\nfunction prettyResult(_preview: string, content: string): string {\n try {\n const parsed = JSON.parse(content);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return content;\n }\n}\n\nfunction truncate(s: string, n: number): string {\n if (!s) return '';\n return s.length <= n ? s : `${s.slice(0, n - 1)}…`;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../components/Chat/ToolCallCard.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { Icon } from '../ui';\n\nimport { cn } from '../../lib/utils';\n\nimport type { ChatToolCall } from './types';\n\ntype Props = {\n call: ChatToolCall;\n};\n\nexport function ToolCallCard({ call }: Props) {\n const [expanded, setExpanded] = useState(false);\n const status = call.result ? (call.result.isError ? 'error' : 'ok') : 'pending';\n\n const inputPreview = formatInputPreview(call.parsedInput, call.inputJson);\n const resultPreview = call.result ? truncate(call.result.content, 280) : 'Running…';\n\n return (\n <div className={cn('octo-tool-call-card', status === 'error' && 'octo-tool-call-card octo-tool-call-card--error')}>\n <button type=\"button\" onClick={() => setExpanded((v) => !v)} className=\"octo-tool-call-card__toggle\">\n <Icon.ChevronRight\n className={cn(\n 'octo-tool-call-card__chevron octo-icon-xs',\n expanded && 'octo-tool-call-card__chevron octo-tool-call-card__chevron--open',\n )}\n />\n <Icon.Wrench className=\"octo-tool-call-card__icon octo-icon-xs\" />\n <span className=\"octo-tool-call-card__name\">{call.name}</span>\n <span className=\"octo-tool-call-card__preview\">{inputPreview}</span>\n {status === 'pending' && <span className=\"octo-tool-call-card__status\">…</span>}\n {status === 'ok' && <Icon.CheckCircle2 className=\"octo-icon-xs octo-tool-call-card__status octo-u-text-ok\" />}\n {status === 'error' && (\n <Icon.AlertCircle className=\"octo-icon-xs octo-tool-call-card__status octo-u-text-danger\" />\n )}\n </button>\n {expanded && (\n <div className=\"octo-tool-call-card__body\">\n <div>\n <div className=\"octo-tool-call-card__section-label\">Input</div>\n <pre className=\"octo-tool-call-card__pre\">{prettyJson(call.parsedInput, call.inputJson)}</pre>\n </div>\n {call.result && (\n <div>\n <div className=\"octo-tool-call-card__section-label\">Result</div>\n <pre className=\"octo-tool-call-card__pre\">{prettyResult(resultPreview, call.result.content)}</pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction formatInputPreview(parsed: unknown, raw: string): string {\n if (parsed && typeof parsed === 'object') {\n const obj = parsed as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 0) return '{}';\n const first = keys[0];\n const value = obj[first];\n return `${first}=${formatScalar(value)}${keys.length > 1 ? ', …' : ''}`;\n }\n return truncate(raw || '', 60);\n}\n\nfunction formatScalar(v: unknown): string {\n if (typeof v === 'string') return JSON.stringify(truncate(v, 40));\n if (typeof v === 'number' || typeof v === 'boolean' || v === null) return String(v);\n return '…';\n}\n\nfunction prettyJson(parsed: unknown, raw: string): string {\n if (parsed === undefined) return raw || '(no input yet)';\n try {\n return JSON.stringify(parsed, null, 2);\n } catch {\n return raw || String(parsed);\n }\n}\n\nfunction prettyResult(_preview: string, content: string): string {\n try {\n const parsed = JSON.parse(content);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return content;\n }\n}\n\nfunction truncate(s: string, n: number): string {\n if (!s) return '';\n return s.length <= n ? s : `${s.slice(0, n - 1)}…`;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,64 @@
1
+ import type { NormalizedMessage } from '../../agent/providers/types';
2
+ import type { ChatEntry, ChatMeta, ProposalUiState, UsageSummary } from './types';
3
+ export declare const SESSIONS_STORAGE_KEY = "octocms:chat-sessions";
4
+ export declare const ACTIVE_ID_STORAGE_KEY = "octocms:chat-active-id";
5
+ export declare const MAX_CHAT_SESSIONS = 50;
6
+ export declare const TITLE_MAX_LEN = 48;
7
+ /** Debounce window used by `useChatHistory` before writing localStorage. */
8
+ export declare const PERSIST_DEBOUNCE_MS = 400;
9
+ export type PersistedChatStatus = 'idle' | 'error' | 'budget_exceeded' | 'stopped';
10
+ export type PersistedChatState = {
11
+ entries: ChatEntry[];
12
+ history: NormalizedMessage[];
13
+ meta: ChatMeta | null;
14
+ usage: UsageSummary;
15
+ status: PersistedChatStatus;
16
+ error: string | null;
17
+ budgetReason: 'input_tokens' | 'output_tokens' | 'spend' | 'max_turns' | 'proposal_cap' | null;
18
+ proposals: Record<string, ProposalUiState>;
19
+ };
20
+ export type StoredChatSession = {
21
+ id: string;
22
+ title: string;
23
+ updatedAt: number;
24
+ state: PersistedChatState;
25
+ };
26
+ export type ChatSessionListItem = {
27
+ id: string;
28
+ title: string;
29
+ updatedAt: number;
30
+ };
31
+ type ChatSessionsFile = {
32
+ version: 1;
33
+ sessions: StoredChatSession[];
34
+ };
35
+ export type StreamStateForPersist = {
36
+ entries: ChatEntry[];
37
+ history: NormalizedMessage[];
38
+ meta: ChatMeta | null;
39
+ usage: UsageSummary;
40
+ status: 'idle' | 'streaming' | 'error' | 'budget_exceeded' | 'stopped';
41
+ error: string | null;
42
+ budgetReason: PersistedChatState['budgetReason'];
43
+ proposals: Record<string, ProposalUiState>;
44
+ };
45
+ export declare function deriveTitle(entries: ChatEntry[]): string;
46
+ export declare function toPersistedState(state: StreamStateForPersist): PersistedChatState | null;
47
+ export declare function trimSessions(sessions: StoredChatSession[], max?: number): StoredChatSession[];
48
+ export declare function toSessionListItems(sessions: StoredChatSession[]): ChatSessionListItem[];
49
+ export declare function readSessionsFile(): ChatSessionsFile;
50
+ export declare function writeSessionsFile(file: ChatSessionsFile): void;
51
+ export declare function readActiveId(): string | null;
52
+ export declare function writeActiveId(id: string | null): void;
53
+ export declare function getSession(id: string): StoredChatSession | null;
54
+ export declare function upsertSession(session: StoredChatSession): void;
55
+ export declare function removeStoredSession(id: string): void;
56
+ /** @deprecated Use `removeStoredSession` — kept as alias for older imports. */
57
+ export declare const deleteSession: typeof removeStoredSession;
58
+ export declare function listSessionItems(): ChatSessionListItem[];
59
+ export declare function createSessionId(): string;
60
+ export declare function getOrCreateActiveChatId(): string;
61
+ export declare function setActiveChatId(id: string): void;
62
+ export declare function clearReservedActiveChatId(): void;
63
+ export {};
64
+ //# sourceMappingURL=chatStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatStorage.d.ts","sourceRoot":"","sources":["../../../components/Chat/chatStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import {
2
+ __spreadProps,
3
+ __spreadValues
4
+ } from "../../chunk-B5LE2OEC.js";
5
+ const SESSIONS_STORAGE_KEY = "octocms:chat-sessions";
6
+ const ACTIVE_ID_STORAGE_KEY = "octocms:chat-active-id";
7
+ const MAX_CHAT_SESSIONS = 50;
8
+ const TITLE_MAX_LEN = 48;
9
+ const PERSIST_DEBOUNCE_MS = 400;
10
+ const EMPTY_FILE = { version: 1, sessions: [] };
11
+ function deriveTitle(entries) {
12
+ const firstUser = entries.find((e) => e.kind === "user");
13
+ if (!firstUser || firstUser.kind !== "user") return "Untitled chat";
14
+ const text = firstUser.text.trim();
15
+ if (!text) return "Untitled chat";
16
+ if (text.length <= TITLE_MAX_LEN) return text;
17
+ return `${text.slice(0, TITLE_MAX_LEN - 1)}\u2026`;
18
+ }
19
+ function toPersistedState(state) {
20
+ if (state.entries.length === 0 || state.status === "streaming") return null;
21
+ const entries = state.entries.map((e) => {
22
+ if (e.kind !== "assistant") return e;
23
+ return __spreadProps(__spreadValues({}, e), { streaming: false });
24
+ });
25
+ const status = state.status;
26
+ return {
27
+ entries,
28
+ history: state.history,
29
+ meta: state.meta,
30
+ usage: state.usage,
31
+ status,
32
+ error: state.error,
33
+ budgetReason: state.budgetReason,
34
+ proposals: state.proposals
35
+ };
36
+ }
37
+ function trimSessions(sessions, max = MAX_CHAT_SESSIONS) {
38
+ if (sessions.length <= max) return sessions;
39
+ const sorted = [...sessions].sort((a, b) => b.updatedAt - a.updatedAt);
40
+ return sorted.slice(0, max);
41
+ }
42
+ function toSessionListItems(sessions) {
43
+ return [...sessions].sort((a, b) => b.updatedAt - a.updatedAt).map(({ id, title, updatedAt }) => ({ id, title, updatedAt }));
44
+ }
45
+ function parseSessionsFile(raw) {
46
+ if (!raw) return EMPTY_FILE;
47
+ try {
48
+ const parsed = JSON.parse(raw);
49
+ if (typeof parsed !== "object" || parsed === null || parsed.version !== 1 || !Array.isArray(parsed.sessions)) {
50
+ return EMPTY_FILE;
51
+ }
52
+ return parsed;
53
+ } catch (e) {
54
+ return EMPTY_FILE;
55
+ }
56
+ }
57
+ function readSessionsFile() {
58
+ if (typeof window === "undefined") return EMPTY_FILE;
59
+ return parseSessionsFile(window.localStorage.getItem(SESSIONS_STORAGE_KEY));
60
+ }
61
+ function writeSessionsFile(file) {
62
+ if (typeof window === "undefined") return;
63
+ let sessions = trimSessions(file.sessions);
64
+ for (; ; ) {
65
+ try {
66
+ window.localStorage.setItem(SESSIONS_STORAGE_KEY, JSON.stringify({ version: 1, sessions }));
67
+ return;
68
+ } catch (err) {
69
+ const isQuota = err instanceof DOMException && (err.name === "QuotaExceededError" || err.code === 22);
70
+ if (!isQuota || sessions.length === 0) return;
71
+ sessions = sessions.slice(0, -1);
72
+ }
73
+ }
74
+ }
75
+ function readActiveId() {
76
+ if (typeof window === "undefined") return null;
77
+ const id = window.localStorage.getItem(ACTIVE_ID_STORAGE_KEY);
78
+ return id && id.length > 0 ? id : null;
79
+ }
80
+ function writeActiveId(id) {
81
+ if (typeof window === "undefined") return;
82
+ try {
83
+ if (id) window.localStorage.setItem(ACTIVE_ID_STORAGE_KEY, id);
84
+ else window.localStorage.removeItem(ACTIVE_ID_STORAGE_KEY);
85
+ } catch (e) {
86
+ }
87
+ }
88
+ function getSession(id) {
89
+ var _a;
90
+ const file = readSessionsFile();
91
+ return (_a = file.sessions.find((s) => s.id === id)) != null ? _a : null;
92
+ }
93
+ function upsertSession(session) {
94
+ const file = readSessionsFile();
95
+ const idx = file.sessions.findIndex((s) => s.id === session.id);
96
+ const next = idx === -1 ? [...file.sessions, session] : file.sessions.map((s, i) => i === idx ? session : s);
97
+ writeSessionsFile({ version: 1, sessions: next });
98
+ }
99
+ function removeStoredSession(id) {
100
+ const file = readSessionsFile();
101
+ writeSessionsFile({ version: 1, sessions: file.sessions.filter((s) => s.id !== id) });
102
+ }
103
+ const deleteSession = removeStoredSession;
104
+ function listSessionItems() {
105
+ return toSessionListItems(readSessionsFile().sessions);
106
+ }
107
+ function createSessionId() {
108
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
109
+ return crypto.randomUUID();
110
+ }
111
+ return `chat_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
112
+ }
113
+ let reservedActiveId = null;
114
+ function getOrCreateActiveChatId() {
115
+ const stored = readActiveId();
116
+ if (stored) return stored;
117
+ if (reservedActiveId) return reservedActiveId;
118
+ const id = createSessionId();
119
+ reservedActiveId = id;
120
+ writeActiveId(id);
121
+ return id;
122
+ }
123
+ function setActiveChatId(id) {
124
+ reservedActiveId = id;
125
+ writeActiveId(id);
126
+ }
127
+ function clearReservedActiveChatId() {
128
+ reservedActiveId = null;
129
+ }
130
+ export {
131
+ ACTIVE_ID_STORAGE_KEY,
132
+ MAX_CHAT_SESSIONS,
133
+ PERSIST_DEBOUNCE_MS,
134
+ SESSIONS_STORAGE_KEY,
135
+ TITLE_MAX_LEN,
136
+ clearReservedActiveChatId,
137
+ createSessionId,
138
+ deleteSession,
139
+ deriveTitle,
140
+ getOrCreateActiveChatId,
141
+ getSession,
142
+ listSessionItems,
143
+ readActiveId,
144
+ readSessionsFile,
145
+ removeStoredSession,
146
+ setActiveChatId,
147
+ toPersistedState,
148
+ toSessionListItems,
149
+ trimSessions,
150
+ upsertSession,
151
+ writeActiveId,
152
+ writeSessionsFile
153
+ };
154
+ //# sourceMappingURL=chatStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../components/Chat/chatStorage.ts"],"sourcesContent":["import type { NormalizedMessage } from '../../agent/providers/types';\n\nimport type { ChatEntry, ChatMeta, ProposalUiState, UsageSummary } from './types';\n\nexport const SESSIONS_STORAGE_KEY = 'octocms:chat-sessions';\nexport const ACTIVE_ID_STORAGE_KEY = 'octocms:chat-active-id';\nexport const MAX_CHAT_SESSIONS = 50;\nexport const TITLE_MAX_LEN = 48;\n/** Debounce window used by `useChatHistory` before writing localStorage. */\nexport const PERSIST_DEBOUNCE_MS = 400;\n\nexport type PersistedChatStatus = 'idle' | 'error' | 'budget_exceeded' | 'stopped';\n\nexport type PersistedChatState = {\n entries: ChatEntry[];\n history: NormalizedMessage[];\n meta: ChatMeta | null;\n usage: UsageSummary;\n status: PersistedChatStatus;\n error: string | null;\n budgetReason: 'input_tokens' | 'output_tokens' | 'spend' | 'max_turns' | 'proposal_cap' | null;\n proposals: Record<string, ProposalUiState>;\n};\n\nexport type StoredChatSession = {\n id: string;\n title: string;\n updatedAt: number;\n state: PersistedChatState;\n};\n\nexport type ChatSessionListItem = {\n id: string;\n title: string;\n updatedAt: number;\n};\n\ntype ChatSessionsFile = {\n version: 1;\n sessions: StoredChatSession[];\n};\n\nconst EMPTY_FILE: ChatSessionsFile = { version: 1, sessions: [] };\n\nexport type StreamStateForPersist = {\n entries: ChatEntry[];\n history: NormalizedMessage[];\n meta: ChatMeta | null;\n usage: UsageSummary;\n status: 'idle' | 'streaming' | 'error' | 'budget_exceeded' | 'stopped';\n error: string | null;\n budgetReason: PersistedChatState['budgetReason'];\n proposals: Record<string, ProposalUiState>;\n};\n\nexport function deriveTitle(entries: ChatEntry[]): string {\n const firstUser = entries.find((e) => e.kind === 'user');\n if (!firstUser || firstUser.kind !== 'user') return 'Untitled chat';\n const text = firstUser.text.trim();\n if (!text) return 'Untitled chat';\n if (text.length <= TITLE_MAX_LEN) return text;\n return `${text.slice(0, TITLE_MAX_LEN - 1)}…`;\n}\n\nexport function toPersistedState(state: StreamStateForPersist): PersistedChatState | null {\n if (state.entries.length === 0 || state.status === 'streaming') return null;\n\n const entries = state.entries.map((e) => {\n if (e.kind !== 'assistant') return e;\n return { ...e, streaming: false };\n });\n\n const status = state.status as PersistedChatStatus;\n\n return {\n entries,\n history: state.history,\n meta: state.meta,\n usage: state.usage,\n status,\n error: state.error,\n budgetReason: state.budgetReason,\n proposals: state.proposals,\n };\n}\n\nexport function trimSessions(sessions: StoredChatSession[], max: number = MAX_CHAT_SESSIONS): StoredChatSession[] {\n if (sessions.length <= max) return sessions;\n const sorted = [...sessions].sort((a, b) => b.updatedAt - a.updatedAt);\n return sorted.slice(0, max);\n}\n\nexport function toSessionListItems(sessions: StoredChatSession[]): ChatSessionListItem[] {\n return [...sessions]\n .sort((a, b) => b.updatedAt - a.updatedAt)\n .map(({ id, title, updatedAt }) => ({ id, title, updatedAt }));\n}\n\nfunction parseSessionsFile(raw: string | null): ChatSessionsFile {\n if (!raw) return EMPTY_FILE;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (\n typeof parsed !== 'object' ||\n parsed === null ||\n (parsed as ChatSessionsFile).version !== 1 ||\n !Array.isArray((parsed as ChatSessionsFile).sessions)\n ) {\n return EMPTY_FILE;\n }\n return parsed as ChatSessionsFile;\n } catch {\n return EMPTY_FILE;\n }\n}\n\nexport function readSessionsFile(): ChatSessionsFile {\n if (typeof window === 'undefined') return EMPTY_FILE;\n return parseSessionsFile(window.localStorage.getItem(SESSIONS_STORAGE_KEY));\n}\n\nexport function writeSessionsFile(file: ChatSessionsFile): void {\n if (typeof window === 'undefined') return;\n let sessions = trimSessions(file.sessions);\n for (;;) {\n try {\n window.localStorage.setItem(SESSIONS_STORAGE_KEY, JSON.stringify({ version: 1, sessions }));\n return;\n } catch (err) {\n const isQuota = err instanceof DOMException && (err.name === 'QuotaExceededError' || err.code === 22);\n if (!isQuota || sessions.length === 0) return;\n sessions = sessions.slice(0, -1);\n }\n }\n}\n\nexport function readActiveId(): string | null {\n if (typeof window === 'undefined') return null;\n const id = window.localStorage.getItem(ACTIVE_ID_STORAGE_KEY);\n return id && id.length > 0 ? id : null;\n}\n\nexport function writeActiveId(id: string | null): void {\n if (typeof window === 'undefined') return;\n try {\n if (id) window.localStorage.setItem(ACTIVE_ID_STORAGE_KEY, id);\n else window.localStorage.removeItem(ACTIVE_ID_STORAGE_KEY);\n } catch {\n /* quota / private mode */\n }\n}\n\nexport function getSession(id: string): StoredChatSession | null {\n const file = readSessionsFile();\n return file.sessions.find((s) => s.id === id) ?? null;\n}\n\nexport function upsertSession(session: StoredChatSession): void {\n const file = readSessionsFile();\n const idx = file.sessions.findIndex((s) => s.id === session.id);\n const next = idx === -1 ? [...file.sessions, session] : file.sessions.map((s, i) => (i === idx ? session : s));\n writeSessionsFile({ version: 1, sessions: next });\n}\n\nexport function removeStoredSession(id: string): void {\n const file = readSessionsFile();\n writeSessionsFile({ version: 1, sessions: file.sessions.filter((s) => s.id !== id) });\n}\n\n/** @deprecated Use `removeStoredSession` — kept as alias for older imports. */\nexport const deleteSession = removeStoredSession;\n\nexport function listSessionItems(): ChatSessionListItem[] {\n return toSessionListItems(readSessionsFile().sessions);\n}\n\nexport function createSessionId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `chat_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\n/** In-flight active id for this tab (avoids duplicate ids before localStorage write). */\nlet reservedActiveId: string | null = null;\n\nexport function getOrCreateActiveChatId(): string {\n const stored = readActiveId();\n if (stored) return stored;\n if (reservedActiveId) return reservedActiveId;\n const id = createSessionId();\n reservedActiveId = id;\n writeActiveId(id);\n return id;\n}\n\nexport function setActiveChatId(id: string): void {\n reservedActiveId = id;\n writeActiveId(id);\n}\n\nexport function clearReservedActiveChatId(): void {\n reservedActiveId = null;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,12 @@
1
+ import { type ChatSessionListItem, type PersistedChatState } from './chatStorage';
2
+ import { type UseChatStreamReturn } from './useChatStream';
3
+ export type UseChatHistoryReturn = UseChatStreamReturn & {
4
+ sessions: ChatSessionListItem[];
5
+ activeId: string | null;
6
+ newConversation: () => void;
7
+ selectSession: (id: string) => void;
8
+ deleteSession: (id: string) => void;
9
+ };
10
+ export declare function useChatHistory(endpoint?: string): UseChatHistoryReturn;
11
+ export type { PersistedChatState };
12
+ //# sourceMappingURL=useChatHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatHistory.d.ts","sourceRoot":"","sources":["../../../components/Chat/useChatHistory.ts"],"names":[],"mappings":"AAIA,OAAO,EAcL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAqB1E,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAMF,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAsKtE;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,196 @@
1
+ "use client";
2
+ import {
3
+ __spreadProps,
4
+ __spreadValues
5
+ } from "../../chunk-B5LE2OEC.js";
6
+ import { useCallback, useEffect, useRef, useState } from "react";
7
+ import {
8
+ clearReservedActiveChatId,
9
+ createSessionId,
10
+ removeStoredSession,
11
+ deriveTitle,
12
+ getOrCreateActiveChatId,
13
+ getSession,
14
+ listSessionItems,
15
+ PERSIST_DEBOUNCE_MS,
16
+ readActiveId,
17
+ SESSIONS_STORAGE_KEY,
18
+ setActiveChatId,
19
+ upsertSession,
20
+ writeActiveId
21
+ } from "./chatStorage";
22
+ import { useChatStream } from "./useChatStream";
23
+ let persistTimer = null;
24
+ let persistSuspended = 0;
25
+ function cancelScheduledPersist() {
26
+ if (persistTimer) {
27
+ clearTimeout(persistTimer);
28
+ persistTimer = null;
29
+ }
30
+ }
31
+ function schedulePersist(fn) {
32
+ cancelScheduledPersist();
33
+ persistTimer = setTimeout(() => {
34
+ persistTimer = null;
35
+ fn();
36
+ }, PERSIST_DEBOUNCE_MS);
37
+ }
38
+ function refreshSessionsList() {
39
+ return listSessionItems();
40
+ }
41
+ function useChatHistory(endpoint) {
42
+ const stream = useChatStream(endpoint);
43
+ const [sessions, setSessions] = useState([]);
44
+ const [activeId, setActiveId] = useState(null);
45
+ const activeIdRef = useRef(null);
46
+ const mountedRef = useRef(false);
47
+ activeIdRef.current = activeId;
48
+ const ensureActiveId = useCallback(() => {
49
+ if (activeIdRef.current) return activeIdRef.current;
50
+ const id = getOrCreateActiveChatId();
51
+ activeIdRef.current = id;
52
+ setActiveId(id);
53
+ return id;
54
+ }, []);
55
+ const persistNow = useCallback(() => {
56
+ var _a, _b;
57
+ if (persistSuspended > 0) return;
58
+ const id = (_a = readActiveId()) != null ? _a : activeIdRef.current;
59
+ if (!id) return;
60
+ const snapshot = stream.getSnapshot();
61
+ if (!snapshot) return;
62
+ const existing = getSession(id);
63
+ const title = (_b = existing == null ? void 0 : existing.title) != null ? _b : deriveTitle(snapshot.entries);
64
+ const session = {
65
+ id,
66
+ title,
67
+ updatedAt: Date.now(),
68
+ state: snapshot
69
+ };
70
+ upsertSession(session);
71
+ setSessions(refreshSessionsList());
72
+ }, [stream]);
73
+ const schedulePersistCallback = useCallback(() => {
74
+ schedulePersist(persistNow);
75
+ }, [persistNow]);
76
+ useEffect(() => {
77
+ setSessions(refreshSessionsList());
78
+ const storedActive = readActiveId();
79
+ if (storedActive) {
80
+ const stored = getSession(storedActive);
81
+ if (stored) {
82
+ activeIdRef.current = storedActive;
83
+ setActiveId(storedActive);
84
+ stream.hydrate(stored.state);
85
+ } else {
86
+ writeActiveId(null);
87
+ }
88
+ }
89
+ mountedRef.current = true;
90
+ return () => {
91
+ cancelScheduledPersist();
92
+ };
93
+ }, []);
94
+ useEffect(() => {
95
+ if (!mountedRef.current) return;
96
+ if (stream.status === "streaming") return;
97
+ if (stream.entries.length === 0) return;
98
+ ensureActiveId();
99
+ schedulePersistCallback();
100
+ }, [
101
+ stream.entries,
102
+ stream.history,
103
+ stream.status,
104
+ stream.proposals,
105
+ stream.usage,
106
+ stream.error,
107
+ stream.budgetReason,
108
+ ensureActiveId,
109
+ schedulePersistCallback
110
+ ]);
111
+ useEffect(() => {
112
+ const onStorage = (e) => {
113
+ if (e.key === SESSIONS_STORAGE_KEY) setSessions(refreshSessionsList());
114
+ };
115
+ window.addEventListener("storage", onStorage);
116
+ return () => window.removeEventListener("storage", onStorage);
117
+ }, []);
118
+ const newConversation = useCallback(() => {
119
+ cancelScheduledPersist();
120
+ persistNow();
121
+ stream.reset();
122
+ clearReservedActiveChatId();
123
+ const id = createSessionId();
124
+ setActiveChatId(id);
125
+ activeIdRef.current = id;
126
+ setActiveId(id);
127
+ }, [stream, persistNow]);
128
+ const selectSession = useCallback(
129
+ (id) => {
130
+ if (id === activeIdRef.current) return;
131
+ cancelScheduledPersist();
132
+ persistNow();
133
+ const stored = getSession(id);
134
+ if (!stored) return;
135
+ stream.hydrate(stored.state);
136
+ setActiveChatId(id);
137
+ activeIdRef.current = id;
138
+ setActiveId(id);
139
+ },
140
+ [stream, persistNow]
141
+ );
142
+ const deleteSession = useCallback(
143
+ (id) => {
144
+ var _a;
145
+ persistSuspended += 1;
146
+ cancelScheduledPersist();
147
+ const active = (_a = activeIdRef.current) != null ? _a : readActiveId();
148
+ const wasActive = active === id;
149
+ removeStoredSession(id);
150
+ if (wasActive) {
151
+ stream.reset();
152
+ }
153
+ const nextList = refreshSessionsList();
154
+ if (wasActive) {
155
+ if (nextList.length > 0) {
156
+ const newest = nextList[0];
157
+ const stored = getSession(newest.id);
158
+ if (stored) {
159
+ stream.hydrate(stored.state);
160
+ setActiveChatId(newest.id);
161
+ activeIdRef.current = newest.id;
162
+ setActiveId(newest.id);
163
+ }
164
+ } else {
165
+ clearReservedActiveChatId();
166
+ const newId = createSessionId();
167
+ setActiveChatId(newId);
168
+ activeIdRef.current = newId;
169
+ setActiveId(newId);
170
+ }
171
+ }
172
+ setSessions(refreshSessionsList());
173
+ persistSuspended -= 1;
174
+ },
175
+ [stream]
176
+ );
177
+ const send = useCallback(
178
+ async (text, files) => {
179
+ ensureActiveId();
180
+ await stream.send(text, files);
181
+ },
182
+ [stream, ensureActiveId]
183
+ );
184
+ return __spreadProps(__spreadValues({}, stream), {
185
+ send,
186
+ sessions,
187
+ activeId,
188
+ newConversation,
189
+ selectSession,
190
+ deleteSession
191
+ });
192
+ }
193
+ export {
194
+ useChatHistory
195
+ };
196
+ //# sourceMappingURL=useChatHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../components/Chat/useChatHistory.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport {\n clearReservedActiveChatId,\n createSessionId,\n removeStoredSession,\n deriveTitle,\n getOrCreateActiveChatId,\n getSession,\n listSessionItems,\n PERSIST_DEBOUNCE_MS,\n readActiveId,\n SESSIONS_STORAGE_KEY,\n setActiveChatId,\n upsertSession,\n writeActiveId,\n type ChatSessionListItem,\n type PersistedChatState,\n type StoredChatSession,\n} from './chatStorage';\nimport { useChatStream, type UseChatStreamReturn } from './useChatStream';\n\n/** One debounced writer per tab — avoids duplicate sessions under React Strict Mode. */\nlet persistTimer: ReturnType<typeof setTimeout> | null = null;\nlet persistSuspended = 0;\n\nfunction cancelScheduledPersist(): void {\n if (persistTimer) {\n clearTimeout(persistTimer);\n persistTimer = null;\n }\n}\n\nfunction schedulePersist(fn: () => void): void {\n cancelScheduledPersist();\n persistTimer = setTimeout(() => {\n persistTimer = null;\n fn();\n }, PERSIST_DEBOUNCE_MS);\n}\n\nexport type UseChatHistoryReturn = UseChatStreamReturn & {\n sessions: ChatSessionListItem[];\n activeId: string | null;\n newConversation: () => void;\n selectSession: (id: string) => void;\n deleteSession: (id: string) => void;\n};\n\nfunction refreshSessionsList(): ChatSessionListItem[] {\n return listSessionItems();\n}\n\nexport function useChatHistory(endpoint?: string): UseChatHistoryReturn {\n const stream = useChatStream(endpoint);\n const [sessions, setSessions] = useState<ChatSessionListItem[]>([]);\n const [activeId, setActiveId] = useState<string | null>(null);\n const activeIdRef = useRef<string | null>(null);\n const mountedRef = useRef(false);\n\n activeIdRef.current = activeId;\n\n const ensureActiveId = useCallback((): string => {\n if (activeIdRef.current) return activeIdRef.current;\n const id = getOrCreateActiveChatId();\n activeIdRef.current = id;\n setActiveId(id);\n return id;\n }, []);\n\n const persistNow = useCallback(() => {\n if (persistSuspended > 0) return;\n const id = readActiveId() ?? activeIdRef.current;\n if (!id) return;\n const snapshot = stream.getSnapshot();\n if (!snapshot) return;\n const existing = getSession(id);\n const title = existing?.title ?? deriveTitle(snapshot.entries);\n const session: StoredChatSession = {\n id,\n title,\n updatedAt: Date.now(),\n state: snapshot,\n };\n upsertSession(session);\n setSessions(refreshSessionsList());\n }, [stream]);\n\n const schedulePersistCallback = useCallback(() => {\n schedulePersist(persistNow);\n }, [persistNow]);\n\n // Initial load from localStorage\n useEffect(() => {\n setSessions(refreshSessionsList());\n const storedActive = readActiveId();\n if (storedActive) {\n const stored = getSession(storedActive);\n if (stored) {\n activeIdRef.current = storedActive;\n setActiveId(storedActive);\n stream.hydrate(stored.state);\n } else {\n writeActiveId(null);\n }\n }\n mountedRef.current = true;\n return () => {\n cancelScheduledPersist();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only hydrate\n }, []);\n\n // Debounced persist when conversation state settles\n useEffect(() => {\n if (!mountedRef.current) return;\n if (stream.status === 'streaming') return;\n if (stream.entries.length === 0) return;\n ensureActiveId();\n schedulePersistCallback();\n }, [\n stream.entries,\n stream.history,\n stream.status,\n stream.proposals,\n stream.usage,\n stream.error,\n stream.budgetReason,\n ensureActiveId,\n schedulePersistCallback,\n ]);\n\n // Cross-tab session list refresh\n useEffect(() => {\n const onStorage = (e: StorageEvent) => {\n if (e.key === SESSIONS_STORAGE_KEY) setSessions(refreshSessionsList());\n };\n window.addEventListener('storage', onStorage);\n return () => window.removeEventListener('storage', onStorage);\n }, []);\n\n const newConversation = useCallback(() => {\n cancelScheduledPersist();\n persistNow();\n stream.reset();\n clearReservedActiveChatId();\n const id = createSessionId();\n setActiveChatId(id);\n activeIdRef.current = id;\n setActiveId(id);\n }, [stream, persistNow]);\n\n const selectSession = useCallback(\n (id: string) => {\n if (id === activeIdRef.current) return;\n cancelScheduledPersist();\n persistNow();\n const stored = getSession(id);\n if (!stored) return;\n stream.hydrate(stored.state);\n setActiveChatId(id);\n activeIdRef.current = id;\n setActiveId(id);\n },\n [stream, persistNow],\n );\n\n const deleteSession = useCallback(\n (id: string) => {\n persistSuspended += 1;\n cancelScheduledPersist();\n const active = activeIdRef.current ?? readActiveId();\n const wasActive = active === id;\n removeStoredSession(id);\n if (wasActive) {\n stream.reset();\n }\n const nextList = refreshSessionsList();\n if (wasActive) {\n if (nextList.length > 0) {\n const newest = nextList[0];\n const stored = getSession(newest.id);\n if (stored) {\n stream.hydrate(stored.state);\n setActiveChatId(newest.id);\n activeIdRef.current = newest.id;\n setActiveId(newest.id);\n }\n } else {\n clearReservedActiveChatId();\n const newId = createSessionId();\n setActiveChatId(newId);\n activeIdRef.current = newId;\n setActiveId(newId);\n }\n }\n setSessions(refreshSessionsList());\n persistSuspended -= 1;\n },\n [stream],\n );\n\n const send = useCallback(\n async (text: string, files?: File[]) => {\n ensureActiveId();\n await stream.send(text, files);\n },\n [stream, ensureActiveId],\n );\n\n return {\n ...stream,\n send,\n sessions,\n activeId,\n newConversation,\n selectSession,\n deleteSession,\n };\n}\n\nexport type { PersistedChatState };\n"],"mappings":";;;;;AAEA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AAEzD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,qBAA+C;AAGxD,IAAI,eAAqD;AACzD,IAAI,mBAAmB;AAEvB,SAAS,yBAA+B;AACtC,MAAI,cAAc;AAChB,iBAAa,YAAY;AACzB,mBAAe;AAAA,EACjB;AACF;AAEA,SAAS,gBAAgB,IAAsB;AAC7C,yBAAuB;AACvB,iBAAe,WAAW,MAAM;AAC9B,mBAAe;AACf,OAAG;AAAA,EACL,GAAG,mBAAmB;AACxB;AAUA,SAAS,sBAA6C;AACpD,SAAO,iBAAiB;AAC1B;AAEO,SAAS,eAAe,UAAyC;AACtE,QAAM,SAAS,cAAc,QAAQ;AACrC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAgC,CAAC,CAAC;AAClE,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,cAAc,OAAsB,IAAI;AAC9C,QAAM,aAAa,OAAO,KAAK;AAE/B,cAAY,UAAU;AAEtB,QAAM,iBAAiB,YAAY,MAAc;AAC/C,QAAI,YAAY,QAAS,QAAO,YAAY;AAC5C,UAAM,KAAK,wBAAwB;AACnC,gBAAY,UAAU;AACtB,gBAAY,EAAE;AACd,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY,MAAM;AAxEvC;AAyEI,QAAI,mBAAmB,EAAG;AAC1B,UAAM,MAAK,kBAAa,MAAb,YAAkB,YAAY;AACzC,QAAI,CAAC,GAAI;AACT,UAAM,WAAW,OAAO,YAAY;AACpC,QAAI,CAAC,SAAU;AACf,UAAM,WAAW,WAAW,EAAE;AAC9B,UAAM,SAAQ,0CAAU,UAAV,YAAmB,YAAY,SAAS,OAAO;AAC7D,UAAM,UAA6B;AAAA,MACjC;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,OAAO;AAAA,IACT;AACA,kBAAc,OAAO;AACrB,gBAAY,oBAAoB,CAAC;AAAA,EACnC,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,0BAA0B,YAAY,MAAM;AAChD,oBAAgB,UAAU;AAAA,EAC5B,GAAG,CAAC,UAAU,CAAC;AAGf,YAAU,MAAM;AACd,gBAAY,oBAAoB,CAAC;AACjC,UAAM,eAAe,aAAa;AAClC,QAAI,cAAc;AAChB,YAAM,SAAS,WAAW,YAAY;AACtC,UAAI,QAAQ;AACV,oBAAY,UAAU;AACtB,oBAAY,YAAY;AACxB,eAAO,QAAQ,OAAO,KAAK;AAAA,MAC7B,OAAO;AACL,sBAAc,IAAI;AAAA,MACpB;AAAA,IACF;AACA,eAAW,UAAU;AACrB,WAAO,MAAM;AACX,6BAAuB;AAAA,IACzB;AAAA,EAEF,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,QAAI,CAAC,WAAW,QAAS;AACzB,QAAI,OAAO,WAAW,YAAa;AACnC,QAAI,OAAO,QAAQ,WAAW,EAAG;AACjC,mBAAe;AACf,4BAAwB;AAAA,EAC1B,GAAG;AAAA,IACD,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,CAAC;AAGD,YAAU,MAAM;AACd,UAAM,YAAY,CAAC,MAAoB;AACrC,UAAI,EAAE,QAAQ,qBAAsB,aAAY,oBAAoB,CAAC;AAAA,IACvE;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,WAAO,MAAM,OAAO,oBAAoB,WAAW,SAAS;AAAA,EAC9D,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,YAAY,MAAM;AACxC,2BAAuB;AACvB,eAAW;AACX,WAAO,MAAM;AACb,8BAA0B;AAC1B,UAAM,KAAK,gBAAgB;AAC3B,oBAAgB,EAAE;AAClB,gBAAY,UAAU;AACtB,gBAAY,EAAE;AAAA,EAChB,GAAG,CAAC,QAAQ,UAAU,CAAC;AAEvB,QAAM,gBAAgB;AAAA,IACpB,CAAC,OAAe;AACd,UAAI,OAAO,YAAY,QAAS;AAChC,6BAAuB;AACvB,iBAAW;AACX,YAAM,SAAS,WAAW,EAAE;AAC5B,UAAI,CAAC,OAAQ;AACb,aAAO,QAAQ,OAAO,KAAK;AAC3B,sBAAgB,EAAE;AAClB,kBAAY,UAAU;AACtB,kBAAY,EAAE;AAAA,IAChB;AAAA,IACA,CAAC,QAAQ,UAAU;AAAA,EACrB;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,OAAe;AA1KpB;AA2KM,0BAAoB;AACpB,6BAAuB;AACvB,YAAM,UAAS,iBAAY,YAAZ,YAAuB,aAAa;AACnD,YAAM,YAAY,WAAW;AAC7B,0BAAoB,EAAE;AACtB,UAAI,WAAW;AACb,eAAO,MAAM;AAAA,MACf;AACA,YAAM,WAAW,oBAAoB;AACrC,UAAI,WAAW;AACb,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM,SAAS,SAAS,CAAC;AACzB,gBAAM,SAAS,WAAW,OAAO,EAAE;AACnC,cAAI,QAAQ;AACV,mBAAO,QAAQ,OAAO,KAAK;AAC3B,4BAAgB,OAAO,EAAE;AACzB,wBAAY,UAAU,OAAO;AAC7B,wBAAY,OAAO,EAAE;AAAA,UACvB;AAAA,QACF,OAAO;AACL,oCAA0B;AAC1B,gBAAM,QAAQ,gBAAgB;AAC9B,0BAAgB,KAAK;AACrB,sBAAY,UAAU;AACtB,sBAAY,KAAK;AAAA,QACnB;AAAA,MACF;AACA,kBAAY,oBAAoB,CAAC;AACjC,0BAAoB;AAAA,IACtB;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,OAAO;AAAA,IACX,OAAO,MAAc,UAAmB;AACtC,qBAAe;AACf,YAAM,OAAO,KAAK,MAAM,KAAK;AAAA,IAC/B;AAAA,IACA,CAAC,QAAQ,cAAc;AAAA,EACzB;AAEA,SAAO,iCACF,SADE;AAAA,IAEL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -1,6 +1,7 @@
1
1
  import type { AttachmentDiagnostic } from '../../agent/attachments';
2
2
  import type { NormalizedMessage } from '../../agent/providers/types';
3
3
  import type { Proposal } from '../../agent/proposals';
4
+ import type { PersistedChatState } from './chatStorage';
4
5
  import type { ChatEntry, ChatMeta, ProposalUiState, UsageSummary } from './types';
5
6
  type State = {
6
7
  entries: ChatEntry[];
@@ -19,6 +20,8 @@ type State = {
19
20
  };
20
21
  export type UseChatStreamReturn = {
21
22
  entries: ChatEntry[];
23
+ /** Wire history sent to the chat API on the next request. */
24
+ history: NormalizedMessage[];
22
25
  meta: ChatMeta | null;
23
26
  usage: UsageSummary;
24
27
  status: State['status'];
@@ -38,7 +41,10 @@ export type UseChatStreamReturn = {
38
41
  acceptProposal(proposalId: string): Promise<void>;
39
42
  rejectProposal(proposalId: string, reason?: string): Promise<void>;
40
43
  acceptAllPending(assistantEntryId: string): Promise<void>;
44
+ hydrate(snapshot: PersistedChatState): void;
45
+ getSnapshot(): PersistedChatState | null;
41
46
  };
42
47
  export declare function useChatStream(endpoint?: string): UseChatStreamReturn;
48
+ export type { PersistedChatState };
43
49
  export type { Proposal };
44
50
  //# sourceMappingURL=useChatStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useChatStream.d.ts","sourceRoot":"","sources":["../../../components/Chat/useChatStream.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAgC,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEhH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yCAAyC;IACzC,YAAY,EAAE,cAAc,GAAG,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;IAC/F,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;CAC/C,CAAC;AAqOF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,IAAI,IAAI,IAAI,CAAC;IACb,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D,CAAC;AAEF,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAqB,GAAG,mBAAmB,CAoRlF;AA2CD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"useChatStream.d.ts","sourceRoot":"","sources":["../../../components/Chat/useChatStream.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAgC,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEhH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yCAAyC;IACzC,YAAY,EAAE,cAAc,GAAG,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC;IAC/F,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;CAC/C,CAAC;AAmPF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,6DAA6D;IAC7D,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,IAAI,IAAI,IAAI,CAAC;IACb,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5C,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAqB,GAAG,mBAAmB,CAsSlF;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC;AA2CnC,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -7,6 +7,7 @@ import { useQueryClient } from "@tanstack/react-query";
7
7
  import { useCallback, useEffect, useReducer, useRef } from "react";
8
8
  import { acceptProposalAction, rejectProposalAction } from "../../admin/actions/agent";
9
9
  import { invalidateAfterMutationAsync } from "../../admin/query/invalidate";
10
+ import { toPersistedState } from "./chatStorage";
10
11
  const ZERO_USAGE = { inputTokens: 0, outputTokens: 0, cachedInputTokens: 0, totalCostUSD: 0 };
11
12
  const initial = {
12
13
  entries: [],
@@ -23,6 +24,18 @@ function reducer(state, action) {
23
24
  switch (action.type) {
24
25
  case "reset":
25
26
  return __spreadProps(__spreadValues({}, initial), { meta: state.meta });
27
+ case "hydrate":
28
+ return __spreadProps(__spreadValues({}, initial), {
29
+ entries: action.snapshot.entries,
30
+ history: action.snapshot.history,
31
+ meta: action.snapshot.meta,
32
+ usage: action.snapshot.usage,
33
+ status: action.snapshot.status,
34
+ error: action.snapshot.error,
35
+ budgetReason: action.snapshot.budgetReason,
36
+ proposals: action.snapshot.proposals,
37
+ attachmentDiagnostics: []
38
+ });
26
39
  case "submit": {
27
40
  const userEntry = __spreadValues({
28
41
  id: action.entryId,
@@ -197,12 +210,25 @@ function useChatStream(endpoint = "/api/agent") {
197
210
  const stateRef = useRef(state);
198
211
  stateRef.current = state;
199
212
  const inFlightRef = useRef(null);
200
- const reset = useCallback(() => {
213
+ const abortInFlight = useCallback(() => {
201
214
  if (inFlightRef.current) {
202
215
  inFlightRef.current.controller.abort();
203
216
  inFlightRef.current = null;
204
217
  }
218
+ }, []);
219
+ const reset = useCallback(() => {
220
+ abortInFlight();
205
221
  dispatch({ type: "reset" });
222
+ }, [abortInFlight]);
223
+ const hydrate = useCallback(
224
+ (snapshot) => {
225
+ abortInFlight();
226
+ dispatch({ type: "hydrate", snapshot });
227
+ },
228
+ [abortInFlight]
229
+ );
230
+ const getSnapshot = useCallback(() => {
231
+ return toPersistedState(stateRef.current);
206
232
  }, []);
207
233
  useEffect(() => {
208
234
  return () => {
@@ -383,6 +409,7 @@ function useChatStream(endpoint = "/api/agent") {
383
409
  );
384
410
  return {
385
411
  entries: state.entries,
412
+ history: state.history,
386
413
  meta: state.meta,
387
414
  usage: state.usage,
388
415
  status: state.status,
@@ -395,7 +422,9 @@ function useChatStream(endpoint = "/api/agent") {
395
422
  stop,
396
423
  acceptProposal,
397
424
  rejectProposal,
398
- acceptAllPending
425
+ acceptAllPending,
426
+ hydrate,
427
+ getSnapshot
399
428
  };
400
429
  }
401
430
  function buildMultipartBody(messages, files) {