@projectcor/maia-components 2.11.100-3 → 2.11.100-5

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 (63) hide show
  1. package/lib/App.js +4 -2
  2. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +212 -14
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +99 -9
  4. package/lib/components/atoms/Chip/Chip.js +5 -12
  5. package/lib/components/atoms/Chip/styles.js +6 -6
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +28 -121
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +2 -6
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +5 -12
  9. package/lib/components/atoms/MAIAInput/MAIAInput.js +270 -390
  10. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -5
  11. package/lib/components/atoms/MAIAInput/styles.js +86 -102
  12. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +41 -54
  13. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +12 -25
  14. package/lib/components/atoms/icons/index.js +1 -10
  15. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  16. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +7 -18
  17. package/lib/components/molecules/ChatAIHome/styles.js +38 -54
  18. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +191 -44
  19. package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -10
  20. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +2 -1
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +4 -1
  22. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +8 -1
  23. package/lib/components/molecules/ChatFooter/ChatFooter.js +62 -23
  24. package/lib/components/molecules/Sidebar/Sidebar.js +3 -14
  25. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +91 -0
  26. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +19 -0
  27. package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +2 -0
  28. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
  29. package/lib/dev/DevStreamTimelineDemo.js +614 -0
  30. package/lib/dev/mockStreamTimelineDemo.js +417 -0
  31. package/lib/dev/mockStreamTimelineRunner.js +298 -0
  32. package/lib/hooks/useAgentModel/useCreateAgent.js +40 -14
  33. package/lib/hooks/useAgentModel/useUpdateAgent.js +37 -11
  34. package/lib/hooks/useChatManager/useChatManager.js +132 -46
  35. package/lib/hooks/useEvent.js +2 -1
  36. package/lib/hooks/useMentionPopover.js +2 -4
  37. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +183 -23
  38. package/lib/hooks/useStreamTimeline/index.js +7 -0
  39. package/lib/hooks/useStreamTimeline/streamTimelineStore.js +37 -0
  40. package/lib/lang/br/index.js +16 -7
  41. package/lib/lang/en/index.js +16 -7
  42. package/lib/lang/es/index.js +16 -7
  43. package/lib/lang/fr/index.js +15 -9
  44. package/lib/services/maia/Agents/connectors.js +124 -0
  45. package/lib/styles/config.js +2 -2
  46. package/lib/types/agentModal.js +1 -1
  47. package/lib/types/streamActivity.js +1 -1
  48. package/lib/types/streamTimeline.js +2 -0
  49. package/lib/utils/normalizeAgentConnectors.js +28 -3
  50. package/lib/utils/streamDebugLog.js +170 -0
  51. package/lib/utils/streamExecutionSteps.js +136 -0
  52. package/lib/utils/streamTimeline.js +177 -0
  53. package/package.json +1 -1
  54. package/lib/components/atoms/MAIAInput/maiaInputLayout.js +0 -25
  55. package/lib/components/atoms/icons/MaiaInputAddIcon.js +0 -42
  56. package/lib/components/atoms/icons/MaiaInputAttachIcon.js +0 -29
  57. package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +0 -33
  58. package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +0 -35
  59. package/lib/components/atoms/icons/MaiaInputMentionIcon.js +0 -44
  60. package/lib/components/atoms/icons/MaiaInputRobotIcon.js +0 -29
  61. package/lib/components/atoms/icons/MaiaInputSendIcon.js +0 -29
  62. package/lib/components/atoms/icons/MaiaInputSlashIcon.js +0 -29
  63. package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +0 -35
@@ -1,10 +1,17 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _typeof from "@babel/runtime/helpers/typeof";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
6
  /** Grupo de conectores COR dentro de `connectors`. */
6
7
  export var COR_CONNECTOR_GROUP = 'COR';
7
8
 
9
+ /** Grupo de conectores externos (MCP) dentro de `connectors`. */
10
+ export var MCP_CONNECTOR_GROUP = 'MCP';
11
+
12
+ /** Slug del conector NetSuite (catalogo MCP). */
13
+ export var NETSUITE_CONNECTOR_SLUG = 'netsuite';
14
+
8
15
  /** Slugs de tool groups COR que habilita el switch de "acceso a tareas" del ABM. */
9
16
  export var COR_TOOL_GROUP_SLUGS = ['tareas', 'proyectos'];
10
17
 
@@ -21,12 +28,13 @@ export var buildAgentToolGroupsRequest = function buildAgentToolGroupsRequest(ta
21
28
  * a partir del switch, para hidratar de forma optimista el agente recién creado/editado sin refetch.
22
29
  */
23
30
  export var buildAgentConnectorsFromTaskAccess = function buildAgentConnectorsFromTaskAccess(taskAccess) {
31
+ var mcpSlugs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
24
32
  return [{
25
33
  group: COR_CONNECTOR_GROUP,
26
34
  slugs: taskAccess ? [].concat(COR_TOOL_GROUP_SLUGS) : []
27
35
  }, {
28
- group: 'MCP',
29
- slugs: []
36
+ group: MCP_CONNECTOR_GROUP,
37
+ slugs: _toConsumableArray(mcpSlugs)
30
38
  }];
31
39
  };
32
40
 
@@ -60,6 +68,23 @@ export var deriveTaskAccessFromToolGroupSlugs = function deriveTaskAccessFromToo
60
68
  });
61
69
  };
62
70
 
71
+ /** Slugs MCP habilitados en `connectors[].group === 'MCP'`. */
72
+ export var deriveMcpConnectorSlugs = function deriveMcpConnectorSlugs(connectors) {
73
+ var _normalizeAgentConnec, _normalizeAgentConnec2;
74
+ return (_normalizeAgentConnec = (_normalizeAgentConnec2 = normalizeAgentConnectors(connectors)) === null || _normalizeAgentConnec2 === void 0 || (_normalizeAgentConnec2 = _normalizeAgentConnec2.find(function (connector) {
75
+ return connector.group === MCP_CONNECTOR_GROUP;
76
+ })) === null || _normalizeAgentConnec2 === void 0 ? void 0 : _normalizeAgentConnec2.slugs) !== null && _normalizeAgentConnec !== void 0 ? _normalizeAgentConnec : [];
77
+ };
78
+
79
+ /** Slugs MCP que la compañía ya autorizó (token OAuth), no solo los asignados al agente. */
80
+ export var deriveConnectedConnectorSlugs = function deriveConnectedConnectorSlugs(agentConnectors) {
81
+ return agentConnectors.filter(function (connector) {
82
+ return connector.enabled_for_agent && (!connector.requires_auth || connector.user_authorized);
83
+ }).map(function (connector) {
84
+ return connector.slug;
85
+ });
86
+ };
87
+
63
88
  /** Asegura `connectors` normalizados en un agente proveniente del listado de customs. */
64
89
  export var withNormalizedConnectors = function withNormalizedConnectors(agent) {
65
90
  var connectors = normalizeAgentConnectors(agent.connectors);
@@ -67,4 +92,4 @@ export var withNormalizedConnectors = function withNormalizedConnectors(agent) {
67
92
  connectors: connectors
68
93
  }) : agent;
69
94
  };
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfQ09OTkVDVE9SX0dST1VQIiwiQ09SX1RPT0xfR1JPVVBfU0xVR1MiLCJidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QiLCJ0YXNrQWNjZXNzIiwiY29uY2F0IiwiYnVpbGRBZ2VudENvbm5lY3RvcnNGcm9tVGFza0FjY2VzcyIsImdyb3VwIiwic2x1Z3MiLCJub3JtYWxpemVBZ2VudENvbm5lY3RvcnMiLCJyYXciLCJBcnJheSIsImlzQXJyYXkiLCJ1bmRlZmluZWQiLCJwYXJzZWQiLCJmaWx0ZXIiLCJjb25uZWN0b3IiLCJfdHlwZW9mIiwibWFwIiwic2x1ZyIsImxlbmd0aCIsImRlcml2ZVRhc2tBY2Nlc3NGcm9tVG9vbEdyb3VwU2x1Z3MiLCJzb21lIiwid2l0aE5vcm1hbGl6ZWRDb25uZWN0b3JzIiwiYWdlbnQiLCJjb25uZWN0b3JzIiwiX29iamVjdFNwcmVhZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ub3JtYWxpemVBZ2VudENvbm5lY3RvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBZ2VudENvbm5lY3RvciB9IGZyb20gJy4uL3R5cGVzL2FnZW50J1xuXG4vKiogR3J1cG8gZGUgY29uZWN0b3JlcyBDT1IgZGVudHJvIGRlIGBjb25uZWN0b3JzYC4gKi9cbmV4cG9ydCBjb25zdCBDT1JfQ09OTkVDVE9SX0dST1VQID0gJ0NPUidcblxuLyoqIFNsdWdzIGRlIHRvb2wgZ3JvdXBzIENPUiBxdWUgaGFiaWxpdGEgZWwgc3dpdGNoIGRlIFwiYWNjZXNvIGEgdGFyZWFzXCIgZGVsIEFCTS4gKi9cbmV4cG9ydCBjb25zdCBDT1JfVE9PTF9HUk9VUF9TTFVHUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3RhcmVhcycsICdwcm95ZWN0b3MnXVxuXG4vKipcbiAqIENvbnN0cnV5ZSBlbCBhcnJheSBgdG9vbF9ncm91cF9zbHVnc2AgcGFyYSBsYSBydXRhIGBQT1NUIGFnZW50cy97aWR9L3Rvb2wtZ3JvdXBzYCBhIHBhcnRpciBkZWwgc3dpdGNoLlxuICogQWN0aXZvIOKGkiBgWyd0YXJlYXMnLCAncHJveWVjdG9zJ11gOyBhcGFnYWRvIOKGkiBgW11gLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0ID0gKHRhc2tBY2Nlc3M6IGJvb2xlYW4pOiBzdHJpbmdbXSA9PlxuICB0YXNrQWNjZXNzID8gWy4uLkNPUl9UT09MX0dST1VQX1NMVUdTXSA6IFtdXG5cbi8qKlxuICogQ29uc3RydXllIGxvcyBgY29ubmVjdG9yc2AgYWdydXBhZG9zIChtaXNtbyBmb3JtYXRvIHF1ZSBkZXZ1ZWx2ZSBlbCBiYWNrIGVuIGxpc3RhZG8vc2VzacOzbilcbiAqIGEgcGFydGlyIGRlbCBzd2l0Y2gsIHBhcmEgaGlkcmF0YXIgZGUgZm9ybWEgb3B0aW1pc3RhIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkby9lZGl0YWRvIHNpbiByZWZldGNoLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRBZ2VudENvbm5lY3RvcnNGcm9tVGFza0FjY2VzcyA9ICh0YXNrQWNjZXNzOiBib29sZWFuKTogQWdlbnRDb25uZWN0b3JbXSA9PiBbXG4gIHsgZ3JvdXA6IENPUl9DT05ORUNUT1JfR1JPVVAsIHNsdWdzOiB0YXNrQWNjZXNzID8gWy4uLkNPUl9UT09MX0dST1VQX1NMVUdTXSA6IFtdIH0sXG4gIHsgZ3JvdXA6ICdNQ1AnLCBzbHVnczogW10gfSxcbl1cblxuLyoqIE5vcm1hbGl6YSBlbCBhcnJheSBgY29ubmVjdG9yc2AgcXVlIGRldnVlbHZlIGxhIEFQSSBkZSBhZ2VudGVzIG8gc2VzaW9uZXMuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzID0gKHJhdzogdW5rbm93bik6IEFnZW50Q29ubmVjdG9yW10gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3KSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXJzZWQgPSByYXdcbiAgICAuZmlsdGVyKChjb25uZWN0b3IpOiBjb25uZWN0b3IgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFjb25uZWN0b3IgJiYgdHlwZW9mIGNvbm5lY3RvciA9PT0gJ29iamVjdCcpXG4gICAgLm1hcChjb25uZWN0b3IgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0eXBlb2YgY29ubmVjdG9yLmdyb3VwID09PSAnc3RyaW5nJyA/IGNvbm5lY3Rvci5ncm91cCA6ICcnXG4gICAgICBjb25zdCBzbHVncyA9IEFycmF5LmlzQXJyYXkoY29ubmVjdG9yLnNsdWdzKVxuICAgICAgICA/IGNvbm5lY3Rvci5zbHVncy5maWx0ZXIoKHNsdWcpOiBzbHVnIGlzIHN0cmluZyA9PiB0eXBlb2Ygc2x1ZyA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW11cbiAgICAgIHJldHVybiB7IGdyb3VwLCBzbHVncyB9XG4gICAgfSlcbiAgICAuZmlsdGVyKGNvbm5lY3RvciA9PiBjb25uZWN0b3IuZ3JvdXAubGVuZ3RoID4gMClcblxuICByZXR1cm4gcGFyc2VkLmxlbmd0aCA+IDAgPyBwYXJzZWQgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBEZXJpdmEgZWwgZXN0YWRvIGRlbCBzd2l0Y2ggZGUgXCJhY2Nlc28gYSB0YXJlYXNcIiBkZXNkZSBgdG9vbF9ncm91cF9zbHVnc2AgZGVsIGRldGFsbGUgZGVsIGFnZW50ZVxuICogKGBHRVQgYWdlbnRzL3tpZH1gKS4gQWN0aXZvIHNpIGVsIGFycmF5IHRyYWUgYWwgbWVub3MgdW4gc2x1Zy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVRhc2tBY2Nlc3NGcm9tVG9vbEdyb3VwU2x1Z3MgPSAocmF3OiB1bmtub3duKTogYm9vbGVhbiA9PlxuICBBcnJheS5pc0FycmF5KHJhdykgJiYgcmF3LnNvbWUoc2x1ZyA9PiB0eXBlb2Ygc2x1ZyA9PT0gJ3N0cmluZycgJiYgc2x1Zy5sZW5ndGggPiAwKVxuXG4vKiogQXNlZ3VyYSBgY29ubmVjdG9yc2Agbm9ybWFsaXphZG9zIGVuIHVuIGFnZW50ZSBwcm92ZW5pZW50ZSBkZWwgbGlzdGFkbyBkZSBjdXN0b21zLiAqL1xuZXhwb3J0IGNvbnN0IHdpdGhOb3JtYWxpemVkQ29ubmVjdG9ycyA9IDxUIGV4dGVuZHMgeyBjb25uZWN0b3JzPzogdW5rbm93biB9PihhZ2VudDogVCk6IFQgPT4ge1xuICBjb25zdCBjb25uZWN0b3JzID0gbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzKGFnZW50LmNvbm5lY3RvcnMpXG4gIHJldHVybiBjb25uZWN0b3JzID8geyAuLi5hZ2VudCwgY29ubmVjdG9ycyB9IDogYWdlbnRcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUVBO0FBQ0EsT0FBTyxJQUFNQSxtQkFBbUIsR0FBRyxLQUFLOztBQUV4QztBQUNBLE9BQU8sSUFBTUMsb0JBQXVDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDOztBQUU5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUMsVUFBbUI7RUFBQSxPQUM3REEsVUFBVSxNQUFBQyxNQUFBLENBQU9ILG9CQUFvQixJQUFJLEVBQUU7QUFBQTs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1JLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQUlGLFVBQW1CO0VBQUEsT0FBdUIsQ0FDM0Y7SUFBRUcsS0FBSyxFQUFFTixtQkFBbUI7SUFBRU8sS0FBSyxFQUFFSixVQUFVLE1BQUFDLE1BQUEsQ0FBT0gsb0JBQW9CLElBQUk7RUFBRyxDQUFDLEVBQ2xGO0lBQUVLLEtBQUssRUFBRSxLQUFLO0lBQUVDLEtBQUssRUFBRTtFQUFHLENBQUMsQ0FDNUI7QUFBQTs7QUFFRDtBQUNBLE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSUMsR0FBWSxFQUFtQztFQUN0RixJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixHQUFHLENBQUMsRUFBRSxPQUFPRyxTQUFTO0VBQ3pDLElBQU1DLE1BQU0sR0FBR0osR0FBRyxDQUNmSyxNQUFNLENBQUMsVUFBQ0MsU0FBUztJQUFBLE9BQTJDLENBQUMsQ0FBQ0EsU0FBUyxJQUFJQyxPQUFBLENBQU9ELFNBQVMsTUFBSyxRQUFRO0VBQUEsRUFBQyxDQUN6R0UsR0FBRyxDQUFDLFVBQUFGLFNBQVMsRUFBSTtJQUNoQixJQUFNVCxLQUFLLEdBQUcsT0FBT1MsU0FBUyxDQUFDVCxLQUFLLEtBQUssUUFBUSxHQUFHUyxTQUFTLENBQUNULEtBQUssR0FBRyxFQUFFO0lBQ3hFLElBQU1DLEtBQUssR0FBR0csS0FBSyxDQUFDQyxPQUFPLENBQUNJLFNBQVMsQ0FBQ1IsS0FBSyxDQUFDLEdBQ3hDUSxTQUFTLENBQUNSLEtBQUssQ0FBQ08sTUFBTSxDQUFDLFVBQUNJLElBQUk7TUFBQSxPQUFxQixPQUFPQSxJQUFJLEtBQUssUUFBUTtJQUFBLEVBQUMsR0FDMUUsRUFBRTtJQUNOLE9BQU87TUFBRVosS0FBSyxFQUFMQSxLQUFLO01BQUVDLEtBQUssRUFBTEE7SUFBTSxDQUFDO0VBQ3pCLENBQUMsQ0FBQyxDQUNETyxNQUFNLENBQUMsVUFBQUMsU0FBUztJQUFBLE9BQUlBLFNBQVMsQ0FBQ1QsS0FBSyxDQUFDYSxNQUFNLEdBQUcsQ0FBQztFQUFBLEVBQUM7RUFFbEQsT0FBT04sTUFBTSxDQUFDTSxNQUFNLEdBQUcsQ0FBQyxHQUFHTixNQUFNLEdBQUdELFNBQVM7QUFDL0MsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTVEsa0NBQWtDLEdBQUcsU0FBckNBLGtDQUFrQ0EsQ0FBSVgsR0FBWTtFQUFBLE9BQzdEQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsR0FBRyxDQUFDLElBQUlBLEdBQUcsQ0FBQ1ksSUFBSSxDQUFDLFVBQUFILElBQUk7SUFBQSxPQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLElBQUlBLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUM7RUFBQSxFQUFDO0FBQUE7O0FBRXJGO0FBQ0EsT0FBTyxJQUFNRyx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUF3Q0MsS0FBUSxFQUFRO0VBQzNGLElBQU1DLFVBQVUsR0FBR2hCLHdCQUF3QixDQUFDZSxLQUFLLENBQUNDLFVBQVUsQ0FBQztFQUM3RCxPQUFPQSxVQUFVLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUFRRixLQUFLO0lBQUVDLFVBQVUsRUFBVkE7RUFBVSxLQUFLRCxLQUFLO0FBQ3RELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
95
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfQ09OTkVDVE9SX0dST1VQIiwiTUNQX0NPTk5FQ1RPUl9HUk9VUCIsIk5FVFNVSVRFX0NPTk5FQ1RPUl9TTFVHIiwiQ09SX1RPT0xfR1JPVVBfU0xVR1MiLCJidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QiLCJ0YXNrQWNjZXNzIiwiY29uY2F0IiwiYnVpbGRBZ2VudENvbm5lY3RvcnNGcm9tVGFza0FjY2VzcyIsIm1jcFNsdWdzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZ3JvdXAiLCJzbHVncyIsIl90b0NvbnN1bWFibGVBcnJheSIsIm5vcm1hbGl6ZUFnZW50Q29ubmVjdG9ycyIsInJhdyIsIkFycmF5IiwiaXNBcnJheSIsInBhcnNlZCIsImZpbHRlciIsImNvbm5lY3RvciIsIl90eXBlb2YiLCJtYXAiLCJzbHVnIiwiZGVyaXZlVGFza0FjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyIsInNvbWUiLCJkZXJpdmVNY3BDb25uZWN0b3JTbHVncyIsImNvbm5lY3RvcnMiLCJfbm9ybWFsaXplQWdlbnRDb25uZWMiLCJfbm9ybWFsaXplQWdlbnRDb25uZWMyIiwiZmluZCIsImRlcml2ZUNvbm5lY3RlZENvbm5lY3RvclNsdWdzIiwiYWdlbnRDb25uZWN0b3JzIiwiZW5hYmxlZF9mb3JfYWdlbnQiLCJyZXF1aXJlc19hdXRoIiwidXNlcl9hdXRob3JpemVkIiwid2l0aE5vcm1hbGl6ZWRDb25uZWN0b3JzIiwiYWdlbnQiLCJfb2JqZWN0U3ByZWFkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL25vcm1hbGl6ZUFnZW50Q29ubmVjdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFnZW50Q29ubmVjdG9yIH0gZnJvbSAnLi4vdHlwZXMvYWdlbnQnXG5cbi8qKiBHcnVwbyBkZSBjb25lY3RvcmVzIENPUiBkZW50cm8gZGUgYGNvbm5lY3RvcnNgLiAqL1xuZXhwb3J0IGNvbnN0IENPUl9DT05ORUNUT1JfR1JPVVAgPSAnQ09SJ1xuXG4vKiogR3J1cG8gZGUgY29uZWN0b3JlcyBleHRlcm5vcyAoTUNQKSBkZW50cm8gZGUgYGNvbm5lY3RvcnNgLiAqL1xuZXhwb3J0IGNvbnN0IE1DUF9DT05ORUNUT1JfR1JPVVAgPSAnTUNQJ1xuXG4vKiogU2x1ZyBkZWwgY29uZWN0b3IgTmV0U3VpdGUgKGNhdGFsb2dvIE1DUCkuICovXG5leHBvcnQgY29uc3QgTkVUU1VJVEVfQ09OTkVDVE9SX1NMVUcgPSAnbmV0c3VpdGUnXG5cbi8qKiBTbHVncyBkZSB0b29sIGdyb3VwcyBDT1IgcXVlIGhhYmlsaXRhIGVsIHN3aXRjaCBkZSBcImFjY2VzbyBhIHRhcmVhc1wiIGRlbCBBQk0uICovXG5leHBvcnQgY29uc3QgQ09SX1RPT0xfR1JPVVBfU0xVR1M6IHJlYWRvbmx5IHN0cmluZ1tdID0gWyd0YXJlYXMnLCAncHJveWVjdG9zJ11cblxuLyoqXG4gKiBDb25zdHJ1eWUgZWwgYXJyYXkgYHRvb2xfZ3JvdXBfc2x1Z3NgIHBhcmEgbGEgcnV0YSBgUE9TVCBhZ2VudHMve2lkfS90b29sLWdyb3Vwc2AgYSBwYXJ0aXIgZGVsIHN3aXRjaC5cbiAqIEFjdGl2byDihpIgYFsndGFyZWFzJywgJ3Byb3llY3RvcyddYDsgYXBhZ2FkbyDihpIgYFtdYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdCA9ICh0YXNrQWNjZXNzOiBib29sZWFuKTogc3RyaW5nW10gPT5cbiAgdGFza0FjY2VzcyA/IFsuLi5DT1JfVE9PTF9HUk9VUF9TTFVHU10gOiBbXVxuXG4vKipcbiAqIENvbnN0cnV5ZSBsb3MgYGNvbm5lY3RvcnNgIGFncnVwYWRvcyAobWlzbW8gZm9ybWF0byBxdWUgZGV2dWVsdmUgZWwgYmFjayBlbiBsaXN0YWRvL3Nlc2nDs24pXG4gKiBhIHBhcnRpciBkZWwgc3dpdGNoLCBwYXJhIGhpZHJhdGFyIGRlIGZvcm1hIG9wdGltaXN0YSBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8vZWRpdGFkbyBzaW4gcmVmZXRjaC5cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkQWdlbnRDb25uZWN0b3JzRnJvbVRhc2tBY2Nlc3MgPSAoXG4gIHRhc2tBY2Nlc3M6IGJvb2xlYW4sXG4gIG1jcFNsdWdzOiBzdHJpbmdbXSA9IFtdXG4pOiBBZ2VudENvbm5lY3RvcltdID0+IFtcbiAgeyBncm91cDogQ09SX0NPTk5FQ1RPUl9HUk9VUCwgc2x1Z3M6IHRhc2tBY2Nlc3MgPyBbLi4uQ09SX1RPT0xfR1JPVVBfU0xVR1NdIDogW10gfSxcbiAgeyBncm91cDogTUNQX0NPTk5FQ1RPUl9HUk9VUCwgc2x1Z3M6IFsuLi5tY3BTbHVnc10gfSxcbl1cblxuLyoqIE5vcm1hbGl6YSBlbCBhcnJheSBgY29ubmVjdG9yc2AgcXVlIGRldnVlbHZlIGxhIEFQSSBkZSBhZ2VudGVzIG8gc2VzaW9uZXMuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzID0gKHJhdzogdW5rbm93bik6IEFnZW50Q29ubmVjdG9yW10gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3KSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXJzZWQgPSByYXdcbiAgICAuZmlsdGVyKChjb25uZWN0b3IpOiBjb25uZWN0b3IgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFjb25uZWN0b3IgJiYgdHlwZW9mIGNvbm5lY3RvciA9PT0gJ29iamVjdCcpXG4gICAgLm1hcChjb25uZWN0b3IgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0eXBlb2YgY29ubmVjdG9yLmdyb3VwID09PSAnc3RyaW5nJyA/IGNvbm5lY3Rvci5ncm91cCA6ICcnXG4gICAgICBjb25zdCBzbHVncyA9IEFycmF5LmlzQXJyYXkoY29ubmVjdG9yLnNsdWdzKVxuICAgICAgICA/IGNvbm5lY3Rvci5zbHVncy5maWx0ZXIoKHNsdWcpOiBzbHVnIGlzIHN0cmluZyA9PiB0eXBlb2Ygc2x1ZyA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW11cbiAgICAgIHJldHVybiB7IGdyb3VwLCBzbHVncyB9XG4gICAgfSlcbiAgICAuZmlsdGVyKGNvbm5lY3RvciA9PiBjb25uZWN0b3IuZ3JvdXAubGVuZ3RoID4gMClcblxuICByZXR1cm4gcGFyc2VkLmxlbmd0aCA+IDAgPyBwYXJzZWQgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBEZXJpdmEgZWwgZXN0YWRvIGRlbCBzd2l0Y2ggZGUgXCJhY2Nlc28gYSB0YXJlYXNcIiBkZXNkZSBgdG9vbF9ncm91cF9zbHVnc2AgZGVsIGRldGFsbGUgZGVsIGFnZW50ZVxuICogKGBHRVQgYWdlbnRzL3tpZH1gKS4gQWN0aXZvIHNpIGVsIGFycmF5IHRyYWUgYWwgbWVub3MgdW4gc2x1Zy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZVRhc2tBY2Nlc3NGcm9tVG9vbEdyb3VwU2x1Z3MgPSAocmF3OiB1bmtub3duKTogYm9vbGVhbiA9PlxuICBBcnJheS5pc0FycmF5KHJhdykgJiYgcmF3LnNvbWUoc2x1ZyA9PiB0eXBlb2Ygc2x1ZyA9PT0gJ3N0cmluZycgJiYgc2x1Zy5sZW5ndGggPiAwKVxuXG4vKiogU2x1Z3MgTUNQIGhhYmlsaXRhZG9zIGVuIGBjb25uZWN0b3JzW10uZ3JvdXAgPT09ICdNQ1AnYC4gKi9cbmV4cG9ydCBjb25zdCBkZXJpdmVNY3BDb25uZWN0b3JTbHVncyA9IChjb25uZWN0b3JzOiB1bmtub3duKTogc3RyaW5nW10gPT5cbiAgbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzKGNvbm5lY3RvcnMpPy5maW5kKGNvbm5lY3RvciA9PiBjb25uZWN0b3IuZ3JvdXAgPT09IE1DUF9DT05ORUNUT1JfR1JPVVApPy5zbHVncyA/PyBbXVxuXG4vKiogU2x1Z3MgTUNQIHF1ZSBsYSBjb21wYcOxw61hIHlhIGF1dG9yaXrDsyAodG9rZW4gT0F1dGgpLCBubyBzb2xvIGxvcyBhc2lnbmFkb3MgYWwgYWdlbnRlLiAqL1xuZXhwb3J0IGNvbnN0IGRlcml2ZUNvbm5lY3RlZENvbm5lY3RvclNsdWdzID0gKFxuICBhZ2VudENvbm5lY3RvcnM6IHsgc2x1Zzogc3RyaW5nOyByZXF1aXJlc19hdXRoOiBib29sZWFuOyBlbmFibGVkX2Zvcl9hZ2VudDogYm9vbGVhbjsgdXNlcl9hdXRob3JpemVkOiBib29sZWFuIH1bXVxuKTogc3RyaW5nW10gPT5cbiAgYWdlbnRDb25uZWN0b3JzXG4gICAgLmZpbHRlcihjb25uZWN0b3IgPT4gY29ubmVjdG9yLmVuYWJsZWRfZm9yX2FnZW50ICYmICghY29ubmVjdG9yLnJlcXVpcmVzX2F1dGggfHwgY29ubmVjdG9yLnVzZXJfYXV0aG9yaXplZCkpXG4gICAgLm1hcChjb25uZWN0b3IgPT4gY29ubmVjdG9yLnNsdWcpXG5cbi8qKiBBc2VndXJhIGBjb25uZWN0b3JzYCBub3JtYWxpemFkb3MgZW4gdW4gYWdlbnRlIHByb3ZlbmllbnRlIGRlbCBsaXN0YWRvIGRlIGN1c3RvbXMuICovXG5leHBvcnQgY29uc3Qgd2l0aE5vcm1hbGl6ZWRDb25uZWN0b3JzID0gPFQgZXh0ZW5kcyB7IGNvbm5lY3RvcnM/OiB1bmtub3duIH0+KGFnZW50OiBUKTogVCA9PiB7XG4gIGNvbnN0IGNvbm5lY3RvcnMgPSBub3JtYWxpemVBZ2VudENvbm5lY3RvcnMoYWdlbnQuY29ubmVjdG9ycylcbiAgcmV0dXJuIGNvbm5lY3RvcnMgPyB7IC4uLmFnZW50LCBjb25uZWN0b3JzIH0gOiBhZ2VudFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUVBO0FBQ0EsT0FBTyxJQUFNQSxtQkFBbUIsR0FBRyxLQUFLOztBQUV4QztBQUNBLE9BQU8sSUFBTUMsbUJBQW1CLEdBQUcsS0FBSzs7QUFFeEM7QUFDQSxPQUFPLElBQU1DLHVCQUF1QixHQUFHLFVBQVU7O0FBRWpEO0FBQ0EsT0FBTyxJQUFNQyxvQkFBdUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7O0FBRTlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQywyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJQyxVQUFtQjtFQUFB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
@@ -0,0 +1,170 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ /* eslint-disable no-console */
5
+
6
+ var LOG_PREFIX = '[maia-stream]';
7
+ var isStreamDebugEnabled = function isStreamDebugEnabled() {
8
+ if (typeof window === 'undefined') return true;
9
+ return window.__MAIA_STREAM_DEBUG__ !== false;
10
+ };
11
+ var safeString = function safeString(value) {
12
+ var maxLen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 160;
13
+ if (value == null) return '';
14
+ var text = typeof value === 'string' ? value : JSON.stringify(value);
15
+ if (text.length <= maxLen) return text;
16
+ return "".concat(text.slice(0, maxLen), "\u2026");
17
+ };
18
+ export var summarizeTimelineSnapshot = function summarizeTimelineSnapshot(snapshot) {
19
+ return {
20
+ turnId: snapshot.turnId,
21
+ contentFrozenLength: snapshot.contentFrozenLength,
22
+ segmentCount: snapshot.segments.length,
23
+ segments: snapshot.segments.map(function (segment) {
24
+ if (segment.type === 'execution') {
25
+ return {
26
+ type: segment.type,
27
+ id: segment.id,
28
+ steps: segment.steps.map(function (step) {
29
+ return {
30
+ id: step.id,
31
+ node: step.node,
32
+ toolName: step.toolName,
33
+ status: step.status,
34
+ message: safeString(step.message, 80)
35
+ };
36
+ })
37
+ };
38
+ }
39
+ return {
40
+ type: segment.type,
41
+ id: segment.id,
42
+ textLength: segment.text.length,
43
+ textPreview: safeString(segment.text, 80)
44
+ };
45
+ })
46
+ };
47
+ };
48
+ export var summarizeHitlContext = function summarizeHitlContext(context) {
49
+ var _context$pendingActio, _context$approval, _context$approval2;
50
+ if (!context) return null;
51
+ return {
52
+ messageId: context.messageId,
53
+ threadIds: context.threadIds,
54
+ pendingTools: (_context$pendingActio = context.pendingActions) === null || _context$pendingActio === void 0 ? void 0 : _context$pendingActio.map(function (action) {
55
+ return action.tool_name;
56
+ }),
57
+ approvalStatus: (_context$approval = context.approval) !== null && _context$approval !== void 0 && _context$approval.manual_approval_detected ? 'manual_detected' : 'button',
58
+ originalThreadId: (_context$approval2 = context.approval) === null || _context$approval2 === void 0 ? void 0 : _context$approval2.original_thread_id
59
+ };
60
+ };
61
+ export var summarizeApprovalPayload = function summarizeApprovalPayload(approval) {
62
+ var _payload$pending_acti;
63
+ var payload = approval;
64
+ return {
65
+ originalThreadId: payload.original_thread_id,
66
+ sessionId: payload.session_id,
67
+ manualApprovalDetected: payload.manual_approval_detected === true,
68
+ warningMessage: payload.warning_message ? safeString(payload.warning_message, 80) : undefined,
69
+ totalActions: payload.total_actions,
70
+ pendingActions: (_payload$pending_acti = payload.pending_actions) === null || _payload$pending_acti === void 0 ? void 0 : _payload$pending_acti.map(function (action) {
71
+ return {
72
+ tool_name: action.tool_name,
73
+ thread_id: action.thread_id,
74
+ tool_call_id: action.tool_call_id
75
+ };
76
+ })
77
+ };
78
+ };
79
+ export var summarizeStreamActivity = function summarizeStreamActivity(activity) {
80
+ var _activity$executionSt, _activity$executionSt2, _activity$executionSt3;
81
+ if (!activity) return null;
82
+ return {
83
+ phase: activity.phase,
84
+ message: safeString(activity.message, 80),
85
+ executionStepCount: (_activity$executionSt = (_activity$executionSt2 = activity.executionSteps) === null || _activity$executionSt2 === void 0 ? void 0 : _activity$executionSt2.length) !== null && _activity$executionSt !== void 0 ? _activity$executionSt : 0,
86
+ executionSteps: (_activity$executionSt3 = activity.executionSteps) === null || _activity$executionSt3 === void 0 ? void 0 : _activity$executionSt3.map(function (step) {
87
+ return {
88
+ node: step.node,
89
+ toolName: step.toolName,
90
+ status: step.status,
91
+ message: safeString(step.message, 80)
92
+ };
93
+ })
94
+ };
95
+ };
96
+ export var streamDebugLog = function streamDebugLog(scope, event, payload) {
97
+ if (!isStreamDebugEnabled()) return;
98
+ if (payload) {
99
+ console.info(LOG_PREFIX, scope, event, payload);
100
+ return;
101
+ }
102
+ console.info(LOG_PREFIX, scope, event);
103
+ };
104
+ export var streamDebugWarn = function streamDebugWarn(scope, event, payload) {
105
+ if (!isStreamDebugEnabled()) return;
106
+ if (payload) {
107
+ console.warn(LOG_PREFIX, scope, event, payload);
108
+ return;
109
+ }
110
+ console.warn(LOG_PREFIX, scope, event);
111
+ };
112
+ export var streamDebugTimeline = function streamDebugTimeline(scope, event, snapshot) {
113
+ streamDebugLog(scope, event, summarizeTimelineSnapshot(snapshot));
114
+ };
115
+ export var streamDebugSse = function streamDebugSse(channel, eventType, payload) {
116
+ streamDebugLog("sse:".concat(channel), eventType, payload);
117
+ };
118
+ export var streamDebugHitlContext = function streamDebugHitlContext(scope, event, context) {
119
+ streamDebugLog(scope, event, {
120
+ hitlContext: summarizeHitlContext(context)
121
+ });
122
+ };
123
+ export var streamDebugApproval = function streamDebugApproval(scope, event, approval, extra) {
124
+ streamDebugLog(scope, event, _objectSpread({
125
+ approval: summarizeApprovalPayload(approval)
126
+ }, extra));
127
+ };
128
+ export var streamDebugActivity = function streamDebugActivity(scope, event, activity, extra) {
129
+ streamDebugLog(scope, event, _objectSpread({
130
+ activity: summarizeStreamActivity(activity)
131
+ }, extra));
132
+ };
133
+ export var streamDebugNode = function streamDebugNode(scope, payload, extra) {
134
+ streamDebugLog(scope, 'node', _objectSpread({
135
+ node: payload.node,
136
+ tool_name: payload.tool_name,
137
+ thread_id: payload.thread_id,
138
+ backendMessage: safeString(payload.message, 120),
139
+ resolvedMessage: extra !== null && extra !== void 0 && extra.resolvedMessage ? safeString(extra.resolvedMessage, 120) : undefined,
140
+ resolvedPhase: extra === null || extra === void 0 ? void 0 : extra.resolvedPhase
141
+ }, extra));
142
+ };
143
+
144
+ /** Alerta cuando el node HITL coincide con tools del approval pendiente (posible UI duplicada). */
145
+ export var streamDebugLogHitlUiOverlap = function streamDebugLogHitlUiOverlap(params) {
146
+ var _params$hitlContext$p, _params$hitlContext, _params$nodePayload$t, _params$nodePayload, _params$nodePayload2, _params$activityMessa, _params$activityMessa2, _params$nodePayload$m, _params$nodePayload3, _params$uiSurfaces$le, _params$uiSurfaces, _params$nodePayload4;
147
+ var pendingTools = (_params$hitlContext$p = (_params$hitlContext = params.hitlContext) === null || _params$hitlContext === void 0 || (_params$hitlContext = _params$hitlContext.pendingActions) === null || _params$hitlContext === void 0 ? void 0 : _params$hitlContext.map(function (action) {
148
+ return action.tool_name;
149
+ })) !== null && _params$hitlContext$p !== void 0 ? _params$hitlContext$p : [];
150
+ var nodeTool = (_params$nodePayload$t = (_params$nodePayload = params.nodePayload) === null || _params$nodePayload === void 0 ? void 0 : _params$nodePayload.tool_name) !== null && _params$nodePayload$t !== void 0 ? _params$nodePayload$t : (_params$nodePayload2 = params.nodePayload) === null || _params$nodePayload2 === void 0 ? void 0 : _params$nodePayload2.node;
151
+ var activityMsg = (_params$activityMessa = (_params$activityMessa2 = params.activityMessage) === null || _params$activityMessa2 === void 0 ? void 0 : _params$activityMessa2.trim().toLowerCase()) !== null && _params$activityMessa !== void 0 ? _params$activityMessa : '';
152
+ var backendMsg = (_params$nodePayload$m = (_params$nodePayload3 = params.nodePayload) === null || _params$nodePayload3 === void 0 || (_params$nodePayload3 = _params$nodePayload3.message) === null || _params$nodePayload3 === void 0 ? void 0 : _params$nodePayload3.trim().toLowerCase()) !== null && _params$nodePayload$m !== void 0 ? _params$nodePayload$m : '';
153
+ var toolOverlap = nodeTool && nodeTool !== 'resuming' && pendingTools.some(function (tool) {
154
+ return tool === nodeTool;
155
+ });
156
+ var hasMultipleSurfaces = ((_params$uiSurfaces$le = (_params$uiSurfaces = params.uiSurfaces) === null || _params$uiSurfaces === void 0 ? void 0 : _params$uiSurfaces.length) !== null && _params$uiSurfaces$le !== void 0 ? _params$uiSurfaces$le : 0) >= 2;
157
+ var messagesMatch = activityMsg.length > 0 && backendMsg.length > 0 && activityMsg === backendMsg;
158
+ if (!toolOverlap && !(hasMultipleSurfaces && messagesMatch)) return;
159
+ streamDebugWarn(params.scope, 'hitl-ui-overlap-suspect', {
160
+ source: params.source,
161
+ uiSurfaces: params.uiSurfaces,
162
+ pendingTools: pendingTools,
163
+ nodeTool: nodeTool,
164
+ backendMessage: safeString((_params$nodePayload4 = params.nodePayload) === null || _params$nodePayload4 === void 0 ? void 0 : _params$nodePayload4.message, 120),
165
+ activityMessage: safeString(params.activityMessage, 120),
166
+ messagesMatch: messagesMatch,
167
+ hitlContext: summarizeHitlContext(params.hitlContext)
168
+ });
169
+ };
170
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0dfUFJFRklYIiwiaXNTdHJlYW1EZWJ1Z0VuYWJsZWQiLCJ3aW5kb3ciLCJfX01BSUFfU1RSRUFNX0RFQlVHX18iLCJzYWZlU3RyaW5nIiwidmFsdWUiLCJtYXhMZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ0ZXh0IiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbmNhdCIsInNsaWNlIiwic3VtbWFyaXplVGltZWxpbmVTbmFwc2hvdCIsInNuYXBzaG90IiwidHVybklkIiwiY29udGVudEZyb3plbkxlbmd0aCIsInNlZ21lbnRDb3VudCIsInNlZ21lbnRzIiwibWFwIiwic2VnbWVudCIsInR5cGUiLCJpZCIsInN0ZXBzIiwic3RlcCIsIm5vZGUiLCJ0b29sTmFtZSIsInN0YXR1cyIsIm1lc3NhZ2UiLCJ0ZXh0TGVuZ3RoIiwidGV4dFByZXZpZXciLCJzdW1tYXJpemVIaXRsQ29udGV4dCIsImNvbnRleHQiLCJfY29udGV4dCRwZW5kaW5nQWN0aW8iLCJfY29udGV4dCRhcHByb3ZhbCIsIl9jb250ZXh0JGFwcHJvdmFsMiIsIm1lc3NhZ2VJZCIsInRocmVhZElkcyIsInBlbmRpbmdUb29scyIsInBlbmRpbmdBY3Rpb25zIiwiYWN0aW9uIiwidG9vbF9uYW1lIiwiYXBwcm92YWxTdGF0dXMiLCJhcHByb3ZhbCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsIm9yaWdpbmFsVGhyZWFkSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJzdW1tYXJpemVBcHByb3ZhbFBheWxvYWQiLCJfcGF5bG9hZCRwZW5kaW5nX2FjdGkiLCJwYXlsb2FkIiwic2Vzc2lvbklkIiwic2Vzc2lvbl9pZCIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsInRvdGFsQWN0aW9ucyIsInRvdGFsX2FjdGlvbnMiLCJwZW5kaW5nX2FjdGlvbnMiLCJ0aHJlYWRfaWQiLCJ0b29sX2NhbGxfaWQiLCJzdW1tYXJpemVTdHJlYW1BY3Rpdml0eSIsImFjdGl2aXR5IiwiX2FjdGl2aXR5JGV4ZWN1dGlvblN0IiwiX2FjdGl2aXR5JGV4ZWN1dGlvblN0MiIsIl9hY3Rpdml0eSRleGVjdXRpb25TdDMiLCJwaGFzZSIsImV4ZWN1dGlvblN0ZXBDb3VudCIsImV4ZWN1dGlvblN0ZXBzIiwic3RyZWFtRGVidWdMb2ciLCJzY29wZSIsImV2ZW50IiwiY29uc29sZSIsImluZm8iLCJzdHJlYW1EZWJ1Z1dhcm4iLCJ3YXJuIiwic3RyZWFtRGVidWdUaW1lbGluZSIsInN0cmVhbURlYnVnU3NlIiwiY2hhbm5lbCIsImV2ZW50VHlwZSIsInN0cmVhbURlYnVnSGl0bENvbnRleHQiLCJoaXRsQ29udGV4dCIsInN0cmVhbURlYnVnQXBwcm92YWwiLCJleHRyYSIsIl9vYmplY3RTcHJlYWQiLCJzdHJlYW1EZWJ1Z0FjdGl2aXR5Iiwic3RyZWFtRGVidWdOb2RlIiwiYmFja2VuZE1lc3NhZ2UiLCJyZXNvbHZlZE1lc3NhZ2UiLCJyZXNvbHZlZFBoYXNlIiwic3RyZWFtRGVidWdMb2dIaXRsVWlPdmVybGFwIiwicGFyYW1zIiwiX3BhcmFtcyRoaXRsQ29udGV4dCRwIiwiX3BhcmFtcyRoaXRsQ29udGV4dCIsIl9wYXJhbXMkbm9kZVBheWxvYWQkdCIsIl9wYXJhbXMkbm9kZVBheWxvYWQiLCJfcGFyYW1zJG5vZGVQYXlsb2FkMiIsIl9wYXJhbXMkYWN0aXZpdHlNZXNzYSIsIl9wYXJhbXMkYWN0aXZpdHlNZXNzYTIiLCJfcGFyYW1zJG5vZGVQYXlsb2FkJG0iLCJfcGFyYW1zJG5vZGVQYXlsb2FkMyIsIl9wYXJhbXMkdWlTdXJmYWNlcyRsZSIsIl9wYXJhbXMkdWlTdXJmYWNlcyIsIl9wYXJhbXMkbm9kZVBheWxvYWQ0Iiwibm9kZVRvb2wiLCJub2RlUGF5bG9hZCIsImFjdGl2aXR5TXNnIiwiYWN0aXZpdHlNZXNzYWdlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiYmFja2VuZE1zZyIsInRvb2xPdmVybGFwIiwic29tZSIsInRvb2wiLCJoYXNNdWx0aXBsZVN1cmZhY2VzIiwidWlTdXJmYWNlcyIsIm1lc3NhZ2VzTWF0Y2giLCJzb3VyY2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc3RyZWFtRGVidWdMb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9DaGF0J1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSwgU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCB9IGZyb20gJy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1UaW1lbGluZVNuYXBzaG90IH0gZnJvbSAnLi4vdHlwZXMvc3RyZWFtVGltZWxpbmUnXG5pbXBvcnQgdHlwZSB7IEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuXG5jb25zdCBMT0dfUFJFRklYID0gJ1ttYWlhLXN0cmVhbV0nXG5cbnR5cGUgU3RyZWFtRGVidWdQYXlsb2FkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvKiogRGVzYWN0aXZhciBsb2dzOiBgd2luZG93Ll9fTUFJQV9TVFJFQU1fREVCVUdfXyA9IGZhbHNlYCAqL1xuICAgIF9fTUFJQV9TVFJFQU1fREVCVUdfXz86IGJvb2xlYW5cbiAgfVxufVxuXG5jb25zdCBpc1N0cmVhbURlYnVnRW5hYmxlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gd2luZG93Ll9fTUFJQV9TVFJFQU1fREVCVUdfXyAhPT0gZmFsc2Vcbn1cblxuY29uc3Qgc2FmZVN0cmluZyA9ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuID0gMTYwKTogc3RyaW5nID0+IHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiAnJ1xuICBjb25zdCB0ZXh0ID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpXG4gIGlmICh0ZXh0Lmxlbmd0aCA8PSBtYXhMZW4pIHJldHVybiB0ZXh0XG4gIHJldHVybiBgJHt0ZXh0LnNsaWNlKDAsIG1heExlbil94oCmYFxufVxuXG5leHBvcnQgY29uc3Qgc3VtbWFyaXplVGltZWxpbmVTbmFwc2hvdCA9IChzbmFwc2hvdDogU3RyZWFtVGltZWxpbmVTbmFwc2hvdCkgPT4gKHtcbiAgdHVybklkOiBzbmFwc2hvdC50dXJuSWQsXG4gIGNvbnRlbnRGcm96ZW5MZW5ndGg6IHNuYXBzaG90LmNvbnRlbnRGcm96ZW5MZW5ndGgsXG4gIHNlZ21lbnRDb3VudDogc25hcHNob3Quc2VnbWVudHMubGVuZ3RoLFxuICBzZWdtZW50czogc25hcHNob3Quc2VnbWVudHMubWFwKHNlZ21lbnQgPT4ge1xuICAgIGlmIChzZWdtZW50LnR5cGUgPT09ICdleGVjdXRpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBzZWdtZW50LnR5cGUsXG4gICAgICAgIGlkOiBzZWdtZW50LmlkLFxuICAgICAgICBzdGVwczogc2VnbWVudC5zdGVwcy5tYXAoc3RlcCA9PiAoe1xuICAgICAgICAgIGlkOiBzdGVwLmlkLFxuICAgICAgICAgIG5vZGU6IHN0ZXAubm9kZSxcbiAgICAgICAgICB0b29sTmFtZTogc3RlcC50b29sTmFtZSxcbiAgICAgICAgICBzdGF0dXM6IHN0ZXAuc3RhdHVzLFxuICAgICAgICAgIG1lc3NhZ2U6IHNhZmVTdHJpbmcoc3RlcC5tZXNzYWdlLCA4MCksXG4gICAgICAgIH0pKSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHNlZ21lbnQudHlwZSxcbiAgICAgIGlkOiBzZWdtZW50LmlkLFxuICAgICAgdGV4dExlbmd0aDogc2VnbWVudC50ZXh0Lmxlbmd0aCxcbiAgICAgIHRleHRQcmV2aWV3OiBzYWZlU3RyaW5nKHNlZ21lbnQudGV4dCwgODApLFxuICAgIH1cbiAgfSksXG59KVxuXG5leHBvcnQgY29uc3Qgc3VtbWFyaXplSGl0bENvbnRleHQgPSAoY29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmICghY29udGV4dCkgcmV0dXJuIG51bGxcbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlSWQ6IGNvbnRleHQubWVzc2FnZUlkLFxuICAgIHRocmVhZElkczogY29udGV4dC50aHJlYWRJZHMsXG4gICAgcGVuZGluZ1Rvb2xzOiBjb250ZXh0LnBlbmRpbmdBY3Rpb25zPy5tYXAoYWN0aW9uID0+IGFjdGlvbi50b29sX25hbWUpLFxuICAgIGFwcHJvdmFsU3RhdHVzOiBjb250ZXh0LmFwcHJvdmFsPy5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPyAnbWFudWFsX2RldGVjdGVkJyA6ICdidXR0b24nLFxuICAgIG9yaWdpbmFsVGhyZWFkSWQ6IGNvbnRleHQuYXBwcm92YWw/Lm9yaWdpbmFsX3RocmVhZF9pZCxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc3VtbWFyaXplQXBwcm92YWxQYXlsb2FkID0gKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICBjb25zdCBwYXlsb2FkID0gYXBwcm92YWwgYXMgQXBwcm92YWxSZXF1ZXN0XG4gIHJldHVybiB7XG4gICAgb3JpZ2luYWxUaHJlYWRJZDogcGF5bG9hZC5vcmlnaW5hbF90aHJlYWRfaWQsXG4gICAgc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25faWQsXG4gICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZDogcGF5bG9hZC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWUsXG4gICAgd2FybmluZ01lc3NhZ2U6IHBheWxvYWQud2FybmluZ19tZXNzYWdlID8gc2FmZVN0cmluZyhwYXlsb2FkLndhcm5pbmdfbWVzc2FnZSwgODApIDogdW5kZWZpbmVkLFxuICAgIHRvdGFsQWN0aW9uczogcGF5bG9hZC50b3RhbF9hY3Rpb25zLFxuICAgIHBlbmRpbmdBY3Rpb25zOiBwYXlsb2FkLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiAoe1xuICAgICAgdG9vbF9uYW1lOiBhY3Rpb24udG9vbF9uYW1lLFxuICAgICAgdGhyZWFkX2lkOiBhY3Rpb24udGhyZWFkX2lkLFxuICAgICAgdG9vbF9jYWxsX2lkOiBhY3Rpb24udG9vbF9jYWxsX2lkLFxuICAgIH0pKSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc3VtbWFyaXplU3RyZWFtQWN0aXZpdHkgPSAoYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4ge1xuICBpZiAoIWFjdGl2aXR5KSByZXR1cm4gbnVsbFxuICByZXR1cm4ge1xuICAgIHBoYXNlOiBhY3Rpdml0eS5waGFzZSxcbiAgICBtZXNzYWdlOiBzYWZlU3RyaW5nKGFjdGl2aXR5Lm1lc3NhZ2UsIDgwKSxcbiAgICBleGVjdXRpb25TdGVwQ291bnQ6IGFjdGl2aXR5LmV4ZWN1dGlvblN0ZXBzPy5sZW5ndGggPz8gMCxcbiAgICBleGVjdXRpb25TdGVwczogYWN0aXZpdHkuZXhlY3V0aW9uU3RlcHM/Lm1hcChzdGVwID0+ICh7XG4gICAgICBub2RlOiBzdGVwLm5vZGUsXG4gICAgICB0b29sTmFtZTogc3RlcC50b29sTmFtZSxcbiAgICAgIHN0YXR1czogc3RlcC5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiBzYWZlU3RyaW5nKHN0ZXAubWVzc2FnZSwgODApLFxuICAgIH0pKSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtRGVidWdMb2cgPSAoc2NvcGU6IHN0cmluZywgZXZlbnQ6IHN0cmluZywgcGF5bG9hZD86IFN0cmVhbURlYnVnUGF5bG9hZCk6IHZvaWQgPT4ge1xuICBpZiAoIWlzU3RyZWFtRGVidWdFbmFibGVkKCkpIHJldHVyblxuICBpZiAocGF5bG9hZCkge1xuICAgIGNvbnNvbGUuaW5mbyhMT0dfUFJFRklYLCBzY29wZSwgZXZlbnQsIHBheWxvYWQpXG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc29sZS5pbmZvKExPR19QUkVGSVgsIHNjb3BlLCBldmVudClcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmVhbURlYnVnV2FybiA9IChzY29wZTogc3RyaW5nLCBldmVudDogc3RyaW5nLCBwYXlsb2FkPzogU3RyZWFtRGVidWdQYXlsb2FkKTogdm9pZCA9PiB7XG4gIGlmICghaXNTdHJlYW1EZWJ1Z0VuYWJsZWQoKSkgcmV0dXJuXG4gIGlmIChwYXlsb2FkKSB7XG4gICAgY29uc29sZS53YXJuKExPR19QUkVGSVgsIHNjb3BlLCBldmVudCwgcGF5bG9hZClcbiAgICByZXR1cm5cbiAgfVxuICBjb25zb2xlLndhcm4oTE9HX1BSRUZJWCwgc2NvcGUsIGV2ZW50KVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtRGVidWdUaW1lbGluZSA9IChzY29wZTogc3RyaW5nLCBldmVudDogc3RyaW5nLCBzbmFwc2hvdDogU3RyZWFtVGltZWxpbmVTbmFwc2hvdCk6IHZvaWQgPT4ge1xuICBzdHJlYW1EZWJ1Z0xvZyhzY29wZSwgZXZlbnQsIHN1bW1hcml6ZVRpbWVsaW5lU25hcHNob3Qoc25hcHNob3QpKVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtRGVidWdTc2UgPSAoXG4gIGNoYW5uZWw6ICdhc2tNYWlhJyB8ICdjb250aW51ZVRocmVhZCcgfCAncHJvY2Vzc1NTRVN0cmVhbScsXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICBwYXlsb2FkPzogU3RyZWFtRGVidWdQYXlsb2FkXG4pOiB2b2lkID0+IHtcbiAgc3RyZWFtRGVidWdMb2coYHNzZToke2NoYW5uZWx9YCwgZXZlbnRUeXBlLCBwYXlsb2FkKVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtRGVidWdIaXRsQ29udGV4dCA9IChcbiAgc2NvcGU6IHN0cmluZyxcbiAgZXZlbnQ6IHN0cmluZyxcbiAgY29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB2b2lkID0+IHtcbiAgc3RyZWFtRGVidWdMb2coc2NvcGUsIGV2ZW50LCB7IGhpdGxDb250ZXh0OiBzdW1tYXJpemVIaXRsQ29udGV4dChjb250ZXh0KSB9KVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtRGVidWdBcHByb3ZhbCA9IChcbiAgc2NvcGU6IHN0cmluZyxcbiAgZXZlbnQ6IHN0cmluZyxcbiAgYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBleHRyYT86IFN0cmVhbURlYnVnUGF5bG9hZFxuKTogdm9pZCA9PiB7XG4gIHN0cmVhbURlYnVnTG9nKHNjb3BlLCBldmVudCwge1xuICAgIGFwcHJvdmFsOiBzdW1tYXJpemVBcHByb3ZhbFBheWxvYWQoYXBwcm92YWwpLFxuICAgIC4uLmV4dHJhLFxuICB9KVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtRGVidWdBY3Rpdml0eSA9IChcbiAgc2NvcGU6IHN0cmluZyxcbiAgZXZlbnQ6IHN0cmluZyxcbiAgYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZXh0cmE/OiBTdHJlYW1EZWJ1Z1BheWxvYWRcbik6IHZvaWQgPT4ge1xuICBzdHJlYW1EZWJ1Z0xvZyhzY29wZSwgZXZlbnQsIHtcbiAgICBhY3Rpdml0eTogc3VtbWFyaXplU3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpLFxuICAgIC4uLmV4dHJhLFxuICB9KVxufVxuXG5leHBvcnQgY29uc3Qgc3RyZWFtRGVidWdOb2RlID0gKFxuICBzY29wZTogc3RyaW5nLFxuICBwYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkLFxuICBleHRyYT86IFN0cmVhbURlYnVnUGF5bG9hZCAmIHsgcmVzb2x2ZWRNZXNzYWdlPzogc3RyaW5nOyByZXNvbHZlZFBoYXNlPzogc3RyaW5nIH1cbik6IHZvaWQgPT4ge1xuICBzdHJlYW1EZWJ1Z0xvZyhzY29wZSwgJ25vZGUnLCB7XG4gICAgbm9kZTogcGF5bG9hZC5ub2RlLFxuICAgIHRvb2xfbmFtZTogcGF5bG9hZC50b29sX25hbWUsXG4gICAgdGhyZWFkX2lkOiBwYXlsb2FkLnRocmVhZF9pZCxcbiAgICBiYWNrZW5kTWVzc2FnZTogc2FmZVN0cmluZyhwYXlsb2FkLm1lc3NhZ2UsIDEyMCksXG4gICAgcmVzb2x2ZWRNZXNzYWdlOiBleHRyYT8ucmVzb2x2ZWRNZXNzYWdlID8gc2FmZVN0cmluZyhleHRyYS5yZXNvbHZlZE1lc3NhZ2UsIDEyMCkgOiB1bmRlZmluZWQsXG4gICAgcmVzb2x2ZWRQaGFzZTogZXh0cmE/LnJlc29sdmVkUGhhc2UsXG4gICAgLi4uZXh0cmEsXG4gIH0pXG59XG5cbi8qKiBBbGVydGEgY3VhbmRvIGVsIG5vZGUgSElUTCBjb2luY2lkZSBjb24gdG9vbHMgZGVsIGFwcHJvdmFsIHBlbmRpZW50ZSAocG9zaWJsZSBVSSBkdXBsaWNhZGEpLiAqL1xuZXhwb3J0IGNvbnN0IHN0cmVhbURlYnVnTG9nSGl0bFVpT3ZlcmxhcCA9IChwYXJhbXM6IHtcbiAgc2NvcGU6IHN0cmluZ1xuICBzb3VyY2U6ICdub2RlJyB8ICdpbml0aWFsQWN0aXZpdHknIHwgJ2FwcHJvdmFsQm94JyB8ICd0aW1lbGluZVNlZ21lbnQnXG4gIG5vZGVQYXlsb2FkPzogU3RyZWFtTm9kZUV2ZW50UGF5bG9hZFxuICBhY3Rpdml0eU1lc3NhZ2U/OiBzdHJpbmdcbiAgaGl0bENvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgdWlTdXJmYWNlcz86IHN0cmluZ1tdXG59KTogdm9pZCA9PiB7XG4gIGNvbnN0IHBlbmRpbmdUb29scyA9IHBhcmFtcy5oaXRsQ29udGV4dD8ucGVuZGluZ0FjdGlvbnM/Lm1hcChhY3Rpb24gPT4gYWN0aW9uLnRvb2xfbmFtZSkgPz8gW11cbiAgY29uc3Qgbm9kZVRvb2wgPSBwYXJhbXMubm9kZVBheWxvYWQ/LnRvb2xfbmFtZSA/PyBwYXJhbXMubm9kZVBheWxvYWQ/Lm5vZGVcbiAgY29uc3QgYWN0aXZpdHlNc2cgPSBwYXJhbXMuYWN0aXZpdHlNZXNzYWdlPy50cmltKCkudG9Mb3dlckNhc2UoKSA/PyAnJ1xuICBjb25zdCBiYWNrZW5kTXNnID0gcGFyYW1zLm5vZGVQYXlsb2FkPy5tZXNzYWdlPy50cmltKCkudG9Mb3dlckNhc2UoKSA/PyAnJ1xuXG4gIGNvbnN0IHRvb2xPdmVybGFwID0gbm9kZVRvb2wgJiYgbm9kZVRvb2wgIT09ICdyZXN1bWluZycgJiYgcGVuZGluZ1Rvb2xzLnNvbWUodG9vbCA9PiB0b29sID09PSBub2RlVG9vbClcbiAgY29uc3QgaGFzTXVsdGlwbGVTdXJmYWNlcyA9IChwYXJhbXMudWlTdXJmYWNlcz8ubGVuZ3RoID8/IDApID49IDJcbiAgY29uc3QgbWVzc2FnZXNNYXRjaCA9IGFjdGl2aXR5TXNnLmxlbmd0aCA+IDAgJiYgYmFja2VuZE1zZy5sZW5ndGggPiAwICYmIGFjdGl2aXR5TXNnID09PSBiYWNrZW5kTXNnXG5cbiAgaWYgKCF0b29sT3ZlcmxhcCAmJiAhKGhhc011bHRpcGxlU3VyZmFjZXMgJiYgbWVzc2FnZXNNYXRjaCkpIHJldHVyblxuXG4gIHN0cmVhbURlYnVnV2FybihwYXJhbXMuc2NvcGUsICdoaXRsLXVpLW92ZXJsYXAtc3VzcGVjdCcsIHtcbiAgICBzb3VyY2U6IHBhcmFtcy5zb3VyY2UsXG4gICAgdWlTdXJmYWNlczogcGFyYW1zLnVpU3VyZmFjZXMsXG4gICAgcGVuZGluZ1Rvb2xzLFxuICAgIG5vZGVUb29sLFxuICAgIGJhY2tlbmRNZXNzYWdlOiBzYWZlU3RyaW5nKHBhcmFtcy5ub2RlUGF5bG9hZD8ubWVzc2FnZSwgMTIwKSxcbiAgICBhY3Rpdml0eU1lc3NhZ2U6IHNhZmVTdHJpbmcocGFyYW1zLmFjdGl2aXR5TWVzc2FnZSwgMTIwKSxcbiAgICBtZXNzYWdlc01hdGNoLFxuICAgIGhpdGxDb250ZXh0OiBzdW1tYXJpemVIaXRsQ29udGV4dChwYXJh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WCxxQkFBQSxJQUFBQyxvQkFBQSxHQUFHVCxNQUFNLENBQUNjLFdBQVcsY0FBQUwsb0JBQUEsZ0JBQUFBLG9CQUFBLEdBQWxCQSxvQkFBQSxDQUFvQnZFLE9BQU8sY0FBQXVFLG9CQUFBLHVCQUEzQkEsb0JBQUEsQ0FBNkJRLElBQUksQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLGNBQUFWLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRTtFQUUxRSxJQUFNWSxXQUFXLEdBQUdQLFFBQVEsSUFBSUEsUUFBUSxLQUFLLFVBQVUsSUFBSWpFLFlBQVksQ0FBQ3lFLElBQUksQ0FBQyxVQUFBQyxJQUFJO0lBQUEsT0FBSUEsSUFBSSxLQUFLVCxRQUFRO0VBQUEsRUFBQztFQUN2RyxJQUFNVSxtQkFBbUIsR0FBRyxFQUFBYixxQkFBQSxJQUFBQyxrQkFBQSxHQUFDWCxNQUFNLENBQUN3QixVQUFVLGNBQUFiLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUIvRixNQUFNLGNBQUE4RixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLENBQUMsS0FBSyxDQUFDO0VBQ2pFLElBQU1lLGFBQWEsR0FBR1YsV0FBVyxDQUFDbkcsTUFBTSxHQUFHLENBQUMsSUFBSXVHLFVBQVUsQ0FBQ3ZHLE1BQU0sR0FBRyxDQUFDLElBQUltRyxXQUFXLEtBQUtJLFVBQVU7RUFFbkcsSUFBSSxDQUFDQyxXQUFXLElBQUksRUFBRUcsbUJBQW1CLElBQUlFLGFBQWEsQ0FBQyxFQUFFO0VBRTdEMUMsZUFBZSxDQUFDaUIsTUFBTSxDQUFDckIsS0FBSyxFQUFFLHlCQUF5QixFQUFFO0lBQ3ZEK0MsTUFBTSxFQUFFMUIsTUFBTSxDQUFDMEIsTUFBTTtJQUNyQkYsVUFBVSxFQUFFeEIsTUFBTSxDQUFDd0IsVUFBVTtJQUM3QjVFLFlBQVksRUFBWkEsWUFBWTtJQUNaaUUsUUFBUSxFQUFSQSxRQUFRO0lBQ1JqQixjQUFjLEVBQUVwRixVQUFVLEVBQUFvRyxvQkFBQSxHQUFDWixNQUFNLENBQUNjLFdBQVcsY0FBQUYsb0JBQUEsdUJBQWxCQSxvQkFBQSxDQUFvQjFFLE9BQU8sRUFBRSxHQUFHLENBQUM7SUFDNUQ4RSxlQUFlLEVBQUV4RyxVQUFVLENBQUN3RixNQUFNLENBQUNnQixlQUFlLEVBQUUsR0FBRyxDQUFDO0lBQ3hEUyxhQUFhLEVBQWJBLGFBQWE7SUFDYm5DLFdBQVcsRUFBRWpELG9CQUFvQixDQUFDMkQsTUFBTSxDQUFDVixXQUFXO0VBQ3RELENBQUMsQ0FBQztBQUNKLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,136 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ import { resolveHitlNodeStreamActivity } from './streamActivityMessages';
6
+ import { streamDebugLog } from './streamDebugLog';
7
+ var executionStepCounter = 0;
8
+ var nextStepId = function nextStepId() {
9
+ executionStepCounter += 1;
10
+ return "exec-step-".concat(executionStepCounter);
11
+ };
12
+ export var resetExecutionStepCounter = function resetExecutionStepCounter() {
13
+ executionStepCounter = 0;
14
+ };
15
+ var completeRunningSteps = function completeRunningSteps(steps) {
16
+ return steps.map(function (step) {
17
+ return step.status === 'running' ? _objectSpread(_objectSpread({}, step), {}, {
18
+ status: 'completed'
19
+ }) : step;
20
+ });
21
+ };
22
+ export var completeRunningStepsInSteps = completeRunningSteps;
23
+ export var completeAllExecutionSteps = function completeAllExecutionSteps(steps) {
24
+ return steps.map(function (step) {
25
+ return _objectSpread(_objectSpread({}, step), {}, {
26
+ status: 'completed'
27
+ });
28
+ });
29
+ };
30
+ export var getRunningExecutionSteps = function getRunningExecutionSteps(steps) {
31
+ return steps.filter(function (step) {
32
+ return step.status === 'running';
33
+ });
34
+ };
35
+ export var shouldShowExecutionTrace = function shouldShowExecutionTrace(steps) {
36
+ if (!(steps !== null && steps !== void 0 && steps.length)) return false;
37
+ var running = getRunningExecutionSteps(steps);
38
+ if (running.length === steps.length) return running.length >= 1;
39
+ if (steps.length >= 2) return true;
40
+ return steps.some(function (step) {
41
+ return step.status === 'completed';
42
+ });
43
+ };
44
+ export var resolveStepMessageFromNode = function resolveStepMessageFromNode(payload, t, context, threadId) {
45
+ var activity = resolveHitlNodeStreamActivity(payload.message, t, context, threadId !== null && threadId !== void 0 ? threadId : payload.thread_id);
46
+ return activity.message;
47
+ };
48
+ export var pushExecutionStepFromNode = function pushExecutionStepFromNode(currentSteps, payload, t, context, threadId) {
49
+ var _context$pendingActio, _payload$tool_name;
50
+ var message = resolveStepMessageFromNode(payload, t, context, threadId);
51
+ var completedPrevious = completeRunningSteps(currentSteps);
52
+
53
+ // continue-thread: el backend envía `resuming` y enseguida el node de la tool
54
+ // con el mismo mensaje legible. Omitimos `resuming` para no duplicar el indicador.
55
+ if (payload.node === 'resuming' && context !== null && context !== void 0 && (_context$pendingActio = context.pendingActions) !== null && _context$pendingActio !== void 0 && _context$pendingActio.length) {
56
+ streamDebugLog('executionSteps', 'skip:resuming-with-hitl-context', {
57
+ message: message,
58
+ pendingTools: context.pendingActions.map(function (action) {
59
+ return action.tool_name;
60
+ })
61
+ });
62
+ return completedPrevious;
63
+ }
64
+ if (payload.node !== 'resuming') {
65
+ var _lastStep = completedPrevious[completedPrevious.length - 1];
66
+ if ((_lastStep === null || _lastStep === void 0 ? void 0 : _lastStep.node) === 'resuming' && _lastStep.message.trim().toLowerCase() === message.trim().toLowerCase()) {
67
+ streamDebugLog('executionSteps', 'replace:redundant-resuming', {
68
+ resumingMessage: _lastStep.message,
69
+ toolNode: payload.node,
70
+ toolName: payload.tool_name
71
+ });
72
+ completedPrevious = completedPrevious.slice(0, -1);
73
+ }
74
+ }
75
+ var toolName = (_payload$tool_name = payload.tool_name) !== null && _payload$tool_name !== void 0 ? _payload$tool_name : payload.node !== 'resuming' ? payload.node : undefined;
76
+ var lastStep = completedPrevious[completedPrevious.length - 1];
77
+ if ((lastStep === null || lastStep === void 0 ? void 0 : lastStep.status) === 'running' && lastStep.toolName === toolName && lastStep.message.trim().toLowerCase() === message.trim().toLowerCase()) {
78
+ streamDebugLog('executionSteps', 'skip:duplicate-running', {
79
+ node: payload.node,
80
+ toolName: toolName,
81
+ message: message
82
+ });
83
+ return completedPrevious;
84
+ }
85
+ var newStep = {
86
+ id: nextStepId(),
87
+ message: message,
88
+ node: payload.node,
89
+ toolName: toolName,
90
+ status: 'running'
91
+ };
92
+ var nextSteps = [].concat(_toConsumableArray(completedPrevious), [newStep]);
93
+ streamDebugLog('executionSteps', 'push', {
94
+ node: payload.node,
95
+ toolName: newStep.toolName,
96
+ message: newStep.message,
97
+ stepCount: nextSteps.length,
98
+ hasHitlContext: Boolean(context)
99
+ });
100
+ return nextSteps;
101
+ };
102
+
103
+ /** Al iniciar token/content: marca tools como completadas y agrega/actualiza el paso de escritura. */
104
+ export var finalizeExecutionStepsForWriting = function finalizeExecutionStepsForWriting(currentSteps, writingMessage) {
105
+ var completed = completeRunningSteps(currentSteps);
106
+ var writingIndex = completed.findIndex(function (step) {
107
+ return step.node === '__writing__';
108
+ });
109
+ if (writingIndex >= 0) {
110
+ return completed.map(function (step, index) {
111
+ return index === writingIndex ? _objectSpread(_objectSpread({}, step), {}, {
112
+ message: writingMessage,
113
+ status: 'running'
114
+ }) : step;
115
+ });
116
+ }
117
+ return [].concat(_toConsumableArray(completed), [{
118
+ id: nextStepId(),
119
+ message: writingMessage,
120
+ node: '__writing__',
121
+ status: 'running'
122
+ }]);
123
+ };
124
+ export var mergeActivityWithExecutionSteps = function mergeActivityWithExecutionSteps(activity, steps) {
125
+ return _objectSpread(_objectSpread({}, activity), {}, {
126
+ executionSteps: steps.length > 0 ? steps : undefined
127
+ });
128
+ };
129
+ export var getActiveExecutionStep = function getActiveExecutionStep(steps) {
130
+ if (!steps.length) return null;
131
+ var running = _toConsumableArray(steps).reverse().find(function (step) {
132
+ return step.status === 'running';
133
+ });
134
+ return running !== null && running !== void 0 ? running : steps[steps.length - 1];
135
+ };
136
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInN0cmVhbURlYnVnTG9nIiwiZXhlY3V0aW9uU3RlcENvdW50ZXIiLCJuZXh0U3RlcElkIiwiY29uY2F0IiwicmVzZXRFeGVjdXRpb25TdGVwQ291bnRlciIsImNvbXBsZXRlUnVubmluZ1N0ZXBzIiwic3RlcHMiLCJtYXAiLCJzdGVwIiwic3RhdHVzIiwiX29iamVjdFNwcmVhZCIsImNvbXBsZXRlUnVubmluZ1N0ZXBzSW5TdGVwcyIsImNvbXBsZXRlQWxsRXhlY3V0aW9uU3RlcHMiLCJnZXRSdW5uaW5nRXhlY3V0aW9uU3RlcHMiLCJmaWx0ZXIiLCJzaG91bGRTaG93RXhlY3V0aW9uVHJhY2UiLCJsZW5ndGgiLCJydW5uaW5nIiwic29tZSIsInJlc29sdmVTdGVwTWVzc2FnZUZyb21Ob2RlIiwicGF5bG9hZCIsInQiLCJjb250ZXh0IiwidGhyZWFkSWQiLCJhY3Rpdml0eSIsIm1lc3NhZ2UiLCJ0aHJlYWRfaWQiLCJwdXNoRXhlY3V0aW9uU3RlcEZyb21Ob2RlIiwiY3VycmVudFN0ZXBzIiwiX2NvbnRleHQkcGVuZGluZ0FjdGlvIiwiX3BheWxvYWQkdG9vbF9uYW1lIiwiY29tcGxldGVkUHJldmlvdXMiLCJub2RlIiwicGVuZGluZ0FjdGlvbnMiLCJwZW5kaW5nVG9vbHMiLCJhY3Rpb24iLCJ0b29sX25hbWUiLCJsYXN0U3RlcCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInJlc3VtaW5nTWVzc2FnZSIsInRvb2xOb2RlIiwidG9vbE5hbWUiLCJzbGljZSIsInVuZGVmaW5lZCIsIm5ld1N0ZXAiLCJpZCIsIm5leHRTdGVwcyIsIl90b0NvbnN1bWFibGVBcnJheSIsInN0ZXBDb3VudCIsImhhc0hpdGxDb250ZXh0IiwiQm9vbGVhbiIsImZpbmFsaXplRXhlY3V0aW9uU3RlcHNGb3JXcml0aW5nIiwid3JpdGluZ01lc3NhZ2UiLCJjb21wbGV0ZWQiLCJ3cml0aW5nSW5kZXgiLCJmaW5kSW5kZXgiLCJpbmRleCIsIm1lcmdlQWN0aXZpdHlXaXRoRXhlY3V0aW9uU3RlcHMiLCJleGVjdXRpb25TdGVwcyIsImdldEFjdGl2ZUV4ZWN1dGlvblN0ZXAiLCJyZXZlcnNlIiwiZmluZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zdHJlYW1FeGVjdXRpb25TdGVwcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbUV4ZWN1dGlvblN0ZXAsIFN0cmVhbU5vZGVFdmVudFBheWxvYWQsIFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgdHlwZSB7IEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBzdHJlYW1EZWJ1Z0xvZyB9IGZyb20gJy4vc3RyZWFtRGVidWdMb2cnXG5cbnR5cGUgVHJhbnNsYXRlRm4gPSAoa2V5OiBzdHJpbmcpID0+IHN0cmluZ1xuXG5sZXQgZXhlY3V0aW9uU3RlcENvdW50ZXIgPSAwXG5cbmNvbnN0IG5leHRTdGVwSWQgPSAoKTogc3RyaW5nID0+IHtcbiAgZXhlY3V0aW9uU3RlcENvdW50ZXIgKz0gMVxuICByZXR1cm4gYGV4ZWMtc3RlcC0ke2V4ZWN1dGlvblN0ZXBDb3VudGVyfWBcbn1cblxuZXhwb3J0IGNvbnN0IHJlc2V0RXhlY3V0aW9uU3RlcENvdW50ZXIgPSAoKTogdm9pZCA9PiB7XG4gIGV4ZWN1dGlvblN0ZXBDb3VudGVyID0gMFxufVxuXG5jb25zdCBjb21wbGV0ZVJ1bm5pbmdTdGVwcyA9IChzdGVwczogU3RyZWFtRXhlY3V0aW9uU3RlcFtdKTogU3RyZWFtRXhlY3V0aW9uU3RlcFtdID0+XG4gIHN0ZXBzLm1hcChzdGVwID0+IChzdGVwLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8geyAuLi5zdGVwLCBzdGF0dXM6ICdjb21wbGV0ZWQnIGFzIGNvbnN0IH0gOiBzdGVwKSlcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlUnVubmluZ1N0ZXBzSW5TdGVwcyA9IGNvbXBsZXRlUnVubmluZ1N0ZXBzXG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZUFsbEV4ZWN1dGlvblN0ZXBzID0gKHN0ZXBzOiBTdHJlYW1FeGVjdXRpb25TdGVwW10pOiBTdHJlYW1FeGVjdXRpb25TdGVwW10gPT5cbiAgc3RlcHMubWFwKHN0ZXAgPT4gKHsgLi4uc3RlcCwgc3RhdHVzOiAnY29tcGxldGVkJyBhcyBjb25zdCB9KSlcblxuZXhwb3J0IGNvbnN0IGdldFJ1bm5pbmdFeGVjdXRpb25TdGVwcyA9IChzdGVwczogU3RyZWFtRXhlY3V0aW9uU3RlcFtdKTogU3RyZWFtRXhlY3V0aW9uU3RlcFtdID0+XG4gIHN0ZXBzLmZpbHRlcihzdGVwID0+IHN0ZXAuc3RhdHVzID09PSAncnVubmluZycpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93RXhlY3V0aW9uVHJhY2UgPSAoc3RlcHM6IFN0cmVhbUV4ZWN1dGlvblN0ZXBbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXN0ZXBzPy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICBjb25zdCBydW5uaW5nID0gZ2V0UnVubmluZ0V4ZWN1dGlvblN0ZXBzKHN0ZXBzKVxuICBpZiAocnVubmluZy5sZW5ndGggPT09IHN0ZXBzLmxlbmd0aCkgcmV0dXJuIHJ1bm5pbmcubGVuZ3RoID49IDFcbiAgaWYgKHN0ZXBzLmxlbmd0aCA+PSAyKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gc3RlcHMuc29tZShzdGVwID0+IHN0ZXAuc3RhdHVzID09PSAnY29tcGxldGVkJylcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdGVwTWVzc2FnZUZyb21Ob2RlID0gKFxuICBwYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkLFxuICB0OiBUcmFuc2xhdGVGbixcbiAgY29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbCxcbiAgdGhyZWFkSWQ/OiBzdHJpbmdcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGFjdGl2aXR5ID0gcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkocGF5bG9hZC5tZXNzYWdlLCB0LCBjb250ZXh0LCB0aHJlYWRJZCA/PyBwYXlsb2FkLnRocmVhZF9pZClcbiAgcmV0dXJuIGFjdGl2aXR5Lm1lc3NhZ2Vcbn1cblxuZXhwb3J0IGNvbnN0IHB1c2hFeGVjdXRpb25TdGVwRnJvbU5vZGUgPSAoXG4gIGN1cnJlbnRTdGVwczogU3RyZWFtRXhlY3V0aW9uU3RlcFtdLFxuICBwYXlsb2FkOiBTdHJlYW1Ob2RlRXZlbnRQYXlsb2FkLFxuICB0OiBUcmFuc2xhdGVGbixcbiAgY29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbCxcbiAgdGhyZWFkSWQ/OiBzdHJpbmdcbik6IFN0cmVhbUV4ZWN1dGlvblN0ZXBbXSA9PiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSByZXNvbHZlU3RlcE1lc3NhZ2VGcm9tTm9kZShwYXlsb2FkLCB0LCBjb250ZXh0LCB0aHJlYWRJZClcbiAgbGV0IGNvbXBsZXRlZFByZXZpb3VzID0gY29tcGxldGVSdW5uaW5nU3RlcHMoY3VycmVudFN0ZXBzKVxuXG4gIC8vIGNvbnRpbnVlLXRocmVhZDogZWwgYmFja2VuZCBlbnbDrWEgYHJlc3VtaW5nYCB5IGVuc2VndWlkYSBlbCBub2RlIGRlIGxhIHRvb2xcbiAgLy8gY29uIGVsIG1pc21vIG1lbnNhamUgbGVnaWJsZS4gT21pdGltb3MgYHJlc3VtaW5nYCBwYXJhIG5vIGR1cGxpY2FyIGVsIGluZGljYWRvci5cbiAgaWYgKHBheWxvYWQubm9kZSA9PT0gJ3Jlc3VtaW5nJyAmJiBjb250ZXh0Py5wZW5kaW5nQWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgc3RyZWFtRGVidWdMb2coJ2V4ZWN1dGlvblN0ZXBzJywgJ3NraXA6cmVzdW1pbmctd2l0aC1oaXRsLWNvbnRleHQnLCB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgcGVuZGluZ1Rvb2xzOiBjb250ZXh0LnBlbmRpbmdBY3Rpb25zLm1hcChhY3Rpb24gPT4gYWN0aW9uLnRvb2xfbmFtZSksXG4gICAgfSlcbiAgICByZXR1cm4gY29tcGxldGVkUHJldmlvdXNcbiAgfVxuXG4gIGlmIChwYXlsb2FkLm5vZGUgIT09ICdyZXN1bWluZycpIHtcbiAgICBjb25zdCBsYXN0U3RlcCA9IGNvbXBsZXRlZFByZXZpb3VzW2NvbXBsZXRlZFByZXZpb3VzLmxlbmd0aCAtIDFdXG4gICAgaWYgKGxhc3RTdGVwPy5ub2RlID09PSAncmVzdW1pbmcnICYmIGxhc3RTdGVwLm1lc3NhZ2UudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IG1lc3NhZ2UudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHN0cmVhbURlYnVnTG9nKCdleGVjdXRpb25TdGVwcycsICdyZXBsYWNlOnJlZHVuZGFudC1yZXN1bWluZycsIHtcbiAgICAgICAgcmVzdW1pbmdNZXNzYWdlOiBsYXN0U3RlcC5tZXNzYWdlLFxuICAgICAgICB0b29sTm9kZTogcGF5bG9hZC5ub2RlLFxuICAgICAgICB0b29sTmFtZTogcGF5bG9hZC50b29sX25hbWUsXG4gICAgICB9KVxuICAgICAgY29tcGxldGVkUHJldmlvdXMgPSBjb21wbGV0ZWRQcmV2aW91cy5zbGljZSgwLCAtMSlcbiAgICB9XG4gIH1cblxuICBjb25zdCB0b29sTmFtZSA9IHBheWxvYWQudG9vbF9uYW1lID8/IChwYXlsb2FkLm5vZGUgIT09ICdyZXN1bWluZycgPyBwYXlsb2FkLm5vZGUgOiB1bmRlZmluZWQpXG4gIGNvbnN0IGxhc3RTdGVwID0gY29tcGxldGVkUHJldmlvdXNbY29tcGxldGVkUHJldmlvdXMubGVuZ3RoIC0gMV1cbiAgaWYgKFxuICAgIGxhc3RTdGVwPy5zdGF0dXMgPT09ICdydW5uaW5nJyAmJlxuICAgIGxhc3RTdGVwLnRvb2xOYW1lID09PSB0b29sTmFtZSAmJlxuICAgIGxhc3RTdGVwLm1lc3NhZ2UudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IG1lc3NhZ2UudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgKSB7XG4gICAgc3RyZWFtRGVidWdMb2coJ2V4ZWN1dGlvblN0ZXBzJywgJ3NraXA6ZHVwbGljYXRlLXJ1bm5pbmcnLCB7XG4gICAgICBub2RlOiBwYXlsb2FkLm5vZGUsXG4gICAgICB0b29sTmFtZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgfSlcbiAgICByZXR1cm4gY29tcGxldGVkUHJldmlvdXNcbiAgfVxuXG4gIGNvbnN0IG5ld1N0ZXA6IFN0cmVhbUV4ZWN1dGlvblN0ZXAgPSB7XG4gICAgaWQ6IG5leHRTdGVwSWQoKSxcbiAgICBtZXNzYWdlLFxuICAgIG5vZGU6IHBheWxvYWQubm9kZSxcbiAgICB0b29sTmFtZSxcbiAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgfVxuICBjb25zdCBuZXh0U3RlcHMgPSBbLi4uY29tcGxldGVkUHJldmlvdXMsIG5ld1N0ZXBdXG4gIHN0cmVhbURlYnVnTG9nKCdleGVjdXRpb25TdGVwcycsICdwdXNoJywge1xuICAgIG5vZGU6IHBheWxvYWQubm9kZSxcbiAgICB0b29sTmFtZTogbmV3U3RlcC50b29sTmFtZSxcbiAgICBtZXNzYWdlOiBuZXdTdGVwLm1lc3NhZ2UsXG4gICAgc3RlcENvdW50OiBuZXh0U3RlcHMubGVuZ3RoLFxuICAgIGhhc0hpdGxDb250ZXh0OiBCb29sZWFuKGNvbnRleHQpLFxuICB9KVxuICByZXR1cm4gbmV4dFN0ZXBzXG59XG5cbi8qKiBBbCBpbmljaWFyIHRva2VuL2NvbnRlbnQ6IG1hcmNhIHRvb2xzIGNvbW8gY29tcGxldGFkYXMgeSBhZ3JlZ2EvYWN0dWFsaXphIGVsIHBhc28gZGUgZXNjcml0dXJhLiAqL1xuZXhwb3J0IGNvbnN0IGZpbmFsaXplRXhlY3V0aW9uU3RlcHNGb3JXcml0aW5nID0gKFxuICBjdXJyZW50U3RlcHM6IFN0cmVhbUV4ZWN1dGlvblN0ZXBbXSxcbiAgd3JpdGluZ01lc3NhZ2U6IHN0cmluZ1xuKTogU3RyZWFtRXhlY3V0aW9uU3RlcFtdID0+IHtcbiAgY29uc3QgY29tcGxldGVkID0gY29tcGxldGVSdW5uaW5nU3RlcHMoY3VycmVudFN0ZXBzKVxuICBjb25zdCB3cml0aW5nSW5kZXggPSBjb21wbGV0ZWQuZmluZEluZGV4KHN0ZXAgPT4gc3RlcC5ub2RlID09PSAnX193cml0aW5nX18nKVxuXG4gIGlmICh3cml0aW5nSW5kZXggPj0gMCkge1xuICAgIHJldHVybiBjb21wbGV0ZWQubWFwKChzdGVwLCBpbmRleCkgPT5cbiAgICAgIGluZGV4ID09PSB3cml0aW5nSW5kZXggPyB7IC4uLnN0ZXAsIG1lc3NhZ2U6IHdyaXRpbmdNZXNzYWdlLCBzdGF0dXM6ICdydW5uaW5nJyBhcyBjb25zdCB9IDogc3RlcFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLi4uY29tcGxldGVkLFxuICAgIHtcbiAgICAgIGlkOiBuZXh0U3RlcElkKCksXG4gICAgICBtZXNzYWdlOiB3cml0aW5nTWVzc2FnZSxcbiAgICAgIG5vZGU6ICdfX3dyaXRpbmdfXycsXG4gICAgICBzdGF0dXM6ICdydW5uaW5nJyBhcyBjb25zdCxcbiAgICB9LFxuICBdXG59XG5cbmV4cG9ydCBjb25zdCBtZXJnZUFjdGl2aXR5V2l0aEV4ZWN1dGlvblN0ZXBzID0gKFxuICBhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHksXG4gIHN0ZXBzOiBTdHJlYW1FeGVjdXRpb25TdGVwW11cbik6IFN0cmVhbUFjdGl2aXR5ID0+ICh7XG4gIC4uLmFjdGl2aXR5LFxuICBleGVjdXRpb25TdGVwczogc3RlcHMubGVuZ3RoID4gMCA/IHN0ZXBzIDogdW5kZWZpbmVkLFxufSlcblxuZXhwb3J0IGNvbnN0IGdldEFjdGl2ZUV4ZWN1dGlvblN0ZXAgPSAoc3RlcHM6IFN0cmVhbUV4ZWN1dGlvblN0ZXBbXSk6IFN0cmVhbUV4ZWN1dGlvblN0ZXAgfCBudWxsID0+IHtcbiAgaWYgKCFzdGVwcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIGNvbnN0IHJ1bm5pbmcgPSBbLi4uc3RlcHNdLnJldmVyc2UoKS5maW5kKHN0ZXAgPT4gc3RlcC5zdGF0dXMgPT09ICdydW5uaW5nJylcbiAgcmV0dXJuIHJ1bm5pbmcgPz8gc3RlcHNbc3RlcHMubGVuZ3RoIC0gMV1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLFNBQVNBLDZCQUE2QixRQUFRLDBCQUEwQjtBQUN4RSxTQUFTQyxjQUFjLFFBQVEsa0JBQWtCO0FBSWpELElBQUlDLG9CQUFvQixHQUFHLENBQUM7QUFFNUIsSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUEsRUFBaUI7RUFDL0JELG9CQUFvQixJQUFJLENBQUM7RUFDekIsb0JBQUFFLE1BQUEsQ0FBb0JGLG9CQUFvQjtBQUMxQyxDQUFDO0FBRUQsT0FBTyxJQUFNRyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFBLEVBQWU7RUFDbkRILG9CQUFvQixHQUFHLENBQUM7QUFDMUIsQ0FBQztBQUVELElBQU1JLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlDLEtBQTRCO0VBQUEsT0FDeERBLEtBQUssQ0FBQ0MsR0FBRyxDQUFDLFVBQUFDLElBQUk7SUFBQSxPQUFLQSxJQUFJLENBQUNDLE1BQU0sS0FBSyxTQUFTLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUFRRixJQUFJO01BQUVDLE1BQU0sRUFBRTtJQUFvQixLQUFLRCxJQUFJO0VBQUEsQ0FBQyxDQUFDO0FBQUE7QUFFbkcsT0FBTyxJQUFNRywyQkFBMkIsR0FBR04sb0JBQW9CO0FBRS9ELE9BQU8sSUFBTU8seUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSU4sS0FBNEI7RUFBQSxPQUNwRUEsS0FBSyxDQUFDQyxHQUFHLENBQUMsVUFBQUMsSUFBSTtJQUFBLE9BQUFFLGFBQUEsQ0FBQUEsYUFBQSxLQUFVRixJQUFJO01BQUVDLE1BQU0sRUFBRTtJQUFvQjtFQUFBLENBQUcsQ0FBQztBQUFBO0FBRWhFLE9BQU8sSUFBTUksd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FB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