@vertesia/ui 1.6.0-dev.20260918.090710Z → 1.6.0-dev.20260923.085325Z

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 (288) hide show
  1. package/lib/boot/branding.d.ts +13 -0
  2. package/lib/boot/branding.d.ts.map +1 -1
  3. package/lib/boot/branding.js +7 -0
  4. package/lib/boot/branding.js.map +1 -1
  5. package/lib/boot/index.d.ts +1 -1
  6. package/lib/boot/index.d.ts.map +1 -1
  7. package/lib/boot/index.js +5 -23
  8. package/lib/boot/index.js.map +1 -1
  9. package/lib/boot/loading.d.ts +4 -0
  10. package/lib/boot/loading.d.ts.map +1 -0
  11. package/lib/boot/loading.js +28 -0
  12. package/lib/boot/loading.js.map +1 -0
  13. package/lib/core/components/SelectList.d.ts.map +1 -1
  14. package/lib/core/components/SelectList.js +3 -3
  15. package/lib/core/components/SelectList.js.map +1 -1
  16. package/lib/core/components/SidePanel.d.ts.map +1 -1
  17. package/lib/core/components/SidePanel.js +2 -1
  18. package/lib/core/components/SidePanel.js.map +1 -1
  19. package/lib/core/components/shadcn/theme/ThemeProvider.d.ts.map +1 -1
  20. package/lib/core/components/shadcn/theme/ThemeProvider.js +21 -5
  21. package/lib/core/components/shadcn/theme/ThemeProvider.js.map +1 -1
  22. package/lib/env/index.d.ts +11 -0
  23. package/lib/env/index.d.ts.map +1 -1
  24. package/lib/env/index.js +16 -3
  25. package/lib/env/index.js.map +1 -1
  26. package/lib/features/agent/chat/ModernAgentConversation.js +4 -1
  27. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  28. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +5 -1
  29. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  30. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +9 -2
  31. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  32. package/lib/features/magic-pdf/GroundedExtractionView.js +3 -3
  33. package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -1
  34. package/lib/features/media-viewer/AudioPanel.d.ts +10 -2
  35. package/lib/features/media-viewer/AudioPanel.d.ts.map +1 -1
  36. package/lib/features/media-viewer/AudioPanel.js +78 -13
  37. package/lib/features/media-viewer/AudioPanel.js.map +1 -1
  38. package/lib/features/oauth/McpConnectionsButton.d.ts +2 -2
  39. package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
  40. package/lib/features/oauth/McpConnectionsButton.js +9 -7
  41. package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
  42. package/lib/features/oauth/McpConnectionsDialog.d.ts.map +1 -1
  43. package/lib/features/oauth/McpConnectionsDialog.js +7 -3
  44. package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
  45. package/lib/features/oauth/useMcpConnections.d.ts +4 -2
  46. package/lib/features/oauth/useMcpConnections.d.ts.map +1 -1
  47. package/lib/features/oauth/useMcpConnections.js +15 -9
  48. package/lib/features/oauth/useMcpConnections.js.map +1 -1
  49. package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
  50. package/lib/features/store/objects/selection/ObjectsActionContext.js +2 -0
  51. package/lib/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
  52. package/lib/features/store/objects/selection/SelectionActions.d.ts +4 -2
  53. package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  54. package/lib/features/store/objects/selection/SelectionActions.js +6 -3
  55. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  56. package/lib/features/store/objects/selection/actions/StartWorkflowAction.d.ts +4 -0
  57. package/lib/features/store/objects/selection/actions/StartWorkflowAction.d.ts.map +1 -0
  58. package/lib/features/store/objects/selection/actions/StartWorkflowAction.js +81 -0
  59. package/lib/features/store/objects/selection/actions/StartWorkflowAction.js.map +1 -0
  60. package/lib/features/store/objects/selection/actions/index.d.ts +1 -0
  61. package/lib/features/store/objects/selection/actions/index.d.ts.map +1 -1
  62. package/lib/features/store/objects/selection/actions/index.js +1 -0
  63. package/lib/features/store/objects/selection/actions/index.js.map +1 -1
  64. package/lib/features/store/types/TypeRegistry.d.ts +345 -155
  65. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  66. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +345 -155
  67. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  68. package/lib/i18n/locales/ar.json +10 -2
  69. package/lib/i18n/locales/de.json +6 -2
  70. package/lib/i18n/locales/en.json +6 -2
  71. package/lib/i18n/locales/es.json +6 -2
  72. package/lib/i18n/locales/fr.json +7 -2
  73. package/lib/i18n/locales/it.json +6 -2
  74. package/lib/i18n/locales/ja.json +6 -2
  75. package/lib/i18n/locales/ko.json +6 -2
  76. package/lib/i18n/locales/pt.json +6 -2
  77. package/lib/i18n/locales/ru.json +8 -2
  78. package/lib/i18n/locales/tr.json +6 -2
  79. package/lib/i18n/locales/zh-TW.json +6 -2
  80. package/lib/i18n/locales/zh.json +6 -2
  81. package/lib/session/UserSession.d.ts +3 -0
  82. package/lib/session/UserSession.d.ts.map +1 -1
  83. package/lib/session/UserSession.js +18 -8
  84. package/lib/session/UserSession.js.map +1 -1
  85. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  86. package/lib/session/UserSessionProvider.js +34 -24
  87. package/lib/session/UserSessionProvider.js.map +1 -1
  88. package/lib/session/auth/authRoundTrip.d.ts +8 -0
  89. package/lib/session/auth/authRoundTrip.d.ts.map +1 -0
  90. package/lib/session/auth/authRoundTrip.js +22 -0
  91. package/lib/session/auth/authRoundTrip.js.map +1 -0
  92. package/lib/session/auth/composable.d.ts.map +1 -1
  93. package/lib/session/auth/composable.js +9 -7
  94. package/lib/session/auth/composable.js.map +1 -1
  95. package/lib/session/auth/domainRouting.d.ts +13 -6
  96. package/lib/session/auth/domainRouting.d.ts.map +1 -1
  97. package/lib/session/auth/domainRouting.js +2 -21
  98. package/lib/session/auth/domainRouting.js.map +1 -1
  99. package/lib/session/auth/oauth.d.ts +6 -1
  100. package/lib/session/auth/oauth.d.ts.map +1 -1
  101. package/lib/session/auth/oauth.js +145 -8
  102. package/lib/session/auth/oauth.js.map +1 -1
  103. package/lib/session/auth/tokenIssuer.d.ts +3 -0
  104. package/lib/session/auth/tokenIssuer.d.ts.map +1 -0
  105. package/lib/session/auth/tokenIssuer.js +27 -0
  106. package/lib/session/auth/tokenIssuer.js.map +1 -0
  107. package/lib/session/auth/vertesiaHosts.d.ts +47 -0
  108. package/lib/session/auth/vertesiaHosts.d.ts.map +1 -0
  109. package/lib/session/auth/vertesiaHosts.js +79 -0
  110. package/lib/session/auth/vertesiaHosts.js.map +1 -0
  111. package/lib/session/index.d.ts +1 -0
  112. package/lib/session/index.d.ts.map +1 -1
  113. package/lib/session/index.js +1 -0
  114. package/lib/session/index.js.map +1 -1
  115. package/lib/shell/AuthScreenPreview.d.ts +1 -1
  116. package/lib/shell/AuthScreenPreview.d.ts.map +1 -1
  117. package/lib/shell/AuthScreenPreview.js +2 -5
  118. package/lib/shell/AuthScreenPreview.js.map +1 -1
  119. package/lib/shell/BrandedAuthScreens.d.ts +1 -4
  120. package/lib/shell/BrandedAuthScreens.d.ts.map +1 -1
  121. package/lib/shell/BrandedAuthScreens.js +5 -26
  122. package/lib/shell/BrandedAuthScreens.js.map +1 -1
  123. package/lib/shell/BrandedLoadingIndicator.d.ts +11 -0
  124. package/lib/shell/BrandedLoadingIndicator.d.ts.map +1 -0
  125. package/lib/shell/BrandedLoadingIndicator.js +27 -0
  126. package/lib/shell/BrandedLoadingIndicator.js.map +1 -0
  127. package/lib/shell/SplashScreen.d.ts.map +1 -1
  128. package/lib/shell/SplashScreen.js +2 -1
  129. package/lib/shell/SplashScreen.js.map +1 -1
  130. package/lib/shell/apps/AppInstallationProvider.d.ts +16 -4
  131. package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
  132. package/lib/shell/apps/iframe-auth.d.ts +2 -0
  133. package/lib/shell/apps/iframe-auth.d.ts.map +1 -1
  134. package/lib/shell/apps/iframe-auth.js +6 -2
  135. package/lib/shell/apps/iframe-auth.js.map +1 -1
  136. package/lib/shell/index.d.ts +1 -0
  137. package/lib/shell/index.d.ts.map +1 -1
  138. package/lib/shell/index.js +1 -0
  139. package/lib/shell/index.js.map +1 -1
  140. package/lib/shell/login/SignInAuthPending.js +2 -2
  141. package/lib/shell/login/SignInAuthPending.js.map +1 -1
  142. package/lib/shell/login/SignInEmailStep.d.ts.map +1 -1
  143. package/lib/shell/login/SignInEmailStep.js +2 -2
  144. package/lib/shell/login/SignInEmailStep.js.map +1 -1
  145. package/lib/shell/login/TerminalLogin.d.ts.map +1 -1
  146. package/lib/shell/login/TerminalLogin.js +28 -21
  147. package/lib/shell/login/TerminalLogin.js.map +1 -1
  148. package/lib/vertesia-ui-boot.js +33 -29
  149. package/lib/vertesia-ui-boot.js.map +1 -1
  150. package/lib/vertesia-ui-core.js +34 -34
  151. package/lib/vertesia-ui-core.js.map +1 -1
  152. package/lib/vertesia-ui-env.js +1 -1
  153. package/lib/vertesia-ui-env.js.map +1 -1
  154. package/lib/vertesia-ui-features.js +163 -163
  155. package/lib/vertesia-ui-features.js.map +1 -1
  156. package/lib/vertesia-ui-i18n.Bl8KeZUK.chunk.js +5 -0
  157. package/lib/vertesia-ui-i18n.Bl8KeZUK.chunk.js.map +1 -0
  158. package/lib/vertesia-ui-i18n.BmT06XFI.chunk.js +5 -0
  159. package/lib/vertesia-ui-i18n.BmT06XFI.chunk.js.map +1 -0
  160. package/lib/vertesia-ui-i18n.Ch-Jjj0L.chunk.js +5 -0
  161. package/lib/vertesia-ui-i18n.Ch-Jjj0L.chunk.js.map +1 -0
  162. package/lib/vertesia-ui-i18n.CjhloW9s.chunk.js +5 -0
  163. package/lib/vertesia-ui-i18n.CjhloW9s.chunk.js.map +1 -0
  164. package/lib/vertesia-ui-i18n.CkfHdQzY.chunk.js +5 -0
  165. package/lib/vertesia-ui-i18n.CkfHdQzY.chunk.js.map +1 -0
  166. package/lib/vertesia-ui-i18n.DFuKfTe1.chunk.js +5 -0
  167. package/lib/vertesia-ui-i18n.DFuKfTe1.chunk.js.map +1 -0
  168. package/lib/vertesia-ui-i18n.DHqNVekZ.chunk.js +5 -0
  169. package/lib/vertesia-ui-i18n.DHqNVekZ.chunk.js.map +1 -0
  170. package/lib/vertesia-ui-i18n.DOaKbmaj.chunk.js +5 -0
  171. package/lib/vertesia-ui-i18n.DOaKbmaj.chunk.js.map +1 -0
  172. package/lib/vertesia-ui-i18n.Dge3Gl-h.chunk.js +5 -0
  173. package/lib/vertesia-ui-i18n.Dge3Gl-h.chunk.js.map +1 -0
  174. package/lib/vertesia-ui-i18n.GLt-10Lx.chunk.js +5 -0
  175. package/lib/vertesia-ui-i18n.GLt-10Lx.chunk.js.map +1 -0
  176. package/lib/vertesia-ui-i18n.T-XtAGbw.chunk.js +5 -0
  177. package/lib/vertesia-ui-i18n.T-XtAGbw.chunk.js.map +1 -0
  178. package/lib/vertesia-ui-i18n.VOJyTpMM.chunk.js +5 -0
  179. package/lib/vertesia-ui-i18n.VOJyTpMM.chunk.js.map +1 -0
  180. package/lib/vertesia-ui-i18n.js +3 -3
  181. package/lib/vertesia-ui-i18n.js.map +1 -1
  182. package/lib/vertesia-ui-layout.js +15 -15
  183. package/lib/vertesia-ui-layout.js.map +1 -1
  184. package/lib/vertesia-ui-rich-text.js +44 -44
  185. package/lib/vertesia-ui-rich-text.js.map +1 -1
  186. package/lib/vertesia-ui-session.js +1 -1
  187. package/lib/vertesia-ui-session.js.map +1 -1
  188. package/lib/vertesia-ui-shell.js +72 -48
  189. package/lib/vertesia-ui-shell.js.map +1 -1
  190. package/lib/vertesia-ui-widgets.js +51 -51
  191. package/lib/vertesia-ui-widgets.js.map +1 -1
  192. package/package.json +19 -19
  193. package/src/boot/branding.ts +8 -0
  194. package/src/boot/index.ts +6 -23
  195. package/src/boot/loading.ts +27 -0
  196. package/src/core/components/SelectList.tsx +5 -2
  197. package/src/core/components/SidePanel.tsx +65 -60
  198. package/src/core/components/shadcn/theme/ThemeProvider.test.tsx +101 -0
  199. package/src/core/components/shadcn/theme/ThemeProvider.tsx +21 -9
  200. package/src/env/index.test.ts +21 -0
  201. package/src/env/index.ts +33 -2
  202. package/src/features/agent/chat/ModernAgentConversation.test.tsx +81 -0
  203. package/src/features/agent/chat/ModernAgentConversation.tsx +5 -0
  204. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +17 -1
  205. package/src/features/magic-pdf/GroundedExtractionView.tsx +3 -3
  206. package/src/features/media-viewer/AudioPanel.test.ts +84 -0
  207. package/src/features/media-viewer/AudioPanel.tsx +97 -14
  208. package/src/features/oauth/McpConnectionsButton.test.tsx +56 -0
  209. package/src/features/oauth/McpConnectionsButton.tsx +9 -6
  210. package/src/features/oauth/McpConnectionsDialog.tsx +14 -5
  211. package/src/features/oauth/useMcpConnections.test.ts +10 -0
  212. package/src/features/oauth/useMcpConnections.ts +18 -10
  213. package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -0
  214. package/src/features/store/objects/selection/SelectionActions.tsx +13 -6
  215. package/src/features/store/objects/selection/actions/StartWorkflowAction.tsx +162 -0
  216. package/src/features/store/objects/selection/actions/index.ts +1 -0
  217. package/src/i18n/locales/ar.json +10 -2
  218. package/src/i18n/locales/de.json +6 -2
  219. package/src/i18n/locales/en.json +6 -2
  220. package/src/i18n/locales/es.json +6 -2
  221. package/src/i18n/locales/fr.json +7 -2
  222. package/src/i18n/locales/it.json +6 -2
  223. package/src/i18n/locales/ja.json +6 -2
  224. package/src/i18n/locales/ko.json +6 -2
  225. package/src/i18n/locales/pt.json +6 -2
  226. package/src/i18n/locales/ru.json +8 -2
  227. package/src/i18n/locales/tr.json +6 -2
  228. package/src/i18n/locales/zh-TW.json +6 -2
  229. package/src/i18n/locales/zh.json +6 -2
  230. package/src/session/UserSession.test.ts +48 -3
  231. package/src/session/UserSession.ts +20 -8
  232. package/src/session/UserSessionProvider.handoff.test.tsx +103 -0
  233. package/src/session/UserSessionProvider.iframe.test.tsx +178 -0
  234. package/src/session/UserSessionProvider.state-mismatch.test.tsx +43 -0
  235. package/src/session/UserSessionProvider.tsx +35 -23
  236. package/src/session/auth/auth-flow.md +18 -5
  237. package/src/session/auth/authRoundTrip.ts +24 -0
  238. package/src/session/auth/composable.test.ts +23 -1
  239. package/src/session/auth/composable.ts +10 -8
  240. package/src/session/auth/domainRouting.ts +4 -25
  241. package/src/session/auth/oauth.test.ts +121 -4
  242. package/src/session/auth/oauth.ts +172 -11
  243. package/src/session/auth/tokenIssuer.test.ts +25 -0
  244. package/src/session/auth/tokenIssuer.ts +25 -0
  245. package/src/session/auth/vertesiaHosts.test.ts +26 -0
  246. package/src/session/auth/vertesiaHosts.ts +85 -0
  247. package/src/session/index.ts +1 -0
  248. package/src/shell/AuthScreenPreview.tsx +2 -6
  249. package/src/shell/BrandedAuthScreens.test.tsx +26 -0
  250. package/src/shell/BrandedAuthScreens.tsx +4 -40
  251. package/src/shell/BrandedLoadingIndicator.tsx +42 -0
  252. package/src/shell/SplashScreen.tsx +4 -4
  253. package/src/shell/apps/iframe-auth.test.ts +8 -11
  254. package/src/shell/apps/iframe-auth.ts +10 -1
  255. package/src/shell/index.tsx +1 -0
  256. package/src/shell/login/SignInAuthPending.tsx +2 -2
  257. package/src/shell/login/SignInEmailStep.tsx +4 -2
  258. package/src/shell/login/TerminalLogin.test.tsx +111 -0
  259. package/src/shell/login/TerminalLogin.tsx +61 -37
  260. package/lib/features/store/objects/selection/actions/StartWorkflowButton.d.ts +0 -7
  261. package/lib/features/store/objects/selection/actions/StartWorkflowButton.d.ts.map +0 -1
  262. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +0 -51
  263. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +0 -1
  264. package/lib/vertesia-ui-i18n.B3NFclwl.chunk.js +0 -5
  265. package/lib/vertesia-ui-i18n.B3NFclwl.chunk.js.map +0 -1
  266. package/lib/vertesia-ui-i18n.BWSrNIxc.chunk.js +0 -5
  267. package/lib/vertesia-ui-i18n.BWSrNIxc.chunk.js.map +0 -1
  268. package/lib/vertesia-ui-i18n.BWvWeB1p.chunk.js +0 -5
  269. package/lib/vertesia-ui-i18n.BWvWeB1p.chunk.js.map +0 -1
  270. package/lib/vertesia-ui-i18n.BZCXvTC1.chunk.js +0 -5
  271. package/lib/vertesia-ui-i18n.BZCXvTC1.chunk.js.map +0 -1
  272. package/lib/vertesia-ui-i18n.BbJMvFZW.chunk.js +0 -5
  273. package/lib/vertesia-ui-i18n.BbJMvFZW.chunk.js.map +0 -1
  274. package/lib/vertesia-ui-i18n.CE5ldwpt.chunk.js +0 -5
  275. package/lib/vertesia-ui-i18n.CE5ldwpt.chunk.js.map +0 -1
  276. package/lib/vertesia-ui-i18n.CMC0IShY.chunk.js +0 -5
  277. package/lib/vertesia-ui-i18n.CMC0IShY.chunk.js.map +0 -1
  278. package/lib/vertesia-ui-i18n.CkcRqBKU.chunk.js +0 -5
  279. package/lib/vertesia-ui-i18n.CkcRqBKU.chunk.js.map +0 -1
  280. package/lib/vertesia-ui-i18n.D-Mq1sw_.chunk.js +0 -5
  281. package/lib/vertesia-ui-i18n.D-Mq1sw_.chunk.js.map +0 -1
  282. package/lib/vertesia-ui-i18n.DkK68-A-.chunk.js +0 -5
  283. package/lib/vertesia-ui-i18n.DkK68-A-.chunk.js.map +0 -1
  284. package/lib/vertesia-ui-i18n.XE_dcCg6.chunk.js +0 -5
  285. package/lib/vertesia-ui-i18n.XE_dcCg6.chunk.js.map +0 -1
  286. package/lib/vertesia-ui-i18n.qgNqMPvK.chunk.js +0 -5
  287. package/lib/vertesia-ui-i18n.qgNqMPvK.chunk.js.map +0 -1
  288. package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +0 -104
@@ -20,13 +20,13 @@ export interface McpConnectionGroup {
20
20
  memberIds: string[];
21
21
  /** Collection names represented by this row. */
22
22
  memberNames: string[];
23
- authType: 'oauth' | 'api_key';
23
+ authType: 'none' | 'oauth' | 'api_key';
24
24
  oauthGrantType?: 'authorization_code' | 'client_credentials';
25
25
  authStatus?: OAuthAuthStatus;
26
26
  }
27
27
 
28
28
  /**
29
- * Loads the project's installed authenticated MCP tool collections and resolves their status.
29
+ * Loads the project's installed MCP tool collections and resolves their status.
30
30
  *
31
31
  * Shared by the MCP connections button (badge count) and dialog (list) so the data is
32
32
  * fetched once and refreshed together after connect/disconnect.
@@ -57,8 +57,10 @@ export function useMcpConnections() {
57
57
  const mcpCollections = inst.manifest.tool_collections
58
58
  .map((c) => normalizeToolCollection(c))
59
59
  .filter((c): c is MCPToolCollectionObject => c.type === 'mcp');
60
- const oauthCollections = mcpCollections.filter((c) => c.auth !== 'api_key' && oauthIds.includes(c.id));
61
- const apiKeyCollections = mcpCollections.filter((c) => c.auth === 'api_key');
60
+ const oauthCollections = mcpCollections.filter(
61
+ (c) => c.auth !== 'none' && c.auth !== 'api_key' && oauthIds.includes(c.id),
62
+ );
63
+ const directCollections = mcpCollections.filter((c) => c.auth === 'none' || c.auth === 'api_key');
62
64
 
63
65
  const providerMap = new Map<string, MCPToolCollectionObject[]>();
64
66
  const oauthAppMap = new Map<string, MCPToolCollectionObject[]>();
@@ -124,16 +126,16 @@ export function useMcpConnections() {
124
126
  });
125
127
  }
126
128
 
127
- for (const col of apiKeyCollections) {
129
+ for (const col of directCollections) {
128
130
  allGroups.push({
129
- key: `${inst.id}:api-key:${col.id}`,
131
+ key: `${inst.id}:${col.auth}:${col.id}`,
130
132
  appId: inst.id,
131
133
  appName: inst.manifest.title || inst.manifest.name,
132
134
  label: col.name,
133
135
  representativeId: col.id,
134
136
  memberIds: [col.id],
135
137
  memberNames: [col.name],
136
- authType: 'api_key',
138
+ authType: col.auth === 'none' ? 'none' : 'api_key',
137
139
  });
138
140
  }
139
141
  }
@@ -155,6 +157,8 @@ export function useMcpConnections() {
155
157
  const statusRequestsByApp = new Map<string, Promise<OAuthAuthStatus[]>>();
156
158
  const groupsWithStatus = await Promise.all(
157
159
  allGroups.map(async (group) => {
160
+ // Anonymous servers are available without a credential status lookup.
161
+ if (group.authType === 'none') return group;
158
162
  try {
159
163
  let statusRequest = statusRequestsByApp.get(group.appId);
160
164
  if (!statusRequest) {
@@ -219,15 +223,19 @@ export function toggleGroupDisabled(
219
223
  return Array.from(current);
220
224
  }
221
225
 
226
+ /** Anonymous servers are available without authentication; other modes require valid credentials. */
227
+ export function isGroupConnected(group: McpConnectionGroup): boolean {
228
+ return group.authType === 'none' || group.authStatus?.authenticated === true;
229
+ }
230
+
222
231
  /** Count connected MCP groups that are enabled for the current conversation. */
223
232
  export function countConnectedActiveGroups(groups: McpConnectionGroup[], disabled?: string[]): number {
224
- return groups.filter((group) => group.authStatus?.authenticated === true && !isGroupDisabled(group, disabled))
225
- .length;
233
+ return groups.filter((group) => isGroupConnected(group) && !isGroupDisabled(group, disabled)).length;
226
234
  }
227
235
 
228
236
  /** Names of connected MCP groups that are enabled for the current conversation. */
229
237
  export function getConnectedActiveGroupLabels(groups: McpConnectionGroup[], disabled?: string[]): string[] {
230
238
  return groups
231
- .filter((group) => group.authStatus?.authenticated === true && !isGroupDisabled(group, disabled))
239
+ .filter((group) => isGroupConnected(group) && !isGroupDisabled(group, disabled))
232
240
  .map((group) => group.label);
233
241
  }
@@ -10,6 +10,7 @@ import { ChangeTypeAction } from './actions/ChangeTypeAction';
10
10
  import { DeleteObjectsAction, DeleteObjectsFromCollectionsAction } from './actions/DeleteObjectsAction';
11
11
  import { ExportPropertiesAction } from './actions/ExportPropertiesAction';
12
12
  import { RemoveFromCollectionAction } from './actions/RemoveFromCollectionAction';
13
+ import { StartWorkflowAction } from './actions/StartWorkflowAction';
13
14
  import { ObjectsActionContext } from './ObjectsActionContextClass';
14
15
  import { ObjectsActionContextReact, useObjectsActionContext } from './ObjectsActionHooks';
15
16
  import type { ObjectsActionSpec } from './ObjectsActionSpec';
@@ -18,6 +19,7 @@ const DEFAULT_ACTIONS: ObjectsActionSpec[] = [
18
19
  ExportPropertiesAction,
19
20
  ChangeTypeAction,
20
21
  AddToCollectionAction,
22
+ StartWorkflowAction,
21
23
  DeleteObjectsAction,
22
24
  RemoveFromCollectionAction,
23
25
  DeleteObjectsFromCollectionsAction,
@@ -7,7 +7,6 @@ import { useState } from 'react';
7
7
  import { type DocumentSelection, useDocumentSelection } from '../DocumentSelectionProvider.js';
8
8
  import { DocumentUploadModal } from '../upload/DocumentUploadModal.js';
9
9
  import { ExportPropertiesAction } from './actions/ExportPropertiesAction';
10
- import { StartWorkflowButton } from './actions/StartWorkflowButton';
11
10
  import { ObjectsActionContextProvider } from './ObjectsActionContext';
12
11
  import { useObjectsActionContext } from './ObjectsActionHooks';
13
12
  import type { ObjectsActionSpec } from './ObjectsActionSpec';
@@ -17,8 +16,10 @@ interface SelectionActionsProps {
17
16
  allowMutations?: boolean;
18
17
  allowDelete?: boolean;
19
18
  /**
20
- * Opt-in: shows the "Start Workflow" action. Defaults to `false` so it never leaks to read-only
21
- * surfaces — callers must pass a permission-gated value (e.g. `canRunWorkflow(perms)`).
19
+ * Opt-in: shows the "Start Workflow" entry in the actions menu. Defaults to `false` so it never
20
+ * leaks to read-only surfaces — callers must pass a permission-gated value (e.g.
21
+ * `canRunWorkflow(perms)`). Running a workflow is its own permission, so this is deliberately
22
+ * separate from `allowMutations`.
22
23
  */
23
24
  allowWorkflowRun?: boolean;
24
25
  }
@@ -52,11 +53,11 @@ export function SelectionActions({
52
53
  </Button>
53
54
  </div>
54
55
  )}
55
- {allowWorkflowRun && <StartWorkflowButton />}
56
56
  <SelectionActionsPopover
57
57
  selection={selection}
58
58
  allowMutations={allowMutations}
59
59
  allowDelete={allowDelete}
60
+ allowWorkflowRun={allowWorkflowRun}
60
61
  >
61
62
  {(actions) =>
62
63
  actions.length > 0 ? (
@@ -126,7 +127,9 @@ function SelectionActionsPopover({
126
127
  children,
127
128
  allowMutations = true,
128
129
  allowDelete = true,
129
- }: SelectionActionsPopoverProps & Required<Pick<SelectionActionsProps, 'allowMutations' | 'allowDelete'>>) {
130
+ allowWorkflowRun = false,
131
+ }: SelectionActionsPopoverProps &
132
+ Required<Pick<SelectionActionsProps, 'allowMutations' | 'allowDelete' | 'allowWorkflowRun'>>) {
130
133
  const context = useObjectsActionContext();
131
134
  const executeAction = (action: ObjectsActionSpec) => {
132
135
  context.run(action.id);
@@ -134,6 +137,7 @@ function SelectionActionsPopover({
134
137
  const actions = getAvailableActions(context.actions, selection, {
135
138
  allowMutations,
136
139
  allowDelete,
140
+ allowWorkflowRun,
137
141
  });
138
142
  const trigger = children(actions);
139
143
 
@@ -172,7 +176,7 @@ function PopoverBody({ executeAction, actions }: PopoverBodyProps) {
172
176
  function getAvailableActions(
173
177
  actions: ObjectsActionSpec[],
174
178
  selection: DocumentSelection,
175
- permissions: Required<Pick<SelectionActionsProps, 'allowMutations' | 'allowDelete'>>,
179
+ permissions: Required<Pick<SelectionActionsProps, 'allowMutations' | 'allowDelete' | 'allowWorkflowRun'>>,
176
180
  ): ObjectsActionSpec[] {
177
181
  if (!selection?.hasSelection()) {
178
182
  return [ExportPropertiesAction];
@@ -185,6 +189,9 @@ function getAvailableActions(
185
189
  if (action.id === 'delete' || action.id === 'deleteFromCollections') {
186
190
  return permissions.allowDelete;
187
191
  }
192
+ if (action.id === 'startWorkflow') {
193
+ return permissions.allowWorkflowRun;
194
+ }
188
195
  if (action.id === 'changeType' || action.id === 'addToCollection' || action.id === 'removeFromCollection') {
189
196
  return permissions.allowMutations;
190
197
  }
@@ -0,0 +1,162 @@
1
+ import type { WorkflowDefinitionRef } from '@vertesia/common';
2
+ import {
3
+ Button,
4
+ Modal,
5
+ ModalBody,
6
+ ModalFooter,
7
+ ModalTitle,
8
+ SelectList,
9
+ Spinner,
10
+ useFetch,
11
+ useToast,
12
+ } from '@vertesia/ui/core';
13
+ import { i18nInstance, NAMESPACE, useUITranslation } from '@vertesia/ui/i18n';
14
+ import { useUserSession } from '@vertesia/ui/session';
15
+ import { useCallback, useState } from 'react';
16
+ import { useObjectsActionCallback } from '../ObjectsActionHooks';
17
+ import type { ActionComponentTypeProps, ObjectsActionSpec } from '../ObjectsActionSpec';
18
+
19
+ /**
20
+ * Endpoint prefix the server uses to resolve a workflow definition by id — see `DSL_WORKFLOW_PREFIX`
21
+ * in `apps/zeno-server/src/workflow/temporal.ts`, which splits on `:` and loads the definition.
22
+ */
23
+ const DSL_WORKFLOW_ENDPOINT_PREFIX = 'wf:';
24
+
25
+ export function StartWorkflowActionComponent({ action, objectIds, children }: ActionComponentTypeProps) {
26
+ const [isOpen, setOpen] = useState(false);
27
+ const callback = useCallback(() => {
28
+ setOpen(true);
29
+ return Promise.resolve(true);
30
+ }, []);
31
+
32
+ useObjectsActionCallback(action.id, callback);
33
+
34
+ return (
35
+ <div>
36
+ {children}
37
+ {/* Mounted only while open so the definitions list is fetched on demand, not on every render of the toolbar. */}
38
+ {isOpen && <StartWorkflowModal objectIds={objectIds} onClose={() => setOpen(false)} />}
39
+ </div>
40
+ );
41
+ }
42
+
43
+ interface StartWorkflowModalProps {
44
+ objectIds: string[];
45
+ onClose: () => void;
46
+ }
47
+
48
+ function StartWorkflowModal({ objectIds, onClose }: StartWorkflowModalProps) {
49
+ const { t } = useUITranslation();
50
+ const { client } = useUserSession();
51
+ const toast = useToast();
52
+ const [selected, setSelected] = useState<WorkflowDefinitionRef | undefined>(undefined);
53
+ const [isStarting, setIsStarting] = useState(false);
54
+
55
+ const { data: workflows, isLoading, error } = useFetch(() => client.store.workflows.definitions.list(), []);
56
+
57
+ const onStart = async () => {
58
+ if (!selected || isStarting) return;
59
+ setIsStarting(true);
60
+ try {
61
+ // `objectIds` rather than the newer `input` shape: it is what the workflow rules API
62
+ // already sends, so it is the form DSL workflows are known to read.
63
+ await client.store.workflows.execute(`${DSL_WORKFLOW_ENDPOINT_PREFIX}${selected.id}`, { objectIds });
64
+ toast({
65
+ title: t('store.actions.workflowStarted'),
66
+ description: t('store.actions.workflowStartedOn', { count: objectIds.length, name: selected.name }),
67
+ status: 'success',
68
+ duration: 3000,
69
+ });
70
+ onClose();
71
+ } catch (err: unknown) {
72
+ toast({
73
+ title: t('store.actions.errorStartingWorkflow'),
74
+ description: err instanceof Error ? err.message : undefined,
75
+ status: 'error',
76
+ duration: 9000,
77
+ });
78
+ } finally {
79
+ setIsStarting(false);
80
+ }
81
+ };
82
+
83
+ return (
84
+ <Modal isOpen onClose={onClose} size="md">
85
+ <ModalTitle>{t('store.actions.startWorkflow')}</ModalTitle>
86
+ <ModalBody>
87
+ <div className="pb-2">{t('store.actions.chooseWorkflow')}</div>
88
+ <StartWorkflowList
89
+ workflows={workflows}
90
+ isLoading={isLoading}
91
+ error={error}
92
+ selected={selected}
93
+ onChange={setSelected}
94
+ />
95
+ </ModalBody>
96
+ <ModalFooter align="right">
97
+ <Button variant="outline" onClick={onClose} disabled={isStarting}>
98
+ {t('modal.cancel')}
99
+ </Button>
100
+ <Button onClick={onStart} isDisabled={!selected || isStarting} isLoading={isStarting}>
101
+ {t('store.actions.start')}
102
+ </Button>
103
+ </ModalFooter>
104
+ </Modal>
105
+ );
106
+ }
107
+
108
+ interface StartWorkflowListProps {
109
+ workflows: WorkflowDefinitionRef[] | undefined;
110
+ isLoading: boolean;
111
+ error: Error | undefined;
112
+ selected: WorkflowDefinitionRef | undefined;
113
+ onChange: (workflow: WorkflowDefinitionRef) => void;
114
+ }
115
+
116
+ function StartWorkflowList({ workflows, isLoading, error, selected, onChange }: StartWorkflowListProps) {
117
+ const { t } = useUITranslation();
118
+
119
+ if (isLoading) {
120
+ return (
121
+ <div className="flex justify-center py-4">
122
+ <Spinner />
123
+ </div>
124
+ );
125
+ }
126
+
127
+ if (error) {
128
+ return <div className="py-4 text-sm text-destructive">{t('store.failedToFetchWorkflows')}</div>;
129
+ }
130
+
131
+ if (!workflows?.length) {
132
+ return <div className="py-4 text-sm text-muted">{t('store.actions.noWorkflowsAvailable')}</div>;
133
+ }
134
+
135
+ return (
136
+ <div className="max-h-[420px] overflow-y-auto border-border border rounded-md">
137
+ <SelectList
138
+ className="text-start w-full"
139
+ options={workflows}
140
+ value={selected}
141
+ onChange={onChange}
142
+ optionLayout={(workflow) => ({
143
+ label: (
144
+ <div className="w-full">
145
+ <div className="text-start">{workflow.name.replace(/(?<=[a-z])(?=[A-Z])/g, ' ')}</div>
146
+ {workflow.description && <div className="text-xs text-muted">{workflow.description}</div>}
147
+ </div>
148
+ ),
149
+ })}
150
+ />
151
+ </div>
152
+ );
153
+ }
154
+
155
+ const t = i18nInstance.getFixedT(null, NAMESPACE);
156
+ export const StartWorkflowAction: ObjectsActionSpec = {
157
+ id: 'startWorkflow',
158
+ name: t('store.actions.startWorkflow'),
159
+ description: t('store.actions.startWorkflowDesc'),
160
+ confirm: false,
161
+ component: StartWorkflowActionComponent,
162
+ };
@@ -4,3 +4,4 @@ export * from './ConfirmAction';
4
4
  export * from './DeleteObjectsAction';
5
5
  export * from './ExportPropertiesAction';
6
6
  export * from './RemoveFromCollectionAction';
7
+ export * from './StartWorkflowAction';
@@ -407,6 +407,7 @@
407
407
  "mcpConnections.label": "MCP",
408
408
  "mcpConnections.manage": "إدارة اتصالات MCP",
409
409
  "mcpConnections.managedByApp": "يُدار بواسطة التطبيق",
410
+ "mcpConnections.noAuthentication": "بدون مصادقة",
410
411
  "mcpConnections.settings": "الإعدادات",
411
412
  "mcpConnections.subtitle": "إدارة خوادم MCP المتاحة لهذه المحادثة.",
412
413
  "mcpConnections.title": "MCP",
@@ -520,7 +521,7 @@
520
521
  "store.actions.changeContentTypeDesc": "تغيير نوع المحتوى للمستندات المحددة",
521
522
  "store.actions.changeType": "تغيير النوع",
522
523
  "store.actions.chooseExistingCollections": "اختر من المجموعات الموجودة",
523
- "store.actions.chooseWorkflowRule": "اختر قاعدة سير عمل للبدء:",
524
+ "store.actions.chooseWorkflow": "اختر سير عمل للبدء:",
524
525
  "store.actions.confirmDeleteAll": "هل أنت متأكد من حذف جميع الكائنات المحددة؟ لا يمكن التراجع عن هذا الإجراء.",
525
526
  "store.actions.confirmDeleteSelected": "هل أنت متأكد من حذف الكائنات المحددة؟\nهذا ليس إزالة من المجموعات.",
526
527
  "store.actions.confirmRemoveFromCollection": "هل أنت متأكد من أنك تريد إزالة الكائنات المحددة من هذه المجموعة؟",
@@ -537,15 +538,22 @@
537
538
  "store.actions.exportProperties": "تصدير الخصائص",
538
539
  "store.actions.noCollectionContext": "لا يوجد سياق مجموعة",
539
540
  "store.actions.noObjectsSelected": "لم يتم تحديد كائنات",
541
+ "store.actions.noWorkflowsAvailable": "لا توجد سير عمل متاحة",
540
542
  "store.actions.pleaseSelectObjectsToDelete": "يرجى تحديد كائنات للحذف",
541
543
  "store.actions.pleaseSelectObjectsToRemove": "يرجى تحديد كائنات لإزالتها من المجموعة",
542
544
  "store.actions.removeFromCollection": "إزالة من المجموعة",
543
545
  "store.actions.removeFromCollectionDesc": "إزالة الكائنات المحددة من هذه المجموعة",
544
546
  "store.actions.selectCollection": "اختر مجموعة",
547
+ "store.actions.start": "بدء",
545
548
  "store.actions.startWorkflow": "بدء سير العمل",
546
- "store.actions.startWorkflowByRule": "بدء سير عمل بقاعدة",
547
549
  "store.actions.startWorkflowDesc": "بدء سير عمل على الكائنات المحددة",
548
550
  "store.actions.workflowStarted": "تم بدء سير العمل",
551
+ "store.actions.workflowStartedOn_few": "تم بدء {{name}} على {{count}} كائنات",
552
+ "store.actions.workflowStartedOn_many": "تم بدء {{name}} على {{count}} كائنًا",
553
+ "store.actions.workflowStartedOn_one": "تم بدء {{name}} على كائن واحد",
554
+ "store.actions.workflowStartedOn_other": "تم بدء {{name}} على {{count}} كائن",
555
+ "store.actions.workflowStartedOn_two": "تم بدء {{name}} على كائنَين",
556
+ "store.actions.workflowStartedOn_zero": "لم يتم بدء {{name}} على أي كائن",
549
557
  "store.allowedContentTypes": "أنواع المحتوى المسموح بها",
550
558
  "store.allowedContentTypesOptionalDescription": "اختر اختيارياً أنواع المحتوى التي يمكن إضافتها إلى المجموعة. إذا لم يتم التعيين، فسيتم السماح بجميع أنواع المحتوى.",
551
559
  "store.allowedContentTypesSelectDescription": "اختر أنواع المحتوى التي يمكن إضافتها إلى المجموعة. إذا لم يتم التعيين، فسيتم السماح بجميع أنواع المحتوى.",
@@ -395,6 +395,7 @@
395
395
  "mcpConnections.label": "MCP",
396
396
  "mcpConnections.manage": "MCP-Verbindungen verwalten",
397
397
  "mcpConnections.managedByApp": "Von der App verwaltet",
398
+ "mcpConnections.noAuthentication": "Keine Authentifizierung",
398
399
  "mcpConnections.settings": "Einstellungen",
399
400
  "mcpConnections.subtitle": "Verwalten Sie die für diese Unterhaltung verfügbaren MCP-Server.",
400
401
  "mcpConnections.title": "MCP",
@@ -504,7 +505,7 @@
504
505
  "store.actions.changeContentTypeDesc": "Den Inhaltstyp der ausgewählten Dokumente ändern",
505
506
  "store.actions.changeType": "Typ ändern",
506
507
  "store.actions.chooseExistingCollections": "Aus bestehenden Sammlungen auswählen",
507
- "store.actions.chooseWorkflowRule": "Wählen Sie eine Workflow-Regel zum Starten:",
508
+ "store.actions.chooseWorkflow": "Wählen Sie einen Workflow zum Starten:",
508
509
  "store.actions.confirmDeleteAll": "Sind Sie sicher, dass Sie alle ausgewählten Objekte löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
509
510
  "store.actions.confirmDeleteSelected": "Sind Sie sicher, dass Sie die ausgewählten Objekte löschen möchten?\nDies ist kein Entfernen aus Sammlungen.",
510
511
  "store.actions.confirmRemoveFromCollection": "Möchten Sie die ausgewählten Objekte wirklich aus dieser Sammlung entfernen?",
@@ -521,15 +522,18 @@
521
522
  "store.actions.exportProperties": "Eigenschaften exportieren",
522
523
  "store.actions.noCollectionContext": "Kein Sammlungskontext",
523
524
  "store.actions.noObjectsSelected": "Keine Objekte ausgewählt",
525
+ "store.actions.noWorkflowsAvailable": "Keine Workflows verfügbar",
524
526
  "store.actions.pleaseSelectObjectsToDelete": "Bitte wählen Sie Objekte zum Löschen aus",
525
527
  "store.actions.pleaseSelectObjectsToRemove": "Bitte wählen Sie Objekte zum Entfernen aus der Sammlung aus",
526
528
  "store.actions.removeFromCollection": "Aus Sammlung entfernen",
527
529
  "store.actions.removeFromCollectionDesc": "Ausgewählte Objekte aus dieser Sammlung entfernen",
528
530
  "store.actions.selectCollection": "Sammlung auswählen",
531
+ "store.actions.start": "Starten",
529
532
  "store.actions.startWorkflow": "Workflow starten",
530
- "store.actions.startWorkflowByRule": "Workflow nach Regel starten",
531
533
  "store.actions.startWorkflowDesc": "Einen Workflow für die ausgewählten Objekte starten",
532
534
  "store.actions.workflowStarted": "Workflow gestartet",
535
+ "store.actions.workflowStartedOn_one": "{{name}} für {{count}} Objekt gestartet",
536
+ "store.actions.workflowStartedOn_other": "{{name}} für {{count}} Objekte gestartet",
533
537
  "store.allowedContentTypes": "Erlaubte Inhaltstypen",
534
538
  "store.allowedContentTypesOptionalDescription": "Wählen Sie optional aus, welche Inhaltstypen zur Sammlung hinzugefügt werden können. Wenn nicht festgelegt, sind alle Inhaltstypen erlaubt.",
535
539
  "store.allowedContentTypesSelectDescription": "Wählen Sie aus, welche Inhaltstypen zur Sammlung hinzugefügt werden können. Wenn nicht festgelegt, sind alle Inhaltstypen erlaubt.",
@@ -705,6 +705,7 @@
705
705
  "mcpConnections.label": "MCP",
706
706
  "mcpConnections.manage": "Manage MCP connections",
707
707
  "mcpConnections.managedByApp": "Managed by app",
708
+ "mcpConnections.noAuthentication": "No authentication",
708
709
  "mcpConnections.settings": "Settings",
709
710
  "mcpConnections.subtitle": "Manage the MCP servers available to this conversation.",
710
711
  "mcpConnections.title": "MCP",
@@ -851,7 +852,7 @@
851
852
  "store.actions.changeContentTypeDesc": "Change the Content Type of the selected documents",
852
853
  "store.actions.changeType": "Change Type",
853
854
  "store.actions.chooseExistingCollections": "Choose from existing collections",
854
- "store.actions.chooseWorkflowRule": "Choose a workflow rule to start:",
855
+ "store.actions.chooseWorkflow": "Choose a workflow to start:",
855
856
  "store.actions.clearSelection": "Clear selection",
856
857
  "store.actions.confirmDeleteAll": "Are you sure you want to delete all the selected objects? This action cannot be undone.",
857
858
  "store.actions.confirmDeleteSelected": "Are you sure you want to delete the selected objects?\nThis is not removable from collections.",
@@ -876,6 +877,7 @@
876
877
  "store.actions.failedToDeleteTypes": "Failed to delete types",
877
878
  "store.actions.noCollectionContext": "No collection context",
878
879
  "store.actions.noObjectsSelected": "No objects selected",
880
+ "store.actions.noWorkflowsAvailable": "No workflows available",
879
881
  "store.actions.pleaseSelectObjectsToDelete": "Please select objects to delete",
880
882
  "store.actions.pleaseSelectObjectsToRemove": "Please select objects to remove from collection",
881
883
  "store.actions.removeFromCollection": "Remove from Collection",
@@ -884,14 +886,16 @@
884
886
  "store.actions.selectCollection": "Select Collection",
885
887
  "store.actions.selectType": "Select type {{name}}",
886
888
  "store.actions.selectedCount": "{{n}} selected",
889
+ "store.actions.start": "Start",
887
890
  "store.actions.startWorkflow": "Start Workflow",
888
- "store.actions.startWorkflowByRule": "Start a Workflow by Rule",
889
891
  "store.actions.startWorkflowDesc": "Start a workflow on the selected objects",
890
892
  "store.actions.typeDeletePartial": "{{succeeded}} deleted, {{failed}} failed",
891
893
  "store.actions.typeDeleted_one": "{{count}} type deleted",
892
894
  "store.actions.typeDeleted_other": "{{count}} types deleted",
893
895
  "store.actions.typeToConfirmDelete": "Type \"delete\" to confirm",
894
896
  "store.actions.workflowStarted": "Workflow started",
897
+ "store.actions.workflowStartedOn_one": "{{name}} started on {{count}} object",
898
+ "store.actions.workflowStartedOn_other": "{{name}} started on {{count}} objects",
895
899
  "store.allowedContentTypes": "Allowed Content Types",
896
900
  "store.allowedContentTypesOptionalDescription": "Optionally select which content types can be added to the collection. If not set, then all content types are allowed.",
897
901
  "store.allowedContentTypesSelectDescription": "Select which content types can be added to the collection. If not set, then all content types are allowed.",
@@ -397,6 +397,7 @@
397
397
  "mcpConnections.label": "MCP",
398
398
  "mcpConnections.manage": "Gestionar conexiones MCP",
399
399
  "mcpConnections.managedByApp": "Gestionado por la aplicación",
400
+ "mcpConnections.noAuthentication": "Sin autenticación",
400
401
  "mcpConnections.settings": "Configuración",
401
402
  "mcpConnections.subtitle": "Gestiona los servidores MCP disponibles para esta conversación.",
402
403
  "mcpConnections.title": "MCP",
@@ -507,7 +508,7 @@
507
508
  "store.actions.changeContentTypeDesc": "Cambiar el tipo de contenido de los documentos seleccionados",
508
509
  "store.actions.changeType": "Cambiar tipo",
509
510
  "store.actions.chooseExistingCollections": "Elegir de colecciones existentes",
510
- "store.actions.chooseWorkflowRule": "Elige una regla de flujo de trabajo para iniciar:",
511
+ "store.actions.chooseWorkflow": "Elige un flujo de trabajo para iniciar:",
511
512
  "store.actions.confirmDeleteAll": "¿Estás seguro de que quieres eliminar todos los objetos seleccionados? Esta acción no se puede deshacer.",
512
513
  "store.actions.confirmDeleteSelected": "¿Estás seguro de que quieres eliminar los objetos seleccionados?\nEsto no los elimina de las colecciones.",
513
514
  "store.actions.confirmRemoveFromCollection": "¿Seguro que quieres quitar los objetos seleccionados de esta colección?",
@@ -524,15 +525,18 @@
524
525
  "store.actions.exportProperties": "Exportar propiedades",
525
526
  "store.actions.noCollectionContext": "Sin contexto de colección",
526
527
  "store.actions.noObjectsSelected": "No hay objetos seleccionados",
528
+ "store.actions.noWorkflowsAvailable": "No hay flujos de trabajo disponibles",
527
529
  "store.actions.pleaseSelectObjectsToDelete": "Por favor, selecciona objetos para eliminar",
528
530
  "store.actions.pleaseSelectObjectsToRemove": "Por favor, selecciona objetos para eliminar de la colección",
529
531
  "store.actions.removeFromCollection": "Quitar de la colección",
530
532
  "store.actions.removeFromCollectionDesc": "Quitar los objetos seleccionados de esta colección",
531
533
  "store.actions.selectCollection": "Seleccionar colección",
534
+ "store.actions.start": "Iniciar",
532
535
  "store.actions.startWorkflow": "Iniciar flujo de trabajo",
533
- "store.actions.startWorkflowByRule": "Iniciar un flujo de trabajo por regla",
534
536
  "store.actions.startWorkflowDesc": "Iniciar un flujo de trabajo en los objetos seleccionados",
535
537
  "store.actions.workflowStarted": "Flujo de trabajo iniciado",
538
+ "store.actions.workflowStartedOn_one": "{{name}} iniciado en {{count}} objeto",
539
+ "store.actions.workflowStartedOn_other": "{{name}} iniciado en {{count}} objetos",
536
540
  "store.allowedContentTypes": "Tipos de contenido permitidos",
537
541
  "store.allowedContentTypesOptionalDescription": "Opcionalmente selecciona qué tipos de contenido pueden agregarse a la colección. Si no se define, todos los tipos de contenido están permitidos.",
538
542
  "store.allowedContentTypesSelectDescription": "Selecciona qué tipos de contenido pueden agregarse a la colección. Si no se define, todos los tipos de contenido están permitidos.",
@@ -397,6 +397,7 @@
397
397
  "mcpConnections.label": "MCP",
398
398
  "mcpConnections.manage": "Gérer les connexions MCP",
399
399
  "mcpConnections.managedByApp": "Géré par l’application",
400
+ "mcpConnections.noAuthentication": "Sans authentification",
400
401
  "mcpConnections.settings": "Paramètres",
401
402
  "mcpConnections.subtitle": "Gérez les serveurs MCP disponibles pour cette conversation.",
402
403
  "mcpConnections.title": "MCP",
@@ -507,7 +508,7 @@
507
508
  "store.actions.changeContentTypeDesc": "Changer le type de contenu des documents sélectionnés",
508
509
  "store.actions.changeType": "Changer le type",
509
510
  "store.actions.chooseExistingCollections": "Choisir parmi les collections existantes",
510
- "store.actions.chooseWorkflowRule": "Choisissez une règle de workflow à démarrer :",
511
+ "store.actions.chooseWorkflow": "Choisissez un workflow à démarrer :",
511
512
  "store.actions.confirmDeleteAll": "Êtes-vous sûr de vouloir supprimer tous les objets sélectionnés ? Cette action est irréversible.",
512
513
  "store.actions.confirmDeleteSelected": "Êtes-vous sûr de vouloir supprimer les objets sélectionnés ?\nCela ne les retire pas des collections.",
513
514
  "store.actions.confirmRemoveFromCollection": "Êtes-vous sûr de vouloir retirer les objets sélectionnés de cette collection ?",
@@ -524,15 +525,19 @@
524
525
  "store.actions.exportProperties": "Exporter les propriétés",
525
526
  "store.actions.noCollectionContext": "Aucun contexte de collection",
526
527
  "store.actions.noObjectsSelected": "Aucun objet sélectionné",
528
+ "store.actions.noWorkflowsAvailable": "Aucun workflow disponible",
527
529
  "store.actions.pleaseSelectObjectsToDelete": "Veuillez sélectionner des objets à supprimer",
528
530
  "store.actions.pleaseSelectObjectsToRemove": "Veuillez sélectionner des objets à retirer de la collection",
529
531
  "store.actions.removeFromCollection": "Retirer de la collection",
530
532
  "store.actions.removeFromCollectionDesc": "Retirer les objets sélectionnés de cette collection",
531
533
  "store.actions.selectCollection": "Sélectionner une collection",
534
+ "store.actions.start": "Démarrer",
532
535
  "store.actions.startWorkflow": "Démarrer un workflow",
533
- "store.actions.startWorkflowByRule": "Démarrer un workflow par règle",
534
536
  "store.actions.startWorkflowDesc": "Démarrer un workflow sur les objets sélectionnés",
535
537
  "store.actions.workflowStarted": "Workflow démarré",
538
+ "store.actions.workflowStartedOn_many": "{{name}} démarré sur {{count}} objets",
539
+ "store.actions.workflowStartedOn_one": "{{name}} démarré sur {{count}} objet",
540
+ "store.actions.workflowStartedOn_other": "{{name}} démarré sur {{count}} objets",
536
541
  "store.allowedContentTypes": "Types de contenu autorisés",
537
542
  "store.allowedContentTypesOptionalDescription": "Sélectionnez optionnellement les types de contenu pouvant être ajoutés à la collection. Si non défini, tous les types de contenu sont autorisés.",
538
543
  "store.allowedContentTypesSelectDescription": "Sélectionnez les types de contenu pouvant être ajoutés à la collection. Si non défini, tous les types de contenu sont autorisés.",
@@ -397,6 +397,7 @@
397
397
  "mcpConnections.label": "MCP",
398
398
  "mcpConnections.manage": "Gestisci connessioni MCP",
399
399
  "mcpConnections.managedByApp": "Gestito dall'app",
400
+ "mcpConnections.noAuthentication": "Nessuna autenticazione",
400
401
  "mcpConnections.settings": "Impostazioni",
401
402
  "mcpConnections.subtitle": "Gestisci i server MCP disponibili per questa conversazione.",
402
403
  "mcpConnections.title": "MCP",
@@ -507,7 +508,7 @@
507
508
  "store.actions.changeContentTypeDesc": "Cambia il tipo di contenuto dei documenti selezionati",
508
509
  "store.actions.changeType": "Cambia tipo",
509
510
  "store.actions.chooseExistingCollections": "Scegli tra le collezioni esistenti",
510
- "store.actions.chooseWorkflowRule": "Scegli una regola di flusso di lavoro da avviare:",
511
+ "store.actions.chooseWorkflow": "Scegli un flusso di lavoro da avviare:",
511
512
  "store.actions.confirmDeleteAll": "Sei sicuro di voler eliminare tutti gli oggetti selezionati? Questa azione non può essere annullata.",
512
513
  "store.actions.confirmDeleteSelected": "Sei sicuro di voler eliminare gli oggetti selezionati?\nQuesta non è una rimozione dalle collezioni.",
513
514
  "store.actions.confirmRemoveFromCollection": "Vuoi davvero rimuovere gli oggetti selezionati da questa raccolta?",
@@ -524,15 +525,18 @@
524
525
  "store.actions.exportProperties": "Esporta proprietà",
525
526
  "store.actions.noCollectionContext": "Nessun contesto di collezione",
526
527
  "store.actions.noObjectsSelected": "Nessun oggetto selezionato",
528
+ "store.actions.noWorkflowsAvailable": "Nessun flusso di lavoro disponibile",
527
529
  "store.actions.pleaseSelectObjectsToDelete": "Seleziona gli oggetti da eliminare",
528
530
  "store.actions.pleaseSelectObjectsToRemove": "Seleziona gli oggetti da rimuovere dalla collezione",
529
531
  "store.actions.removeFromCollection": "Rimuovi dalla raccolta",
530
532
  "store.actions.removeFromCollectionDesc": "Rimuovi gli oggetti selezionati da questa raccolta",
531
533
  "store.actions.selectCollection": "Seleziona collezione",
534
+ "store.actions.start": "Avvia",
532
535
  "store.actions.startWorkflow": "Avvia flusso di lavoro",
533
- "store.actions.startWorkflowByRule": "Avvia flusso di lavoro per regola",
534
536
  "store.actions.startWorkflowDesc": "Avvia un flusso di lavoro sugli oggetti selezionati",
535
537
  "store.actions.workflowStarted": "Flusso di lavoro avviato",
538
+ "store.actions.workflowStartedOn_one": "{{name}} avviato su {{count}} oggetto",
539
+ "store.actions.workflowStartedOn_other": "{{name}} avviato su {{count}} oggetti",
536
540
  "store.allowedContentTypes": "Tipi di contenuto consentiti",
537
541
  "store.allowedContentTypesOptionalDescription": "Seleziona facoltativamente quali tipi di contenuto possono essere aggiunti alla collezione. Se non impostato, tutti i tipi di contenuto sono consentiti.",
538
542
  "store.allowedContentTypesSelectDescription": "Seleziona quali tipi di contenuto possono essere aggiunti alla collezione. Se non impostato, tutti i tipi di contenuto sono consentiti.",
@@ -395,6 +395,7 @@
395
395
  "mcpConnections.label": "MCP",
396
396
  "mcpConnections.manage": "MCP 接続を管理",
397
397
  "mcpConnections.managedByApp": "アプリによる管理",
398
+ "mcpConnections.noAuthentication": "認証なし",
398
399
  "mcpConnections.settings": "設定",
399
400
  "mcpConnections.subtitle": "この会話で利用できる MCP サーバーを管理します。",
400
401
  "mcpConnections.title": "MCP",
@@ -504,7 +505,7 @@
504
505
  "store.actions.changeContentTypeDesc": "選択したドキュメントのコンテンツタイプを変更",
505
506
  "store.actions.changeType": "タイプを変更",
506
507
  "store.actions.chooseExistingCollections": "既存のコレクションから選択",
507
- "store.actions.chooseWorkflowRule": "開始するワークフロールールを選択:",
508
+ "store.actions.chooseWorkflow": "開始するワークフローを選択:",
508
509
  "store.actions.confirmDeleteAll": "選択したすべてのオブジェクトを削除してもよろしいですか?この操作は取り消せません。",
509
510
  "store.actions.confirmDeleteSelected": "選択したオブジェクトを削除してもよろしいですか?\nこれはコレクションからの削除ではありません。",
510
511
  "store.actions.confirmRemoveFromCollection": "選択したオブジェクトをこのコレクションから削除してもよろしいですか?",
@@ -521,15 +522,18 @@
521
522
  "store.actions.exportProperties": "プロパティをエクスポート",
522
523
  "store.actions.noCollectionContext": "コレクションコンテキストがありません",
523
524
  "store.actions.noObjectsSelected": "オブジェクトが選択されていません",
525
+ "store.actions.noWorkflowsAvailable": "利用可能なワークフローがありません",
524
526
  "store.actions.pleaseSelectObjectsToDelete": "削除するオブジェクトを選択してください",
525
527
  "store.actions.pleaseSelectObjectsToRemove": "コレクションから削除するオブジェクトを選択してください",
526
528
  "store.actions.removeFromCollection": "コレクションから削除",
527
529
  "store.actions.removeFromCollectionDesc": "選択したオブジェクトをこのコレクションから削除",
528
530
  "store.actions.selectCollection": "コレクションを選択",
531
+ "store.actions.start": "開始",
529
532
  "store.actions.startWorkflow": "ワークフローを開始",
530
- "store.actions.startWorkflowByRule": "ルールによるワークフロー開始",
531
533
  "store.actions.startWorkflowDesc": "選択したオブジェクトでワークフローを開始",
532
534
  "store.actions.workflowStarted": "ワークフローが開始されました",
535
+ "store.actions.workflowStartedOn_one": "{{count}} 件のオブジェクトで {{name}} を開始しました",
536
+ "store.actions.workflowStartedOn_other": "{{count}} 件のオブジェクトで {{name}} を開始しました",
533
537
  "store.allowedContentTypes": "許可されたコンテンツタイプ",
534
538
  "store.allowedContentTypesOptionalDescription": "コレクションに追加できるコンテンツタイプを選択できます。設定しない場合、すべてのコンテンツタイプが許可されます。",
535
539
  "store.allowedContentTypesSelectDescription": "コレクションに追加できるコンテンツタイプを選択してください。設定しない場合、すべてのコンテンツタイプが許可されます。",