@projectcor/maia-components 2.30.2-0 → 2.30.3-1

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 (45) hide show
  1. package/lib/App.js +2 -4
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +14 -73
  3. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +6 -3
  4. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +150 -391
  5. package/lib/components/molecules/ChatAIMessages/newStyles.js +18 -50
  6. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +381 -94
  7. package/lib/components/molecules/MessageFeedback/styles.js +2 -6
  8. package/lib/components/molecules/Sidebar/Sidebar.js +41 -18
  9. package/lib/components/organisms/ChatAI/ChatAI.js +21 -8
  10. package/lib/context/global-context.js +1 -1
  11. package/lib/hooks/useChatManager/useChatManager.js +59 -97
  12. package/lib/hooks/useChatMessages/useChatMessages.js +27 -28
  13. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  14. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +3 -4
  15. package/lib/hooks/useProjectSummaryConfig.js +17 -36
  16. package/lib/lang/br/index.js +31 -237
  17. package/lib/lang/en/index.js +31 -237
  18. package/lib/lang/es/index.js +31 -237
  19. package/lib/lang/fr/index.js +31 -237
  20. package/lib/services/maia/Agents/getAgents.js +25 -21
  21. package/lib/services/maia/Orchestrator/orchestrator.js +7 -9
  22. package/lib/services/utils/mapChatMessages.js +18 -21
  23. package/lib/store/maiaLastChatPersistence.js +3 -4
  24. package/lib/store/maiaPanelSessionPersistence.js +74 -0
  25. package/lib/store/sessions/sessionStreamManager.js +51 -98
  26. package/lib/store/sessions/sessions.types.js +1 -1
  27. package/lib/types/Chat.js +1 -1
  28. package/lib/utils/hitlAnalytics.js +3 -4
  29. package/lib/utils/streamActivityMessages.js +41 -106
  30. package/package.json +1 -1
  31. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +0 -116
  32. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +0 -197
  33. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +0 -157
  34. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +0 -123
  35. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +0 -115
  36. package/lib/components/atoms/ReasoningBlock/index.js +0 -3
  37. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +0 -54
  38. package/lib/dev/DevReasoningTimeline.js +0 -235
  39. package/lib/dev/reasoningTraceMock.js +0 -556
  40. package/lib/hooks/useReasoningTrace/index.js +0 -3
  41. package/lib/hooks/useReasoningTrace/reasoningStore.js +0 -142
  42. package/lib/hooks/useReasoningTrace/useReasoningTrace.js +0 -14
  43. package/lib/types/reasoning.js +0 -2
  44. package/lib/utils/autoApproveStorage.js +0 -26
  45. package/lib/utils/reasoningMappers.js +0 -62
@@ -1,123 +0,0 @@
1
- import React, { useEffect, useMemo, useRef } from 'react';
2
- import { useSmoothStreamText } from '../../../hooks/useSmoothStreamText';
3
- import { useT } from '../../../hooks/useT';
4
- import { useReasoningTrace } from '../../../hooks/useReasoningTrace';
5
- import { MaiaStreamdown } from '../MaiaStreamdown/MaiaStreamdown';
6
- import { displayRowKey, groupParallelSteps } from './groupParallelSteps';
7
- import { isSeamlessNarrationCommit, PENDING_NARRATION_KEY, resolvePendingNarrationText } from './reasoningLiveNarration';
8
- import { DisplayStepRow, isVisibleStep, stepLabel } from './ReasoningSteps';
9
- import { SCReasoningTimeline, SCStepRow, SCThinkingText, SCTimelineRow } from './ReasoningBlock.styles';
10
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
- var readThinkingFlag = function readThinkingFlag() {
12
- if (typeof window === 'undefined') return false;
13
- return !!window.reasoningThinking;
14
- };
15
- /** Misma fila para stream live y narración commiteada (evita remount al hacer handoff). */
16
- var TimelineNarrationRow = function TimelineNarrationRow(_ref) {
17
- var text = _ref.text,
18
- live = _ref.live,
19
- connectAbove = _ref.connectAbove;
20
- var displayText = useSmoothStreamText(text, {
21
- enabled: live,
22
- maxCharsPerFrame: 24,
23
- snapToWordBoundary: true
24
- });
25
- return /*#__PURE__*/_jsx(SCStepRow, {
26
- $showChrome: false,
27
- $connectAbove: connectAbove,
28
- $connectBelow: false,
29
- children: /*#__PURE__*/_jsx(SCThinkingText, {
30
- children: /*#__PURE__*/_jsx(MaiaStreamdown, {
31
- variant: "chat",
32
- children: displayText
33
- })
34
- })
35
- });
36
- };
37
- var hideTailNarrationRow = function hideTailNarrationRow(rows) {
38
- var last = rows.at(-1);
39
- if ((last === null || last === void 0 ? void 0 : last.kind) === 'single' && last.step.type === 'narration') return rows.slice(0, -1);
40
- return rows;
41
- };
42
-
43
- /**
44
- * Traza en vivo: texto plano con espaciado, sin círculos ni rail. El chrome de
45
- * timeline (marcadores + líneas) aparece al expandir el ReasoningBlock.
46
- */
47
- export var ReasoningTimeline = function ReasoningTimeline(_ref2) {
48
- var messageId = _ref2.messageId,
49
- showThinking = _ref2.showThinking,
50
- streamActivity = _ref2.streamActivity,
51
- _ref2$streamingText = _ref2.streamingText,
52
- streamingText = _ref2$streamingText === void 0 ? '' : _ref2$streamingText;
53
- var _useT = useT(),
54
- t = _useT.t;
55
- var _useReasoningTrace = useReasoningTrace(messageId),
56
- steps = _useReasoningTrace.steps;
57
- var withThinking = showThinking !== null && showThinking !== void 0 ? showThinking : readThinkingFlag();
58
- var lastStreamedNarrationRef = useRef(null);
59
- var pendingNarration = useMemo(function () {
60
- return resolvePendingNarrationText(steps, streamActivity, streamingText, withThinking);
61
- }, [steps, streamActivity, streamingText, withThinking]);
62
- if (pendingNarration) {
63
- lastStreamedNarrationRef.current = pendingNarration;
64
- }
65
- var allRows = useMemo(function () {
66
- var visible = withThinking ? steps : steps.filter(isVisibleStep);
67
- return groupParallelSteps(visible, function (step) {
68
- return stepLabel(step, t);
69
- });
70
- }, [steps, withThinking, t]);
71
- var displayRows = useMemo(function () {
72
- return pendingNarration ? hideTailNarrationRow(allRows) : allRows;
73
- }, [allRows, pendingNarration]);
74
- var seamlessRowKey = useMemo(function () {
75
- if (pendingNarration || !allRows.length) return null;
76
- var last = allRows[allRows.length - 1];
77
- if (last.kind !== 'single') return null;
78
- if (!isSeamlessNarrationCommit(last.step, lastStreamedNarrationRef.current)) return null;
79
- return displayRowKey(last);
80
- }, [allRows, pendingNarration]);
81
- useEffect(function () {
82
- if (seamlessRowKey) lastStreamedNarrationRef.current = null;
83
- }, [seamlessRowKey]);
84
- if (!displayRows.length && !pendingNarration) return null;
85
- var rowCount = displayRows.length + (pendingNarration ? 1 : 0);
86
- var renderRow = function renderRow(row, index, seamless) {
87
- if (row.kind === 'single' && row.step.type === 'narration') {
88
- var _row$step$text;
89
- return /*#__PURE__*/_jsx(SCTimelineRow, {
90
- $seamless: seamless,
91
- children: /*#__PURE__*/_jsx(TimelineNarrationRow, {
92
- text: (_row$step$text = row.step.text) !== null && _row$step$text !== void 0 ? _row$step$text : '',
93
- live: false,
94
- connectAbove: index > 0
95
- })
96
- }, displayRowKey(row));
97
- }
98
- return /*#__PURE__*/_jsx(SCTimelineRow, {
99
- $seamless: seamless,
100
- children: /*#__PURE__*/_jsx(DisplayStepRow, {
101
- row: row,
102
- t: t,
103
- connectAbove: index > 0,
104
- connectBelow: index < rowCount - 1,
105
- showDetail: false,
106
- showChrome: false
107
- })
108
- }, displayRowKey(row));
109
- };
110
- return /*#__PURE__*/_jsxs(SCReasoningTimeline, {
111
- children: [displayRows.map(function (row, index) {
112
- return renderRow(row, index, displayRowKey(row) === seamlessRowKey);
113
- }), pendingNarration && /*#__PURE__*/_jsx(SCTimelineRow, {
114
- $seamless: true,
115
- children: /*#__PURE__*/_jsx(TimelineNarrationRow, {
116
- text: pendingNarration,
117
- live: true,
118
- connectAbove: displayRows.length > 0
119
- })
120
- }, PENDING_NARRATION_KEY)]
121
- });
122
- };
123
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTbW9vdGhTdHJlYW1UZXh0IiwidXNlVCIsInVzZVJlYXNvbmluZ1RyYWNlIiwiTWFpYVN0cmVhbWRvd24iLCJkaXNwbGF5Um93S2V5IiwiZ3JvdXBQYXJhbGxlbFN0ZXBzIiwiaXNTZWFtbGVzc05hcnJhdGlvbkNvbW1pdCIsIlBFTkRJTkdfTkFSUkFUSU9OX0tFWSIsInJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCIsIkRpc3BsYXlTdGVwUm93IiwiaXNWaXNpYmxlU3RlcCIsInN0ZXBMYWJlbCIsIlNDUmVhc29uaW5nVGltZWxpbmUiLCJTQ1N0ZXBSb3ciLCJTQ1RoaW5raW5nVGV4dCIsIlNDVGltZWxpbmVSb3ciLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwicmVhZFRoaW5raW5nRmxhZyIsIndpbmRvdyIsInJlYXNvbmluZ1RoaW5raW5nIiwiVGltZWxpbmVOYXJyYXRpb25Sb3ciLCJfcmVmIiwidGV4dCIsImxpdmUiLCJjb25uZWN0QWJvdmUiLCJkaXNwbGF5VGV4dCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5IiwiJHNob3dDaHJvbWUiLCIkY29ubmVjdEFib3ZlIiwiJGNvbm5lY3RCZWxvdyIsImNoaWxkcmVuIiwidmFyaWFudCIsImhpZGVUYWlsTmFycmF0aW9uUm93Iiwicm93cyIsImxhc3QiLCJhdCIsImtpbmQiLCJzdGVwIiwidHlwZSIsInNsaWNlIiwiUmVhc29uaW5nVGltZWxpbmUiLCJfcmVmMiIsIm1lc3NhZ2VJZCIsInNob3dUaGlua2luZyIsInN0cmVhbUFjdGl2aXR5IiwiX3JlZjIkc3RyZWFtaW5nVGV4dCIsInN0cmVhbWluZ1RleHQiLCJfdXNlVCIsInQiLCJfdXNlUmVhc29uaW5nVHJhY2UiLCJzdGVwcyIsIndpdGhUaGlua2luZyIsImxhc3RTdHJlYW1lZE5hcnJhdGlvblJlZiIsInBlbmRpbmdOYXJyYXRpb24iLCJjdXJyZW50IiwiYWxsUm93cyIsInZpc2libGUiLCJmaWx0ZXIiLCJkaXNwbGF5Um93cyIsInNlYW1sZXNzUm93S2V5IiwibGVuZ3RoIiwicm93Q291bnQiLCJyZW5kZXJSb3ciLCJyb3ciLCJpbmRleCIsInNlYW1sZXNzIiwiX3JvdyRzdGVwJHRleHQiLCIkc2VhbWxlc3MiLCJjb25uZWN0QmVsb3ciLCJzaG93RGV0YWlsIiwic2hvd0Nocm9tZSIsIm1hcCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ1RpbWVsaW5lLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZVJlYXNvbmluZ1RyYWNlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uL01haWFTdHJlYW1kb3duL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHsgZGlzcGxheVJvd0tleSwgZ3JvdXBQYXJhbGxlbFN0ZXBzLCB0eXBlIFJlYXNvbmluZ0Rpc3BsYXlSb3cgfSBmcm9tICcuL2dyb3VwUGFyYWxsZWxTdGVwcydcbmltcG9ydCB7IGlzU2VhbWxlc3NOYXJyYXRpb25Db21taXQsIFBFTkRJTkdfTkFSUkFUSU9OX0tFWSwgcmVzb2x2ZVBlbmRpbmdOYXJyYXRpb25UZXh0IH0gZnJvbSAnLi9yZWFzb25pbmdMaXZlTmFycmF0aW9uJ1xuaW1wb3J0IHsgRGlzcGxheVN0ZXBSb3csIGlzVmlzaWJsZVN0ZXAsIHN0ZXBMYWJlbCB9IGZyb20gJy4vUmVhc29uaW5nU3RlcHMnXG5pbXBvcnQgeyBTQ1JlYXNvbmluZ1RpbWVsaW5lLCBTQ1N0ZXBSb3csIFNDVGhpbmtpbmdUZXh0LCBTQ1RpbWVsaW5lUm93IH0gZnJvbSAnLi9SZWFzb25pbmdCbG9jay5zdHlsZXMnXG5cbmV4cG9ydCB0eXBlIFJlYXNvbmluZ1RpbWVsaW5lUHJvcHMgPSB7XG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIC8qKiBNdWVzdHJhIHRhbWJpw6luIGVsIHJhem9uYW1pZW50byBjcnVkbyAoYHRoaW5raW5nYCkuIERlZmF1bHQ6IGB3aW5kb3cucmVhc29uaW5nVGhpbmtpbmdgLiAqL1xuICBzaG93VGhpbmtpbmc/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG4gIC8qKiBUZXh0byBlbiBzdHJlYW1pbmcgZGVsIHBsYWNlaG9sZGVyOyBsYXMgbmFycmFjaW9uZXMgZGUgdHVybm8gc2UgcGludGFuIGFjw6EuICovXG4gIHN0cmVhbWluZ1RleHQ/OiBzdHJpbmdcbn1cblxuY29uc3QgcmVhZFRoaW5raW5nRmxhZyA9ICgpOiBib29sZWFuID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuICEhKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgcmVhc29uaW5nVGhpbmtpbmc/OiBib29sZWFuIH0pLnJlYXNvbmluZ1RoaW5raW5nXG59XG5cbnR5cGUgVGltZWxpbmVOYXJyYXRpb25Sb3dQcm9wcyA9IHtcbiAgdGV4dDogc3RyaW5nXG4gIGxpdmU6IGJvb2xlYW5cbiAgY29ubmVjdEFib3ZlOiBib29sZWFuXG59XG5cbi8qKiBNaXNtYSBmaWxhIHBhcmEgc3RyZWFtIGxpdmUgeSBuYXJyYWNpw7NuIGNvbW1pdGVhZGEgKGV2aXRhIHJlbW91bnQgYWwgaGFjZXIgaGFuZG9mZikuICovXG5jb25zdCBUaW1lbGluZU5hcnJhdGlvblJvdyA9ICh7IHRleHQsIGxpdmUsIGNvbm5lY3RBYm92ZSB9OiBUaW1lbGluZU5hcnJhdGlvblJvd1Byb3BzKSA9PiB7XG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlU21vb3RoU3RyZWFtVGV4dCh0ZXh0LCB7XG4gICAgZW5hYmxlZDogbGl2ZSxcbiAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NTdGVwUm93ICRzaG93Q2hyb21lPXtmYWxzZX0gJGNvbm5lY3RBYm92ZT17Y29ubmVjdEFib3ZlfSAkY29ubmVjdEJlbG93PXtmYWxzZX0+XG4gICAgICA8U0NUaGlua2luZ1RleHQ+XG4gICAgICAgIDxNYWlhU3RyZWFtZG93biB2YXJpYW50PVwiY2hhdFwiPntkaXNwbGF5VGV4dH08L01haWFTdHJlYW1kb3duPlxuICAgICAgPC9TQ1RoaW5raW5nVGV4dD5cbiAgICA8L1NDU3RlcFJvdz5cbiAgKVxufVxuXG5jb25zdCBoaWRlVGFpbE5hcnJhdGlvblJvdyA9IChyb3dzOiBSZWFzb25pbmdEaXNwbGF5Um93W10pOiBSZWFzb25pbmdEaXNwbGF5Um93W10gPT4ge1xuICBjb25zdCBsYXN0ID0gcm93cy5hdCgtMSlcbiAgaWYgKGxhc3Q/LmtpbmQgPT09ICdzaW5nbGUnICYmIGxhc3Quc3RlcC50eXBlID09PSAnbmFycmF0aW9uJykgcmV0dXJuIHJvd3Muc2xpY2UoMCwgLTEpXG4gIHJldHVybiByb3dzXG59XG5cbi8qKlxuICogVHJhemEgZW4gdml2bzogdGV4dG8gcGxhbm8gY29uIGVzcGFjaWFkbywgc2luIGPDrXJjdWxvcyBuaSByYWlsLiBFbCBjaHJvbWUgZGVcbiAqIHRpbWVsaW5lIChtYXJjYWRvcmVzICsgbMOtbmVhcykgYXBhcmVjZSBhbCBleHBhbmRpciBlbCBSZWFzb25pbmdCbG9jay5cbiAqL1xuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1RpbWVsaW5lID0gKHtcbiAgbWVzc2FnZUlkLFxuICBzaG93VGhpbmtpbmcsXG4gIHN0cmVhbUFjdGl2aXR5LFxuICBzdHJlYW1pbmdUZXh0ID0gJycsXG59OiBSZWFzb25pbmdUaW1lbGluZVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgc3RlcHMgfSA9IHVzZVJlYXNvbmluZ1RyYWNlKG1lc3NhZ2VJZClcbiAgY29uc3Qgd2l0aFRoaW5raW5nID0gc2hvd1RoaW5raW5nID8/IHJlYWRUaGlua2luZ0ZsYWcoKVxuICBjb25zdCBsYXN0U3RyZWFtZWROYXJyYXRpb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBwZW5kaW5nTmFycmF0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PiByZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQoc3RlcHMsIHN0cmVhbUFjdGl2aXR5LCBzdHJlYW1pbmdUZXh0LCB3aXRoVGhpbmtpbmcpLFxuICAgIFtzdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQsIHdpdGhUaGlua2luZ11cbiAgKVxuXG4gIGlmIChwZW5kaW5nTmFycmF0aW9uKSB7XG4gICAgbGFzdFN0cmVhbWVkTmFycmF0aW9uUmVmLmN1cnJlbnQgPSBwZW5kaW5nTmFycmF0aW9uXG4gIH1cblxuICBjb25zdCBhbGxSb3dzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdmlzaWJsZSA9IHdpdGhUaGlua2luZyA/IHN0ZXBzIDogc3RlcHMuZmlsdGVyKGlzVmlzaWJsZVN0ZXApXG4gICAgcmV0dXJuIGdyb3VwUGFyYWxsZWxTdGVwcyh2aXNpYmxlLCBzdGVwID0+IHN0ZXBMYWJlbChzdGVwLCB0KSlcbiAgfSwgW3N0ZXBzLCB3aXRoVGhpbmtpbmcsIHRdKVxuXG4gIGNvbnN0IGRpc3BsYXlSb3dzID0gdXNlTWVtbyhcbiAgICAoKSA9PiAocGVuZGluZ05hcnJhdGlvbiA/IGhpZGVUYWlsTmFycmF0aW9uUm93KGFsbFJvd3MpIDogYWxsUm93cyksXG4gICAgW2FsbFJvd3MsIHBlbmRpbmdOYXJyYXRpb25dXG4gIClcblxuICBjb25zdCBzZWFtbGVzc1Jvd0tleSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChwZW5kaW5nTmFycmF0aW9uIHx8ICFhbGxSb3dzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBsYXN0ID0gYWxsUm93c1thbGxSb3dzLmxlbmd0aCAtIDFdXG4gICAgaWYgKGxhc3Qua2luZCAhPT0gJ3NpbmdsZScpIHJldHVybiBudWxsXG4gICAgaWYgKCFpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0KGxhc3Quc3RlcCwgbGFzdFN0cmVhbWVkTmFycmF0aW9uUmVmLmN1cnJlbnQpKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBkaXNwbGF5Um93S2V5KGxhc3QpXG4gIH0sIFthbGxSb3dzLCBwZW5kaW5nTmFycmF0aW9uXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWFtbGVzc1Jvd0tleSkgbGFzdFN0cmVhbWVkTmFycmF0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtzZWFtbGVzc1Jvd0tleV0pXG5cbiAgaWYgKCFkaXNwbGF5Um93cy5sZW5ndGggJiYgIXBlbmRpbmdOYXJyYXRpb24pIHJldHVybiBudWxsXG5cbiAgY29uc3Qgcm93Q291bnQgPSBkaXNwbGF5Um93cy5sZW5ndGggKyAocGVuZGluZ05hcnJhdGlvbiA/IDEgOiAwKVxuXG4gIGNvbnN0IHJlbmRlclJvdyA9IChyb3c6IFJlYXNvbmluZ0Rpc3BsYXlSb3csIGluZGV4OiBudW1iZXIsIHNlYW1sZXNzOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKHJvdy5raW5kID09PSAnc2luZ2xlJyAmJiByb3cuc3RlcC50eXBlID09PSAnbmFycmF0aW9uJykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNDVGltZWxpbmVSb3cga2V5PXtkaXNwbGF5Um93S2V5KHJvdyl9ICRzZWFtbGVzcz17c2VhbWxlc3N9PlxuICAgICAgICAgIDxUaW1lbGluZU5hcnJhdGlvblJvdyB0ZXh0PXtyb3cuc3RlcC50ZXh0ID8/ICcnfSBsaXZlPXtmYWxzZX0gY29ubmVjdEFib3ZlPXtpbmRleCA+IDB9IC8+XG4gICAgICAgIDwvU0NUaW1lbGluZVJvdz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDVGltZWxpbmVSb3cga2V5PXtkaXNwbGF5Um93S2V5KHJvdyl9ICRzZWFtbGVzcz17c2VhbWxlc3N9PlxuICAgICAgICA8RGlzcGxheVN0ZXBSb3dcbiAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICB0PXt0fVxuICAgICAgICAgIGNvbm5lY3RBYm92ZT17aW5kZXggPiAwfVxuICAgICAgICAgIGNvbm5lY3RCZWxvdz17aW5kZXggPCByb3dDb3VudCAtIDF9XG4gICAgICAgICAgc2hvd0RldGFpbD17ZmFsc2V9XG4gICAgICAgICAgc2hvd0Nocm9tZT17ZmFsc2V9XG4gICAgICAgIC8+XG4gICAgICA8L1NDVGltZWxpbmVSb3c+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NSZWFzb25pbmdUaW1lbGluZT5cbiAgICAgIHtkaXNwbGF5Um93cy5tYXAoKHJvdywgaW5kZXgpID0+IHJlbmRlclJvdyhyb3csIGluZGV4LCBkaXNwbGF5Um93S2V5KHJvdykgPT09IHNlYW1sZXNzUm93S2V5KSl9XG4gICAgICB7cGVuZGluZ05hcnJhdGlvbiAmJiAoXG4gICAgICAgIDxTQ1RpbWVsaW5lUm93IGtleT17UEVORElOR19OQVJSQVRJT05fS0VZfSAkc2VhbWxlc3M+XG4gICAgICAgICAgPFRpbWVsaW5lTmFycmF0aW9uUm93IHRleHQ9e3BlbmRpbmdOYXJyYXRpb259IGxpdmUgY29ubmVjdEFib3ZlPXtkaXNwbGF5Um93cy5sZW5ndGggPiAwfSAvPlxuICAgICAgICA8L1NDVGltZWxpbmVSb3c+XG4gICAgICApfVxuICAgIDwvU0NSZWFzb25pbmdU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
@@ -1,115 +0,0 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- var isToolAction = function isToolAction(step) {
3
- return step.type === 'tool' && !!step.tool;
4
- };
5
- export var aggregateStepStatus = function aggregateStepStatus(steps) {
6
- var _steps;
7
- if (steps.some(function (step) {
8
- return step.status === 'error';
9
- })) return 'error';
10
- if (steps.some(function (step) {
11
- return step.status === 'running' || step.status === 'pending';
12
- })) return 'running';
13
- if (steps.every(function (step) {
14
- return step.status === 'ok';
15
- })) return 'ok';
16
- return (_steps = steps[steps.length - 1]) === null || _steps === void 0 ? void 0 : _steps.status;
17
- };
18
-
19
- /** Títulos legibles de args cuando el batch trae contexto distinto por llamada. */
20
- export var parallelStepDetail = function parallelStepDetail(steps) {
21
- var titles = steps.map(function (step) {
22
- var _step$args;
23
- var title = (_step$args = step.args) === null || _step$args === void 0 ? void 0 : _step$args.task_title;
24
- return typeof title === 'string' ? title.trim() : '';
25
- }).filter(Boolean);
26
- var unique = _toConsumableArray(new Set(titles));
27
- if (unique.length < 2) return null;
28
- return unique.join(' · ');
29
- };
30
- export var displayRowKey = function displayRowKey(row) {
31
- return row.kind === 'single' ? row.step.i : "parallel-".concat(row.steps[0].i);
32
- };
33
- export var displayRowStatus = function displayRowStatus(row) {
34
- return row.kind === 'parallel' ? row.status : row.step.status;
35
- };
36
- export var displayRowHasMarker = function displayRowHasMarker(row) {
37
- return row.kind === 'parallel' || row.step.type === 'tool' || row.step.type === 'handoff';
38
- };
39
-
40
- /**
41
- * Handoff que sigue en `running` pero ya tiene pasos debajo (p. ej. transfer_to_maia
42
- * o transfer_to_especialista): es un contenedor del turno, no la hoja activa.
43
- */
44
- export var isSpanningHandoffRow = function isSpanningHandoffRow(row, index, rowCount) {
45
- return index < rowCount - 1 && row.kind === 'single' && row.step.type === 'handoff';
46
- };
47
- var findLastLeafMarkerIndex = function findLastLeafMarkerIndex(rows) {
48
- for (var i = rows.length - 1; i >= 0; i -= 1) {
49
- if (!displayRowHasMarker(rows[i])) continue;
50
- if (isSpanningHandoffRow(rows[i], i, rows.length)) continue;
51
- return i;
52
- }
53
- return null;
54
- };
55
-
56
- /** Pulse solo en el último paso activo; al escribir narración en traza, extiende el paso anterior. */
57
- export var resolveActiveRowIndex = function resolveActiveRowIndex(rows, streamActivity) {
58
- var writingInTimeline = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
59
- if (!rows.length) return null;
60
- for (var i = rows.length - 1; i >= 0; i -= 1) {
61
- var row = rows[i];
62
- var status = displayRowStatus(row);
63
- if (status !== 'running' && status !== 'pending') continue;
64
- if (isSpanningHandoffRow(row, i, rows.length)) continue;
65
- return i;
66
- }
67
- if ((streamActivity === null || streamActivity === void 0 ? void 0 : streamActivity.phase) === 'writing' && writingInTimeline) {
68
- var _findLastLeafMarkerIn;
69
- return (_findLastLeafMarkerIn = findLastLeafMarkerIndex(rows)) !== null && _findLastLeafMarkerIn !== void 0 ? _findLastLeafMarkerIn : rows.length - 1;
70
- }
71
- return null;
72
- };
73
-
74
- /**
75
- * Agrupa tools consecutivas con mismo nombre y label (p. ej. 4× get_task en paralelo).
76
- * No agrupa handoffs ni tools separadas por narraciones u otras acciones.
77
- */
78
- export var groupParallelSteps = function groupParallelSteps(steps, labelOf) {
79
- var rows = [];
80
- var index = 0;
81
- while (index < steps.length) {
82
- var step = steps[index];
83
- if (!isToolAction(step)) {
84
- rows.push({
85
- kind: 'single',
86
- step: step
87
- });
88
- index += 1;
89
- continue;
90
- }
91
- var label = labelOf(step);
92
- var tool = step.tool;
93
- var end = index + 1;
94
- while (end < steps.length && isToolAction(steps[end]) && steps[end].tool === tool && labelOf(steps[end]) === label) {
95
- end += 1;
96
- }
97
- var batch = steps.slice(index, end);
98
- if (batch.length >= 2) {
99
- rows.push({
100
- kind: 'parallel',
101
- steps: batch,
102
- label: label,
103
- status: aggregateStepStatus(batch)
104
- });
105
- } else {
106
- rows.push({
107
- kind: 'single',
108
- step: step
109
- });
110
- }
111
- index = end;
112
- }
113
- return rows;
114
- };
115
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Rvb2xBY3Rpb24iLCJzdGVwIiwidHlwZSIsInRvb2wiLCJhZ2dyZWdhdGVTdGVwU3RhdHVzIiwic3RlcHMiLCJfc3RlcHMiLCJzb21lIiwic3RhdHVzIiwiZXZlcnkiLCJsZW5ndGgiLCJwYXJhbGxlbFN0ZXBEZXRhaWwiLCJ0aXRsZXMiLCJtYXAiLCJfc3RlcCRhcmdzIiwidGl0bGUiLCJhcmdzIiwidGFza190aXRsZSIsInRyaW0iLCJmaWx0ZXIiLCJCb29sZWFuIiwidW5pcXVlIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0Iiwiam9pbiIsImRpc3BsYXlSb3dLZXkiLCJyb3ciLCJraW5kIiwiaSIsImNvbmNhdCIsImRpc3BsYXlSb3dTdGF0dXMiLCJkaXNwbGF5Um93SGFzTWFya2VyIiwiaXNTcGFubmluZ0hhbmRvZmZSb3ciLCJpbmRleCIsInJvd0NvdW50IiwiZmluZExhc3RMZWFmTWFya2VySW5kZXgiLCJyb3dzIiwicmVzb2x2ZUFjdGl2ZVJvd0luZGV4Iiwic3RyZWFtQWN0aXZpdHkiLCJ3cml0aW5nSW5UaW1lbGluZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInBoYXNlIiwiX2ZpbmRMYXN0TGVhZk1hcmtlckluIiwiZ3JvdXBQYXJhbGxlbFN0ZXBzIiwibGFiZWxPZiIsInB1c2giLCJsYWJlbCIsImVuZCIsImJhdGNoIiwic2xpY2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9SZWFzb25pbmdCbG9jay9ncm91cFBhcmFsbGVsU3RlcHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwLCBSZWFzb25pbmdTdGVwU3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuXG5leHBvcnQgdHlwZSBSZWFzb25pbmdEaXNwbGF5Um93ID1cbiAgfCB7IGtpbmQ6ICdzaW5nbGUnOyBzdGVwOiBSZWFzb25pbmdTdGVwIH1cbiAgfCB7IGtpbmQ6ICdwYXJhbGxlbCc7IHN0ZXBzOiBSZWFzb25pbmdTdGVwW107IGxhYmVsOiBzdHJpbmc7IHN0YXR1cz86IFJlYXNvbmluZ1N0ZXBTdGF0dXMgfVxuXG5jb25zdCBpc1Rvb2xBY3Rpb24gPSAoc3RlcDogUmVhc29uaW5nU3RlcCk6IGJvb2xlYW4gPT4gc3RlcC50eXBlID09PSAndG9vbCcgJiYgISFzdGVwLnRvb2xcblxuZXhwb3J0IGNvbnN0IGFnZ3JlZ2F0ZVN0ZXBTdGF0dXMgPSAoc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSk6IFJlYXNvbmluZ1N0ZXBTdGF0dXMgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoc3RlcHMuc29tZShzdGVwID0+IHN0ZXAuc3RhdHVzID09PSAnZXJyb3InKSkgcmV0dXJuICdlcnJvcidcbiAgaWYgKHN0ZXBzLnNvbWUoc3RlcCA9PiBzdGVwLnN0YXR1cyA9PT0gJ3J1bm5pbmcnIHx8IHN0ZXAuc3RhdHVzID09PSAncGVuZGluZycpKSByZXR1cm4gJ3J1bm5pbmcnXG4gIGlmIChzdGVwcy5ldmVyeShzdGVwID0+IHN0ZXAuc3RhdHVzID09PSAnb2snKSkgcmV0dXJuICdvaydcbiAgcmV0dXJuIHN0ZXBzW3N0ZXBzLmxlbmd0aCAtIDFdPy5zdGF0dXNcbn1cblxuLyoqIFTDrXR1bG9zIGxlZ2libGVzIGRlIGFyZ3MgY3VhbmRvIGVsIGJhdGNoIHRyYWUgY29udGV4dG8gZGlzdGludG8gcG9yIGxsYW1hZGEuICovXG5leHBvcnQgY29uc3QgcGFyYWxsZWxTdGVwRGV0YWlsID0gKHN0ZXBzOiBSZWFzb25pbmdTdGVwW10pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgdGl0bGVzID0gc3RlcHNcbiAgICAubWFwKHN0ZXAgPT4ge1xuICAgICAgY29uc3QgdGl0bGUgPSBzdGVwLmFyZ3M/LnRhc2tfdGl0bGVcbiAgICAgIHJldHVybiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gdGl0bGUudHJpbSgpIDogJydcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbilcblxuICBjb25zdCB1bmlxdWUgPSBbLi4ubmV3IFNldCh0aXRsZXMpXVxuICBpZiAodW5pcXVlLmxlbmd0aCA8IDIpIHJldHVybiBudWxsXG4gIHJldHVybiB1bmlxdWUuam9pbignIMK3ICcpXG59XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5Um93S2V5ID0gKHJvdzogUmVhc29uaW5nRGlzcGxheVJvdyk6IHN0cmluZyB8IG51bWJlciA9PlxuICByb3cua2luZCA9PT0gJ3NpbmdsZScgPyByb3cuc3RlcC5pIDogYHBhcmFsbGVsLSR7cm93LnN0ZXBzWzBdLml9YFxuXG5leHBvcnQgY29uc3QgZGlzcGxheVJvd1N0YXR1cyA9IChyb3c6IFJlYXNvbmluZ0Rpc3BsYXlSb3cpOiBSZWFzb25pbmdTdGVwU3RhdHVzIHwgdW5kZWZpbmVkID0+XG4gIHJvdy5raW5kID09PSAncGFyYWxsZWwnID8gcm93LnN0YXR1cyA6IHJvdy5zdGVwLnN0YXR1c1xuXG5leHBvcnQgY29uc3QgZGlzcGxheVJvd0hhc01hcmtlciA9IChyb3c6IFJlYXNvbmluZ0Rpc3BsYXlSb3cpOiBib29sZWFuID0+XG4gIHJvdy5raW5kID09PSAncGFyYWxsZWwnIHx8IHJvdy5zdGVwLnR5cGUgPT09ICd0b29sJyB8fCByb3cuc3RlcC50eXBlID09PSAnaGFuZG9mZidcblxuLyoqXG4gKiBIYW5kb2ZmIHF1ZSBzaWd1ZSBlbiBgcnVubmluZ2AgcGVybyB5YSB0aWVuZSBwYXNvcyBkZWJham8gKHAuIGVqLiB0cmFuc2Zlcl90b19tYWlhXG4gKiBvIHRyYW5zZmVyX3RvX2VzcGVjaWFsaXN0YSk6IGVzIHVuIGNvbnRlbmVkb3IgZGVsIHR1cm5vLCBubyBsYSBob2phIGFjdGl2YS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3Bhbm5pbmdIYW5kb2ZmUm93ID0gKHJvdzogUmVhc29uaW5nRGlzcGxheVJvdywgaW5kZXg6IG51bWJlciwgcm93Q291bnQ6IG51bWJlcik6IGJvb2xlYW4gPT5cbiAgaW5kZXggPCByb3dDb3VudCAtIDEgJiYgcm93LmtpbmQgPT09ICdzaW5nbGUnICYmIHJvdy5zdGVwLnR5cGUgPT09ICdoYW5kb2ZmJ1xuXG5jb25zdCBmaW5kTGFzdExlYWZNYXJrZXJJbmRleCA9IChyb3dzOiBSZWFzb25pbmdEaXNwbGF5Um93W10pOiBudW1iZXIgfCBudWxsID0+IHtcbiAgZm9yIChsZXQgaSA9IHJvd3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBpZiAoIWRpc3BsYXlSb3dIYXNNYXJrZXIocm93c1tpXSkpIGNvbnRpbnVlXG4gICAgaWYgKGlzU3Bhbm5pbmdIYW5kb2ZmUm93KHJvd3NbaV0sIGksIHJvd3MubGVuZ3RoKSkgY29udGludWVcbiAgICByZXR1cm4gaVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8qKiBQdWxzZSBzb2xvIGVuIGVsIMO6bHRpbW8gcGFzbyBhY3Rpdm87IGFsIGVzY3JpYmlyIG5hcnJhY2nDs24gZW4gdHJhemEsIGV4dGllbmRlIGVsIHBhc28gYW50ZXJpb3IuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFjdGl2ZVJvd0luZGV4ID0gKFxuICByb3dzOiBSZWFzb25pbmdEaXNwbGF5Um93W10sXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsLFxuICB3cml0aW5nSW5UaW1lbGluZSA9IGZhbHNlXG4pOiBudW1iZXIgfCBudWxsID0+IHtcbiAgaWYgKCFyb3dzLmxlbmd0aCkgcmV0dXJuIG51bGxcblxuICBmb3IgKGxldCBpID0gcm93cy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgIGNvbnN0IHJvdyA9IHJvd3NbaV1cbiAgICBjb25zdCBzdGF0dXMgPSBkaXNwbGF5Um93U3RhdHVzKHJvdylcbiAgICBpZiAoc3RhdHVzICE9PSAncnVubmluZycgJiYgc3RhdHVzICE9PSAncGVuZGluZycpIGNvbnRpbnVlXG4gICAgaWYgKGlzU3Bhbm5pbmdIYW5kb2ZmUm93KHJvdywgaSwgcm93cy5sZW5ndGgpKSBjb250aW51ZVxuICAgIHJldHVybiBpXG4gIH1cblxuICBpZiAoc3RyZWFtQWN0aXZpdHk/LnBoYXNlID09PSAnd3JpdGluZycgJiYgd3JpdGluZ0luVGltZWxpbmUpIHtcbiAgICByZXR1cm4gZmluZExhc3RMZWFmTWFya2VySW5kZXgocm93cykgPz8gcm93cy5sZW5ndGggLSAxXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIEFncnVwYSB0b29scyBjb25zZWN1dGl2YXMgY29uIG1pc21vIG5vbWJyZSB5IGxhYmVsIChwLiBlai4gNMOXIGdldF90YXNrIGVuIHBhcmFsZWxvKS5cbiAqIE5vIGFncnVwYSBoYW5kb2ZmcyBuaSB0b29scyBzZXBhcmFkYXMgcG9yIG5hcnJhY2lvbmVzIHUgb3RyYXMgYWNjaW9uZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBncm91cFBhcmFsbGVsU3RlcHMgPSAoXG4gIHN0ZXBzOiBSZWFzb25pbmdTdGVwW10sXG4gIGxhYmVsT2Y6IChzdGVwOiBSZWFzb25pbmdTdGVwKSA9PiBzdHJpbmdcbik6IFJlYXNvbmluZ0Rpc3BsYXlSb3dbXSA9PiB7XG4gIGNvbnN0IHJvd3M6IFJlYXNvbmluZ0Rpc3BsYXlSb3dbXSA9IFtdXG4gIGxldCBpbmRleCA9IDBcblxuICB3aGlsZSAoaW5kZXggPCBzdGVwcy5sZW5ndGgpIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaW5kZXhdXG4gICAgaWYgKCFpc1Rvb2xBY3Rpb24oc3RlcCkpIHtcbiAgICAgIHJvd3MucHVzaCh7IGtpbmQ6ICdzaW5nbGUnLCBzdGVwIH0pXG4gICAgICBpbmRleCArPSAxXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxPZihzdGVwKVxuICAgIGNvbnN0IHsgdG9vbCB9ID0gc3RlcFxuICAgIGxldCBlbmQgPSBpbmRleCArIDFcbiAgICB3aGlsZSAoXG4gICAgICBlbmQgPCBzdGVwcy5sZW5ndGggJiZcbiAgICAgIGlzVG9vbEFjdGlvbihzdGVwc1tlbmRdKSAmJlxuICAgICAgc3RlcHNbZW5kXS50b29sID09PSB0b29sICYmXG4gICAgICBsYWJlbE9mKHN0ZXBzW2VuZF0pID09PSBsYWJlbFxuICAgICkge1xuICAgICAgZW5kICs9IDFcbiAgICB9XG5cbiAgICBjb25zdCBiYXRjaCA9IHN0ZXBzLnNsaWNlKGluZGV4LCBlbmQpXG4gICAgaWYgKGJhdGNoLmxlbmd0aCA+PSAyKSB7XG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICBraW5kOiAncGFyYWxsZWwnLFxuICAgICAgICBzdGVwczogYmF0Y2gsXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBzdGF0dXM6IGFnZ3JlZ2F0ZVN0ZXBTdGF0dXMoYmF0Y2gpLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm93cy5wdXNoKHsga2luZDogJ3NpbmdsZScsIHN0ZXAgfSlcbiAgICB9XG4gICAgaW5kZXggPSBlbmRcbiAgfVxuXG4gIHJldHVybiByb3dzXG59XG4iXSwibWFwcGluZ3MiOiI7QUFPQSxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsSUFBbUI7RUFBQSxPQUFjQSxJQUFJLENBQUNDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDRCxJQUFJLENBQUNFLElBQUk7QUFBQTtBQUUxRixPQUFPLElBQU1DLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUlDLEtBQXNCLEVBQXNDO0VBQUEsSUFBQUMsTUFBQTtFQUM5RixJQUFJRCxLQUFLLENBQUNFLElBQUksQ0FBQyxVQUFBTixJQUFJO0lBQUEsT0FBSUEsSUFBSSxDQUFDTyxNQUFNLEtBQUssT0FBTztFQUFBLEVBQUMsRUFBRSxPQUFPLE9BQU87RUFDL0QsSUFBSUgsS0FBSyxDQUFDRSxJQUFJLENBQUMsVUFBQU4sSUFBSTtJQUFBLE9BQUlBLElBQUksQ0FBQ08sTUFBTSxLQUFLLFNBQVMsSUFBSVAsSUFBSSxDQUFDTyxNQUFNLEtB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
@@ -1,3 +0,0 @@
1
- export { ReasoningBlock } from './ReasoningBlock';
2
- export { ReasoningTimeline } from './ReasoningTimeline';
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFzb25pbmdCbG9jayIsIlJlYXNvbmluZ1RpbWVsaW5lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuL1JlYXNvbmluZ0Jsb2NrJ1xuZXhwb3J0IHR5cGUgeyBSZWFzb25pbmdCbG9ja1Byb3BzIH0gZnJvbSAnLi9SZWFzb25pbmdCbG9jaydcbmV4cG9ydCB7IFJlYXNvbmluZ1RpbWVsaW5lIH0gZnJvbSAnLi9SZWFzb25pbmdUaW1lbGluZSdcbmV4cG9ydCB0eXBlIHsgUmVhc29uaW5nVGltZWxpbmVQcm9wcyB9IGZyb20gJy4vUmVhc29uaW5nVGltZWxpbmUnXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQWMsUUFBUSxrQkFBa0I7QUFFakQsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCIiwiaWdub3JlTGlzdCI6W119
@@ -1,54 +0,0 @@
1
- import { isVisibleStep } from './ReasoningSteps';
2
- export var PENDING_NARRATION_KEY = 'pending-narration';
3
- export var visibleReasoningSteps = function visibleReasoningSteps(steps) {
4
- var showThinking = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
5
- return showThinking ? steps : steps.filter(isVisibleStep);
6
- };
7
-
8
- /**
9
- * Narración de turno intermedio: el back la absorbe con `reasoning_step` +
10
- * `answer_reset`. Mientras llega, va en la traza (no en el cuerpo del mensaje).
11
- * Tras una narración en la traza, lo que sigue escribiéndose es la respuesta final.
12
- */
13
- export var shouldStreamNarrationInTimeline = function shouldStreamNarrationInTimeline(steps, streamActivity, streamingText) {
14
- var showThinking = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
15
- if ((streamActivity === null || streamActivity === void 0 ? void 0 : streamActivity.phase) !== 'writing') return false;
16
- if (!streamingText.trim()) return false;
17
- var visible = visibleReasoningSteps(steps, showThinking);
18
- var last = visible[visible.length - 1];
19
- if (!last || last.type === 'thinking') return false;
20
-
21
- // Carrera commit: el step ya es narración pero el body/stream aún no se limpió.
22
- if (last.type === 'narration') {
23
- return narrationTextsMatch(last.text, streamingText);
24
- }
25
-
26
- // Narración intermedia: solo tras una acción (tool/handoff). Lo demás va al cuerpo.
27
- if (last.type === 'tool' || last.type === 'handoff') {
28
- return true;
29
- }
30
- return false;
31
- };
32
- export var narrationTextsMatch = function narrationTextsMatch(committed, streamed) {
33
- if (!committed || !streamed) return false;
34
- if (committed === streamed) return true;
35
- // Mientras streamea: el texto en curso es prefijo de la narración commiteada.
36
- return committed.startsWith(streamed);
37
- };
38
- export var isSeamlessNarrationCommit = function isSeamlessNarrationCommit(step, streamedText) {
39
- return step.type === 'narration' && narrationTextsMatch(step.text, streamedText);
40
- };
41
-
42
- /** Texto de la fila live al final de la traza; null si ya está commiteado o va al cuerpo. */
43
- export var resolvePendingNarrationText = function resolvePendingNarrationText(steps, streamActivity, streamingText) {
44
- var showThinking = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
45
- if (!shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, showThinking)) return null;
46
- var last = visibleReasoningSteps(steps, showThinking).at(-1);
47
- // Step commiteado pero body/stream aún no limpiado: seguir en fila live para no
48
- // desmontar MaiaStreamdown 1 frame antes del answer_reset.
49
- if ((last === null || last === void 0 ? void 0 : last.type) === 'narration' && narrationTextsMatch(last.text, streamingText)) {
50
- return streamingText;
51
- }
52
- return streamingText;
53
- };
54
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Zpc2libGVTdGVwIiwiUEVORElOR19OQVJSQVRJT05fS0VZIiwidmlzaWJsZVJlYXNvbmluZ1N0ZXBzIiwic3RlcHMiLCJzaG93VGhpbmtpbmciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwic3RyZWFtQWN0aXZpdHkiLCJzdHJlYW1pbmdUZXh0IiwicGhhc2UiLCJ0cmltIiwidmlzaWJsZSIsImxhc3QiLCJ0eXBlIiwibmFycmF0aW9uVGV4dHNNYXRjaCIsInRleHQiLCJjb21taXR0ZWQiLCJzdHJlYW1lZCIsInN0YXJ0c1dpdGgiLCJpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0Iiwic3RlcCIsInN0cmVhbWVkVGV4dCIsInJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCIsImF0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBpc1Zpc2libGVTdGVwIH0gZnJvbSAnLi9SZWFzb25pbmdTdGVwcydcblxuZXhwb3J0IGNvbnN0IFBFTkRJTkdfTkFSUkFUSU9OX0tFWSA9ICdwZW5kaW5nLW5hcnJhdGlvbidcblxuZXhwb3J0IGNvbnN0IHZpc2libGVSZWFzb25pbmdTdGVwcyA9IChzdGVwczogUmVhc29uaW5nU3RlcFtdLCBzaG93VGhpbmtpbmcgPSBmYWxzZSk6IFJlYXNvbmluZ1N0ZXBbXSA9PlxuICBzaG93VGhpbmtpbmcgPyBzdGVwcyA6IHN0ZXBzLmZpbHRlcihpc1Zpc2libGVTdGVwKVxuXG4vKipcbiAqIE5hcnJhY2nDs24gZGUgdHVybm8gaW50ZXJtZWRpbzogZWwgYmFjayBsYSBhYnNvcmJlIGNvbiBgcmVhc29uaW5nX3N0ZXBgICtcbiAqIGBhbnN3ZXJfcmVzZXRgLiBNaWVudHJhcyBsbGVnYSwgdmEgZW4gbGEgdHJhemEgKG5vIGVuIGVsIGN1ZXJwbyBkZWwgbWVuc2FqZSkuXG4gKiBUcmFzIHVuYSBuYXJyYWNpw7NuIGVuIGxhIHRyYXphLCBsbyBxdWUgc2lndWUgZXNjcmliacOpbmRvc2UgZXMgbGEgcmVzcHVlc3RhIGZpbmFsLlxuICovXG5leHBvcnQgY29uc3Qgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSA9IChcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSxcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3RyZWFtaW5nVGV4dDogc3RyaW5nLFxuICBzaG93VGhpbmtpbmcgPSBmYWxzZVxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChzdHJlYW1BY3Rpdml0eT8ucGhhc2UgIT09ICd3cml0aW5nJykgcmV0dXJuIGZhbHNlXG4gIGlmICghc3RyZWFtaW5nVGV4dC50cmltKCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHZpc2libGUgPSB2aXNpYmxlUmVhc29uaW5nU3RlcHMoc3RlcHMsIHNob3dUaGlua2luZylcbiAgY29uc3QgbGFzdCA9IHZpc2libGVbdmlzaWJsZS5sZW5ndGggLSAxXVxuICBpZiAoIWxhc3QgfHwgbGFzdC50eXBlID09PSAndGhpbmtpbmcnKSByZXR1cm4gZmFsc2VcblxuICAvLyBDYXJyZXJhIGNvbW1pdDogZWwgc3RlcCB5YSBlcyBuYXJyYWNpw7NuIHBlcm8gZWwgYm9keS9zdHJlYW0gYcO6biBubyBzZSBsaW1wacOzLlxuICBpZiAobGFzdC50eXBlID09PSAnbmFycmF0aW9uJykge1xuICAgIHJldHVybiBuYXJyYXRpb25UZXh0c01hdGNoKGxhc3QudGV4dCwgc3RyZWFtaW5nVGV4dClcbiAgfVxuXG4gIC8vIE5hcnJhY2nDs24gaW50ZXJtZWRpYTogc29sbyB0cmFzIHVuYSBhY2Npw7NuICh0b29sL2hhbmRvZmYpLiBMbyBkZW3DoXMgdmEgYWwgY3VlcnBvLlxuICBpZiAobGFzdC50eXBlID09PSAndG9vbCcgfHwgbGFzdC50eXBlID09PSAnaGFuZG9mZicpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBjb25zdCBuYXJyYXRpb25UZXh0c01hdGNoID0gKGNvbW1pdHRlZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJlYW1lZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWNvbW1pdHRlZCB8fCAhc3RyZWFtZWQpIHJldHVybiBmYWxzZVxuICBpZiAoY29tbWl0dGVkID09PSBzdHJlYW1lZCkgcmV0dXJuIHRydWVcbiAgLy8gTWllbnRyYXMgc3RyZWFtZWE6IGVsIHRleHRvIGVuIGN1cnNvIGVzIHByZWZpam8gZGUgbGEgbmFycmFjacOzbiBjb21taXRlYWRhLlxuICByZXR1cm4gY29tbWl0dGVkLnN0YXJ0c1dpdGgoc3RyZWFtZWQpXG59XG5cbmV4cG9ydCBjb25zdCBpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0ID0gKHN0ZXA6IFJlYXNvbmluZ1N0ZXAsIHN0cmVhbWVkVGV4dDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgc3RlcC50eXBlID09PSAnbmFycmF0aW9uJyAmJiBuYXJyYXRpb25UZXh0c01hdGNoKHN0ZXAudGV4dCwgc3RyZWFtZWRUZXh0KVxuXG4vKiogVGV4dG8gZGUgbGEgZmlsYSBsaXZlIGFsIGZpbmFsIGRlIGxhIHRyYXphOyBudWxsIHNpIHlhIGVzdMOhIGNvbW1pdGVhZG8gbyB2YSBhbCBjdWVycG8uICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBlbmRpbmdOYXJyYXRpb25UZXh0ID0gKFxuICBzdGVwczogUmVhc29uaW5nU3RlcFtdLFxuICBzdHJlYW1BY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzdHJlYW1pbmdUZXh0OiBzdHJpbmcsXG4gIHNob3dUaGlua2luZyA9IGZhbHNlXG4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCFzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHN0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgc2hvd1RoaW5raW5nKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBsYXN0ID0gdmlzaWJsZVJlYXNvbmluZ1N0ZXBzKHN0ZXBzLCBzaG93VGhpbmtpbmcpLmF0KC0xKVxuICAvLyBTdGVwIGNvbW1pdGVhZG8gcGVybyBib2R5L3N0cmVhbSBhw7puIG5vIGxpbXBpYWRvOiBzZWd1aXIgZW4gZmlsYSBsaXZlIHBhcmEgbm9cbiAgLy8gZGVzbW9udGFyIE1haWFTdHJlYW1kb3duIDEgZnJhbWUgYW50ZXMgZGVsIGFuc3dlcl9yZXNldC5cbiAgaWYgKGxhc3Q/LnR5cGUgPT09ICduYXJyYXRpb24nICYmIG5hcnJhdGlvblRleHRzTWF0Y2gobGFzdC50ZXh0LCBzdHJlYW1pbmdUZXh0KSkge1xuICAgIHJldHVybiBzdHJlYW1pbmdUZXh0XG4gIH1cblxuICByZXR1cm4gc3RyZWFtaW5nVGV4dFxufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxhQUFhLFFBQVEsa0JBQWtCO0FBRWhELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsbUJBQW1CO0FBRXhELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSUMsS0FBc0I7RUFBQSxJQUFFQyxZQUFZLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEtBQUs7RUFBQSxPQUNoRkQsWUFBWSxHQUFHRCxLQUFLLEdBQUdBLEtBQUssQ0FBQ0ssTUFBTSxDQUFDUixhQUFhLENBQUM7QUFBQTs7QUFFcEQ7QUFDQTtBQUNBO0FB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
@@ -1,235 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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; }
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; }
6
- /* eslint-disable react/button-has-type */
7
- import { useCallback, useEffect, useRef, useState } from 'react';
8
- import { AgentActivityIndicator } from '../components/atoms/AgentActivityIndicator/AgentActivityIndicator';
9
- import { MaiaStreamdown } from '../components/atoms/MaiaStreamdown/MaiaStreamdown';
10
- import { ReasoningBlock } from '../components/atoms/ReasoningBlock/ReasoningBlock';
11
- import { SCTimelineIndicator, SCFinalAnswerBody } from '../components/atoms/ReasoningBlock/ReasoningBlock.styles';
12
- import { ReasoningTimeline } from '../components/atoms/ReasoningBlock/ReasoningTimeline';
13
- import { shouldStreamNarrationInTimeline } from '../components/atoms/ReasoningBlock/reasoningLiveNarration';
14
- import { reasoningStore } from '../hooks/useReasoningTrace/reasoningStore';
15
- import { useReasoningTrace } from '../hooks/useReasoningTrace';
16
- import { useT } from '../hooks/useT';
17
- import { resolveToolActionLabel, getWritingStreamActivity } from '../utils/streamActivityMessages';
18
- import { MOCK_EVENTS, MOCK_SUMMARY } from './reasoningTraceMock';
19
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
20
- var MESSAGE_ID = 'answer-dev-reasoning-streaming';
21
- var SPEEDS = [1, 2, 4, 8];
22
- /** Chunks en los que se parte el texto de cada turno para simular los tokens. */
23
- var BODY_CHUNKS = 4;
24
- export function DevReasoningTimeline() {
25
- var _useT = useT(),
26
- t = _useT.t;
27
- var _useState = useState(null),
28
- _useState2 = _slicedToArray(_useState, 2),
29
- activity = _useState2[0],
30
- setActivity = _useState2[1];
31
- var _useState3 = useState(''),
32
- _useState4 = _slicedToArray(_useState3, 2),
33
- body = _useState4[0],
34
- setBody = _useState4[1];
35
- var _useState5 = useState(false),
36
- _useState6 = _slicedToArray(_useState5, 2),
37
- isDone = _useState6[0],
38
- setIsDone = _useState6[1];
39
- var _useState7 = useState(false),
40
- _useState8 = _slicedToArray(_useState7, 2),
41
- showThinking = _useState8[0],
42
- setShowThinking = _useState8[1];
43
- var _useState9 = useState(4),
44
- _useState0 = _slicedToArray(_useState9, 2),
45
- speed = _useState0[0],
46
- setSpeed = _useState0[1];
47
- var _useState1 = useState(0),
48
- _useState10 = _slicedToArray(_useState1, 2),
49
- runId = _useState10[0],
50
- setRunId = _useState10[1];
51
- var timeoutsRef = useRef([]);
52
- var clearTimers = useCallback(function () {
53
- timeoutsRef.current.forEach(function (id) {
54
- return window.clearTimeout(id);
55
- });
56
- timeoutsRef.current = [];
57
- }, []);
58
- var run = useCallback(function () {
59
- clearTimers();
60
- reasoningStore.clear();
61
- reasoningStore.start(MESSAGE_ID);
62
- setActivity({
63
- phase: 'thinking',
64
- message: t('chat.activity.thinking.analyzing')
65
- });
66
- setBody('');
67
- setIsDone(false);
68
- setRunId(function (current) {
69
- return current + 1;
70
- });
71
-
72
- // La traza autoritativa del `complete` se arma con los mismos steps que se
73
- // fueron emitiendo, para no duplicar el payload en el mock.
74
- var emitted = new Map();
75
- var schedule = function schedule(at, fn) {
76
- timeoutsRef.current.push(window.setTimeout(fn, at / speed));
77
- };
78
- MOCK_EVENTS.forEach(function (event) {
79
- if (event.kind === 'thinking') {
80
- schedule(event.at, function () {
81
- return reasoningStore.appendThinking(MESSAGE_ID, event.i, event.text);
82
- });
83
- return;
84
- }
85
- if (event.kind === 'body') {
86
- schedule(event.at, function () {
87
- return setActivity(getWritingStreamActivity(t));
88
- });
89
- // Tokens: el texto entra de a pedazos, como el stream real.
90
- var size = Math.ceil(event.text.length / BODY_CHUNKS);
91
- var _loop = function _loop() {
92
- var slice = event.text.slice(0, size * (chunk + 1));
93
- schedule(event.at + chunk * 220, function () {
94
- return setBody(slice);
95
- });
96
- };
97
- for (var chunk = 0; chunk < BODY_CHUNKS; chunk += 1) {
98
- _loop();
99
- }
100
- return;
101
- }
102
- if (event.kind === 'complete') {
103
- schedule(event.at, function () {
104
- reasoningStore.finish(MESSAGE_ID, {
105
- v: 1,
106
- steps: _toConsumableArray(emitted.values()),
107
- summary: MOCK_SUMMARY
108
- });
109
- setActivity(null);
110
- setIsDone(true);
111
- });
112
- return;
113
- }
114
- schedule(event.at, function () {
115
- var payload = event.payload;
116
- emitted.set(payload.i, _objectSpread(_objectSpread({}, emitted.get(payload.i)), payload));
117
-
118
- // Igual que answer_reset + reasoning_step: limpiar el body antes de
119
- // commitear la fila para no renderizar 1 frame en el slot del cuerpo.
120
- if (payload.type === 'narration') setBody('');
121
- reasoningStore.applyStep(MESSAGE_ID, payload);
122
-
123
- // El manager saca el label de actividad de la tool que arranca a correr.
124
- if (payload.status === 'running' && payload.type === 'tool' && payload.tool) {
125
- var label = resolveToolActionLabel(payload.tool, t, 'present');
126
- if (label) setActivity({
127
- phase: 'action',
128
- message: label
129
- });
130
- }
131
- });
132
- });
133
- }, [clearTimers, speed, t]);
134
- useEffect(function () {
135
- return clearTimers;
136
- }, [clearTimers]);
137
- var _useReasoningTrace = useReasoningTrace(isDone ? '' : MESSAGE_ID),
138
- steps = _useReasoningTrace.steps;
139
- var streamNarrationInTimeline = shouldStreamNarrationInTimeline(steps, activity, body);
140
- return /*#__PURE__*/_jsxs("div", {
141
- style: {
142
- padding: 24,
143
- display: 'flex',
144
- flexDirection: 'column',
145
- gap: 20,
146
- fontFamily: 'Work Sans, sans-serif'
147
- },
148
- children: [/*#__PURE__*/_jsxs("div", {
149
- style: {
150
- display: 'flex',
151
- gap: 16,
152
- alignItems: 'center',
153
- flexWrap: 'wrap'
154
- },
155
- children: [/*#__PURE__*/_jsx("button", {
156
- onClick: run,
157
- style: {
158
- padding: '6px 14px'
159
- },
160
- children: "Reproducir turno"
161
- }), /*#__PURE__*/_jsxs("span", {
162
- style: {
163
- display: 'flex',
164
- gap: 4,
165
- alignItems: 'center',
166
- fontSize: 13
167
- },
168
- children: ["Velocidad:", SPEEDS.map(function (option) {
169
- return /*#__PURE__*/_jsxs("button", {
170
- onClick: function onClick() {
171
- return setSpeed(option);
172
- },
173
- style: {
174
- padding: '2px 8px',
175
- fontWeight: speed === option ? 700 : 400
176
- },
177
- children: [option, "x"]
178
- }, option);
179
- })]
180
- }), /*#__PURE__*/_jsxs("label", {
181
- htmlFor: "dev-show-thinking",
182
- style: {
183
- display: 'flex',
184
- gap: 6,
185
- alignItems: 'center',
186
- fontSize: 13
187
- },
188
- children: [/*#__PURE__*/_jsx("input", {
189
- id: "dev-show-thinking",
190
- type: "checkbox",
191
- checked: showThinking,
192
- onChange: function onChange(e) {
193
- return setShowThinking(e.target.checked);
194
- }
195
- }), "Mostrar thinking (window.reasoningThinking)"]
196
- })]
197
- }), /*#__PURE__*/_jsxs("p", {
198
- style: {
199
- margin: 0,
200
- fontSize: 12,
201
- color: '#808080',
202
- maxWidth: 640
203
- },
204
- children: ["Replay de un turno real de 94s: 30 pasos, 18 tools, dos handoffs anidados y r\xE1fagas de tools en paralelo. El cuerpo del mensaje se limpia con cada narraci\xF3n, igual que el ", /*#__PURE__*/_jsx("code", {
205
- children: "answer_reset"
206
- }), " del backend."]
207
- }), /*#__PURE__*/_jsxs("div", {
208
- style: {
209
- maxWidth: 640,
210
- display: 'flex',
211
- flexDirection: 'column',
212
- gap: 8
213
- },
214
- children: [isDone ? /*#__PURE__*/_jsx(ReasoningBlock, {
215
- messageId: MESSAGE_ID
216
- }, "block-".concat(runId)) : /*#__PURE__*/_jsx(ReasoningTimeline, {
217
- messageId: MESSAGE_ID,
218
- showThinking: showThinking,
219
- streamActivity: activity,
220
- streamingText: body
221
- }), !streamNarrationInTimeline && !!body && /*#__PURE__*/_jsx(SCFinalAnswerBody, {
222
- children: /*#__PURE__*/_jsx(MaiaStreamdown, {
223
- variant: "chat",
224
- children: body
225
- })
226
- }), activity && /*#__PURE__*/_jsx(SCTimelineIndicator, {
227
- children: /*#__PURE__*/_jsx(AgentActivityIndicator, {
228
- activity: activity,
229
- compact: true
230
- })
231
- })]
232
- })]
233
- });
234
- }
235
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiQWdlbnRBY3Rpdml0eUluZGljYXRvciIsIk1haWFTdHJlYW1kb3duIiwiUmVhc29uaW5nQmxvY2siLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiU0NGaW5hbEFuc3dlckJvZHkiLCJSZWFzb25pbmdUaW1lbGluZSIsInNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUiLCJyZWFzb25pbmdTdG9yZSIsInVzZVJlYXNvbmluZ1RyYWNlIiwidXNlVCIsInJlc29sdmVUb29sQWN0aW9uTGFiZWwiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJNT0NLX0VWRU5UUyIsIk1PQ0tfU1VNTUFSWSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJNRVNTQUdFX0lEIiwiU1BFRURTIiwiQk9EWV9DSFVOS1MiLCJEZXZSZWFzb25pbmdUaW1lbGluZSIsIl91c2VUIiwidCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImFjdGl2aXR5Iiwic2V0QWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImJvZHkiLCJzZXRCb2R5IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0RvbmUiLCJzZXRJc0RvbmUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dUaGlua2luZyIsInNldFNob3dUaGlua2luZyIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic3BlZWQiLCJzZXRTcGVlZCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInJ1bklkIiwic2V0UnVuSWQiLCJ0aW1lb3V0c1JlZiIsImNsZWFyVGltZXJzIiwiY3VycmVudCIsImZvckVhY2giLCJpZCIsIndpbmRvdyIsImNsZWFyVGltZW91dCIsInJ1biIsImNsZWFyIiwic3RhcnQiLCJwaGFzZSIsIm1lc3NhZ2UiLCJlbWl0dGVkIiwiTWFwIiwic2NoZWR1bGUiLCJhdCIsImZuIiwicHVzaCIsInNldFRpbWVvdXQiLCJldmVudCIsImtpbmQiLCJhcHBlbmRUaGlua2luZyIsImkiLCJ0ZXh0Iiwic2l6ZSIsIk1hdGgiLCJjZWlsIiwibGVuZ3RoIiwiX2xvb3AiLCJzbGljZSIsImNodW5rIiwiZmluaXNoIiwidiIsInN0ZXBzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwidmFsdWVzIiwic3VtbWFyeSIsInBheWxvYWQiLCJzZXQiLCJfb2JqZWN0U3ByZWFkIiwiZ2V0IiwidHlwZSIsImFwcGx5U3RlcCIsInN0YXR1cyIsInRvb2wiLCJsYWJlbCIsIl91c2VSZWFzb25pbmdUcmFjZSIsInN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUiLCJzdHlsZSIsInBhZGRpbmciLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImdhcCIsImZvbnRGYW1pbHkiLCJjaGlsZHJlbiIsImFsaWduSXRlbXMiLCJmbGV4V3JhcCIsIm9uQ2xpY2siLCJmb250U2l6ZSIsIm1hcCIsIm9wdGlvbiIsImZvbnRXZWlnaHQiLCJodG1sRm9yIiwiY2hlY2tlZCIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsIm1hcmdpbiIsImNvbG9yIiwibWF4V2lkdGgiLCJtZXNzYWdlSWQiLCJjb25jYXQiLCJzdHJlYW1BY3Rpdml0eSIsInN0cmVhbWluZ1RleHQiLCJ2YXJpYW50IiwiY29tcGFjdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXYvRGV2UmVhc29uaW5nVGltZWxpbmUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2J1dHRvbi1oYXMtdHlwZSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yL0FnZW50QWN0aXZpdHlJbmRpY2F0b3InXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvTWFpYVN0cmVhbWRvd24vTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBSZWFzb25pbmdCbG9jayB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2snXG5pbXBvcnQgeyBTQ1RpbWVsaW5lSW5kaWNhdG9yLCBTQ0ZpbmFsQW5zd2VyQm9keSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2suc3R5bGVzJ1xuaW1wb3J0IHsgUmVhc29uaW5nVGltZWxpbmUgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ1RpbWVsaW5lJ1xuaW1wb3J0IHsgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbidcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UvcmVhc29uaW5nU3RvcmUnXG5pbXBvcnQgeyB1c2VSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyByZXNvbHZlVG9vbEFjdGlvbkxhYmVsLCBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwUGF5bG9hZCB9IGZyb20gJy4uL3R5cGVzL3JlYXNvbmluZydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7IE1PQ0tfRVZFTlRTLCBNT0NLX1NVTU1BUlkgfSBmcm9tICcuL3JlYXNvbmluZ1RyYWNlTW9jaydcblxuY29uc3QgTUVTU0FHRV9JRCA9ICdhbnN3ZXItZGV2LXJlYXNvbmluZy1zdHJlYW1pbmcnXG5jb25zdCBTUEVFRFMgPSBbMSwgMiwgNCwgOF0gYXMgY29uc3Rcbi8qKiBDaHVua3MgZW4gbG9zIHF1ZSBzZSBwYXJ0ZSBlbCB0ZXh0byBkZSBjYWRhIHR1cm5vIHBhcmEgc2ltdWxhciBsb3MgdG9rZW5zLiAqL1xuY29uc3QgQk9EWV9DSFVOS1MgPSA0XG5cbmV4cG9ydCBmdW5jdGlvbiBEZXZSZWFzb25pbmdUaW1lbGluZSgpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgW2FjdGl2aXR5LCBzZXRBY3Rpdml0eV0gPSB1c2VTdGF0ZTxTdHJlYW1BY3Rpdml0eSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtib2R5LCBzZXRCb2R5XSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbaXNEb25lLCBzZXRJc0RvbmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93VGhpbmtpbmcsIHNldFNob3dUaGlua2luZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NwZWVkLCBzZXRTcGVlZF0gPSB1c2VTdGF0ZTwodHlwZW9mIFNQRUVEUylbbnVtYmVyXT4oNClcbiAgY29uc3QgW3J1bklkLCBzZXRSdW5JZF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCB0aW1lb3V0c1JlZiA9IHVzZVJlZjxudW1iZXJbXT4oW10pXG5cbiAgY29uc3QgY2xlYXJUaW1lcnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdGltZW91dHNSZWYuY3VycmVudC5mb3JFYWNoKGlkID0+IHdpbmRvdy5jbGVhclRpbWVvdXQoaWQpKVxuICAgIHRpbWVvdXRzUmVmLmN1cnJlbnQgPSBbXVxuICB9LCBbXSlcblxuICBjb25zdCBydW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xlYXJUaW1lcnMoKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICByZWFzb25pbmdTdG9yZS5zdGFydChNRVNTQUdFX0lEKVxuICAgIHNldEFjdGl2aXR5KHsgcGhhc2U6ICd0aGlua2luZycsIG1lc3NhZ2U6IHQoJ2NoYXQuYWN0aXZpdHkudGhpbmtpbmcuYW5hbHl6aW5nJykgfSlcbiAgICBzZXRCb2R5KCcnKVxuICAgIHNldElzRG9uZShmYWxzZSlcbiAgICBzZXRSdW5JZChjdXJyZW50ID0+IGN1cnJlbnQgKyAxKVxuXG4gICAgLy8gTGEgdHJhemEgYXV0b3JpdGF0aXZhIGRlbCBgY29tcGxldGVgIHNlIGFybWEgY29uIGxvcyBtaXNtb3Mgc3RlcHMgcXVlIHNlXG4gICAgLy8gZnVlcm9uIGVtaXRpZW5kbywgcGFyYSBubyBkdXBsaWNhciBlbCBwYXlsb2FkIGVuIGVsIG1vY2suXG4gICAgY29uc3QgZW1pdHRlZCA9IG5ldyBNYXA8bnVtYmVyLCBSZWFzb25pbmdTdGVwUGF5bG9hZD4oKVxuICAgIGNvbnN0IHNjaGVkdWxlID0gKGF0OiBudW1iZXIsIGZuOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICB0aW1lb3V0c1JlZi5jdXJyZW50LnB1c2god2luZG93LnNldFRpbWVvdXQoZm4sIGF0IC8gc3BlZWQpKVxuICAgIH1cblxuICAgIE1PQ0tfRVZFTlRTLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICd0aGlua2luZycpIHtcbiAgICAgICAgc2NoZWR1bGUoZXZlbnQuYXQsICgpID0+IHJlYXNvbmluZ1N0b3JlLmFwcGVuZFRoaW5raW5nKE1FU1NBR0VfSUQsIGV2ZW50LmksIGV2ZW50LnRleHQpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdib2R5Jykge1xuICAgICAgICBzY2hlZHVsZShldmVudC5hdCwgKCkgPT4gc2V0QWN0aXZpdHkoZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpKSlcbiAgICAgICAgLy8gVG9rZW5zOiBlbCB0ZXh0byBlbnRyYSBkZSBhIHBlZGF6b3MsIGNvbW8gZWwgc3RyZWFtIHJlYWwuXG4gICAgICAgIGNvbnN0IHNpemUgPSBNYXRoLmNlaWwoZXZlbnQudGV4dC5sZW5ndGggLyBCT0RZX0NIVU5LUylcbiAgICAgICAgZm9yIChsZXQgY2h1bmsgPSAwOyBjaHVuayA8IEJPRFlfQ0hVTktTOyBjaHVuayArPSAxKSB7XG4gICAgICAgICAgY29uc3Qgc2xpY2UgPSBldmVudC50ZXh0LnNsaWNlKDAsIHNpemUgKiAoY2h1bmsgKyAxKSlcbiAgICAgICAgICBzY2hlZHVsZShldmVudC5hdCArIGNodW5rICogMjIwLCAoKSA9PiBzZXRCb2R5KHNsaWNlKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgc2NoZWR1bGUoZXZlbnQuYXQsICgpID0+IHtcbiAgICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2goTUVTU0FHRV9JRCwgeyB2OiAxLCBzdGVwczogWy4uLmVtaXR0ZWQudmFsdWVzKCldLCBzdW1tYXJ5OiBNT0NLX1NVTU1BUlkgfSlcbiAgICAgICAgICBzZXRBY3Rpdml0eShudWxsKVxuICAgICAgICAgIHNldElzRG9uZSh0cnVlKVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUoZXZlbnQuYXQsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBldmVudFxuICAgICAgICBlbWl0dGVkLnNldChwYXlsb2FkLmksIHsgLi4uZW1pdHRlZC5nZXQocGF5bG9hZC5pKSwgLi4ucGF5bG9hZCB9KVxuXG4gICAgICAgIC8vIElndWFsIHF1ZSBhbnN3ZXJfcmVzZXQgKyByZWFzb25pbmdfc3RlcDogbGltcGlhciBlbCBib2R5IGFudGVzIGRlXG4gICAgICAgIC8vIGNvbW1pdGVhciBsYSBmaWxhIHBhcmEgbm8gcmVuZGVyaXphciAxIGZyYW1lIGVuIGVsIHNsb3QgZGVsIGN1ZXJwby5cbiAgICAgICAgaWYgKHBheWxvYWQudHlwZSA9PT0gJ25hcnJhdGlvbicpIHNldEJvZHkoJycpXG5cbiAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwbHlTdGVwKE1FU1NBR0VfSUQsIHBheWxvYWQpXG5cbiAgICAgICAgLy8gRWwgbWFuYWdlciBzYWNhIGVsIGxhYmVsIGRlIGFjdGl2aWRhZCBkZSBsYSB0b29sIHF1ZSBhcnJhbmNhIGEgY29ycmVyLlxuICAgICAgICBpZiAocGF5bG9hZC5zdGF0dXMgPT09ICdydW5uaW5nJyAmJiBwYXlsb2FkLnR5cGUgPT09ICd0b29sJyAmJiBwYXlsb2FkLnRvb2wpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IHJlc29sdmVUb29sQWN0aW9uTGFiZWwocGF5bG9hZC50b29sLCB0LCAncHJlc2VudCcpXG4gICAgICAgICAgaWYgKGxhYmVsKSBzZXRBY3Rpdml0eSh7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogbGFiZWwgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9LCBbY2xlYXJUaW1lcnMsIHNwZWVkLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4gY2xlYXJUaW1lcnMsIFtjbGVhclRpbWVyc10pXG5cbiAgY29uc3QgeyBzdGVwcyB9ID0gdXNlUmVhc29uaW5nVHJhY2UoaXNEb25lID8gJycgOiBNRVNTQUdFX0lEKVxuICBjb25zdCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID0gc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShzdGVwcywgYWN0aXZpdHksIGJvZHkpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17eyBwYWRkaW5nOiAyNCwgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAyMCwgZm9udEZhbWlseTogJ1dvcmsgU2Fucywgc2Fucy1zZXJpZicgfX1cbiAgICA+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAxNiwgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgIDxidXR0b24gb25DbGljaz17cnVufSBzdHlsZT17eyBwYWRkaW5nOiAnNnB4IDE0cHgnIH19PlxuICAgICAgICAgIFJlcHJvZHVjaXIgdHVybm9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA0LCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZm9udFNpemU6IDEzIH19PlxuICAgICAgICAgIFZlbG9jaWRhZDpcbiAgICAgICAgICB7U1BFRURTLm1hcChvcHRpb24gPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e29wdGlvbn1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U3BlZWQob3B0aW9uKX1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZzogJzJweCA4cHgnLCBmb250V2VpZ2h0OiBzcGVlZCA9PT0gb3B0aW9uID8gNzAwIDogNDAwIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtvcHRpb259eFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJkZXYtc2hvdy10aGlua2luZ1wiIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiA2LCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZm9udFNpemU6IDEzIH19PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJkZXYtc2hvdy10aGlua2luZ1wiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgY2hlY2tlZD17c2hvd1RoaW5raW5nfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4gc2V0U2hvd1RoaW5raW5nKGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgTW9zdHJhciB0aGlua2luZyAod2luZG93LnJlYXNvbmluZ1RoaW5raW5nKVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCwgZm9udFNpemU6IDEyLCBjb2xvcjogJyM4MDgwODAnLCBtYXhXaWR0aDogNjQwIH19PlxuICAgICAgICBSZXBsYXkgZGUgdW4gdHVybm8gcmVhbCBkZSA5NHM6IDMwIHBhc29zLCAxOCB0b29scywgZG9zIGhhbmRvZmZzIGFuaWRhZG9zIHkgcsOhZmFnYXMgZGUgdG9vbHMgZW4gcGFyYWxlbG8uIEVsXG4gICAgICAgIGN1ZXJwbyBkZWwgbWVuc2FqZSBzZSBsaW1waWEgY29uIGNhZGEgbmFycmFjacOzbiwgaWd1YWwgcXVlIGVsIDxjb2RlPmFuc3dlcl9yZXNldDwvY29kZT4gZGVsIGJhY2tlbmQuXG4gICAgICA8L3A+XG5cbiAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6IDY0MCwgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA4IH19PlxuICAgICAgICB7aXNEb25lID8gKFxuICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBrZXk9e2BibG9jay0ke3J1bklkfWB9IG1lc3NhZ2VJZD17TUVTU0FHRV9JRH0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UmVhc29uaW5nVGltZWxpbmVcbiAgICAgICAgICAgIG1lc3NhZ2VJZD17TUVTU0FHRV9JRH1cbiAgICAgICAgICAgIHNob3dUaGlua2luZz17c2hvd1RoaW5raW5nfVxuICAgICAgICAgICAgc3RyZWFtQWN0aXZpdHk9e2FjdGl2aXR5fVxuICAgICAgICAgICAgc3RyZWFtaW5nVGV4dD17Ym9keX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7IXN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgJiYgISFib2R5ICYmIChcbiAgICAgICAgICA8U0NGaW5hbEFuc3dlckJvZHk+XG4gICAgICAgICAgICA8TWFpYVN0cmVhbWRvd24gdmFyaWFudD1cImNoYXRcIj57Ym9keX08L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgIDwvU0NGaW5hbEFuc3dlckJvZHk+XG4gICAgICAgICl9XG4gICAgICAgIHthY3Rpdml0eSAmJiAoXG4gICAgICAgICAgPFNDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17YWN0aXZpdHl9IGNvbXBhY3QgLz5cbiAgICAgICAgICA8L1NDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0EsU0FBU0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFFaEUsU0FBU0Msc0JBQXNCLFFBQVEsbUVBQW1FO0FBQzFHLFNBQVNDLGNBQWMsUUFBUSxtREFBbUQ7QUFDbEYsU0FBU0MsY0FBYyxRQUFRLG1EQUFtRDtBQUNsRixTQUFTQyxtQkFBbUIsRUFBRUMsaUJBQWlCLFFBQVEsMERBQTBEO0FBQ2pILFNBQVNDLGlCQUFpQixRQUFRLHNEQUFzRDtBQUN4RixTQUFTQywrQkFBK0IsUUFBUSwyREFBMkQ7QUFDM0csU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxpQkFBaUIsUUFBUSw0QkFBNEI7QUFDOUQsU0FBU0MsSUFBSSxRQUFRLGVBQWU7QUFDcEMsU0FBU0Msc0JBQXNCLEVBQUVDLHdCQUF3QixRQUFRLGlDQUFpQztBQUdsRyxTQUFTQyxXQUFXLEVBQUVDLFlBQVksUUFBUSxzQkFBc0I7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBRWhFLElBQU1DLFVBQVUsR0FBRyxnQ0FBZ0M7QUFDbkQsSUFBTUMsTUFBTSxHQUFH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