@8wave/ai-elements 0.110.0-beta.4 → 0.111.0-beta.11
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.
- package/README.md +1 -0
- package/dist/_chunks/{Agent-Su_LDF9_.js → Agent-tE7ZJPxG.js} +80 -78
- package/dist/_chunks/Agent-tE7ZJPxG.js.map +1 -0
- package/dist/_chunks/{Document-DecVclEe.js → Document-Bmx6774B.js} +33 -21
- package/dist/_chunks/Document-Bmx6774B.js.map +1 -0
- package/dist/_chunks/Media-Cft7Pwrh.js +108 -0
- package/dist/_chunks/Media-Cft7Pwrh.js.map +1 -0
- package/dist/_chunks/{PkLazyImg-ClL4nr95.js → PkLazyImg-Dbj2dDXA.js} +2 -2
- package/dist/_chunks/{PkLazyImg-ClL4nr95.js.map → PkLazyImg-Dbj2dDXA.js.map} +1 -1
- package/dist/_chunks/{PkStreamingMarkdown-CwqsJnJJ.js → PkStreamingMarkdown-CNI8aV8t.js} +636 -427
- package/dist/_chunks/PkStreamingMarkdown-CNI8aV8t.js.map +1 -0
- package/dist/_chunks/{PkToolRequestGeolocation-CEVpl50q.js → PkToolRequestGeolocation-Bzy4IYSp.js} +4 -4
- package/dist/_chunks/PkToolRequestGeolocation-Bzy4IYSp.js.map +1 -0
- package/dist/_chunks/{PkToolRequestOAuthConnection-CncDU-Kl.js → PkToolRequestOAuthConnection-13CQH07t.js} +5 -5
- package/dist/_chunks/PkToolRequestOAuthConnection-13CQH07t.js.map +1 -0
- package/dist/_chunks/{PkToolShowArtifact-M6jlSmyJ.js → PkToolShowArtifact-CGbHDEie.js} +4 -4
- package/dist/_chunks/{PkToolShowArtifact-M6jlSmyJ.js.map → PkToolShowArtifact-CGbHDEie.js.map} +1 -1
- package/dist/_chunks/{PkToolShowCalendarEvent-C41JgOUA.js → PkToolShowCalendarEvent-DIFX_rUz.js} +3 -3
- package/dist/_chunks/{PkToolShowCalendarEvent-C41JgOUA.js.map → PkToolShowCalendarEvent-DIFX_rUz.js.map} +1 -1
- package/dist/_chunks/{PkToolShowComparison-DbbUD9pg.js → PkToolShowComparison-CWLFWT9h.js} +7 -7
- package/dist/_chunks/PkToolShowComparison-CWLFWT9h.js.map +1 -0
- package/dist/_chunks/{PkToolShowContactForm-D_dW59Dl.js → PkToolShowContactForm-CYxgatUA.js} +5 -5
- package/dist/_chunks/PkToolShowContactForm-CYxgatUA.js.map +1 -0
- package/dist/_chunks/{PkToolShowDiagram-Hy9qh68O.js → PkToolShowDiagram-Dx1Ba0PG.js} +4 -4
- package/dist/_chunks/PkToolShowDiagram-Dx1Ba0PG.js.map +1 -0
- package/dist/_chunks/{PkToolShowEmail-Dn3JHYIR.js → PkToolShowEmail-DnFFgzom.js} +3 -3
- package/dist/_chunks/{PkToolShowEmail-Dn3JHYIR.js.map → PkToolShowEmail-DnFFgzom.js.map} +1 -1
- package/dist/_chunks/{PkToolShowForm-DbJHMDbt.js → PkToolShowForm-B6x3Lp2i.js} +7 -8
- package/dist/_chunks/PkToolShowForm-B6x3Lp2i.js.map +1 -0
- package/dist/_chunks/{PkToolShowImageGallery-C1lzlO0y.js → PkToolShowImageGallery-D99N_Plf.js} +2 -2
- package/dist/_chunks/{PkToolShowImageGallery-C1lzlO0y.js.map → PkToolShowImageGallery-D99N_Plf.js.map} +1 -1
- package/dist/_chunks/{PkToolShowLocation-CKhPxKFA.js → PkToolShowLocation-AfnrtFVJ.js} +3 -3
- package/dist/_chunks/{PkToolShowLocation-CKhPxKFA.js.map → PkToolShowLocation-AfnrtFVJ.js.map} +1 -1
- package/dist/_chunks/{PkToolShowMessage-U9CCU7eG.js → PkToolShowMessage-DUo2c-im.js} +3 -3
- package/dist/_chunks/{PkToolShowMessage-U9CCU7eG.js.map → PkToolShowMessage-DUo2c-im.js.map} +1 -1
- package/dist/_chunks/{PkToolShowProductList-UeiRMLHu.js → PkToolShowProductList-BN6Qk1_y.js} +3 -3
- package/dist/_chunks/{PkToolShowProductList-UeiRMLHu.js.map → PkToolShowProductList-BN6Qk1_y.js.map} +1 -1
- package/dist/_chunks/{PkToolShowQrCode-CypLrfh5.js → PkToolShowQrCode-BLqeBecX.js} +3 -3
- package/dist/_chunks/{PkToolShowQrCode-CypLrfh5.js.map → PkToolShowQrCode-BLqeBecX.js.map} +1 -1
- package/dist/_chunks/{PkToolShowSources-B69JmwbZ.js → PkToolShowSources-DpZb5FUP.js} +5 -5
- package/dist/_chunks/PkToolShowSources-DpZb5FUP.js.map +1 -0
- package/dist/_chunks/{PkToolShowSuggestedReply-CKxSH0Y9.js → PkToolShowSuggestedReply-C10nNgBs.js} +3 -3
- package/dist/_chunks/{PkToolShowSuggestedReply-CKxSH0Y9.js.map → PkToolShowSuggestedReply-C10nNgBs.js.map} +1 -1
- package/dist/_chunks/{PkToolShowVideo-BgKxdBcC.js → PkToolShowVideo-S9b4QHUj.js} +2 -2
- package/dist/_chunks/{PkToolShowVideo-BgKxdBcC.js.map → PkToolShowVideo-S9b4QHUj.js.map} +1 -1
- package/dist/_chunks/{PkToolShowWeather-LPd3tC77.js → PkToolShowWeather-CqhG430w.js} +2 -2
- package/dist/_chunks/PkToolShowWeather-CqhG430w.js.map +1 -0
- package/dist/_chunks/{PkToolShowWebPages-ep_erFF0.js → PkToolShowWebPages-txAZi_iG.js} +3 -3
- package/dist/_chunks/{PkToolShowWebPages-ep_erFF0.js.map → PkToolShowWebPages-txAZi_iG.js.map} +1 -1
- package/dist/_chunks/PkUrl-BPbjZJ1A.js.map +1 -1
- package/dist/_chunks/{VvCheckboxGroup.es-Bdu2gFLN.js → VvCheckboxGroup.es-CTrF3pue.js} +2 -2
- package/dist/_chunks/{VvCheckboxGroup.es-Bdu2gFLN.js.map → VvCheckboxGroup.es-CTrF3pue.js.map} +1 -1
- package/dist/_chunks/{VvCombobox.es-C0wpJIr_.js → VvCombobox.es-BWiXmQ_S.js} +10 -10
- package/dist/_chunks/{VvCombobox.es-C0wpJIr_.js.map → VvCombobox.es-BWiXmQ_S.js.map} +1 -1
- package/dist/_chunks/{VvInputText.es-Zgtw2YNw.js → VvInputText.es-Bo9I6g8H.js} +6 -6
- package/dist/_chunks/{VvInputText.es-Zgtw2YNw.js.map → VvInputText.es-Bo9I6g8H.js.map} +1 -1
- package/dist/_chunks/{VvRadioGroup.es-DZLL19SC.js → VvRadioGroup.es-9ooHCuik.js} +2 -2
- package/dist/_chunks/{VvRadioGroup.es-DZLL19SC.js.map → VvRadioGroup.es-9ooHCuik.js.map} +1 -1
- package/dist/_chunks/{VvSelect.es-ovnZRHG5.js → VvSelect.es-DG0VuWtP.js} +2 -2
- package/dist/_chunks/{VvSelect.es-ovnZRHG5.js.map → VvSelect.es-DG0VuWtP.js.map} +1 -1
- package/dist/_chunks/{VvTextarea.es-DbP5Lt2T.js → VvTextarea.es-Dg3pxdZy.js} +6 -6
- package/dist/_chunks/{VvTextarea.es-DbP5Lt2T.js.map → VvTextarea.es-Dg3pxdZy.js.map} +1 -1
- package/dist/_chunks/{browser-NgY6LXg-.js → browser-B0Xnbqi7.js} +726 -751
- package/dist/_chunks/browser-B0Xnbqi7.js.map +1 -0
- package/dist/_chunks/{dist-n5iFNYf-.js → dist-QdjZA6MJ.js} +143 -133
- package/dist/_chunks/{dist-n5iFNYf-.js.map → dist-QdjZA6MJ.js.map} +1 -1
- package/dist/_chunks/{index.es-dtdl3VFG.js → index.es-0YpCa4c5.js} +6 -6
- package/dist/_chunks/{index.es-dtdl3VFG.js.map → index.es-0YpCa4c5.js.map} +1 -1
- package/dist/_chunks/{index.es-BJnUA_36.js → index.es-CHkJ2TMJ.js} +10 -10
- package/dist/_chunks/{index.es-BJnUA_36.js.map → index.es-CHkJ2TMJ.js.map} +1 -1
- package/dist/_chunks/text-DbSEK8si.js.map +1 -1
- package/dist/ai-elements.es.js +3077 -3134
- package/dist/ai-elements.es.js.map +1 -1
- package/dist-vue/PkChatbot.js +1 -1
- package/dist-vue/PkChatbotEmptyState.js +1 -1
- package/dist-vue/PkChatbotError.js +1 -1
- package/dist-vue/PkChatbotFeedbackForm.js +1 -1
- package/dist-vue/PkChatbotFilePreview.js +1 -1
- package/dist-vue/PkChatbotInput.js +1 -1
- package/dist-vue/PkChatbotMessages.js +1 -1
- package/dist-vue/PkChatbotStepPayload.js +1 -1
- package/dist-vue/PkChatbotStepToolDetail.js +1 -1
- package/dist-vue/PkChatbotSteps.js +1 -1
- package/dist-vue/PkChatbotViewChat.js +1 -1
- package/dist-vue/PkChatbotViewConversations.js +1 -1
- package/dist-vue/PkChatbotViewFiles.js +1 -1
- package/dist-vue/PkChatbotViewProfile.js +1 -1
- package/dist-vue/_chunks/{Agent-C8BsTAxk.js → Agent-De2gFNjR.js} +165 -176
- package/dist-vue/_chunks/Agent-De2gFNjR.js.map +1 -0
- package/dist-vue/_chunks/{Document-CaUfI_SZ.js → Document-8umjeTVS.js} +84 -72
- package/dist-vue/_chunks/Document-8umjeTVS.js.map +1 -0
- package/dist-vue/_chunks/Media-_HfFLHGD.js.map +1 -1
- package/dist-vue/_chunks/{PkChatbot-o7k7d-fj.js → PkChatbot-CMajc7tE.js} +61 -61
- package/dist-vue/_chunks/PkChatbot-CMajc7tE.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotEmptyState-BvaeBxhx.js → PkChatbotEmptyState-BtzBYOHJ.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotEmptyState-BvaeBxhx.js.map → PkChatbotEmptyState-BtzBYOHJ.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotError-CBP2mf-n.js → PkChatbotError-gvDpRcEz.js} +21 -19
- package/dist-vue/_chunks/PkChatbotError-gvDpRcEz.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotFeedbackForm-DO1QIgmo.js → PkChatbotFeedbackForm-CxLOdwkm.js} +2 -2
- package/dist-vue/_chunks/PkChatbotFeedbackForm-CxLOdwkm.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotFilePreview-DO1wZPPj.js → PkChatbotFilePreview-CwiVQDF2.js} +3 -3
- package/dist-vue/_chunks/PkChatbotFilePreview-CwiVQDF2.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotInput-D8x52cVm.js → PkChatbotInput-MSpF6SB6.js} +140 -125
- package/dist-vue/_chunks/PkChatbotInput-MSpF6SB6.js.map +1 -0
- package/dist-vue/_chunks/PkChatbotMessages-Bz5q8EtT.js +776 -0
- package/dist-vue/_chunks/PkChatbotMessages-Bz5q8EtT.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotStepPayload-BH6piqOi.js → PkChatbotStepPayload-XW4gT9AZ.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotStepPayload-BH6piqOi.js.map → PkChatbotStepPayload-XW4gT9AZ.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotStepToolDetail-BJ7xUvgi.js → PkChatbotStepToolDetail-C4-K6Glw.js} +3 -3
- package/dist-vue/_chunks/{PkChatbotStepToolDetail-BJ7xUvgi.js.map → PkChatbotStepToolDetail-C4-K6Glw.js.map} +1 -1
- package/dist-vue/_chunks/PkChatbotSteps-CrqjWpv0.js +190 -0
- package/dist-vue/_chunks/PkChatbotSteps-CrqjWpv0.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotViewChat-CNH_glPI.js → PkChatbotViewChat-DXu5ncaU.js} +10 -10
- package/dist-vue/_chunks/{PkChatbotViewChat-CNH_glPI.js.map → PkChatbotViewChat-DXu5ncaU.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewConversations-BENvHLZt.js → PkChatbotViewConversations-3LaZPFyw.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotViewConversations-BENvHLZt.js.map → PkChatbotViewConversations-3LaZPFyw.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewFiles-qmLESi1V.js → PkChatbotViewFiles-CTqnbsCj.js} +3 -3
- package/dist-vue/_chunks/{PkChatbotViewFiles-qmLESi1V.js.map → PkChatbotViewFiles-CTqnbsCj.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewProfile-DzfZnitQ.js → PkChatbotViewProfile-B-Mp1jGQ.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotViewProfile-DzfZnitQ.js.map → PkChatbotViewProfile-B-Mp1jGQ.js.map} +1 -1
- package/dist-vue/_chunks/PkRelativeTime--1cIphlA.js.map +1 -1
- package/dist-vue/_chunks/{PkStreamingMarkdown-D8_LwZMR.js → PkStreamingMarkdown-D0IOaETI.js} +432 -419
- package/dist-vue/_chunks/PkStreamingMarkdown-D0IOaETI.js.map +1 -0
- package/dist-vue/_chunks/{PkSvgViewer-DPpE9fiz.js → PkSvgViewer-D-0M5bqg.js} +2 -2
- package/dist-vue/_chunks/PkSvgViewer-D-0M5bqg.js.map +1 -0
- package/dist-vue/_chunks/{PkToolRequestGeolocation-D1ZPmWiB.js → PkToolRequestGeolocation-Q3N3jlO8.js} +3 -3
- package/dist-vue/_chunks/PkToolRequestGeolocation-Q3N3jlO8.js.map +1 -0
- package/dist-vue/_chunks/{PkToolRequestOAuthConnection-CoJyKEE6.js → PkToolRequestOAuthConnection-lYoTJIF_.js} +4 -4
- package/dist-vue/_chunks/PkToolRequestOAuthConnection-lYoTJIF_.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowArtifact-CEXdfOGG.js → PkToolShowArtifact-DHdJuzDi.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowArtifact-CEXdfOGG.js.map → PkToolShowArtifact-DHdJuzDi.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowComparison-DMSjIpCR.js → PkToolShowComparison-BLn4pkno.js} +5 -5
- package/dist-vue/_chunks/PkToolShowComparison-BLn4pkno.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowContactForm-DHmzAIVF.js → PkToolShowContactForm-DceSyuX8.js} +3 -3
- package/dist-vue/_chunks/PkToolShowContactForm-DceSyuX8.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowDiagram-DuDp5EHd.js → PkToolShowDiagram-pwc0wpNo.js} +4 -4
- package/dist-vue/_chunks/PkToolShowDiagram-pwc0wpNo.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowEmail-CavhsPvi.js → PkToolShowEmail-DF__nKpR.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowEmail-CavhsPvi.js.map → PkToolShowEmail-DF__nKpR.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowForm-CO5A_j9L.js → PkToolShowForm-Dx10jOXm.js} +7 -7
- package/dist-vue/_chunks/PkToolShowForm-Dx10jOXm.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowImageGallery-V9U3LJfF.js → PkToolShowImageGallery-DudQzBx4.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowImageGallery-V9U3LJfF.js.map → PkToolShowImageGallery-DudQzBx4.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowMessage-DQojxDiV.js → PkToolShowMessage-Ck6VP-gw.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowMessage-DQojxDiV.js.map → PkToolShowMessage-Ck6VP-gw.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowProductList-Cn0yewM3.js → PkToolShowProductList-zfM8cx-l.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowProductList-Cn0yewM3.js.map → PkToolShowProductList-zfM8cx-l.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowSources-BvWOzVkQ.js → PkToolShowSources-Dlaz2Y77.js} +5 -5
- package/dist-vue/_chunks/PkToolShowSources-Dlaz2Y77.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowSuggestedReply-DQFOVonE.js → PkToolShowSuggestedReply-DWLkUh2L.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowSuggestedReply-DQFOVonE.js.map → PkToolShowSuggestedReply-DWLkUh2L.js.map} +1 -1
- package/dist-vue/_chunks/PkToolShowWeather-Bzqalzh8.js.map +1 -1
- package/dist-vue/_chunks/{PkToolShowWebPages-Bzkkn9GV.js → PkToolShowWebPages-CosBYLrE.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowWebPages-Bzkkn9GV.js.map → PkToolShowWebPages-CosBYLrE.js.map} +1 -1
- package/dist-vue/_chunks/{PkUrl-xUBKVJCv.js → PkUrl-B5CNTQj9.js} +2 -2
- package/dist-vue/_chunks/PkUrl-B5CNTQj9.js.map +1 -0
- package/dist-vue/_chunks/{createChatbotApiClient-CJ_5_3IT.js → createChatbotApiClient-MkaPbGWB.js} +6 -3
- package/dist-vue/_chunks/createChatbotApiClient-MkaPbGWB.js.map +1 -0
- package/dist-vue/_chunks/{useChatbotStore-CiRAuq7v.js → useChatbotStore-BzfqjiYz.js} +6 -3
- package/dist-vue/_chunks/useChatbotStore-BzfqjiYz.js.map +1 -0
- package/dist-vue/_chunks/useDialogConfirm-KWz0ohCQ.js.map +1 -1
- package/dist-vue/_chunks/{utils-Coqik0XI.js → utils-C1666_6C.js} +58 -43
- package/dist-vue/_chunks/utils-C1666_6C.js.map +1 -0
- package/dist-vue/api.js +1 -1
- package/dist-vue/composables.js +3 -3
- package/dist-vue/index.js +3867 -3488
- package/dist-vue/index.js.map +1 -1
- package/dist-vue/locales.js +36 -8
- package/dist-vue/packages/components/src/chat/PkAgentSettingsPanel.d.ts +20 -3
- package/dist-vue/packages/components/src/chat/PkChatButton.d.ts +3 -2
- package/dist-vue/packages/components/src/chat/PkLanguageModel.d.ts +26 -2
- package/dist-vue/packages/components/src/chat/PkLanguageModelCombobox.d.ts +53 -1
- package/dist-vue/packages/components/src/chat/PkModelOption.d.ts +19 -0
- package/dist-vue/packages/components/src/chat/PkReasoningSettings.d.ts +6 -0
- package/dist-vue/packages/components/src/chat/PkStreamingMarkdown.d.ts +6 -0
- package/dist-vue/packages/components/src/chat/PkStreamingMarkdownAutoscroll.d.ts +1 -0
- package/dist-vue/packages/components/src/chat/constants.d.ts +5 -18
- package/dist-vue/packages/components/src/chat/index.d.ts +3 -1
- package/dist-vue/packages/components/src/chat/modelCatalog.d.ts +46 -0
- package/dist-vue/packages/components/src/chat/utils.d.ts +16 -0
- package/dist-vue/packages/components/src/table/PkTableSortable.d.ts +13 -1
- package/dist-vue/packages/composable/src/chatbot/useChatbotStore.d.ts +18 -0
- package/dist-vue/packages/composable/src/useChatbotError.d.ts +2 -0
- package/dist-vue/packages/models/src/schema/Agent.d.ts +70 -10
- package/dist-vue/packages/models/src/schema/Chat.d.ts +31 -0
- package/dist-vue/packages/models/src/schema/ModelProvider.d.ts +316 -0
- package/dist-vue/packages/models/src/schema/Organization.d.ts +142 -2
- package/dist-vue/packages/models/src/schema/ReasoningChat.d.ts +20 -0
- package/dist-vue/packages/models/src/schema/SubAgent.d.ts +20 -0
- package/dist-vue/packages/models/src/schema/UserOverview.d.ts +41 -0
- package/dist-vue/packages/models/src/schema/constants.d.ts +56 -91
- package/dist-vue/packages/models/src/schema/index.d.ts +1 -0
- package/dist-vue/style.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/Agent-Su_LDF9_.js.map +0 -1
- package/dist/_chunks/Document-DecVclEe.js.map +0 -1
- package/dist/_chunks/Media-C6SOQfJZ.js +0 -122
- package/dist/_chunks/Media-C6SOQfJZ.js.map +0 -1
- package/dist/_chunks/PkStreamingMarkdown-CwqsJnJJ.js.map +0 -1
- package/dist/_chunks/PkToolRequestGeolocation-CEVpl50q.js.map +0 -1
- package/dist/_chunks/PkToolRequestOAuthConnection-CncDU-Kl.js.map +0 -1
- package/dist/_chunks/PkToolShowComparison-DbbUD9pg.js.map +0 -1
- package/dist/_chunks/PkToolShowContactForm-D_dW59Dl.js.map +0 -1
- package/dist/_chunks/PkToolShowDiagram-Hy9qh68O.js.map +0 -1
- package/dist/_chunks/PkToolShowForm-DbJHMDbt.js.map +0 -1
- package/dist/_chunks/PkToolShowSources-B69JmwbZ.js.map +0 -1
- package/dist/_chunks/PkToolShowWeather-LPd3tC77.js.map +0 -1
- package/dist/_chunks/browser-NgY6LXg-.js.map +0 -1
- package/dist/_chunks/utils-YJ0ZOLDG.js +0 -185
- package/dist/_chunks/utils-YJ0ZOLDG.js.map +0 -1
- package/dist-vue/_chunks/Agent-C8BsTAxk.js.map +0 -1
- package/dist-vue/_chunks/Document-CaUfI_SZ.js.map +0 -1
- package/dist-vue/_chunks/PkChatbot-o7k7d-fj.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotError-CBP2mf-n.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotFeedbackForm-DO1QIgmo.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotFilePreview-DO1wZPPj.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotInput-D8x52cVm.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotMessages-BFlU046I.js +0 -771
- package/dist-vue/_chunks/PkChatbotMessages-BFlU046I.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotSteps-DtV1beDc.js +0 -180
- package/dist-vue/_chunks/PkChatbotSteps-DtV1beDc.js.map +0 -1
- package/dist-vue/_chunks/PkStreamingMarkdown-D8_LwZMR.js.map +0 -1
- package/dist-vue/_chunks/PkSvgViewer-DPpE9fiz.js.map +0 -1
- package/dist-vue/_chunks/PkToolRequestGeolocation-D1ZPmWiB.js.map +0 -1
- package/dist-vue/_chunks/PkToolRequestOAuthConnection-CoJyKEE6.js.map +0 -1
- package/dist-vue/_chunks/PkToolShowComparison-DMSjIpCR.js.map +0 -1
- package/dist-vue/_chunks/PkToolShowContactForm-DHmzAIVF.js.map +0 -1
- package/dist-vue/_chunks/PkToolShowDiagram-DuDp5EHd.js.map +0 -1
- package/dist-vue/_chunks/PkToolShowForm-CO5A_j9L.js.map +0 -1
- package/dist-vue/_chunks/PkToolShowSources-BvWOzVkQ.js.map +0 -1
- package/dist-vue/_chunks/PkUrl-xUBKVJCv.js.map +0 -1
- package/dist-vue/_chunks/createChatbotApiClient-CJ_5_3IT.js.map +0 -1
- package/dist-vue/_chunks/useChatbotStore-CiRAuq7v.js.map +0 -1
- package/dist-vue/_chunks/utils-Coqik0XI.js.map +0 -1
package/README.md
CHANGED
|
@@ -332,6 +332,7 @@ createApp(App).use(createPinia()).use(i18n).mount('#app')
|
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
> **Note:** `@volverjs/ui-vue` must also be registered via `app.use(VolverPlugin, { ... })` with the icon collections and any component defaults you need.
|
|
335
|
+
> The collections are not optional: pass both `normal` (from `@volverjs/ui-vue/icons`) and the workspace `icons` package, which carries the two icons these components name directly: `loading-loop`, the spinner of every waiting state, and `wifi-off`, the one the offline screen shows precisely when nothing can be fetched. An icon whose collection is missing renders nothing at all, without an error, because Iconify reads a bare `loading-loop` as the icon `loop` of a set called `loading`.
|
|
335
336
|
|
|
336
337
|
### Usage
|
|
337
338
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { C as e, S as t, a as n, d as r, f as i, g as a, h as o, i as s, l as c, n as l, o as u, t as d, v as f, x as p, y as m } from "./zod-BTUfq5ZI.js";
|
|
2
|
-
import { a as
|
|
2
|
+
import { a as h, i as ee, n as te, r as g, t as ne } from "./Media-Cft7Pwrh.js";
|
|
3
3
|
//#region ../../packages/models/src/schema/DeviceContext.ts
|
|
4
4
|
var _ = a({
|
|
5
5
|
dateTime: m().optional(),
|
|
@@ -61,10 +61,10 @@ var _ = a({
|
|
|
61
61
|
"auto",
|
|
62
62
|
"detailed",
|
|
63
63
|
"concise"
|
|
64
|
-
],
|
|
64
|
+
], re = a({
|
|
65
65
|
reasoningEffort: l(S).optional(),
|
|
66
66
|
reasoningSummary: l(T).optional()
|
|
67
|
-
}),
|
|
67
|
+
}), ie = a({
|
|
68
68
|
type: l([
|
|
69
69
|
"adaptive",
|
|
70
70
|
"enabled",
|
|
@@ -73,15 +73,16 @@ var _ = a({
|
|
|
73
73
|
effort: l(C).optional(),
|
|
74
74
|
display: l(["summarized", "omitted"]).optional(),
|
|
75
75
|
budgetTokens: o().int().positive().optional()
|
|
76
|
-
}),
|
|
76
|
+
}), ae = a({
|
|
77
77
|
thinkingLevel: l(w).optional(),
|
|
78
78
|
thinkingBudget: o().int().optional(),
|
|
79
79
|
includeThoughts: u().optional()
|
|
80
|
-
}),
|
|
80
|
+
}), oe = a({ type: l(["enabled", "disabled"]).optional() }), E = [
|
|
81
81
|
"alibaba",
|
|
82
82
|
"meta",
|
|
83
83
|
"moonshotai",
|
|
84
84
|
"spacexai",
|
|
85
|
+
"xiaomi",
|
|
85
86
|
"zai"
|
|
86
87
|
], D = [
|
|
87
88
|
"none",
|
|
@@ -94,18 +95,19 @@ var _ = a({
|
|
|
94
95
|
function k(e, t) {
|
|
95
96
|
return e && t.includes(e) ? e : void 0;
|
|
96
97
|
}
|
|
97
|
-
var
|
|
98
|
-
openai:
|
|
99
|
-
anthropic:
|
|
100
|
-
google:
|
|
101
|
-
deepseek:
|
|
98
|
+
var se = a({
|
|
99
|
+
openai: re.optional(),
|
|
100
|
+
anthropic: ie.optional(),
|
|
101
|
+
google: ae.optional(),
|
|
102
|
+
deepseek: oe.optional(),
|
|
102
103
|
alibaba: O.optional(),
|
|
103
104
|
meta: O.optional(),
|
|
104
105
|
moonshotai: O.optional(),
|
|
105
106
|
spacexai: O.optional(),
|
|
107
|
+
xiaomi: O.optional(),
|
|
106
108
|
zai: O.optional()
|
|
107
109
|
});
|
|
108
|
-
function
|
|
110
|
+
function ce(e) {
|
|
109
111
|
if (!e || typeof e != "object") return e;
|
|
110
112
|
let t = e, n = [
|
|
111
113
|
"openai",
|
|
@@ -139,31 +141,31 @@ function le(e) {
|
|
|
139
141
|
}
|
|
140
142
|
return e;
|
|
141
143
|
}
|
|
142
|
-
var A = g(p(),
|
|
144
|
+
var A = g(p(), se, ce).optional(), j = /* @__PURE__ */ function(e) {
|
|
143
145
|
return e.Geocode = "geocode", e.GetWeather = "getWeather", e.ReadDocumentFile = "readDocumentFile", e.RequestConfirm = "requestConfirm", e.RequestGeolocation = "requestGeolocation", e.RetrieveRevisedAnswers = "retrieveRevisedAnswers", e.SearchInKnowledgeBase = "searchInKnowledgeBase", e.SearchInUserFiles = "searchInUserFiles", e.UserMemory = "userMemory", e.RunWorker = "runWorker", e.FetchTeamsChannelHistory = "fetchTeamsChannelHistory", e.ShowArtifact = "showArtifact", e.ShowCalendarEvent = "showCalendarEvent", e.ShowComparison = "showComparison", e.ShowContactForm = "showContactForm", e.ShowDiagram = "showDiagram", e.ShowEmail = "showEmail", e.ShowImageGallery = "showImageGallery", e.ShowLocation = "showLocation", e.ShowMessage = "showMessage", e.ShowForm = "showForm", e.ShowProductList = "showProductList", e.ShowQrCode = "showQrCode", e.ShowSources = "showSources", e.ShowSuggestedReply = "showSuggestedReply", e.ShowVideo = "showVideo", e.ShowWeather = "showWeather", e.ShowWebPages = "showWebPages", e.ShowMultipleChoice = "showMultipleChoice", e;
|
|
144
146
|
}({});
|
|
145
147
|
j.RequestConfirm, j.ShowArtifact, j.ShowWeather, j.ShowLocation, j.ShowComparison, j.ShowProductList, j.ShowWebPages, j.ShowImageGallery, j.ShowVideo, j.ShowSources, j.ShowSuggestedReply, j.ShowCalendarEvent, j.ShowEmail, j.ShowMessage, j.ShowForm;
|
|
146
|
-
var
|
|
148
|
+
var le = /* @__PURE__ */ new Set([
|
|
147
149
|
j.RequestConfirm,
|
|
148
150
|
j.RequestGeolocation,
|
|
149
151
|
j.ShowForm,
|
|
150
152
|
j.ShowMultipleChoice,
|
|
151
153
|
"requestOAuthConnection"
|
|
152
154
|
]);
|
|
153
|
-
function
|
|
154
|
-
return
|
|
155
|
+
function ue(e) {
|
|
156
|
+
return le.has(e);
|
|
155
157
|
}
|
|
156
158
|
j.RequestConfirm, j.RequestGeolocation, j.ShowArtifact, j.ShowCalendarEvent, j.ShowContactForm, j.ShowComparison, j.ShowDiagram, j.ShowEmail, j.ShowForm, j.ShowImageGallery, j.ShowLocation, j.ShowMessage, j.ShowMultipleChoice, j.ShowProductList, j.ShowQrCode, j.ShowSources, j.ShowSuggestedReply, j.ShowVideo, j.ShowWeather, j.ShowWebPages;
|
|
157
|
-
var
|
|
158
|
-
function
|
|
159
|
-
return typeof e == "string" && (e.startsWith("Voice turn note") || e.startsWith(
|
|
159
|
+
var de = "Shown on the caller's screen";
|
|
160
|
+
function fe(e) {
|
|
161
|
+
return typeof e == "string" && (e.startsWith("Voice turn note") || e.startsWith(de));
|
|
160
162
|
}
|
|
161
163
|
var M = a({
|
|
162
164
|
maxSteps: o().int().min(1).max(10).optional().default(5),
|
|
163
165
|
maxOptionsPerStep: o().int().min(2).max(10).optional().default(5)
|
|
164
166
|
}), N = /* @__PURE__ */ function(e) {
|
|
165
167
|
return e.Perplexity = "perplexity", e.Parallel = "parallel", e.Native = "native", e;
|
|
166
|
-
}({}),
|
|
168
|
+
}({}), pe = a({
|
|
167
169
|
maxResults: o().int().min(1).max(20).optional(),
|
|
168
170
|
maxTokens: o().int().positive().max(1e6).optional(),
|
|
169
171
|
maxTokensPerPage: o().int().positive().optional(),
|
|
@@ -176,7 +178,7 @@ var M = a({
|
|
|
176
178
|
"month",
|
|
177
179
|
"year"
|
|
178
180
|
]).optional()
|
|
179
|
-
}),
|
|
181
|
+
}), me = a({
|
|
180
182
|
mode: l(["one-shot", "agentic"]).optional(),
|
|
181
183
|
maxResults: o().int().min(1).max(20).optional(),
|
|
182
184
|
sourcePolicy: a({
|
|
@@ -189,7 +191,7 @@ var M = a({
|
|
|
189
191
|
maxCharsTotal: o().int().positive().optional()
|
|
190
192
|
}).optional(),
|
|
191
193
|
fetchPolicy: a({ maxAgeSeconds: o().int().positive().optional() }).optional()
|
|
192
|
-
}),
|
|
194
|
+
}), he = a({
|
|
193
195
|
openai: a({}).optional(),
|
|
194
196
|
anthropic: a({
|
|
195
197
|
maxUses: o().int().positive().optional(),
|
|
@@ -207,10 +209,10 @@ var M = a({
|
|
|
207
209
|
}), P = a({
|
|
208
210
|
enabled: u().default(!1),
|
|
209
211
|
provider: l(N).optional().default(N.Native),
|
|
210
|
-
perplexity:
|
|
211
|
-
parallel:
|
|
212
|
-
native:
|
|
213
|
-
}), F = a({ useAllUserKb: u().default(!1) }), I = a({ useAllUserFiles: u().default(!1) }), L = a({ tools: n(m()).default([]) }),
|
|
212
|
+
perplexity: pe.optional(),
|
|
213
|
+
parallel: me.optional(),
|
|
214
|
+
native: he.optional()
|
|
215
|
+
}), F = a({ useAllUserKb: u().default(!1) }), I = a({ useAllUserFiles: u().default(!1) }), L = a({ tools: n(m()).default([]) }), R = a({
|
|
214
216
|
disabled: n(l(j)).default([
|
|
215
217
|
j.UserMemory,
|
|
216
218
|
j.SearchInUserFiles,
|
|
@@ -222,7 +224,7 @@ var M = a({
|
|
|
222
224
|
userMemory: F.optional().default(() => F.parse({})),
|
|
223
225
|
userFiles: I.optional().default(() => I.parse({})),
|
|
224
226
|
approval: L.optional().default(() => L.parse({}))
|
|
225
|
-
}),
|
|
227
|
+
}), z = a({
|
|
226
228
|
freshness: a({
|
|
227
229
|
enabled: u().default(!1),
|
|
228
230
|
scale: o().int().min(86400).max(31536e3).default(7776e3),
|
|
@@ -234,7 +236,7 @@ var M = a({
|
|
|
234
236
|
diversity: o().min(0).max(1).default(.3),
|
|
235
237
|
candidatesLimit: o().int().min(20).max(100).default(50)
|
|
236
238
|
}).prefault({})
|
|
237
|
-
}).prefault({}),
|
|
239
|
+
}).prefault({}), ge = a({
|
|
238
240
|
prompt: m().optional(),
|
|
239
241
|
temperature: o().min(0).max(2).optional().default(.6),
|
|
240
242
|
maxOutputTokens: o().positive().optional(),
|
|
@@ -244,13 +246,13 @@ var M = a({
|
|
|
244
246
|
limit: o().positive().max(100).optional().default(10),
|
|
245
247
|
maxStepCount: o().int().min(1).max(40).optional().default(10),
|
|
246
248
|
reasoning: A,
|
|
247
|
-
ranking:
|
|
248
|
-
}),
|
|
249
|
+
ranking: z.optional().default(() => z.parse({}))
|
|
250
|
+
}), B = g(p(), f(m(), m()), (e) => typeof e == "string" ? { it: e } : e), _e = "https://cdn.jsdelivr.net/npm/@8wave/ai-elements/dist/ai-elements.es.js", V = /* @__PURE__ */ function(e) {
|
|
249
251
|
return e.InlineModule = "inline-module", e.ScriptSrc = "script-src", e.DynamicImport = "dynamic-import", e;
|
|
250
|
-
}({}),
|
|
252
|
+
}({}), H = /* @__PURE__ */ function(e) {
|
|
251
253
|
return e.Frontoffice = "frontoffice", e.App = "app", e.Widget = "widget", e;
|
|
252
|
-
}({}),
|
|
253
|
-
media:
|
|
254
|
+
}({}), U = Object.values(H), W = a({
|
|
255
|
+
media: te.optional(),
|
|
254
256
|
logo: m().optional(),
|
|
255
257
|
theme: l([
|
|
256
258
|
"light",
|
|
@@ -264,26 +266,26 @@ var M = a({
|
|
|
264
266
|
"black"
|
|
265
267
|
]).optional().default("auto"),
|
|
266
268
|
useColorsForAgentHeader: u().optional().default(!1),
|
|
267
|
-
initialMessage:
|
|
268
|
-
greeting: n(
|
|
269
|
-
messagePlaceholder:
|
|
270
|
-
dismissableNotice:
|
|
271
|
-
footerMessage:
|
|
272
|
-
privacyPolicyNotice:
|
|
269
|
+
initialMessage: B.optional(),
|
|
270
|
+
greeting: n(B).min(1).max(10).optional(),
|
|
271
|
+
messagePlaceholder: B.optional(),
|
|
272
|
+
dismissableNotice: B.optional(),
|
|
273
|
+
footerMessage: B.optional(),
|
|
274
|
+
privacyPolicyNotice: B.optional(),
|
|
273
275
|
interactiveLogin: u().optional().default(!0),
|
|
274
276
|
welcomePopup: u().optional().default(!1),
|
|
275
277
|
floatingButtonPosition: l(["left", "right"]).optional().default("right"),
|
|
276
278
|
maxMessageLength: o().int().positive().optional(),
|
|
277
|
-
widgetUrl: t().default(
|
|
279
|
+
widgetUrl: t().default(_e),
|
|
278
280
|
loadDelay: o().int().min(0).max(3e4).optional().default(0),
|
|
279
|
-
loaderStrategy: l(
|
|
281
|
+
loaderStrategy: l(V).optional().default(V.InlineModule),
|
|
280
282
|
customCss: m().optional(),
|
|
281
283
|
smoothStream: u().optional().default(!1),
|
|
282
284
|
showExtendedSteps: u().optional().default(!1)
|
|
283
|
-
}),
|
|
285
|
+
}), G = a({
|
|
284
286
|
enabled: u().default(!1),
|
|
285
287
|
maxFileSizeBytes: o().int().positive().max(104857600).optional().default(20971520),
|
|
286
|
-
allowedMimeTypes: n(m().regex(
|
|
288
|
+
allowedMimeTypes: n(m().regex(ne)).optional().default([
|
|
287
289
|
"image/jpeg",
|
|
288
290
|
"image/png",
|
|
289
291
|
"image/gif",
|
|
@@ -295,11 +297,11 @@ var M = a({
|
|
|
295
297
|
]),
|
|
296
298
|
maxFilesPerMessage: o().int().positive().max(10).optional().default(5),
|
|
297
299
|
maxFilesPerChat: o().int().positive().max(50).optional().default(20)
|
|
298
|
-
}),
|
|
300
|
+
}), K = a({
|
|
299
301
|
zeroDataRetention: u().default(!0),
|
|
300
302
|
disallowPromptTraining: u().default(!0),
|
|
301
303
|
providerTimeoutMs: o().int().min(1e3).max(789e3).optional()
|
|
302
|
-
}),
|
|
304
|
+
}), q = a({ enabled: u().default(!1) }), J = a({
|
|
303
305
|
enabled: u().default(!1),
|
|
304
306
|
voiceId: m().optional(),
|
|
305
307
|
language: m().min(2).max(5).default("it"),
|
|
@@ -318,37 +320,37 @@ var M = a({
|
|
|
318
320
|
providerAgentId: m().optional(),
|
|
319
321
|
providerSecretId: m().optional(),
|
|
320
322
|
providerApiKeyId: m().optional()
|
|
321
|
-
}),
|
|
323
|
+
}), ve = a({ enabled: u() });
|
|
322
324
|
a({
|
|
323
325
|
chatId: m().min(1).optional(),
|
|
324
326
|
deviceContext: _.optional(),
|
|
325
327
|
externalContext: f(m(), p()).optional()
|
|
326
328
|
});
|
|
327
|
-
var
|
|
329
|
+
var ye = a({
|
|
328
330
|
sessionId: m(),
|
|
329
331
|
signedUrl: m(),
|
|
330
332
|
providerAgentId: m(),
|
|
331
333
|
chatId: m(),
|
|
332
334
|
maxSessionSeconds: o().int()
|
|
333
|
-
}),
|
|
335
|
+
}), be = a({
|
|
334
336
|
voiceId: m(),
|
|
335
337
|
name: m(),
|
|
336
338
|
category: m().optional(),
|
|
337
339
|
previewUrl: m().optional(),
|
|
338
340
|
labels: f(m(), m()).optional()
|
|
339
341
|
});
|
|
340
|
-
n(
|
|
341
|
-
var
|
|
342
|
-
model:
|
|
343
|
-
interface:
|
|
344
|
-
tools:
|
|
345
|
-
fileUpload:
|
|
346
|
-
gatewayOptions:
|
|
347
|
-
channels: n(l(
|
|
348
|
-
externalContextSchema:
|
|
349
|
-
openaiApi:
|
|
350
|
-
voice:
|
|
351
|
-
}),
|
|
342
|
+
n(be);
|
|
343
|
+
var Y = a({
|
|
344
|
+
model: ge,
|
|
345
|
+
interface: W,
|
|
346
|
+
tools: R.optional().default(() => R.parse({})),
|
|
347
|
+
fileUpload: G.optional().default(() => G.parse({})),
|
|
348
|
+
gatewayOptions: K.optional().default(() => K.parse({})),
|
|
349
|
+
channels: n(l(H)).optional().default(() => [...U]),
|
|
350
|
+
externalContextSchema: ee.optional(),
|
|
351
|
+
openaiApi: q.optional().default(() => q.parse({})),
|
|
352
|
+
voice: J.optional().default(() => J.parse({}))
|
|
353
|
+
}), X = a({
|
|
352
354
|
rateLimits: a({
|
|
353
355
|
minuteRateLimit: o().int().min(0).optional(),
|
|
354
356
|
hourRateLimit: o().int().min(0).optional(),
|
|
@@ -361,12 +363,12 @@ a({
|
|
|
361
363
|
id: m().optional(),
|
|
362
364
|
name: m(),
|
|
363
365
|
prompt: m().optional(),
|
|
364
|
-
model: m().
|
|
366
|
+
model: m().optional(),
|
|
365
367
|
fallbackModels: n(m()).default([]),
|
|
366
368
|
status: l(v).default(v.Draft),
|
|
367
369
|
visibility: l(y).default(y.Organization),
|
|
368
|
-
settings:
|
|
369
|
-
security:
|
|
370
|
+
settings: Y,
|
|
371
|
+
security: X.nullish(),
|
|
370
372
|
type: l(b).default(b.Chat),
|
|
371
373
|
organizationId: m()
|
|
372
374
|
}), r(() => a({
|
|
@@ -377,8 +379,8 @@ a({
|
|
|
377
379
|
fallbackModels: n(m()).nullable().default([]),
|
|
378
380
|
status: l(v).default(v.Draft),
|
|
379
381
|
visibility: l(y).default(y.Organization),
|
|
380
|
-
settings:
|
|
381
|
-
security:
|
|
382
|
+
settings: Y,
|
|
383
|
+
security: X.nullable(),
|
|
382
384
|
type: l(b).default(b.Chat),
|
|
383
385
|
organizationId: m(),
|
|
384
386
|
createdAt: d(),
|
|
@@ -391,45 +393,45 @@ a({
|
|
|
391
393
|
outOfBudget: u().optional().default(!1),
|
|
392
394
|
outOfBudgetReason: m().optional().default("")
|
|
393
395
|
}));
|
|
394
|
-
var
|
|
396
|
+
var Z = a({
|
|
395
397
|
id: m(),
|
|
396
398
|
name: m(),
|
|
397
399
|
status: l(v),
|
|
398
400
|
visibility: l(y),
|
|
399
401
|
organizationId: m(),
|
|
400
|
-
interface:
|
|
402
|
+
interface: W,
|
|
401
403
|
createdAt: d(),
|
|
402
404
|
updatedAt: d(),
|
|
403
405
|
capabilities: a({
|
|
404
|
-
fileUpload:
|
|
405
|
-
voice:
|
|
406
|
+
fileUpload: G,
|
|
407
|
+
voice: ve
|
|
406
408
|
}),
|
|
407
|
-
channels: n(l(
|
|
408
|
-
}),
|
|
409
|
+
channels: n(l(H)).default(() => [...U])
|
|
410
|
+
}), xe = W.pick({
|
|
409
411
|
logo: !0,
|
|
410
412
|
mainColor: !0,
|
|
411
413
|
textColor: !0,
|
|
412
414
|
theme: !0,
|
|
413
415
|
floatingButtonPosition: !0,
|
|
414
416
|
customCss: !0
|
|
415
|
-
}),
|
|
417
|
+
}), Se = Z.pick({
|
|
416
418
|
id: !0,
|
|
417
419
|
name: !0,
|
|
418
420
|
organizationId: !0
|
|
419
|
-
}).extend({ interface:
|
|
421
|
+
}).extend({ interface: xe }), Q = a({
|
|
420
422
|
emailPassword: u(),
|
|
421
423
|
google: u(),
|
|
422
424
|
microsoft: u()
|
|
423
|
-
}),
|
|
425
|
+
}), Ce = a({
|
|
424
426
|
requiresAuth: i(!1),
|
|
425
|
-
agent:
|
|
427
|
+
agent: Z,
|
|
426
428
|
branding: s()
|
|
427
429
|
}), $ = a({
|
|
428
430
|
requiresAuth: i(!0),
|
|
429
431
|
agent: s(),
|
|
430
|
-
branding:
|
|
432
|
+
branding: Se
|
|
431
433
|
});
|
|
432
|
-
c("requiresAuth", [
|
|
434
|
+
c("requiresAuth", [Ce, $]), c("requiresAuth", [Ce.extend({ authMethods: Q }), $.extend({ authMethods: Q })]), a({
|
|
433
435
|
id: e(),
|
|
434
436
|
agentIds: n(e())
|
|
435
437
|
}), a({
|
|
@@ -450,6 +452,6 @@ c("requiresAuth", [Q, $]), c("requiresAuth", [Q.extend({ authMethods: Z }), $.ex
|
|
|
450
452
|
...h.ids()
|
|
451
453
|
});
|
|
452
454
|
//#endregion
|
|
453
|
-
export { x as a,
|
|
455
|
+
export { x as a, ye as c, _ as d, A as i, ue as l, K as n, v as o, z as r, P as s, j as t, fe as u };
|
|
454
456
|
|
|
455
|
-
//# sourceMappingURL=Agent-
|
|
457
|
+
//# sourceMappingURL=Agent-tE7ZJPxG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Agent-tE7ZJPxG.js","names":[],"sources":["../../../../packages/models/src/schema/DeviceContext.ts","../../../../packages/models/src/schema/Agent.ts"],"sourcesContent":["import * as z from 'zod'\n\n/**\n * What the client knows about the device the conversation is happening on.\n *\n * Its own module rather than part of `Chat`: both the chat request and the\n * voice session request carry it, and `Chat` already imports `Agent`, so\n * keeping it there would make the two import each other.\n */\nexport const DeviceContextSchema = z.object({\n dateTime: z.string().optional(),\n timezone: z.string().optional(),\n language: z.string().optional(),\n languages: z.array(z.string()).optional(),\n url: z.string().optional(),\n pathname: z.string().optional(),\n pageTitle: z.string().optional(),\n referrer: z.string().optional(),\n screenWidth: z.number().optional(),\n screenHeight: z.number().optional(),\n viewportWidth: z.number().optional(),\n viewportHeight: z.number().optional(),\n devicePixelRatio: z.number().optional(),\n maxTouchPoints: z.number().optional(),\n hardwareConcurrency: z.number().optional(),\n deviceMemory: z.number().optional(),\n platform: z.string().optional(),\n connectionType: z.string().optional(),\n connectionEffectiveType: z.string().optional(),\n connectionDownlink: z.number().optional(),\n connectionRtt: z.number().optional(),\n saveData: z.boolean().optional(),\n darkMode: z.boolean().optional(),\n reducedMotion: z.boolean().optional(),\n historyLength: z.number().optional(),\n geolocationLatitude: z.number().optional(),\n geolocationLongitude: z.number().optional(),\n geolocationAccuracy: z.number().optional(),\n geolocationCity: z.string().optional(),\n})\n\nexport type DeviceContext = z.infer<typeof DeviceContextSchema>\n","import * as z from 'zod'\nimport { zodQs, jsonSchemaField, decodeOnly } from '../utils'\nimport { DeviceContextSchema } from './DeviceContext'\nimport { MediaSchema, MIME_TYPE_REGEX } from './Media'\n\nexport enum AgentStatus {\n Draft = 'draft',\n Active = 'active',\n Inactive = 'inactive',\n}\n\nexport enum AgentVisibility {\n Public = 'public',\n Private = 'private',\n Organization = 'organization',\n}\n\nexport enum AgentType {\n Chat = 'chat',\n Reasoning = 'reasoning',\n}\n\nexport enum AgentSearchMode {\n Semantic = 'semantic',\n Balanced = 'balanced',\n Keyword = 'keyword',\n}\n\n/**\n * Provider-specific reasoning configurations.\n *\n * Four providers have a reasoning API of their own to model:\n * - OpenAI (GPT-5, o-series): `reasoningEffort` + `reasoningSummary`\n * - Anthropic (Claude 4.6+): adaptive thinking with `effort` levels, or legacy `budgetTokens`\n * - Google (Gemini 3/3.1): `thinkingLevel`; Gemini 2.5: `thinkingBudget`\n * - DeepSeek: on/off thinking toggle\n *\n * Alibaba, Meta, Moonshot AI, xAI, Xiaomi and z.ai are one effort level and\n * share {@link GenericReasoningSchema}. Mistral has no configuration at all:\n * of its catalog models only Medium 3.5 reasons, on a `none`/`high` scale, so\n * it runs on the provider's own default.\n *\n * Only the matching provider's config is used at runtime (based on model prefix).\n * Admins can pre-configure multiple providers for easy model switching.\n */\n\n/**\n * Levels each provider accepts, exported so the agent form builds its fields\n * from the same list the request is validated against. They were written twice,\n * once here and once in the template, and the two drifted: `max` reached the\n * OpenAI API with the 5.6 family and was added to the form for Anthropic only,\n * so an OpenAI agent could not be configured for a level the provider had.\n */\nexport const OPENAI_REASONING_EFFORTS = [\n 'none',\n 'low',\n 'medium',\n 'high',\n 'xhigh',\n 'max',\n] as const\nexport const ANTHROPIC_THINKING_EFFORTS = [\n 'low',\n 'medium',\n 'high',\n 'xhigh',\n 'max',\n] as const\nexport const GOOGLE_THINKING_LEVELS = [\n 'minimal',\n 'low',\n 'medium',\n 'high',\n] as const\nexport const OPENAI_REASONING_SUMMARIES = [\n 'auto',\n 'detailed',\n 'concise',\n] as const\n\nexport const OpenAIReasoningSchema = z.object({\n reasoningEffort: z.enum(OPENAI_REASONING_EFFORTS).optional(),\n reasoningSummary: z.enum(OPENAI_REASONING_SUMMARIES).optional(),\n})\nexport type OpenAIReasoning = z.infer<typeof OpenAIReasoningSchema>\n\nexport const AnthropicReasoningSchema = z.object({\n type: z.enum(['adaptive', 'enabled', 'disabled']).optional(),\n effort: z.enum(ANTHROPIC_THINKING_EFFORTS).optional(),\n display: z.enum(['summarized', 'omitted']).optional(),\n budgetTokens: z.number().int().positive().optional(),\n})\nexport type AnthropicReasoning = z.infer<typeof AnthropicReasoningSchema>\n\nexport const GoogleReasoningSchema = z.object({\n thinkingLevel: z.enum(GOOGLE_THINKING_LEVELS).optional(),\n thinkingBudget: z.number().int().optional(),\n includeThoughts: z.boolean().optional(),\n})\nexport type GoogleReasoning = z.infer<typeof GoogleReasoningSchema>\n\nexport const DeepSeekReasoningSchema = z.object({\n type: z.enum(['enabled', 'disabled']).optional(),\n})\nexport type DeepSeekReasoning = z.infer<typeof DeepSeekReasoningSchema>\n\n/**\n * Providers whose whole reasoning configuration is one effort level.\n *\n * They expose no reasoning API of their own to model: the standardized AI SDK\n * effort is the only knob, and the gateway maps it onto whatever each model\n * accepts. One shape covers them all, so a new brand costs a line here instead\n * of a schema, a runtime branch and a form.\n *\n * Verified against the gateway on 2026-08-25: every catalog model of these\n * families advertises the `reasoning` parameter, a family that only offers\n * `high`/`xhigh` clamps a lower level instead of rejecting the request, and\n * `none` does bring reasoning tokens to zero. Xiaomi joined on 2026-09-22 on\n * the listing alone: its models advertise `reasoning` and an effort scale that\n * includes `low`, but the clamp and `none` behaviour were not measured on it.\n */\nexport const GENERIC_REASONING_PROVIDERS = [\n 'alibaba',\n 'meta',\n 'moonshotai',\n 'spacexai',\n 'xiaomi',\n 'zai',\n] as const\n\nexport type GenericReasoningProvider =\n (typeof GENERIC_REASONING_PROVIDERS)[number]\n\nexport function isGenericReasoningProvider(\n provider: string,\n): provider is GenericReasoningProvider {\n return (GENERIC_REASONING_PROVIDERS as readonly string[]).includes(provider)\n}\n\n/**\n * The standardized AI SDK effort union minus `provider-default`, which is what\n * an absent configuration already means: offering it as a value would give the\n * form two ways to say the same thing.\n */\nexport const GENERIC_REASONING_EFFORTS = [\n 'none',\n 'minimal',\n 'low',\n 'medium',\n 'high',\n 'xhigh',\n] as const\n\nexport const GenericReasoningSchema = z.object({\n reasoningEffort: z.enum(GENERIC_REASONING_EFFORTS).optional(),\n})\nexport type GenericReasoning = z.infer<typeof GenericReasoningSchema>\n\n/**\n * A legacy value on the target provider's own scale, or `undefined` when that\n * scale cannot express it.\n *\n * The legacy format stored one OpenAI level for every provider and the\n * migration copied it over verbatim, so a value the target enum does not have\n * (`xhigh` on Google, `minimal` on OpenAI) failed the codec's own output\n * validation: reading such an agent threw instead of migrating it. Leaving the\n * provider out instead puts it on the platform default, which is a\n * configuration every provider accepts.\n */\nfunction legacyLevel<T extends string>(\n value: string | undefined,\n accepted: readonly T[],\n): T | undefined {\n return value && (accepted as readonly string[]).includes(value)\n ? (value as T)\n : undefined\n}\n\n/**\n * Migrates legacy format `{ effort: 'high', reasoningSummary: 'auto' }` to the new\n * per-provider format. Applied via preprocess so old DB data auto-migrates on parse.\n */\nconst AgentReasoningObjectSchema = z.object({\n openai: OpenAIReasoningSchema.optional(),\n anthropic: AnthropicReasoningSchema.optional(),\n google: GoogleReasoningSchema.optional(),\n deepseek: DeepSeekReasoningSchema.optional(),\n alibaba: GenericReasoningSchema.optional(),\n meta: GenericReasoningSchema.optional(),\n moonshotai: GenericReasoningSchema.optional(),\n spacexai: GenericReasoningSchema.optional(),\n xiaomi: GenericReasoningSchema.optional(),\n zai: GenericReasoningSchema.optional(),\n})\n\ntype AgentReasoningInput = z.input<typeof AgentReasoningObjectSchema>\n\nfunction migrateReasoningConfig(val: unknown): AgentReasoningInput {\n if (!val || typeof val !== 'object') {\n // Output validity is enforced by the codec's output schema at runtime.\n return val as AgentReasoningInput\n }\n const obj = val as Record<string, unknown>\n // Detect legacy format: has `effort` key with old enum values\n const isAlreadyMigrated = [\n 'openai',\n 'anthropic',\n 'google',\n 'deepseek',\n ...GENERIC_REASONING_PROVIDERS,\n ].some((provider) => provider in obj)\n if ('effort' in obj && !isAlreadyMigrated) {\n const effort = obj.effort as string | undefined\n const reasoningSummary = obj.reasoningSummary as string | undefined\n const migrated: Record<string, unknown> = {}\n\n // `off` is the legacy spelling of \"do not think\", `none` is the same\n // instruction in the vocabulary the providers ended up using: both must\n // reach the branch that disables, or an agent that asked for silence\n // starts reasoning again on every provider that has a default.\n const thinks = !!effort && effort !== 'off' && effort !== 'none'\n if (thinks) {\n const openaiEffort = legacyLevel(effort, OPENAI_REASONING_EFFORTS)\n const summary = legacyLevel(\n reasoningSummary,\n OPENAI_REASONING_SUMMARIES,\n )\n if (openaiEffort || summary) {\n migrated.openai = {\n ...(openaiEffort && { reasoningEffort: openaiEffort }),\n ...(summary && { reasoningSummary: summary }),\n }\n }\n const anthropicEffort = legacyLevel(\n effort,\n ANTHROPIC_THINKING_EFFORTS,\n )\n if (anthropicEffort) {\n migrated.anthropic = {\n type: 'adaptive' as const,\n effort: anthropicEffort,\n }\n }\n // Google's scale stops at `high`: `xhigh` and `max` are OpenAI\n // levels, so they land on the highest level it does have.\n const googleLevel = legacyLevel(\n effort === 'xhigh' || effort === 'max' ? 'high' : effort,\n GOOGLE_THINKING_LEVELS,\n )\n if (googleLevel) {\n migrated.google = { thinkingLevel: googleLevel }\n }\n migrated.deepseek = { type: 'enabled' as const }\n // Same for the single-level providers, whose highest level is\n // `xhigh`.\n const genericEffort = legacyLevel(\n effort === 'max' ? 'xhigh' : effort,\n GENERIC_REASONING_EFFORTS,\n )\n if (genericEffort) {\n for (const provider of GENERIC_REASONING_PROVIDERS) {\n migrated[provider] = { reasoningEffort: genericEffort }\n }\n }\n } else {\n // 'off' must stay off on every provider, not just the two that had\n // an explicit disable. Leaving anthropic and google absent made the\n // runtime send no directive at all (`getReasoningOptions` returns\n // nothing without a provider config), so switching such an agent to\n // Claude or Gemini silently turned thinking back on: the config said\n // off, the model reasoned, and the first token paid for it.\n migrated.openai = { reasoningEffort: 'none' }\n migrated.anthropic = { type: 'disabled' as const }\n // Gemini 3+ cannot disable thinking (the budget is clamped to >= 1),\n // so the lowest level available is what 'off' can mean there.\n migrated.google = { thinkingLevel: 'minimal' as const }\n migrated.deepseek = { type: 'disabled' as const }\n for (const provider of GENERIC_REASONING_PROVIDERS) {\n migrated[provider] = { reasoningEffort: 'none' as const }\n }\n }\n return migrated as AgentReasoningInput\n }\n return val as AgentReasoningInput\n}\n\n// Codec instead of z.preprocess: the legacy-format migration only runs on\n// decode, while encode (used by response serialization) is the identity.\n// `.optional()` wraps the codec (not the inner object) so a missing\n// `reasoning` key still parses, matching the old z.preprocess semantics.\nexport const AgentReasoningSchema = decodeOnly(\n z.unknown(),\n AgentReasoningObjectSchema,\n migrateReasoningConfig,\n).optional()\n\nexport type AgentReasoning = z.infer<typeof AgentReasoningSchema>\n\n/** Provider an agent model belongs to, from its `provider/model` id. */\nexport function modelProvider(model: string): string {\n const [provider = ''] = model.split('/')\n return provider\n}\n\n/**\n * Explicit reasoning configuration for an agent that has none for the provider\n * it is running on.\n *\n * Without it the request carries no reasoning directive at all and the provider\n * applies its own default, which on the current families means thinking is ON:\n * measured on the turn-latency bench, **each reasoning token costs about 8ms of\n * time to first token** (~125 tok/s of decode), so a default nobody chose is\n * worth seconds per turn. The lowest tier that still reasons is the deliberate\n * choice: tool selection and the presentation contract both degrade when a chat\n * agent stops deliberating entirely, and that is a worse trade than the latency\n * it would buy.\n *\n * The single-level providers are here for the same reason, and it is measured\n * on them too: on 2026-08-25 a one-token `hi` sent to `spacexai/grok-4.6` with no\n * directive came back having spent 37 reasoning tokens, and 0 with an explicit\n * `none`. They accept the level (out-of-range clamps, it does not 400), so\n * there is no reason to leave them on a default nobody chose.\n *\n * DeepSeek is deliberately absent: its thinking is model-intrinsic and its\n * configuration here is a bare on/off toggle, with no level to ask for, so a\n * blanket directive could contradict the model itself. It is now the only\n * provider left on the provider's own default, and it stays there until someone\n * measures that family.\n */\nexport const DEFAULT_REASONING_BY_PROVIDER: NonNullable<AgentReasoning> = {\n openai: { reasoningEffort: 'low' },\n anthropic: { type: 'adaptive', effort: 'low' },\n google: { thinkingLevel: 'low' },\n alibaba: { reasoningEffort: 'low' },\n meta: { reasoningEffort: 'low' },\n moonshotai: { reasoningEffort: 'low' },\n spacexai: { reasoningEffort: 'low' },\n xiaomi: { reasoningEffort: 'low' },\n zai: { reasoningEffort: 'low' },\n}\n\n/**\n * Whether a per-provider block actually configures something.\n *\n * A block whose every value is `undefined` says nothing, and it is not a\n * hypothetical: clearing a combobox in the agent settings writes\n * `{ thinkingLevel: undefined }`, which becomes `{}` once the row round-trips\n * through jsonb. Treating that as \"configured\" would leave exactly the agents\n * this default exists for on the provider's own default.\n */\nfunction configuresSomething(config: unknown): boolean {\n return (\n !!config &&\n typeof config === 'object' &&\n Object.values(config).some((value) => value !== undefined)\n )\n}\n\n/**\n * What will actually reach `provider`: the agent's own block when it configures\n * anything, otherwise the platform default.\n *\n * Shared on purpose. The runtime reaches it through\n * {@link resolveEffectiveReasoning}, and the agent form calls it directly to\n * display the value: a form that showed an empty level while the turn sends\n * `low` would describe a behaviour that does not exist.\n *\n * Returns the stored block **by identity** when there is one, so a caller can\n * tell a configured value from a default with `===`.\n */\nexport function effectiveProviderReasoning<\n P extends keyof NonNullable<AgentReasoning>,\n>(\n provider: P,\n reasoning: AgentReasoning | null | undefined,\n): NonNullable<AgentReasoning>[P] {\n const configured = reasoning?.[provider]\n if (configuresSomething(configured)) {\n return configured\n }\n return DEFAULT_REASONING_BY_PROVIDER[provider]\n}\n\n/**\n * The reasoning configuration that will actually reach the provider: the\n * agent's own when it has one for this model's provider, otherwise the explicit\n * default above.\n *\n * Cross-provider is the case that motivated it: an agent configured for OpenAI\n * and switched to Gemini has `reasoning.openai` set and `reasoning.google`\n * empty, so before this it silently inherited Gemini's default.\n */\nexport function resolveEffectiveReasoning(\n model: string,\n reasoning: AgentReasoning | null | undefined,\n): AgentReasoning {\n const provider = modelProvider(model) as keyof NonNullable<AgentReasoning>\n const effective = effectiveProviderReasoning(provider, reasoning)\n // Nothing to add: either the agent configured this provider, or there is no\n // default for it (DeepSeek).\n if (!effective || effective === reasoning?.[provider]) {\n return reasoning ?? undefined\n }\n // Merged, not replaced: the other providers' configurations stay intact for\n // the day the agent is switched back to one of them.\n return { ...reasoning, [provider]: effective }\n}\n\n/**\n * Whether reasoning is effectively enabled for the given model.\n *\n * Mirrors the runtime semantics of `getReasoningOptions` (backend): only the\n * provider config matching the model prefix is considered, and an agent with no\n * config for that provider gets {@link DEFAULT_REASONING_BY_PROVIDER}, exactly\n * as the turn does. Note: for Anthropic with `display: 'omitted'` reasoning runs\n * but no reasoning parts are streamed to the client.\n */\nexport function isReasoningEnabled(\n model: string,\n agentReasoning: AgentReasoning | null | undefined,\n): boolean {\n const reasoning = resolveEffectiveReasoning(model, agentReasoning)\n if (!reasoning) {\n return false\n }\n\n const provider = modelProvider(model)\n\n if (provider === 'openai') {\n const config = reasoning.openai\n return Boolean(\n config?.reasoningEffort && config.reasoningEffort !== 'none',\n )\n }\n\n if (provider === 'anthropic') {\n const config = reasoning.anthropic\n return Boolean(config && config.type !== 'disabled')\n }\n\n if (provider === 'google') {\n const config = reasoning.google\n if (!config || config.thinkingBudget === 0) {\n return false\n }\n return Boolean(\n (config.thinkingLevel && config.thinkingLevel !== 'minimal') ||\n config.thinkingBudget ||\n config.includeThoughts,\n )\n }\n\n if (provider === 'deepseek') {\n return reasoning.deepseek?.type === 'enabled'\n }\n\n if (isGenericReasoningProvider(provider)) {\n const effort = reasoning[provider]?.reasoningEffort\n return Boolean(effort && effort !== 'none')\n }\n\n return false\n}\n\nexport enum AgentBuiltInTool {\n Geocode = 'geocode',\n GetWeather = 'getWeather',\n ReadDocumentFile = 'readDocumentFile',\n RequestConfirm = 'requestConfirm',\n RequestGeolocation = 'requestGeolocation',\n RetrieveRevisedAnswers = 'retrieveRevisedAnswers',\n SearchInKnowledgeBase = 'searchInKnowledgeBase',\n SearchInUserFiles = 'searchInUserFiles',\n UserMemory = 'userMemory',\n RunWorker = 'runWorker',\n FetchTeamsChannelHistory = 'fetchTeamsChannelHistory',\n ShowArtifact = 'showArtifact',\n ShowCalendarEvent = 'showCalendarEvent',\n ShowComparison = 'showComparison',\n ShowContactForm = 'showContactForm',\n ShowDiagram = 'showDiagram',\n ShowEmail = 'showEmail',\n ShowImageGallery = 'showImageGallery',\n ShowLocation = 'showLocation',\n ShowMessage = 'showMessage',\n ShowForm = 'showForm',\n ShowProductList = 'showProductList',\n ShowQrCode = 'showQrCode',\n ShowSources = 'showSources',\n ShowSuggestedReply = 'showSuggestedReply',\n ShowVideo = 'showVideo',\n ShowWeather = 'showWeather',\n ShowWebPages = 'showWebPages',\n // deprecated tools - to be removed in favor of more specific tools above\n ShowMultipleChoice = 'showMultipleChoice',\n}\n\n/**\n * Prefixes the runtime tool set uses for the tools an agent configures. They are\n * part of a contract shared by three places: the services that build the tool\n * set, the approval list that matches names against it, and the backoffice UI\n * that writes those names. A mismatch is silent (a name matching no tool simply\n * never gates anything), so the prefixes live here and nowhere else.\n */\nexport const MCP_TOOL_PREFIX = 'mcp-'\nexport const API_TOOL_PREFIX = 'api-'\nexport const SUBAGENT_TOOL_PREFIX = 'subagent-'\n\n/** Tool-set key of an MCP tool, from the name the server advertises. */\nexport const mcpToolKey = (toolName: string) => `${MCP_TOOL_PREFIX}${toolName}`\n\n/** Tool-set key of an agent API tool, from its configured name. */\nexport const apiToolKey = (toolName: string) => `${API_TOOL_PREFIX}${toolName}`\n\n/** Tool-set key of a sub-agent, from its camel-cased name. */\nexport const subAgentToolKey = (subAgentName: string) =>\n `${SUBAGENT_TOOL_PREFIX}${subAgentName}`\n\n/**\n * Returns true if the tool can be put behind the user-approval gate\n * (`settings.tools.approval.tools`, see docs/specs/tool-approval-interface.md).\n *\n * Only tools that run server-side qualify: a presentation tool has nothing to\n * approve, and a client-resolved one (geolocation, OAuth connect) already asks\n * the user by construction, since it is the browser or the user who answers it.\n */\nexport function canRequireApproval(toolName: string): boolean {\n return (\n !isPresentationTool(toolName) &&\n toolName !== AgentBuiltInTool.RequestGeolocation\n )\n}\n\n/**\n * Returns true if the tool renders a UI element (card, form, list, etc.).\n * Used in `prepareStep` to prevent duplicate UI elements across streaming steps.\n */\nexport function isPresentationTool(toolName: string): boolean {\n return (\n toolName === AgentBuiltInTool.RequestConfirm ||\n toolName === AgentBuiltInTool.ShowArtifact ||\n toolName === AgentBuiltInTool.ShowCalendarEvent ||\n toolName === AgentBuiltInTool.ShowComparison ||\n toolName === AgentBuiltInTool.ShowContactForm ||\n toolName === AgentBuiltInTool.ShowDiagram ||\n toolName === AgentBuiltInTool.ShowEmail ||\n toolName === AgentBuiltInTool.ShowImageGallery ||\n toolName === AgentBuiltInTool.ShowLocation ||\n toolName === AgentBuiltInTool.ShowMessage ||\n toolName === AgentBuiltInTool.ShowForm ||\n toolName === AgentBuiltInTool.ShowMultipleChoice ||\n toolName === AgentBuiltInTool.ShowProductList ||\n toolName === AgentBuiltInTool.ShowQrCode ||\n toolName === AgentBuiltInTool.ShowSources ||\n toolName === AgentBuiltInTool.ShowSuggestedReply ||\n toolName === AgentBuiltInTool.ShowVideo ||\n toolName === AgentBuiltInTool.ShowWeather ||\n toolName === AgentBuiltInTool.ShowWebPages\n )\n}\n\n/**\n * Tools that render natively as cards on messaging platforms (Teams/WhatsApp).\n * Must mirror the coverage of the backend `platformToolRenderer` (the renderers\n * + the resumable confirm/form and the tappable suggested-reply). Tools not in\n * this set fall back to the model's plain-text reply on those channels.\n */\nexport const PLATFORM_RENDERED_TOOLS = new Set<string>([\n AgentBuiltInTool.RequestConfirm,\n AgentBuiltInTool.ShowArtifact,\n AgentBuiltInTool.ShowWeather,\n AgentBuiltInTool.ShowLocation,\n AgentBuiltInTool.ShowComparison,\n AgentBuiltInTool.ShowProductList,\n AgentBuiltInTool.ShowWebPages,\n AgentBuiltInTool.ShowImageGallery,\n AgentBuiltInTool.ShowVideo,\n AgentBuiltInTool.ShowSources,\n AgentBuiltInTool.ShowSuggestedReply,\n AgentBuiltInTool.ShowCalendarEvent,\n AgentBuiltInTool.ShowEmail,\n AgentBuiltInTool.ShowMessage,\n AgentBuiltInTool.ShowForm,\n])\n\n/** True if the tool renders natively on Teams/WhatsApp (not just web). */\nexport function isPlatformRenderedTool(toolName: string): boolean {\n return PLATFORM_RENDERED_TOOLS.has(toolName)\n}\n\n/**\n * Client tools whose CALL waits for the person to answer it: until they do,\n * the tool loop is suspended and the turn has not said its last word.\n *\n * Every other client tool renders from the call input and is never answered: a\n * sources list, an artifact, a product list have nothing to send back, and the\n * contact form posts its lead through its own endpoint. Two places need that\n * distinction, and both got it wrong before (reported 2026-08-27 on a\n * knowledge-base turn, whose forced sources closure lands in the same step as\n * a form):\n * - the web resume condition (`sendAutomaticallyWhen` in `useChatbotStore`),\n * which must require a tool OUTPUT from these and from nothing else, or the\n * answers the user just submitted stay in the browser;\n * - `computeRequiredClosures` server-side, which owes no closure to a turn left\n * waiting on one of them: the sources of an answer that is still a question.\n *\n * Membership is about what the CALL waits for, not about the surface that\n * renders it: whether the answer comes back as a browser tool output or as a\n * Teams dialog submit makes no difference here, and a spoken turn resolves\n * these tools server-side with a render acknowledgement (`withRenderAck`), so\n * it is never left waiting in the first place.\n *\n * `requestOAuthConnection` is not an `AgentBuiltInTool`: it is injected by the\n * MCP layer, not configured on the agent.\n */\nexport const USER_ANSWERED_TOOLS: ReadonlySet<string> = new Set([\n AgentBuiltInTool.RequestConfirm,\n AgentBuiltInTool.RequestGeolocation,\n AgentBuiltInTool.ShowForm,\n AgentBuiltInTool.ShowMultipleChoice,\n 'requestOAuthConnection',\n])\n\n/** True if this tool's call waits for an answer from the person on the other side. */\nexport function isUserAnsweredTool(toolName: string): boolean {\n return USER_ANSWERED_TOOLS.has(toolName)\n}\n\n/**\n * Transport a turn arrived through. Recorded on the chat metadata and on the\n * latency histograms, and it is what decides {@link ClientToolSurface}: the\n * transport is a fact of the request, not a per-agent setting.\n */\nexport enum ChatTransport {\n /** Web chat and embeddable widget: the reference surface. */\n Web = 'web',\n /** Messaging channels (Teams, WhatsApp) through the platform runner. */\n Platform = 'platform',\n /** OpenAI-compatible REST surface: automations, SDKs. */\n OpenAiApi = 'openai-api',\n /**\n * Spoken conversation: the request arrives on the same OpenAI-compatible\n * surface, but through a voice session opened by us, so the turn knows it\n * will be heard rather than read. Distinct from {@link OpenAiApi} because\n * that is what decides the answer style and what isolates voice in the\n * cost and latency reports.\n */\n Voice = 'voice',\n}\n\n/**\n * What the caller of a turn can actually DO with a client-side tool.\n *\n * Client tools have no `execute`: something on the other side has to render the\n * widget and post the result back. Offering one to a caller that cannot is not\n * a missing nicety, it is a defect with a measured cost: the model spends a\n * full round trip calling it (`showSuggestedReply` on every sample of the\n * turn-latency baseline), the call is never answered, and its guidance sits in\n * the system prompt of every turn.\n */\nexport enum ClientToolSurface {\n /** Full client runtime: every enabled client tool renders. */\n Web = 'web',\n /** Renders only {@link PLATFORM_RENDERED_TOOLS}; the rest never resolve. */\n Platform = 'platform',\n /**\n * Spoken answer, written conversation on screen: the widgets appear when the\n * client reloads the conversation after the turn, so everything that renders\n * without an answer works, and everything that waits for one does not.\n * See {@link VOICE_RENDERED_TOOLS}.\n */\n Voice = 'voice',\n /** No client runtime at all: the caller consumes text (and tool results). */\n Headless = 'headless',\n}\n\n/**\n * Presentation tools that need nothing back from the client DURING the turn.\n *\n * A voice turn is answered through the provider, so no tool call ever reaches\n * the browser live: what reaches it is the persisted message, reloaded when the\n * turn ends. Anything that renders and stops is therefore fine; anything that\n * would suspend the tool loop waiting for the model's answer (a confirmation, a\n * location request, a quick reply) would sit unanswered in a conversation the\n * user is not typing into.\n *\n * The ones that ask the caller something are here too, and they are not an\n * exception to the rule above: none of them answers the tool loop.\n * - the contact form posts its lead through its own endpoint. Asked to be\n * recontacted mid-call, an agent without it can only apologize (reported\n * 2026-08-06, and collecting the lead is what a voice agent is for);\n * - the forms, the quick replies, a confirmation and a position request are\n * answered on screen and go back to the agent as a spoken user message (see\n * {@link VOICE_RENDER_ACK_PREFIX}), so the caller taps and the agent replies\n * out loud, in the same call. On a screen a tap and a sentence are two roads\n * to the same turn.\n */\nexport const VOICE_RENDERED_TOOLS: ReadonlySet<string> = new Set([\n AgentBuiltInTool.RequestConfirm,\n AgentBuiltInTool.RequestGeolocation,\n AgentBuiltInTool.ShowArtifact,\n AgentBuiltInTool.ShowCalendarEvent,\n AgentBuiltInTool.ShowContactForm,\n AgentBuiltInTool.ShowComparison,\n AgentBuiltInTool.ShowDiagram,\n AgentBuiltInTool.ShowEmail,\n AgentBuiltInTool.ShowForm,\n AgentBuiltInTool.ShowImageGallery,\n AgentBuiltInTool.ShowLocation,\n AgentBuiltInTool.ShowMessage,\n AgentBuiltInTool.ShowMultipleChoice,\n AgentBuiltInTool.ShowProductList,\n AgentBuiltInTool.ShowQrCode,\n AgentBuiltInTool.ShowSources,\n AgentBuiltInTool.ShowSuggestedReply,\n AgentBuiltInTool.ShowVideo,\n AgentBuiltInTool.ShowWeather,\n AgentBuiltInTool.ShowWebPages,\n])\n\n/**\n * The provider's own system tool for hanging up: it watches our completion\n * stream for a call by this exact name, speaks its `message` argument and\n * closes the line. Shared here because three places must agree on the spelling:\n * the tool we offer the model, the stream that forwards the call, and the\n * refusal we speak when a turn cannot run at all.\n */\nexport const VOICE_END_CALL_TOOL = 'end_call'\n\n/**\n * Opening of the output a voice turn gives itself for a widget the client draws\n * (see `withRenderAck` in the backend tool set).\n *\n * It is the model's evidence that the screen was written to, and on the client\n * it is the opposite of an answer: a form carrying it has been drawn and not\n * filled in, so it must stay interactive rather than render as answered with\n * this sentence in place of the caller's reply.\n *\n * It is deliberately a label and not a sentence. The wording it replaced,\n * \"Shown on the caller's screen\", was read back by the model as content it had\n * produced: quick replies are acknowledged the same way as a document, so a\n * turn whose only widget was three chips still ended in \"I have prepared a\n * summary on your screen\", with nothing there (measured 2026-08-07, twelve\n * times in one call). What was on screen now comes after the label, per tool.\n */\nexport const VOICE_RENDER_ACK_PREFIX = 'Voice turn note'\n\n/** The pre 2026-08-07 wording, still sitting in persisted conversations. */\nconst LEGACY_VOICE_RENDER_ACK_PREFIX = \"Shown on the caller's screen\"\n\n/**\n * The output {@link VOICE_RENDER_ACK_PREFIX} describes, for one tool.\n *\n * Three shapes, because three things happen. A presentation tool puts something\n * the caller can read on the screen, and the note ends by telling the model not\n * to say its sentence again: being told \"it was drawn\" is exactly what made it\n * restate the whole answer in the next step, heard twice on a call and printed\n * twice in the conversation (measured 2026-08-07). Quick replies put nothing\n * there at all, so their note says so, in the words the model would otherwise\n * use to claim the opposite.\n *\n * Sources are the one card worth naming out loud: on a call nobody is watching\n * the screen, so a silent list is a list nobody opens. Their note grants ONE\n * short mention, and the grant stays narrow (no reading the list, no naming\n * documents, no restating the answer) because the wording that let the model\n * talk freely about the screen is the wording that made it invent what was on\n * it.\n *\n * That note is the secondary lever, not the main one: in the turn shape the\n * voice prompt asks for (spoken sentence and presentation call in the SAME\n * reply) the model never reads it, because the turn ends on that very step.\n * The spoken mention is therefore asked for in `<voice_turn>` as well, where\n * it costs no round trip; this note covers only the turns that go on after the\n * tool.\n */\nexport const voiceRenderAck = (toolName: string): string => {\n if (toolName === AgentBuiltInTool.ShowSuggestedReply) {\n return `${VOICE_RENDER_ACK_PREFIX} (${toolName}): the quick replies are attached to your message. They are taps, not content: NOTHING was written on the caller's screen by this call, so do not say you showed, prepared, summarized or wrote anything, and do not mention the replies out loud.`\n }\n if (toolName === AgentBuiltInTool.ShowSources) {\n return `${VOICE_RENDER_ACK_PREFIX} (${toolName}): the sources of the answer you just gave are listed in the chat, where the caller can read them. If you have not said so already, you MAY tell them once, in a few words. Nothing more: do not read the list out loud, do not name the documents, and do not repeat or summarize the answer itself.`\n }\n return `${VOICE_RENDER_ACK_PREFIX} (${toolName}): drawn in the conversation, where the caller can read it. You have already said your sentence out loud: do not say it again, either add something new or stop here.`\n}\n\n/** True when a tool output is our own \"it was drawn\" note and not a result. */\nexport function isVoiceRenderAck(output: unknown): boolean {\n return (\n typeof output === 'string' &&\n (output.startsWith(VOICE_RENDER_ACK_PREFIX) ||\n output.startsWith(LEGACY_VOICE_RENDER_ACK_PREFIX))\n )\n}\n\n/** True if the tool shows something on screen during a call and needs no reply. */\nexport function isVoiceRenderedTool(toolName: string): boolean {\n return VOICE_RENDERED_TOOLS.has(toolName)\n}\n\n/** Single availability rule for a client tool, shared by tool set and prompt. */\nexport function supportsClientTool(\n surface: ClientToolSurface,\n toolName: string,\n): boolean {\n if (surface === ClientToolSurface.Headless) {\n return false\n }\n if (surface === ClientToolSurface.Platform) {\n return isPlatformRenderedTool(toolName)\n }\n if (surface === ClientToolSurface.Voice) {\n return isVoiceRenderedTool(toolName)\n }\n return true\n}\n\n/**\n * Surface of a transport. Unknown transports are treated as Web, which is the\n * historical behaviour: a new caller has to opt into being headless, so adding\n * one can never silently strip the widgets from an existing channel.\n */\nexport function clientToolSurfaceOf(\n transport: ChatTransport | string | undefined,\n): ClientToolSurface {\n switch (transport) {\n case ChatTransport.OpenAiApi:\n return ClientToolSurface.Headless\n // Voice is not headless: the caller hears the answer and reads the same\n // conversation on screen, where the client reloads it once the turn is\n // over. The provider never sees the tool calls (they are not forwarded\n // on the callback stream), the persisted message carries them.\n case ChatTransport.Voice:\n return ClientToolSurface.Voice\n case ChatTransport.Platform:\n return ClientToolSurface.Platform\n default:\n return ClientToolSurface.Web\n }\n}\n\n/**\n * True when nobody is watching the response render: the transport delivers text\n * to a program (or to a speech synthesizer), so anything that paces the stream\n * for the human eye is pure added latency.\n */\nexport function isHeadlessTransport(\n transport: ChatTransport | string | undefined,\n): boolean {\n // Voice counts here even though it renders widgets: nobody watches the\n // stream arrive, a synthesizer consumes it, and the widgets appear with the\n // reload at the end of the turn. Pacing the deltas would only delay speech.\n return (\n transport === ChatTransport.Voice ||\n clientToolSurfaceOf(transport) === ClientToolSurface.Headless\n )\n}\n\n/**\n * Shape of the forms `showForm` asks for. Both values GUIDE the model from the\n * tool's descriptions: they are not bounds of its inputSchema, because a cap\n * there refuses the whole call instead of trimming it and there is no repair\n * for it (see `showForm.tool.ts` and the gotchas entry \"A configurable cap does\n * not belong in an inputSchema\"). Their own `.max(10)` is what the tool keeps\n * as its hard ceiling, so a configuration can reach it but never exceed it.\n */\nexport const AgentFormSettingsSchema = z.object({\n maxSteps: z.number().int().min(1).max(10).optional().default(5),\n maxOptionsPerStep: z.number().int().min(2).max(10).optional().default(5),\n})\nexport type AgentFormSettings = z.infer<typeof AgentFormSettingsSchema>\n\n/*\n * The two closure \"mode\" settings (suggestedReply.mode and showSources.mode)\n * were removed on 2026-09-01. Neither said what it looked like it said: the\n * prompt demands both closures whenever their tool is enabled, so the mode\n * only decided whether the SERVER repaired an omission, and nobody wants an\n * agent configured to leave the user without the widget the prompt promised.\n * A closure is unavailable by disabling its tool, as for any other tool.\n * showSources is therefore repaired on every answered turn that used the\n * knowledge base (it fired 321 times in the 7 days to 2026-09-01), and\n * showSuggestedReply is drawn whenever the model calls it with its answer (see\n * `createClosureAcceptance` in the backend), never synthesized.\n * Zod strips unknown keys, so the values still stored in `settings` are\n * ignored on read and disappear on the next save.\n */\n\nexport const DEFAULT_MAX_STEP_COUNT = 10\nexport const DEFAULT_SUB_AGENT_MAX_STEP_COUNT = 6\nexport const DEFAULT_ENDPOINT_MAX_STEP_COUNT = 5\n\n/**\n * Ceiling on the tool steps of a SPOKEN turn, whatever the agent allows in\n * writing.\n *\n * Every step is another round trip carrying the whole accumulated context, and\n * the caller hears all of it as silence. Six is what a call can spend: enough\n * for a retrieval, a check and a widget, and short of the marathons that reach\n * a minute (measured 2026-08-07: a turn that searched for about fifty seconds\n * was dropped by the provider with \"Generating the LLM response took too long\",\n * and the caller heard the waiting sentence four times and no answer).\n */\nexport const VOICE_MAX_STEP_COUNT = 6\n\nexport enum WebSearchProvider {\n Perplexity = 'perplexity',\n Parallel = 'parallel',\n Native = 'native',\n}\n\nexport const PerplexitySearchConfigSchema = z.object({\n maxResults: z.number().int().min(1).max(20).optional(),\n maxTokens: z.number().int().positive().max(1_000_000).optional(),\n maxTokensPerPage: z.number().int().positive().optional(),\n country: z.string().max(2).optional(),\n searchLanguageFilter: z.array(z.string().max(5)).max(10).optional(),\n searchDomainFilter: z.array(z.string()).max(20).optional(),\n searchRecencyFilter: z.enum(['day', 'week', 'month', 'year']).optional(),\n})\nexport type PerplexitySearchConfig = z.infer<\n typeof PerplexitySearchConfigSchema\n>\n\nexport const ParallelSearchConfigSchema = z.object({\n mode: z.enum(['one-shot', 'agentic']).optional(),\n maxResults: z.number().int().min(1).max(20).optional(),\n sourcePolicy: z\n .object({\n includeDomains: z.array(z.string()).optional(),\n excludeDomains: z.array(z.string()).optional(),\n afterDate: z.string().optional(),\n })\n .optional(),\n excerpts: z\n .object({\n maxCharsPerResult: z.number().int().positive().optional(),\n maxCharsTotal: z.number().int().positive().optional(),\n })\n .optional(),\n fetchPolicy: z\n .object({\n maxAgeSeconds: z.number().int().positive().optional(),\n })\n .optional(),\n})\nexport type ParallelSearchConfig = z.infer<typeof ParallelSearchConfigSchema>\n\nexport const NativeWebSearchConfigSchema = z.object({\n openai: z.object({}).optional(),\n anthropic: z\n .object({\n maxUses: z.number().int().positive().optional(),\n allowedDomains: z.array(z.string()).optional(),\n blockedDomains: z.array(z.string()).optional(),\n userLocation: z\n .object({\n type: z.literal('approximate').optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n city: z.string().optional(),\n timezone: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n google: z.object({}).optional(),\n})\nexport type NativeWebSearchConfig = z.infer<typeof NativeWebSearchConfigSchema>\n\nexport const AgentWebSearchSchema = z.object({\n enabled: z.boolean().default(false),\n provider: z\n .enum(WebSearchProvider)\n .optional()\n .default(WebSearchProvider.Native),\n perplexity: PerplexitySearchConfigSchema.optional(),\n parallel: ParallelSearchConfigSchema.optional(),\n native: NativeWebSearchConfigSchema.optional(),\n})\nexport type AgentWebSearch = z.infer<typeof AgentWebSearchSchema>\n\n// Cross-agent personalization sub-options. Default OFF = current agent-bound\n// behavior. Only meaningful when the parent tool (UserMemory / SearchInUserFiles)\n// is enabled in `disabled`.\nexport const AgentUserMemorySchema = z.object({\n // Read the user's memories across all their agents of this organization\n // (aggregated), not just this agent's, and never another organization's.\n // Writes stay per-agent (scope='agent').\n useAllUserKb: z.boolean().default(false),\n})\nexport type AgentUserMemory = z.infer<typeof AgentUserMemorySchema>\n\nexport const AgentUserFilesSchema = z.object({\n // Search ALL the user's files, not just those pinned to this agent\n // (or globally shared agent_id IS NULL).\n useAllUserFiles: z.boolean().default(false),\n})\nexport type AgentUserFiles = z.infer<typeof AgentUserFilesSchema>\n\n/**\n * Human-in-the-loop approval settings. Lists the tools whose calls must be\n * approved by the user before they execute. Names are matched against the tool\n * set of the turn, so any tool can be listed: built-in (`sendEmail`), API tools\n * (`api-<name>`) and MCP tools (`mcp-<server>_<tool>`).\n *\n * The gate is UX, not security: it only suspends execution on interactive\n * channels. On non-interactive ones (messaging platforms, API, scheduled runs)\n * a listed tool is denied instead of hanging forever, see `toolApproval.ts`.\n */\nexport const AgentToolApprovalSchema = z.object({\n tools: z.array(z.string()).default([]),\n})\nexport type AgentToolApproval = z.infer<typeof AgentToolApprovalSchema>\n\nexport const AgentToolsSchema = z.object({\n // New agents start with user memory, user-files search and the generic\n // worker OFF (opt-in). Existing agents keep whatever `disabled` they stored.\n disabled: z\n .array(z.enum(AgentBuiltInTool))\n .default([\n AgentBuiltInTool.UserMemory,\n AgentBuiltInTool.SearchInUserFiles,\n AgentBuiltInTool.RunWorker,\n AgentBuiltInTool.FetchTeamsChannelHistory,\n ]),\n showForm: AgentFormSettingsSchema.optional().default(() =>\n AgentFormSettingsSchema.parse({}),\n ),\n webSearch: AgentWebSearchSchema.optional().default(() =>\n AgentWebSearchSchema.parse({}),\n ),\n userMemory: AgentUserMemorySchema.optional().default(() =>\n AgentUserMemorySchema.parse({}),\n ),\n userFiles: AgentUserFilesSchema.optional().default(() =>\n AgentUserFilesSchema.parse({}),\n ),\n approval: AgentToolApprovalSchema.optional().default(() =>\n AgentToolApprovalSchema.parse({}),\n ),\n})\nexport type AgentTools = z.infer<typeof AgentToolsSchema>\n\n/**\n * Ranking configuration schema for smart chunk retrieval.\n * Controls freshness boost, document priority, and MMR.\n * Semantic deduplication is always applied at sync time (not configurable per-agent).\n */\nexport const AgentRankingSchema = z\n .object({\n freshness: z\n .object({\n enabled: z.boolean().default(false),\n /** Half-life in seconds (1 day – 1 year) */\n scale: z\n .number()\n .int()\n .min(86400)\n .max(31536000)\n .default(7776000),\n /** Weight multiplier for freshness boost in formula */\n weight: z.number().min(0.05).max(0.5).default(0.1),\n })\n .prefault({}),\n priority: z\n .object({\n /** Always enabled by default — priority is per-document, not per-agent */\n enabled: z.boolean().default(true),\n })\n .prefault({}),\n mmr: z\n .object({\n enabled: z.boolean().default(false),\n /** Diversity tradeoff (0.0 = relevance only, 1.0 = diversity only) */\n diversity: z.number().min(0.0).max(1.0).default(0.3),\n /**\n * Candidates pre-selected before MMR. Capped at 100: in\n * balanced mode the RRF fusion of two 50-candidate prefetch\n * legs can never yield more. The pool is diversified by\n * Qdrant's native MMR, so no vector crosses the wire for it\n * (it used to, at 38 KB each, when MMR ran in JavaScript).\n */\n candidatesLimit: z.number().int().min(20).max(100).default(50),\n })\n .prefault({}),\n })\n .prefault({})\nexport type AgentRanking = z.infer<typeof AgentRankingSchema>\n\nexport const AgentModelSchema = z.object({\n prompt: z.string().optional(),\n temperature: z.number().min(0).max(2).optional().default(0.6),\n maxOutputTokens: z.number().positive().optional(),\n presencePenalty: z.number().min(-2).max(2).optional(),\n frequencyPenalty: z.number().min(-2).max(2).optional(),\n searchMode: z\n .enum(AgentSearchMode)\n .optional()\n .default(AgentSearchMode.Balanced),\n limit: z.number().positive().max(100).optional().default(10),\n maxStepCount: z\n .number()\n .int()\n .min(1)\n .max(40)\n .optional()\n .default(DEFAULT_MAX_STEP_COUNT),\n reasoning: AgentReasoningSchema,\n /** Smart ranking configuration (freshness, priority, MMR) */\n ranking: AgentRankingSchema.optional().default(() =>\n AgentRankingSchema.parse({}),\n ),\n})\nexport type AgentModel = z.infer<typeof AgentModelSchema>\n\nexport const LocalizedStringSchema = decodeOnly(\n z.unknown(),\n z.record(z.string(), z.string()),\n // Output validity is enforced by the codec's output schema at runtime.\n (val) =>\n (typeof val === 'string' ? { it: val } : val) as Record<string, string>,\n)\nexport type LocalizedString = z.infer<typeof LocalizedStringSchema>\n\nexport const DEFAULT_WIDGET_URL =\n 'https://cdn.jsdelivr.net/npm/@8wave/ai-elements/dist/ai-elements.es.js'\n\nexport enum AgentLoaderStrategy {\n InlineModule = 'inline-module',\n ScriptSrc = 'script-src',\n DynamicImport = 'dynamic-import',\n}\n\nexport enum AgentChannel {\n Frontoffice = 'frontoffice',\n App = 'app',\n Widget = 'widget',\n}\n\nexport const ALL_AGENT_CHANNELS = Object.values(AgentChannel) as AgentChannel[]\n\nexport const AgentInterfaceSchema = z.object({\n media: MediaSchema.optional(),\n logo: z.string().optional(),\n theme: z.enum(['light', 'dark', 'auto']).optional().default('auto'),\n mainColor: z\n .string()\n .regex(/^#[0-9A-Fa-f]{6}$/)\n .optional()\n .default('#000000'),\n textColor: z.enum(['auto', 'white', 'black']).optional().default('auto'),\n useColorsForAgentHeader: z.boolean().optional().default(false),\n initialMessage: LocalizedStringSchema.optional(),\n greeting: z.array(LocalizedStringSchema).min(1).max(10).optional(),\n messagePlaceholder: LocalizedStringSchema.optional(),\n dismissableNotice: LocalizedStringSchema.optional(),\n footerMessage: LocalizedStringSchema.optional(),\n privacyPolicyNotice: LocalizedStringSchema.optional(),\n /**\n * (A) Voluntary self-service sign-in for anonymous users of PUBLIC agents.\n * When false, the in-chat \"sign in\" menu item and the `view-auth` slot are\n * hidden. Does not touch the external token flow, nor the required login\n * gate of private/organization agents (there it is a no-op). Default true\n * for backward compatibility.\n */\n interactiveLogin: z.boolean().optional().default(true),\n welcomePopup: z.boolean().optional().default(false),\n floatingButtonPosition: z\n .enum(['left', 'right'])\n .optional()\n .default('right'),\n maxMessageLength: z.number().int().positive().optional(),\n widgetUrl: z.url().default(DEFAULT_WIDGET_URL),\n loadDelay: z.number().int().min(0).max(30000).optional().default(0),\n loaderStrategy: z\n .enum(AgentLoaderStrategy)\n .optional()\n .default(AgentLoaderStrategy.InlineModule),\n customCss: z.string().optional(),\n smoothStream: z.boolean().optional().default(false),\n /**\n * Show every agent step (reasoning, tool calls) as an expanded timeline\n * in the chat instead of the compact activity indicator. Only meaningful\n * when reasoning is enabled on the agent model.\n */\n showExtendedSteps: z.boolean().optional().default(false),\n})\nexport type AgentInterface = z.infer<typeof AgentInterfaceSchema>\n\nexport const CHAT_FILE_UPLOAD_DEFAULT_MIME_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'application/pdf',\n 'text/plain',\n 'text/markdown',\n 'text/csv',\n] as const\n\nexport type ChatFileUploadMimeType =\n (typeof CHAT_FILE_UPLOAD_DEFAULT_MIME_TYPES)[number]\n\nexport const CHAT_FILE_UPLOAD_MAX_FILE_SIZE_BYTES = 104_857_600 // 100 MB\n\nexport const AgentFileUploadSchema = z.object({\n enabled: z.boolean().default(false),\n maxFileSizeBytes: z\n .number()\n .int()\n .positive()\n .max(CHAT_FILE_UPLOAD_MAX_FILE_SIZE_BYTES)\n .optional()\n .default(20_971_520),\n allowedMimeTypes: z\n .array(z.string().regex(MIME_TYPE_REGEX))\n .optional()\n .default([...CHAT_FILE_UPLOAD_DEFAULT_MIME_TYPES]),\n maxFilesPerMessage: z\n .number()\n .int()\n .positive()\n .max(10)\n .optional()\n .default(5),\n maxFilesPerChat: z.number().int().positive().max(50).optional().default(20),\n})\nexport type AgentFileUpload = z.infer<typeof AgentFileUploadSchema>\n\nexport const AgentGatewayOptionsSchema = z.object({\n zeroDataRetention: z.boolean().default(true),\n disallowPromptTraining: z.boolean().default(true),\n providerTimeoutMs: z.number().int().min(1000).max(789000).optional(),\n})\nexport type AgentGatewayOptions = z.infer<typeof AgentGatewayOptionsSchema>\n\n/**\n * Exposure of the agent through the OpenAI-compatible surface\n * (`/api/openai/v1`), where any third-party client that speaks chat\n * completions can consume it as if it were a model. Off by default: turning it\n * on makes the agent reachable with an organization API key.\n */\nexport const AgentOpenAiApiSchema = z.object({\n enabled: z.boolean().default(false),\n})\nexport type AgentOpenAiApi = z.infer<typeof AgentOpenAiApiSchema>\n\n/**\n * Shortest first-token deadline the provider actually honours. Below it the\n * turn does not fall back on their model, it fails outright with \"LLM Cascade\n * Error: Brain returned no response\" (production, 2026-08-27).\n */\nexport const VOICE_MIN_CASCADE_TIMEOUT_SECONDS = 5\n\n/** And the longest they accept: their own ceiling, measured 2026-08-06. */\nexport const VOICE_MAX_CASCADE_TIMEOUT_SECONDS = 15\n\n/**\n * Name prefix of the API key the voice channel mints for the provider's\n * callbacks, in the name of the agent's creator. It is how a key list tells\n * that key apart: revoking it silences the agent's voice until the voice is\n * turned off and on again, which mints a new one.\n */\nexport const VOICE_API_KEY_NAME_PREFIX = '[voice] '\n\n/**\n * Voice conversation through ElevenLabs Agents, which provides the voice layer\n * (ASR, turn taking, barge-in, TTS) and calls back into our own turn as a\n * custom LLM on `/api/openai/v1`. Everything that makes the turn worth having\n * (RAG, MCP, memory, credits, persistence) therefore stays where it already is.\n *\n * The provider-side agent is created and kept in sync by the backend, so\n * `providerAgentId` is written by us and is not part of the editable surface.\n * See docs/specs/voice-channel.md.\n */\nexport const AgentVoiceSchema = z.object({\n enabled: z.boolean().default(false),\n /** Provider voice id. Empty means the provider default. */\n voiceId: z.string().optional(),\n /** Language passed to the provider's ASR and TTS. */\n language: z.string().min(2).max(5).default('it'),\n /** Hard server-side cap on a single voice session. */\n maxSessionSeconds: z.number().int().min(30).max(3600).default(600),\n /**\n * How long the provider waits for our first token before falling back to\n * its own model.\n *\n * It has to cover more than the model: our first byte goes out only once\n * the turn has been SET UP (agent read, credit, session, prompt, tool\n * loading, and MCP servers are the slow part), so everything before the\n * first chunk counts against this deadline. Ten seconds was not enough for\n * a heavy agent in production (2026-08-27), so the default is now the\n * provider's own ceiling and the room to go lower is a knob, not a\n * default.\n *\n * Never below {@link VOICE_MIN_CASCADE_TIMEOUT_SECONDS}. Clamped rather\n * than refused, because agents were saved with less before we knew: a\n * stored 3 must keep the voice working, not fail every session on\n * validation.\n */\n cascadeTimeoutSeconds: z\n .number()\n .min(1)\n .max(VOICE_MAX_CASCADE_TIMEOUT_SECONDS)\n .default(VOICE_MAX_CASCADE_TIMEOUT_SECONDS)\n .transform((seconds) =>\n Math.max(VOICE_MIN_CASCADE_TIMEOUT_SECONDS, seconds),\n ),\n /**\n * Seconds before the agent says it is working, while the real answer is\n * still coming. Spoken by our own stream, not by the provider: measured on\n * 2026-08-06, a turn that retrieves takes far longer than any deadline they\n * accept, and the keepalive that keeps it alive also disarms their filler.\n * Four seconds when left empty, which a fast turn never reaches.\n */\n fillerAfterSeconds: z.number().min(0.5).max(8).optional(),\n /**\n * Said while waiting. Empty means a default sentence in the agent's voice\n * language (\"Un attimo, sto controllando\").\n */\n fillerMessage: z.string().max(200).optional(),\n /**\n * Ignore voices that are not the person talking to the agent. Off on the\n * provider side, which in a room with other people (or a television) leaves\n * the turn open on noise: the agent hears \"someone is still speaking\" and\n * waits. On by default here, because the browser is rarely a quiet booth.\n */\n ignoreBackgroundVoices: z.boolean().default(true),\n /**\n * How readily the provider decides the user has finished speaking.\n * `eager` cuts the wait at the price of interrupting a slow speaker,\n * `patient` is for people who pause mid-sentence.\n */\n turnEagerness: z.enum(['patient', 'normal', 'eager']).default('normal'),\n /**\n * How long the agent waits for speech before taking the turn back. The\n * provider default is 7 seconds, which is the silence that reads as \"it\n * hung\": 5 still leaves room to think.\n */\n turnTimeoutSeconds: z.number().min(1).max(30).default(5),\n /**\n * Spoken as soon as the session opens, before the user says anything. It\n * also covers the cold start of the first turn, which is the slowest one\n * (measured p50 4598ms against 2592ms for the rest).\n */\n firstMessage: z.string().max(300).optional(),\n /** Id of the provider-side agent, written by the backend on sync. */\n providerAgentId: z.string().optional(),\n /**\n * Id of the provider-side secret holding the API key it calls us back with.\n * The key itself is never stored here, nor anywhere else on our side.\n */\n providerSecretId: z.string().optional(),\n /**\n * Our own id for that API key, kept so it can be revoked when the voice is\n * turned off or the agent is deleted. Without it the key is unreachable:\n * the value never comes back from the provider, and nothing else on the row\n * says which of the organization's keys belongs to this agent's voice.\n */\n providerApiKeyId: z.string().optional(),\n})\nexport type AgentVoice = z.infer<typeof AgentVoiceSchema>\n\n/**\n * What a chat client needs to know about voice: whether it is offered. The voice\n * id, the timeouts and the provider ids stay server-side, so this is also what\n * the public agent payload carries. Structurally a subset of\n * {@link AgentVoiceSchema}, so a backoffice caller can pass the full block.\n */\nexport const AgentVoiceCapabilitySchema = z.object({\n enabled: z.boolean(),\n})\nexport type AgentVoiceCapability = z.infer<typeof AgentVoiceCapabilitySchema>\n\n/** Body of a voice session request: which conversation to talk into. */\nexport const VoiceSessionRequestSchema = z.object({\n /**\n * Conversation the spoken turns are persisted into. Optional: without one\n * the backend opens a new conversation and returns its id, which is what\n * makes the switch back to typing land in the same thread.\n */\n chatId: z.string().min(1).optional(),\n /**\n * The browser the call is made from, sent once when the session opens and\n * then stamped on every spoken turn.\n *\n * A spoken turn reaches the backend from the voice provider, not from this\n * browser, so it is the only chance to know the device: without it the same\n * conversation shows the context of what the person typed and nothing at\n * all for what they said.\n */\n deviceContext: DeviceContextSchema.optional(),\n /**\n * What the host application knows about this visitor, sent once for the\n * same reason as {@link VoiceSessionRequestSchema.shape.deviceContext}: the\n * turn arrives from the provider and carries nothing of the page.\n *\n * Validated per turn against the agent's `externalContextSchema`, exactly\n * as a typed turn is: keeping it in the session record decides only where\n * it comes from, never what is trusted.\n */\n externalContext: z.record(z.string(), z.unknown()).optional(),\n})\nexport type VoiceSessionRequest = z.infer<typeof VoiceSessionRequestSchema>\n\n/**\n * What the client receives to open a voice session. The signed URL is\n * short-lived and issued per session, so no provider credential ever reaches\n * the browser.\n */\nexport const VoiceSessionSchema = z.object({\n /**\n * Opaque id of the server-side session record. The client echoes it back\n * through the provider (`custom_llm_extra_body`), and it is what binds a\n * spoken turn to its conversation: the chat id is never taken from the\n * client, because a browser could then name someone else's conversation.\n */\n sessionId: z.string(),\n signedUrl: z.string(),\n providerAgentId: z.string(),\n /** Conversation the turns of this session are persisted into. */\n chatId: z.string(),\n maxSessionSeconds: z.number().int(),\n})\nexport type VoiceSession = z.infer<typeof VoiceSessionSchema>\n\n/** A provider voice, as offered in the agent configuration. */\nexport const VoiceOptionSchema = z.object({\n voiceId: z.string(),\n name: z.string(),\n /** Provider category (premade, professional, generated): shown as a chip. */\n category: z.string().optional(),\n /** Short sample, for the preview button in the configuration panel. */\n previewUrl: z.string().optional(),\n /** Provider labels (accent, gender, use case): free-form, shown as chips. */\n labels: z.record(z.string(), z.string()).optional(),\n})\nexport type VoiceOption = z.infer<typeof VoiceOptionSchema>\n\nexport const VoiceOptionListSchema = z.array(VoiceOptionSchema)\n\nexport const AgentSettingsSchema = z.object({\n model: AgentModelSchema,\n interface: AgentInterfaceSchema,\n tools: AgentToolsSchema.optional().default(() =>\n AgentToolsSchema.parse({}),\n ),\n fileUpload: AgentFileUploadSchema.optional().default(() =>\n AgentFileUploadSchema.parse({}),\n ),\n gatewayOptions: AgentGatewayOptionsSchema.optional().default(() =>\n AgentGatewayOptionsSchema.parse({}),\n ),\n channels: z\n .array(z.enum(AgentChannel))\n .optional()\n .default(() => [...ALL_AGENT_CHANNELS]),\n /**\n * JSON Schema definition for the `externalContext` field accepted in chat\n * requests. Only top-level string-keyed properties that match this schema\n * will be forwarded to the LLM. When absent, all external context is\n * silently ignored (deny-by-default).\n */\n externalContextSchema: jsonSchemaField.optional(),\n openaiApi: AgentOpenAiApiSchema.optional().default(() =>\n AgentOpenAiApiSchema.parse({}),\n ),\n voice: AgentVoiceSchema.optional().default(() =>\n AgentVoiceSchema.parse({}),\n ),\n})\nexport type AgentSettings = z.infer<typeof AgentSettingsSchema>\n\nexport const AgentSecuritySchema = z.object({\n rateLimits: z.object({\n minuteRateLimit: z.number().int().min(0).optional(),\n hourRateLimit: z.number().int().min(0).optional(),\n dayRateLimit: z.number().int().min(0).optional(),\n monthRateLimit: z.number().int().min(0).optional(),\n }),\n trustedOrigins: z\n .object({\n origins: z\n .array(z.url().or(z.literal('')))\n .overwrite((items) => {\n return items?.filter((item) => item?.trim())\n })\n .default([]),\n })\n .default({ origins: [] }),\n})\nexport type AgentSecurity = z.infer<typeof AgentSecuritySchema>\n\nexport const AgentDtoSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n prompt: z.string().optional(),\n /**\n * Left out means \"whatever this organization chose\": the server fills it\n * from the organization's default, which a constant here could not know.\n */\n model: z.string().optional(),\n fallbackModels: z.array(z.string()).default([]),\n status: z.enum(AgentStatus).default(AgentStatus.Draft),\n visibility: z.enum(AgentVisibility).default(AgentVisibility.Organization),\n settings: AgentSettingsSchema,\n security: AgentSecuritySchema.nullish(),\n type: z.enum(AgentType).default(AgentType.Chat),\n organizationId: z.string(),\n})\n\nexport const AgentSchema = z.lazy(() =>\n z.object({\n id: z.string(),\n name: z.string(),\n prompt: z.string(),\n model: z.string(),\n fallbackModels: z.array(z.string()).nullable().default([]),\n status: z.enum(AgentStatus).default(AgentStatus.Draft),\n visibility: z\n .enum(AgentVisibility)\n .default(AgentVisibility.Organization),\n settings: AgentSettingsSchema,\n security: AgentSecuritySchema.nullable(),\n type: z.enum(AgentType).default(AgentType.Chat),\n organizationId: z.string(),\n createdAt: z.coerce.date(),\n createdBy: z.string(),\n updatedAt: z.coerce.date(),\n updatedBy: z.string(),\n deleted: z.boolean(),\n deletedAt: z.coerce.date().nullable(),\n deletedBy: z.string().nullable(),\n outOfBudget: z.boolean().optional().default(false),\n outOfBudgetReason: z.string().optional().default(''),\n }),\n)\n\n/* -------------------------------------------------------------------------- *\n * Agent exposure tiers\n *\n * The same agent is serialized at decreasing levels of detail depending on\n * who is asking. Each tier is a strict narrowing of the one above it:\n *\n * Agent Full internal entity — prompt, model, settings, security.\n * Never leaves the trusted (admin/backoffice) boundary.\n * AgentPublic Client view for a viewer who ALREADY HAS ACCESS. \"Public\"\n * means \"safe to expose to the client\", NOT \"visibility =\n * public\": a private/organization agent is still served as\n * AgentPublic once the viewer is authorized.\n * AgentBranding Minimal, safe subset shown to ANONYMOUS viewers on the\n * pre-login screen — just enough to render branded chrome.\n * AgentAccess Envelope returned by the `/access` endpoint: a discriminated\n * union on `requiresAuth` that resolves to either an\n * AgentPublic (access granted) or an AgentBranding (login\n * required), plus the available auth methods.\n * -------------------------------------------------------------------------- */\n\nexport const AgentPublicSchema = z.object({\n id: z.string(),\n name: z.string(),\n status: z.enum(AgentStatus),\n visibility: z.enum(AgentVisibility),\n organizationId: z.string(),\n interface: AgentInterfaceSchema,\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n capabilities: z.object({\n fileUpload: AgentFileUploadSchema,\n voice: AgentVoiceCapabilitySchema,\n }),\n channels: z\n .array(z.enum(AgentChannel))\n .default(() => [...ALL_AGENT_CHANNELS]),\n})\n\n/**\n * Safe subset of `AgentInterface` exposed to anonymous users on the public\n * \"access\" endpoint to render a branded login screen. Mirrors the field names\n * of `AgentInterfaceSchema` (via `pick`) so consumers can read branding the\n * same way for both `AgentPublic.interface` and `AgentBranding.interface`.\n *\n * 🔒 NEVER add sensitive fields here (system prompt, models, tools, …).\n */\nexport const AgentBrandingInterfaceSchema = AgentInterfaceSchema.pick({\n logo: true,\n mainColor: true,\n textColor: true,\n theme: true,\n floatingButtonPosition: true,\n customCss: true,\n})\nexport type AgentBrandingInterface = z.infer<\n typeof AgentBrandingInterfaceSchema\n>\n\nexport const AgentBrandingSchema = AgentPublicSchema.pick({\n id: true,\n name: true,\n organizationId: true,\n}).extend({\n interface: AgentBrandingInterfaceSchema,\n})\nexport type AgentBranding = z.infer<typeof AgentBrandingSchema>\n\nexport const AuthMethodsSchema = z.object({\n emailPassword: z.boolean(),\n google: z.boolean(),\n microsoft: z.boolean(),\n})\nexport type AuthMethods = z.infer<typeof AuthMethodsSchema>\n\n/**\n * Access decision for an agent, WITHOUT the auth methods.\n *\n * Discriminated on `requiresAuth` so the two outcomes are mutually exclusive at\n * the type level — no caller has to null-check `agent`/`branding` by hand:\n * - `requiresAuth: false` → access granted, full `agent` is present.\n * - `requiresAuth: true` → login required, only `branding` is present.\n *\n * This is what the service returns; the controller layers `authMethods` on top\n * to produce {@link AgentAccessSchema}.\n */\nexport const AgentAccessGrantedSchema = z.object({\n requiresAuth: z.literal(false),\n agent: AgentPublicSchema,\n branding: z.null(),\n})\n\nexport const AgentAccessRequiresAuthSchema = z.object({\n requiresAuth: z.literal(true),\n agent: z.null(),\n branding: AgentBrandingSchema,\n})\n\nexport const AgentAccessDecisionSchema = z.discriminatedUnion('requiresAuth', [\n AgentAccessGrantedSchema,\n AgentAccessRequiresAuthSchema,\n])\nexport type AgentAccessDecision = z.infer<typeof AgentAccessDecisionSchema>\n\n/**\n * Full payload returned by the public `/access` endpoint: the\n * {@link AgentAccessDecisionSchema} plus the auth methods the client may offer\n * on the login screen.\n */\nexport const AgentAccessSchema = z.discriminatedUnion('requiresAuth', [\n AgentAccessGrantedSchema.extend({ authMethods: AuthMethodsSchema }),\n AgentAccessRequiresAuthSchema.extend({ authMethods: AuthMethodsSchema }),\n])\nexport type AgentAccess = z.infer<typeof AgentAccessSchema>\n\n/**\n * Per-member allowlist of `organization`-visibility agents. An empty `agentIds`\n * means \"no restriction\" — the member can use every organization agent (the\n * default). A non-empty list limits the member to those agents. Owners/admins\n * always bypass it. `id` is the member's user id, so the resource can be\n * cached/updated as a keyed entity by the frontend store. Used as both the GET\n * response and the PUT body of the backoffice `/members/:userId/agent-access`\n * endpoint.\n */\nexport const MemberAgentAccessSchema = z.object({\n id: z.uuid(),\n agentIds: z.array(z.uuid()),\n})\nexport type MemberAgentAccess = z.infer<typeof MemberAgentAccessSchema>\n\nexport const AgentsQuerystringSchema = z.object({\n ...zodQs.pagination(),\n ...zodQs.sort([\n 'id',\n 'updatedAt',\n 'createdAt',\n 'name',\n 'type',\n 'status',\n 'visibility',\n 'model',\n ]),\n ...zodQs.filters(['done', 'type']),\n ...zodQs.filter('id'),\n ...zodQs.fullText(),\n ...zodQs.ids(),\n})\n\nexport type AgentDto = z.infer<typeof AgentDtoSchema>\nexport type Agent = z.infer<typeof AgentSchema>\nexport type AgentPublic = z.infer<typeof AgentPublicSchema>\n\nexport type AgentQuerystring = z.infer<typeof AgentsQuerystringSchema>\n"],"mappings":";;;AASA,IAAa,IAAsB,EAAS;CACxC,UAAU,EAAS,CAAC,CAAC,SAAS;CAC9B,UAAU,EAAS,CAAC,CAAC,SAAS;CAC9B,UAAU,EAAS,CAAC,CAAC,SAAS;CAC9B,WAAW,EAAQ,EAAS,CAAC,CAAC,CAAC,SAAS;CACxC,KAAK,EAAS,CAAC,CAAC,SAAS;CACzB,UAAU,EAAS,CAAC,CAAC,SAAS;CAC9B,WAAW,EAAS,CAAC,CAAC,SAAS;CAC/B,UAAU,EAAS,CAAC,CAAC,SAAS;CAC9B,aAAa,EAAS,CAAC,CAAC,SAAS;CACjC,cAAc,EAAS,CAAC,CAAC,SAAS;CAClC,eAAe,EAAS,CAAC,CAAC,SAAS;CACnC,gBAAgB,EAAS,CAAC,CAAC,SAAS;CACpC,kBAAkB,EAAS,CAAC,CAAC,SAAS;CACtC,gBAAgB,EAAS,CAAC,CAAC,SAAS;CACpC,qBAAqB,EAAS,CAAC,CAAC,SAAS;CACzC,cAAc,EAAS,CAAC,CAAC,SAAS;CAClC,UAAU,EAAS,CAAC,CAAC,SAAS;CAC9B,gBAAgB,EAAS,CAAC,CAAC,SAAS;CACpC,yBAAyB,EAAS,CAAC,CAAC,SAAS;CAC7C,oBAAoB,EAAS,CAAC,CAAC,SAAS;CACxC,eAAe,EAAS,CAAC,CAAC,SAAS;CACnC,UAAU,EAAU,CAAC,CAAC,SAAS;CAC/B,UAAU,EAAU,CAAC,CAAC,SAAS;CAC/B,eAAe,EAAU,CAAC,CAAC,SAAS;CACpC,eAAe,EAAS,CAAC,CAAC,SAAS;CACnC,qBAAqB,EAAS,CAAC,CAAC,SAAS;CACzC,sBAAsB,EAAS,CAAC,CAAC,SAAS;CAC1C,qBAAqB,EAAS,CAAC,CAAC,SAAS;CACzC,iBAAiB,EAAS,CAAC,CAAC,SAAS;AACzC,CAAC,GClCW,IAAL,yBAAA,GAAA;QACH,EAAA,QAAA,SACA,EAAA,SAAA,UACA,EAAA,WAAA;AACJ,EAAA,CAAA,CAAA,GAEY,IAAL,yBAAA,GAAA;QACH,EAAA,SAAA,UACA,EAAA,UAAA,WACA,EAAA,eAAA;AACJ,EAAA,CAAA,CAAA,GAEY,IAAL,yBAAA,GAAA;QACH,EAAA,OAAA,QACA,EAAA,YAAA;AACJ,EAAA,CAAA,CAAA,GAEY,IAAL,yBAAA,GAAA;QACH,EAAA,WAAA,YACA,EAAA,WAAA,YACA,EAAA,UAAA;AACJ,EAAA,CAAA,CAAA,GA2Ba,IAA2B;CACpC;CACA;CACA;CACA;CACA;CACA;AACJ,GACa,IAA6B;CACtC;CACA;CACA;CACA;CACA;AACJ,GACa,IAAyB;CAClC;CACA;CACA;CACA;AACJ,GACa,IAA6B;CACtC;CACA;CACA;AACJ,GAEa,KAAwB,EAAS;CAC1C,iBAAiB,EAAO,CAAwB,CAAC,CAAC,SAAS;CAC3D,kBAAkB,EAAO,CAA0B,CAAC,CAAC,SAAS;AAClE,CAAC,GAGY,KAA2B,EAAS;CAC7C,MAAM,EAAO;EAAC;EAAY;EAAW;CAAU,CAAC,CAAC,CAAC,SAAS;CAC3D,QAAQ,EAAO,CAA0B,CAAC,CAAC,SAAS;CACpD,SAAS,EAAO,CAAC,cAAc,SAAS,CAAC,CAAC,CAAC,SAAS;CACpD,cAAc,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;AACvD,CAAC,GAGY,KAAwB,EAAS;CAC1C,eAAe,EAAO,CAAsB,CAAC,CAAC,SAAS;CACvD,gBAAgB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;CAC1C,iBAAiB,EAAU,CAAC,CAAC,SAAS;AAC1C,CAAC,GAGY,KAA0B,EAAS,EAC5C,MAAM,EAAO,CAAC,WAAW,UAAU,CAAC,CAAC,CAAC,SAAS,EACnD,CAAC,GAkBY,IAA8B;CACvC;CACA;CACA;CACA;CACA;CACA;AACJ,GAgBa,IAA4B;CACrC;CACA;CACA;CACA;CACA;CACA;AACJ,GAEa,IAAyB,EAAS,EAC3C,iBAAiB,EAAO,CAAyB,CAAC,CAAC,SAAS,EAChE,CAAC;AAcD,SAAS,EACL,GACA,GACa;CACb,OAAO,KAAU,EAA+B,SAAS,CAAK,IACvD,IACD,KAAA;AACV;AAMA,IAAM,KAA6B,EAAS;CACxC,QAAQ,GAAsB,SAAS;CACvC,WAAW,GAAyB,SAAS;CAC7C,QAAQ,GAAsB,SAAS;CACvC,UAAU,GAAwB,SAAS;CAC3C,SAAS,EAAuB,SAAS;CACzC,MAAM,EAAuB,SAAS;CACtC,YAAY,EAAuB,SAAS;CAC5C,UAAU,EAAuB,SAAS;CAC1C,QAAQ,EAAuB,SAAS;CACxC,KAAK,EAAuB,SAAS;AACzC,CAAC;AAID,SAAS,GAAuB,GAAmC;CAC/D,IAAI,CAAC,KAAO,OAAO,KAAQ,UAEvB,OAAO;CAEX,IAAM,IAAM,GAEN,IAAoB;EACtB;EACA;EACA;EACA;EACA,GAAG;CACP,CAAC,CAAC,MAAM,MAAa,KAAY,CAAG;CACpC,IAAI,YAAY,KAAO,CAAC,GAAmB;EACvC,IAAM,IAAS,EAAI,QACb,IAAmB,EAAI,kBACvB,IAAoC,CAAC;EAO3C,IADiB,KAAU,MAAW,SAAS,MAAW,QAC9C;GACR,IAAM,IAAe,EAAY,GAAQ,CAAwB,GAC3D,IAAU,EACZ,GACA,CACJ;GACA,CAAI,KAAgB,OAChB,EAAS,SAAS;IACd,GAAI,KAAgB,EAAE,iBAAiB,EAAa;IACpD,GAAI,KAAW,EAAE,kBAAkB,EAAQ;GAC/C;GAEJ,IAAM,IAAkB,EACpB,GACA,CACJ;GACA,AAAI,MACA,EAAS,YAAY;IACjB,MAAM;IACN,QAAQ;GACZ;GAIJ,IAAM,IAAc,EAChB,MAAW,WAAW,MAAW,QAAQ,SAAS,GAClD,CACJ;GAIA,AAHI,MACA,EAAS,SAAS,EAAE,eAAe,EAAY,IAEnD,EAAS,WAAW,EAAE,MAAM,UAAmB;GAG/C,IAAM,IAAgB,EAClB,MAAW,QAAQ,UAAU,GAC7B,CACJ;GACA,IAAI,GACA,KAAK,IAAM,KAAY,GACnB,EAAS,KAAY,EAAE,iBAAiB,EAAc;EAGlE,OAAO;GAYH,AALA,EAAS,SAAS,EAAE,iBAAiB,OAAO,GAC5C,EAAS,YAAY,EAAE,MAAM,WAAoB,GAGjD,EAAS,SAAS,EAAE,eAAe,UAAmB,GACtD,EAAS,WAAW,EAAE,MAAM,WAAoB;GAChD,KAAK,IAAM,KAAY,GACnB,EAAS,KAAY,EAAE,iBAAiB,OAAgB;EAEhE;EACA,OAAO;CACX;CACA,OAAO;AACX;AAMA,IAAa,IAAuB,EAChC,EAAU,GACV,IACA,EACJ,CAAC,CAAC,SAAS,GA0KC,IAAL,yBAAA,GAAA;QACH,EAAA,UAAA,WACA,EAAA,aAAA,cACA,EAAA,mBAAA,oBACA,EAAA,iBAAA,kBACA,EAAA,qBAAA,sBACA,EAAA,yBAAA,0BACA,EAAA,wBAAA,yBACA,EAAA,oBAAA,qBACA,EAAA,aAAA,cACA,EAAA,YAAA,aACA,EAAA,2BAAA,4BACA,EAAA,eAAA,gBACA,EAAA,oBAAA,qBACA,EAAA,iBAAA,kBACA,EAAA,kBAAA,mBACA,EAAA,cAAA,eACA,EAAA,YAAA,aACA,EAAA,mBAAA,oBACA,EAAA,eAAA,gBACA,EAAA,cAAA,eACA,EAAA,WAAA,YACA,EAAA,kBAAA,mBACA,EAAA,aAAA,cACA,EAAA,cAAA,eACA,EAAA,qBAAA,sBACA,EAAA,YAAA,aACA,EAAA,cAAA,eACA,EAAA,eAAA,gBAEA,EAAA,qBAAA;AACJ,EAAA,CAAA,CAAA;AAyEI,EAAiB,gBACjB,EAAiB,cACjB,EAAiB,aACjB,EAAiB,cACjB,EAAiB,gBACjB,EAAiB,iBACjB,EAAiB,cACjB,EAAiB,kBACjB,EAAiB,WACjB,EAAiB,aACjB,EAAiB,oBACjB,EAAiB,mBACjB,EAAiB,WACjB,EAAiB,aACjB,EAAiB;AAiCrB,IAAa,qBAA2C,IAAI,IAAI;CAC5D,EAAiB;CACjB,EAAiB;CACjB,EAAiB;CACjB,EAAiB;CACjB;AACJ,CAAC;AAGD,SAAgB,GAAmB,GAA2B;CAC1D,OAAO,GAAoB,IAAI,CAAQ;AAC3C;AAwEI,EAAiB,gBACjB,EAAiB,oBACjB,EAAiB,cACjB,EAAiB,mBACjB,EAAiB,iBACjB,EAAiB,gBACjB,EAAiB,aACjB,EAAiB,WACjB,EAAiB,UACjB,EAAiB,kBACjB,EAAiB,cACjB,EAAiB,aACjB,EAAiB,oBACjB,EAAiB,iBACjB,EAAiB,YACjB,EAAiB,aACjB,EAAiB,oBACjB,EAAiB,WACjB,EAAiB,aACjB,EAAiB;AA+BrB,IAAM,KAAiC;AAsCvC,SAAgB,GAAiB,GAA0B;CACvD,OACI,OAAO,KAAW,aACjB,EAAO,WAAA,iBAAkC,KACtC,EAAO,WAAW,EAA8B;AAE5D;AAyEA,IAAa,IAA0B,EAAS;CAC5C,UAAU,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;CAC9D,mBAAmB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;AAC3E,CAAC,GAmCW,IAAL,yBAAA,GAAA;QACH,EAAA,aAAA,cACA,EAAA,WAAA,YACA,EAAA,SAAA;AACJ,EAAA,CAAA,CAAA,GAEa,KAA+B,EAAS;CACjD,YAAY,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS;CACrD,WAAW,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,GAAS,CAAC,CAAC,SAAS;CAC/D,kBAAkB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACvD,SAAS,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CACpC,sBAAsB,EAAQ,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS;CAClE,oBAAoB,EAAQ,EAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS;CACzD,qBAAqB,EAAO;EAAC;EAAO;EAAQ;EAAS;CAAM,CAAC,CAAC,CAAC,SAAS;AAC3E,CAAC,GAKY,KAA6B,EAAS;CAC/C,MAAM,EAAO,CAAC,YAAY,SAAS,CAAC,CAAC,CAAC,SAAS;CAC/C,YAAY,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS;CACrD,cAAc,EACF;EACJ,gBAAgB,EAAQ,EAAS,CAAC,CAAC,CAAC,SAAS;EAC7C,gBAAgB,EAAQ,EAAS,CAAC,CAAC,CAAC,SAAS;EAC7C,WAAW,EAAS,CAAC,CAAC,SAAS;CACnC,CAAC,CAAC,CACD,SAAS;CACd,UAAU,EACE;EACJ,mBAAmB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;EACxD,eAAe,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACxD,CAAC,CAAC,CACD,SAAS;CACd,aAAa,EACD,EACJ,eAAe,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EACxD,CAAC,CAAC,CACD,SAAS;AAClB,CAAC,GAGY,KAA8B,EAAS;CAChD,QAAQ,EAAS,CAAC,CAAC,CAAC,CAAC,SAAS;CAC9B,WAAW,EACC;EACJ,SAAS,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;EAC9C,gBAAgB,EAAQ,EAAS,CAAC,CAAC,CAAC,SAAS;EAC7C,gBAAgB,EAAQ,EAAS,CAAC,CAAC,CAAC,SAAS;EAC7C,cAAc,EACF;GACJ,MAAM,EAAU,aAAa,CAAC,CAAC,SAAS;GACxC,SAAS,EAAS,CAAC,CAAC,SAAS;GAC7B,QAAQ,EAAS,CAAC,CAAC,SAAS;GAC5B,MAAM,EAAS,CAAC,CAAC,SAAS;GAC1B,UAAU,EAAS,CAAC,CAAC,SAAS;EAClC,CAAC,CAAC,CACD,SAAS;CAClB,CAAC,CAAC,CACD,SAAS;CACd,QAAQ,EAAS,CAAC,CAAC,CAAC,CAAC,SAAS;AAClC,CAAC,GAGY,IAAuB,EAAS;CACzC,SAAS,EAAU,CAAC,CAAC,QAAQ,EAAK;CAClC,UAAU,EACA,CAAiB,CAAC,CACvB,SAAS,CAAC,CACV,QAAQ,EAAkB,MAAM;CACrC,YAAY,GAA6B,SAAS;CAClD,UAAU,GAA2B,SAAS;CAC9C,QAAQ,GAA4B,SAAS;AACjD,CAAC,GAMY,IAAwB,EAAS,EAI1C,cAAc,EAAU,CAAC,CAAC,QAAQ,EAAK,EAC3C,CAAC,GAGY,IAAuB,EAAS,EAGzC,iBAAiB,EAAU,CAAC,CAAC,QAAQ,EAAK,EAC9C,CAAC,GAaY,IAA0B,EAAS,EAC5C,OAAO,EAAQ,EAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EACzC,CAAC,GAGY,IAAmB,EAAS;CAGrC,UAAU,EACC,EAAO,CAAgB,CAAC,CAAC,CAC/B,QAAQ;EACL,EAAiB;EACjB,EAAiB;EACjB,EAAiB;EACjB,EAAiB;CACrB,CAAC;CACL,UAAU,EAAwB,SAAS,CAAC,CAAC,cACzC,EAAwB,MAAM,CAAC,CAAC,CACpC;CACA,WAAW,EAAqB,SAAS,CAAC,CAAC,cACvC,EAAqB,MAAM,CAAC,CAAC,CACjC;CACA,YAAY,EAAsB,SAAS,CAAC,CAAC,cACzC,EAAsB,MAAM,CAAC,CAAC,CAClC;CACA,WAAW,EAAqB,SAAS,CAAC,CAAC,cACvC,EAAqB,MAAM,CAAC,CAAC,CACjC;CACA,UAAU,EAAwB,SAAS,CAAC,CAAC,cACzC,EAAwB,MAAM,CAAC,CAAC,CACpC;AACJ,CAAC,GAQY,IAAqB,EACtB;CACJ,WAAW,EACC;EACJ,SAAS,EAAU,CAAC,CAAC,QAAQ,EAAK;EAElC,OAAO,EACK,CAAC,CACR,IAAI,CAAC,CACL,IAAI,KAAK,CAAC,CACV,IAAI,OAAQ,CAAC,CACb,QAAQ,MAAO;EAEpB,QAAQ,EAAS,CAAC,CAAC,IAAI,GAAI,CAAC,CAAC,IAAI,EAAG,CAAC,CAAC,QAAQ,EAAG;CACrD,CAAC,CAAC,CACD,SAAS,CAAC,CAAC;CAChB,UAAU,EACE,EAEJ,SAAS,EAAU,CAAC,CAAC,QAAQ,EAAI,EACrC,CAAC,CAAC,CACD,SAAS,CAAC,CAAC;CAChB,KAAK,EACO;EACJ,SAAS,EAAU,CAAC,CAAC,QAAQ,EAAK;EAElC,WAAW,EAAS,CAAC,CAAC,IAAI,CAAG,CAAC,CAAC,IAAI,CAAG,CAAC,CAAC,QAAQ,EAAG;EAQnD,iBAAiB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE;CACjE,CAAC,CAAC,CACD,SAAS,CAAC,CAAC;AACpB,CAAC,CAAC,CACD,SAAS,CAAC,CAAC,GAGH,KAAmB,EAAS;CACrC,QAAQ,EAAS,CAAC,CAAC,SAAS;CAC5B,aAAa,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAG;CAC5D,iBAAiB,EAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CAChD,iBAAiB,EAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CACpD,kBAAkB,EAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CACrD,YAAY,EACF,CAAe,CAAC,CACrB,SAAS,CAAC,CACV,QAAQ,EAAgB,QAAQ;CACrC,OAAO,EAAS,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;CAC3D,cAAc,EACF,CAAC,CACR,IAAI,CAAC,CACL,IAAI,CAAC,CAAC,CACN,IAAI,EAAE,CAAC,CACP,SAAS,CAAC,CACV,QAAA,EAA8B;CACnC,WAAW;CAEX,SAAS,EAAmB,SAAS,CAAC,CAAC,cACnC,EAAmB,MAAM,CAAC,CAAC,CAC/B;AACJ,CAAC,GAGY,IAAwB,EACjC,EAAU,GACV,EAAS,EAAS,GAAG,EAAS,CAAC,IAE9B,MACI,OAAO,KAAQ,WAAW,EAAE,IAAI,EAAI,IAAI,CACjD,GAGa,KACT,0EAEQ,IAAL,yBAAA,GAAA;QACH,EAAA,eAAA,iBACA,EAAA,YAAA,cACA,EAAA,gBAAA;AACJ,EAAA,CAAA,CAAA,GAEY,IAAL,yBAAA,GAAA;QACH,EAAA,cAAA,eACA,EAAA,MAAA,OACA,EAAA,SAAA;AACJ,EAAA,CAAA,CAAA,GAEa,IAAqB,OAAO,OAAO,CAAY,GAE/C,IAAuB,EAAS;CACzC,OAAO,GAAY,SAAS;CAC5B,MAAM,EAAS,CAAC,CAAC,SAAS;CAC1B,OAAO,EAAO;EAAC;EAAS;EAAQ;CAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,MAAM;CAClE,WAAW,EACC,CAAC,CACR,MAAM,mBAAmB,CAAC,CAC1B,SAAS,CAAC,CACV,QAAQ,SAAS;CACtB,WAAW,EAAO;EAAC;EAAQ;EAAS;CAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,MAAM;CACvE,yBAAyB,EAAU,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAK;CAC7D,gBAAgB,EAAsB,SAAS;CAC/C,UAAU,EAAQ,CAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS;CACjE,oBAAoB,EAAsB,SAAS;CACnD,mBAAmB,EAAsB,SAAS;CAClD,eAAe,EAAsB,SAAS;CAC9C,qBAAqB,EAAsB,SAAS;CAQpD,kBAAkB,EAAU,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAI;CACrD,cAAc,EAAU,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAK;CAClD,wBAAwB,EACd,CAAC,QAAQ,OAAO,CAAC,CAAC,CACvB,SAAS,CAAC,CACV,QAAQ,OAAO;CACpB,kBAAkB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACvD,WAAW,EAAM,CAAC,CAAC,QAAQ,EAAkB;CAC7C,WAAW,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;CAClE,gBAAgB,EACN,CAAmB,CAAC,CACzB,SAAS,CAAC,CACV,QAAQ,EAAoB,YAAY;CAC7C,WAAW,EAAS,CAAC,CAAC,SAAS;CAC/B,cAAc,EAAU,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAK;CAMlD,mBAAmB,EAAU,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAK;AAC3D,CAAC,GAmBY,IAAwB,EAAS;CAC1C,SAAS,EAAU,CAAC,CAAC,QAAQ,EAAK;CAClC,kBAAkB,EACN,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,IAAI,SAAoC,CAAC,CACzC,SAAS,CAAC,CACV,QAAQ,QAAU;CACvB,kBAAkB,EACP,EAAS,CAAC,CAAC,MAAM,EAAe,CAAC,CAAC,CACxC,SAAS,CAAC,CACV,QAAQ;EA3Bb;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAoBoD,CAAC;CACrD,oBAAoB,EACR,CAAC,CACR,IAAI,CAAC,CACL,SAAS,CAAC,CACV,IAAI,EAAE,CAAC,CACP,SAAS,CAAC,CACV,QAAQ,CAAC;CACd,iBAAiB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AAC9E,CAAC,GAGY,IAA4B,EAAS;CAC9C,mBAAmB,EAAU,CAAC,CAAC,QAAQ,EAAI;CAC3C,wBAAwB,EAAU,CAAC,CAAC,QAAQ,EAAI;CAChD,mBAAmB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAI,CAAC,CAAC,IAAI,KAAM,CAAC,CAAC,SAAS;AACvE,CAAC,GASY,IAAuB,EAAS,EACzC,SAAS,EAAU,CAAC,CAAC,QAAQ,EAAK,EACtC,CAAC,GA+BY,IAAmB,EAAS;CACrC,SAAS,EAAU,CAAC,CAAC,QAAQ,EAAK;CAElC,SAAS,EAAS,CAAC,CAAC,SAAS;CAE7B,UAAU,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI;CAE/C,mBAAmB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,GAAG;CAkBjE,uBAAuB,EACX,CAAC,CACR,IAAI,CAAC,CAAC,CACN,IAAA,EAAqC,CAAC,CACtC,QAAA,EAAyC,CAAC,CAC1C,WAAW,MACR,KAAK,IAAA,GAAuC,CAAO,CACvD;CAQJ,oBAAoB,EAAS,CAAC,CAAC,IAAI,EAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CAKxD,eAAe,EAAS,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;CAO5C,wBAAwB,EAAU,CAAC,CAAC,QAAQ,EAAI;CAMhD,eAAe,EAAO;EAAC;EAAW;EAAU;CAAO,CAAC,CAAC,CAAC,QAAQ,QAAQ;CAMtE,oBAAoB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;CAMvD,cAAc,EAAS,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;CAE3C,iBAAiB,EAAS,CAAC,CAAC,SAAS;CAKrC,kBAAkB,EAAS,CAAC,CAAC,SAAS;CAOtC,kBAAkB,EAAS,CAAC,CAAC,SAAS;AAC1C,CAAC,GASY,KAA6B,EAAS,EAC/C,SAAS,EAAU,EACvB,CAAC;AAIwC,EAAS;CAM9C,QAAQ,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CAUnC,eAAe,EAAoB,SAAS;CAU5C,iBAAiB,EAAS,EAAS,GAAG,EAAU,CAAC,CAAC,CAAC,SAAS;AAChE,CAAC;AAQD,IAAa,KAAqB,EAAS;CAOvC,WAAW,EAAS;CACpB,WAAW,EAAS;CACpB,iBAAiB,EAAS;CAE1B,QAAQ,EAAS;CACjB,mBAAmB,EAAS,CAAC,CAAC,IAAI;AACtC,CAAC,GAIY,KAAoB,EAAS;CACtC,SAAS,EAAS;CAClB,MAAM,EAAS;CAEf,UAAU,EAAS,CAAC,CAAC,SAAS;CAE9B,YAAY,EAAS,CAAC,CAAC,SAAS;CAEhC,QAAQ,EAAS,EAAS,GAAG,EAAS,CAAC,CAAC,CAAC,SAAS;AACtD,CAAC;AAGoC,EAAQ,EAAiB;AAE9D,IAAa,IAAsB,EAAS;CACxC,OAAO;CACP,WAAW;CACX,OAAO,EAAiB,SAAS,CAAC,CAAC,cAC/B,EAAiB,MAAM,CAAC,CAAC,CAC7B;CACA,YAAY,EAAsB,SAAS,CAAC,CAAC,cACzC,EAAsB,MAAM,CAAC,CAAC,CAClC;CACA,gBAAgB,EAA0B,SAAS,CAAC,CAAC,cACjD,EAA0B,MAAM,CAAC,CAAC,CACtC;CACA,UAAU,EACC,EAAO,CAAY,CAAC,CAAC,CAC3B,SAAS,CAAC,CACV,cAAc,CAAC,GAAG,CAAkB,CAAC;CAO1C,uBAAuB,GAAgB,SAAS;CAChD,WAAW,EAAqB,SAAS,CAAC,CAAC,cACvC,EAAqB,MAAM,CAAC,CAAC,CACjC;CACA,OAAO,EAAiB,SAAS,CAAC,CAAC,cAC/B,EAAiB,MAAM,CAAC,CAAC,CAC7B;AACJ,CAAC,GAGY,IAAsB,EAAS;CACxC,YAAY,EAAS;EACjB,iBAAiB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;EAClD,eAAe,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;EAChD,cAAc,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;EAC/C,gBAAgB,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;CACrD,CAAC;CACD,gBAAgB,EACJ,EACJ,SAAS,EACE,EAAM,CAAC,CAAC,GAAG,EAAU,EAAE,CAAC,CAAC,CAAC,CAChC,WAAW,MACD,GAAO,QAAQ,MAAS,GAAM,KAAK,CAAC,CAC9C,CAAC,CACD,QAAQ,CAAC,CAAC,EACnB,CAAC,CAAC,CACD,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;AAChC,CAAC;AAG6B,EAAS;CACnC,IAAI,EAAS,CAAC,CAAC,SAAS;CACxB,MAAM,EAAS;CACf,QAAQ,EAAS,CAAC,CAAC,SAAS;CAK5B,OAAO,EAAS,CAAC,CAAC,SAAS;CAC3B,gBAAgB,EAAQ,EAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAC9C,QAAQ,EAAO,CAAW,CAAC,CAAC,QAAQ,EAAY,KAAK;CACrD,YAAY,EAAO,CAAe,CAAC,CAAC,QAAQ,EAAgB,YAAY;CACxE,UAAU;CACV,UAAU,EAAoB,QAAQ;CACtC,MAAM,EAAO,CAAS,CAAC,CAAC,QAAQ,EAAU,IAAI;CAC9C,gBAAgB,EAAS;AAC7B,CAAC,GAE0B,QACvB,EAAS;CACL,IAAI,EAAS;CACb,MAAM,EAAS;CACf,QAAQ,EAAS;CACjB,OAAO,EAAS;CAChB,gBAAgB,EAAQ,EAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;CACzD,QAAQ,EAAO,CAAW,CAAC,CAAC,QAAQ,EAAY,KAAK;CACrD,YAAY,EACF,CAAe,CAAC,CACrB,QAAQ,EAAgB,YAAY;CACzC,UAAU;CACV,UAAU,EAAoB,SAAS;CACvC,MAAM,EAAO,CAAS,CAAC,CAAC,QAAQ,EAAU,IAAI;CAC9C,gBAAgB,EAAS;CACzB,WAAW,EAAc;CACzB,WAAW,EAAS;CACpB,WAAW,EAAc;CACzB,WAAW,EAAS;CACpB,SAAS,EAAU;CACnB,WAAW,EAAc,CAAC,CAAC,SAAS;CACpC,WAAW,EAAS,CAAC,CAAC,SAAS;CAC/B,aAAa,EAAU,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAK;CACjD,mBAAmB,EAAS,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AACvD,CAAC,CACL;AAsBA,IAAa,IAAoB,EAAS;CACtC,IAAI,EAAS;CACb,MAAM,EAAS;CACf,QAAQ,EAAO,CAAW;CAC1B,YAAY,EAAO,CAAe;CAClC,gBAAgB,EAAS;CACzB,WAAW;CACX,WAAW,EAAc;CACzB,WAAW,EAAc;CACzB,cAAc,EAAS;EACnB,YAAY;EACZ,OAAO;CACX,CAAC;CACD,UAAU,EACC,EAAO,CAAY,CAAC,CAAC,CAC3B,cAAc,CAAC,GAAG,CAAkB,CAAC;AAC9C,CAAC,GAUY,KAA+B,EAAqB,KAAK;CAClE,MAAM;CACN,WAAW;CACX,WAAW;CACX,OAAO;CACP,wBAAwB;CACxB,WAAW;AACf,CAAC,GAKY,KAAsB,EAAkB,KAAK;CACtD,IAAI;CACJ,MAAM;CACN,gBAAgB;AACpB,CAAC,CAAC,CAAC,OAAO,EACN,WAAW,GACf,CAAC,GAGY,IAAoB,EAAS;CACtC,eAAe,EAAU;CACzB,QAAQ,EAAU;CAClB,WAAW,EAAU;AACzB,CAAC,GAcY,KAA2B,EAAS;CAC7C,cAAc,EAAU,EAAK;CAC7B,OAAO;CACP,UAAU,EAAO;AACrB,CAAC,GAEY,IAAgC,EAAS;CAClD,cAAc,EAAU,EAAI;CAC5B,OAAO,EAAO;CACd,UAAU;AACd,CAAC;AAEwC,EAAqB,gBAAgB,CAC1E,IACA,CACJ,CAAC,GAQgC,EAAqB,gBAAgB,CAClE,GAAyB,OAAO,EAAE,aAAa,EAAkB,CAAC,GAClE,EAA8B,OAAO,EAAE,aAAa,EAAkB,CAAC,CAC3E,CAAC,GAYsC,EAAS;CAC5C,IAAI,EAAO;CACX,UAAU,EAAQ,EAAO,CAAC;AAC9B,CAAC,GAGsC,EAAS;CAC5C,GAAG,EAAM,WAAW;CACpB,GAAG,EAAM,KAAK;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACJ,CAAC;CACD,GAAG,EAAM,QAAQ,CAAC,QAAQ,MAAM,CAAC;CACjC,GAAG,EAAM,OAAO,IAAI;CACpB,GAAG,EAAM,SAAS;CAClB,GAAG,EAAM,IAAI;AACjB,CAAC"}
|