@ihazz/bitrix24 1.1.12 → 1.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +77 -4
  2. package/dist/src/api.d.ts +10 -5
  3. package/dist/src/api.d.ts.map +1 -1
  4. package/dist/src/api.js +42 -8
  5. package/dist/src/api.js.map +1 -1
  6. package/dist/src/channel.d.ts +20 -1
  7. package/dist/src/channel.d.ts.map +1 -1
  8. package/dist/src/channel.js +2303 -81
  9. package/dist/src/channel.js.map +1 -1
  10. package/dist/src/i18n.d.ts +1 -0
  11. package/dist/src/i18n.d.ts.map +1 -1
  12. package/dist/src/i18n.js +79 -68
  13. package/dist/src/i18n.js.map +1 -1
  14. package/dist/src/inbound-handler.d.ts +10 -0
  15. package/dist/src/inbound-handler.d.ts.map +1 -1
  16. package/dist/src/inbound-handler.js +281 -16
  17. package/dist/src/inbound-handler.js.map +1 -1
  18. package/dist/src/media-service.d.ts +4 -0
  19. package/dist/src/media-service.d.ts.map +1 -1
  20. package/dist/src/media-service.js +147 -14
  21. package/dist/src/media-service.js.map +1 -1
  22. package/dist/src/message-utils.d.ts.map +1 -1
  23. package/dist/src/message-utils.js +113 -4
  24. package/dist/src/message-utils.js.map +1 -1
  25. package/dist/src/runtime.d.ts +1 -0
  26. package/dist/src/runtime.d.ts.map +1 -1
  27. package/dist/src/runtime.js.map +1 -1
  28. package/dist/src/send-service.d.ts +2 -1
  29. package/dist/src/send-service.d.ts.map +1 -1
  30. package/dist/src/send-service.js +34 -5
  31. package/dist/src/send-service.js.map +1 -1
  32. package/dist/src/state-paths.d.ts +1 -0
  33. package/dist/src/state-paths.d.ts.map +1 -1
  34. package/dist/src/state-paths.js +9 -0
  35. package/dist/src/state-paths.js.map +1 -1
  36. package/dist/src/types.d.ts +92 -0
  37. package/dist/src/types.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/src/api.ts +62 -13
  40. package/src/channel.ts +3746 -843
  41. package/src/i18n.ts +81 -68
  42. package/src/inbound-handler.ts +357 -17
  43. package/src/media-service.ts +185 -15
  44. package/src/message-utils.ts +144 -4
  45. package/src/runtime.ts +1 -0
  46. package/src/send-service.ts +52 -4
  47. package/src/state-paths.ts +11 -0
  48. package/src/types.ts +122 -0
package/src/i18n.ts CHANGED
@@ -21,7 +21,7 @@ function resolve<T>(dict: Record<string, T>, lang: string | undefined): T {
21
21
 
22
22
  const I18N_MEDIA_DOWNLOAD_FAILED: Record<string, (files: string) => string> = {
23
23
  en: (f) => `⚠️ Could not download the file(s): ${f}.\n\nPlease check that the bot is in the required chat and has access to these files.`,
24
- ru: (f) => `⚠️ Не удалось загрузить файлы: ${f}.\n\nПроверьте, что бот состоит в нужном чате и у него есть доступ к этим файлам.`,
24
+ ru: (f) => `⚠️ \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b: ${f}.\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0431\u043e\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0447\u0430\u0442\u0435 \u0438 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u0438\u043c \u0444\u0430\u0439\u043b\u0430\u043c.`,
25
25
  de: (f) => `⚠️ Die Datei(en) konnten nicht heruntergeladen werden: ${f}.\n\nBitte prüfen Sie, ob der Bot im erforderlichen Chat ist und Zugriff auf diese Dateien hat.`,
26
26
  es: (f) => `⚠️ No se pudo descargar el/los archivo(s): ${f}.\n\nCompruebe que el bot este en el chat necesario y tenga acceso a estos archivos.`,
27
27
  fr: (f) => `⚠️ Impossible de telecharger le ou les fichiers : ${f}.\n\nVerifiez que le bot se trouve dans le bon chat et qu il a acces a ces fichiers.`,
@@ -32,11 +32,24 @@ export function mediaDownloadFailed(lang: string | undefined, fileNames: string)
32
32
  return resolve(I18N_MEDIA_DOWNLOAD_FAILED, lang)(fileNames);
33
33
  }
34
34
 
35
+ const I18N_EMPTY_REPLY_FALLBACK: Record<string, string> = {
36
+ en: 'I could not send the reply. Please try again.',
37
+ ru: 'Не удалось отправить ответ. Попробуйте еще раз.',
38
+ de: 'Die Antwort konnte nicht gesendet werden. Bitte versuchen Sie es erneut.',
39
+ es: 'No pude enviar la respuesta. Intentalo de nuevo.',
40
+ fr: 'Je n ai pas pu envoyer la reponse. Veuillez reessayer.',
41
+ pt: 'Nao foi possivel enviar a resposta. Tente novamente.',
42
+ };
43
+
44
+ export function emptyReplyFallback(lang: string | undefined): string {
45
+ return resolve(I18N_EMPTY_REPLY_FALLBACK, lang);
46
+ }
47
+
35
48
  // ─── Group chat unsupported ──────────────────────────────────────────────────
36
49
 
37
50
  const I18N_GROUP_CHAT_UNSUPPORTED: Record<string, string> = {
38
51
  en: 'I work only in a direct chat. Please message me there.',
39
- ru: 'Я работаю только в личном чате. Напишите мне там.',
52
+ ru: '\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u0447\u0430\u0442\u0435. \u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043c\u043d\u0435 \u0442\u0430\u043c.',
40
53
  de: 'Ich arbeite nur in einem direkten Chat. Bitte schreiben Sie mir dort.',
41
54
  es: 'Solo trabajo en un chat personal. Escribame alli.',
42
55
  fr: 'Je travaille uniquement dans un chat direct. Ecrivez-moi la-bas.',
@@ -51,7 +64,7 @@ export function groupChatUnsupported(lang: string | undefined): string {
51
64
 
52
65
  const I18N_PERSONAL_BOT_OWNER_ONLY: Record<string, string> = {
53
66
  en: 'This is a personal bot. Only the bot owner can message it.',
54
- ru: 'Это персональный бот. Писать ему может только владелец.',
67
+ ru: '\u042d\u0442\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043e\u0442. \u041f\u0438\u0441\u0430\u0442\u044c \u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446.',
55
68
  de: 'Dies ist ein persoenlicher Bot. Nur der Bot-Besitzer kann ihm schreiben.',
56
69
  es: 'Este es un bot personal. Solo el propietario del bot puede escribirle.',
57
70
  fr: 'Ce bot est personnel. Seul son proprietaire peut lui ecrire.',
@@ -64,7 +77,7 @@ export function personalBotOwnerOnly(lang: string | undefined): string {
64
77
 
65
78
  const I18N_ACCESS_APPROVED: Record<string, string> = {
66
79
  en: 'Access to the bot has been approved.',
67
- ru: 'Доступ к боту подтвержден.',
80
+ ru: '\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u043e\u0442\u0443 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d.',
68
81
  de: 'Der Zugriff auf den Bot wurde bestaetigt.',
69
82
  es: 'El acceso al bot ha sido aprobado.',
70
83
  fr: 'L acces au bot a ete approuve.',
@@ -77,7 +90,7 @@ export function accessApproved(lang: string | undefined): string {
77
90
 
78
91
  const I18N_OWNER_AND_ALLOWED_USERS_ONLY: Record<string, string> = {
79
92
  en: 'This bot is available only to the bot owner and users with approved access.',
80
- ru: 'Этот бот доступен только владельцу и пользователям с подтвержденным доступом.',
93
+ ru: '\u042d\u0442\u043e\u0442 \u0431\u043e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0441 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c.',
81
94
  de: 'Dieser Bot ist nur fuer den Bot-Besitzer und Benutzer mit bestaetigtem Zugriff verfuegbar.',
82
95
  es: 'Este bot esta disponible solo para el propietario del bot y los usuarios con acceso confirmado.',
83
96
  fr: 'Ce bot est disponible uniquement pour le proprietaire du bot et les utilisateurs disposant d un acces confirme.',
@@ -90,7 +103,7 @@ export function ownerAndAllowedUsersOnly(lang: string | undefined): string {
90
103
 
91
104
  const I18N_ACCESS_DENIED: Record<string, string> = {
92
105
  en: 'You do not have access to this bot.',
93
- ru: 'У вас нет доступа к этому боту.',
106
+ ru: '\u0423 \u0432\u0430\u0441 \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u0442\u0443.',
94
107
  de: 'Sie haben keinen Zugriff auf diesen Bot.',
95
108
  es: 'No tienes acceso a este bot.',
96
109
  fr: 'Vous n avez pas acces a ce bot.',
@@ -103,7 +116,7 @@ export function accessDenied(lang: string | undefined): string {
103
116
 
104
117
  const I18N_GROUP_PAIRING_PENDING: Record<string, string> = {
105
118
  en: 'To use this bot in group chats, access must be approved first. Please ask the bot owner to confirm your Bitrix24 pairing in OpenClaw.',
106
- ru: 'Чтобы пользоваться ботом в групповых чатах, сначала нужно подтвердить доступ. Попросите владельца бота подтвердить вашу привязку Bitrix24 в OpenClaw.',
119
+ ru: '\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u0442\u043e\u043c \u0432 \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u0445 \u0447\u0430\u0442\u0430\u0445, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f. \u041f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0431\u043e\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0432\u0430\u0448\u0443 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 Bitrix24 \u0432 OpenClaw.',
107
120
  de: 'Um diesen Bot in Gruppenchats zu verwenden, muss der Zugriff zuerst bestaetigt werden. Bitten Sie den Bot-Besitzer, Ihr Bitrix24-Pairing in OpenClaw zu bestaetigen.',
108
121
  es: 'Para usar este bot en chats grupales, primero hay que confirmar el acceso. Pida al propietario del bot que confirme su vinculacion de Bitrix24 en OpenClaw.',
109
122
  fr: 'Pour utiliser ce bot dans les chats de groupe, l acces doit d abord etre confirme. Demandez au proprietaire du bot de confirmer votre association Bitrix24 dans OpenClaw.',
@@ -129,11 +142,11 @@ const I18N_WATCH_OWNER_DM_NOTICE: Record<string, (params: {
129
142
  },
130
143
  ru: ({ chatRef, topicsRef, sourceKind }) => {
131
144
  const topicsSuffix = topicsRef
132
- ? ` Совпавшие темы: ${topicsRef}`
145
+ ? ` \u0421\u043e\u0432\u043f\u0430\u0432\u0448\u0438\u0435 \u0442\u0435\u043c\u044b: ${topicsRef}`
133
146
  : '';
134
147
  return sourceKind === 'dm'
135
- ? `Сработало правило отслеживания в личном чате с ${chatRef}.${topicsSuffix}`
136
- : `Сработало правило отслеживания в чате ${chatRef}.${topicsSuffix}`;
148
+ ? `\u0421\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u0447\u0430\u0442\u0435 \u0441 ${chatRef}.${topicsSuffix}`
149
+ : `\u0421\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432 \u0447\u0430\u0442\u0435 ${chatRef}.${topicsSuffix}`;
137
150
  },
138
151
  de: ({ chatRef, topicsRef, sourceKind }) => {
139
152
  const topicsSuffix = topicsRef
@@ -184,7 +197,7 @@ export function watchOwnerDmNotice(
184
197
 
185
198
  const I18N_WELCOME: Record<string, (botName: string) => string> = {
186
199
  en: (n) => `Hi! I'm ${n} — your AI agent in Bitrix24. I can help solve any question or task, find the information you need, and remind you about a meeting. I keep track of context and suggest ready-to-use actions right in the chat. Shall we begin? ✨`,
187
- ru: (n) => `Привет! Я ${n} — ваш AI-агент в Битрикс24. Помогу решить любой вопрос или задачу, найду нужную информацию и напомню о встрече. Учитываю контекст и предлагаю готовые действия прямо в чате. Начнём? ✨`,
200
+ ru: (n) => `\u041f\u0440\u0438\u0432\u0435\u0442! \u042f ${n} — \u0432\u0430\u0448 AI-\u0430\u0433\u0435\u043d\u0442 \u0432 \u0411\u0438\u0442\u0440\u0438\u043a\u044124. \u041f\u043e\u043c\u043e\u0433\u0443 \u0440\u0435\u0448\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443, \u043d\u0430\u0439\u0434\u0443 \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0435. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u0447\u0430\u0442\u0435. \u041d\u0430\u0447\u043d\u0451\u043c? ✨`,
188
201
  de: (n) => `Hallo! Ich bin ${n} — Ihr KI-Agent in Bitrix24. Ich helfe Ihnen bei jeder Frage oder Aufgabe, finde die benoetigten Informationen und erinnere Sie an einen Termin. Ich beruecksichtige den Kontext und schlage direkt im Chat passende Aktionen vor. Legen wir los? ✨`,
189
202
  es: (n) => `¡Hola! Soy ${n} — su agente de IA en Bitrix24. Le ayudare a resolver cualquier pregunta o tarea, encontrar la informacion necesaria y recordarle una reunion. Tengo en cuenta el contexto y propongo acciones listas para usar directamente en el chat. ¿Empezamos? ✨`,
190
203
  fr: (n) => `Bonjour ! Je suis ${n} — votre agent IA dans Bitrix24. Je peux vous aider a resoudre n importe quelle question ou tache, trouver les informations utiles et vous rappeler une reunion. Je tiens compte du contexte et je propose des actions pretes a l emploi directement dans le chat. On commence ? ✨`,
@@ -197,7 +210,7 @@ export function welcomeMessage(lang: string | undefined, botName: string): strin
197
210
 
198
211
  const I18N_PAIRING_WELCOME: Record<string, (botName: string) => string> = {
199
212
  en: (n) => `${n} is ready. Send any message, and I will return a pairing code. Then approve it in OpenClaw with: openclaw pairing approve bitrix24 <CODE>`,
200
- ru: (n) => `${n} готов к работе. Отправьте любое сообщение, и я пришлю код привязки. Затем подтвердите его в OpenClaw командой: openclaw pairing approve bitrix24 <CODE>`,
213
+ ru: (n) => `${n} \u0433\u043e\u0442\u043e\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u041e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043b\u044e\u0431\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0438 \u044f \u043f\u0440\u0438\u0448\u043b\u044e \u043a\u043e\u0434 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438. \u0417\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 OpenClaw \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: openclaw pairing approve bitrix24 <CODE>`,
201
214
  de: (n) => `${n} ist bereit. Senden Sie eine beliebige Nachricht, und ich sende einen Pairing-Code. Bestaetigen Sie ihn danach in OpenClaw mit: openclaw pairing approve bitrix24 <CODE>`,
202
215
  es: (n) => `${n} esta listo. Envie cualquier mensaje y recibira un codigo de vinculacion. Despues, confirmelo en OpenClaw con: openclaw pairing approve bitrix24 <CODE>`,
203
216
  fr: (n) => `${n} est pret. Envoyez n importe quel message et je vous enverrai un code d association. Confirmez-le ensuite dans OpenClaw avec : openclaw pairing approve bitrix24 <CODE>`,
@@ -210,7 +223,7 @@ export function pairingWelcomeMessage(lang: string | undefined, botName: string)
210
223
 
211
224
  const I18N_ONBOARDING_DISCLAIMER: Record<string, string> = {
212
225
  en: 'The agent is an artificial intelligence. Please critically review any important information and the results of its actions, and supervise the agent while it works.',
213
- ru: 'Агент является искусственным интеллектом. Пожалуйста, проверяйте критически важную информацию и результаты его действий, а также контролируйте работу агента.',
226
+ ru: '\u0410\u0433\u0435\u043d\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u043c. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u0433\u0435\u043d\u0442\u0430.',
214
227
  de: 'Der Agent ist eine kuenstliche Intelligenz. Bitte pruefen Sie kritisch alle wichtigen Informationen und die Ergebnisse seiner Aktionen und beaufsichtigen Sie seine Arbeit.',
215
228
  es: 'El agente es una inteligencia artificial. Revise de forma critica cualquier informacion importante y los resultados de sus acciones, y supervise su trabajo.',
216
229
  fr: 'L agent est une intelligence artificielle. Veuillez verifier de facon critique toute information importante et les resultats de ses actions, et superviser son travail.',
@@ -268,12 +281,12 @@ const I18N_COMMAND_GROUP_LABELS: Record<string, Record<CommandGroup, string>> =
268
281
  export: 'Export',
269
282
  },
270
283
  ru: {
271
- status: 'Справка и статус',
272
- session: 'Сессия',
273
- options: 'Параметры',
274
- management: 'Управление',
275
- tools: 'Инструменты',
276
- export: 'Экспорт',
284
+ status: '\u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441',
285
+ session: '\u0421\u0435\u0441\u0441\u0438\u044f',
286
+ options: '\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b',
287
+ management: '\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435',
288
+ tools: '\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b',
289
+ export: '\u042d\u043a\u0441\u043f\u043e\u0440\u0442',
277
290
  },
278
291
  de: {
279
292
  status: 'Hilfe und Status',
@@ -317,10 +330,10 @@ const I18N_COMMAND_HELP_TEXT_LABELS: Record<string, CommandHelpTextLabels> = {
317
330
  paramsLabel: 'Params',
318
331
  },
319
332
  ru: {
320
- conciseHeader: 'Основные команды',
321
- fullHeader: 'Доступные команды',
322
- fullListLabel: 'Полный список',
323
- paramsLabel: 'Параметры',
333
+ conciseHeader: '\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b',
334
+ fullHeader: '\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b',
335
+ fullListLabel: '\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a',
336
+ paramsLabel: '\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b',
324
337
  },
325
338
  de: {
326
339
  conciseHeader: 'Wichtige Befehle',
@@ -382,36 +395,36 @@ const I18N_COMMAND_TEXTS: Record<string, CommandTextMap> = {
382
395
  'export-session': { description: 'Export session to HTML' },
383
396
  },
384
397
  ru: {
385
- help: { description: 'Показать доступные команды' },
386
- commands: { description: 'Показать все команды' },
387
- status: { description: 'Показать текущий статус' },
388
- context: { description: 'Объяснить, как формируется контекст' },
389
- whoami: { description: 'Показать ваш ID' },
390
- usage: { description: 'Использование и стоимость', params: 'off | tokens | full | cost' },
391
- new: { description: 'Начать новую сессию' },
392
- reset: { description: 'Сбросить текущую сессию' },
393
- stop: { description: 'Остановить текущий запуск' },
394
- compact: { description: 'Сжать контекст сессии', params: 'instructions' },
395
- session: { description: 'Настройки сессии', params: 'ttl | ...' },
396
- model: { description: 'Показать или сменить модель', params: 'model name' },
397
- models: { description: 'Показать модели', params: 'provider' },
398
- think: { description: 'Уровень размышлений', params: 'off | low | medium | high' },
399
- verbose: { description: 'Подробный режим', params: 'on | off' },
400
- reasoning: { description: 'Видимость рассуждений', params: 'on | off | stream' },
401
- elevated: { description: 'Режим с расширенными правами', params: 'on | off | ask | full' },
402
- exec: { description: 'Настройки выполнения', params: 'host | security | ask | node' },
403
- queue: { description: 'Настройки очереди', params: 'mode | debounce | cap | drop' },
404
- config: { description: 'Показать или изменить конфигурацию', params: 'show | get | set | unset' },
405
- debug: { description: 'Отладочные настройки', params: 'show | reset | set | unset' },
406
- approve: { description: 'Одобрить или отклонить запросы' },
407
- activation: { description: 'Режим активации в группах', params: 'mention | always' },
408
- send: { description: 'Политика отправки', params: 'on | off | inherit' },
409
- subagents: { description: 'Управление субагентами' },
410
- kill: { description: 'Остановить субагента', params: 'id | all' },
411
- steer: { description: 'Направить субагента', params: 'message' },
412
- skill: { description: 'Запустить навык', params: 'name' },
413
- restart: { description: 'Перезапустить OpenClaw' },
414
- 'export-session': { description: 'Экспорт сессии в HTML' },
398
+ help: { description: '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b' },
399
+ commands: { description: '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b' },
400
+ status: { description: '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441' },
401
+ context: { description: '\u041e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442' },
402
+ whoami: { description: '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u0448 ID' },
403
+ usage: { description: '\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c', params: 'off | tokens | full | cost' },
404
+ new: { description: '\u041d\u0430\u0447\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e' },
405
+ reset: { description: '\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e' },
406
+ stop: { description: '\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a' },
407
+ compact: { description: '\u0421\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0435\u0441\u0441\u0438\u0438', params: 'instructions' },
408
+ session: { description: '\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0441\u0441\u0438\u0438', params: 'ttl | ...' },
409
+ model: { description: '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043b\u0438 \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c', params: 'model name' },
410
+ models: { description: '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438', params: 'provider' },
411
+ think: { description: '\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439', params: 'off | low | medium | high' },
412
+ verbose: { description: '\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c', params: 'on | off' },
413
+ reasoning: { description: '\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439', params: 'on | off | stream' },
414
+ elevated: { description: '\u0420\u0435\u0436\u0438\u043c \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438', params: 'on | off | ask | full' },
415
+ exec: { description: '\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f', params: 'host | security | ask | node' },
416
+ queue: { description: '\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438', params: 'mode | debounce | cap | drop' },
417
+ config: { description: '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e', params: 'show | get | set | unset' },
418
+ debug: { description: '\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438', params: 'show | reset | set | unset' },
419
+ approve: { description: '\u041e\u0434\u043e\u0431\u0440\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b' },
420
+ activation: { description: '\u0420\u0435\u0436\u0438\u043c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0432 \u0433\u0440\u0443\u043f\u043f\u0430\u0445', params: 'mention | always' },
421
+ send: { description: '\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438', params: 'on | off | inherit' },
422
+ subagents: { description: '\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0431\u0430\u0433\u0435\u043d\u0442\u0430\u043c\u0438' },
423
+ kill: { description: '\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0443\u0431\u0430\u0433\u0435\u043d\u0442\u0430', params: 'id | all' },
424
+ steer: { description: '\u041d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0443\u0431\u0430\u0433\u0435\u043d\u0442\u0430', params: 'message' },
425
+ skill: { description: '\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0432\u044b\u043a', params: 'name' },
426
+ restart: { description: '\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c OpenClaw' },
427
+ 'export-session': { description: '\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432 HTML' },
415
428
  },
416
429
  de: {
417
430
  help: { description: 'Verfuegbare Befehle anzeigen' },
@@ -550,9 +563,9 @@ const I18N_MODELS_COMMAND_REPLY_LABELS: Record<string, ModelsCommandReplyLabels>
550
563
  switchModel: 'Switch model',
551
564
  },
552
565
  ru: {
553
- header: 'Провайдеры',
554
- showProviderModels: 'Модели провайдера',
555
- switchModel: 'Сменить модель',
566
+ header: '\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b',
567
+ showProviderModels: '\u041c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430',
568
+ switchModel: '\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c',
556
569
  },
557
570
  de: {
558
571
  header: 'Anbieter',
@@ -582,8 +595,8 @@ const I18N_NEW_SESSION_REPLY_TEXTS: Record<string, NewSessionReplyTexts> = {
582
595
  active: 'You are now in a new session.',
583
596
  },
584
597
  ru: {
585
- started: 'Начата новая сессия.',
586
- active: 'Теперь вы в новой сессии.',
598
+ started: '\u041d\u0430\u0447\u0430\u0442\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f.',
599
+ active: '\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0432 \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438.',
587
600
  },
588
601
  de: {
589
602
  started: 'Neue Sitzung gestartet.',
@@ -686,11 +699,11 @@ const I18N_COMMAND_KEYBOARD_LABELS: Record<string, CommandKeyboardLabels> = {
686
699
  models: 'Models',
687
700
  },
688
701
  ru: {
689
- help: 'Справка',
690
- status: 'Статус',
691
- commands: 'Команды',
692
- newSession: 'Новая сессия',
693
- models: 'Модели',
702
+ help: '\u0421\u043f\u0440\u0430\u0432\u043a\u0430',
703
+ status: '\u0421\u0442\u0430\u0442\u0443\u0441',
704
+ commands: '\u041a\u043e\u043c\u0430\u043d\u0434\u044b',
705
+ newSession: '\u041d\u043e\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f',
706
+ models: '\u041c\u043e\u0434\u0435\u043b\u0438',
694
707
  },
695
708
  de: {
696
709
  help: 'Hilfe',
@@ -735,11 +748,11 @@ const I18N_WELCOME_KEYBOARD_LABELS: Record<string, WelcomeKeyboardLabels> = {
735
748
  commands: 'Commands',
736
749
  },
737
750
  ru: {
738
- todayTasks: 'Задачи на сегодня',
739
- stalledDeals: 'Зависшие сделки',
740
- help: 'Помощь',
741
- newSession: 'Новая сессия',
742
- commands: 'Команды',
751
+ todayTasks: '\u0417\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f',
752
+ stalledDeals: '\u0417\u0430\u0432\u0438\u0441\u0448\u0438\u0435 \u0441\u0434\u0435\u043b\u043a\u0438',
753
+ help: '\u041f\u043e\u043c\u043e\u0449\u044c',
754
+ newSession: '\u041d\u043e\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f',
755
+ commands: '\u041a\u043e\u043c\u0430\u043d\u0434\u044b',
743
756
  },
744
757
  de: {
745
758
  todayTasks: 'Heutige Aufgaben',