n8n-editor-ui 1.118.1 → 1.119.1

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 (298) hide show
  1. package/.build/cache-marker +1 -1
  2. package/.build/node-popularity.json +1980 -1980
  3. package/README.md +1 -1
  4. package/dist/assets/{AddDataTableModal-i8GQtKYX.js → AddDataTableModal-78UiDOZ6.js} +20 -20
  5. package/dist/assets/AnimatedSpinner-CoP6Lyme.css +39 -0
  6. package/dist/assets/{AnimatedSpinner-DRB4A7Dx.js → AnimatedSpinner-Dd4F9nQ8.js} +2 -2
  7. package/dist/assets/{AnnotationTagsDropdown.ee-DV_Mobmt.js → AnnotationTagsDropdown.ee-B5SGfmxY.js} +2 -3
  8. package/dist/assets/{AuthView-BucJoBVs.js → AuthView-CaCXt20h.js} +6 -6
  9. package/dist/assets/{ChangePasswordView-mVWAZ3kL.js → ChangePasswordView-sh87mWR6.js} +12 -12
  10. package/dist/assets/ChatAgentsView-4SiYQ9YJ.js +339 -0
  11. package/dist/assets/{SettingsUsageAndPlan-pptm91gP.css → ChatAgentsView-Be_TXcAc.css} +94 -68
  12. package/dist/assets/{ChatSidebar-CXnF23Sm.js → ChatSidebar-C0XXqw3v.js} +38 -31
  13. package/dist/assets/{ChatView-BOWzOn2x.js → ChatView-BlkLzP1X.js} +345 -502
  14. package/dist/assets/{ChatView-tcBlz_g5.css → ChatView-DHznMgQO.css} +60 -349
  15. package/dist/assets/CollectionParameter-CizL_Xml.js +58 -0
  16. package/dist/assets/{CommunityNodeUpdateInfo-Bk-rYnfU.js → CommunityNodeUpdateInfo-Egv665vx.js} +9 -9
  17. package/dist/assets/{CopyInput-CwgZTYF4.css → CopyInput-BiDmlr9B.css} +12 -10
  18. package/dist/assets/{CopyInput-DQBVF_BG.js → CopyInput-DX-FL085.js} +11 -11
  19. package/dist/assets/{CredentialIcon-BmzfYSyO.js → CredentialIcon-DS3l06t2.js} +2 -2
  20. package/dist/assets/{CredentialsView-VSMpVIfN.js → CredentialsView-C3SKDwtI.js} +33 -34
  21. package/dist/assets/{DataTableActions-CLoVJ5kV.js → DataTableActions-lgRuMb9F.js} +7 -7
  22. package/dist/assets/{DataTableDetailsView-B8wQLLu_.js → DataTableDetailsView-CoWw-4gy.js} +24 -24
  23. package/dist/assets/{DataTableDetailsView-CxS46D7a.css → DataTableDetailsView-D4DdqXoL.css} +46 -49
  24. package/dist/assets/{DataTableView-D2eeWDUi.js → DataTableView-hUsgVnZS.js} +30 -31
  25. package/dist/assets/DemoFooter-D8E8sLCS.js +71 -0
  26. package/dist/assets/{Draggable-BSa80qci.js → Draggable-DFf4aD-Y.js} +1 -1
  27. package/dist/assets/{EmptySharedSectionActionBox-32M48kPX.js → EmptySharedSectionActionBox-BkPu0yI0.js} +4 -4
  28. package/dist/assets/{EnterpriseEdition.ee-B_ZSY4rl.js → EnterpriseEdition.ee-BoNEV-MB.js} +1 -1
  29. package/dist/assets/{EntityNotFound-CKlXW1IL.js → EntityNotFound-Bs-aLs3W.js} +5 -5
  30. package/dist/assets/{EntityNotFound-DfstTvbZ.css → EntityNotFound-D6gi5ngN.css} +2 -2
  31. package/dist/assets/{EntityUnAuthorised-DB0HgLOM.js → EntityUnAuthorised-BwhGn6eD.js} +5 -5
  32. package/dist/assets/{EntityUnAuthorised-C6EIQ1Pq.css → EntityUnAuthorised-D3XTbU6Y.css} +2 -2
  33. package/dist/assets/{ErrorView-DAsa-PS_.js → ErrorView-Cvlb8nm0.js} +6 -6
  34. package/dist/assets/{EvaluationsRootView-CcJipqTv.js → EvaluationsRootView-DdOZORFr.js} +23 -23
  35. package/dist/assets/{EvaluationsView-DsfXDJ-U.css → EvaluationsView-CmcDUAS_.css} +6 -6
  36. package/dist/assets/{EvaluationsView-Dr4m1cGH.js → EvaluationsView-DxiPOlGL.js} +22 -22
  37. package/dist/assets/{ExecutionsTime-qhi9xQEs.css → ExecutionsTime-BpajgDjV.css} +6 -6
  38. package/dist/assets/{ExecutionsTime-DQ0lKlTn.js → ExecutionsTime-DwXL-TY4.js} +10 -10
  39. package/dist/assets/{ExecutionsView-D4k3uqTy.js → ExecutionsView-B4XGhWmY.js} +52 -42
  40. package/dist/assets/{ExecutionsView-f-kKRR2k.css → ExecutionsView-DP5OXlS4.css} +6 -6
  41. package/dist/assets/{ExternalSecretsProviderConnectionSwitch-Df3YK0La.css → ExternalSecretsProviderConnectionSwitch-dpp96SMy.css} +2 -2
  42. package/dist/assets/{ExternalSecretsProviderConnectionSwitch.ee-ps4K4bOK.js → ExternalSecretsProviderConnectionSwitch.ee-DCTg0mdX.js} +5 -5
  43. package/dist/assets/{FixedCollectionParameter-BkEju_IA.css → FixedCollectionParameter-CgkIJeik.css} +19 -19
  44. package/dist/assets/{FixedCollectionParameter-C8Nz7bot.js → FixedCollectionParameter-DjdDaH5s.js} +49 -49
  45. package/dist/assets/{ForgotMyPasswordView-B9XpVVQb.js → ForgotMyPasswordView-KkAVBYit.js} +12 -12
  46. package/dist/assets/{InsightsChartAverageRuntime-B9_qwMgO.js → InsightsChartAverageRuntime-D5Gh8Rz5.js} +8 -8
  47. package/dist/assets/{InsightsChartFailed-D8rDUthj.js → InsightsChartFailed-D7PZ_ctV.js} +7 -7
  48. package/dist/assets/{InsightsChartFailureRate-D7MEDAWL.js → InsightsChartFailureRate-CpPU5Kwd.js} +8 -8
  49. package/dist/assets/{InsightsChartTimeSaved-BjEX9cpj.js → InsightsChartTimeSaved-DYrv2t2N.js} +8 -8
  50. package/dist/assets/{InsightsChartTotal-f6iwgPv4.js → InsightsChartTotal-CNqL-Qn3.js} +7 -7
  51. package/dist/assets/{InsightsDashboard-CXRybzGm.css → InsightsDashboard-B5vBl-U6.css} +24 -24
  52. package/dist/assets/{InsightsDashboard-DgPTPhXD.js → InsightsDashboard-CrJZtNDS.js} +54 -49
  53. package/dist/assets/{InsightsPaywall-C_Osp3Xn.js → InsightsPaywall-DxgcxZ5z.js} +13 -13
  54. package/dist/assets/{InsightsSummary-CAapTcha.js → InsightsSummary-Bew3_p6D.js} +18 -18
  55. package/dist/assets/{InsightsSummary-BazqPYQ0.css → InsightsSummary-D4HBxG4I.css} +26 -26
  56. package/dist/assets/{InsightsTableWorkflows-BY4sevh1.js → InsightsTableWorkflows-TAIASHgR.js} +13 -13
  57. package/dist/assets/{ItemsRenderer-CTbNG2s3.js → ItemsRenderer-BfXptelN.js} +21 -25
  58. package/dist/assets/{ItemsRenderer-B89wKDHQ.css → ItemsRenderer-Cr6c6uYy.css} +21 -21
  59. package/dist/assets/{KeyboardShortcutTooltip-CXKgjDIT.js → KeyboardShortcutTooltip-y1pBqAge.js} +1 -1
  60. package/dist/assets/{LogsPanel-K1M_gOCT.css → LogsPanel-GVBE8bfm.css} +17 -17
  61. package/dist/assets/{LogsPanel-BSFP3TRR.js → LogsPanel-Uc0E6yn-.js} +35 -35
  62. package/dist/assets/LogsPanel-sLas9qHQ.js +58 -0
  63. package/dist/assets/{MainHeader-QMv9Ba5g.css → MainHeader-Dz9UViYg.css} +22 -22
  64. package/dist/assets/{MainHeader-Dwzc_Fak.js → MainHeader-M-D-hY8c.js} +53 -53
  65. package/dist/assets/{MainSidebar-BqoiqeXY.css → MainSidebar-BBUhoceu.css} +15 -15
  66. package/dist/assets/{MainSidebar-fP7bVKd-.js → MainSidebar-Bf52gQzU.js} +50 -43
  67. package/dist/assets/{MainSidebarUserArea-DZmO7pT1.js → MainSidebarUserArea-UHX8ACa4.js} +5 -5
  68. package/dist/assets/{Modal-C6HnfA6j.css → Modal-DNkRJkUt.css} +5 -5
  69. package/dist/assets/{Modal-B8k7lYVM.js → Modal-DwutFKNY.js} +12 -12
  70. package/dist/assets/{ModalDrawer-K2QDXW8H.js → ModalDrawer-B2sNzJVm.js} +6 -6
  71. package/dist/assets/{NDVEmptyState-CFiiknri.js → NDVEmptyState-DdpBamQ9.js} +1 -1
  72. package/dist/assets/{NodeCreation-Bbr4mTby.js → NodeCreation-BRIx8Ei9.js} +44 -44
  73. package/dist/assets/{NodeCreator-CE-6q5bn.js → NodeCreator-DDG2GQ-C.js} +63 -61
  74. package/dist/assets/{NodeCreator-C-oYFkbs.css → NodeCreator-JpUhf2LN.css} +63 -52
  75. package/dist/assets/{NodeDetailsView-CTnk_X5i.js → NodeDetailsView-4jVeGvDi.js} +64 -64
  76. package/dist/assets/{NodeDetailsViewV2-rAVfbsOa.css → NodeDetailsViewV2-Ckt2LIo-.css} +19 -19
  77. package/dist/assets/{NodeDetailsViewV2-REUcA-GA.js → NodeDetailsViewV2-MeaPvImX.js} +77 -77
  78. package/dist/assets/{NodeIcon-Bbl9Jpsi.js → NodeIcon-C-rkj6sB.js} +7 -6
  79. package/dist/assets/{NodeIcon-C-Ise6x6.css → NodeIcon-eaW3atZy.css} +2 -2
  80. package/dist/assets/{NodeSettings-B50suDD9.css → NodeSettings-DKlYbu9E.css} +80 -77
  81. package/dist/assets/{NodeSettings-BKd6Pbpi.js → NodeSettings-gAtnSv8q.js} +35 -35
  82. package/dist/assets/{NodeView-KpAB56Z3.css → NodeView-CnbgHMAv.css} +25 -26
  83. package/dist/assets/{NodeView-BjGTiM1O.js → NodeView-jjqmiYDP.js} +97 -97
  84. package/dist/assets/{PageViewLayout-CCwb27rd.js → PageViewLayout-Ccqeja5V.js} +2 -2
  85. package/dist/assets/{PageViewLayout-BIiboMgG.css → PageViewLayout-Cn6FD0Wt.css} +4 -4
  86. package/dist/assets/{ParameterInputList-aGPYvt18.css → ParameterInputList-D18bFGrO.css} +265 -265
  87. package/dist/assets/{ParameterInputList-CtoyrDjR.js → ParameterInputList-kEoD9fc7.js} +175 -171
  88. package/dist/assets/{PrebuiltAgentTemplatesView-C6IbTjn9.js → PrebuiltAgentTemplatesView-Dd6IJD_W.js} +15 -15
  89. package/dist/assets/{ProjectBreadcrumb-CmmsF90D.js → ProjectBreadcrumb-scGlGqYf.js} +4 -4
  90. package/dist/assets/{ProjectCardBadge-SSY0HK9w.js → ProjectCardBadge-p4AY0ubu.js} +5 -5
  91. package/dist/assets/{ProjectHeader-BRHPT2Gf.js → ProjectHeader-BZeiGuD6.js} +34 -11
  92. package/dist/assets/{ProjectIcon-Doey-RQc.js → ProjectIcon-DqKjDNbR.js} +1 -1
  93. package/dist/assets/{ProjectRoleView-Dz82Hr5N.js → ProjectRoleView-ByzrSQP-.js} +22 -22
  94. package/dist/assets/{ProjectRoleView-Cewy9KCA.css → ProjectRoleView-Ds9qdhh9.css} +12 -12
  95. package/dist/assets/{ProjectRolesView-JblQF33a.js → ProjectRolesView-DclD8eEm.js} +16 -16
  96. package/dist/assets/{ProjectSettings-1ZQGH61x.js → ProjectSettings-4wa93sE4.js} +36 -37
  97. package/dist/assets/{ProjectSettings-BQOluc3A.css → ProjectSettings-vir6puPd.css} +23 -23
  98. package/dist/assets/{ProjectSharing-CRwSdefc.js → ProjectSharing-BVPUxo_M.js} +5 -5
  99. package/dist/assets/ProjectVariables-eH7fm87s.css +421 -0
  100. package/dist/assets/{ProjectVariables-BKV1_OBU.js → ProjectVariables-x9spBaqX.js} +86 -79
  101. package/dist/assets/{PushConnectionTracker-V3T3vpnB.js → PushConnectionTracker-ByNVqY0h.js} +3 -3
  102. package/dist/assets/{ResourcesListLayout-B8d0Asrt.css → ResourcesListLayout-BXBf2iZI.css} +8 -8
  103. package/dist/assets/{ResourcesListLayout-BYno1UYD.js → ResourcesListLayout-UXbxK1S7.js} +11 -11
  104. package/dist/assets/{RunDataHtml-DCb1Egc3.js → RunDataHtml-X9lzUZaX.js} +1 -1
  105. package/dist/assets/{RunDataJson-7ml4EtqQ.js → RunDataJson-CxLotBq-.js} +14 -14
  106. package/dist/assets/{RunDataJsonActions-D534H82r.js → RunDataJsonActions-qylVa2u8.js} +12 -12
  107. package/dist/assets/{RunDataParsedAiContent-FqLolSOE.js → RunDataParsedAiContent-Cs80jq_q.js} +8 -8
  108. package/dist/assets/RunDataParsedAiContent-DBP5JHe4.js +25 -0
  109. package/dist/assets/{RunDataSearch-DYsCHxYY.js → RunDataSearch-BvoYWH8W.js} +7 -7
  110. package/dist/assets/{RunDataTable-CnUH-sL_.css → RunDataTable-HBCyaP8o.css} +54 -54
  111. package/dist/assets/{RunDataTable-D5O-BPg9.js → RunDataTable-d3eXUdSg.js} +44 -44
  112. package/dist/assets/{SamlOnboarding-EExl-EAp.js → SamlOnboarding-CRtDDWqf.js} +12 -12
  113. package/dist/assets/{SaveButton-C2Gkwcd6.js → SaveButton-D1iDaopV.js} +3 -3
  114. package/dist/assets/{SelectedItemsInfo-BO9w2ntq.js → SelectedItemsInfo-CSzniBOD.js} +2 -2
  115. package/dist/assets/{SettingsApiView-DHCr1LrA.js → SettingsApiView-DqnHEaAj.js} +17 -17
  116. package/dist/assets/{SettingsCommunityNodesView-3swLF8oI.js → SettingsCommunityNodesView-C7JC1VAK.js} +31 -32
  117. package/dist/assets/{SettingsExternalSecrets-Czm8izQh.js → SettingsExternalSecrets-CqTHs6zk.js} +15 -15
  118. package/dist/assets/{SettingsLdapView-KgMO_1GA.css → SettingsLdapView-BuamZyhu.css} +11 -11
  119. package/dist/assets/{SettingsLdapView-DOse-1bN.js → SettingsLdapView-zifHhZKy.js} +25 -25
  120. package/dist/assets/{SettingsLogStreamingView-BVSln3cm.js → SettingsLogStreamingView-CQwuqSl8.js} +17 -17
  121. package/dist/assets/{SettingsMCPView-B9w3XrA9.js → SettingsMCPView-Chjl8-hw.js} +36 -35
  122. package/dist/assets/{SettingsPersonalView-DWGs5wge.js → SettingsPersonalView-C1NF8zuk.js} +22 -22
  123. package/dist/assets/{SettingsPersonalView-D6LtKnaF.css → SettingsPersonalView-DEpYU3TT.css} +14 -17
  124. package/dist/assets/{SettingsProvisioningView-Bd7_e49M.js → SettingsProvisioningView-BFUB6c2Z.js} +10 -10
  125. package/dist/assets/{SettingsSourceControl-BmJrrMbt.js → SettingsSourceControl-CZryQCqT.js} +17 -17
  126. package/dist/assets/{SettingsSso-LCXnYtLn.js → SettingsSso-CeeFO_Pv.js} +18 -18
  127. package/dist/assets/{SettingsUsageAndPlan-BcyB9_cH.js → SettingsUsageAndPlan-DMMd5WcZ.js} +140 -23
  128. package/dist/assets/SettingsUsageAndPlan-DcH3fsn1.css +462 -0
  129. package/dist/assets/{SettingsUsersView-8_Y7zQMz.js → SettingsUsersView-DWVyE4hY.js} +23 -18
  130. package/dist/assets/{SettingsView-BdM6C-Pa.js → SettingsView-trF6L-tM.js} +8 -8
  131. package/dist/assets/{SetupTemplateFormStep-vegHZ86T.js → SetupTemplateFormStep-BsgzR5CN.js} +6 -6
  132. package/dist/assets/{SetupView-DXmGJi1C.js → SetupView-Bx4ZLcja.js} +12 -12
  133. package/dist/assets/{SetupWorkflowCredentialsButton-Gbq-mJNZ.js → SetupWorkflowCredentialsButton-DR_aufFd.js} +9 -9
  134. package/dist/assets/{SetupWorkflowFromTemplateView-B77sQQ6O.js → SetupWorkflowFromTemplateView-Ded77Ph-.js} +18 -18
  135. package/dist/assets/{SigninView-Di3btl9A.js → SigninView-DXPofyPm.js} +13 -13
  136. package/dist/assets/{SignoutView-WKs5gvAj.js → SignoutView-B7H_dRJO.js} +9 -9
  137. package/dist/assets/{SignupView-BM4OXX-x.js → SignupView-BHWVvwh8.js} +12 -12
  138. package/dist/assets/{TagsDropdown-B9w42ULo.js → TagsDropdown-D6CYk5R8.js} +4 -5
  139. package/dist/assets/{TemplateDetails-DNyPiFTw.js → TemplateDetails-ezK9JOOl.js} +7 -7
  140. package/dist/assets/{TemplateList-C7Gtb7cW.js → TemplateList-DztR2yKa.js} +5 -5
  141. package/dist/assets/{TemplatesCollectionView-DdMjHvDQ.js → TemplatesCollectionView-Bu_YRd84.js} +20 -20
  142. package/dist/assets/{TemplatesSearchView-BtUlSZXh.js → TemplatesSearchView-C7zBEV2b.js} +18 -18
  143. package/dist/assets/{TemplatesView-FCDPW2Yq.js → TemplatesView-BnozPkTX.js} +7 -7
  144. package/dist/assets/{TemplatesView-BgdyYmrL.css → TemplatesView-iSPzXjQB.css} +6 -6
  145. package/dist/assets/{TemplatesWorkflowView-B8_w-yL7.js → TemplatesWorkflowView-BTyHc3MG.js} +22 -22
  146. package/dist/assets/{TestRunDetailView-CEE1M2hn.js → TestRunDetailView-B76TM9u8.js} +36 -36
  147. package/dist/assets/{TestRunDetailView-DkQcfFP4.css → TestRunDetailView-CVGty0j0.css} +28 -28
  148. package/dist/assets/{TimeAgo-FvYQex-v.js → TimeAgo-Gv5h1Utx.js} +2 -2
  149. package/dist/assets/{TriggerPanel-D5WejHyJ.css → TriggerPanel-BQveVt6Q.css} +19 -19
  150. package/dist/assets/{TriggerPanel-DqHc-mXl.js → TriggerPanel-Dx9LpA4p.js} +28 -28
  151. package/dist/assets/VirtualSchema-5T21Yyqx.js +43 -0
  152. package/dist/assets/{VirtualSchema-CSh2c6Ec.css → VirtualSchema-BJ-Q30Fz.css} +51 -49
  153. package/dist/assets/{VirtualSchema-CC3sIZuJ.js → VirtualSchema-CUUzo795.js} +21 -21
  154. package/dist/assets/{VueMarkdown-70GnkI0W.js → VueMarkdown-CiR4a0gO.js} +1 -1
  155. package/dist/assets/{WorkerView-a-85mW7s.js → WorkerView-D7h4pmTk.js} +36 -39
  156. package/dist/assets/{WorkflowActivator-BNp0duVE.css → WorkflowActivator-DSgMORP6.css} +2 -2
  157. package/dist/assets/{WorkflowActivator-FQDQyW1o.js → WorkflowActivator-k3HTYXbc.js} +9 -9
  158. package/dist/assets/{WorkflowExecutionsInfoAccordion-JHl30LoQ.js → WorkflowExecutionsInfoAccordion-DL5cBkbK.js} +7 -7
  159. package/dist/assets/{WorkflowExecutionsLandingPage-CcJ9U18X.js → WorkflowExecutionsLandingPage-DlXz9Jry.js} +18 -18
  160. package/dist/assets/{WorkflowExecutionsPreview-BYWh0GBH.js → WorkflowExecutionsPreview-DJWD2i74.js} +22 -22
  161. package/dist/assets/{WorkflowExecutionsView-FCkyyfKq.js → WorkflowExecutionsView-CK-2WqY7.js} +71 -71
  162. package/dist/assets/{WorkflowExecutionsView-9RB5OO5c.css → WorkflowExecutionsView-J4lWGYW8.css} +36 -36
  163. package/dist/assets/{WorkflowHistory-BDm1H5BL.js → WorkflowHistory-Cb-ZoRBp.js} +26 -35
  164. package/dist/assets/{WorkflowOnboardingView-BZP0l2UH.js → WorkflowOnboardingView-CguOMlib.js} +8 -8
  165. package/dist/assets/{WorkflowPreview-Bt03akXc.css → WorkflowPreview-CYpzxJej.css} +8 -8
  166. package/dist/assets/{WorkflowPreview-CQzIuWsu.js → WorkflowPreview-DY79uYFw.js} +12 -12
  167. package/dist/assets/{WorkflowTagsDropdown-C4m2b8q6.js → WorkflowTagsDropdown-CdEFZM1A.js} +2 -3
  168. package/dist/assets/{WorkflowsView-CUeNwQmg.js → WorkflowsView-BnxQSw3m.js} +53 -49
  169. package/dist/assets/{_MapCache-BGBKpT5S.js → _MapCache-Byd-DTfo.js} +50 -12
  170. package/dist/assets/{apiKeys.store-CHTKph22.js → apiKeys.store-CPsBJKkq.js} +1 -1
  171. package/dist/assets/{assistant.store-D6Fihh2i.js → assistant.store-DvuxtpS4.js} +16 -8
  172. package/dist/assets/{auth.eventBus-CUpasXbj.js → auth.eventBus-YsWbuB84.js} +1 -1
  173. package/dist/assets/{VariablesView-PPP4k5c3.css → banners-UK5wWFEI.css} +21 -25
  174. package/dist/assets/banners.store-BQPwuqhn.js +192 -0
  175. package/dist/assets/{chartjs.utils-DrHDj0Lr.js → chartjs.utils-Bf07Y-P-.js} +3 -3
  176. package/dist/assets/{chatPanel.store-Dt9ypdvG.js → chatPanel.store-fM-8PK9i.js} +4 -4
  177. package/dist/assets/{cloudPlan.store-x1IpiElw.js → cloudPlan.store-DrraBpZJ.js} +18 -3
  178. package/dist/assets/{col-b1w4xo57.js → col-DK_GtMhM.js} +3 -3
  179. package/dist/assets/{constants-DlQs6Cav.js → constants-CPQyU8WO.js} +4 -2
  180. package/dist/assets/{constants-B1JYxPAR.js → constants-DvlTm3U4.js} +402 -313
  181. package/dist/assets/{core-CGHB7oTc.js → core-6lPsS9S5.js} +1 -1
  182. package/dist/assets/{dataTable.store-Bgg7dsRy.js → dataTable.store-u9fGWest.js} +2 -2
  183. package/dist/assets/{date-picker-YLC0sjSf.js → date-picker-CVSd-BRt.js} +3 -3
  184. package/dist/assets/{dateFormatter-jkly8a5N.js → dateFormatter-BD73Za8B.js} +1 -1
  185. package/dist/assets/{dialog-B1U4ND70.js → dialog-BMoy5MDa.js} +4 -4
  186. package/dist/assets/{dist-BCqe3G7U.js → dist-CWw8iddm.js} +1 -1
  187. package/dist/assets/{es-BO7MlKL2.js → es-BazDU8Wd.js} +1 -1
  188. package/dist/assets/{evaluation.constants-BLT71nuf.js → evaluation.constants-CIiAC2dT.js} +3 -3
  189. package/dist/assets/{executions.store-DmR1JjSC.js → executions.store-IU9p1s46.js} +1 -1
  190. package/dist/assets/{externalSecrets.ee.store-px6HohWF.js → externalSecrets.ee.store-1z63wMHN.js} +2 -2
  191. package/dist/assets/{focusPanel.store-Pqc2v-Ms.js → focusPanel.store-BJpwjMIG.js} +4 -4
  192. package/dist/assets/{folders.store-x8KuYpUo.js → folders.store-Db975T-w.js} +2 -2
  193. package/dist/assets/{icon-C8yfF1LY.js → icon-DhADuA9N.js} +1 -1
  194. package/dist/assets/{index-C4u3WVDF.js → index-C25i7qsE.js} +643 -520
  195. package/dist/assets/{index-D9KM9gTZ.css → index-C8erHZ_Y.css} +492 -321
  196. package/dist/assets/{insights.store-LOsCbJQU.js → insights.store-DC_enAA-.js} +16 -8
  197. package/dist/assets/{insights.utils-7zZgNSKk.js → insights.utils-ClJRVRAK.js} +2 -2
  198. package/dist/assets/{isEmpty-B-mcFJ04.css → isEmpty-CAtRkxE7.css} +101 -101
  199. package/dist/assets/{isEmpty-CRyMT0C3.js → isEmpty-DrZRN4lR.js} +144 -120
  200. package/dist/assets/{languageModules-B8UNBljm.js → languageModules-CNluY7w0.js} +1 -1
  201. package/dist/assets/{logStreaming.store-DUt3HvR4.js → logStreaming.store-CPvxjcQB.js} +1 -1
  202. package/dist/assets/{mcp.store-Cwt_hzwD.js → mcp.store-YGfe2oZU.js} +2 -2
  203. package/dist/assets/{merge-Db6rb1_m.js → merge-CKEa8BM2.js} +1 -1
  204. package/dist/assets/{nodeCreator.store-DDUlc1Wi.js → nodeCreator.store-DHz0Nc1Y.js} +1988 -1988
  205. package/dist/assets/nodeIcon-ry_JIpAT.js +98 -0
  206. package/dist/assets/{nodeTransforms-CJd0FLm1.js → nodeTransforms-PeZUYiCs.js} +2 -2
  207. package/dist/assets/{npsSurvey.store-DTTUiGq9.js → npsSurvey.store-BTpA4Bdf.js} +2 -2
  208. package/dist/assets/{orderBy-CanHuORU.js → orderBy-CMVxNao4.js} +2 -2
  209. package/dist/assets/{overlay-DeoWJ8oB.js → overlay-B8MMvNgs.js} +2 -2
  210. package/dist/assets/{personalizedTemplatesV3.store-CJ9Bfy5u.js → personalizedTemplatesV3.store-C0D2WZuq.js} +4 -4
  211. package/dist/assets/{pickBy-DoRblpyg.js → pickBy-DWZbVA0W.js} +2 -3
  212. package/dist/assets/{radio-j4rSUoao.js → radio-5XOrKEP7.js} +3 -3
  213. package/dist/assets/{readyToRunWorkflows.store-CjgkGuJy.js → readyToRunWorkflows.store-C23cIyhu.js} +5 -5
  214. package/dist/assets/{readyToRunWorkflowsV2.store-6CMdkLg0.js → readyToRunWorkflowsV2.store-BxZUJyXQ.js} +18 -10
  215. package/dist/assets/{roles.store-D2mgfxDv.js → roles.store-Bk6Eo7y8.js} +2 -2
  216. package/dist/assets/{router-Ebv1qMhT.js → router-D4zIcC5W.js} +118 -115
  217. package/dist/assets/{schemaPreview.store-BdP1Rtj4.js → schemaPreview.store-BVhugjbw.js} +2 -2
  218. package/dist/assets/{semver-C8_oAvi8.js → semver-lN9oCZPq.js} +1 -1
  219. package/dist/assets/{sourceControl.eventBus-B10rpVhp.js → sourceControl.eventBus-BkPwCZw_.js} +1 -1
  220. package/dist/assets/{src-Cl0xZtCE.js → src-D6S9Khji.js} +38 -24
  221. package/dist/assets/{src-C5a_PFvg.css → src-sI-DsSQQ.css} +10 -9
  222. package/dist/assets/{sso.store-BSJgAn6v.js → sso.store-qzj82Xj4.js} +1 -1
  223. package/dist/assets/{table-B9oFv7WW.js → table-s-zqHExs.js} +3 -3
  224. package/dist/assets/{templateActions-CAMtj2SG.js → templateActions-BeIpzgaa.js} +4 -4
  225. package/dist/assets/{templateTransforms-ClSZtrME.js → templateTransforms-Cgy40V1P.js} +1 -1
  226. package/dist/assets/templates.store-COjIpQaS.js +3907 -0
  227. package/dist/assets/{truncate-Dc79aML5.js → truncate-DGRsht-H.js} +1 -1
  228. package/dist/assets/{uniqBy-C2OAfwKy.js → uniqBy-BUNHbbw3.js} +1 -1
  229. package/dist/assets/{usage.store-DXgdlM1s.js → usage.store-EBmhHKPv.js} +6 -3
  230. package/dist/assets/{useActions-CYE2yaOW.js → useActions-CqdsN2GH.js} +5 -5
  231. package/dist/assets/useAgent-BHJHCfap.js +10 -0
  232. package/dist/assets/{useBeforeUnload-BDgq2LXA.js → useBeforeUnload-BPhnlPrH.js} +3 -3
  233. package/dist/assets/{useBugReporting-C4eU8DLn.js → useBugReporting-oDEHgPM1.js} +9 -9
  234. package/dist/assets/{Canvas-Bn6gWZ4a.css → useCanvasMapping-Bldjj0CO.css} +154 -133
  235. package/dist/assets/{Canvas-Td0SIV0U.js → useCanvasMapping-DWlYBxgN.js} +2385 -2379
  236. package/dist/assets/{useCanvasOperations-BxV5Dc21.js → useCanvasOperations-CFsSFVcO.js} +13 -13
  237. package/dist/assets/useChatCredentials-AjXB38tk.css +442 -0
  238. package/dist/assets/useChatCredentials-CMV_NA0l.js +591 -0
  239. package/dist/assets/useChatHubSidebarState-CM9tokIj.js +640 -0
  240. package/dist/assets/{useClipboard-BPg-srt1.js → useClipboard-fRnZpGbX.js} +2 -2
  241. package/dist/assets/{useCommandBar-CLraT-A2.js → useCommandBar-_c6cO-zw.js} +108 -115
  242. package/dist/assets/{useDebounce-BRhQZVIC.js → useDebounce-BgcdaJ78.js} +2 -2
  243. package/dist/assets/{useExecutionData-B4rCxtFJ.js → useExecutionData-Bk540rxU.js} +1 -1
  244. package/dist/assets/{useExecutionDebugging-B-lTq5hU.js → useExecutionDebugging-BNrxsZTN.js} +7 -7
  245. package/dist/assets/{useExecutionHelpers-5AFgT_t7.js → useExecutionHelpers-DrFWi6u7.js} +5 -5
  246. package/dist/assets/{useExternalHooks-ChElZw8W.js → useExternalHooks-SxBXYVNW.js} +1 -1
  247. package/dist/assets/{useImportCurlCommand-BW8wZKLy.js → useImportCurlCommand-obipPNWg.js} +9 -9
  248. package/dist/assets/useIntersectionObserver-BkAtQAzK.js +33 -0
  249. package/dist/assets/{useKeybindings-fJZrJyDB.js → useKeybindings-DlmwtVDN.js} +4 -4
  250. package/dist/assets/{useLogsTreeExpand-DbXAJb89.js → useLogsTreeExpand-gKLCILZL.js} +32 -32
  251. package/dist/assets/{useLogsTreeExpand-BT6XJR8J.css → useLogsTreeExpand-nZMKe2ps.css} +38 -35
  252. package/dist/assets/{useMcp-ClSG_eXg.js → useMcp-_gyuyL1x.js} +2 -2
  253. package/dist/assets/{useMessage-CVZHrsoz.js → useMessage-Ceo97RRX.js} +5 -5
  254. package/dist/assets/{usePageRedirectionHelper-Cn-LYQLi.js → usePageRedirectionHelper-C_ctyI4O.js} +4 -4
  255. package/dist/assets/{usePinnedData-_-i0LUdd.js → usePinnedData-Csij2qN3.js} +5 -5
  256. package/dist/assets/{usePushConnection-BHaxo8fR.js → usePushConnection-XZibrqm8.js} +16 -15
  257. package/dist/assets/{useRecentResources-D_WnXWIZ.js → useRecentResources-FhIOba0w.js} +9 -9
  258. package/dist/assets/{useRunWorkflow-D5rKvgfC.js → useRunWorkflow-_-_hUnHE.js} +10 -10
  259. package/dist/assets/{useTelemetry-BxbCYDca.js → useTelemetry-EOV0Llso.js} +52 -157
  260. package/dist/assets/{useTelemetryContext-55FklHQh.js → useTelemetryContext-CSMUQPEW.js} +1 -1
  261. package/dist/assets/{useToast-CKD06lpn.js → useToast-BlMNYwds.js} +7 -7
  262. package/dist/assets/{useWorkflowActivate-B2RbrKj9.js → useWorkflowActivate-OfPMIBJ5.js} +8 -8
  263. package/dist/assets/{useWorkflowSaving-DOwP3C1n.js → useWorkflowSaving-CWyt929n.js} +9 -9
  264. package/dist/assets/{useWorkflowsCache-4ARgZCpO.js → useWorkflowsCache-BSXTJC8C.js} +1 -1
  265. package/dist/assets/{versions.store-DyddKRXT.js → versions.store-Dx98n6R_.js} +3 -3
  266. package/dist/assets/{vue-json-pretty-DiH9ZFoW.js → vue-json-pretty-BltKoWq2.js} +1 -1
  267. package/dist/index.html +116 -114
  268. package/package.json +1 -1
  269. package/scripts/fetch-node-popularity.mjs +1 -1
  270. package/stylelint.config.mjs +7 -1
  271. package/dist/assets/AnimatedSpinner-ChSRgyeI.css +0 -39
  272. package/dist/assets/CollectionParameter-Dr2sbWu0.js +0 -58
  273. package/dist/assets/DemoFooter-CWdsp2am.js +0 -71
  274. package/dist/assets/LogsPanel-mv855bJ4.js +0 -58
  275. package/dist/assets/ProjectVariables-Cw92ZPKE.css +0 -293
  276. package/dist/assets/RunDataParsedAiContent-D30b0eQs.js +0 -25
  277. package/dist/assets/VariablesUsageBadge-CEu0Fi7I.js +0 -35
  278. package/dist/assets/VariablesUsageBadge-CQU1F9NU.css +0 -129
  279. package/dist/assets/VariablesView-CnlNqt-I.js +0 -456
  280. package/dist/assets/VirtualSchema-BXzJEXJR.js +0 -43
  281. package/dist/assets/nodeIcon-CyGsA5TL.js +0 -75
  282. package/dist/assets/templates.store-pF0jvUy0.js +0 -337
  283. package/dist/assets/useChatHubSidebarState-CTFhoZRQ.js +0 -383
  284. package/dist/assets/useProjectPages-DrIHs-hv.js +0 -13
  285. /package/dist/assets/{FileSaver.min-CR_3Le5x.js → FileSaver.min-DaytN8ae.js} +0 -0
  286. /package/dist/assets/{RunDataHtml-DOQ0pkg3.js → RunDataHtml-DdtrEw19.js} +0 -0
  287. /package/dist/assets/{TextWithHighlights-B8mQwCVK.js → TextWithHighlights-CxxIad3D.js} +0 -0
  288. /package/dist/assets/{buttons.esm-CnepylvE.js → buttons.esm-Euf82NbC.js} +0 -0
  289. /package/dist/assets/{chart-inxSB4fp.js → chart-BI8B7UPV.js} +0 -0
  290. /package/dist/assets/{core-BfCr8skN.js → core-CIkXL_1D.js} +0 -0
  291. /package/dist/assets/{exports-RJH1xso1.js → exports-D2D_Xd3F.js} +0 -0
  292. /package/dist/assets/{insights.constants-DK2g3nnD.js → insights.constants-NogjFJ3a.js} +0 -0
  293. /package/dist/assets/{smartDecimal-BitNC0jz.js → smartDecimal-5rgLDM96.js} +0 -0
  294. /package/dist/assets/{sortByProperty-CUhVU03p.js → sortByProperty-0UtqPmvJ.js} +0 -0
  295. /package/dist/assets/{typescript.worker-CkR7RUha.js → typescript.worker-DK2Qdfu7.js} +0 -0
  296. /package/dist/assets/{vue-B27A1Apg.js → vue-LyXhKoPx.js} +0 -0
  297. /package/dist/assets/{worker-DYbBH4SI.js → worker-CIvWfg3a.js} +0 -0
  298. /package/dist/assets/{xml-CcxXd9zY.js → xml-F7krcG3E.js} +0 -0
@@ -1,171 +1,55 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/es-BO7MlKL2.js","assets/core-BfCr8skN.js","assets/chunk-6z4oVpB-.js","assets/languageModules-B8UNBljm.js","assets/xml-CcxXd9zY.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/es-BazDU8Wd.js","assets/core-CIkXL_1D.js","assets/chunk-6z4oVpB-.js","assets/languageModules-CNluY7w0.js","assets/xml-F7krcG3E.js"])))=>i.map(i=>d[i]);
2
2
  import { o as __toESM } from "./chunk-6z4oVpB-.js";
3
- import { C as computed, D as createElementBlock, E as createCommentVNode, G as nextTick, Gt as unref, It as ref, M as createVNode, P as defineComponent, Sn as toDisplayString, T as createBlock, Z as onMounted, _ as Fragment, _n as normalizeClass, _t as watch, bt as withCtx, et as openBlock, h as withModifiers, it as renderList, j as createTextVNode, mt as useTemplateRef, q as onBeforeMount, w as createBaseVNode, yn as normalizeStyle } from "./vue.runtime.esm-bundler-DDuXT-9r.js";
4
- import { I as useSpeechRecognition, L as useSpeechSynthesis, M as useMediaQuery, P as useScroll, g as onClickOutside, gt as useI18n, j as useLocalStorage } from "./_MapCache-BGBKpT5S.js";
5
- import { Ct as N8nIconButton_default, Fn as N8nText_default, G as N8nOption_default, In as N8nButton_default, Nn as N8nHeading_default, Rn as N8nIcon_default, W as N8nSelect_default, bt as N8nInput_default, gt as require_markdown_it_link_attributes, ht as N8nTooltip_default, i as N8nScrollArea_default, k as N8nNavigationDropdown_default } from "./src-Cl0xZtCE.js";
3
+ import { C as computed, D as createElementBlock, E as createCommentVNode, G as nextTick, Gt as unref, It as ref, M as createVNode, P as defineComponent, Sn as toDisplayString, T as createBlock, _ as Fragment, _n as normalizeClass, _t as watch, bt as withCtx, et as openBlock, h as withModifiers, it as renderList, j as createTextVNode, mt as useTemplateRef, q as onBeforeMount, w as createBaseVNode, yn as normalizeStyle } from "./vue.runtime.esm-bundler-DDuXT-9r.js";
4
+ import { I as useSpeechRecognition, L as useSpeechSynthesis, M as useMediaQuery, P as useScroll, gt as useI18n, j as useLocalStorage } from "./_MapCache-Byd-DTfo.js";
5
+ import { Ct as N8nInput_default, In as N8nText_default, Ln as N8nButton_default, Pn as N8nHeading_default, Tt as N8nIconButton_default, i as N8nScrollArea_default, mt as N8nLink_default, vt as N8nTooltip_default, yt as require_markdown_it_link_attributes, zn as N8nIcon_default } from "./src-D6S9Khji.js";
6
6
  import "./en-BYTsM8fR.js";
7
7
  import { t as __vitePreload } from "./preload-helper-CR0ecmWK.js";
8
8
  import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js";
9
- import { b as useRouter, x as createEventBus, y as useRoute } from "./truncate-Dc79aML5.js";
10
- import "./icon-C8yfF1LY.js";
11
- import "./overlay-DeoWJ8oB.js";
9
+ import { b as useRouter, y as useRoute } from "./truncate-DGRsht-H.js";
10
+ import "./icon-DhADuA9N.js";
11
+ import "./overlay-B8MMvNgs.js";
12
12
  import "./empty-BuGRxzl4.js";
13
- import "./dialog-B1U4ND70.js";
14
- import { Ht as useCredentialsStore, Li as useUIStore, ir as useUsersStore, kn as useDocumentTitle, yc as v4_default } from "./useTelemetry-BxbCYDca.js";
15
- import { t as useToast } from "./useToast-CKD06lpn.js";
13
+ import "./useMessage-Ceo97RRX.js";
14
+ import "./dialog-BMoy5MDa.js";
15
+ import { Ni as useUIStore, Tn as useDocumentTitle, er as useUsersStore, xc as v4_default } from "./useTelemetry-EOV0Llso.js";
16
+ import { t as useToast } from "./useToast-BlMNYwds.js";
16
17
  import "./sanitize-html-BuXr7o4T.js";
17
18
  import "./path-browserify-DsmB_HMK.js";
18
- import { Go as LOCAL_STORAGE_CHAT_HUB_CREDENTIALS, Ko as LOCAL_STORAGE_CHAT_HUB_SELECTED_MODEL, Lr as nullType, Rr as recordType, cr as PROVIDER_CREDENTIAL_TYPE_MAP, lr as chatHubConversationModelSchema, ur as chatHubProviderSchema, zr as stringType } from "./constants-B1JYxPAR.js";
19
- import "./merge-Db6rb1_m.js";
19
+ import { Zo as LOCAL_STORAGE_CHAT_HUB_SELECTED_MODEL, cr as PROVIDER_CREDENTIAL_TYPE_MAP, lr as chatHubConversationModelSchema, mo as VIEWS } from "./constants-DvlTm3U4.js";
20
+ import "./merge-CKEa8BM2.js";
20
21
  import "./dateformat-D7TIhVd4.js";
21
- import "./useDebounce-BRhQZVIC.js";
22
- import "./useExternalHooks-ChElZw8W.js";
22
+ import "./useDebounce-BgcdaJ78.js";
23
+ import "./useExternalHooks-SxBXYVNW.js";
23
24
  import "./retry-sDkwzrPY.js";
24
- import { t as useClipboard } from "./useClipboard-BPg-srt1.js";
25
- import { t as Modal_default } from "./Modal-B8k7lYVM.js";
26
- import { t as CredentialIcon_default } from "./CredentialIcon-BmzfYSyO.js";
27
- import { a as providerDisplayNames, i as MOBILE_MEDIA_QUERY, r as CHAT_VIEW, t as CHAT_CONVERSATION_VIEW } from "./constants-DlQs6Cav.js";
28
- import { n as useChatStore, r as findOneFromModelsResponse, t as useChatHubSidebarState } from "./useChatHubSidebarState-CTFhoZRQ.js";
29
- import { t as VueMarkdown_default } from "./VueMarkdown-70GnkI0W.js";
30
- var ModelSelector_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
31
- __name: "ModelSelector",
32
- props: {
33
- models: {},
34
- selectedModel: {},
35
- credentialsName: {}
36
- },
37
- emits: ["change", "configure"],
38
- setup(__props, { expose: __expose, emit: __emit }) {
39
- const props = __props;
40
- const emit = __emit;
41
- const dropdownRef = useTemplateRef("dropdownRef");
42
- const menu = computed(() => chatHubProviderSchema.options.filter((provider) => provider !== "n8n").map((provider) => {
43
- const models = props.models?.[provider].models ?? [];
44
- const error = props.models?.[provider].error;
45
- const modelOptions = models.length > 0 ? models.map((model) => {
46
- return {
47
- id: `${provider}::${model.provider === "n8n" ? model.workflowId : model.model}`,
48
- title: model.name,
49
- disabled: false
50
- };
51
- }) : error ? [{
52
- id: `${provider}::error`,
53
- value: null,
54
- disabled: true,
55
- title: error
56
- }] : [];
57
- const submenu = modelOptions.concat([...provider !== "n8n" && modelOptions.length > 0 ? [{
58
- isDivider: true,
59
- id: "divider"
60
- }] : []]);
61
- if (provider !== "n8n") submenu.push({
62
- id: `${provider}::configure`,
63
- icon: "settings",
64
- title: "Configure credentials...",
65
- disabled: false
66
- });
67
- return {
68
- id: provider,
69
- hidden: true,
70
- title: providerDisplayNames[provider],
71
- submenu
72
- };
73
- }));
74
- const selectedLabel = computed(() => {
75
- if (!props.selectedModel) return "Select model";
76
- return props.selectedModel.name;
77
- });
78
- function onSelect(id) {
79
- const [provider, identifier] = id.split("::");
80
- const parsedProvider = chatHubProviderSchema.safeParse(provider).data;
81
- if (!parsedProvider) return;
82
- if (identifier === "configure" && parsedProvider !== "n8n") {
83
- emit("configure", parsedProvider);
84
- return;
85
- }
86
- const model = parsedProvider === "n8n" ? null : identifier;
87
- const workflowId = parsedProvider === "n8n" ? identifier : null;
88
- const selected$1 = props.models?.[parsedProvider].models.find((m) => m.provider === "n8n" ? m.workflowId === workflowId : m.model === model);
89
- if (!selected$1) return;
90
- emit("change", selected$1);
91
- }
92
- onClickOutside(computed(() => dropdownRef.value?.$el), () => dropdownRef.value?.close());
93
- __expose({ open: () => dropdownRef.value?.open() });
94
- return (_ctx, _cache) => {
95
- return openBlock(), createBlock(unref(N8nNavigationDropdown_default), {
96
- ref_key: "dropdownRef",
97
- ref: dropdownRef,
98
- menu: menu.value,
99
- onSelect
100
- }, {
101
- "item-icon": withCtx(({ item }) => [item.id in unref(PROVIDER_CREDENTIAL_TYPE_MAP) ? (openBlock(), createBlock(CredentialIcon_default, {
102
- key: 0,
103
- "credential-type-name": unref(PROVIDER_CREDENTIAL_TYPE_MAP)[item.id],
104
- size: 16,
105
- class: normalizeClass(_ctx.$style.menuIcon)
106
- }, null, 8, ["credential-type-name", "class"])) : createCommentVNode("", true)]),
107
- default: withCtx(() => [createVNode(unref(N8nButton_default), {
108
- class: normalizeClass(_ctx.$style.dropdownButton),
109
- type: "secondary",
110
- text: ""
111
- }, {
112
- default: withCtx(() => [
113
- _ctx.selectedModel && _ctx.selectedModel.provider in unref(PROVIDER_CREDENTIAL_TYPE_MAP) ? (openBlock(), createBlock(CredentialIcon_default, {
114
- key: 0,
115
- "credential-type-name": unref(PROVIDER_CREDENTIAL_TYPE_MAP)[_ctx.selectedModel.provider],
116
- size: _ctx.credentialsName ? 20 : 16,
117
- class: normalizeClass(_ctx.$style.icon)
118
- }, null, 8, [
119
- "credential-type-name",
120
- "size",
121
- "class"
122
- ])) : createCommentVNode("", true),
123
- createBaseVNode("div", { class: normalizeClass(_ctx.$style.selected) }, [createBaseVNode("div", null, toDisplayString(selectedLabel.value), 1), _ctx.credentialsName ? (openBlock(), createBlock(unref(N8nText_default), {
124
- key: 0,
125
- size: "xsmall",
126
- color: "text-light"
127
- }, {
128
- default: withCtx(() => [createTextVNode(toDisplayString(_ctx.credentialsName), 1)]),
129
- _: 1
130
- })) : createCommentVNode("", true)], 2),
131
- createVNode(unref(N8nIcon_default), {
132
- icon: "chevron-down",
133
- size: "medium"
134
- })
135
- ]),
136
- _: 1
137
- }, 8, ["class"])]),
138
- _: 1
139
- }, 8, ["menu"]);
140
- };
141
- }
142
- });
143
- var ModelSelector_vue_vue_type_style_index_0_lang_module_default = {
144
- dropdownButton: "_dropdownButton_1go3j_123",
145
- selected: "_selected_1go3j_131",
146
- icon: "_icon_1go3j_144",
147
- menuIcon: "_menuIcon_1go3j_149"
148
- };
149
- var ModelSelector_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ModelSelector_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ModelSelector_vue_vue_type_style_index_0_lang_module_default }]]);
25
+ import { t as useClipboard } from "./useClipboard-fRnZpGbX.js";
26
+ import "./Modal-DwutFKNY.js";
27
+ import "./CredentialIcon-DS3l06t2.js";
28
+ import { a as MOBILE_MEDIA_QUERY, i as CHAT_VIEW, n as CHAT_CONVERSATION_VIEW, o as providerDisplayNames } from "./constants-CPQyU8WO.js";
29
+ import { a as findOneFromModelsResponse, d as unflattenModel, n as ChatAgentAvatar_default, r as useChatStore, t as useChatHubSidebarState } from "./useChatHubSidebarState-CM9tokIj.js";
30
+ import { n as AgentEditorModal_default, r as ModelSelector_default, t as useChatCredentials } from "./useChatCredentials-CMV_NA0l.js";
31
+ import { t as VueMarkdown_default } from "./VueMarkdown-CiR4a0gO.js";
32
+ import { t as useAgent } from "./useAgent-BHJHCfap.js";
150
33
  var ChatConversationHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
151
34
  __name: "ChatConversationHeader",
152
35
  props: {
153
36
  selectedModel: {},
154
- credentials: {}
37
+ credentials: {},
38
+ readyToShowModelSelector: { type: Boolean }
155
39
  },
156
40
  emits: [
157
41
  "selectModel",
158
- "setCredentials",
159
- "renameConversation"
42
+ "renameConversation",
43
+ "editCustomAgent",
44
+ "createCustomAgent",
45
+ "selectCredential",
46
+ "openWorkflow"
160
47
  ],
161
48
  setup(__props, { expose: __expose, emit: __emit }) {
162
49
  const emit = __emit;
163
50
  const sidebar = useChatHubSidebarState();
164
- const chatStore = useChatStore();
165
- const credentialsStore = useCredentialsStore();
166
51
  const router = useRouter();
167
52
  const modelSelectorRef = useTemplateRef("modelSelectorRef");
168
- const credentialsName = computed(() => __props.selectedModel ? credentialsStore.getCredentialById(__props.credentials[__props.selectedModel.provider] ?? "")?.name : void 0);
169
53
  function onModelChange(selection) {
170
54
  emit("selectModel", selection);
171
55
  }
@@ -179,54 +63,124 @@ var ChatConversationHeader_vue_vue_type_script_setup_true_lang_default = /* @__P
179
63
  __expose({ openModelSelector: () => modelSelectorRef.value?.open() });
180
64
  return (_ctx, _cache) => {
181
65
  return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.$style.component) }, [
182
- !unref(sidebar).isStatic.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
66
+ createBaseVNode("div", { class: normalizeClass(_ctx.$style.grow) }, [
67
+ !unref(sidebar).isStatic.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
68
+ key: 0,
69
+ class: normalizeClass(_ctx.$style.menuButton),
70
+ type: "secondary",
71
+ icon: "panel-left",
72
+ text: "",
73
+ "icon-size": "large",
74
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(sidebar).toggleOpen(true))
75
+ }, null, 8, ["class"])) : createCommentVNode("", true),
76
+ !unref(sidebar).isStatic.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
77
+ key: 1,
78
+ class: normalizeClass(_ctx.$style.menuButton),
79
+ type: "secondary",
80
+ icon: "square-pen",
81
+ text: "",
82
+ "icon-size": "large",
83
+ onClick: onNewChat
84
+ }, null, 8, ["class"])) : createCommentVNode("", true),
85
+ _ctx.readyToShowModelSelector ? (openBlock(), createBlock(ModelSelector_default, {
86
+ key: 2,
87
+ ref_key: "modelSelectorRef",
88
+ ref: modelSelectorRef,
89
+ selectedAgent: _ctx.selectedModel,
90
+ credentials: _ctx.credentials,
91
+ onChange: onModelChange,
92
+ onCreateCustomAgent: _cache[1] || (_cache[1] = ($event) => emit("createCustomAgent")),
93
+ onSelectCredential: _cache[2] || (_cache[2] = (provider, credentialId) => emit("selectCredential", provider, credentialId))
94
+ }, null, 8, ["selectedAgent", "credentials"])) : createCommentVNode("", true)
95
+ ], 2),
96
+ _ctx.selectedModel?.model.provider === "custom-agent" ? (openBlock(), createBlock(unref(N8nButton_default), {
183
97
  key: 0,
184
- class: normalizeClass(_ctx.$style.menuButton),
98
+ class: normalizeClass(_ctx.$style.editAgent),
185
99
  type: "secondary",
186
- icon: "panel-left",
187
- text: "",
188
- "icon-size": "large",
189
- onClick: _cache[0] || (_cache[0] = ($event) => unref(sidebar).toggleOpen(true))
100
+ size: "small",
101
+ icon: "settings",
102
+ label: "Edit Agent",
103
+ onClick: _cache[3] || (_cache[3] = ($event) => emit("editCustomAgent", _ctx.selectedModel.model.agentId))
190
104
  }, null, 8, ["class"])) : createCommentVNode("", true),
191
- !unref(sidebar).isStatic.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
105
+ _ctx.selectedModel?.model.provider === "n8n" ? (openBlock(), createBlock(unref(N8nButton_default), {
192
106
  key: 1,
193
- class: normalizeClass(_ctx.$style.menuButton),
107
+ class: normalizeClass(_ctx.$style.editAgent),
194
108
  type: "secondary",
195
- icon: "square-pen",
196
- text: "",
197
- "icon-size": "large",
198
- onClick: onNewChat
199
- }, null, 8, ["class"])) : createCommentVNode("", true),
200
- createVNode(ModelSelector_default, {
201
- ref_key: "modelSelectorRef",
202
- ref: modelSelectorRef,
203
- models: unref(chatStore).models ?? null,
204
- "selected-model": _ctx.selectedModel,
205
- "credentials-name": credentialsName.value,
206
- onChange: onModelChange,
207
- onConfigure: _cache[1] || (_cache[1] = ($event) => emit("setCredentials", $event))
208
- }, null, 8, [
209
- "models",
210
- "selected-model",
211
- "credentials-name"
212
- ])
109
+ size: "small",
110
+ icon: "settings",
111
+ label: "Open Workflow",
112
+ onClick: _cache[4] || (_cache[4] = ($event) => emit("openWorkflow", _ctx.selectedModel.model.workflowId))
113
+ }, null, 8, ["class"])) : createCommentVNode("", true)
213
114
  ], 2);
214
115
  };
215
116
  }
216
117
  });
217
118
  var ChatConversationHeader_vue_vue_type_style_index_0_lang_module_default = {
218
- component: "_component_k0rp2_123",
219
- menuButton: "_menuButton_k0rp2_133",
220
- title: "_title_k0rp2_137"
119
+ component: "_component_1rkfw_123",
120
+ menuButton: "_menuButton_1rkfw_133",
121
+ grow: "_grow_1rkfw_137",
122
+ title: "_title_1rkfw_144",
123
+ editAgent: "_editAgent_1rkfw_148"
221
124
  };
222
125
  var ChatConversationHeader_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ChatConversationHeader_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ChatConversationHeader_vue_vue_type_style_index_0_lang_module_default }]]);
126
+ var ChatTypingIndicator_vue_vue_type_style_index_0_lang_module_default = {
127
+ typing: "_typing_9qr9t_123",
128
+ blink: "_blink_9qr9t_1"
129
+ };
130
+ var _sfc_main = {};
131
+ function _sfc_render(_ctx, _cache) {
132
+ return openBlock(), createElementBlock("span", { class: normalizeClass(_ctx.$style.typing) }, _cache[0] || (_cache[0] = [
133
+ createBaseVNode("i", null, null, -1),
134
+ createBaseVNode("i", null, null, -1),
135
+ createBaseVNode("i", null, null, -1)
136
+ ]), 2);
137
+ }
138
+ var ChatTypingIndicator_default = /* @__PURE__ */ __plugin_vue_export_helper_default(_sfc_main, [["render", _sfc_render], ["__cssModules", { "$style": ChatTypingIndicator_vue_vue_type_style_index_0_lang_module_default }]]);
139
+ var hljsInstance;
140
+ var asyncImport = { status: "uninitialized" };
141
+ function useChatHubMarkdownOptions() {
142
+ const forceReRenderKey = ref(0);
143
+ const markdownOptions = { highlight(str, lang) {
144
+ if (!lang) return "";
145
+ const normalizedLang = lang.toLowerCase();
146
+ if (hljsInstance?.getLanguage(normalizedLang)) try {
147
+ return hljsInstance.highlight(str, { language: normalizedLang }).value;
148
+ } catch {}
149
+ loadLanguageModules();
150
+ return "";
151
+ } };
152
+ async function loadLanguageModules() {
153
+ if (asyncImport.status === "done") return;
154
+ if (asyncImport.status === "inProgress") {
155
+ await asyncImport.promise;
156
+ forceReRenderKey.value++;
157
+ return;
158
+ }
159
+ try {
160
+ asyncImport = {
161
+ status: "inProgress",
162
+ promise: Promise.all([__vitePreload(() => import("./es-BazDU8Wd.js"), __vite__mapDeps([0,1,2])), __vitePreload(() => import("./languageModules-CNluY7w0.js"), __vite__mapDeps([3,4]))])
163
+ };
164
+ const [hljs, languages] = await asyncImport.promise;
165
+ asyncImport = { status: "done" };
166
+ hljsInstance = hljs.default.newInstance();
167
+ for (const [lang, module] of Object.entries(languages)) hljsInstance.registerLanguage(lang, module);
168
+ forceReRenderKey.value++;
169
+ } catch (error) {
170
+ console.warn("Failed to load syntax highlighting modules", error);
171
+ }
172
+ }
173
+ return {
174
+ markdownOptions,
175
+ forceReRenderKey
176
+ };
177
+ }
223
178
  var import_markdown_it_link_attributes = /* @__PURE__ */ __toESM(require_markdown_it_link_attributes());
224
179
  var ChatMessageActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
225
180
  __name: "ChatMessageActions",
226
181
  props: {
227
- type: {},
228
182
  justCopied: { type: Boolean },
229
- messageId: {},
183
+ message: {},
230
184
  alternatives: {},
231
185
  isSpeechSynthesisAvailable: { type: Boolean },
232
186
  isSpeaking: { type: Boolean }
@@ -240,12 +194,22 @@ var ChatMessageActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
240
194
  ],
241
195
  setup(__props, { emit: __emit }) {
242
196
  const i18n = useI18n();
197
+ const router = useRouter();
243
198
  const emit = __emit;
244
199
  const copyTooltip = computed(() => {
245
200
  return __props.justCopied ? i18n.baseText("generic.copied") : i18n.baseText("generic.copy");
246
201
  });
247
202
  const currentAlternativeIndex = computed(() => {
248
- return __props.alternatives.findIndex((id) => id === __props.messageId);
203
+ return __props.alternatives.findIndex((id) => id === __props.message.id);
204
+ });
205
+ const executionUrl = computed(() => {
206
+ if (__props.message.type === "ai" && __props.message.provider === "n8n" && __props.message.executionId) return router.resolve({
207
+ name: VIEWS.EXECUTION_PREVIEW,
208
+ params: {
209
+ name: __props.message.workflowId,
210
+ executionId: __props.message.executionId
211
+ }
212
+ }).href;
249
213
  });
250
214
  function handleCopy() {
251
215
  emit("copy");
@@ -275,7 +239,7 @@ var ChatMessageActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
275
239
  }, null, 8, ["icon"])]),
276
240
  _: 1
277
241
  }),
278
- _ctx.isSpeechSynthesisAvailable && _ctx.type === "ai" ? (openBlock(), createBlock(unref(N8nTooltip_default), {
242
+ _ctx.isSpeechSynthesisAvailable && _ctx.message.type === "ai" ? (openBlock(), createBlock(unref(N8nTooltip_default), {
279
243
  key: 0,
280
244
  placement: "bottom",
281
245
  "show-after": 300
@@ -304,7 +268,7 @@ var ChatMessageActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
304
268
  })]),
305
269
  _: 1
306
270
  }),
307
- _ctx.type === "ai" ? (openBlock(), createBlock(unref(N8nTooltip_default), {
271
+ _ctx.message.type === "ai" ? (openBlock(), createBlock(unref(N8nTooltip_default), {
308
272
  key: 1,
309
273
  placement: "bottom",
310
274
  "show-after": 300
@@ -319,7 +283,27 @@ var ChatMessageActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
319
283
  })]),
320
284
  _: 1
321
285
  })) : createCommentVNode("", true),
322
- _ctx.alternatives.length > 1 ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
286
+ executionUrl.value && _ctx.message.executionId ? (openBlock(), createBlock(unref(N8nTooltip_default), {
287
+ key: 2,
288
+ placement: "bottom",
289
+ "show-after": 300
290
+ }, {
291
+ content: withCtx(() => [_cache[4] || (_cache[4] = createTextVNode(" Execution ID: ")), createVNode(unref(N8nLink_default), {
292
+ to: executionUrl.value,
293
+ "new-window": true
294
+ }, {
295
+ default: withCtx(() => [createTextVNode(toDisplayString(_ctx.message.executionId), 1)]),
296
+ _: 1
297
+ }, 8, ["to"])]),
298
+ default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
299
+ icon: "info",
300
+ type: "tertiary",
301
+ size: "medium",
302
+ text: ""
303
+ })]),
304
+ _: 1
305
+ })) : createCommentVNode("", true),
306
+ _ctx.alternatives.length > 1 ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [
323
307
  createVNode(unref(N8nIconButton_default), {
324
308
  icon: "chevron-left",
325
309
  type: "tertiary",
@@ -349,59 +333,7 @@ var ChatMessageActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
349
333
  }
350
334
  });
351
335
  var ChatMessageActions_vue_vue_type_style_index_0_lang_module_default = { actions: "_actions_1sizk_123" };
352
- var ChatMessageActions_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ChatMessageActions_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ChatMessageActions_vue_vue_type_style_index_0_lang_module_default }], ["__scopeId", "data-v-26250adf"]]);
353
- var ChatTypingIndicator_vue_vue_type_style_index_0_lang_module_default = {
354
- typing: "_typing_9qr9t_123",
355
- blink: "_blink_9qr9t_1"
356
- };
357
- var _sfc_main = {};
358
- function _sfc_render(_ctx, _cache) {
359
- return openBlock(), createElementBlock("span", { class: normalizeClass(_ctx.$style.typing) }, _cache[0] || (_cache[0] = [
360
- createBaseVNode("i", null, null, -1),
361
- createBaseVNode("i", null, null, -1),
362
- createBaseVNode("i", null, null, -1)
363
- ]), 2);
364
- }
365
- var ChatTypingIndicator_default = /* @__PURE__ */ __plugin_vue_export_helper_default(_sfc_main, [["render", _sfc_render], ["__cssModules", { "$style": ChatTypingIndicator_vue_vue_type_style_index_0_lang_module_default }]]);
366
- var hljsInstance;
367
- var asyncImport = { status: "uninitialized" };
368
- function useChatHubMarkdownOptions() {
369
- const forceReRenderKey = ref(0);
370
- const markdownOptions = { highlight(str, lang) {
371
- if (!lang) return "";
372
- const normalizedLang = lang.toLowerCase();
373
- if (hljsInstance?.getLanguage(normalizedLang)) try {
374
- return hljsInstance.highlight(str, { language: normalizedLang }).value;
375
- } catch {}
376
- loadLanguageModules();
377
- return "";
378
- } };
379
- async function loadLanguageModules() {
380
- if (asyncImport.status === "done") return;
381
- if (asyncImport.status === "inProgress") {
382
- await asyncImport.promise;
383
- forceReRenderKey.value++;
384
- return;
385
- }
386
- try {
387
- asyncImport = {
388
- status: "inProgress",
389
- promise: Promise.all([__vitePreload(() => import("./es-BO7MlKL2.js"), __vite__mapDeps([0,1,2])), __vitePreload(() => import("./languageModules-B8UNBljm.js"), __vite__mapDeps([3,4]))])
390
- };
391
- const [hljs, languages] = await asyncImport.promise;
392
- asyncImport = { status: "done" };
393
- hljsInstance = hljs.default.newInstance();
394
- for (const [lang, module] of Object.entries(languages)) hljsInstance.registerLanguage(lang, module);
395
- forceReRenderKey.value++;
396
- } catch (error) {
397
- console.warn("Failed to load syntax highlighting modules", error);
398
- }
399
- }
400
- return {
401
- markdownOptions,
402
- forceReRenderKey
403
- };
404
- }
336
+ var ChatMessageActions_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ChatMessageActions_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ChatMessageActions_vue_vue_type_style_index_0_lang_module_default }], ["__scopeId", "data-v-1a4933d7"]]);
405
337
  var _hoisted_1 = ["data-message-id"];
406
338
  var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
407
339
  __name: "ChatMessage",
@@ -431,10 +363,7 @@ var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
431
363
  rate: 1,
432
364
  volume: 1
433
365
  });
434
- const credentialTypeName = computed(() => {
435
- if (__props.message.type !== "ai" || !__props.message.provider || __props.message.provider === "n8n") return null;
436
- return PROVIDER_CREDENTIAL_TYPE_MAP[__props.message.provider] ?? null;
437
- });
366
+ const agent = useAgent(computed(() => unflattenModel(__props.message)));
438
367
  async function handleCopy() {
439
368
  const text = __props.message.content;
440
369
  await clipboard.copy(text);
@@ -496,18 +425,12 @@ var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
496
425
  icon: "user",
497
426
  width: "20",
498
427
  height: "20"
499
- })) : _ctx.message.type === "ai" && credentialTypeName.value ? (openBlock(), createBlock(unref(N8nTooltip_default), {
428
+ })) : unref(agent) ? (openBlock(), createBlock(ChatAgentAvatar_default, {
500
429
  key: 1,
501
- "show-after": 100,
502
- placement: "left"
503
- }, {
504
- content: withCtx(() => [createTextVNode(toDisplayString(_ctx.message.model), 1)]),
505
- default: withCtx(() => [createVNode(CredentialIcon_default, {
506
- size: 20,
507
- "credential-type-name": credentialTypeName.value
508
- }, null, 8, ["credential-type-name"])]),
509
- _: 1
510
- })) : (openBlock(), createBlock(unref(N8nIcon_default), {
430
+ agent: unref(agent),
431
+ size: "md",
432
+ tooltip: ""
433
+ }, null, 8, ["agent"])) : (openBlock(), createBlock(unref(N8nIcon_default), {
511
434
  key: 2,
512
435
  icon: "sparkles",
513
436
  width: "20",
@@ -543,7 +466,7 @@ var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
543
466
  }, 8, ["disabled"])], 2)], 2)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createBaseVNode("div", { class: normalizeClass(_ctx.$style.chatMessage) }, [(openBlock(), createBlock(unref(VueMarkdown_default), {
544
467
  key: unref(forceReRenderKey),
545
468
  class: normalizeClass([_ctx.$style.chatMessageMarkdown, "chat-message-markdown"]),
546
- source: _ctx.message.content,
469
+ source: _ctx.message.status === "error" && !_ctx.message.content ? "Error: Unknown error occurred" : _ctx.message.content,
547
470
  options: unref(markdownOptions),
548
471
  plugins: [linksNewTabPlugin]
549
472
  }, null, 8, [
@@ -556,12 +479,11 @@ var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
556
479
  class: normalizeClass(_ctx.$style.typingIndicator)
557
480
  }, null, 8, ["class"])) : (openBlock(), createBlock(ChatMessageActions_default, {
558
481
  key: 1,
559
- type: _ctx.message.type,
560
482
  "just-copied": justCopied.value,
561
483
  "is-speech-synthesis-available": unref(speech).isSupported.value,
562
484
  "is-speaking": unref(speech).isPlaying.value,
563
485
  class: normalizeClass(_ctx.$style.actions),
564
- "message-id": _ctx.message.id,
486
+ message: _ctx.message,
565
487
  alternatives: _ctx.message.alternatives,
566
488
  onCopy: handleCopy,
567
489
  onEdit: handleEdit,
@@ -569,12 +491,11 @@ var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
569
491
  onReadAloud: handleReadAloud,
570
492
  onSwitchAlternative: handleSwitchAlternative
571
493
  }, null, 8, [
572
- "type",
573
494
  "just-copied",
574
495
  "is-speech-synthesis-available",
575
496
  "is-speaking",
576
497
  "class",
577
- "message-id",
498
+ "message",
578
499
  "alternatives"
579
500
  ]))], 64))], 2)], 14, _hoisted_1);
580
501
  };
@@ -599,6 +520,7 @@ var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
599
520
  __name: "ChatPrompt",
600
521
  props: {
601
522
  isResponding: { type: Boolean },
523
+ isNewSession: { type: Boolean },
602
524
  selectedModel: {},
603
525
  isMissingCredentials: { type: Boolean }
604
526
  },
@@ -618,10 +540,8 @@ var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
618
540
  interimResults: true,
619
541
  lang: navigator.language
620
542
  });
621
- const placeholder = computed(() => {
622
- if (!__props.selectedModel) return "Select a model";
623
- return `Message ${__props.selectedModel.name}`;
624
- });
543
+ const placeholder = computed(() => __props.selectedModel ? `Message ${__props.selectedModel.name ?? "a model"}...` : "Select a model");
544
+ const llmProvider = computed(() => __props.selectedModel?.model.provider === "n8n" || __props.selectedModel?.model.provider === "custom-agent" ? void 0 : __props.selectedModel?.model.provider);
625
545
  function onMic() {
626
546
  if (speechInput.isListening.value) speechInput.stop();
627
547
  else speechInput.start();
@@ -672,34 +592,48 @@ var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
672
592
  key: 0,
673
593
  class: normalizeClass(_ctx.$style.callout)
674
594
  }, {
675
- default: withCtx(() => [
676
- _cache[3] || (_cache[3] = createTextVNode(" Please ")),
595
+ default: withCtx(() => [_ctx.isNewSession ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
596
+ _cache[5] || (_cache[5] = createTextVNode(" Please ")),
677
597
  createBaseVNode("a", {
678
598
  href: "",
679
599
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("selectModel"), ["prevent"]))
680
600
  }, "select a model"),
681
- _cache[4] || (_cache[4] = createTextVNode(" to start a conversation "))
682
- ]),
601
+ _cache[6] || (_cache[6] = createTextVNode(" to start a conversation "))
602
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
603
+ _cache[7] || (_cache[7] = createTextVNode(" Please ")),
604
+ createBaseVNode("a", {
605
+ href: "",
606
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => emit("selectModel"), ["prevent"]))
607
+ }, "reselect a model"),
608
+ _cache[8] || (_cache[8] = createTextVNode(" to continue the conversation "))
609
+ ], 64))]),
683
610
  _: 1
684
- }, 8, ["class"])) : _ctx.isMissingCredentials ? (openBlock(), createBlock(unref(N8nText_default), {
611
+ }, 8, ["class"])) : _ctx.isMissingCredentials && llmProvider.value ? (openBlock(), createBlock(unref(N8nText_default), {
685
612
  key: 1,
686
613
  class: normalizeClass(_ctx.$style.callout)
687
614
  }, {
688
- default: withCtx(() => [
689
- _cache[5] || (_cache[5] = createTextVNode(" Please ")),
615
+ default: withCtx(() => [_ctx.isNewSession ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
616
+ _cache[9] || (_cache[9] = createTextVNode(" Please ")),
690
617
  createBaseVNode("a", {
691
618
  href: "",
692
- onClick: _cache[1] || (_cache[1] = withModifiers(($event) => emit("setCredentials", _ctx.selectedModel.provider), ["prevent"]))
619
+ onClick: _cache[2] || (_cache[2] = withModifiers(($event) => emit("setCredentials", llmProvider.value), ["prevent"]))
693
620
  }, " set credentials "),
694
- createTextVNode(" for " + toDisplayString(unref(providerDisplayNames)[_ctx.selectedModel.provider]) + " to start a conversation ", 1)
695
- ]),
621
+ createTextVNode(" for " + toDisplayString(unref(providerDisplayNames)[llmProvider.value]) + " to start a conversation ", 1)
622
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
623
+ _cache[10] || (_cache[10] = createTextVNode(" Please ")),
624
+ createBaseVNode("a", {
625
+ href: "",
626
+ onClick: _cache[3] || (_cache[3] = withModifiers(($event) => emit("setCredentials", llmProvider.value), ["prevent"]))
627
+ }, " set credentials "),
628
+ createTextVNode(" for " + toDisplayString(unref(providerDisplayNames)[llmProvider.value]) + " to continue the conversation ", 1)
629
+ ], 64))]),
696
630
  _: 1
697
631
  }, 8, ["class"])) : createCommentVNode("", true),
698
632
  createVNode(unref(N8nInput_default), {
699
633
  ref_key: "inputRef",
700
634
  ref: inputRef,
701
635
  modelValue: message$1.value,
702
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => message$1.value = $event),
636
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => message$1.value = $event),
703
637
  class: normalizeClass(_ctx.$style.input),
704
638
  type: "textarea",
705
639
  placeholder: placeholder.value,
@@ -786,108 +720,6 @@ var ChatStarter_vue_vue_type_style_index_0_lang_module_default = {
786
720
  cardText: "_cardText_1julh_155"
787
721
  };
788
722
  var ChatStarter_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ChatStarter_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ChatStarter_vue_vue_type_style_index_0_lang_module_default }]]);
789
- const credentialsMapSchema = recordType(chatHubProviderSchema, stringType().or(nullType()));
790
- var CredentialSelectorModal_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
791
- __name: "CredentialSelectorModal",
792
- props: {
793
- provider: {},
794
- initialValue: {}
795
- },
796
- emits: ["select", "createNew"],
797
- setup(__props, { emit: __emit }) {
798
- const props = __props;
799
- const emit = __emit;
800
- const credentialsStore = useCredentialsStore();
801
- const modalBus = ref(createEventBus());
802
- const selectedCredentialId = ref(props.initialValue);
803
- const availableCredentials = computed(() => {
804
- return credentialsStore.getCredentialsByType(PROVIDER_CREDENTIAL_TYPE_MAP[props.provider]);
805
- });
806
- function onCredentialSelect(credentialId) {
807
- selectedCredentialId.value = credentialId;
808
- }
809
- function onConfirm() {
810
- if (selectedCredentialId.value) {
811
- emit("select", props.provider, selectedCredentialId.value);
812
- modalBus.value.emit("close");
813
- }
814
- }
815
- function onCreateNew() {
816
- emit("createNew", props.provider);
817
- modalBus.value.emit("close");
818
- }
819
- function onCancel() {
820
- modalBus.value.emit("close");
821
- }
822
- return (_ctx, _cache) => {
823
- return openBlock(), createBlock(Modal_default, {
824
- name: "chatCredentialSelector",
825
- "event-bus": modalBus.value,
826
- width: "50%",
827
- center: true,
828
- "max-width": "460px",
829
- "min-height": "250px"
830
- }, {
831
- header: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.header) }, [createVNode(CredentialIcon_default, {
832
- "credential-type-name": unref(PROVIDER_CREDENTIAL_TYPE_MAP)[_ctx.provider],
833
- size: 24,
834
- class: normalizeClass(_ctx.$style.icon)
835
- }, null, 8, ["credential-type-name", "class"]), createBaseVNode("h2", { class: normalizeClass(_ctx.$style.title) }, "Select " + toDisplayString(unref(providerDisplayNames)[_ctx.provider]) + " Credential", 3)], 2)]),
836
- content: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.content) }, [createVNode(unref(N8nText_default), {
837
- size: "small",
838
- color: "text-base"
839
- }, {
840
- default: withCtx(() => _cache[0] || (_cache[0] = [createTextVNode(" Choose an existing credential or create a new one ")])),
841
- _: 1
842
- }), createVNode(unref(N8nSelect_default), {
843
- "model-value": selectedCredentialId.value,
844
- size: "large",
845
- placeholder: "Select credential...",
846
- "onUpdate:modelValue": onCredentialSelect
847
- }, {
848
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(availableCredentials.value, (credential) => {
849
- return openBlock(), createBlock(unref(N8nOption_default), {
850
- key: credential.id,
851
- value: credential.id,
852
- label: credential.name
853
- }, null, 8, ["value", "label"]);
854
- }), 128))]),
855
- _: 1
856
- }, 8, ["model-value"])], 2)]),
857
- footer: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.footer) }, [createVNode(unref(N8nButton_default), {
858
- type: "secondary",
859
- onClick: onCreateNew
860
- }, {
861
- default: withCtx(() => _cache[1] || (_cache[1] = [createTextVNode(" Create New ")])),
862
- _: 1
863
- }), createBaseVNode("div", { class: normalizeClass(_ctx.$style.footerRight) }, [createVNode(unref(N8nButton_default), {
864
- type: "tertiary",
865
- onClick: onCancel
866
- }, {
867
- default: withCtx(() => _cache[2] || (_cache[2] = [createTextVNode(" Cancel ")])),
868
- _: 1
869
- }), createVNode(unref(N8nButton_default), {
870
- type: "primary",
871
- disabled: !selectedCredentialId.value,
872
- onClick: onConfirm
873
- }, {
874
- default: withCtx(() => _cache[3] || (_cache[3] = [createTextVNode(" Select ")])),
875
- _: 1
876
- }, 8, ["disabled"])], 2)], 2)]),
877
- _: 1
878
- }, 8, ["event-bus"]);
879
- };
880
- }
881
- });
882
- var CredentialSelectorModal_vue_vue_type_style_index_0_lang_module_default = {
883
- title: "_title_1hes0_123",
884
- content: "_content_1hes0_129",
885
- footer: "_footer_1hes0_136",
886
- footerRight: "_footerRight_1hes0_143",
887
- header: "_header_1hes0_148",
888
- icon: "_icon_1hes0_154"
889
- };
890
- var CredentialSelectorModal_default = /* @__PURE__ */ __plugin_vue_export_helper_default(CredentialSelectorModal_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": CredentialSelectorModal_vue_vue_type_style_index_0_lang_module_default }]]);
891
723
  var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
892
724
  __name: "ChatView",
893
725
  setup(__props) {
@@ -895,7 +727,6 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
895
727
  const route = useRoute();
896
728
  const usersStore = useUsersStore();
897
729
  const chatStore = useChatStore();
898
- const credentialsStore = useCredentialsStore();
899
730
  const toast = useToast();
900
731
  const isMobileDevice$1 = useMediaQuery(MOBILE_MEDIA_QUERY);
901
732
  const documentTitle = useDocumentTitle();
@@ -903,16 +734,18 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
903
734
  const headerRef = useTemplateRef("headerRef");
904
735
  const inputRef = useTemplateRef("inputRef");
905
736
  const sessionId = computed(() => typeof route.params.id === "string" ? route.params.id : v4_default());
906
- const isNewSession = computed(() => sessionId.value !== route.params.id);
737
+ const isResponding = computed(() => chatStore.isResponding(sessionId.value));
738
+ const isNewSession$1 = computed(() => sessionId.value !== route.params.id);
907
739
  const scrollableRef = useTemplateRef("scrollable");
908
740
  const scrollContainerRef = computed(() => scrollableRef.value?.parentElement ?? null);
909
741
  const currentConversation = computed(() => sessionId.value ? chatStore.sessions.find((session) => session.id === sessionId.value) : void 0);
910
742
  const currentConversationTitle = computed(() => currentConversation.value?.title);
911
- const { arrivedState } = useScroll(scrollContainerRef, {
743
+ const readyToShowMessages = computed(() => chatStore.agentsReady);
744
+ const { arrivedState, measure } = useScroll(scrollContainerRef, {
912
745
  throttle: 100,
913
746
  offset: { bottom: 100 }
914
747
  });
915
- const selectedModel = useLocalStorage(LOCAL_STORAGE_CHAT_HUB_SELECTED_MODEL(usersStore.currentUserId ?? "anonymous"), null, {
748
+ const defaultModel = useLocalStorage(LOCAL_STORAGE_CHAT_HUB_SELECTED_MODEL(usersStore.currentUserId ?? "anonymous"), null, {
916
749
  writeDefaults: false,
917
750
  shallow: true,
918
751
  serializer: {
@@ -926,48 +759,47 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
926
759
  write: (value) => JSON.stringify(value)
927
760
  }
928
761
  });
929
- const selectedCredentials = useLocalStorage(LOCAL_STORAGE_CHAT_HUB_CREDENTIALS(usersStore.currentUserId ?? "anonymous"), {}, {
930
- writeDefaults: false,
931
- shallow: true,
932
- serializer: {
933
- read: (value) => {
934
- try {
935
- return credentialsMapSchema.parse(JSON.parse(value));
936
- } catch (error) {
937
- return {};
938
- }
939
- },
940
- write: (value) => JSON.stringify(value)
762
+ const modelFromQuery = computed(() => {
763
+ const agentId = route.query.agentId;
764
+ const workflowId = route.query.workflowId;
765
+ if (!isNewSession$1.value) return null;
766
+ if (typeof agentId === "string") return chatStore.getAgent({
767
+ provider: "custom-agent",
768
+ agentId
769
+ }) ?? null;
770
+ if (typeof workflowId === "string") return chatStore.getAgent({
771
+ provider: "n8n",
772
+ workflowId
773
+ }) ?? null;
774
+ return null;
775
+ });
776
+ const selectedModel = computed(() => {
777
+ if (!chatStore.agentsReady) return;
778
+ if (modelFromQuery.value) return modelFromQuery.value;
779
+ if (currentConversation.value?.provider) {
780
+ const model = unflattenModel(currentConversation.value);
781
+ return model ? chatStore.getAgent(model) : void 0;
941
782
  }
783
+ if (chatStore.streaming?.sessionId === sessionId.value) return chatStore.getAgent(chatStore.streaming.model);
784
+ return defaultModel.value ? chatStore.getAgent(defaultModel.value) : void 0;
942
785
  });
943
- const autoSelectCredentials = computed(() => Object.fromEntries(chatHubProviderSchema.options.map((provider) => {
944
- if (provider === "n8n") return [provider, null];
945
- return [provider, credentialsStore.getCredentialsByType(PROVIDER_CREDENTIAL_TYPE_MAP[provider]).toSorted((a, b) => +new Date(b.createdAt) - +new Date(a.createdAt))[0]?.id ?? null];
946
- })));
947
- const mergedCredentials = computed(() => ({
948
- ...autoSelectCredentials.value,
949
- ...selectedCredentials.value
950
- }));
786
+ const { credentialsByProvider, selectCredential } = useChatCredentials(usersStore.currentUserId ?? "anonymous");
951
787
  const chatMessages = computed(() => chatStore.getActiveMessages(sessionId.value));
952
- const isNewChat$1 = computed(() => route.name === CHAT_VIEW);
953
- const credentialsId = computed(() => selectedModel.value ? mergedCredentials.value[selectedModel.value.provider] : void 0);
954
- const modelRequiresCredentials = computed(() => {
955
- if (!selectedModel.value) return false;
956
- return selectedModel.value?.provider !== "n8n";
957
- });
958
- const isMissingSelectedCredential = computed(() => {
959
- if (!selectedModel.value) return false;
960
- if (!modelRequiresCredentials.value) return false;
961
- return !credentialsId.value;
788
+ const credentialsForSelectedProvider = computed(() => {
789
+ const provider = selectedModel.value?.model.provider;
790
+ if (!provider) return null;
791
+ if (provider === "custom-agent" || provider === "n8n") return {};
792
+ const credentialsId = credentialsByProvider.value?.[provider];
793
+ if (!credentialsId) return null;
794
+ return { [PROVIDER_CREDENTIAL_TYPE_MAP[provider]]: {
795
+ id: credentialsId,
796
+ name: ""
797
+ } };
962
798
  });
799
+ const isMissingSelectedCredential = computed(() => !credentialsForSelectedProvider.value);
963
800
  const editingMessageId = ref();
964
801
  const didSubmitInCurrentSession = ref(false);
965
- const initialization = ref({
966
- credentialsFetched: false,
967
- modelsFetched: false
968
- });
969
- const credentialSelectorProvider = ref(null);
970
- const isInitialized = computed(() => initialization.value.credentialsFetched && initialization.value.modelsFetched);
802
+ const editingAgentId = ref(void 0);
971
803
  function scrollToBottom(smooth) {
972
804
  scrollContainerRef.value?.scrollTo({
973
805
  top: scrollableRef.value?.scrollHeight,
@@ -977,24 +809,24 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
977
809
  function scrollToMessage(messageId) {
978
810
  scrollableRef.value?.querySelector(`[data-message-id="${messageId}"]`)?.scrollIntoView({ behavior: "smooth" });
979
811
  }
980
- watch(() => chatMessages.value[chatMessages.value.length - 1]?.id, (lastMessageId) => {
981
- if (!lastMessageId) return;
982
- if (lastMessageId !== chatStore.streamingMessageId) {
983
- scrollToBottom(chatStore.streamingMessageId !== void 0);
812
+ watch([readyToShowMessages, () => chatMessages.value[chatMessages.value.length - 1]?.id], ([ready, lastMessageId]) => {
813
+ if (!ready || !lastMessageId) return;
814
+ nextTick(measure);
815
+ if (chatStore.streaming?.sessionId === sessionId.value) {
816
+ scrollToMessage(chatStore.streaming.promptId);
984
817
  return;
985
818
  }
986
- const message$1 = chatStore.getActiveMessages(sessionId.value).find((message$2) => message$2.id === lastMessageId);
987
- if (message$1?.previousMessageId) scrollToMessage(message$1.previousMessageId);
819
+ scrollToBottom(false);
988
820
  }, {
989
821
  immediate: true,
990
822
  flush: "post"
991
823
  });
992
- watch(mergedCredentials, async (credentials) => {
993
- const models = await chatStore.fetchChatModels(credentials);
994
- if (selectedModel.value === null) selectedModel.value = findOneFromModelsResponse(models) ?? null;
995
- initialization.value.modelsFetched = true;
824
+ watch(() => chatStore.agents, (models) => {
825
+ if (!models || !!selectedModel.value || !isNewSession$1.value) return;
826
+ const model = findOneFromModelsResponse(models) ?? null;
827
+ if (model) handleSelectModel(model);
996
828
  }, { immediate: true });
997
- watch([sessionId, isNewSession], async ([id, isNew]) => {
829
+ watch([sessionId, isNewSession$1], async ([id, isNew]) => {
998
830
  didSubmitInCurrentSession.value = false;
999
831
  if (!isNew && !chatStore.getConversation(id)) try {
1000
832
  await chatStore.fetchMessages(id);
@@ -1002,26 +834,22 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1002
834
  toast.showError(error, "Error fetching a conversation");
1003
835
  await router.push({ name: CHAT_VIEW });
1004
836
  }
1005
- inputRef.value?.focus();
1006
837
  }, { immediate: true });
1007
- watch(currentConversationTitle, (title$2) => {
1008
- documentTitle.set(title$2 ?? "Chat");
838
+ watch([inputRef, sessionId], ([input$1]) => {
839
+ input$1?.focus();
840
+ }, { immediate: true });
841
+ watch(currentConversationTitle, (title$1) => {
842
+ documentTitle.set(title$1 ?? "Chat");
843
+ }, { immediate: true });
844
+ watch(credentialsByProvider, (credentials) => {
845
+ if (credentials) chatStore.fetchAgents(credentials);
1009
846
  }, { immediate: true });
1010
- onMounted(async () => {
1011
- await Promise.all([credentialsStore.fetchCredentialTypes(false), credentialsStore.fetchAllCredentials()]);
1012
- initialization.value.credentialsFetched = true;
1013
- });
1014
847
  function onSubmit(message$1) {
1015
- if (!message$1.trim() || chatStore.isResponding || !selectedModel.value || isMissingSelectedCredential.value) return;
848
+ if (!message$1.trim() || isResponding.value || !selectedModel.value || !credentialsForSelectedProvider.value) return;
1016
849
  didSubmitInCurrentSession.value = true;
1017
- const credentials = {};
1018
- if (selectedModel.value.provider !== "n8n" && credentialsId.value) Object.assign(credentials, { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1019
- id: credentialsId.value,
1020
- name: ""
1021
- } });
1022
- chatStore.sendMessage(sessionId.value, message$1, selectedModel.value, credentials);
850
+ chatStore.sendMessage(sessionId.value, message$1, selectedModel.value.model, credentialsForSelectedProvider.value);
1023
851
  inputRef.value?.setText("");
1024
- if (isNewSession.value) router.push({
852
+ if (isNewSession$1.value) router.push({
1025
853
  name: CHAT_CONVERSATION_VIEW,
1026
854
  params: { id: sessionId.value }
1027
855
  });
@@ -1036,72 +864,86 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1036
864
  editingMessageId.value = void 0;
1037
865
  }
1038
866
  function handleEditMessage(message$1) {
1039
- if (chatStore.isResponding || !["human", "ai"].includes(message$1.type) || !selectedModel.value || !credentialsId.value) return;
867
+ if (isResponding.value || !["human", "ai"].includes(message$1.type) || !selectedModel.value || !credentialsForSelectedProvider.value) return;
1040
868
  const messageToEdit = message$1.revisionOfMessageId ?? message$1.id;
1041
- chatStore.editMessage(sessionId.value, messageToEdit, message$1.content, selectedModel.value, selectedModel.value.provider === "n8n" ? {} : { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1042
- id: credentialsId.value,
1043
- name: ""
1044
- } });
869
+ chatStore.editMessage(sessionId.value, messageToEdit, message$1.content, selectedModel.value.model, credentialsForSelectedProvider.value);
1045
870
  editingMessageId.value = void 0;
1046
871
  }
1047
872
  function handleRegenerateMessage(message$1) {
1048
- if (chatStore.isResponding || message$1.type !== "ai" || !selectedModel.value || !credentialsId.value) return;
873
+ if (isResponding.value || message$1.type !== "ai" || !selectedModel.value || !credentialsForSelectedProvider.value) return;
1049
874
  const messageToRetry = message$1.retryOfMessageId ?? message$1.id;
1050
- chatStore.regenerateMessage(sessionId.value, messageToRetry, selectedModel.value, selectedModel.value.provider === "n8n" ? {} : { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1051
- id: credentialsId.value,
1052
- name: ""
1053
- } });
875
+ chatStore.regenerateMessage(sessionId.value, messageToRetry, selectedModel.value.model, credentialsForSelectedProvider.value);
1054
876
  }
1055
- function handleSelectModel(selection) {
1056
- selectedModel.value = selection;
1057
- }
1058
- function handleSelectCredentials(provider, id) {
1059
- selectedCredentials.value = {
1060
- ...selectedCredentials.value,
1061
- [provider]: id
1062
- };
877
+ async function handleSelectModel(selection) {
878
+ if (currentConversation.value) try {
879
+ await chatStore.updateSessionModel(sessionId.value, selection.model);
880
+ } catch (error) {
881
+ toast.showError(error, "Could not update selected model");
882
+ }
883
+ else defaultModel.value = selection.model;
1063
884
  }
1064
885
  function handleSwitchAlternative(messageId) {
1065
886
  chatStore.switchAlternative(sessionId.value, messageId);
1066
887
  }
1067
- function handleConfigureCredentials(provider) {
1068
- const credentialType = PROVIDER_CREDENTIAL_TYPE_MAP[provider];
1069
- if (credentialsStore.getCredentialsByType(credentialType).length === 0) {
1070
- uiStore.openNewCredential(credentialType);
1071
- return;
1072
- }
1073
- credentialSelectorProvider.value = provider;
1074
- uiStore.openModal("chatCredentialSelector");
1075
- }
888
+ function handleConfigureCredentials(_provider) {}
1076
889
  function handleConfigureModel() {
1077
890
  headerRef.value?.openModelSelector();
1078
891
  }
1079
- function handleCreateNewCredential(provider) {
1080
- uiStore.openNewCredential(PROVIDER_CREDENTIAL_TYPE_MAP[provider]);
892
+ async function handleEditAgent(agentId) {
893
+ try {
894
+ await chatStore.fetchCustomAgent(agentId);
895
+ editingAgentId.value = agentId;
896
+ uiStore.openModal("agentEditor");
897
+ } catch (error) {
898
+ toast.showError(error, "Failed to load agent");
899
+ }
900
+ }
901
+ function openNewAgentCreator() {
902
+ chatStore.currentEditingAgent = null;
903
+ editingAgentId.value = void 0;
904
+ uiStore.openModal("agentEditor");
905
+ }
906
+ function closeAgentEditor() {
907
+ editingAgentId.value = void 0;
908
+ }
909
+ function handleOpenWorkflow(workflowId) {
910
+ const routeData = router.resolve({
911
+ name: VIEWS.WORKFLOW,
912
+ params: { name: workflowId }
913
+ });
914
+ window.open(routeData.href, "_blank");
1081
915
  }
1082
916
  return (_ctx, _cache) => {
1083
917
  return openBlock(), createElementBlock("div", { class: normalizeClass([_ctx.$style.component, {
1084
- [_ctx.$style.isNewChat]: isNewChat$1.value,
918
+ [_ctx.$style.isNewSession]: isNewSession$1.value,
1085
919
  [_ctx.$style.isMobileDevice]: unref(isMobileDevice$1)
1086
920
  }]) }, [
1087
- isInitialized.value ? (openBlock(), createBlock(ChatConversationHeader_default, {
1088
- key: 0,
921
+ createVNode(ChatConversationHeader_default, {
1089
922
  ref_key: "headerRef",
1090
923
  ref: headerRef,
1091
- "selected-model": unref(selectedModel),
1092
- credentials: mergedCredentials.value,
924
+ "selected-model": selectedModel.value ?? null,
925
+ credentials: unref(credentialsByProvider),
926
+ "ready-to-show-model-selector": unref(chatStore).agentsReady,
1093
927
  onSelectModel: handleSelectModel,
1094
- onSetCredentials: handleConfigureCredentials
1095
- }, null, 8, ["selected-model", "credentials"])) : createCommentVNode("", true),
1096
- credentialSelectorProvider.value && credentialSelectorProvider.value !== "n8n" ? (openBlock(), createBlock(CredentialSelectorModal_default, {
1097
- key: credentialSelectorProvider.value,
1098
- provider: credentialSelectorProvider.value,
1099
- "initial-value": mergedCredentials.value[credentialSelectorProvider.value] ?? null,
1100
- onSelect: handleSelectCredentials,
1101
- onCreateNew: handleCreateNewCredential
1102
- }, null, 8, ["provider", "initial-value"])) : createCommentVNode("", true),
1103
- isInitialized.value ? (openBlock(), createBlock(unref(N8nScrollArea_default), {
1104
- key: 2,
928
+ onEditCustomAgent: handleEditAgent,
929
+ onCreateCustomAgent: openNewAgentCreator,
930
+ onSelectCredential: unref(selectCredential),
931
+ onOpenWorkflow: handleOpenWorkflow
932
+ }, null, 8, [
933
+ "selected-model",
934
+ "credentials",
935
+ "ready-to-show-model-selector",
936
+ "onSelectCredential"
937
+ ]),
938
+ unref(credentialsByProvider) ? (openBlock(), createBlock(AgentEditorModal_default, {
939
+ key: 0,
940
+ "agent-id": editingAgentId.value,
941
+ credentials: unref(credentialsByProvider),
942
+ onCreateCustomAgent: handleSelectModel,
943
+ onClose: closeAgentEditor
944
+ }, null, 8, ["agent-id", "credentials"])) : createCommentVNode("", true),
945
+ readyToShowMessages.value ? (openBlock(), createBlock(unref(N8nScrollArea_default), {
946
+ key: 1,
1105
947
  type: "scroll",
1106
948
  "enable-vertical-scroll": true,
1107
949
  "enable-horizontal-scroll": false,
@@ -1111,7 +953,7 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1111
953
  default: withCtx(() => [createBaseVNode("div", {
1112
954
  class: normalizeClass(_ctx.$style.scrollable),
1113
955
  ref: "scrollable"
1114
- }, [isNewChat$1.value ? (openBlock(), createBlock(ChatStarter_default, {
956
+ }, [isNewSession$1.value ? (openBlock(), createBlock(ChatStarter_default, {
1115
957
  key: 0,
1116
958
  class: normalizeClass(_ctx.$style.starter),
1117
959
  "is-mobile-device": unref(isMobileDevice$1)
@@ -1126,7 +968,7 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1126
968
  message: message$1,
1127
969
  compact: unref(isMobileDevice$1),
1128
970
  "is-editing": editingMessageId.value === message$1.id,
1129
- "is-streaming": unref(chatStore).streamingMessageId === message$1.id,
971
+ "is-streaming": message$1.status === "running",
1130
972
  "min-height": didSubmitInCurrentSession.value && message$1.type === "ai" && index === chatMessages.value.length - 1 && scrollContainerRef.value ? scrollContainerRef.value.offsetHeight - 30 - 200 : void 0,
1131
973
  onStartEdit: ($event) => handleStartEditMessage(message$1.id),
1132
974
  onCancelEdit: handleCancelEditMessage,
@@ -1141,21 +983,21 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1141
983
  "min-height",
1142
984
  "onStartEdit"
1143
985
  ]);
1144
- }), 128))], 2)), createBaseVNode("div", { class: normalizeClass(_ctx.$style.promptContainer) }, [!unref(arrivedState).bottom && !isNewChat$1.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
986
+ }), 128))], 2)), createBaseVNode("div", { class: normalizeClass(_ctx.$style.promptContainer) }, [!unref(arrivedState).bottom && !isNewSession$1.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
1145
987
  key: 0,
1146
988
  type: "secondary",
1147
989
  icon: "arrow-down",
1148
990
  class: normalizeClass(_ctx.$style.scrollToBottomButton),
1149
991
  title: "Scroll to bottom",
1150
992
  onClick: _cache[0] || (_cache[0] = ($event) => scrollToBottom(true))
1151
- }, null, 8, ["class"])) : createCommentVNode("", true), isInitialized.value ? (openBlock(), createBlock(ChatPrompt_default, {
1152
- key: 1,
993
+ }, null, 8, ["class"])) : createCommentVNode("", true), createVNode(ChatPrompt_default, {
1153
994
  ref_key: "inputRef",
1154
995
  ref: inputRef,
1155
996
  class: normalizeClass(_ctx.$style.prompt),
1156
- "is-responding": unref(chatStore).isResponding,
1157
- "selected-model": unref(selectedModel),
997
+ "is-responding": isResponding.value,
998
+ "selected-model": selectedModel.value ?? null,
1158
999
  "is-missing-credentials": isMissingSelectedCredential.value,
1000
+ "is-new-session": isNewSession$1.value,
1159
1001
  onSubmit,
1160
1002
  onStop,
1161
1003
  onSelectModel: handleConfigureModel,
@@ -1164,8 +1006,9 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1164
1006
  "class",
1165
1007
  "is-responding",
1166
1008
  "selected-model",
1167
- "is-missing-credentials"
1168
- ])) : createCommentVNode("", true)], 2)], 2)]),
1009
+ "is-missing-credentials",
1010
+ "is-new-session"
1011
+ ])], 2)], 2)]),
1169
1012
  _: 1
1170
1013
  }, 8, ["class"])) : createCommentVNode("", true)
1171
1014
  ], 2);
@@ -1173,17 +1016,17 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1173
1016
  }
1174
1017
  });
1175
1018
  var ChatView_vue_vue_type_style_index_0_lang_module_default = {
1176
- component: "_component_1wt8h_123",
1177
- isMobileDevice: "_isMobileDevice_1wt8h_134",
1178
- scrollArea: "_scrollArea_1wt8h_139",
1179
- scrollable: "_scrollable_1wt8h_144",
1180
- isNewChat: "_isNewChat_1wt8h_153",
1181
- header: "_header_1wt8h_157",
1182
- starter: "_starter_1wt8h_163",
1183
- messageList: "_messageList_1wt8h_168",
1184
- promptContainer: "_promptContainer_1wt8h_184",
1185
- prompt: "_prompt_1wt8h_184",
1186
- scrollToBottomButton: "_scrollToBottomButton_1wt8h_206"
1019
+ component: "_component_136cw_123",
1020
+ isMobileDevice: "_isMobileDevice_136cw_134",
1021
+ scrollArea: "_scrollArea_136cw_139",
1022
+ scrollable: "_scrollable_136cw_144",
1023
+ isNewSession: "_isNewSession_136cw_153",
1024
+ header: "_header_136cw_157",
1025
+ starter: "_starter_136cw_163",
1026
+ messageList: "_messageList_136cw_168",
1027
+ promptContainer: "_promptContainer_136cw_184",
1028
+ prompt: "_prompt_136cw_184",
1029
+ scrollToBottomButton: "_scrollToBottomButton_136cw_206"
1187
1030
  };
1188
1031
  var ChatView_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ChatView_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ChatView_vue_vue_type_style_index_0_lang_module_default }]]);
1189
1032
  export { ChatView_default as default };