@projectcor/maia-components 2.11.53-1 → 2.11.53-10

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 (37) hide show
  1. package/lib/App.js +1 -1
  2. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +4 -9
  3. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +4 -4
  4. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +2 -2
  5. package/lib/components/atoms/MAIAInput/MAIAInput.js +6 -2
  6. package/lib/components/atoms/MAIAInput/styles.js +3 -2
  7. package/lib/components/atoms/icons/FaqChevronIcon.js +39 -0
  8. package/lib/components/atoms/icons/index.js +2 -1
  9. package/lib/components/atoms/index.js +1 -2
  10. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +2 -28
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +11 -19
  12. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +30 -6
  13. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +6 -4
  14. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +22 -4
  15. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +21 -17
  16. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -3
  17. package/lib/components/molecules/Sidebar/Sidebar.js +6 -7
  18. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -2
  19. package/lib/hooks/useChatManager/useChatManager.js +35 -84
  20. package/lib/hooks/useChatMessages/useChatMessages.js +32 -10
  21. package/lib/hooks/useEvent.js +3 -2
  22. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +80 -176
  23. package/lib/lang/br/index.js +5 -57
  24. package/lib/lang/en/index.js +5 -57
  25. package/lib/lang/es/index.js +5 -57
  26. package/lib/lang/fr/index.js +4 -56
  27. package/lib/services/maia/Chats/getChatMessages.js +28 -4
  28. package/lib/types/Chat.js +1 -1
  29. package/lib/utils/agentDisplayName.js +18 -0
  30. package/package.json +1 -1
  31. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +0 -83
  32. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +0 -21
  33. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +0 -7
  34. package/lib/components/atoms/AgentActivityIndicator/index.js +0 -2
  35. package/lib/types/streamActivity.js +0 -2
  36. package/lib/utils/sseStreamContent.js +0 -17
  37. package/lib/utils/streamActivityMessages.js +0 -256
@@ -1,7 +0,0 @@
1
- export var formatActivityElapsed = function formatActivityElapsed(totalSeconds) {
2
- var minutes = Math.floor(totalSeconds / 60);
3
- var seconds = totalSeconds % 60;
4
- var paddedSeconds = String(seconds).padStart(2, '0');
5
- return "".concat(minutes, ":").concat(paddedSeconds);
6
- };
7
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRBY3Rpdml0eUVsYXBzZWQiLCJ0b3RhbFNlY29uZHMiLCJtaW51dGVzIiwiTWF0aCIsImZsb29yIiwic2Vjb25kcyIsInBhZGRlZFNlY29uZHMiLCJTdHJpbmciLCJwYWRTdGFydCIsImNvbmNhdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0FnZW50QWN0aXZpdHlJbmRpY2F0b3IvQWdlbnRBY3Rpdml0eUluZGljYXRvci51dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0QWN0aXZpdHlFbGFwc2VkID0gKHRvdGFsU2Vjb25kczogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gNjApXG4gIGNvbnN0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MFxuICBjb25zdCBwYWRkZWRTZWNvbmRzID0gU3RyaW5nKHNlY29uZHMpLnBhZFN0YXJ0KDIsICcwJylcbiAgcmV0dXJuIGAke21pbnV0ZXN9OiR7cGFkZGVkU2Vjb25kc31gXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBTUEscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSUMsWUFBb0IsRUFBYTtFQUNyRSxJQUFNQyxPQUFPLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQzdDLElBQU1JLE9BQU8sR0FBR0osWUFBWSxHQUFHLEVBQUU7RUFDakMsSUFBTUssYUFBYSxHQUFHQyxNQUFNLENBQUNGLE9BQU8sQ0FBQyxDQUFDRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUN0RCxVQUFBQyxNQUFBLENBQVVQLE9BQU8sT0FBQU8sTUFBQSxDQUFJSCxhQUFhO0FBQ3BDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,2 +0,0 @@
1
- export { AgentActivityIndicator, StreamPendingSkeleton } from './AgentActivityIndicator';
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiU3RyZWFtUGVuZGluZ1NrZWxldG9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yLCBTdHJlYW1QZW5kaW5nU2tlbGV0b24gfSBmcm9tICcuL0FnZW50QWN0aXZpdHlJbmRpY2F0b3InXG5leHBvcnQgdHlwZSB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3JQcm9wcyB9IGZyb20gJy4vQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0Esc0JBQXNCLEVBQUVDLHFCQUFxQixRQUFRLDBCQUEwQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3N0cmVhbUFjdGl2aXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFN0cmVhbUFjdGl2aXR5UGhhc2UgPVxuICB8ICdnZW5lcmF0aW5nJ1xuICB8ICd0aGlua2luZydcbiAgfCAnYWN0aW9uJ1xuICB8ICd3cml0aW5nJ1xuICB8ICdzZWFyY2gnXG4gIHwgJ2RlZXBfc2VhcmNoJ1xuICB8ICdhdHRhY2htZW50J1xuICB8ICdwcm9jZXNzaW5nJ1xuXG5leHBvcnQgdHlwZSBTdHJlYW1BY3Rpdml0eSA9IHtcbiAgcGhhc2U6IFN0cmVhbUFjdGl2aXR5UGhhc2VcbiAgbWVzc2FnZTogc3RyaW5nXG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,17 +0,0 @@
1
- /**
2
- * Fusiona un chunk SSE con el texto acumulado.
3
- * Si el backend reenvía el mensaje completo (evento `content` o token snapshot),
4
- * reemplaza en lugar de concatenar para evitar duplicar texto.
5
- */
6
- export var mergeStreamChunk = function mergeStreamChunk(accumulated, chunk) {
7
- if (!chunk) return accumulated;
8
- if (!accumulated) return chunk;
9
- if (chunk === accumulated) return accumulated;
10
- if (chunk.startsWith(accumulated)) return chunk;
11
- if (accumulated.startsWith(chunk)) return accumulated;
12
- return accumulated + chunk;
13
- };
14
- export var isCompleteLikeSsePayload = function isCompleteLikeSsePayload(data) {
15
- return data.memory_session_id != null && String(data.memory_session_id).trim() !== '';
16
- };
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZXJnZVN0cmVhbUNodW5rIiwiYWNjdW11bGF0ZWQiLCJjaHVuayIsInN0YXJ0c1dpdGgiLCJpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQiLCJkYXRhIiwibWVtb3J5X3Nlc3Npb25faWQiLCJTdHJpbmciLCJ0cmltIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGdXNpb25hIHVuIGNodW5rIFNTRSBjb24gZWwgdGV4dG8gYWN1bXVsYWRvLlxuICogU2kgZWwgYmFja2VuZCByZWVudsOtYSBlbCBtZW5zYWplIGNvbXBsZXRvIChldmVudG8gYGNvbnRlbnRgIG8gdG9rZW4gc25hcHNob3QpLFxuICogcmVlbXBsYXphIGVuIGx1Z2FyIGRlIGNvbmNhdGVuYXIgcGFyYSBldml0YXIgZHVwbGljYXIgdGV4dG8uXG4gKi9cbmV4cG9ydCBjb25zdCBtZXJnZVN0cmVhbUNodW5rID0gKGFjY3VtdWxhdGVkOiBzdHJpbmcsIGNodW5rOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWNodW5rKSByZXR1cm4gYWNjdW11bGF0ZWRcbiAgaWYgKCFhY2N1bXVsYXRlZCkgcmV0dXJuIGNodW5rXG4gIGlmIChjaHVuayA9PT0gYWNjdW11bGF0ZWQpIHJldHVybiBhY2N1bXVsYXRlZFxuICBpZiAoY2h1bmsuc3RhcnRzV2l0aChhY2N1bXVsYXRlZCkpIHJldHVybiBjaHVua1xuICBpZiAoYWNjdW11bGF0ZWQuc3RhcnRzV2l0aChjaHVuaykpIHJldHVybiBhY2N1bXVsYXRlZFxuICByZXR1cm4gYWNjdW11bGF0ZWQgKyBjaHVua1xufVxuXG5leHBvcnQgY29uc3QgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkID0gKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiA9PlxuICBkYXRhLm1lbW9yeV9zZXNzaW9uX2lkICE9IG51bGwgJiYgU3RyaW5nKGRhdGEubWVtb3J5X3Nlc3Npb25faWQpLnRyaW0oKSAhPT0gJydcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUEsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSUMsV0FBbUIsRUFBRUMsS0FBYSxFQUFhO0VBQzlFLElBQUksQ0FBQ0EsS0FBSyxFQUFFLE9BQU9ELFdBQVc7RUFDOUIsSUFBSSxDQUFDQSxXQUFXLEVBQUUsT0FBT0MsS0FBSztFQUM5QixJQUFJQSxLQUFLLEtBQUtELFdBQVcsRUFBRSxPQUFPQSxXQUFXO0VBQzdDLElBQUlDLEtBQUssQ0FBQ0MsVUFBVSxDQUFDRixXQUFXLENBQUMsRUFBRSxPQUFPQyxLQUFLO0VBQy9DLElBQUlELFdBQVcsQ0FBQ0UsVUFBVSxDQUFDRCxLQUFLLENBQUMsRUFBRSxPQUFPRCxXQUFXO0VBQ3JELE9BQU9BLFdBQVcsR0FBR0MsS0FBSztBQUM1QixDQUFDO0FBRUQsT0FBTyxJQUFNRSx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJQyxJQUE2QjtFQUFBLE9BQ3BFQSxJQUFJLENBQUNDLGlCQUFpQixJQUFJLElBQUksSUFBSUMsTUFBTSxDQUFDRixJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUNFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -1,256 +0,0 @@
1
- import { normalizeHitlToolName } from './hitlAnalytics';
2
- var THINKING_MESSAGE_KEYS = ['chat.activity.thinking.analyzing', 'chat.activity.thinking.reviewing', 'chat.activity.thinking.planning'];
3
- var GENERATING_MESSAGE_KEYS = ['chat.activity.generating.preparing', 'chat.activity.generating.considering', 'chat.activity.generating.almostReady'];
4
- var SEARCH_MESSAGE_KEYS = ['chat.activity.search.scanning', 'chat.activity.search.summarizing'];
5
- var DEEP_SEARCH_MESSAGE_KEYS = ['chat.activity.deepSearch.exploring', 'chat.activity.deepSearch.crossChecking'];
6
- var ATTACHMENT_MESSAGE_KEYS = ['chat.activity.attachment.reading', 'chat.activity.attachment.extracting'];
7
- export var WRITING_ACTIVITY_MESSAGE_KEY = 'chat.activity.writing.composing';
8
-
9
- /** Tools HITL / node SSE → key i18n del indicador de actividad (tiempo presente continuo). */
10
- var HITL_TOOL_ACTIVITY_KEYS = {
11
- create_task: 'chat.activity.creatingTask',
12
- clone_task: 'chat.activity.creatingTask',
13
- create_tasks_batch: 'chat.activity.creatingTasksBatch',
14
- create_agent: 'chat.activity.creatingAgent',
15
- edit_agent: 'chat.activity.editingAgent',
16
- edit_task: 'chat.activity.editingTask',
17
- edit_tasks_batch: 'chat.activity.editingTasksBatch',
18
- delete_task: 'chat.activity.deletingTask',
19
- delete_tasks_batch: 'chat.activity.deletingTasksBatch',
20
- task_assign: 'chat.activity.assigningUser',
21
- task_unassign: 'chat.activity.unassigningUser',
22
- assign_task_label: 'chat.activity.assigningLabel',
23
- update_task_type: 'chat.activity.updatingTaskType',
24
- update_estimated_hours: 'chat.activity.updatingEstimatedHours',
25
- update_deliverable: 'chat.activity.updatingDeliverable',
26
- create_hour: 'chat.activity.loggingHours',
27
- create_checklist: 'chat.activity.creatingChecklist',
28
- get_task_date_hours: 'chat.activity.queryingHours',
29
- configure_agent_access: 'chat.activity.configuringAgentAccess',
30
- send_task_message: 'chat.activity.sendingTaskMessage',
31
- delete_checklist_item: 'chat.activity.deletingChecklistItem',
32
- remove_task_type: 'chat.activity.removingTaskType',
33
- remove_task_label: 'chat.activity.removingLabel',
34
- count_deliverable: 'chat.activity.updatingDeliverableCount',
35
- create_rework: 'chat.activity.creatingRework',
36
- update_rework: 'chat.activity.updatingRework'
37
- };
38
- var HITL_TOOL_NAMES_BY_SPECIFICITY = Object.keys(HITL_TOOL_ACTIVITY_KEYS).sort(function (a, b) {
39
- return b.length - a.length;
40
- });
41
- export var mapHitlToolNameToStreamActivity = function mapHitlToolNameToStreamActivity(toolName, t, options) {
42
- var normalized = normalizeHitlToolName(toolName);
43
- var key = HITL_TOOL_ACTIVITY_KEYS[normalized];
44
- if (key) {
45
- return {
46
- phase: 'action',
47
- message: t(key)
48
- };
49
- }
50
- if (options !== null && options !== void 0 && options.useResumingFallback) {
51
- return {
52
- phase: 'action',
53
- message: t('chat.activity.resumingAction')
54
- };
55
- }
56
- return {
57
- phase: 'action',
58
- message: t('chat.executingAction')
59
- };
60
- };
61
- var resolveHitlToolFromNodeMessage = function resolveHitlToolFromNodeMessage(nodeMessage) {
62
- var normalized = nodeMessage.toLowerCase().trim();
63
- if (!normalized) return null;
64
- if (HITL_TOOL_ACTIVITY_KEYS[normalized]) {
65
- return normalized;
66
- }
67
- var asToolName = normalizeHitlToolName(normalized.replace(/\s+/g, '_'));
68
- if (HITL_TOOL_ACTIVITY_KEYS[asToolName]) {
69
- return asToolName;
70
- }
71
- var matchedTool = HITL_TOOL_NAMES_BY_SPECIFICITY.find(function (toolName) {
72
- return normalized.includes(toolName);
73
- });
74
- return matchedTool !== null && matchedTool !== void 0 ? matchedTool : null;
75
- };
76
- export var ACTIVITY_MESSAGE_ROTATE_MS = 3200;
77
- var ROTATABLE_PHASES = ['generating', 'thinking', 'search', 'deep_search', 'attachment'];
78
- var getMessageKeysForPhase = function getMessageKeysForPhase(phase) {
79
- switch (phase) {
80
- case 'generating':
81
- return GENERATING_MESSAGE_KEYS;
82
- case 'thinking':
83
- return THINKING_MESSAGE_KEYS;
84
- case 'search':
85
- return SEARCH_MESSAGE_KEYS;
86
- case 'deep_search':
87
- return DEEP_SEARCH_MESSAGE_KEYS;
88
- case 'attachment':
89
- return ATTACHMENT_MESSAGE_KEYS;
90
- default:
91
- return null;
92
- }
93
- };
94
- export var getStreamActivityMessageAtIndex = function getStreamActivityMessageAtIndex(phase, index, t) {
95
- if (phase === 'writing') {
96
- return t(WRITING_ACTIVITY_MESSAGE_KEY);
97
- }
98
- var keys = getMessageKeysForPhase(phase);
99
- if (!(keys !== null && keys !== void 0 && keys.length)) {
100
- return '';
101
- }
102
- var clampedIndex = Math.min(Math.max(0, index), keys.length - 1);
103
- return t(keys[clampedIndex]);
104
- };
105
- export var getThinkingLoadingMessage = function getThinkingLoadingMessage(index, t) {
106
- return getStreamActivityMessageAtIndex('thinking', index, t);
107
- };
108
- export var getGeneratingLoadingMessage = function getGeneratingLoadingMessage(index, t) {
109
- return getStreamActivityMessageAtIndex('generating', index, t);
110
- };
111
- export var canAdvanceStreamActivityMessage = function canAdvanceStreamActivityMessage(phase, currentIndex) {
112
- var keys = getMessageKeysForPhase(phase);
113
- if (!keys) {
114
- return false;
115
- }
116
- return currentIndex < keys.length - 1;
117
- };
118
- export var advanceStreamActivityMessage = function advanceStreamActivityMessage(activity, currentIndex, t) {
119
- if (!canAdvanceStreamActivityMessage(activity.phase, currentIndex)) {
120
- return null;
121
- }
122
- var nextIndex = currentIndex + 1;
123
- return {
124
- activity: {
125
- phase: activity.phase,
126
- message: getStreamActivityMessageAtIndex(activity.phase, nextIndex, t)
127
- },
128
- nextIndex: nextIndex
129
- };
130
- };
131
- export var canRotateStreamActivityPhase = function canRotateStreamActivityPhase(phase) {
132
- return ROTATABLE_PHASES.includes(phase);
133
- };
134
- export var getWritingStreamActivity = function getWritingStreamActivity(t) {
135
- return {
136
- phase: 'writing',
137
- message: t(WRITING_ACTIVITY_MESSAGE_KEY)
138
- };
139
- };
140
- export var getInitialStreamActivity = function getInitialStreamActivity(t, options) {
141
- if (options.isWebSearchActive) {
142
- return {
143
- phase: 'search',
144
- message: t(SEARCH_MESSAGE_KEYS[0])
145
- };
146
- }
147
- if (options.isDeepSearchActive) {
148
- return {
149
- phase: 'deep_search',
150
- message: t(DEEP_SEARCH_MESSAGE_KEYS[0])
151
- };
152
- }
153
- if (options.hasAttachments) {
154
- return {
155
- phase: 'attachment',
156
- message: t(ATTACHMENT_MESSAGE_KEYS[0])
157
- };
158
- }
159
- return {
160
- phase: 'generating',
161
- message: t(GENERATING_MESSAGE_KEYS[0])
162
- };
163
- };
164
- export var mapNodeMessageToStreamActivity = function mapNodeMessageToStreamActivity(nodeMessage, t, options) {
165
- var normalized = nodeMessage.toLowerCase();
166
- var hitlTool = resolveHitlToolFromNodeMessage(nodeMessage);
167
- if (hitlTool) {
168
- return mapHitlToolNameToStreamActivity(hitlTool, t, options);
169
- }
170
- if (normalized.includes('response_file_generation') || normalized.includes('generando archivo') || normalized.includes('generating file')) {
171
- return {
172
- phase: 'action',
173
- message: t('chat.activity.generatingFile')
174
- };
175
- }
176
- if (normalized.includes('resuming') || normalized.includes('aprobada') || normalized.includes('approved')) {
177
- return {
178
- phase: 'action',
179
- message: t('chat.activity.resumingAction')
180
- };
181
- }
182
- if (normalized.includes('tavily') || normalized.includes('search_web') || normalized.includes('buscando en la web') || normalized.includes('searching the web')) {
183
- return {
184
- phase: 'search',
185
- message: t(SEARCH_MESSAGE_KEYS[0])
186
- };
187
- }
188
- if (options !== null && options !== void 0 && options.useResumingFallback) {
189
- return {
190
- phase: 'action',
191
- message: t('chat.activity.resumingAction')
192
- };
193
- }
194
- return {
195
- phase: 'action',
196
- message: t('chat.executingAction')
197
- };
198
- };
199
- export var resolveStreamLoadingDisplay = function resolveStreamLoadingDisplay(params) {
200
- var activeKeys = Object.keys(params.activeLoadings);
201
- if (activeKeys.length > 0) {
202
- var firstKey = activeKeys[0];
203
- var raw = params.activeLoadings[firstKey];
204
- if (raw && raw !== params.t('chat.processing')) {
205
- var hitlResumeOptions = {
206
- useResumingFallback: true
207
- };
208
- var hitlTool = resolveHitlToolFromNodeMessage(raw);
209
- if (hitlTool) {
210
- return mapHitlToolNameToStreamActivity(hitlTool, params.t, hitlResumeOptions);
211
- }
212
- return mapNodeMessageToStreamActivity(raw, params.t, hitlResumeOptions);
213
- }
214
- return {
215
- phase: 'processing',
216
- message: params.t('chat.processing')
217
- };
218
- }
219
- if (params.streamActivity) {
220
- return params.streamActivity;
221
- }
222
- if (params.loadingMessage) {
223
- if (params.loadingMessage === params.t('chat.writing') || params.loadingMessage === params.t(WRITING_ACTIVITY_MESSAGE_KEY)) {
224
- return getWritingStreamActivity(params.t);
225
- }
226
- if (params.loadingMessage === params.t('chat.generating')) {
227
- return {
228
- phase: 'generating',
229
- message: params.loadingMessage
230
- };
231
- }
232
- if (params.loadingMessage === params.t('chat.generatingWebSearch') || params.loadingMessage === params.t('chat.generatingDeepSearch') || params.loadingMessage === params.t('chat.generatingAttachment')) {
233
- return getInitialStreamActivity(params.t, {
234
- isWebSearchActive: params.loadingMessage === params.t('chat.generatingWebSearch'),
235
- isDeepSearchActive: params.loadingMessage === params.t('chat.generatingDeepSearch'),
236
- hasAttachments: params.loadingMessage === params.t('chat.generatingAttachment')
237
- });
238
- }
239
- return {
240
- phase: 'action',
241
- message: params.loadingMessage
242
- };
243
- }
244
- if (params.waitingResponse) {
245
- return getInitialStreamActivity(params.t, {
246
- isWebSearchActive: params.isWebSearchActive,
247
- isDeepSearchActive: params.isDeepSearchActive,
248
- hasAttachments: params.hasAttachments
249
- });
250
- }
251
- return null;
252
- };
253
- export var isStreamingPlaceholderMessageId = function isStreamingPlaceholderMessageId(messageId) {
254
- return typeof messageId === 'string' && messageId.includes('-streaming');
255
- };
256
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJUSElOS0lOR19NRVNTQUdFX0tFWVMiLCJHRU5FUkFUSU5HX01FU1NBR0VfS0VZUyIsIlNFQVJDSF9NRVNTQUdFX0tFWVMiLCJERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVMiLCJBVFRBQ0hNRU5UX01FU1NBR0VfS0VZUyIsIldSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkiLCJISVRMX1RPT0xfQUNUSVZJVFlfS0VZUyIsImNyZWF0ZV90YXNrIiwiY2xvbmVfdGFzayIsImNyZWF0ZV90YXNrc19iYXRjaCIsImNyZWF0ZV9hZ2VudCIsImVkaXRfYWdlbnQiLCJlZGl0X3Rhc2siLCJlZGl0X3Rhc2tzX2JhdGNoIiwiZGVsZXRlX3Rhc2siLCJkZWxldGVfdGFza3NfYmF0Y2giLCJ0YXNrX2Fzc2lnbiIsInRhc2tfdW5hc3NpZ24iLCJhc3NpZ25fdGFza19sYWJlbCIsInVwZGF0ZV90YXNrX3R5cGUiLCJ1cGRhdGVfZXN0aW1hdGVkX2hvdXJzIiwidXBkYXRlX2RlbGl2ZXJhYmxlIiwiY3JlYXRlX2hvdXIiLCJjcmVhdGVfY2hlY2tsaXN0IiwiZ2V0X3Rhc2tfZGF0ZV9ob3VycyIsImNvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MiLCJzZW5kX3Rhc2tfbWVzc2FnZSIsImRlbGV0ZV9jaGVja2xpc3RfaXRlbSIsInJlbW92ZV90YXNrX3R5cGUiLCJyZW1vdmVfdGFza19sYWJlbCIsImNvdW50X2RlbGl2ZXJhYmxlIiwiY3JlYXRlX3Jld29yayIsInVwZGF0ZV9yZXdvcmsiLCJISVRMX1RPT0xfTkFNRVNfQllfU1BFQ0lGSUNJVFkiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsImEiLCJiIiwibGVuZ3RoIiwibWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eSIsInRvb2xOYW1lIiwidCIsIm9wdGlvbnMiLCJub3JtYWxpemVkIiwia2V5IiwicGhhc2UiLCJtZXNzYWdlIiwidXNlUmVzdW1pbmdGYWxsYmFjayIsInJlc29sdmVIaXRsVG9vbEZyb21Ob2RlTWVzc2FnZSIsIm5vZGVNZXNzYWdlIiwidG9Mb3dlckNhc2UiLCJ0cmltIiwiYXNUb29sTmFtZSIsInJlcGxhY2UiLCJtYXRjaGVkVG9vbCIsImZpbmQiLCJpbmNsdWRlcyIsIkFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TIiwiUk9UQVRBQkxFX1BIQVNFUyIsImdldE1lc3NhZ2VLZXlzRm9yUGhhc2UiLCJnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4IiwiaW5kZXgiLCJjbGFtcGVkSW5kZXgiLCJNYXRoIiwibWluIiwibWF4IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldEdlbmVyYXRpbmdMb2FkaW5nTWVzc2FnZSIsImNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjdXJyZW50SW5kZXgiLCJhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiYWN0aXZpdHkiLCJuZXh0SW5kZXgiLCJjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlIiwiZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5IiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJoYXNBdHRhY2htZW50cyIsIm1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eSIsImhpdGxUb29sIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwicGFyYW1zIiwiYWN0aXZlS2V5cyIsImFjdGl2ZUxvYWRpbmdzIiwiZmlyc3RLZXkiLCJyYXciLCJoaXRsUmVzdW1lT3B0aW9ucyIsInN0cmVhbUFjdGl2aXR5IiwibG9hZGluZ01lc3NhZ2UiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwibWVzc2FnZUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSwgU3RyZWFtQWN0aXZpdHlQaGFzZSB9IGZyb20gJy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgbm9ybWFsaXplSGl0bFRvb2xOYW1lIH0gZnJvbSAnLi9oaXRsQW5hbHl0aWNzJ1xuXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxuY29uc3QgVEhJTktJTkdfTUVTU0FHRV9LRVlTID0gW1xuICAnY2hhdC5hY3Rpdml0eS50aGlua2luZy5hbmFseXppbmcnLFxuICAnY2hhdC5hY3Rpdml0eS50aGlua2luZy5yZXZpZXdpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS50aGlua2luZy5wbGFubmluZycsXG5dIGFzIGNvbnN0XG5cbmNvbnN0IEdFTkVSQVRJTkdfTUVTU0FHRV9LRVlTID0gW1xuICAnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nLnByZXBhcmluZycsXG4gICdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmcuY29uc2lkZXJpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nLmFsbW9zdFJlYWR5Jyxcbl0gYXMgY29uc3RcblxuY29uc3QgU0VBUkNIX01FU1NBR0VfS0VZUyA9IFsnY2hhdC5hY3Rpdml0eS5zZWFyY2guc2Nhbm5pbmcnLCAnY2hhdC5hY3Rpdml0eS5zZWFyY2guc3VtbWFyaXppbmcnXSBhcyBjb25zdFxuXG5jb25zdCBERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVMgPSBbXG4gICdjaGF0LmFjdGl2aXR5LmRlZXBTZWFyY2guZXhwbG9yaW5nJyxcbiAgJ2NoYXQuYWN0aXZpdHkuZGVlcFNlYXJjaC5jcm9zc0NoZWNraW5nJyxcbl0gYXMgY29uc3RcblxuY29uc3QgQVRUQUNITUVOVF9NRVNTQUdFX0tFWVMgPSBbJ2NoYXQuYWN0aXZpdHkuYXR0YWNobWVudC5yZWFkaW5nJywgJ2NoYXQuYWN0aXZpdHkuYXR0YWNobWVudC5leHRyYWN0aW5nJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkgPSAnY2hhdC5hY3Rpdml0eS53cml0aW5nLmNvbXBvc2luZycgYXMgY29uc3RcblxuLyoqIFRvb2xzIEhJVEwgLyBub2RlIFNTRSDihpIga2V5IGkxOG4gZGVsIGluZGljYWRvciBkZSBhY3RpdmlkYWQgKHRpZW1wbyBwcmVzZW50ZSBjb250aW51bykuICovXG5jb25zdCBISVRMX1RPT0xfQUNUSVZJVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY3JlYXRlX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFzaycsXG4gIGNsb25lX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFzaycsXG4gIGNyZWF0ZV90YXNrc19iYXRjaDogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdUYXNrc0JhdGNoJyxcbiAgY3JlYXRlX2FnZW50OiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ0FnZW50JyxcbiAgZWRpdF9hZ2VudDogJ2NoYXQuYWN0aXZpdHkuZWRpdGluZ0FnZW50JyxcbiAgZWRpdF90YXNrOiAnY2hhdC5hY3Rpdml0eS5lZGl0aW5nVGFzaycsXG4gIGVkaXRfdGFza3NfYmF0Y2g6ICdjaGF0LmFjdGl2aXR5LmVkaXRpbmdUYXNrc0JhdGNoJyxcbiAgZGVsZXRlX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmRlbGV0aW5nVGFzaycsXG4gIGRlbGV0ZV90YXNrc19iYXRjaDogJ2NoYXQuYWN0aXZpdHkuZGVsZXRpbmdUYXNrc0JhdGNoJyxcbiAgdGFza19hc3NpZ246ICdjaGF0LmFjdGl2aXR5LmFzc2lnbmluZ1VzZXInLFxuICB0YXNrX3VuYXNzaWduOiAnY2hhdC5hY3Rpdml0eS51bmFzc2lnbmluZ1VzZXInLFxuICBhc3NpZ25fdGFza19sYWJlbDogJ2NoYXQuYWN0aXZpdHkuYXNzaWduaW5nTGFiZWwnLFxuICB1cGRhdGVfdGFza190eXBlOiAnY2hhdC5hY3Rpdml0eS51cGRhdGluZ1Rhc2tUeXBlJyxcbiAgdXBkYXRlX2VzdGltYXRlZF9ob3VyczogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdFc3RpbWF0ZWRIb3VycycsXG4gIHVwZGF0ZV9kZWxpdmVyYWJsZTogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdEZWxpdmVyYWJsZScsXG4gIGNyZWF0ZV9ob3VyOiAnY2hhdC5hY3Rpdml0eS5sb2dnaW5nSG91cnMnLFxuICBjcmVhdGVfY2hlY2tsaXN0OiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ0NoZWNrbGlzdCcsXG4gIGdldF90YXNrX2RhdGVfaG91cnM6ICdjaGF0LmFjdGl2aXR5LnF1ZXJ5aW5nSG91cnMnLFxuICBjb25maWd1cmVfYWdlbnRfYWNjZXNzOiAnY2hhdC5hY3Rpdml0eS5jb25maWd1cmluZ0FnZW50QWNjZXNzJyxcbiAgc2VuZF90YXNrX21lc3NhZ2U6ICdjaGF0LmFjdGl2aXR5LnNlbmRpbmdUYXNrTWVzc2FnZScsXG4gIGRlbGV0ZV9jaGVja2xpc3RfaXRlbTogJ2NoYXQuYWN0aXZpdHkuZGVsZXRpbmdDaGVja2xpc3RJdGVtJyxcbiAgcmVtb3ZlX3Rhc2tfdHlwZTogJ2NoYXQuYWN0aXZpdHkucmVtb3ZpbmdUYXNrVHlwZScsXG4gIHJlbW92ZV90YXNrX2xhYmVsOiAnY2hhdC5hY3Rpdml0eS5yZW1vdmluZ0xhYmVsJyxcbiAgY291bnRfZGVsaXZlcmFibGU6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nRGVsaXZlcmFibGVDb3VudCcsXG4gIGNyZWF0ZV9yZXdvcms6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nUmV3b3JrJyxcbiAgdXBkYXRlX3Jld29yazogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdSZXdvcmsnLFxufVxuXG5jb25zdCBISVRMX1RPT0xfTkFNRVNfQllfU1BFQ0lGSUNJVFkgPSBPYmplY3Qua2V5cyhISVRMX1RPT0xfQUNUSVZJVFlfS0VZUykuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcblxuZXhwb3J0IGNvbnN0IG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkgPSAoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zPzogeyB1c2VSZXN1bWluZ0ZhbGxiYWNrPzogYm9vbGVhbiB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIaXRsVG9vbE5hbWUodG9vbE5hbWUpXG4gIGNvbnN0IGtleSA9IEhJVExfVE9PTF9BQ1RJVklUWV9LRVlTW25vcm1hbGl6ZWRdXG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoa2V5KSB9XG4gIH1cbiAgaWYgKG9wdGlvbnM/LnVzZVJlc3VtaW5nRmFsbGJhY2spIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuYWN0aXZpdHkucmVzdW1pbmdBY3Rpb24nKSB9XG4gIH1cbiAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpIH1cbn1cblxuY29uc3QgcmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlID0gKG5vZGVNZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vZGVNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIG51bGxcblxuICBpZiAoSElUTF9UT09MX0FDVElWSVRZX0tFWVNbbm9ybWFsaXplZF0pIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgY29uc3QgYXNUb29sTmFtZSA9IG5vcm1hbGl6ZUhpdGxUb29sTmFtZShub3JtYWxpemVkLnJlcGxhY2UoL1xccysvZywgJ18nKSlcbiAgaWYgKEhJVExfVE9PTF9BQ1RJVklUWV9LRVlTW2FzVG9vbE5hbWVdKSB7XG4gICAgcmV0dXJuIGFzVG9vbE5hbWVcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZWRUb29sID0gSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZLmZpbmQodG9vbE5hbWUgPT4gbm9ybWFsaXplZC5pbmNsdWRlcyh0b29sTmFtZSkpXG4gIHJldHVybiBtYXRjaGVkVG9vbCA/PyBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyA9IDMyMDBcblxuY29uc3QgUk9UQVRBQkxFX1BIQVNFUzogU3RyZWFtQWN0aXZpdHlQaGFzZVtdID0gWydnZW5lcmF0aW5nJywgJ3RoaW5raW5nJywgJ3NlYXJjaCcsICdkZWVwX3NlYXJjaCcsICdhdHRhY2htZW50J11cblxuY29uc3QgZ2V0TWVzc2FnZUtleXNGb3JQaGFzZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSk6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCA9PiB7XG4gIHN3aXRjaCAocGhhc2UpIHtcbiAgICBjYXNlICdnZW5lcmF0aW5nJzpcbiAgICAgIHJldHVybiBHRU5FUkFUSU5HX01FU1NBR0VfS0VZU1xuICAgIGNhc2UgJ3RoaW5raW5nJzpcbiAgICAgIHJldHVybiBUSElOS0lOR19NRVNTQUdFX0tFWVNcbiAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgcmV0dXJuIFNFQVJDSF9NRVNTQUdFX0tFWVNcbiAgICBjYXNlICdkZWVwX3NlYXJjaCc6XG4gICAgICByZXR1cm4gREVFUF9TRUFSQ0hfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAnYXR0YWNobWVudCc6XG4gICAgICByZXR1cm4gQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSwgaW5kZXg6IG51bWJlciwgdDogVHJhbnNsYXRlRm4pOiBzdHJpbmcgPT4ge1xuICBpZiAocGhhc2UgPT09ICd3cml0aW5nJykge1xuICAgIHJldHVybiB0KFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkpXG4gIH1cblxuICBjb25zdCBrZXlzID0gZ2V0TWVzc2FnZUtleXNGb3JQaGFzZShwaGFzZSlcbiAgaWYgKCFrZXlzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGNvbnN0IGNsYW1wZWRJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KDAsIGluZGV4KSwga2V5cy5sZW5ndGggLSAxKVxuICByZXR1cm4gdChrZXlzW2NsYW1wZWRJbmRleF0pXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlID0gKGluZGV4OiBudW1iZXIsIHQ6IFRyYW5zbGF0ZUZuKTogc3RyaW5nID0+XG4gIGdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXgoJ3RoaW5raW5nJywgaW5kZXgsIHQpXG5cbmV4cG9ydCBjb25zdCBnZXRHZW5lcmF0aW5nTG9hZGluZ01lc3NhZ2UgPSAoaW5kZXg6IG51bWJlciwgdDogVHJhbnNsYXRlRm4pOiBzdHJpbmcgPT5cbiAgZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCgnZ2VuZXJhdGluZycsIGluZGV4LCB0KVxuXG5leHBvcnQgY29uc3QgY2FuQWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSwgY3VycmVudEluZGV4OiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgY29uc3Qga2V5cyA9IGdldE1lc3NhZ2VLZXlzRm9yUGhhc2UocGhhc2UpXG4gIGlmICgha2V5cykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjdXJyZW50SW5kZXggPCBrZXlzLmxlbmd0aCAtIDFcbn1cblxuZXhwb3J0IGNvbnN0IGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UgPSAoXG4gIGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSxcbiAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gIHQ6IFRyYW5zbGF0ZUZuXG4pOiB7IGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eTsgbmV4dEluZGV4OiBudW1iZXIgfSB8IG51bGwgPT4ge1xuICBpZiAoIWNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UoYWN0aXZpdHkucGhhc2UsIGN1cnJlbnRJbmRleCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgMVxuICByZXR1cm4ge1xuICAgIGFjdGl2aXR5OiB7XG4gICAgICBwaGFzZTogYWN0aXZpdHkucGhhc2UsXG4gICAgICBtZXNzYWdlOiBnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4KGFjdGl2aXR5LnBoYXNlLCBuZXh0SW5kZXgsIHQpLFxuICAgIH0sXG4gICAgbmV4dEluZGV4LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlID0gKHBoYXNlOiBTdHJlYW1BY3Rpdml0eVBoYXNlKTogYm9vbGVhbiA9PiBST1RBVEFCTEVfUEhBU0VTLmluY2x1ZGVzKHBoYXNlKVxuXG5leHBvcnQgY29uc3QgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5ID0gKHQ6IFRyYW5zbGF0ZUZuKTogU3RyZWFtQWN0aXZpdHkgPT4gKHtcbiAgcGhhc2U6ICd3cml0aW5nJyxcbiAgbWVzc2FnZTogdChXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkgPSAoXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zOiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGlmIChvcHRpb25zLmlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdzZWFyY2gnLCBtZXNzYWdlOiB0KFNFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICBpZiAob3B0aW9ucy5pc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2RlZXBfc2VhcmNoJywgbWVzc2FnZTogdChERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICBpZiAob3B0aW9ucy5oYXNBdHRhY2htZW50cykge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYXR0YWNobWVudCcsIG1lc3NhZ2U6IHQoQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2dlbmVyYXRpbmcnLCBtZXNzYWdlOiB0KEdFTkVSQVRJTkdfTUVTU0FHRV9LRVlTWzBdKSB9XG59XG5cbmV4cG9ydCBjb25zdCBtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkgPSAoXG4gIG5vZGVNZXNzYWdlOiBzdHJpbmcsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zPzogeyB1c2VSZXN1bWluZ0ZhbGxiYWNrPzogYm9vbGVhbiB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub2RlTWVzc2FnZS50b0xvd2VyQ2FzZSgpXG5cbiAgY29uc3QgaGl0bFRvb2wgPSByZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2Uobm9kZU1lc3NhZ2UpXG4gIGlmIChoaXRsVG9vbCkge1xuICAgIHJldHVybiBtYXBIaXRsVG9vbE5hbWVUb1N0cmVhbUFjdGl2aXR5KGhpdGxUb29sLCB0LCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3Jlc3BvbnNlX2ZpbGVfZ2VuZXJhdGlvbicpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZ2VuZXJhbmRvIGFyY2hpdm8nKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2dlbmVyYXRpbmcgZmlsZScpXG4gICkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nRmlsZScpIH1cbiAgfVxuICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygncmVzdW1pbmcnKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdhcHJvYmFkYScpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2FwcHJvdmVkJykpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuYWN0aXZpdHkucmVzdW1pbmdBY3Rpb24nKSB9XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3RhdmlseScpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnc2VhcmNoX3dlYicpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnYnVzY2FuZG8gZW4gbGEgd2ViJykgfHxcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdzZWFyY2hpbmcgdGhlIHdlYicpXG4gICkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnc2VhcmNoJywgbWVzc2FnZTogdChTRUFSQ0hfTUVTU0FHRV9LRVlTWzBdKSB9XG4gIH1cblxuICBpZiAob3B0aW9ucz8udXNlUmVzdW1pbmdGYWxsYmFjaykge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5yZXN1bWluZ0FjdGlvbicpIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJykgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gKHBhcmFtczoge1xuICBzdHJlYW1BY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG4gIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmcgfCBudWxsXG4gIGFjdGl2ZUxvYWRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhblxuICBpc1dlYlNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBpc0RlZXBTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaGFzQXR0YWNobWVudHM6IGJvb2xlYW5cbiAgdDogVHJhbnNsYXRlRm5cbn0pOiBTdHJlYW1BY3Rpdml0eSB8IG51bGwgPT4ge1xuICBjb25zdCBhY3RpdmVLZXlzID0gT2JqZWN0LmtleXMocGFyYW1zLmFjdGl2ZUxvYWRpbmdzKVxuICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3RLZXkgPSBhY3RpdmVLZXlzWzBdXG4gICAgY29uc3QgcmF3ID0gcGFyYW1zLmFjdGl2ZUxvYWRpbmdzW2ZpcnN0S2V5XVxuICAgIGlmIChyYXcgJiYgcmF3ICE9PSBwYXJhbXMudCgnY2hhdC5wcm9jZXNzaW5nJykpIHtcbiAgICAgIGNvbnN0IGhpdGxSZXN1bWVPcHRpb25zID0geyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIGFzIGNvbnN0IH1cbiAgICAgIGNvbnN0IGhpdGxUb29sID0gcmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlKHJhdylcbiAgICAgIGlmIChoaXRsVG9vbCkge1xuICAgICAgICByZXR1cm4gbWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eShoaXRsVG9vbCwgcGFyYW1zLnQsIGhpdGxSZXN1bWVPcHRpb25zKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eShyYXcsIHBhcmFtcy50LCBoaXRsUmVzdW1lT3B0aW9ucylcbiAgICB9XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdwcm9jZXNzaW5nJywgbWVzc2FnZTogcGFyYW1zLnQoJ2NoYXQucHJvY2Vzc2luZycpIH1cbiAgfVxuXG4gIGlmIChwYXJhbXMuc3RyZWFtQWN0aXZpdHkpIHtcbiAgICByZXR1cm4gcGFyYW1zLnN0cmVhbUFjdGl2aXR5XG4gIH1cblxuICBpZiAocGFyYW1zLmxvYWRpbmdNZXNzYWdlKSB7XG4gICAgaWYgKFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC53cml0aW5nJykgfHxcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoV1JJVElOR19BQ1RJVklUWV9NRVNTQUdFX0tFWSlcbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkocGFyYW1zLnQpXG4gICAgfVxuICAgIGlmIChwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmcnKSkge1xuICAgICAgcmV0dXJuIHsgcGhhc2U6ICdnZW5lcmF0aW5nJywgbWVzc2FnZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nV2ViU2VhcmNoJykgfHxcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKSB8fFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHBhcmFtcy50LCB7XG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdXZWJTZWFyY2gnKSxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJyksXG4gICAgICAgIGhhc0F0dGFjaG1lbnRzOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdBdHRhY2htZW50JyksXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHBhcmFtcy5sb2FkaW5nTWVzc2FnZSB9XG4gIH1cblxuICBpZiAocGFyYW1zLndhaXRpbmdSZXNwb25zZSkge1xuICAgIHJldHVybiBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkocGFyYW1zLnQsIHtcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBwYXJhbXMuaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IHBhcmFtcy5pc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgICBoYXNBdHRhY2htZW50czogcGFyYW1zLmhhc0F0dGFjaG1lbnRzLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCA9IChtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgdHlwZW9mIG1lc3NhZ2VJZCA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZUlkLmluY2x1ZGVzKCctc3RyZWFtaW5nJylcbiJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EscUJBQXFCLFFBQVEsaUJBQWlCO0FBSXZELElBQU1DLHFCQUFxQixHQUFHLENBQzVCLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsaUNBQWlDLENBQ3pCO0FBRVYsSUFBTUMsdUJBQXVCLEdBQUcsQ0FDOUIsb0NBQW9DLEVBQ3BDLHNDQUFzQyxFQUN0QyxzQ0FBc0MsQ0FDOUI7QUFFVixJQUFNQyxtQkFBbUIsR0FBRyxDQUFDLCtCQUErQixFQUFFLGtDQUFrQyxDQUFVO0FBRTFHLElBQU1DLHdCQUF3QixHQUFHLENBQy9CLG9DQUFvQyxFQUNwQyx3Q0FBd0MsQ0FDaEM7QUFFVixJQUFNQyx1QkFBdUIsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLHFDQUFxQyxDQUFVO0FBRXBILE9BQU8s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