Просмотр исходного кода

Ticket #4711 - Automations: Assistants.

AntonLV 2 лет назад
Родитель
Сommit
c804a0e1a8

+ 16 - 1
inc/classes/BxDolAI.php

@@ -68,7 +68,7 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
 
         return $GLOBALS['bxDolClasses'][__CLASS__];
     }
-    
+
     public static function callHelper($mixedHelper, $sMessage)
     {
         $oAI = BxDolAI::getInstance();
@@ -80,6 +80,11 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
         return $oAIModel->getResponseText($aHelper['prompt'], $sMessage);
     }
 
+    public static function pruning()
+    {
+        BxDolAIAssistant::pruning();
+    }
+
     public function getProfileId()
     {
         return $this->_iProfileId;
@@ -127,6 +132,11 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
         return BxDolAIProvider::getObjectInstance($iId);
     }   
 
+    public function getAssistants()
+    {
+        return $aModel = $this->_oDb->getAssistantsBy(['sample' => 'all_pairs', 'active' => 1]);
+    }
+
     public function getAssistantById($iId)
     {
         return $this->_oDb->getAssistantsBy(['sample' => 'id', 'id' => $iId]);
@@ -142,6 +152,11 @@ class BxDolAI extends BxDolFactory implements iBxDolSingleton
         return $this->_oDb->getChatsBy(['sample' => 'id', 'id' => $iId]);
     }
 
+    public function getAssistantChatsTransient($iLifetime = 0)
+    {
+        return $this->_oDb->getChatsBy(['sample' => 'type', 'type' => BX_DOL_AI_ASST_TYPE_TRANSIENT, 'lifetime' => $iLifetime]);
+    }
+
     public function updateAssistantChatById($iId, $aSet)
     {
         return $this->_oDb->updateChats($aSet, ['id' => $iId]);

+ 96 - 1
inc/classes/BxDolAIAssistant.php

@@ -7,6 +7,9 @@
  * @{
  */
 
+define('BX_DOL_AI_ASST_TYPE_PERMANENT', 1);
+define('BX_DOL_AI_ASST_TYPE_TRANSIENT', 10);
+
 class BxDolAIAssistant extends BxDol
 {
     protected static $_sFileText = 'sys_asst_text.json';
@@ -50,11 +53,68 @@ class BxDolAIAssistant extends BxDol
         return ($GLOBALS['bxDolClasses'][$sPrefix . $iId] = $o);
     }
 
+    public static function getName($sName)
+    {
+        return uriGenerate($sName, 'sys_agents_assistants', 'name', ['lowercase' => false]);
+    }
+
+    public static function getChatName($sName)
+    {
+        return uriGenerate($sName, 'sys_agents_assistants_chats', 'name', ['lowercase' => false]);
+    }
+
+    public static function pruning()
+    {
+        $oAi = BxDolAI::getInstance();
+
+        if(getParam('sys_agents_asst_chats_trans_del') == 'on') {
+            $aChats = $oAi->getAssistantChatsTransient(3600);
+            foreach($aChats as $aChat)
+                self::getObjectInstance($aChat['assistant_id'])->deleteChat($aChat);
+        }
+    }
+
     public function getModelObject()
     {
         return BxDolAI::getInstance()->getModelObject($this->_aData['model_id']);
     }
 
+    public function getChatCmtsObject($iChatId)
+    {
+        return BxDolAI::getInstance()->getAssistantChatCmtsObject($iChatId);
+    }
+
+    public function getAskButton($sText)
+    {
+        $sTitle = _t('_sys_agents_assistants_txt_ask');
+        if(!empty($sText))
+            $sTitle .= ': ' . strmaxtextlen($sText, 16);
+
+        return BxDolTemplate::getInstance()->parseButton($sTitle, [
+            'class' => 'bx-btn sys-agents-ask',
+            'onclick' => "javascrip:bx_agents_action(this, 'asst', 'ask', {id: " . $this->_iId . ", text: '" . $sText . "'})"
+        ]);
+    }
+
+    public function deleteChat($mixedChat)
+    {
+        $aChat = is_array($mixedChat) ? $mixedChat : $this->_oDb->getChatsBy(['sample' => 'id', 'id' => (int)$mixedChat]);
+        if(empty($aChat) || !is_array($aChat))
+            return false;
+
+        $oAIModel = $this->getModelObject();
+
+        if(($oCmts = $this->getChatCmtsObject($aChat['id'])) !== false)
+            $oCmts->onObjectDelete();
+
+        if(!empty($aChat['ai_file_id'])) {
+            $oAIModel->callVectorStoresFilesDelete($this->_aData['ai_vs_id'], $aChat['ai_file_id']);
+            $oAIModel->callFilesDelete($aChat['ai_file_id']);
+        }
+
+        return true;
+    }
+
     public function processActionAddKnowledge()
     {
         $sAction = 'add_knowledge';
@@ -125,7 +185,42 @@ class BxDolAIAssistant extends BxDol
 
         return echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
     }
-    
+
+    public function processActionAsk()
+    {
+        $sAction = 'ask';
+        $oTemplate = BxDolTemplate::getInstance();
+
+        $sText = bx_get('text');
+        if($sText !== false)
+            $sText = bx_process_input($sText);
+
+        $iChatId = $this->_oDb->insertChat([
+            'name' => self::getChatName(strmaxtextlen($sText, 8)),
+            'type' => BX_DOL_AI_ASST_TYPE_TRANSIENT,
+            'assistant_id' => $this->_iId, 
+            'added' => time(),
+        ]);
+
+        $sPopupContent = '';
+        if($iChatId !== false && ($oCmts = BxDolAI::getInstance()->getAssistantChatCmtsObject($iChatId, $oTemplate)) !== false) {
+            $oCmts->add([
+                'cmt_author_id' => bx_get_logged_profile_id(),
+                'cmt_parent_id' => 0,
+                'cmt_text' => $sText
+            ]);
+
+            $sPopupContent = $oCmts->getCommentsBlock();
+        }
+
+        $sPopupId = 'bx_agents_assistants_ask';
+        $sPopupContent = BxTemplFunctions::getInstance()->popupBox($sPopupId, _t('_sys_agents_assistants_popup_ask'), $oTemplate->parseHtmlByName('agents_popup.html', [
+            'content' => $sPopupContent
+        ]));
+
+        return echoJson(['popup' => ['html' => $sPopupContent, 'options' => ['closeOnOuterClick' => false]]]);
+    }
+
     protected function _getForm($sAction, $aAssistant = [])
     {
         $aForm = [

+ 21 - 0
inc/classes/BxDolAIQuery.php

@@ -652,7 +652,20 @@ class BxDolAIQuery extends BxDolDb
 
                 $sWhereClause .= " AND `tac`.`assistant_id`=:assistant_id";
                 break;
+
+            case 'type':
+                $aMethod['params'][1] = [
+                    'type' => $aParams['type']
+                ];
+
+                $sWhereClause .= " AND `tac`.`type`=:type";
                 
+                if(isset($aParams['lifetime']) && (int)$aParams['lifetime'] > 0) {
+                    $aMethod['params'][1]['lifetime'] = (int)$aParams['lifetime'];
+
+                    $sWhereClause .= " AND (UNIX_TIMESTAMP() - `tac`.`added`) >= :lifetime";
+                }
+                break;
         }
 
         $aMethod['params'][0] = "SELECT " . $sSelectClause . "
@@ -662,6 +675,14 @@ class BxDolAIQuery extends BxDolDb
         return call_user_func_array([$this, $aMethod['name']], $aMethod['params']);
     }
     
+    public function insertChat($aParamsSet)
+    {
+        if(empty($aParamsSet) || !is_array($aParamsSet))
+            return false;
+
+        return (int)$this->query("INSERT INTO `sys_agents_assistants_chats` SET " . $this->arrayToSQL($aParamsSet)) > 0 ? (int)$this->lastId() : false;
+    }
+
     public function updateChats($aSetClause, $aWhereClause)
     {
         if(empty($aSetClause) || empty($aWhereClause))

+ 3 - 0
inc/classes/BxDolCronPruning.php

@@ -72,6 +72,9 @@ class BxDolCronPruning extends BxDolCron
         $oKey = BxDolKey::getInstance();
         $iDeletedKeys = $oKey ? $oKey->prune() : 0;
 
+        // clean ai related data
+        $iDeletedItems = BxDolAI::pruning();
+        
         echo call_user_func_array('_t', ['_sys_pruning_db', 
             $iDeleteMemLevels, 
             $iSessions, $iDeletedKeys, 

+ 17 - 5
install/sql/system.sql

@@ -833,6 +833,16 @@ INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `ex
 (@iCategoryId, 'sys_agents_url', '_adm_stg_cpt_option_sys_agents_url', '', 'digit', '', '', '', 10),
 (@iCategoryId, 'sys_agents_profile', '_adm_stg_cpt_option_sys_agents_profile', '', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:26:"get_options_agents_profile";s:5:"class";s:13:"TemplServices";}', '', '', 20);
 
+--
+-- CATEGORY (HIDDEN): Agents (usage)
+--
+INSERT INTO `sys_options_categories`(`type_id`, `name`, `caption`, `hidden`, `order`) VALUES (@iTypeId, 'agents_usage', '_adm_stg_cpt_category_agents_usage', 1, 2);
+SET @iCategoryId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
+(@iCategoryId, 'sys_agents_asst_chats_trans_del', '_adm_stg_cpt_option_sys_agents_asst_chats_trans_del', 'on', 'checkbox', '', '', '', 1),
+(@iCategoryId, 'sys_agents_live_search_assistant', '_adm_stg_cpt_option_sys_agents_lsa', '', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:33:"get_options_live_search_assistant";s:5:"class";s:13:"TemplServices";}', '', '', 10);
+
 --
 -- Table structure for table `sys_options_mixes`
 --
@@ -5497,11 +5507,12 @@ INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `fie
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `hidden_on`, `order`) VALUES
 ('sys_studio_agents_assistants_chats', 'checkbox', '', '2%', 0, 0, '', '', 1),
 ('sys_studio_agents_assistants_chats', 'name', '_sys_agents_assistants_chats_txt_name', '18%', 0, 0, '', '', 2),
-('sys_studio_agents_assistants_chats', 'description', '_sys_agents_assistants_chats_txt_description', '30%', 0, 16, '', '', 3),
-('sys_studio_agents_assistants_chats', 'messages', '_sys_agents_assistants_chats_txt_messages', '10%', 0, 0, '', '', 4),
-('sys_studio_agents_assistants_chats', 'added', '_sys_agents_assistants_chats_txt_added', '15%', 0, 0, '', '', 5),
-('sys_studio_agents_assistants_chats', 'stored', '_sys_agents_assistants_chats_txt_stored', '15%', 0, 0, '', '', 6),
-('sys_studio_agents_assistants_chats', 'actions', '', '20%', 0, 0, '', '', 7);
+('sys_studio_agents_assistants_chats', 'type', '_sys_agents_assistants_chats_txt_type', '5%', 0, 0, '', '', 3),
+('sys_studio_agents_assistants_chats', 'description', '_sys_agents_assistants_chats_txt_description', '25%', 0, 16, '', '', 4),
+('sys_studio_agents_assistants_chats', 'messages', '_sys_agents_assistants_chats_txt_messages', '10%', 0, 0, '', '', 5),
+('sys_studio_agents_assistants_chats', 'added', '_sys_agents_assistants_chats_txt_added', '15%', 0, 0, '', '', 6),
+('sys_studio_agents_assistants_chats', 'stored', '_sys_agents_assistants_chats_txt_stored', '15%', 0, 0, '', '', 7),
+('sys_studio_agents_assistants_chats', 'actions', '', '20%', 0, 0, '', '', 8);
 
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `active`, `order`) VALUES
 ('sys_studio_agents_assistants_chats', 'independent', 'add', '_sys_agents_assistants_chats_btn_add', '', 0, 0, 1, 1),
@@ -6570,6 +6581,7 @@ CREATE TABLE IF NOT EXISTS `sys_agents_assistants_files` (
 CREATE TABLE IF NOT EXISTS `sys_agents_assistants_chats` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `name` varchar(128) NOT NULL DEFAULT '',
+  `type` tinyint(4) NOT NULL DEFAULT 1,
   `assistant_id` int(11) NOT NULL DEFAULT 0,
   `description` text NOT NULL,
   `message_id` int(11) NOT NULL DEFAULT 0,

+ 95 - 85
modules/boonex/english/data/langs/system/en.xml

@@ -1531,6 +1531,8 @@
     <string name="_adm_stg_cpt_category_social_settings"><![CDATA[Social]]></string>
     <string name="_adm_stg_cpt_category_api_general"><![CDATA[General]]></string>
     <string name="_adm_stg_cpt_category_api_layout"><![CDATA[Layout]]></string>
+    <string name="_adm_stg_cpt_category_agents_general"><![CDATA[General]]></string>
+    <string name="_adm_stg_cpt_category_agents_usage"><![CDATA[Usage]]></string>
     <string name="_adm_stg_cpt_option_client_image_resize_width"><![CDATA[Image width to resize before upload (0 - disable)]]></string>
     <string name="_adm_stg_cpt_option_client_image_resize_height"><![CDATA[Image height to resize before upload (0 - disable)]]></string>
     <string name="_adm_stg_cpt_option_currency_code"><![CDATA[Currency code (for checkout system)]]></string>
@@ -1768,7 +1770,9 @@
     <string name="_adm_stg_cpt_option_sys_agents_api_key"><![CDATA[Default API key]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_model"><![CDATA[Default model]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_url"><![CDATA[Endpoint URL]]></string>
-    <string name="_adm_stg_cpt_option_sys_agents_profile"><![CDATA[Profile]]></string>   
+    <string name="_adm_stg_cpt_option_sys_agents_profile"><![CDATA[Profile]]></string>
+    <string name="_adm_stg_cpt_option_sys_agents_asst_chats_trans_del"><![CDATA[Auto delete transient chats everyday]]></string>
+    <string name="_adm_stg_cpt_option_sys_agents_lsa"><![CDATA[Assistant for Live search]]></string>
     <string name="_adm_stg_cpt_option_sys_viewport_meta_tag"><![CDATA[Viewport meta tag]]></string>
 
     <string name="_adm_stg_cpt_category_pwa_manifest"><![CDATA[Manifest]]></string>
@@ -2240,6 +2244,7 @@
     <string name="_sys_agents_assistants_txt_codes_onclick"><![CDATA[onClick code for a link]]></string>
     <string name="_sys_agents_assistants_txt_codes_button"><![CDATA[Button HTML code]]></string>
     <string name="_sys_agents_assistants_txt_add_knowledge"><![CDATA[Add knowledge]]></string>
+    <string name="_sys_agents_assistants_txt_ask"><![CDATA[Ask]]></string>
     <string name="_sys_agents_assistants_btn_add"><![CDATA[Add Assistant]]></string>
     <string name="_sys_agents_assistants_btn_chats"><![CDATA[Chats]]></string>
     <string name="_sys_agents_assistants_btn_files"><![CDATA[Files]]></string>
@@ -2255,6 +2260,9 @@
     <string name="_sys_agents_assistants_popup_add"><![CDATA[Add assistant]]></string>
     <string name="_sys_agents_assistants_popup_edit"><![CDATA[Edit assistant]]></string>
     <string name="_sys_agents_assistants_chats_txt_name"><![CDATA[Name]]></string>
+    <string name="_sys_agents_assistants_chats_txt_type"><![CDATA[Type]]></string>
+    <string name="_sys_agents_assistants_chats_txt_type_1"><![CDATA[Permanent]]></string>
+    <string name="_sys_agents_assistants_chats_txt_type_10"><![CDATA[Transient]]></string>
     <string name="_sys_agents_assistants_chats_txt_description"><![CDATA[Description]]></string>
     <string name="_sys_agents_assistants_chats_txt_messages"><![CDATA[Messages]]></string>
     <string name="_sys_agents_assistants_chats_txt_added"><![CDATA[Added]]></string>
@@ -2288,6 +2296,7 @@
     <string name="_sys_agents_assistants_field_kwg_faq_q"><![CDATA[Question]]></string>
     <string name="_sys_agents_assistants_field_kwg_faq_a"><![CDATA[Answer]]></string>
     <string name="_sys_agents_assistants_popup_add_knowledge"><![CDATA[Add Knowledge]]></string>
+    <string name="_sys_agents_assistants_popup_ask"><![CDATA[Ask Assistant]]></string>
     <string name="_sys_agents_assistants_msg_knowledge_added"><![CDATA[Knowledge was added.]]></string>
 
   <string name="_sys_audit_content_info_popup_title"><![CDATA[Information]]></string>
@@ -3768,97 +3777,98 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_push_notification_request_no"><![CDATA[No, thanks]]></string>
     <string name="_sys_read_more"><![CDATA[Continue reading "{0}"]]></string>
     <string name="_sys_relation"><![CDATA[Relationship]]></string>
-	<string name="_sys_request_module_not_found_cpt"><![CDATA[Module was not found]]></string>
-	<string name="_sys_request_module_not_found_cnt"><![CDATA[Module({0}) was not found]]></string>
-	<string name="_sys_request_page_not_found_cpt"><![CDATA[Page was not found]]></string>
-	<string name="_sys_request_page_not_found_cnt"><![CDATA[Page({0}) was not found in module({1})]]></string>
-	<string name="_sys_request_method_not_found_cpt"><![CDATA[Method was not found]]></string>
-	<string name="_sys_request_method_not_found_cnt"><![CDATA[Method({0}) was not found in module({1})]]></string>
-	<string name="_sys_score_counter"><![CDATA[{0}]]></string>
-	<string name="_sys_score_counter_empty"><![CDATA[Vote]]></string>
-        <string name="_sys_score_n_score"><![CDATA[{0} score]]></string>
-	<string name="_sys_score_do_up"><![CDATA[Up]]></string>
-	<string name="_sys_score_do_down"><![CDATA[Down]]></string>
-	<string name="_sys_score_do_by"><![CDATA[Voted by]]></string>
-	<string name="_sys_score_err_not_enabled"><![CDATA[The feature is not available right now. Please, try again later.]]></string>
+    <string name="_sys_request_module_not_found_cpt"><![CDATA[Module was not found]]></string>
+    <string name="_sys_request_module_not_found_cnt"><![CDATA[Module({0}) was not found]]></string>
+    <string name="_sys_request_page_not_found_cpt"><![CDATA[Page was not found]]></string>
+    <string name="_sys_request_page_not_found_cnt"><![CDATA[Page({0}) was not found in module({1})]]></string>
+    <string name="_sys_request_method_not_found_cpt"><![CDATA[Method was not found]]></string>
+    <string name="_sys_request_method_not_found_cnt"><![CDATA[Method({0}) was not found in module({1})]]></string>
+    <string name="_sys_score_counter"><![CDATA[{0}]]></string>
+    <string name="_sys_score_counter_empty"><![CDATA[Vote]]></string>
+    <string name="_sys_score_n_score"><![CDATA[{0} score]]></string>
+    <string name="_sys_score_do_up"><![CDATA[Up]]></string>
+    <string name="_sys_score_do_down"><![CDATA[Down]]></string>
+    <string name="_sys_score_do_by"><![CDATA[Voted by]]></string>
+    <string name="_sys_score_err_not_enabled"><![CDATA[The feature is not available right now. Please, try again later.]]></string>
     <string name="_sys_score_err_duplicate_vote"><![CDATA[Duplicate vote]]></string>
-	<string name="_sys_search_main_title"><![CDATA[Search Home]]></string>
-	<string name="_sys_select"><![CDATA[Select]]></string>
-	<string name="_sys_send"><![CDATA[Send]]></string>
+    <string name="_sys_search_main_title"><![CDATA[Search Home]]></string>
+    <string name="_sys_select"><![CDATA[Select]]></string>
+    <string name="_sys_send"><![CDATA[Send]]></string>
     <string name="_sys_search_placeholder"><![CDATA[Search...]]></string>
-	<string name="_sys_show_less"><![CDATA[Show less]]></string>    
-        <string name="_sys_show_more"><![CDATA[Show more]]></string>    
-	<string name="_sys_spam_detected"><![CDATA[Your activity triggered automated block]]></string>
-	<string name="_sys_spam_detected_contact"><![CDATA[Your activity triggered automated block, please contact us to investigate: {0}]]></string>
-	<string name="_sys_splash_btn_start"><![CDATA[Start]]></string>
-	<string name="_sys_splash_err_domain_incorrect"><![CDATA[Domain is essential. Please, fill in this field, for example, my-first-site.]]></string>
-	<string name="_sys_splash_err_domain_is_used"><![CDATA[The domain name is already used. Try to select another one.]]></string>
-	<string name="_sys_splash_err_service_not_available"><![CDATA[The service is currently not available. Try it later, please.]]></string>
-	<string name="_sys_splash_inp_placeholder"><![CDATA[site address]]></string>
-	<string name="_sys_splash_inp_postfix"><![CDATA[.online.me]]></string>
-	<string name="_sys_splash_slogan"><![CDATA[The easiest way to create your own social website.]]></string>
-        <string name="_sys_status"><![CDATA[Status]]></string>
-        <string name="_sys_status_awaiting"><![CDATA[awaiting]]></string>
-        <string name="_sys_status_failed"><![CDATA[failed]]></string>
-        <string name="_sys_status_pending"><![CDATA[pending]]></string>
-        <string name="_sys_status_suspended"><![CDATA[suspended]]></string>
-	<string name="_sys_storage_err_db"><![CDATA[database error]]></string>
-	<string name="_sys_storage_err_engine_add"><![CDATA[error occurred]]></string>
-	<string name="_sys_storage_err_engine_get"><![CDATA[error occurred]]></string>
-	<string name="_sys_storage_err_file_not_found"><![CDATA[file not found]]></string>
-	<string name="_sys_storage_err_file_too_big"><![CDATA[file is too big]]></string>
-	<string name="_sys_storage_err_filesystem_perm"><![CDATA[permissions error]]></string>
-	<string name="_sys_storage_err_no_file"><![CDATA[no file to upload]]></string>
-	<string name="_sys_storage_err_no_input_method"><![CDATA[so such input method available]]></string>
-	<string name="_sys_storage_err_object_quota_exceeded"><![CDATA[quota exceeded]]></string>
-	<string name="_sys_storage_err_permission_denied"><![CDATA[permission denied]]></string>
-	<string name="_sys_storage_err_site_quota_exceeded"><![CDATA[quota exceeded]]></string>
-	<string name="_sys_storage_err_unlink"><![CDATA[file deletion failed]]></string>
-	<string name="_sys_storage_err_user_quota_exceeded"><![CDATA[user quota exceeded]]></string>
-	<string name="_sys_storage_err_wrong_ext"><![CDATA[wrong file extension]]></string>
-        <string name="_sys_storage_files"><![CDATA[file(s)]]></string>
-	<string name="_sys_storage_invalid_file"><![CDATA[file is invalid]]></string>
-	<string name="_sys_storage_restriction_ext_all_allowed"><![CDATA[Wow, files of all types are allowed!]]></string>
-	<string name="_sys_storage_restriction_ext_all_denied"><![CDATA[Sorry, adding all file types is currently restricted.]]></string>
-	<string name="_sys_storage_restriction_ext_allowed"><![CDATA[Please, upload only files of these types: {0}]]></string>
-	<string name="_sys_storage_restriction_ext_denied"><![CDATA[You may upload any types of files except for {0}]]></string>
-	<string name="_sys_storage_restriction_size"><![CDATA[Maximum file size limit is {0}]]></string>
-	<string name="_sys_switch_profile"><![CDATA[Switch profile]]></string>
-	<string name="_sys_submit"><![CDATA[Submit]]></string>
-	<string name="_sys_subscribe"><![CDATA[Follow]]></string>
-        <string name="_sys_template_mixed_mask"><![CDATA[{0} ({1})]]></string>
+    <string name="_sys_search_or_ask_placeholder"><![CDATA[Search or ask...]]></string>
+    <string name="_sys_show_less"><![CDATA[Show less]]></string>    
+    <string name="_sys_show_more"><![CDATA[Show more]]></string>    
+    <string name="_sys_spam_detected"><![CDATA[Your activity triggered automated block]]></string>
+    <string name="_sys_spam_detected_contact"><![CDATA[Your activity triggered automated block, please contact us to investigate: {0}]]></string>
+    <string name="_sys_splash_btn_start"><![CDATA[Start]]></string>
+    <string name="_sys_splash_err_domain_incorrect"><![CDATA[Domain is essential. Please, fill in this field, for example, my-first-site.]]></string>
+    <string name="_sys_splash_err_domain_is_used"><![CDATA[The domain name is already used. Try to select another one.]]></string>
+    <string name="_sys_splash_err_service_not_available"><![CDATA[The service is currently not available. Try it later, please.]]></string>
+    <string name="_sys_splash_inp_placeholder"><![CDATA[site address]]></string>
+    <string name="_sys_splash_inp_postfix"><![CDATA[.online.me]]></string>
+    <string name="_sys_splash_slogan"><![CDATA[The easiest way to create your own social website.]]></string>
+    <string name="_sys_status"><![CDATA[Status]]></string>
+    <string name="_sys_status_awaiting"><![CDATA[awaiting]]></string>
+    <string name="_sys_status_failed"><![CDATA[failed]]></string>
+    <string name="_sys_status_pending"><![CDATA[pending]]></string>
+    <string name="_sys_status_suspended"><![CDATA[suspended]]></string>
+    <string name="_sys_storage_err_db"><![CDATA[database error]]></string>
+    <string name="_sys_storage_err_engine_add"><![CDATA[error occurred]]></string>
+    <string name="_sys_storage_err_engine_get"><![CDATA[error occurred]]></string>
+    <string name="_sys_storage_err_file_not_found"><![CDATA[file not found]]></string>
+    <string name="_sys_storage_err_file_too_big"><![CDATA[file is too big]]></string>
+    <string name="_sys_storage_err_filesystem_perm"><![CDATA[permissions error]]></string>
+    <string name="_sys_storage_err_no_file"><![CDATA[no file to upload]]></string>
+    <string name="_sys_storage_err_no_input_method"><![CDATA[so such input method available]]></string>
+    <string name="_sys_storage_err_object_quota_exceeded"><![CDATA[quota exceeded]]></string>
+    <string name="_sys_storage_err_permission_denied"><![CDATA[permission denied]]></string>
+    <string name="_sys_storage_err_site_quota_exceeded"><![CDATA[quota exceeded]]></string>
+    <string name="_sys_storage_err_unlink"><![CDATA[file deletion failed]]></string>
+    <string name="_sys_storage_err_user_quota_exceeded"><![CDATA[user quota exceeded]]></string>
+    <string name="_sys_storage_err_wrong_ext"><![CDATA[wrong file extension]]></string>
+    <string name="_sys_storage_files"><![CDATA[file(s)]]></string>
+    <string name="_sys_storage_invalid_file"><![CDATA[file is invalid]]></string>
+    <string name="_sys_storage_restriction_ext_all_allowed"><![CDATA[Wow, files of all types are allowed!]]></string>
+    <string name="_sys_storage_restriction_ext_all_denied"><![CDATA[Sorry, adding all file types is currently restricted.]]></string>
+    <string name="_sys_storage_restriction_ext_allowed"><![CDATA[Please, upload only files of these types: {0}]]></string>
+    <string name="_sys_storage_restriction_ext_denied"><![CDATA[You may upload any types of files except for {0}]]></string>
+    <string name="_sys_storage_restriction_size"><![CDATA[Maximum file size limit is {0}]]></string>
+    <string name="_sys_switch_profile"><![CDATA[Switch profile]]></string>
+    <string name="_sys_submit"><![CDATA[Submit]]></string>
+    <string name="_sys_subscribe"><![CDATA[Follow]]></string>
+    <string name="_sys_template_mixed_mask"><![CDATA[{0} ({1})]]></string>
 
-	<string name="_sys_tour_launcher_welcome_title"><![CDATA[Welcome to UNA Studio!]]></string>
-	<string name="_sys_tour_launcher_welcome_txt"><![CDATA[Studio is where you customise your site; add and manage apps; control languages and design; set membership levels and permissions; build pages and navigation, and a lot more. You are now in Studio Launcher.]]></string>
-	<string name="_sys_tour_launcher_apps_title"><![CDATA[Add and manage Apps]]></string>
-	<string name="_sys_tour_launcher_apps_txt"><![CDATA[Apps are modules, languages, tools, templates - all the bits and pieces that make your site unique. You can download and install Apps and they will appear in Studio Launcher. Apps add and change functionality of your site.]]></string>
-	<string name="_sys_tour_launcher_designer_title"><![CDATA[Start making your site special]]></string>
+    <string name="_sys_tour_launcher_welcome_title"><![CDATA[Welcome to UNA Studio!]]></string>
+    <string name="_sys_tour_launcher_welcome_txt"><![CDATA[Studio is where you customise your site; add and manage apps; control languages and design; set membership levels and permissions; build pages and navigation, and a lot more. You are now in Studio Launcher.]]></string>
+    <string name="_sys_tour_launcher_apps_title"><![CDATA[Add and manage Apps]]></string>
+    <string name="_sys_tour_launcher_apps_txt"><![CDATA[Apps are modules, languages, tools, templates - all the bits and pieces that make your site unique. You can download and install Apps and they will appear in Studio Launcher. Apps add and change functionality of your site.]]></string>
+    <string name="_sys_tour_launcher_designer_title"><![CDATA[Start making your site special]]></string>
     <string name="_sys_tour_launcher_designer_txt"><![CDATA[Designer is the best place to start customisation. Change the site logo, choose design template and manage the “Cover Page”. Your site now shows Cover Page to all guest visitors. You can either customise it to turn it off to display a full homepage with content of your choice.]]></string>
     <string name="_sys_tour_launcher_accounts_title"><![CDATA[You are more than Admin]]></string>
     <string name="_sys_tour_launcher_accounts_txt"><![CDATA[UNA content and profiles are controlled by Admins and Moderators right on the site front-end, so you don’t have to worry about that in Studio. You do need to appoint your Admins and Moderators, though. And this is where you do it. If you also want to be the site Admin, just create your profile use “Set Membership” to upgrade it.]]></string>
-	<string name="_sys_tour_launcher_dashboard_title"><![CDATA[One look and you know it]]></string>
-	<string name="_sys_tour_launcher_dashboard_txt"><![CDATA[Dashboard gives a quick overview of the site status. UNA version, space usage, hosting tools and cache.  Different Apps will add their blocks to Dashboard.]]></string>
-	<string name="_sys_tour_launcher_builder_page_title"><![CDATA[Build your site the way you want it]]></string>
-	<string name="_sys_tour_launcher_builder_page_txt"><![CDATA[Pages allow you to edit the site by rearranging, adding and removing blocks on site pages. You can even create new custom pages of different types. You can also control visibility settings, SEO data, cacheing and page layouts.]]></string>
-	<string name="_sys_tour_launcher_builder_permissions_title"><![CDATA[Define who can do what]]></string>
-	<string name="_sys_tour_launcher_builder_permissions_txt"><![CDATA[Create and edit Membership Levels and associated Actions permissions.]]></string>
-	<string name="_sys_tour_launcher_builder_forms_title"><![CDATA[Form and re-form your forms]]></string>
-	<string name="_sys_tour_launcher_builder_forms_txt"><![CDATA[Forms builder is a powerful tool that allows deep customisation of site database and forms. You can create and manage data lists, form fields and even display types (like Add/Edit/Delete). Your Forms will define the structure and theme of the site.]]></string>
-	<string name="_sys_tour_launcher_builder_menus_title"><![CDATA[Show them around]]></string>
-	<string name="_sys_tour_launcher_builder_menus_txt"><![CDATA[Add and manage site navigation menus. You can edit links, re-order them, add new ones, change icons and control visibility according to membership permissions.]]></string>
-	<string name="_sys_tour_launcher_polyglot_title"><![CDATA[Speak their language]]></string>
-	<string name="_sys_tour_launcher_polyglot_txt"><![CDATA["If you talk to a man in a language he understands, that goes to his head. If you talk to him in his language, that goes to his heart." Polyglot allows you to set site language and data format, edit site texts in all installed languages and even translate email templates.]]></string>
-	<string name="_sys_tour_launcher_reorganize_title"><![CDATA[Move the Apps around]]></string>
-	<string name="_sys_tour_launcher_reorganize_txt"><![CDATA[Activate reorganisation mode to rearrange Apps in Launcher or delete inactive ones altogether.]]></string>
-	<string name="_sys_tour_launcher_favourites_title"><![CDATA[Choose wisely]]></string>
-	<string name="_sys_tour_launcher_favourites_txt"><![CDATA[Your Studio may have hundreds of installed Apps. Choose the ones you access most often and use the Star to bring them up.]]></string>
-	<string name="_sys_tour_launcher_add_apps_title"><![CDATA[Now DO add new Apps!]]></string>
-	<string name="_sys_tour_launcher_add_apps_txt"><![CDATA[UNA comes with only a handful of core Apps. Choose, download and install Apps to add profiles types, modules, system tools, plugins, languages and design templates. You can activate and deactivate installed Apps. UNA is super-modular and incredibly flexible, letting you choose your own combination of functionality, settings and database structure to make the social site of your dreams real. Even without changing anything you will have the perfectly functioning social site!]]></string>
+    <string name="_sys_tour_launcher_dashboard_title"><![CDATA[One look and you know it]]></string>
+    <string name="_sys_tour_launcher_dashboard_txt"><![CDATA[Dashboard gives a quick overview of the site status. UNA version, space usage, hosting tools and cache.  Different Apps will add their blocks to Dashboard.]]></string>
+    <string name="_sys_tour_launcher_builder_page_title"><![CDATA[Build your site the way you want it]]></string>
+    <string name="_sys_tour_launcher_builder_page_txt"><![CDATA[Pages allow you to edit the site by rearranging, adding and removing blocks on site pages. You can even create new custom pages of different types. You can also control visibility settings, SEO data, cacheing and page layouts.]]></string>
+    <string name="_sys_tour_launcher_builder_permissions_title"><![CDATA[Define who can do what]]></string>
+    <string name="_sys_tour_launcher_builder_permissions_txt"><![CDATA[Create and edit Membership Levels and associated Actions permissions.]]></string>
+    <string name="_sys_tour_launcher_builder_forms_title"><![CDATA[Form and re-form your forms]]></string>
+    <string name="_sys_tour_launcher_builder_forms_txt"><![CDATA[Forms builder is a powerful tool that allows deep customisation of site database and forms. You can create and manage data lists, form fields and even display types (like Add/Edit/Delete). Your Forms will define the structure and theme of the site.]]></string>
+    <string name="_sys_tour_launcher_builder_menus_title"><![CDATA[Show them around]]></string>
+    <string name="_sys_tour_launcher_builder_menus_txt"><![CDATA[Add and manage site navigation menus. You can edit links, re-order them, add new ones, change icons and control visibility according to membership permissions.]]></string>
+    <string name="_sys_tour_launcher_polyglot_title"><![CDATA[Speak their language]]></string>
+    <string name="_sys_tour_launcher_polyglot_txt"><![CDATA["If you talk to a man in a language he understands, that goes to his head. If you talk to him in his language, that goes to his heart." Polyglot allows you to set site language and data format, edit site texts in all installed languages and even translate email templates.]]></string>
+    <string name="_sys_tour_launcher_reorganize_title"><![CDATA[Move the Apps around]]></string>
+    <string name="_sys_tour_launcher_reorganize_txt"><![CDATA[Activate reorganisation mode to rearrange Apps in Launcher or delete inactive ones altogether.]]></string>
+    <string name="_sys_tour_launcher_favourites_title"><![CDATA[Choose wisely]]></string>
+    <string name="_sys_tour_launcher_favourites_txt"><![CDATA[Your Studio may have hundreds of installed Apps. Choose the ones you access most often and use the Star to bring them up.]]></string>
+    <string name="_sys_tour_launcher_add_apps_title"><![CDATA[Now DO add new Apps!]]></string>
+    <string name="_sys_tour_launcher_add_apps_txt"><![CDATA[UNA comes with only a handful of core Apps. Choose, download and install Apps to add profiles types, modules, system tools, plugins, languages and design templates. You can activate and deactivate installed Apps. UNA is super-modular and incredibly flexible, letting you choose your own combination of functionality, settings and database structure to make the social site of your dreams real. Even without changing anything you will have the perfectly functioning social site!]]></string>
 
-	<string name="_sys_tour_homepage_welcome_title"><![CDATA[This is the Homepage]]></string>
-	<string name="_sys_tour_homepage_welcome_txt"><![CDATA[At first there isn't much here. Install more Apps via Studio, add more blocks via Studio > Pages > Homepage, create profiles, appoint admins, post some content and your site will come alive!]]></string>
-	<string name="_sys_tour_homepage_account_menu_title"><![CDATA[Get to know your Account Menu]]></string>
-	<string name="_sys_tour_homepage_account_menu_txt"><![CDATA[Add and manage profiles, check notifications, access account settings. Admins and Moderators can use it to access Dash with links to site content and profiles management.]]></string>
+    <string name="_sys_tour_homepage_welcome_title"><![CDATA[This is the Homepage]]></string>
+    <string name="_sys_tour_homepage_welcome_txt"><![CDATA[At first there isn't much here. Install more Apps via Studio, add more blocks via Studio > Pages > Homepage, create profiles, appoint admins, post some content and your site will come alive!]]></string>
+    <string name="_sys_tour_homepage_account_menu_title"><![CDATA[Get to know your Account Menu]]></string>
+    <string name="_sys_tour_homepage_account_menu_txt"><![CDATA[Add and manage profiles, check notifications, access account settings. Admins and Moderators can use it to access Dash with links to site content and profiles management.]]></string>
 
     <string name="_sys_txt_api_key"><![CDATA[API Key]]></string>
     <string name="_sys_txt_access_denied"><![CDATA[Access denied]]></string>

+ 76 - 66
modules/boonex/russian/data/langs/system/ru.xml

@@ -1508,6 +1508,8 @@
     <string name="_adm_stg_cpt_category_social_settings"><![CDATA[Социальные]]></string>
     <string name="_adm_stg_cpt_category_api_general"><![CDATA[Общие]]></string>
     <string name="_adm_stg_cpt_category_api_layout"><![CDATA[Планировка]]></string>
+    <string name="_adm_stg_cpt_category_agents_general"><![CDATA[Общие]]></string>
+    <string name="_adm_stg_cpt_category_agents_usage"><![CDATA[Применение]]></string>
     <string name="_adm_stg_cpt_option_client_image_resize_width"><![CDATA[Изменять ширину картинки перед загрузкой (0 - отключить)]]></string>
     <string name="_adm_stg_cpt_option_client_image_resize_height"><![CDATA[Изменять высоту картинки перед загрузкой (0 - отключить)]]></string>    
     <string name="_adm_stg_cpt_option_currency_code"><![CDATA[Код валюты (для платёжных систем)]]></string>
@@ -1683,7 +1685,7 @@
     <string name="_adm_stg_cpt_option_sys_template_cache_minify_js_enable"><![CDATA[Задействовать уменьшение для файлов JS (кэш должен быть задействован)]]></string>
     <string name="_adm_stg_cpt_option_sys_transcoder_queue_storage"><![CDATA[Удалённая раскодировка видео (требуется дополнительная настройка)]]></string>
     <string name="_adm_stg_cpt_option_sys_session_lifetime_in_min"><![CDATA[Время жизни сессии (в минутах)]]></string>
-    <string name="_adm_stg_cpt_option_sys_live_search_limit"><![CDATA[Количество реузьтатов в live поиске]]></string>
+    <string name="_adm_stg_cpt_option_sys_live_search_limit"><![CDATA[Количество реузьтатов в интерактивном поиске]]></string>
     <string name="_adm_stg_cpt_option_sys_profiles_search_limit"><![CDATA[Количество реузьтатов в поиске профилей]]></string>
     <string name="_adm_stg_cpt_option_sys_session_auth"><![CDATA[Аутентификация через сессию]]></string>
     <string name="_adm_stg_cpt_option_sys_default_curl_timeout"><![CDATA[cURL - Таймаут по умолчанию]]></string>
@@ -1744,7 +1746,9 @@
     <string name="_adm_stg_cpt_option_sys_agents_api_key"><![CDATA[API-ключ по умолчанию]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_model"><![CDATA[Модель по умолчанию]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_url"><![CDATA[URL конечной точки]]></string>
-    <string name="_adm_stg_cpt_option_sys_agents_profile"><![CDATA[Профиль]]></string>   
+    <string name="_adm_stg_cpt_option_sys_agents_profile"><![CDATA[Профиль]]></string>
+    <string name="_adm_stg_cpt_option_sys_agents_asst_chats_trans_del"><![CDATA[Автоматическое удаление временных чатов каждый день]]></string>
+    <string name="_adm_stg_cpt_option_sys_agents_lsa"><![CDATA[Помощник для интерактивного поиска]]></string>
     <string name="_adm_stg_cpt_option_sys_viewport_meta_tag"><![CDATA[Метатег области просмотра]]></string>
 
     <string name="_adm_stg_cpt_category_pwa_manifest"><![CDATA[Manifest]]></string>
@@ -2216,6 +2220,7 @@
         <string name="_sys_agents_assistants_txt_codes_onclick"><![CDATA[onClick код для ссылки]]></string>
         <string name="_sys_agents_assistants_txt_codes_button"><![CDATA[HTML-код кнопки]]></string>
         <string name="_sys_agents_assistants_txt_add_knowledge"><![CDATA[Добавить знания]]></string>
+        <string name="_sys_agents_assistants_txt_ask"><![CDATA[Спросить]]></string>
         <string name="_sys_agents_assistants_btn_add"><![CDATA[Добавить ассистента]]></string>
         <string name="_sys_agents_assistants_btn_chats"><![CDATA[Чаты]]></string>
         <string name="_sys_agents_assistants_btn_files"><![CDATA[Файлы]]></string>
@@ -2231,6 +2236,9 @@
         <string name="_sys_agents_assistants_popup_add"><![CDATA[Добавить ассистента]]></string>
         <string name="_sys_agents_assistants_popup_edit"><![CDATA[Редактировать ассистента]]></string>
         <string name="_sys_agents_assistants_chats_txt_name"><![CDATA[Название]]></string>
+        <string name="_sys_agents_assistants_chats_txt_type"><![CDATA[Тип]]></string>
+        <string name="_sys_agents_assistants_chats_txt_type_1"><![CDATA[Постоянный]]></string>
+        <string name="_sys_agents_assistants_chats_txt_type_10"><![CDATA[Временный]]></string>
         <string name="_sys_agents_assistants_chats_txt_description"><![CDATA[Описание]]></string>
         <string name="_sys_agents_assistants_chats_txt_messages"><![CDATA[Сообщений]]></string>
         <string name="_sys_agents_assistants_chats_txt_added"><![CDATA[Добавлено]]></string>
@@ -2264,6 +2272,7 @@
         <string name="_sys_agents_assistants_field_kwg_faq_q"><![CDATA[Вопрос]]></string>
         <string name="_sys_agents_assistants_field_kwg_faq_a"><![CDATA[Ответ]]></string>
         <string name="_sys_agents_assistants_popup_add_knowledge"><![CDATA[Добавить знания]]></string>
+        <string name="_sys_agents_assistants_popup_ask"><![CDATA[Ask Assistant]]></string>
         <string name="_sys_agents_assistants_msg_knowledge_added"><![CDATA[Знания были добавлены.]]></string>
 
   <string name="_sys_audit_content_info_popup_title"><![CDATA[Информация]]></string>
@@ -3715,79 +3724,80 @@
     <string name="_sys_select"><![CDATA[Выбрать]]></string>
     <string name="_sys_send"><![CDATA[Отправить]]></string>
     <string name="_sys_search_placeholder"><![CDATA[Поиск...]]></string>
+    <string name="_sys_search_or_ask_placeholder"><![CDATA[Поиск или вопрос...]]></string>
     <string name="_sys_show_less"><![CDATA[Показать меньше]]></string>
     <string name="_sys_show_more"><![CDATA[Показать ещё]]></string>
-	<string name="_sys_spam_detected"><![CDATA[Ваше действие привело к блокировке]]></string>
-	<string name="_sys_spam_detected_contact"><![CDATA[Ваше действие привело к блокировке, сзяжитесь с нами для проверки происходящего: {0}]]></string>
-	<string name="_sys_splash_btn_start"><![CDATA[Начало]]></string>
-	<string name="_sys_splash_err_domain_incorrect"><![CDATA[Нужно указать домен. Пожалуйста, заполните это поле, например, my-first-site.]]></string>
-	<string name="_sys_splash_err_domain_is_used"><![CDATA[Имя домена уже используется. Выберите другое.]]></string>
-	<string name="_sys_splash_err_service_not_available"><![CDATA[Сервис сейчас не доступен. Попытайтесь позднее.]]></string>
-	<string name="_sys_splash_inp_placeholder"><![CDATA[адрес сайта]]></string>
-	<string name="_sys_splash_inp_postfix"><![CDATA[.online.me]]></string>
-	<string name="_sys_splash_slogan"><![CDATA[Самый простой способ создать свой собственный социальный сайт.]]></string>
-        <string name="_sys_status"><![CDATA[Статус]]></string>
-        <string name="_sys_status_awaiting"><![CDATA[ожидающий]]></string>
-        <string name="_sys_status_failed"><![CDATA[неудавшийся]]></string>
-        <string name="_sys_status_pending"><![CDATA[ожидающий]]></string>
-        <string name="_sys_status_suspended"><![CDATA[заблокированный]]></string>
-	<string name="_sys_storage_err_db"><![CDATA[ошибка базы данных]]></string>
-	<string name="_sys_storage_err_engine_add"><![CDATA[произошла ошибка]]></string>
-	<string name="_sys_storage_err_engine_get"><![CDATA[произошла ошибка]]></string>
-	<string name="_sys_storage_err_file_not_found"><![CDATA[файл не найден]]></string>
-	<string name="_sys_storage_err_file_too_big"><![CDATA[файл слишком большой]]></string>
-	<string name="_sys_storage_err_filesystem_perm"><![CDATA[ошибка в разрешениях]]></string>
-	<string name="_sys_storage_err_no_file"><![CDATA[не выбран файл для загрузки]]></string>
-	<string name="_sys_storage_err_no_input_method"><![CDATA[нет такого метода ввода]]></string>
-	<string name="_sys_storage_err_object_quota_exceeded"><![CDATA[квота превышена]]></string>
-	<string name="_sys_storage_err_permission_denied"><![CDATA[нет разрешения]]></string>
-	<string name="_sys_storage_err_site_quota_exceeded"><![CDATA[квота превышена]]></string>
-	<string name="_sys_storage_err_unlink"><![CDATA[не удалось удалить файл]]></string>
-	<string name="_sys_storage_err_user_quota_exceeded"><![CDATA[квота пользователя превышена]]></string>
-	<string name="_sys_storage_err_wrong_ext"><![CDATA[неправильное расширение файла]]></string>
-        <string name="_sys_storage_files"><![CDATA[файл(ов)]]></string>
-	<string name="_sys_storage_invalid_file"><![CDATA[неправильный файл]]></string>
-	<string name="_sys_storage_restriction_ext_all_allowed"><![CDATA[Ого, разрешены файлы всех типов!]]></string>
-	<string name="_sys_storage_restriction_ext_all_denied"><![CDATA[Извините, добавление файлов любого вида сейчас запрещено.]]></string>
-	<string name="_sys_storage_restriction_ext_allowed"><![CDATA[Пожалуйста, загружайте файлы только следующих типов: {0}]]></string>
-	<string name="_sys_storage_restriction_ext_denied"><![CDATA[Вы можете загружать любые типы файлов, кроме {0}]]></string>
-	<string name="_sys_storage_restriction_size"><![CDATA[Максимальный разрешённый размер файла {0}]]></string>
-	<string name="_sys_switch_profile"><![CDATA[Переключить профиль]]></string>
-	<string name="_sys_submit"><![CDATA[Выполнить]]></string>
-	<string name="_sys_subscribe"><![CDATA[Получать уведомления]]></string>
-        <string name="_sys_template_mixed_mask"><![CDATA[{0} ({1})]]></string>
+    <string name="_sys_spam_detected"><![CDATA[Ваше действие привело к блокировке]]></string>
+    <string name="_sys_spam_detected_contact"><![CDATA[Ваше действие привело к блокировке, сзяжитесь с нами для проверки происходящего: {0}]]></string>
+    <string name="_sys_splash_btn_start"><![CDATA[Начало]]></string>
+    <string name="_sys_splash_err_domain_incorrect"><![CDATA[Нужно указать домен. Пожалуйста, заполните это поле, например, my-first-site.]]></string>
+    <string name="_sys_splash_err_domain_is_used"><![CDATA[Имя домена уже используется. Выберите другое.]]></string>
+    <string name="_sys_splash_err_service_not_available"><![CDATA[Сервис сейчас не доступен. Попытайтесь позднее.]]></string>
+    <string name="_sys_splash_inp_placeholder"><![CDATA[адрес сайта]]></string>
+    <string name="_sys_splash_inp_postfix"><![CDATA[.online.me]]></string>
+    <string name="_sys_splash_slogan"><![CDATA[Самый простой способ создать свой собственный социальный сайт.]]></string>
+    <string name="_sys_status"><![CDATA[Статус]]></string>
+    <string name="_sys_status_awaiting"><![CDATA[ожидающий]]></string>
+    <string name="_sys_status_failed"><![CDATA[неудавшийся]]></string>
+    <string name="_sys_status_pending"><![CDATA[ожидающий]]></string>
+    <string name="_sys_status_suspended"><![CDATA[заблокированный]]></string>
+    <string name="_sys_storage_err_db"><![CDATA[ошибка базы данных]]></string>
+    <string name="_sys_storage_err_engine_add"><![CDATA[произошла ошибка]]></string>
+    <string name="_sys_storage_err_engine_get"><![CDATA[произошла ошибка]]></string>
+    <string name="_sys_storage_err_file_not_found"><![CDATA[файл не найден]]></string>
+    <string name="_sys_storage_err_file_too_big"><![CDATA[файл слишком большой]]></string>
+    <string name="_sys_storage_err_filesystem_perm"><![CDATA[ошибка в разрешениях]]></string>
+    <string name="_sys_storage_err_no_file"><![CDATA[не выбран файл для загрузки]]></string>
+    <string name="_sys_storage_err_no_input_method"><![CDATA[нет такого метода ввода]]></string>
+    <string name="_sys_storage_err_object_quota_exceeded"><![CDATA[квота превышена]]></string>
+    <string name="_sys_storage_err_permission_denied"><![CDATA[нет разрешения]]></string>
+    <string name="_sys_storage_err_site_quota_exceeded"><![CDATA[квота превышена]]></string>
+    <string name="_sys_storage_err_unlink"><![CDATA[не удалось удалить файл]]></string>
+    <string name="_sys_storage_err_user_quota_exceeded"><![CDATA[квота пользователя превышена]]></string>
+    <string name="_sys_storage_err_wrong_ext"><![CDATA[неправильное расширение файла]]></string>
+    <string name="_sys_storage_files"><![CDATA[файл(ов)]]></string>
+    <string name="_sys_storage_invalid_file"><![CDATA[неправильный файл]]></string>
+    <string name="_sys_storage_restriction_ext_all_allowed"><![CDATA[Ого, разрешены файлы всех типов!]]></string>
+    <string name="_sys_storage_restriction_ext_all_denied"><![CDATA[Извините, добавление файлов любого вида сейчас запрещено.]]></string>
+    <string name="_sys_storage_restriction_ext_allowed"><![CDATA[Пожалуйста, загружайте файлы только следующих типов: {0}]]></string>
+    <string name="_sys_storage_restriction_ext_denied"><![CDATA[Вы можете загружать любые типы файлов, кроме {0}]]></string>
+    <string name="_sys_storage_restriction_size"><![CDATA[Максимальный разрешённый размер файла {0}]]></string>
+    <string name="_sys_switch_profile"><![CDATA[Переключить профиль]]></string>
+    <string name="_sys_submit"><![CDATA[Выполнить]]></string>
+    <string name="_sys_subscribe"><![CDATA[Получать уведомления]]></string>
+    <string name="_sys_template_mixed_mask"><![CDATA[{0} ({1})]]></string>
 
-	<string name="_sys_tour_launcher_welcome_title"><![CDATA[Добро пожаловать в UNA Студию!]]></string>
-	<string name="_sys_tour_launcher_welcome_txt"><![CDATA[Студия это место, где можно настроить свой сайт: добавлять приложения и управлять ими; управлять языками и изменять дизайн; контролировать уровни доступа для пользователей; настраивать страницы и навигацию, а также многое другое. Текущая страница - стартовый экран Студии.]]></string>
-	<string name="_sys_tour_launcher_apps_title"><![CDATA[Добавь новые приложения]]></string>
-	<string name="_sys_tour_launcher_apps_txt"><![CDATA[Приложения это модули, языковые переводы, инструменты, различные дизайны сайта - кирпичики из которых складывается твой уникальный сайт. После скачивания и установки проложения, оно появляется на этой страничке. Приложения дополняют и изменяют функциональность сайта.]]></string>
-	<string name="_sys_tour_launcher_designer_title"><![CDATA[Сделай сайт особенным]]></string>
+    <string name="_sys_tour_launcher_welcome_title"><![CDATA[Добро пожаловать в UNA Студию!]]></string>
+    <string name="_sys_tour_launcher_welcome_txt"><![CDATA[Студия это место, где можно настроить свой сайт: добавлять приложения и управлять ими; управлять языками и изменять дизайн; контролировать уровни доступа для пользователей; настраивать страницы и навигацию, а также многое другое. Текущая страница - стартовый экран Студии.]]></string>
+    <string name="_sys_tour_launcher_apps_title"><![CDATA[Добавь новые приложения]]></string>
+    <string name="_sys_tour_launcher_apps_txt"><![CDATA[Приложения это модули, языковые переводы, инструменты, различные дизайны сайта - кирпичики из которых складывается твой уникальный сайт. После скачивания и установки проложения, оно появляется на этой страничке. Приложения дополняют и изменяют функциональность сайта.]]></string>
+    <string name="_sys_tour_launcher_designer_title"><![CDATA[Сделай сайт особенным]]></string>
     <string name="_sys_tour_launcher_designer_txt"><![CDATA[Дизайнер - это лучшее место, чтобы начать изменять свой сайт. Поменяйте логотоп сайта, выберете дизайн и отредактируйте "Обложку сайта". Сайт сейчас показывает "Обложку" для всех гостей сайта. Можно отредактировать её, или просто отключить, тогда гостям будет показываться полноценная главная страница, как для зарегестрированных пользователей.]]></string>
     <string name="_sys_tour_launcher_accounts_title"><![CDATA[Больше чем администратор]]></string>
     <string name="_sys_tour_launcher_accounts_txt"><![CDATA[Администраторы и модераторы могут управлять профилями и их содержимым, это не обязательно должно быть в Студии, куда имеет доступ только оператор сайта. Все что нужно, это назначить права для администраторов и модераторов в "Разрешениях". Чтобы назначить профилю права администратора или модератора, нужно перейти в профиль и нажать "Назначить членство".]]></string>    
-	<string name="_sys_tour_launcher_dashboard_title"><![CDATA[Основная информация под рукой]]></string>
-	<string name="_sys_tour_launcher_dashboard_txt"><![CDATA["Приборная панель" показывает основную информацию о сайте: версию UNA, использование места, инструменты хостинга и кэш. Различные проложения могут добавлять свои блоки на эту страничку.]]></string>
-	<string name="_sys_tour_launcher_builder_page_title"><![CDATA[Перестрой свой сайт под себя]]></string>
-	<string name="_sys_tour_launcher_builder_page_txt"><![CDATA[Построитель страниц позволяет редактировать страницы перемещая, удаляя и добавляя секции на конкретной странице. Можно даже создавать новые страницы различного вида. Также можно контролировать доступ к странице, поисковую оптимизацию, кэш и дизайн страницы.]]></string>
+    <string name="_sys_tour_launcher_dashboard_title"><![CDATA[Основная информация под рукой]]></string>
+    <string name="_sys_tour_launcher_dashboard_txt"><![CDATA["Приборная панель" показывает основную информацию о сайте: версию UNA, использование места, инструменты хостинга и кэш. Различные проложения могут добавлять свои блоки на эту страничку.]]></string>
+    <string name="_sys_tour_launcher_builder_page_title"><![CDATA[Перестрой свой сайт под себя]]></string>
+    <string name="_sys_tour_launcher_builder_page_txt"><![CDATA[Построитель страниц позволяет редактировать страницы перемещая, удаляя и добавляя секции на конкретной странице. Можно даже создавать новые страницы различного вида. Также можно контролировать доступ к странице, поисковую оптимизацию, кэш и дизайн страницы.]]></string>
     <string name="_sys_tour_launcher_builder_permissions_title"><![CDATA[Определи уровни доступа пользователей]]></string>
     <string name="_sys_tour_launcher_builder_permissions_txt"><![CDATA[Возможно редактировать уровни доступа для членств и создавать новые членства.]]></string>
-	<string name="_sys_tour_launcher_builder_forms_title"><![CDATA[Формируй и переформируй формы]]></string>
-	<string name="_sys_tour_launcher_builder_forms_txt"><![CDATA[Построитель форм это мощный инструмент, который позволяет менять формы сайта и базы данных. Возможно создавать списки, новые поля для форм и различные представления одной и той-же формы (такие как добавление, редактирование и др.). Формы определяют структуру и тему Вашего сайта.]]></string>
-	<string name="_sys_tour_launcher_builder_menus_title"><![CDATA[Показывай что угодно]]></string>
-	<string name="_sys_tour_launcher_builder_menus_txt"><![CDATA[Добавляй новые пункты в навигационное меню и меняй существующие. Возможно редактировать ссылки, передвигать их, менять иконки, а также контролировать видимость пунктов в зависимости от членства пользователя.]]></string>
-	<string name="_sys_tour_launcher_polyglot_title"><![CDATA[Говори на их языке]]></string>
-	<string name="_sys_tour_launcher_polyglot_txt"><![CDATA["Величайшее богатство народа — его язык". Полиглот позволяет поменять язык сайта, формат даты и времени, редактировать слова и фразы для всех языков и даже редактировать шаблоны писем.]]></string>
-	<string name="_sys_tour_launcher_reorganize_title"><![CDATA[<i class="sys-icon move"></i> Реорганизуй приложения]]></string>
-	<string name="_sys_tour_launcher_reorganize_txt"><![CDATA[Активируй этот режим, чтобы передвигать приложения и удалять неактивные.]]></string>
-	<string name="_sys_tour_launcher_favourites_title"><![CDATA[<i class="sys-icon star"></i> Выбери лучшие]]></string>
-	<string name="_sys_tour_launcher_favourites_txt"><![CDATA[В Студии может быть сотни приложений, выбери те, которыми пользуешся чаще всего. Их можно отфильтровать нажав на иконку звезды.]]></string>
-	<string name="_sys_tour_launcher_add_apps_title"><![CDATA[<i class="sys-icon plus"></i> А сейчас, добавь новые приложения!]]></string>
-	<string name="_sys_tour_launcher_add_apps_txt"><![CDATA[В UNA уже входят самые необходимые приложения. Выбери нужные, скачай и затем проинсталлируй приложения, чтобы добавить разные виды профайлов, модулей, системных утилит, языков и дизайнов. Проинсталлированные приложения можно активировать и деактивировать. UNA очень гибкий и имеет модульную архитектуру, тем самым позволяя создать сайт мечты выбрав нужную функциональность, настройки и структуру базы данных. Но даже не меняя ничего вы получите прекрасно фунционирующий сайт!]]></string>
+    <string name="_sys_tour_launcher_builder_forms_title"><![CDATA[Формируй и переформируй формы]]></string>
+    <string name="_sys_tour_launcher_builder_forms_txt"><![CDATA[Построитель форм это мощный инструмент, который позволяет менять формы сайта и базы данных. Возможно создавать списки, новые поля для форм и различные представления одной и той-же формы (такие как добавление, редактирование и др.). Формы определяют структуру и тему Вашего сайта.]]></string>
+    <string name="_sys_tour_launcher_builder_menus_title"><![CDATA[Показывай что угодно]]></string>
+    <string name="_sys_tour_launcher_builder_menus_txt"><![CDATA[Добавляй новые пункты в навигационное меню и меняй существующие. Возможно редактировать ссылки, передвигать их, менять иконки, а также контролировать видимость пунктов в зависимости от членства пользователя.]]></string>
+    <string name="_sys_tour_launcher_polyglot_title"><![CDATA[Говори на их языке]]></string>
+    <string name="_sys_tour_launcher_polyglot_txt"><![CDATA["Величайшее богатство народа — его язык". Полиглот позволяет поменять язык сайта, формат даты и времени, редактировать слова и фразы для всех языков и даже редактировать шаблоны писем.]]></string>
+    <string name="_sys_tour_launcher_reorganize_title"><![CDATA[<i class="sys-icon move"></i> Реорганизуй приложения]]></string>
+    <string name="_sys_tour_launcher_reorganize_txt"><![CDATA[Активируй этот режим, чтобы передвигать приложения и удалять неактивные.]]></string>
+    <string name="_sys_tour_launcher_favourites_title"><![CDATA[<i class="sys-icon star"></i> Выбери лучшие]]></string>
+    <string name="_sys_tour_launcher_favourites_txt"><![CDATA[В Студии может быть сотни приложений, выбери те, которыми пользуешся чаще всего. Их можно отфильтровать нажав на иконку звезды.]]></string>
+    <string name="_sys_tour_launcher_add_apps_title"><![CDATA[<i class="sys-icon plus"></i> А сейчас, добавь новые приложения!]]></string>
+    <string name="_sys_tour_launcher_add_apps_txt"><![CDATA[В UNA уже входят самые необходимые приложения. Выбери нужные, скачай и затем проинсталлируй приложения, чтобы добавить разные виды профайлов, модулей, системных утилит, языков и дизайнов. Проинсталлированные приложения можно активировать и деактивировать. UNA очень гибкий и имеет модульную архитектуру, тем самым позволяя создать сайт мечты выбрав нужную функциональность, настройки и структуру базы данных. Но даже не меняя ничего вы получите прекрасно фунционирующий сайт!]]></string>
 
-	<string name="_sys_tour_homepage_welcome_title"><![CDATA[Это главная страница сайта]]></string>
-	<string name="_sys_tour_homepage_welcome_txt"><![CDATA[В самом начале, тут не много информации, но после инсталляции нескольких модулей, добавлении дополнительных секций на страницу из Студии и добавлении содержимого - сайт оживёт!]]></string>
-	<string name="_sys_tour_homepage_account_menu_title"><![CDATA[Узнай меню своей учётной записи]]></string>
-	<string name="_sys_tour_homepage_account_menu_txt"><![CDATA[Здесь можно добавлять и управлять профилями, следить за уведомлениями, открывать настройки своей учётной записи. Администраторы и модераторы сайта могут использовать это меню, чтобы открыть приборную панель со ссылками по администрации сайта.]]></string>
+    <string name="_sys_tour_homepage_welcome_title"><![CDATA[Это главная страница сайта]]></string>
+    <string name="_sys_tour_homepage_welcome_txt"><![CDATA[В самом начале, тут не много информации, но после инсталляции нескольких модулей, добавлении дополнительных секций на страницу из Студии и добавлении содержимого - сайт оживёт!]]></string>
+    <string name="_sys_tour_homepage_account_menu_title"><![CDATA[Узнай меню своей учётной записи]]></string>
+    <string name="_sys_tour_homepage_account_menu_txt"><![CDATA[Здесь можно добавлять и управлять профилями, следить за уведомлениями, открывать настройки своей учётной записи. Администраторы и модераторы сайта могут использовать это меню, чтобы открыть приборную панель со ссылками по администрации сайта.]]></string>
 
     <string name="_sys_txt_api_key"><![CDATA[Ключ API]]></string>
     <string name="_sys_txt_access_denied"><![CDATA[Доступ запрещён]]></string>

+ 1 - 17
studio/classes/BxDolStudioAgentsAsstChatsCmts.php

@@ -91,23 +91,7 @@ class BxDolStudioAgentsAsstChatsCmts extends BxTemplCmts
         if(empty($aAssistant) || !is_array($aAssistant))
             return MsgBox(_t('_error occured'));
 
-        $sAssistant = $this->_oTemplate->parseHtmlByName('agents_assistant_info.html', [
-            'assistant_name' => $aAssistant['name'],
-            'assistant_info' => $aAssistant['description'],
-            'bx_if:show_chat' => [
-                'condition' => true,
-                'content' => [
-                    'chat_name' => $aChat['name'],
-                    'chat_info' => $aChat['description'],
-                ]
-            ],
-            'url_back' => $this->_sAssistantUrl
-        ]);
-
-        return [
-            $sAssistant,
-            $aComments['content']
-        ];
+        return $aComments['content'];
     }
 
     public function getFormBoxPost($aBp = [], $aDp = [])

+ 44 - 20
studio/template/scripts/BxBaseStudioAgents.php

@@ -74,6 +74,7 @@ class BxBaseStudioAgents extends BxDolStudioAgents
     {
         $oOptions = new BxTemplStudioOptions(BX_DOL_STUDIO_STG_TYPE_DEFAULT, [
             'agents_general',
+            'agents_usage',
         ]);
 
         $this->aPageCss = array_merge($this->aPageCss, $oOptions->getCss());
@@ -89,16 +90,17 @@ class BxBaseStudioAgents extends BxDolStudioAgents
         $this->aPageJsOptions['sPageUrl'] .= 'automators';
 
         if(($iId = bx_get('id')) !== false) {
-            $this->aPageJsOptions = array_merge($this->aPageJsOptions, [
-                'sPageUrl' => $this->sSubpageUrl . 'automators&id=' . $iId,
-                'sActionUrlCmts' => bx_append_url_params(BX_DOL_URL_ROOT . 'cmts.php', [
-                    'sys' => $sCmts,
-                    'id' => $iId
-                ])
-            ]);
+            if(($oCmts = BxDolAI::getInstance()->getAutomatorCmtsObject($iId, $oTemplate)) !== false) {
+                $this->aPageJsOptions = array_merge($this->aPageJsOptions, [
+                    'sPageUrl' => $this->sSubpageUrl . 'automators&id=' . $iId,
+                    'sActionUrlCmts' => bx_append_url_params(BX_DOL_URL_ROOT . 'cmts.php', [
+                        'sys' => $oCmts->getSystemName(),
+                        'id' => $iId
+                    ])
+                ]);
 
-            if(($oCmts = BxDolAI::getInstance()->getAutomatorCmtsObject($iId, $oTemplate)) !== false)
                 return $oCmts->getCommentsBlock();
+            }
             else
                 return MsgBox(_t('_error occured'));
         }
@@ -156,20 +158,42 @@ class BxBaseStudioAgents extends BxDolStudioAgents
             $iChatId = bx_process_input($iChatId, BX_DATA_INT);
 
         if($iAssistantId && $iChatId) {
-            $sCmts = 'sys_agents_assistants_chats';
+            $aResult = [];
 
-            $this->aPageJsOptions = array_merge($this->aPageJsOptions, [
-                'sPageUrl' => $this->sSubpageUrl . 'assistants&aid=' . $iAssistantId . '&cid=' . $iChatId,
-                'sActionUrlCmts' => bx_append_url_params(BX_DOL_URL_ROOT . 'cmts.php', [
-                    'sys' => $sCmts,
-                    'id' => $iChatId
-                ])
-            ]);
+            $sAssistantUrl = $this->sSubpageUrl . 'assistants&spage=chats&aid=' . $iAssistantId;
+            $aAssistant = $oAi->getAssistantById($iAssistantId);
+            if(!empty($aAssistant) && is_array($aAssistant)) {
+                $aChat = $oAi->getAssistantChatById($iChatId);
+                if(!empty($aChat) && is_array($aChat))
+                    $aResult[] = $oTemplate->parseHtmlByName('agents_assistant_info.html', [
+                        'assistant_name' => $aAssistant['name'],
+                        'assistant_info' => $aAssistant['description'],
+                        'bx_if:show_chat' => [
+                            'condition' => true,
+                            'content' => [
+                                'chat_name' => $aChat['name'],
+                                'chat_info' => $aChat['description'],
+                            ]
+                        ],
+                        'url_back' => $sAssistantUrl
+                    ]);
+            }
 
-            if(($oCmts = $oAi->getAssistantChatCmtsObject($iChatId, $oTemplate)) !== false)
-                return $oCmts->getCommentsBlock();
+            if(($oCmts = $oAi->getAssistantChatCmtsObject($iChatId, $oTemplate)) !== false) {
+                $this->aPageJsOptions = array_merge($this->aPageJsOptions, [
+                    'sPageUrl' => $sAssistantUrl . '&cid=' . $iChatId,
+                    'sActionUrlCmts' => bx_append_url_params(BX_DOL_URL_ROOT . 'cmts.php', [
+                        'sys' => $oCmts->getSystemName(),
+                        'id' => $iChatId
+                    ])
+                ]);
+
+                $aResult[] = $oCmts->getCommentsBlock();
+            }
             else
-                return MsgBox(_t('_error occured'));
+                $aResult[] = MsgBox(_t('_error occured'));
+
+            return $aResult;
         }
         else if($iAssistantId) {
             $aResult = [];
@@ -191,7 +215,7 @@ class BxBaseStudioAgents extends BxDolStudioAgents
             
             switch($sSubPage) {
                 case 'chats':
-                    $aResult[] = $this->getGrid($this->aGridObjects[BX_DOL_STUDIO_AGENTS_TYPE_ASSISTANTS . '_chats']);//['caption' => '123', 'content' => $this->getGrid($this->aGridObjects[BX_DOL_STUDIO_AGENTS_TYPE_ASSISTANTS . '_chats'])];
+                    $aResult[] = $this->getGrid($this->aGridObjects[BX_DOL_STUDIO_AGENTS_TYPE_ASSISTANTS . '_chats']);
                     break;
 
                 case 'files':

+ 2 - 7
studio/template/scripts/BxBaseStudioAgentsAssistants.php

@@ -41,7 +41,7 @@ class BxBaseStudioAgentsAssistants extends BxDolStudioAgentsAssistants
             $aValsToAdd = ['added' => time()];
 
             $sName = $oForm->getCleanValue($this->_sFieldName);
-            $sName = $this->_getAssistantName($sName);
+            $sName = BxDolAIAssistant::getName($sName);
             BxDolForm::setSubmittedValue($this->_sFieldName, $sName, $oForm->aFormAttrs['method']);
 
             $iProfileId = $oForm->getCleanValue('profile_id');
@@ -95,7 +95,7 @@ class BxBaseStudioAgentsAssistants extends BxDolStudioAgentsAssistants
 
             $sName = $oForm->getCleanValue($this->_sFieldName);
             if($aHelper[$this->_sFieldName] != $sName) {
-                $sName = $this->_getAssistantName($sName);
+                $sName = BxDolAIAssistant::getName($sName);
                 BxDolForm::setSubmittedValue($this->_sFieldName, $sName, $oForm->aFormAttrs['method']);
             }
 
@@ -363,11 +363,6 @@ class BxBaseStudioAgentsAssistants extends BxDolStudioAgentsAssistants
 
         return $iId;
     }
-
-    protected function _getAssistantName($sName)
-    {
-        return uriGenerate($sName, 'sys_agents_assistants', 'name', ['lowercase' => false]);
-    }
 }
 
 /** @} */

+ 11 - 22
studio/template/scripts/BxBaseStudioAgentsAsstChats.php

@@ -39,7 +39,7 @@ class BxBaseStudioAgentsAsstChats extends BxDolStudioAgentsAsstChats
             $aValsToAdd = ['assistant_id' => $this->_iAssistantId, 'added' => time()];
 
             $sName = $oForm->getCleanValue($this->_sFieldName);
-            $sName = $this->_getChatName($sName);
+            $sName = BxDolAIAssistant::getChatName($sName);
             BxDolForm::setSubmittedValue($this->_sFieldName, $sName, $oForm->aFormAttrs['method']);
 
             if(($iId = $oForm->insert($aValsToAdd)) !== false)
@@ -77,7 +77,7 @@ class BxBaseStudioAgentsAsstChats extends BxDolStudioAgentsAsstChats
 
             $sName = $oForm->getCleanValue($this->_sFieldName);
             if($aChat[$this->_sFieldName] != $sName) {
-                $sName = $this->_getChatName($sName);
+                $sName = BxDolAIAssistant::getChatName($sName);
                 BxDolForm::setSubmittedValue($this->_sFieldName, $sName, $oForm->aFormAttrs['method']);
             }
 
@@ -173,6 +173,11 @@ class BxBaseStudioAgentsAsstChats extends BxDolStudioAgentsAsstChats
         echoJson(['grid' => $this->getCode(false), 'blink' => $iId]);
     }
 
+    protected function _getCellType($mixedValue, $sKey, $aField, $aRow)
+    {
+        return parent::_getCellDefault(_t('_sys_agents_assistants_chats_txt_type_' . $mixedValue), $sKey, $aField, $aRow);
+    }
+
     protected function _getCellAdded($mixedValue, $sKey, $aField, $aRow)
     {
         return parent::_getCellDefault(bx_time_js($mixedValue), $sKey, $aField, $aRow);
@@ -232,26 +237,15 @@ class BxBaseStudioAgentsAsstChats extends BxDolStudioAgentsAsstChats
 
     protected function _delete ($mixedId)
     {
-        $iChatId = (int)$mixedId;
-        $aChat = $this->_oDb->getChatsBy(['sample' => 'id', 'id' => $iChatId]);
-        $aAssistant = $this->_oDb->getAssistantsBy(['sample' => 'id', 'id' => $aChat['assistant_id']]);
+        $aChat = $this->_oDb->getChatsBy(['sample' => 'id', 'id' => (int)$mixedId]);
 
         $mixedResult = parent::_delete($mixedId);
-        if($mixedResult) {
-            $oAi = BxDolAI::getInstance();
-            $oAIModel = $oAi->getModelObject($aAssistant['model_id']);
-
-            if(($oCmts = $oAi->getAssistantChatCmtsObject($iChatId)) !== false)
-                $oCmts->onObjectDelete();
-
-            if(!empty($aChat['ai_file_id'])) {
-                $oAIModel->callVectorStoresFilesDelete($aAssistant['ai_vs_id'], $aChat['ai_file_id']);
-                $oAIModel->callFilesDelete($aChat['ai_file_id']);
-            }
-        }
+        if($mixedResult)
+            BxDolAIAssistant::getObjectInstance($aChat['assistant_id'])->deleteChat($aChat);
 
         return $mixedResult;
     }
+
     protected function _getFormEdit($sAction, $aChat = [])
     {
         $aForm = $this->_getForm($sAction, $aChat);
@@ -342,11 +336,6 @@ class BxBaseStudioAgentsAsstChats extends BxDolStudioAgentsAsstChats
 
         return $iId;
     }
-
-    protected function _getChatName($sName)
-    {
-        return uriGenerate($sName, 'sys_agents_assistants_chats', 'name', ['lowercase' => false]);
-    }
 }
 
 /** @} */

+ 8 - 0
template/agents_comment_content.html

@@ -0,0 +1,8 @@
+<div class="__style_prefix__-body bx-def-vanilla-html bx-def-vh-sm relative mt-2 max-w-none text-clip">
+    __text__
+    <div class="__style_prefix__-body-overflow bx-def-color-bg-box-overflow absolute bottom-0 w-full h-1/5"></div>
+</div>
+<bx_if:show_attached>
+    <div class="__style_prefix__-attached bx-clearfix -mx-1 -mb-1">__attached__</div>
+</bx_if:show_attached>
+<div class="__style_prefix__-counters -mx-1 mt-1">__counters__</div>

+ 3 - 0
template/agents_popup.html

@@ -0,0 +1,3 @@
+<div class="bx-agents-popup">
+    <div class="bx-agents-popup-cnt">__content__</div>
+</div>