@djangocfg/ext-knowbase 1.0.23 → 1.0.25

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 (71) hide show
  1. package/dist/config.cjs +1 -1
  2. package/dist/config.js +1 -1
  3. package/dist/hooks.cjs +118 -118
  4. package/dist/hooks.js +118 -118
  5. package/dist/i18n.cjs +34 -34
  6. package/dist/i18n.js +35 -35
  7. package/dist/index.cjs +84 -84
  8. package/dist/index.js +84 -84
  9. package/package.json +11 -11
  10. package/src/api/generated/ext_knowbase/_utils/fetchers/ext_knowbase__knowbase.ts +114 -47
  11. package/src/api/generated/ext_knowbase/_utils/hooks/ext_knowbase__knowbase.ts +4 -3
  12. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItem.schema.ts +3 -2
  13. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunk.schema.ts +3 -2
  14. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunkDetail.schema.ts +3 -2
  15. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunkRequest.schema.ts +3 -2
  16. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemDetail.schema.ts +3 -2
  17. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemRequest.schema.ts +1 -1
  18. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveProcessingResult.schema.ts +1 -1
  19. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveSearchRequestRequest.schema.ts +1 -1
  20. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveSearchResult.schema.ts +3 -2
  21. package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveStatistics.schema.ts +1 -1
  22. package/src/api/generated/ext_knowbase/_utils/schemas/CfgKnowbaseSystemArchivesCreateRequest.schema.ts +1 -1
  23. package/src/api/generated/ext_knowbase/_utils/schemas/ChatHistory.schema.ts +3 -2
  24. package/src/api/generated/ext_knowbase/_utils/schemas/ChatMessage.schema.ts +3 -2
  25. package/src/api/generated/ext_knowbase/_utils/schemas/ChatQueryRequest.schema.ts +1 -1
  26. package/src/api/generated/ext_knowbase/_utils/schemas/ChatResponse.schema.ts +3 -2
  27. package/src/api/generated/ext_knowbase/_utils/schemas/ChatResponseRequest.schema.ts +3 -2
  28. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSession.schema.ts +1 -1
  29. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSessionCreateRequest.schema.ts +1 -1
  30. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSessionRequest.schema.ts +1 -1
  31. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSource.schema.ts +1 -1
  32. package/src/api/generated/ext_knowbase/_utils/schemas/ChatSourceRequest.schema.ts +1 -1
  33. package/src/api/generated/ext_knowbase/_utils/schemas/ChunkRevectorizationRequestRequest.schema.ts +1 -1
  34. package/src/api/generated/ext_knowbase/_utils/schemas/Document.schema.ts +1 -1
  35. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchive.schema.ts +4 -3
  36. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveDetail.schema.ts +5 -4
  37. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveList.schema.ts +4 -3
  38. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveRequest.schema.ts +1 -1
  39. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCategory.schema.ts +1 -1
  40. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCategoryRequest.schema.ts +1 -1
  41. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCreateRequest.schema.ts +1 -1
  42. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentProcessingStatus.schema.ts +1 -1
  43. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentRequest.schema.ts +1 -1
  44. package/src/api/generated/ext_knowbase/_utils/schemas/DocumentStats.schema.ts +1 -1
  45. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveItemChunkList.schema.ts +3 -2
  46. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveItemList.schema.ts +3 -2
  47. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveSearchResultList.schema.ts +3 -2
  48. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedChatResponseList.schema.ts +3 -2
  49. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedChatSessionList.schema.ts +3 -2
  50. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedDocumentArchiveListList.schema.ts +3 -2
  51. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedDocumentList.schema.ts +3 -2
  52. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedPublicCategoryList.schema.ts +3 -2
  53. package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedPublicDocumentListList.schema.ts +3 -2
  54. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedArchiveItemChunkRequest.schema.ts +3 -2
  55. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedArchiveItemRequest.schema.ts +1 -1
  56. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedChatResponseRequest.schema.ts +3 -2
  57. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedChatSessionRequest.schema.ts +1 -1
  58. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedDocumentArchiveRequest.schema.ts +1 -1
  59. package/src/api/generated/ext_knowbase/_utils/schemas/PatchedDocumentRequest.schema.ts +1 -1
  60. package/src/api/generated/ext_knowbase/_utils/schemas/PublicCategory.schema.ts +1 -1
  61. package/src/api/generated/ext_knowbase/_utils/schemas/PublicDocument.schema.ts +3 -2
  62. package/src/api/generated/ext_knowbase/_utils/schemas/PublicDocumentList.schema.ts +3 -2
  63. package/src/api/generated/ext_knowbase/_utils/schemas/VectorizationResult.schema.ts +1 -1
  64. package/src/api/generated/ext_knowbase/_utils/schemas/VectorizationStatistics.schema.ts +1 -1
  65. package/src/api/generated/ext_knowbase/api-instance.ts +1 -1
  66. package/src/api/generated/ext_knowbase/client.ts +5 -6
  67. package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/client.ts +1 -2
  68. package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/models.ts +1 -1
  69. package/src/api/generated/ext_knowbase/index.ts +6 -8
  70. package/src/api/generated/ext_knowbase/retry.ts +1 -0
  71. package/src/i18n/useKnowbaseT.ts +3 -3
package/dist/config.cjs CHANGED
@@ -27,7 +27,7 @@ var import_ext_base = require("@djangocfg/ext-base");
27
27
  // package.json
28
28
  var package_default = {
29
29
  name: "@djangocfg/ext-knowbase",
30
- version: "1.0.23",
30
+ version: "1.0.25",
31
31
  description: "Knowledge base and chat extension for DjangoCFG",
32
32
  keywords: [
33
33
  "django",
package/dist/config.js CHANGED
@@ -4,7 +4,7 @@ import { createExtensionConfig } from "@djangocfg/ext-base";
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "@djangocfg/ext-knowbase",
7
- version: "1.0.23",
7
+ version: "1.0.25",
8
8
  description: "Knowledge base and chat extension for DjangoCFG",
9
9
  keywords: [
10
10
  "django",
package/dist/hooks.cjs CHANGED
@@ -32,6 +32,89 @@ var __export = (target, all) => {
32
32
  __defProp(target, name, { get: all[name], enumerable: true });
33
33
  };
34
34
 
35
+ // src/api/generated/ext_knowbase/errors.ts
36
+ var APIError = class extends Error {
37
+ constructor(statusCode, statusText, response, url, message) {
38
+ super(message || `HTTP ${statusCode}: ${statusText}`);
39
+ this.statusCode = statusCode;
40
+ this.statusText = statusText;
41
+ this.response = response;
42
+ this.url = url;
43
+ this.name = "APIError";
44
+ }
45
+ /**
46
+ * Get error details from response.
47
+ * DRF typically returns: { "detail": "Error message" } or { "field": ["error1", "error2"] }
48
+ */
49
+ get details() {
50
+ if (typeof this.response === "object" && this.response !== null) {
51
+ return this.response;
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Get field-specific validation errors from DRF.
57
+ * Returns: { "field_name": ["error1", "error2"], ... }
58
+ */
59
+ get fieldErrors() {
60
+ const details = this.details;
61
+ if (!details) return null;
62
+ const fieldErrors = {};
63
+ for (const [key, value] of Object.entries(details)) {
64
+ if (Array.isArray(value)) {
65
+ fieldErrors[key] = value;
66
+ }
67
+ }
68
+ return Object.keys(fieldErrors).length > 0 ? fieldErrors : null;
69
+ }
70
+ /**
71
+ * Get single error message from DRF.
72
+ * Checks for "detail", "message", or first field error.
73
+ */
74
+ get errorMessage() {
75
+ const details = this.details;
76
+ if (!details) return this.message;
77
+ if (details.detail) {
78
+ return Array.isArray(details.detail) ? details.detail.join(", ") : String(details.detail);
79
+ }
80
+ if (details.message) {
81
+ return String(details.message);
82
+ }
83
+ const fieldErrors = this.fieldErrors;
84
+ if (fieldErrors) {
85
+ const firstField = Object.keys(fieldErrors)[0];
86
+ if (firstField) {
87
+ return `${firstField}: ${fieldErrors[firstField]?.join(", ")}`;
88
+ }
89
+ }
90
+ return this.message;
91
+ }
92
+ // Helper methods for common HTTP status codes
93
+ get isValidationError() {
94
+ return this.statusCode === 400;
95
+ }
96
+ get isAuthError() {
97
+ return this.statusCode === 401;
98
+ }
99
+ get isPermissionError() {
100
+ return this.statusCode === 403;
101
+ }
102
+ get isNotFoundError() {
103
+ return this.statusCode === 404;
104
+ }
105
+ get isServerError() {
106
+ return this.statusCode >= 500 && this.statusCode < 600;
107
+ }
108
+ };
109
+ var NetworkError = class extends Error {
110
+ constructor(message, url, originalError) {
111
+ super(message);
112
+ this.url = url;
113
+ this.originalError = originalError;
114
+ this.name = "NetworkError";
115
+ }
116
+ };
117
+
35
118
  // src/api/generated/ext_knowbase/ext_knowbase__knowbase/client.ts
36
119
  var ExtKnowbaseKnowbase = class {
37
120
  client;
@@ -655,89 +738,6 @@ var FetchAdapter = class {
655
738
  };
656
739
  }
657
740
  };
658
-
659
- // src/api/generated/ext_knowbase/errors.ts
660
- var APIError = class extends Error {
661
- constructor(statusCode, statusText, response, url, message) {
662
- super(message || `HTTP ${statusCode}: ${statusText}`);
663
- this.statusCode = statusCode;
664
- this.statusText = statusText;
665
- this.response = response;
666
- this.url = url;
667
- this.name = "APIError";
668
- }
669
- /**
670
- * Get error details from response.
671
- * DRF typically returns: { "detail": "Error message" } or { "field": ["error1", "error2"] }
672
- */
673
- get details() {
674
- if (typeof this.response === "object" && this.response !== null) {
675
- return this.response;
676
- }
677
- return null;
678
- }
679
- /**
680
- * Get field-specific validation errors from DRF.
681
- * Returns: { "field_name": ["error1", "error2"], ... }
682
- */
683
- get fieldErrors() {
684
- const details = this.details;
685
- if (!details) return null;
686
- const fieldErrors = {};
687
- for (const [key, value] of Object.entries(details)) {
688
- if (Array.isArray(value)) {
689
- fieldErrors[key] = value;
690
- }
691
- }
692
- return Object.keys(fieldErrors).length > 0 ? fieldErrors : null;
693
- }
694
- /**
695
- * Get single error message from DRF.
696
- * Checks for "detail", "message", or first field error.
697
- */
698
- get errorMessage() {
699
- const details = this.details;
700
- if (!details) return this.message;
701
- if (details.detail) {
702
- return Array.isArray(details.detail) ? details.detail.join(", ") : String(details.detail);
703
- }
704
- if (details.message) {
705
- return String(details.message);
706
- }
707
- const fieldErrors = this.fieldErrors;
708
- if (fieldErrors) {
709
- const firstField = Object.keys(fieldErrors)[0];
710
- if (firstField) {
711
- return `${firstField}: ${fieldErrors[firstField]?.join(", ")}`;
712
- }
713
- }
714
- return this.message;
715
- }
716
- // Helper methods for common HTTP status codes
717
- get isValidationError() {
718
- return this.statusCode === 400;
719
- }
720
- get isAuthError() {
721
- return this.statusCode === 401;
722
- }
723
- get isPermissionError() {
724
- return this.statusCode === 403;
725
- }
726
- get isNotFoundError() {
727
- return this.statusCode === 404;
728
- }
729
- get isServerError() {
730
- return this.statusCode >= 500 && this.statusCode < 600;
731
- }
732
- };
733
- var NetworkError = class extends Error {
734
- constructor(message, url, originalError) {
735
- super(message);
736
- this.url = url;
737
- this.originalError = originalError;
738
- this.name = "NetworkError";
739
- }
740
- };
741
741
  var DEFAULT_CONFIG = {
742
742
  enabled: process.env.NODE_ENV !== "production",
743
743
  logRequests: true,
@@ -4798,7 +4798,7 @@ var apiKnowbase = api.createExtensionAPI(API);
4798
4798
  // package.json
4799
4799
  var package_default = {
4800
4800
  name: "@djangocfg/ext-knowbase",
4801
- version: "1.0.23",
4801
+ version: "1.0.25",
4802
4802
  description: "Knowledge base and chat extension for DjangoCFG",
4803
4803
  keywords: [
4804
4804
  "django",
@@ -5290,40 +5290,6 @@ var en = {
5290
5290
  }
5291
5291
  };
5292
5292
 
5293
- // src/i18n/locales/ru.ts
5294
- var ru = {
5295
- chat: {
5296
- title: "\u0411\u0430\u0437\u0430 \u0437\u043D\u0430\u043D\u0438\u0439",
5297
- titleShort: "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430",
5298
- placeholder: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441...",
5299
- enterToSend: "Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Shift+Enter \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",
5300
- thinking: "\u0414\u0443\u043C\u0430\u044E...",
5301
- source: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A {index}",
5302
- startConversation: "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440",
5303
- startConversationDescription: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438, \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 \u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u043C\u043E\u0449\u044C \u0441 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C.",
5304
- openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438"
5305
- },
5306
- sessions: {
5307
- title: "\u0421\u0435\u0441\u0441\u0438\u0438 \u0447\u0430\u0442\u0430",
5308
- description: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430",
5309
- noSessions: "\u041D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5310
- noSessionsDescription: "\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E.",
5311
- untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
5312
- active: "\u0410\u043A\u0442\u0438\u0432\u043D\u0430\u044F",
5313
- archive: "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
5314
- delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
5315
- loadingMore: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
5316
- noMore: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5317
- newChat: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"
5318
- },
5319
- actions: {
5320
- sessions: "\u0421\u0435\u0441\u0441\u0438\u0438",
5321
- collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5322
- expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5323
- close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
5324
- }
5325
- };
5326
-
5327
5293
  // src/i18n/locales/ko.ts
5328
5294
  var ko = {
5329
5295
  chat: {
@@ -5358,6 +5324,40 @@ var ko = {
5358
5324
  }
5359
5325
  };
5360
5326
 
5327
+ // src/i18n/locales/ru.ts
5328
+ var ru = {
5329
+ chat: {
5330
+ title: "\u0411\u0430\u0437\u0430 \u0437\u043D\u0430\u043D\u0438\u0439",
5331
+ titleShort: "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430",
5332
+ placeholder: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441...",
5333
+ enterToSend: "Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Shift+Enter \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",
5334
+ thinking: "\u0414\u0443\u043C\u0430\u044E...",
5335
+ source: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A {index}",
5336
+ startConversation: "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440",
5337
+ startConversationDescription: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438, \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 \u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u043C\u043E\u0449\u044C \u0441 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C.",
5338
+ openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438"
5339
+ },
5340
+ sessions: {
5341
+ title: "\u0421\u0435\u0441\u0441\u0438\u0438 \u0447\u0430\u0442\u0430",
5342
+ description: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430",
5343
+ noSessions: "\u041D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5344
+ noSessionsDescription: "\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E.",
5345
+ untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
5346
+ active: "\u0410\u043A\u0442\u0438\u0432\u043D\u0430\u044F",
5347
+ archive: "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
5348
+ delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
5349
+ loadingMore: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
5350
+ noMore: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5351
+ newChat: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"
5352
+ },
5353
+ actions: {
5354
+ sessions: "\u0421\u0435\u0441\u0441\u0438\u0438",
5355
+ collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5356
+ expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5357
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
5358
+ }
5359
+ };
5360
+
5361
5361
  // src/i18n/useKnowbaseT.ts
5362
5362
  var translations = { en, ru, ko };
5363
5363
  function getNestedValue(obj, path) {
package/dist/hooks.js CHANGED
@@ -23,6 +23,89 @@ var __export = (target, all) => {
23
23
  __defProp(target, name, { get: all[name], enumerable: true });
24
24
  };
25
25
 
26
+ // src/api/generated/ext_knowbase/errors.ts
27
+ var APIError = class extends Error {
28
+ constructor(statusCode, statusText, response, url, message) {
29
+ super(message || `HTTP ${statusCode}: ${statusText}`);
30
+ this.statusCode = statusCode;
31
+ this.statusText = statusText;
32
+ this.response = response;
33
+ this.url = url;
34
+ this.name = "APIError";
35
+ }
36
+ /**
37
+ * Get error details from response.
38
+ * DRF typically returns: { "detail": "Error message" } or { "field": ["error1", "error2"] }
39
+ */
40
+ get details() {
41
+ if (typeof this.response === "object" && this.response !== null) {
42
+ return this.response;
43
+ }
44
+ return null;
45
+ }
46
+ /**
47
+ * Get field-specific validation errors from DRF.
48
+ * Returns: { "field_name": ["error1", "error2"], ... }
49
+ */
50
+ get fieldErrors() {
51
+ const details = this.details;
52
+ if (!details) return null;
53
+ const fieldErrors = {};
54
+ for (const [key, value] of Object.entries(details)) {
55
+ if (Array.isArray(value)) {
56
+ fieldErrors[key] = value;
57
+ }
58
+ }
59
+ return Object.keys(fieldErrors).length > 0 ? fieldErrors : null;
60
+ }
61
+ /**
62
+ * Get single error message from DRF.
63
+ * Checks for "detail", "message", or first field error.
64
+ */
65
+ get errorMessage() {
66
+ const details = this.details;
67
+ if (!details) return this.message;
68
+ if (details.detail) {
69
+ return Array.isArray(details.detail) ? details.detail.join(", ") : String(details.detail);
70
+ }
71
+ if (details.message) {
72
+ return String(details.message);
73
+ }
74
+ const fieldErrors = this.fieldErrors;
75
+ if (fieldErrors) {
76
+ const firstField = Object.keys(fieldErrors)[0];
77
+ if (firstField) {
78
+ return `${firstField}: ${fieldErrors[firstField]?.join(", ")}`;
79
+ }
80
+ }
81
+ return this.message;
82
+ }
83
+ // Helper methods for common HTTP status codes
84
+ get isValidationError() {
85
+ return this.statusCode === 400;
86
+ }
87
+ get isAuthError() {
88
+ return this.statusCode === 401;
89
+ }
90
+ get isPermissionError() {
91
+ return this.statusCode === 403;
92
+ }
93
+ get isNotFoundError() {
94
+ return this.statusCode === 404;
95
+ }
96
+ get isServerError() {
97
+ return this.statusCode >= 500 && this.statusCode < 600;
98
+ }
99
+ };
100
+ var NetworkError = class extends Error {
101
+ constructor(message, url, originalError) {
102
+ super(message);
103
+ this.url = url;
104
+ this.originalError = originalError;
105
+ this.name = "NetworkError";
106
+ }
107
+ };
108
+
26
109
  // src/api/generated/ext_knowbase/ext_knowbase__knowbase/client.ts
27
110
  var ExtKnowbaseKnowbase = class {
28
111
  client;
@@ -646,89 +729,6 @@ var FetchAdapter = class {
646
729
  };
647
730
  }
648
731
  };
649
-
650
- // src/api/generated/ext_knowbase/errors.ts
651
- var APIError = class extends Error {
652
- constructor(statusCode, statusText, response, url, message) {
653
- super(message || `HTTP ${statusCode}: ${statusText}`);
654
- this.statusCode = statusCode;
655
- this.statusText = statusText;
656
- this.response = response;
657
- this.url = url;
658
- this.name = "APIError";
659
- }
660
- /**
661
- * Get error details from response.
662
- * DRF typically returns: { "detail": "Error message" } or { "field": ["error1", "error2"] }
663
- */
664
- get details() {
665
- if (typeof this.response === "object" && this.response !== null) {
666
- return this.response;
667
- }
668
- return null;
669
- }
670
- /**
671
- * Get field-specific validation errors from DRF.
672
- * Returns: { "field_name": ["error1", "error2"], ... }
673
- */
674
- get fieldErrors() {
675
- const details = this.details;
676
- if (!details) return null;
677
- const fieldErrors = {};
678
- for (const [key, value] of Object.entries(details)) {
679
- if (Array.isArray(value)) {
680
- fieldErrors[key] = value;
681
- }
682
- }
683
- return Object.keys(fieldErrors).length > 0 ? fieldErrors : null;
684
- }
685
- /**
686
- * Get single error message from DRF.
687
- * Checks for "detail", "message", or first field error.
688
- */
689
- get errorMessage() {
690
- const details = this.details;
691
- if (!details) return this.message;
692
- if (details.detail) {
693
- return Array.isArray(details.detail) ? details.detail.join(", ") : String(details.detail);
694
- }
695
- if (details.message) {
696
- return String(details.message);
697
- }
698
- const fieldErrors = this.fieldErrors;
699
- if (fieldErrors) {
700
- const firstField = Object.keys(fieldErrors)[0];
701
- if (firstField) {
702
- return `${firstField}: ${fieldErrors[firstField]?.join(", ")}`;
703
- }
704
- }
705
- return this.message;
706
- }
707
- // Helper methods for common HTTP status codes
708
- get isValidationError() {
709
- return this.statusCode === 400;
710
- }
711
- get isAuthError() {
712
- return this.statusCode === 401;
713
- }
714
- get isPermissionError() {
715
- return this.statusCode === 403;
716
- }
717
- get isNotFoundError() {
718
- return this.statusCode === 404;
719
- }
720
- get isServerError() {
721
- return this.statusCode >= 500 && this.statusCode < 600;
722
- }
723
- };
724
- var NetworkError = class extends Error {
725
- constructor(message, url, originalError) {
726
- super(message);
727
- this.url = url;
728
- this.originalError = originalError;
729
- this.name = "NetworkError";
730
- }
731
- };
732
732
  var DEFAULT_CONFIG = {
733
733
  enabled: process.env.NODE_ENV !== "production",
734
734
  logRequests: true,
@@ -4789,7 +4789,7 @@ var apiKnowbase = createExtensionAPI(API);
4789
4789
  // package.json
4790
4790
  var package_default = {
4791
4791
  name: "@djangocfg/ext-knowbase",
4792
- version: "1.0.23",
4792
+ version: "1.0.25",
4793
4793
  description: "Knowledge base and chat extension for DjangoCFG",
4794
4794
  keywords: [
4795
4795
  "django",
@@ -5281,40 +5281,6 @@ var en = {
5281
5281
  }
5282
5282
  };
5283
5283
 
5284
- // src/i18n/locales/ru.ts
5285
- var ru = {
5286
- chat: {
5287
- title: "\u0411\u0430\u0437\u0430 \u0437\u043D\u0430\u043D\u0438\u0439",
5288
- titleShort: "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430",
5289
- placeholder: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441...",
5290
- enterToSend: "Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Shift+Enter \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",
5291
- thinking: "\u0414\u0443\u043C\u0430\u044E...",
5292
- source: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A {index}",
5293
- startConversation: "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440",
5294
- startConversationDescription: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438, \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 \u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u043C\u043E\u0449\u044C \u0441 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C.",
5295
- openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438"
5296
- },
5297
- sessions: {
5298
- title: "\u0421\u0435\u0441\u0441\u0438\u0438 \u0447\u0430\u0442\u0430",
5299
- description: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430",
5300
- noSessions: "\u041D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5301
- noSessionsDescription: "\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E.",
5302
- untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
5303
- active: "\u0410\u043A\u0442\u0438\u0432\u043D\u0430\u044F",
5304
- archive: "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
5305
- delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
5306
- loadingMore: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
5307
- noMore: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5308
- newChat: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"
5309
- },
5310
- actions: {
5311
- sessions: "\u0421\u0435\u0441\u0441\u0438\u0438",
5312
- collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5313
- expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5314
- close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
5315
- }
5316
- };
5317
-
5318
5284
  // src/i18n/locales/ko.ts
5319
5285
  var ko = {
5320
5286
  chat: {
@@ -5349,6 +5315,40 @@ var ko = {
5349
5315
  }
5350
5316
  };
5351
5317
 
5318
+ // src/i18n/locales/ru.ts
5319
+ var ru = {
5320
+ chat: {
5321
+ title: "\u0411\u0430\u0437\u0430 \u0437\u043D\u0430\u043D\u0438\u0439",
5322
+ titleShort: "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430",
5323
+ placeholder: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441...",
5324
+ enterToSend: "Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Shift+Enter \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",
5325
+ thinking: "\u0414\u0443\u043C\u0430\u044E...",
5326
+ source: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A {index}",
5327
+ startConversation: "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440",
5328
+ startConversationDescription: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438, \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 \u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u043C\u043E\u0449\u044C \u0441 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C.",
5329
+ openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438"
5330
+ },
5331
+ sessions: {
5332
+ title: "\u0421\u0435\u0441\u0441\u0438\u0438 \u0447\u0430\u0442\u0430",
5333
+ description: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430",
5334
+ noSessions: "\u041D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5335
+ noSessionsDescription: "\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E.",
5336
+ untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
5337
+ active: "\u0410\u043A\u0442\u0438\u0432\u043D\u0430\u044F",
5338
+ archive: "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
5339
+ delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
5340
+ loadingMore: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
5341
+ noMore: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
5342
+ newChat: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"
5343
+ },
5344
+ actions: {
5345
+ sessions: "\u0421\u0435\u0441\u0441\u0438\u0438",
5346
+ collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5347
+ expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
5348
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
5349
+ }
5350
+ };
5351
+
5352
5352
  // src/i18n/useKnowbaseT.ts
5353
5353
  var translations = { en, ru, ko };
5354
5354
  function getNestedValue(obj, path) {
package/dist/i18n.cjs CHANGED
@@ -65,40 +65,6 @@ var en = {
65
65
  }
66
66
  };
67
67
 
68
- // src/i18n/locales/ru.ts
69
- var ru = {
70
- chat: {
71
- title: "\u0411\u0430\u0437\u0430 \u0437\u043D\u0430\u043D\u0438\u0439",
72
- titleShort: "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430",
73
- placeholder: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441...",
74
- enterToSend: "Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Shift+Enter \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",
75
- thinking: "\u0414\u0443\u043C\u0430\u044E...",
76
- source: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A {index}",
77
- startConversation: "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440",
78
- startConversationDescription: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438, \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 \u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u043C\u043E\u0449\u044C \u0441 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C.",
79
- openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438"
80
- },
81
- sessions: {
82
- title: "\u0421\u0435\u0441\u0441\u0438\u0438 \u0447\u0430\u0442\u0430",
83
- description: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430",
84
- noSessions: "\u041D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
85
- noSessionsDescription: "\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E.",
86
- untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
87
- active: "\u0410\u043A\u0442\u0438\u0432\u043D\u0430\u044F",
88
- archive: "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
89
- delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
90
- loadingMore: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
91
- noMore: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
92
- newChat: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"
93
- },
94
- actions: {
95
- sessions: "\u0421\u0435\u0441\u0441\u0438\u0438",
96
- collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
97
- expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
98
- close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
99
- }
100
- };
101
-
102
68
  // src/i18n/locales/ko.ts
103
69
  var ko = {
104
70
  chat: {
@@ -133,6 +99,40 @@ var ko = {
133
99
  }
134
100
  };
135
101
 
102
+ // src/i18n/locales/ru.ts
103
+ var ru = {
104
+ chat: {
105
+ title: "\u0411\u0430\u0437\u0430 \u0437\u043D\u0430\u043D\u0438\u0439",
106
+ titleShort: "\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430",
107
+ placeholder: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u043E\u043F\u0440\u043E\u0441...",
108
+ enterToSend: "Enter \u0434\u043B\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438, Shift+Enter \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",
109
+ thinking: "\u0414\u0443\u043C\u0430\u044E...",
110
+ source: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A {index}",
111
+ startConversation: "\u041D\u0430\u0447\u0430\u0442\u044C \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440",
112
+ startConversationDescription: "\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u043E\u0439 \u0432\u043E\u043F\u0440\u043E\u0441 \u043E \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u0438, \u0444\u0443\u043D\u043A\u0446\u0438\u044F\u0445 \u0438\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u0435 \u043F\u043E\u043C\u043E\u0449\u044C \u0441 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C.",
113
+ openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438"
114
+ },
115
+ sessions: {
116
+ title: "\u0421\u0435\u0441\u0441\u0438\u0438 \u0447\u0430\u0442\u0430",
117
+ description: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438 \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0435\u0439 \u0447\u0430\u0442\u0430",
118
+ noSessions: "\u041D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
119
+ noSessionsDescription: "\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u043D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0435\u0441\u0441\u0438\u044E.",
120
+ untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
121
+ active: "\u0410\u043A\u0442\u0438\u0432\u043D\u0430\u044F",
122
+ archive: "\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
123
+ delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
124
+ loadingMore: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
125
+ noMore: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u0439",
126
+ newChat: "\u041D\u043E\u0432\u044B\u0439 \u0447\u0430\u0442"
127
+ },
128
+ actions: {
129
+ sessions: "\u0421\u0435\u0441\u0441\u0438\u0438",
130
+ collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
131
+ expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
132
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
133
+ }
134
+ };
135
+
136
136
  // src/i18n/useKnowbaseT.ts
137
137
  var translations = { en, ru, ko };
138
138
  function getNestedValue(obj, path) {