@vertesia/ui 1.5.0-dev.20260725.083715Z → 1.5.0-dev.20260806.125520Z

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 (403) hide show
  1. package/lib/core/components/ComboBox.d.ts.map +1 -1
  2. package/lib/core/components/ComboBox.js +4 -4
  3. package/lib/core/components/ComboBox.js.map +1 -1
  4. package/lib/core/components/FileUpload.js.map +1 -1
  5. package/lib/core/components/MenuList.d.ts +2 -1
  6. package/lib/core/components/MenuList.d.ts.map +1 -1
  7. package/lib/core/components/TagsInput.js +1 -1
  8. package/lib/core/components/popup/PopupController.d.ts.map +1 -1
  9. package/lib/core/components/popup/PopupController.js.map +1 -1
  10. package/lib/core/components/popup/position.js.map +1 -1
  11. package/lib/core/components/popup/utils.js.map +1 -1
  12. package/lib/core/components/shadcn/LanguageSwitcher.js.map +1 -1
  13. package/lib/core/components/shadcn/MessageBox.js.map +1 -1
  14. package/lib/core/components/shadcn/Panel.js +1 -1
  15. package/lib/core/components/shadcn/badge.d.ts +2 -2
  16. package/lib/core/components/shadcn/button.d.ts +2 -2
  17. package/lib/core/components/shadcn/button.js +1 -1
  18. package/lib/core/components/shadcn/command.d.ts +4 -4
  19. package/lib/core/components/shadcn/command.d.ts.map +1 -1
  20. package/lib/core/components/shadcn/filters/DynamicLabel.js +1 -1
  21. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.d.ts.map +1 -1
  22. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +1 -1
  23. package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts.map +1 -1
  24. package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.js +1 -1
  25. package/lib/core/components/shadcn/filters/comboBox/StringListCombobox.d.ts.map +1 -1
  26. package/lib/core/components/shadcn/filters/comboBox/TextCombobox.d.ts.map +1 -1
  27. package/lib/core/components/shadcn/filters/filter/dateFilter.js +1 -1
  28. package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  29. package/lib/core/components/shadcn/filters/filters.js.map +1 -1
  30. package/lib/core/components/shadcn/input.d.ts +2 -2
  31. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  32. package/lib/core/components/shadcn/popover.d.ts +1 -1
  33. package/lib/core/components/shadcn/popover.d.ts.map +1 -1
  34. package/lib/core/components/shadcn/popover.js.map +1 -1
  35. package/lib/core/components/shadcn/radioGroup.d.ts.map +1 -1
  36. package/lib/core/components/shadcn/selectBox.js +1 -1
  37. package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
  38. package/lib/core/components/shadcn/tabs.js +1 -1
  39. package/lib/core/components/shadcn/text.d.ts +2 -2
  40. package/lib/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
  41. package/lib/core/components/toast/ToastProvider.js +1 -1
  42. package/lib/core/hooks/CompositeState.d.ts +1 -1
  43. package/lib/core/hooks/CompositeState.d.ts.map +1 -1
  44. package/lib/core/hooks/CompositeState.js.map +1 -1
  45. package/lib/core/hooks/SharedState.d.ts.map +1 -1
  46. package/lib/core/hooks/useFetch.d.ts.map +1 -1
  47. package/lib/core/hooks/useFetch.js +2 -1
  48. package/lib/core/hooks/useFetch.js.map +1 -1
  49. package/lib/core/hooks/useFlag.d.ts.map +1 -1
  50. package/lib/core/hooks/useIntersectionObserver.js.map +1 -1
  51. package/lib/core/hooks/useSafeLayoutEffect.d.ts +2 -2
  52. package/lib/core/hooks/useSafeLayoutEffect.d.ts.map +1 -1
  53. package/lib/core/hooks/useScrollableSearch.d.ts +1 -1
  54. package/lib/core/hooks/useScrollableSearch.d.ts.map +1 -1
  55. package/lib/core/hooks/useScrollableSearch.js +15 -2
  56. package/lib/core/hooks/useScrollableSearch.js.map +1 -1
  57. package/lib/core/hooks/useSharedValue.d.ts.map +1 -1
  58. package/lib/core/hooks/useSharedValue.js.map +1 -1
  59. package/lib/core/utils/a11y.d.ts.map +1 -1
  60. package/lib/env/index.d.ts +4 -0
  61. package/lib/env/index.d.ts.map +1 -1
  62. package/lib/env/index.js.map +1 -1
  63. package/lib/features/agent/PayloadBuilder.d.ts +1 -1
  64. package/lib/features/agent/PayloadBuilder.d.ts.map +1 -1
  65. package/lib/features/agent/PayloadBuilder.js.map +1 -1
  66. package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts +1 -1
  67. package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
  68. package/lib/features/agent/chat/AgentRequestInputOverlay.js +3 -8
  69. package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
  70. package/lib/features/agent/chat/ArtifactsTab.js +1 -1
  71. package/lib/features/agent/chat/AskUserWidget.js +1 -1
  72. package/lib/features/agent/chat/DocumentEditingActionCard.js +1 -1
  73. package/lib/features/agent/chat/ModernAgentConversation.d.ts +8 -1
  74. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  75. package/lib/features/agent/chat/ModernAgentConversation.js +79 -20
  76. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  77. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts +2 -1
  78. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
  79. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +25 -10
  80. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
  81. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -1
  82. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -1
  83. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  84. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +25 -10
  85. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  86. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +7 -0
  87. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
  88. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +40 -3
  89. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
  90. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
  91. package/lib/features/agent/chat/ModernAgentOutput/Header.js +2 -2
  92. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  93. package/lib/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts.map +1 -1
  94. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
  95. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  96. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
  97. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  98. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  99. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +2 -2
  100. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  101. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +1 -1
  102. package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js +1 -1
  103. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  104. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
  105. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +8 -0
  106. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
  107. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  108. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +1 -1
  109. package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +1 -1
  110. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +9 -1
  111. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
  112. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +97 -2
  113. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
  114. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  115. package/lib/features/agent/chat/SlidingThinkingIndicator.js +1 -1
  116. package/lib/features/agent/chat/VegaLiteChart.js +1 -1
  117. package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
  118. package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  119. package/lib/features/agent/chat/hooks/useAgentStream.js +38 -3
  120. package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  121. package/lib/features/agent/chat/hooks/useFileProcessing.d.ts +8 -1
  122. package/lib/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
  123. package/lib/features/agent/chat/hooks/useFileProcessing.js +31 -2
  124. package/lib/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
  125. package/lib/features/agent/chat/index.d.ts +1 -1
  126. package/lib/features/agent/chat/index.d.ts.map +1 -1
  127. package/lib/features/agent/chat/index.js.map +1 -1
  128. package/lib/features/agent/chat/useArtifactUrlCache.js.map +1 -1
  129. package/lib/features/agent/chat/workstreams.d.ts +1 -1
  130. package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
  131. package/lib/features/facets/CollectionsFacetsNav.d.ts.map +1 -1
  132. package/lib/features/facets/DocumentsFacetsNav.d.ts.map +1 -1
  133. package/lib/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
  134. package/lib/features/facets/PromptsFacetsNav.d.ts +8 -6
  135. package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
  136. package/lib/features/facets/PromptsFacetsNav.js +8 -3
  137. package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
  138. package/lib/features/facets/RunsFacetsNav.d.ts.map +1 -1
  139. package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts.map +1 -1
  140. package/lib/features/magic-pdf/GroundedExtractionView.js +1 -1
  141. package/lib/features/magic-pdf/MagicPdfProvider.d.ts.map +1 -1
  142. package/lib/features/magic-pdf/MagicPdfProvider.js.map +1 -1
  143. package/lib/features/oauth/McpConnectionsButton.js +1 -1
  144. package/lib/features/oauth/OAuthProviderConnectButton.js +1 -1
  145. package/lib/features/oauth/RemoteMcpConnectionButton.js +1 -1
  146. package/lib/features/pdf-viewer/PdfPageRenderer.js +1 -1
  147. package/lib/features/pdf-viewer/PdfPageSlider.js +1 -1
  148. package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
  149. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  150. package/lib/features/store/collections/CollectionsTable.js +2 -2
  151. package/lib/features/store/collections/CollectionsTable.js.map +1 -1
  152. package/lib/features/store/collections/CreateCollection.js +1 -1
  153. package/lib/features/store/collections/EditCollectionView.js +1 -1
  154. package/lib/features/store/objects/DocumentQuickFilter.js +1 -1
  155. package/lib/features/store/objects/DocumentSelectionProvider.d.ts.map +1 -1
  156. package/lib/features/store/objects/DocumentSelectionProvider.js.map +1 -1
  157. package/lib/features/store/objects/components/ContentDispositionButton.d.ts +2 -1
  158. package/lib/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
  159. package/lib/features/store/objects/components/ContentOverview.js +5 -2
  160. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  161. package/lib/features/store/objects/components/DocumentEditingPanel.js +1 -1
  162. package/lib/features/store/objects/components/PropertiesEditorModal.js +1 -1
  163. package/lib/features/store/objects/components/TextEditorPanel.js +1 -1
  164. package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -1
  165. package/lib/features/store/objects/components/useContentPanelHooks.d.ts +31 -3
  166. package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  167. package/lib/features/store/objects/layout/DocumentTableColumn.d.ts +1 -1
  168. package/lib/features/store/objects/layout/DocumentTableColumn.d.ts.map +1 -1
  169. package/lib/features/store/objects/layout/DocumentTableColumn.js.map +1 -1
  170. package/lib/features/store/objects/layout/documentLayout.js +1 -1
  171. package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
  172. package/lib/features/store/objects/search/DocumentSearchContext.d.ts +129 -7
  173. package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  174. package/lib/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  175. package/lib/features/store/objects/selection/ObjectsActionContext.d.ts +2 -2
  176. package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
  177. package/lib/features/store/objects/selection/ObjectsActionContextClass.d.ts.map +1 -1
  178. package/lib/features/store/objects/selection/ObjectsActionContextClass.js.map +1 -1
  179. package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts +2 -2
  180. package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
  181. package/lib/features/store/objects/selection/SelectionActions.d.ts +2 -2
  182. package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  183. package/lib/features/store/objects/selection/SelectionActions.js +1 -1
  184. package/lib/features/store/objects/selection/actions/ConfirmAction.js +1 -1
  185. package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js +1 -1
  186. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
  187. package/lib/features/store/objects/upload/DocumentUploadModal.js +1 -1
  188. package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  189. package/lib/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  190. package/lib/features/store/objects/upload/useUploadHandler.d.ts.map +1 -1
  191. package/lib/features/store/types/ContentObjectTypesSearch.js +1 -1
  192. package/lib/features/store/types/IntakePolicyEditor.d.ts +2 -2
  193. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
  194. package/lib/features/store/types/IntakePolicyEditor.js +6 -2
  195. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
  196. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
  197. package/lib/features/store/types/IntakePolicyForm.js +2 -2
  198. package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
  199. package/lib/features/store/types/ObjectSchemaEditor.d.ts +2 -2
  200. package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  201. package/lib/features/store/types/SelectContentType.d.ts +2 -2
  202. package/lib/features/store/types/SelectContentType.d.ts.map +1 -1
  203. package/lib/features/store/types/SelectContentType.js.map +1 -1
  204. package/lib/features/store/types/SelectContentTypeModal.d.ts +2 -2
  205. package/lib/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
  206. package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
  207. package/lib/features/store/types/TableLayoutEditor.d.ts +2 -2
  208. package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  209. package/lib/features/store/types/TypeRegistry.d.ts +1267 -6
  210. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  211. package/lib/features/store/types/TypeRegistry.js +5 -0
  212. package/lib/features/store/types/TypeRegistry.js.map +1 -1
  213. package/lib/features/store/types/intake-policy-editor.logic.d.ts +9 -1
  214. package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -1
  215. package/lib/features/store/types/intake-policy-editor.logic.js +9 -1
  216. package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -1
  217. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +1252 -2
  218. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  219. package/lib/features/store/types/search/ObjectTypeSearchContext.js.map +1 -1
  220. package/lib/features/store/types/typeCatalogCache.d.ts +2 -2
  221. package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -1
  222. package/lib/features/store/types/typeCatalogCache.js +4 -0
  223. package/lib/features/store/types/typeCatalogCache.js.map +1 -1
  224. package/lib/features/user/UserInfo.d.ts +118 -7
  225. package/lib/features/user/UserInfo.d.ts.map +1 -1
  226. package/lib/features/user/UserInfo.js +1 -1
  227. package/lib/features/user/UserInfo.js.map +1 -1
  228. package/lib/features/utils/mimeType.d.ts.map +1 -1
  229. package/lib/features/utils/rendition.js.map +1 -1
  230. package/lib/features/utils/text.js.map +1 -1
  231. package/lib/i18n/locales/ar.json +27 -1
  232. package/lib/i18n/locales/de.json +27 -1
  233. package/lib/i18n/locales/en.json +30 -1
  234. package/lib/i18n/locales/es.json +27 -1
  235. package/lib/i18n/locales/fr.json +27 -1
  236. package/lib/i18n/locales/it.json +27 -1
  237. package/lib/i18n/locales/ja.json +27 -1
  238. package/lib/i18n/locales/ko.json +27 -1
  239. package/lib/i18n/locales/pt.json +27 -1
  240. package/lib/i18n/locales/ru.json +27 -1
  241. package/lib/i18n/locales/tr.json +27 -1
  242. package/lib/i18n/locales/zh-TW.json +27 -1
  243. package/lib/i18n/locales/zh.json +27 -1
  244. package/lib/i18n/rtl.d.ts +1 -1
  245. package/lib/i18n/rtl.d.ts.map +1 -1
  246. package/lib/layout/FullHeightLayout.d.ts +7 -6
  247. package/lib/layout/FullHeightLayout.d.ts.map +1 -1
  248. package/lib/layout/Sidebar.d.ts +1 -1
  249. package/lib/layout/Sidebar.js +1 -1
  250. package/lib/rich-text/EditorToolbar.js +1 -1
  251. package/lib/router/HistoryNavigator.d.ts +2 -2
  252. package/lib/router/HistoryNavigator.d.ts.map +1 -1
  253. package/lib/router/HistoryNavigator.js.map +1 -1
  254. package/lib/router/PathMatcher.d.ts.map +1 -1
  255. package/lib/router/PathMatcher.js.map +1 -1
  256. package/lib/router/PathWithParams.d.ts.map +1 -1
  257. package/lib/router/Redirect.js.map +1 -1
  258. package/lib/router/Route404.js +1 -1
  259. package/lib/router/Router.d.ts.map +1 -1
  260. package/lib/router/Router.js.map +1 -1
  261. package/lib/session/UserSession.d.ts +18 -4
  262. package/lib/session/UserSession.d.ts.map +1 -1
  263. package/lib/session/UserSession.js.map +1 -1
  264. package/lib/session/UserSessionProvider.d.ts +2 -0
  265. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  266. package/lib/session/UserSessionProvider.js +81 -53
  267. package/lib/session/UserSessionProvider.js.map +1 -1
  268. package/lib/session/auth/composable.d.ts +49 -1
  269. package/lib/session/auth/composable.d.ts.map +1 -1
  270. package/lib/session/auth/composable.js +179 -53
  271. package/lib/session/auth/composable.js.map +1 -1
  272. package/lib/shell/VertesiaShell.js +1 -1
  273. package/lib/shell/apps/AppInstallationProvider.d.ts +230 -2
  274. package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
  275. package/lib/shell/apps/AppProjectSelector.js +1 -1
  276. package/lib/shell/login/InviteAcceptModal.js.map +1 -1
  277. package/lib/shell/login/SignInEmailStep.js +1 -1
  278. package/lib/shell/login/SignInPrimitives.d.ts +21 -20
  279. package/lib/shell/login/SignInPrimitives.d.ts.map +1 -1
  280. package/lib/shell/login/SignInPrimitives.js.map +1 -1
  281. package/lib/shell/login/SignInRecoveryStep.d.ts +22 -0
  282. package/lib/shell/login/SignInRecoveryStep.d.ts.map +1 -0
  283. package/lib/shell/login/SignInRecoveryStep.js +59 -0
  284. package/lib/shell/login/SignInRecoveryStep.js.map +1 -0
  285. package/lib/shell/login/SigninScreen.d.ts.map +1 -1
  286. package/lib/shell/login/SigninScreen.js +84 -11
  287. package/lib/shell/login/SigninScreen.js.map +1 -1
  288. package/lib/shell/login/SignupForm.js +1 -1
  289. package/lib/shell/login/TerminalLogin.js +1 -1
  290. package/lib/shell/login/UserSessionMenu.js +1 -1
  291. package/lib/vertesia-ui-core.js +1 -1
  292. package/lib/vertesia-ui-core.js.map +1 -1
  293. package/lib/vertesia-ui-features.js +34 -34
  294. package/lib/vertesia-ui-features.js.map +1 -1
  295. package/lib/vertesia-ui-i18n.js +13 -13
  296. package/lib/vertesia-ui-layout.js.map +1 -1
  297. package/lib/vertesia-ui-rich-text.js.map +1 -1
  298. package/lib/vertesia-ui-router.js.map +1 -1
  299. package/lib/vertesia-ui-session.js +1 -1
  300. package/lib/vertesia-ui-session.js.map +1 -1
  301. package/lib/vertesia-ui-shell.js +1 -1
  302. package/lib/vertesia-ui-shell.js.map +1 -1
  303. package/lib/vertesia-ui-widgets.js +18 -18
  304. package/lib/vertesia-ui-widgets.js.map +1 -1
  305. package/lib/widgets/form/FormContext.d.ts.map +1 -1
  306. package/lib/widgets/form/FormContext.js.map +1 -1
  307. package/lib/widgets/form/ManagedObject.d.ts +2 -2
  308. package/lib/widgets/form/ManagedObject.d.ts.map +1 -1
  309. package/lib/widgets/form/ManagedObject.js.map +1 -1
  310. package/lib/widgets/form/schema.d.ts.map +1 -1
  311. package/lib/widgets/form/schema.js.map +1 -1
  312. package/lib/widgets/json-view/JSONCode.js +1 -1
  313. package/lib/widgets/json-view/JSONTable.js +1 -1
  314. package/lib/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
  315. package/lib/widgets/markdown/CodeBlockPlaceholder.d.ts +1 -1
  316. package/lib/widgets/markdown/CodeBlockPlaceholder.d.ts.map +1 -1
  317. package/lib/widgets/markdown/CodeBlockPlaceholder.js +1 -1
  318. package/lib/widgets/markdown/CodeBlockRendering.d.ts.map +1 -1
  319. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +1 -1
  320. package/lib/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -1
  321. package/lib/widgets/markdown/textDiff.js.map +1 -1
  322. package/lib/widgets/monacoEditor/MonacoEditor.d.ts +7 -1
  323. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  324. package/lib/widgets/monacoEditor/MonacoEditor.js +62 -6
  325. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  326. package/lib/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  327. package/lib/widgets/schema-editor/editor/PropertyEditor.js +1 -1
  328. package/lib/widgets/schema-editor/json-schema4-utils.js.map +1 -1
  329. package/lib/widgets/xml-viewer/components/Elements/index.js +1 -1
  330. package/lib/widgets/xml-viewer/components/Tag/index.js +1 -1
  331. package/lib/widgets/xml-viewer/constants/index.d.ts.map +1 -1
  332. package/lib/widgets/xml-viewer/helpers/index.d.ts +1 -1
  333. package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
  334. package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts.map +1 -1
  335. package/package.json +33 -33
  336. package/src/core/hooks/useFetch.ts +2 -1
  337. package/src/core/hooks/useScrollableSearch.test.tsx +139 -0
  338. package/src/core/hooks/useScrollableSearch.tsx +17 -3
  339. package/src/env/index.ts +2 -0
  340. package/src/features/agent/chat/AgentChatPlaybackControls.test.tsx +2 -0
  341. package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +51 -6
  342. package/src/features/agent/chat/AgentRequestInputOverlay.tsx +5 -7
  343. package/src/features/agent/chat/ModernAgentConversation.test.tsx +208 -3
  344. package/src/features/agent/chat/ModernAgentConversation.tsx +130 -25
  345. package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +75 -20
  346. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +112 -0
  347. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +62 -10
  348. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.test.ts +38 -0
  349. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +62 -4
  350. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +2 -2
  351. package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +71 -0
  352. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +3 -1
  353. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +18 -4
  354. package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +9 -0
  355. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +95 -0
  356. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +111 -1
  357. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +21 -0
  358. package/src/features/agent/chat/hooks/useAgentStream.test.tsx +172 -0
  359. package/src/features/agent/chat/hooks/useAgentStream.ts +38 -3
  360. package/src/features/agent/chat/hooks/useFileProcessing.test.tsx +87 -0
  361. package/src/features/agent/chat/hooks/useFileProcessing.ts +32 -1
  362. package/src/features/agent/chat/index.ts +1 -0
  363. package/src/features/facets/PromptsFacetsNav.tsx +17 -9
  364. package/src/features/store/collections/CollectionsTable.tsx +1 -1
  365. package/src/features/store/objects/components/ContentOverview.tsx +4 -1
  366. package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -2
  367. package/src/features/store/objects/selection/ObjectsActionSpec.ts +2 -2
  368. package/src/features/store/objects/selection/SelectionActions.tsx +2 -2
  369. package/src/features/store/objects/upload/DocumentUploadModal.tsx +2 -2
  370. package/src/features/store/types/IntakePolicyEditor.tsx +12 -4
  371. package/src/features/store/types/IntakePolicyForm.tsx +25 -0
  372. package/src/features/store/types/ObjectSchemaEditor.tsx +2 -2
  373. package/src/features/store/types/SelectContentType.tsx +9 -9
  374. package/src/features/store/types/SelectContentTypeModal.tsx +5 -5
  375. package/src/features/store/types/TableLayoutEditor.tsx +2 -2
  376. package/src/features/store/types/TypeRegistry.ts +8 -3
  377. package/src/features/store/types/intake-policy-editor.logic.ts +10 -2
  378. package/src/features/store/types/typeCatalogCache.ts +10 -3
  379. package/src/i18n/locales/ar.json +27 -1
  380. package/src/i18n/locales/de.json +27 -1
  381. package/src/i18n/locales/en.json +30 -1
  382. package/src/i18n/locales/es.json +27 -1
  383. package/src/i18n/locales/fr.json +27 -1
  384. package/src/i18n/locales/it.json +27 -1
  385. package/src/i18n/locales/ja.json +27 -1
  386. package/src/i18n/locales/ko.json +27 -1
  387. package/src/i18n/locales/pt.json +27 -1
  388. package/src/i18n/locales/ru.json +27 -1
  389. package/src/i18n/locales/tr.json +27 -1
  390. package/src/i18n/locales/zh-TW.json +27 -1
  391. package/src/i18n/locales/zh.json +27 -1
  392. package/src/session/UserSessionProvider.test.ts +69 -0
  393. package/src/session/UserSessionProvider.tsx +96 -60
  394. package/src/session/auth/composable.scope.test.ts +88 -0
  395. package/src/session/auth/composable.test.ts +205 -0
  396. package/src/session/auth/composable.ts +227 -58
  397. package/src/shell/login/InviteAcceptModal.tsx +4 -4
  398. package/src/shell/login/SignInPrimitives.tsx +1 -0
  399. package/src/shell/login/SignInRecoveryStep.test.tsx +112 -0
  400. package/src/shell/login/SignInRecoveryStep.tsx +177 -0
  401. package/src/shell/login/SigninScreen.tsx +145 -27
  402. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +13 -9
  403. package/src/widgets/monacoEditor/MonacoEditor.tsx +83 -7
@@ -2,7 +2,7 @@ import type { AttributesObject, Element } from '../types';
2
2
  export declare function getIndentationString(size: number, level: number): string;
3
3
  export declare function hasBreakLines(elements: Element[] | string): boolean;
4
4
  export declare function isInlineTextElement(elements: Element[] | string): boolean;
5
- export declare function getTagType(tagKey: string): "#text" | "#comment" | "#cdata" | "DECLARATION_TAG" | "TAG";
5
+ export declare function getTagType(tagKey: string): "#cdata" | "#comment" | "#text" | "DECLARATION_TAG" | "TAG";
6
6
  export declare function getTagProps(element: Element): {
7
7
  attributes: AttributesObject;
8
8
  tagKey: string;
@@ -1,8 +1,8 @@
1
1
  export declare function useCollapsible(level: number): {
2
2
  collapsed: boolean;
3
3
  buttonProps: {
4
- onClick?: undefined;
5
4
  role?: undefined;
5
+ onClick?: undefined;
6
6
  style?: undefined;
7
7
  } | {
8
8
  onClick: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useCollapsible.d.ts","sourceRoot":"","sources":["../../../../src/widgets/xml-viewer/hooks/useCollapsible.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;;EAqB3C"}
1
+ {"version":3,"file":"useCollapsible.d.ts","sourceRoot":"","sources":["../../../../src/widgets/xml-viewer/hooks/useCollapsible.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;YAkBjB,MAAM;;;EAGhC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertesia/ui",
3
- "version": "1.5.0-dev.20260725.083715Z",
3
+ "version": "1.5.0-dev.20260806.125520Z",
4
4
  "description": "Vertesia UI components and and hooks",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -24,24 +24,24 @@
24
24
  "@floating-ui/dom": "^1.8.0",
25
25
  "@floating-ui/react": "^0.27.20",
26
26
  "@monaco-editor/react": "^4.7.0",
27
- "@radix-ui/react-checkbox": "^1.3.7",
28
- "@radix-ui/react-collapsible": "^1.1.16",
29
- "@radix-ui/react-dialog": "^1.1.19",
30
- "@radix-ui/react-direction": "^1.1.2",
31
- "@radix-ui/react-dismissable-layer": "^1.1.15",
32
- "@radix-ui/react-dropdown-menu": "^2.1.20",
33
- "@radix-ui/react-focus-guards": "^1.1.4",
34
- "@radix-ui/react-focus-scope": "^1.1.12",
35
- "@radix-ui/react-label": "^2.1.11",
36
- "@radix-ui/react-popover": "^1.1.19",
37
- "@radix-ui/react-portal": "^1.1.13",
38
- "@radix-ui/react-radio-group": "^1.4.3",
39
- "@radix-ui/react-separator": "^1.1.11",
40
- "@radix-ui/react-slider": "^1.4.3",
41
- "@radix-ui/react-slot": "^1.3.0",
42
- "@radix-ui/react-switch": "^1.3.3",
43
- "@radix-ui/react-tabs": "^1.1.17",
44
- "@radix-ui/react-tooltip": "^1.2.12",
27
+ "@radix-ui/react-checkbox": "^1.3.11",
28
+ "@radix-ui/react-collapsible": "^1.1.20",
29
+ "@radix-ui/react-dialog": "^1.1.23",
30
+ "@radix-ui/react-direction": "^1.1.4",
31
+ "@radix-ui/react-dismissable-layer": "^1.1.19",
32
+ "@radix-ui/react-dropdown-menu": "^2.1.24",
33
+ "@radix-ui/react-focus-guards": "^1.1.6",
34
+ "@radix-ui/react-focus-scope": "^1.1.16",
35
+ "@radix-ui/react-label": "^2.1.15",
36
+ "@radix-ui/react-popover": "^1.1.23",
37
+ "@radix-ui/react-portal": "^1.1.17",
38
+ "@radix-ui/react-radio-group": "^1.4.7",
39
+ "@radix-ui/react-separator": "^1.1.15",
40
+ "@radix-ui/react-slider": "^1.4.7",
41
+ "@radix-ui/react-slot": "^1.3.3",
42
+ "@radix-ui/react-switch": "^1.3.7",
43
+ "@radix-ui/react-tabs": "^1.1.21",
44
+ "@radix-ui/react-tooltip": "^1.2.16",
45
45
  "ajv": "^8.20.0",
46
46
  "ajv-formats": "^3.0.1",
47
47
  "aria-hidden": "^1.2.6",
@@ -56,11 +56,11 @@
56
56
  "framer-motion": "^12.42.2",
57
57
  "i18next": "^26.3.6",
58
58
  "jwt-decode": "^4.0.0",
59
- "katex": "^0.17.0",
59
+ "katex": "^0.18.1",
60
60
  "lodash-es": "^4.18.1",
61
- "lucide-react": "^1.24.0",
61
+ "lucide-react": "^1.27.0",
62
62
  "mermaid": "^11.16.0",
63
- "monaco-editor": "^0.55.1",
63
+ "monaco-editor": "^0.56.0",
64
64
  "motion": "^12.42.2",
65
65
  "papaparse": "^5.5.4",
66
66
  "react": "19.2.7",
@@ -68,7 +68,7 @@
68
68
  "react-date-picker": "^12.0.2",
69
69
  "react-dom": "19.2.7",
70
70
  "react-error-boundary": "^6.1.2",
71
- "react-i18next": "^17.0.9",
71
+ "react-i18next": "^17.0.11",
72
72
  "react-markdown": "^10.1.0",
73
73
  "react-pdf": "^10.4.1",
74
74
  "react-remove-scroll": "^2.7.2",
@@ -86,14 +86,14 @@
86
86
  "tailwind-merge": "^3.6.0",
87
87
  "ts-md5": "^2.0.1",
88
88
  "unist-util-visit": "^5.1.0",
89
- "vega": "^6.2.0",
89
+ "vega": "^6.3.1",
90
90
  "vega-embed": "^7.1.0",
91
91
  "vega-lite": "^6.4.3",
92
- "@vertesia/client": "1.5.0-dev.20260725.083715Z",
93
- "@vertesia/common": "1.5.0-dev.20260725.083715Z",
94
- "@vertesia/fusion-ux": "1.5.0-dev.20260725.083715Z",
95
- "@vertesia/rich-text": "1.5.0-dev.20260725.083715Z",
96
- "@vertesia/json": "1.5.0-dev.20260725.083715Z"
92
+ "@vertesia/common": "1.5.0-dev.20260806.125520Z",
93
+ "@vertesia/fusion-ux": "1.5.0-dev.20260806.125520Z",
94
+ "@vertesia/json": "1.5.0-dev.20260806.125520Z",
95
+ "@vertesia/rich-text": "1.5.0-dev.20260806.125520Z",
96
+ "@vertesia/client": "1.5.0-dev.20260806.125520Z"
97
97
  },
98
98
  "devDependencies": {
99
99
  "@testing-library/react": "^16.3.2",
@@ -106,10 +106,10 @@
106
106
  "@types/react-dom": "19.2.3",
107
107
  "axe-core": "^4.12.1",
108
108
  "culori": "^4.0.2",
109
- "i18next-cli": "^1.66.0",
110
- "jsdom": "^29.1.1",
109
+ "i18next-cli": "^1.67.3",
110
+ "jsdom": "^30.0.0",
111
111
  "rolldown": "1.2.0",
112
- "typescript": "^6.0.3",
112
+ "typescript": "7.0.2",
113
113
  "vitest": "^4.1.10",
114
114
  "vitest-axe": "^0.1.0",
115
115
  "wcag-contrast": "^3.0.0",
@@ -184,7 +184,7 @@
184
184
  "url": "https://github.com/vertesia/composableai.git",
185
185
  "directory": "packages/ui"
186
186
  },
187
- "gitHead": "57bcc2f27dd17b3387f27c18e89329c4c37f98ac",
187
+ "gitHead": "416423ef4182d8668809604902a871ca79629298",
188
188
  "scripts": {
189
189
  "clean:lib": "rimraf ./lib ./tsconfig.tsbuildinfo",
190
190
  "clean": "rimraf ./node_modules ./lib ./tsconfig.tsbuildinfo",
@@ -49,7 +49,8 @@ export function useFetch<T = unknown>(fetcher: () => Promise<T>, opts?: FetchOpt
49
49
  useEffect(() => {
50
50
  const currentOptions = optionsRef.current;
51
51
  if (!currentOptions.condition || currentOptions.condition()) {
52
- fetch();
52
+ // `fetch` handles its own rejections (see the `.catch` above), so there is nothing to await here.
53
+ void fetch();
53
54
  }
54
55
  }, [fetch, ...(options.deps ?? [])]);
55
56
  return { data, isLoading, error, setData, refetch: fetch };
@@ -0,0 +1,139 @@
1
+ import { act, render } from '@testing-library/react';
2
+ import { useRef, useState } from 'react';
3
+ import { beforeAll, describe, expect, it, vi } from 'vitest';
4
+ import { type ScrollableSearchResult, useDefaultScrollableSearch } from './useScrollableSearch';
5
+
6
+ beforeAll(() => {
7
+ // jsdom has no IntersectionObserver; the hook only needs it constructible.
8
+ vi.stubGlobal(
9
+ 'IntersectionObserver',
10
+ class {
11
+ observe() {}
12
+ unobserve() {}
13
+ disconnect() {}
14
+ },
15
+ );
16
+ });
17
+
18
+ /**
19
+ * Regression tests for the infinite request loop: callers pass an INLINE search
20
+ * closure (new identity every render). The fetch effect must not depend on that
21
+ * identity, otherwise every completed request re-triggers the effect forever.
22
+ */
23
+
24
+ type Item = { id: number };
25
+
26
+ function flush(): Promise<void> {
27
+ // Drain the microtask queue so pending search promises settle.
28
+ return act(() => Promise.resolve());
29
+ }
30
+
31
+ function Harness({
32
+ searchFn,
33
+ onApi,
34
+ }: {
35
+ searchFn: (payload: unknown, offset: number, limit: number) => Promise<Item[]>;
36
+ onApi: (api: ScrollableSearchResult<Item, unknown, number>) => void;
37
+ }) {
38
+ const loadMoreRef = useRef<HTMLDivElement>(null);
39
+ // Unrelated state to force extra re-renders, as a real page would.
40
+ const [, setTick] = useState(0);
41
+ const api = useDefaultScrollableSearch<Item, unknown>({
42
+ // Inline closure ON PURPOSE — new identity on every render, like real callers.
43
+ async search(payload, offset, limit) {
44
+ return searchFn(payload, offset, limit);
45
+ },
46
+ pageSize: 2,
47
+ nextPageTrigger: loadMoreRef,
48
+ payload: {},
49
+ });
50
+ onApi(api);
51
+ return (
52
+ <div>
53
+ <button type="button" data-testid="rerender" onClick={() => setTick((t) => t + 1)} />
54
+ <div ref={loadMoreRef} />
55
+ </div>
56
+ );
57
+ }
58
+
59
+ function setup(searchFn: (payload: unknown, offset: number, limit: number) => Promise<Item[]>) {
60
+ let api!: ScrollableSearchResult<Item, unknown, number>;
61
+ const utils = render(
62
+ <Harness
63
+ searchFn={searchFn}
64
+ onApi={(a) => {
65
+ api = a;
66
+ }}
67
+ />,
68
+ );
69
+ return { ...utils, getApi: () => api };
70
+ }
71
+
72
+ describe('useDefaultScrollableSearch', () => {
73
+ it('fetches exactly once on mount despite inline search closures and re-renders', async () => {
74
+ const searchFn = vi.fn(async () => [{ id: 1 }, { id: 2 }]);
75
+ const { getApi } = setup(searchFn);
76
+
77
+ await flush();
78
+ expect(searchFn).toHaveBeenCalledTimes(1);
79
+ expect(getApi().result).toEqual([{ id: 1 }, { id: 2 }]);
80
+
81
+ // Extra render cycles (state updates elsewhere on the page) must NOT re-fetch.
82
+ await flush();
83
+ await flush();
84
+ expect(searchFn).toHaveBeenCalledTimes(1);
85
+ });
86
+
87
+ it('searchMore appends the next page (single extra request)', async () => {
88
+ const pages: Item[][] = [[{ id: 1 }, { id: 2 }], [{ id: 3 }]];
89
+ const searchFn = vi.fn(async (_p: unknown, offset: number) => pages[offset / 2] ?? []);
90
+ const { getApi } = setup(searchFn);
91
+ await flush();
92
+
93
+ act(() => getApi().searchMore());
94
+ await flush();
95
+
96
+ expect(searchFn).toHaveBeenCalledTimes(2);
97
+ expect(getApi().result).toEqual([{ id: 1 }, { id: 2 }, { id: 3 }]);
98
+ // Page of 1 < pageSize still probes once more only when triggered — no auto loop.
99
+ await flush();
100
+ expect(searchFn).toHaveBeenCalledTimes(2);
101
+ });
102
+
103
+ it('refresh() re-fetches even on the first page (same payload, same page)', async () => {
104
+ const searchFn = vi.fn(async () => [{ id: 1 }]);
105
+ const { getApi } = setup(searchFn);
106
+ await flush();
107
+ expect(searchFn).toHaveBeenCalledTimes(1);
108
+
109
+ act(() => getApi().refresh());
110
+ await flush();
111
+ expect(searchFn).toHaveBeenCalledTimes(2);
112
+ });
113
+
114
+ it('empty result stops pagination (hasMore=false) and does not re-fetch', async () => {
115
+ const searchFn = vi.fn(async () => []);
116
+ const { getApi } = setup(searchFn);
117
+ await flush();
118
+
119
+ expect(searchFn).toHaveBeenCalledTimes(1);
120
+ expect(getApi().hasMore).toBe(false);
121
+
122
+ act(() => getApi().searchMore());
123
+ await flush();
124
+ // nextPage is null — searchMore is a no-op.
125
+ expect(searchFn).toHaveBeenCalledTimes(1);
126
+ });
127
+
128
+ it('a failing search sets error once and does not retry in a loop', async () => {
129
+ const searchFn = vi.fn(async () => {
130
+ throw new Error('boom');
131
+ });
132
+ const { getApi } = setup(searchFn);
133
+ await flush();
134
+ await flush();
135
+
136
+ expect(getApi().error?.message).toBe('boom');
137
+ expect(searchFn).toHaveBeenCalledTimes(1);
138
+ });
139
+ });
@@ -48,7 +48,7 @@ interface ScrollableSearchOptions<ResultT, PayloadT, PageT = number> {
48
48
  nextPageTrigger: React.RefObject<HTMLElement | null>;
49
49
  }
50
50
 
51
- interface ScrollableSearchResult<ResultT, PayloadT, PageT = number> {
51
+ export interface ScrollableSearchResult<ResultT, PayloadT, PageT = number> {
52
52
  /**
53
53
  * Initiates a new search with the given payload
54
54
  * @param payload The search payload
@@ -105,15 +105,27 @@ export function useScrollableSearch<ResultT, PayloadT, PageT = number>(
105
105
  const [results, setResults] = useState<ResultT[]>([]);
106
106
  const [nextPage, setNextPage] = useState<PageT | null>(null);
107
107
  const [isSearching, setIsSearching] = useState(false);
108
+ // Bumped by search()/refresh() so the fetch effect re-runs even when the
109
+ // payload/page state is unchanged (e.g. refresh on the first page).
110
+ const [refreshTick, setRefreshTick] = useState(0);
108
111
 
109
112
  // Track current request to prevent stale results
110
113
  const requestIdRef = useRef(0);
111
114
 
115
+ // Latest-ref for the search function: callers routinely pass an inline
116
+ // closure, which gets a new identity on every render. Depending on it in
117
+ // the fetch effect made every completed request re-trigger the effect —
118
+ // an infinite request loop. The ref always points at the latest closure
119
+ // without participating in the effect's dependencies.
120
+ const searchFnRef = useRef(opts.search);
121
+ searchFnRef.current = opts.search;
122
+
112
123
  const search = (payload: PayloadT) => {
113
124
  setPage(null);
114
125
  setResults([]); // Clear old results immediately
115
126
  setNextPage(null);
116
127
  setLastPayload(payload);
128
+ setRefreshTick((tick) => tick + 1);
117
129
  };
118
130
 
119
131
  const searchMore = () => {
@@ -122,13 +134,15 @@ export function useScrollableSearch<ResultT, PayloadT, PageT = number>(
122
134
  }
123
135
  };
124
136
 
137
+ // biome-ignore lint/correctness/useExhaustiveDependencies: refreshTick is an intentional external trigger — refresh() bumps it to re-run the fetch when payload/page are unchanged
125
138
  useEffect(() => {
126
139
  // Increment request ID to mark previous requests as stale
127
140
  requestIdRef.current += 1;
128
141
  const currentRequestId = requestIdRef.current;
129
142
 
130
143
  setIsSearching(true);
131
- opts.search(lastPayload, page, pageSize)
144
+ searchFnRef
145
+ .current(lastPayload, page, pageSize)
132
146
  .then((r) => {
133
147
  // Only update state if this is still the current request
134
148
  if (currentRequestId !== requestIdRef.current) {
@@ -158,7 +172,7 @@ export function useScrollableSearch<ResultT, PayloadT, PageT = number>(
158
172
  setIsSearching(false);
159
173
  }
160
174
  });
161
- }, [...dependencies, lastPayload, opts.search, page, pageSize]);
175
+ }, [...dependencies, lastPayload, refreshTick, page, pageSize]);
162
176
 
163
177
  // Intersection observer for infinite scrolling
164
178
  useIntersectionObserver(
package/src/env/index.ts CHANGED
@@ -17,6 +17,8 @@ export interface EnvProps {
17
17
  sts: string; // Security Token Service endpoint
18
18
  git?: string; // Smart HTTP app source git endpoint
19
19
  mcp?: string;
20
+ /** Appgen app-gateway endpoint (serves live development previews and app bundles). */
21
+ gateway?: string;
20
22
  };
21
23
  firebase?: {
22
24
  apiKey: string;
@@ -24,6 +24,8 @@ describe('AgentChatPlaybackControls', () => {
24
24
  <AgentChatPlaybackControls cursor="live" messages={messages} onChangeCursor={onChangeCursor} />,
25
25
  );
26
26
 
27
+ expect(screen.getByText('Debug')).toBeTruthy();
28
+
27
29
  fireEvent.click(screen.getByRole('button', { name: 'Jump to first message' }));
28
30
 
29
31
  expect(onChangeCursor).toHaveBeenCalledWith(0);
@@ -1,22 +1,30 @@
1
- import { fireEvent, screen } from '@testing-library/react';
1
+ import { fireEvent, screen, waitFor } from '@testing-library/react';
2
2
  import { AgentMessageType } from '@vertesia/common';
3
- import { describe, expect, it, vi } from 'vitest';
3
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
4
4
  import { renderWithProviders } from '../../../__tests__/test-utils.js';
5
5
  import { AgentRequestInputOverlay } from './AgentRequestInputOverlay';
6
6
  import type { RequestInputMessageWithUx } from './ModernAgentOutput/requestInputMessages';
7
7
 
8
+ const mocks = vi.hoisted(() => ({
9
+ getCollectionStatus: vi.fn(),
10
+ }));
11
+
8
12
  vi.mock('@vertesia/ui/session', () => ({
9
13
  useUserSession: () => ({
10
14
  client: {
11
15
  remoteMcpConnections: {
12
- getCollectionStatus: vi.fn(),
16
+ getCollectionStatus: mocks.getCollectionStatus,
13
17
  },
14
18
  },
15
19
  }),
16
20
  }));
17
21
 
18
22
  vi.mock('../../oauth/RemoteMcpConnectionButton.js', () => ({
19
- RemoteMcpConnectionButton: () => <button type="button">Connect</button>,
23
+ RemoteMcpConnectionButton: ({ onAuthChange }: { onAuthChange: () => void }) => (
24
+ <button type="button" onClick={onAuthChange}>
25
+ Connect
26
+ </button>
27
+ ),
20
28
  }));
21
29
 
22
30
  function createMcpRequestMessage(): RequestInputMessageWithUx {
@@ -27,6 +35,7 @@ function createMcpRequestMessage(): RequestInputMessageWithUx {
27
35
  workstream_id: 'main',
28
36
  message: 'Connect to Jira to continue.',
29
37
  details: {
38
+ request_id: 'request-mcp-1',
30
39
  ux: {
31
40
  mcp_connect: {
32
41
  app_install_id: 'app1',
@@ -46,6 +55,7 @@ function createToolApprovalRequestMessage(): RequestInputMessageWithUx {
46
55
  workstream_id: 'main',
47
56
  message: 'Approve Write Artifact: quotes.md?',
48
57
  details: {
58
+ request_id: 'write_artifact:name:quotes.md',
49
59
  tool_approval: {
50
60
  tool_name: 'write_artifact',
51
61
  tool_title: 'Write Artifact',
@@ -74,6 +84,11 @@ function createToolApprovalRequestMessage(): RequestInputMessageWithUx {
74
84
  }
75
85
 
76
86
  describe('AgentRequestInputOverlay', () => {
87
+ beforeEach(() => {
88
+ vi.clearAllMocks();
89
+ mocks.getCollectionStatus.mockResolvedValue({ authenticated: true });
90
+ });
91
+
77
92
  it('lets the user decline an MCP connection request', () => {
78
93
  const onSendMessage = vi.fn();
79
94
 
@@ -86,7 +101,29 @@ describe('AgentRequestInputOverlay', () => {
86
101
  fireEvent.click(screen.getByRole('button', { name: /decline/i }));
87
102
 
88
103
  expect(onSendMessage).toHaveBeenCalledTimes(1);
89
- expect(onSendMessage).toHaveBeenCalledWith("I don't want to connect to Jira. Continue without it.");
104
+ expect(onSendMessage).toHaveBeenCalledWith("I don't want to connect to Jira. Continue without it.", {
105
+ request_input_response: { request_id: 'request-mcp-1' },
106
+ });
107
+ });
108
+
109
+ it('correlates a successful MCP connection response', async () => {
110
+ const onMcpConnected = vi.fn();
111
+
112
+ renderWithProviders(
113
+ <AgentRequestInputOverlay
114
+ message={createMcpRequestMessage()}
115
+ onSendMessage={vi.fn()}
116
+ onMcpConnected={onMcpConnected}
117
+ />,
118
+ );
119
+
120
+ fireEvent.click(screen.getByRole('button', { name: 'Connect' }));
121
+
122
+ await waitFor(() => {
123
+ expect(onMcpConnected).toHaveBeenCalledWith(expect.objectContaining({ collection_id: 'jira' }), {
124
+ request_input_response: { request_id: 'request-mcp-1' },
125
+ });
126
+ });
90
127
  });
91
128
 
92
129
  it('sends a commented tool approval denial with structured metadata', () => {
@@ -107,6 +144,9 @@ describe('AgentRequestInputOverlay', () => {
107
144
  decision: 'deny_with_feedback',
108
145
  approval_key: 'write_artifact:name:quotes.md',
109
146
  },
147
+ request_input_response: {
148
+ request_id: 'write_artifact:name:quotes.md',
149
+ },
110
150
  });
111
151
  });
112
152
 
@@ -125,6 +165,9 @@ describe('AgentRequestInputOverlay', () => {
125
165
  decision: 'allow_for_run',
126
166
  approval_key: 'write_artifact:name:quotes.md',
127
167
  },
168
+ request_input_response: {
169
+ request_id: 'write_artifact:name:quotes.md',
170
+ },
128
171
  });
129
172
  });
130
173
 
@@ -138,7 +181,9 @@ describe('AgentRequestInputOverlay', () => {
138
181
  fireEvent.click(screen.getByRole('button', { name: 'Allow once' }));
139
182
 
140
183
  expect(onSendMessage).toHaveBeenCalledTimes(1);
141
- expect(onSendMessage).toHaveBeenCalledWith('allow_once');
184
+ expect(onSendMessage).toHaveBeenCalledWith('allow_once', {
185
+ request_input_response: { request_id: 'write_artifact:name:quotes.md' },
186
+ });
142
187
  });
143
188
 
144
189
  it('renders legacy field-prefixed tool approval prompts with a friendly target', () => {
@@ -7,15 +7,17 @@ import { RemoteMcpConnectionButton } from '../../oauth/RemoteMcpConnectionButton
7
7
  import { AskUserWidget } from './AskUserWidget';
8
8
  import {
9
9
  getRequestInputDisplayText,
10
+ getRequestInputResponseMetadata,
10
11
  getToolApprovalResponseMetadata,
11
12
  type RequestInputMessageWithUx,
13
+ sendRequestInputResponse,
12
14
  } from './ModernAgentOutput/requestInputMessages';
13
15
 
14
16
  export interface AgentRequestInputOverlayProps {
15
17
  message?: RequestInputMessageWithUx;
16
18
  onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
17
19
  /** Called after the user connects the MCP server requested by request_mcp_connection. */
18
- onMcpConnected?: (cfg: McpConnectUxConfig) => void;
20
+ onMcpConnected?: (cfg: McpConnectUxConfig, metadata?: Record<string, unknown>) => void;
19
21
  isLoading?: boolean;
20
22
  disabled?: boolean;
21
23
  className?: string;
@@ -81,11 +83,7 @@ export function AgentRequestInputOverlay({
81
83
  const displayText = getRequestInputDisplayText(message);
82
84
  const send = (value: string, metadata?: Record<string, unknown>) => {
83
85
  if (isDisabled) return;
84
- if (metadata) {
85
- onSendMessage?.(value, metadata);
86
- } else {
87
- onSendMessage?.(value);
88
- }
86
+ sendRequestInputResponse(onSendMessage, message, value, metadata);
89
87
  };
90
88
 
91
89
  const wrapperClassName = cn(
@@ -102,7 +100,7 @@ export function AgentRequestInputOverlay({
102
100
  <div className="min-w-0 text-sm leading-6 text-foreground/85">{displayText}</div>
103
101
  <McpRequestInputControls
104
102
  mcpConnect={mcpConnect}
105
- onMcpConnected={onMcpConnected}
103
+ onMcpConnected={(cfg) => onMcpConnected?.(cfg, getRequestInputResponseMetadata(message))}
106
104
  onDecline={() => send(t('agent.mcpDeclinedMessage', { name: mcpConnect.name }))}
107
105
  disabled={isDisabled}
108
106
  />