fix: harden identity, live access, drafts and setup (review only)

Source-reviewed hardening changes and regression tests. UNBUILT / UNTESTED: not a deployable release. Go formatting, compilation, automated regression tests, full frontend validation and staging acceptance remain required. See docs/hardening/VALIDATION.md. Main remains the original clean snapshot; no upstream Git history imported.
This commit is contained in:
2026-10-16 12:15:20 +00:00
parent e57610a27c
commit 63e0457886
86 changed files with 5174 additions and 1929 deletions

View File

@@ -583,7 +583,12 @@
"startFirstRequest": "Создайте первое обращение",
"openRequestCount": "Открыто {open} из {total}",
"loadConversationsFailed": "Не удалось загрузить список обращений",
"createConversationFailed": "Не удалось создать обращение"
"createConversationFailed": "Не удалось создать обращение",
"dismissedTitle": "Окно чата закрыто",
"dismissedDescription": "Ваше обращение не завершено. Вы можете вернуться и продолжить разговор.",
"returnToChat": "Вернуться в чат",
"sendUnavailable": "Диалог недоступен. Вернитесь к нему или повторите попытку перед отправкой.",
"sendInProgress": "Сообщение уже отправляется."
},
"dashboardHome": {
"rangeToday": "Сегодня",
@@ -3370,8 +3375,8 @@
"statusReady": "Готово к приёму обращений",
"statusNeedsSetup": "Требуется настройка (готово {ready} из {total} шагов)",
"stepsProgress": "Готово {ready} из {total} шагов",
"quickSetupAll": "Настроить всё в 1 клик",
"quickSetupRunning": "Применение настроек...",
"quickSetupAll": "Проверить недостающие настройки",
"quickSetupRunning": "Подготовка плана...",
"quickFixSuccess": "Настройки применены, проверка маршрутизации обновлена",
"refresh": "Проверить снова",
"openSettings": "Открыть настройки",
@@ -3433,7 +3438,9 @@
"channel_no_agent": "Канал не подключен к AI-агенту.",
"channel_agent_disabled": "Канал указывает на отключенного или удаленного AI-агента.",
"channel_zero_rollout": "У канала охват AI-агента равен 0%.",
"no_end_to_end_path": "Ни один канал не может доставить запрос до доступного оператора прямо сейчас."
"no_end_to_end_path": "Ни один канал не может доставить запрос до доступного оператора прямо сейчас.",
"agent_unpublished": "У агента нет опубликованной версии. Опубликуйте его в настройках перед использованием в канале.",
"channel_agent_unpublished": "Канал связан с неопубликованным агентом. Опубликуйте его или выберите опубликованного агента."
},
"operatorBlockers": {
"not_authenticated": "Вы не вошли в систему.",
@@ -3446,22 +3453,22 @@
"at_capacity": "Вы достигли лимита одновременных диалогов."
},
"quickFixLabels": {
"quick_setup_all": "Настроить всё в 1 клик",
"ensure_team_and_schedule": "Создать/включить команду и расписание 24/7",
"quick_setup_all": "Проверить недостающие настройки",
"ensure_team_and_schedule": "Проверить настройку группы",
"enable_my_operator_profile": "Включить мой приём и статус «Свободен»",
"fix_ai_agent_handoff": "Настроить передачу оператору и привязать команды",
"ensure_default_channel": "Создать/исправить веб-канал по умолчанию"
},
"simulator": {
"title": "Симулятор маршрутизации к оператору",
"description": "Протестируйте путь входящего сообщения клиента через канал и узнайте результат на каждом узле маршрутизации.",
"description": "Проверка текущей доступности маршрута только с оператором без изменений. Поведение ИИ и частичный запуск не моделируются; сообщения не отправляются.",
"selectChannelPlaceholder": "Выберите канал для симуляции...",
"runSimulation": "Запустить симуляцию",
"running": "Симуляция...",
"outcomeSuccess": "Запрос ДОЙДЁТ до оператора: {operator}",
"outcomeBlocked": "Запрос НЕ ДОЙДЁТ до оператора",
"outcomeSuccess": "Сейчас доступен оператор: {operator}",
"outcomeBlocked": "Передача оператору не подтверждена",
"outcomes": {
"assigned_to_operator": "Успех: обращение назначено свободному оператору.",
"assigned_to_operator": "Для маршрута только с оператором сейчас есть подходящий сотрудник. Это проверка без изменений, не гарантия доставки.",
"blocked_no_channel": "Заблокировано: каналы не созданы или запрошенный канал не найден.",
"blocked_channel_disabled": "Заблокировано: данный канал отключен.",
"blocked_zero_rollout": "Заблокировано: охват AI-агента в канале равен 0%.",
@@ -3469,7 +3476,10 @@
"blocked_ai_only_mode": "Заблокировано: AI-агент работает в режиме «Только ИИ» и не переключает на человека.",
"blocked_agent_no_teams": "Заблокировано: у AI-агента не указаны активные команды для перевода.",
"queued_off_hours_no_schedule": "В очереди: у команд сейчас нет активного расписания смен (нерабочие часы).",
"queued_no_eligible_operator": "В очереди: смена активна, но нет свободных операторов с доступной емкостью."
"queued_no_eligible_operator": "В очереди: смена активна, но нет свободных операторов с доступной емкостью.",
"ai_execution_not_simulated": "Поведение ИИ не моделируется; передача оператору не подтверждена.",
"partial_rollout_not_simulated": "Частичный запуск не моделируется; передача оператору не подтверждена.",
"blocked_agent_unpublished": "Маршрутизация к оператору не подтверждена для неопубликованного агента. Сначала опубликуйте его."
},
"hops": {
"channel": "Канал",
@@ -3491,7 +3501,10 @@
"blocked_agent_no_teams": "Агенту не назначены активные команды",
"queued_off_hours_no_schedule": "Нет активного расписания на текущее время (нерабочие часы)",
"queued_no_eligible_operator": "В активных командах нет свободных операторов с доступной емкостью",
"assigned_to_operator": "Назначено подходящему оператору"
"assigned_to_operator": "Назначено подходящему оператору",
"ai_execution_not_simulated": "Поведение ИИ не моделируется; передача оператору не подтверждена.",
"partial_rollout_not_simulated": "Частичный запуск не моделируется; передача оператору не подтверждена.",
"blocked_agent_unpublished": "Маршрутизация к оператору не подтверждена для неопубликованного агента. Сначала опубликуйте его."
},
"candidateTableTitle": "Оценка кандидатов-операторов",
"colOperator": "Оператор",
@@ -3520,6 +3533,53 @@
"headerIndicator": {
"readyLabel": "Приём включен",
"blockedLabel": "Приём заблокирован ({count})"
},
"preview": {
"review": "Просмотреть изменения",
"title": "Проверка изменений перед применением",
"description": "Изменятся только указанные записи и поля. Смены не добавляются. Остальные настройки и доли запуска сохранятся. После сохранения ожидающие диалоги могут быть распределены.",
"noChanges": "Безопасных автоматических изменений нет. Выберите группу, маршрут или рабочие часы в соответствующих настройках.",
"apply": "Применить проверенные изменения",
"create": "Создать",
"update": "Изменить",
"notApplied": "Проверенные изменения не были применены.",
"manageSchedules": "Настроить рабочие часы"
},
"repairFields": {
"name": "Название",
"leader_user_id": "ID руководителя группы",
"status": "Статус (0 включён, 1 отключён)",
"user_id": "ID пользователя",
"team_id": "ID группы / название новой группы",
"team_ids": "Группы маршрутизации",
"service_status": "Доступность (0 свободен, 1 занят)",
"auto_assign_enabled": "Автоматическое назначение",
"max_concurrent_count": "Лимит одновременных диалогов",
"priority_level": "Приоритет назначения",
"receive_offline_message": "Принимать сообщения офлайн",
"service_mode": "Режим (1 только ИИ, 2 только оператор, 3 сначала ИИ)",
"rollout_percent": "Доля запуска агента (%)",
"handoff_mode": "Режим передачи (2 очередь группы)",
"fallback_mode": "Резервный режим",
"auto_handoff_on_failure": "Передавать оператору при сбое",
"reply_timeout_seconds": "Тайм-аут ответа (сек.)",
"max_steps": "Максимум шагов ИИ",
"channel_id": "Идентификатор канала",
"channel_type": "Тип канала",
"ai_agent_id": "ID агента / название нового агента",
"ai_agent_rollout_percent": "Доля запуска канала (%)",
"config_json": "Настройки канала"
},
"repairWarnings": {
"schedules_unchanged": "Рабочие часы не изменены. Настройте смены явно: время вне смены не является ошибкой настройки.",
"active_team_required": "Выберите или включите группу в настройках перед связыванием новых записей.",
"disabled_configuration_preserved": "Выбранная конфигурация отключена или имеет нулевую долю запуска и оставлена без изменений.",
"agent_team_selection_required": "Выберите нужные группы в настройках агента. Группы не добавлялись автоматически.",
"channel_selection_required": "Выберите агента и долю запуска в настройках канала. Существующая маршрутизация сохранена.",
"existing_configuration_preserved": "Существующие настройки сохранены. Проверьте оставшиеся проблемы готовности в соответствующих настройках.",
"dispatch_failed": "Изменения сохранены, но распределение ожидающих диалогов не удалось. Проверьте очередь, не применяйте исправление повторно.",
"readiness_refresh_failed": "Не удалось обновить диагностику. Загрузите её снова: сохранённые изменения не отменены.",
"agent_publication_required": "Опубликуйте нужного агента в его настройках перед созданием канала. Мастер не публикует агентов и не обходит это требование."
}
}
}