@projectcor/maia-components 2.31.0 → 2.31.1-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.
- package/CHANGELOG.md +664 -0
- package/lib/App.js +4 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.js +62 -14
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +121 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +197 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +182 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +123 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +115 -0
- package/lib/components/atoms/ReasoningBlock/index.js +3 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +58 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +391 -120
- package/lib/components/molecules/ChatAIMessages/newStyles.js +50 -18
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +42 -21
- package/lib/components/molecules/MessageFeedback/styles.js +6 -2
- package/lib/context/global-context.js +1 -1
- package/lib/dev/DevReasoningTimeline.js +237 -0
- package/lib/dev/reasoningTraceMock.js +556 -0
- package/lib/hooks/useChatManager/useChatManager.js +111 -63
- package/lib/hooks/useChatMessages/useChatMessages.js +28 -27
- package/lib/hooks/useEvent.js +2 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -3
- package/lib/hooks/useProjectSummaryConfig.js +45 -17
- package/lib/hooks/useReasoningTrace/index.js +3 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.js +170 -0
- package/lib/hooks/useReasoningTrace/useReasoningTrace.js +14 -0
- package/lib/lang/br/index.js +237 -31
- package/lib/lang/en/index.js +237 -31
- package/lib/lang/es/index.js +237 -31
- package/lib/lang/fr/index.js +237 -31
- package/lib/services/maia/Orchestrator/orchestrator.js +9 -7
- package/lib/services/utils/mapChatMessages.js +21 -18
- package/lib/store/sessions/sessionStreamManager.js +99 -51
- package/lib/store/sessions/sessions.types.js +1 -1
- package/lib/types/Chat.js +1 -1
- package/lib/types/reasoning.js +2 -0
- package/lib/utils/autoApproveStorage.js +26 -0
- package/lib/utils/hitlAnalytics.js +4 -3
- package/lib/utils/reasoningMappers.js +62 -0
- package/lib/utils/streamActivityMessages.js +106 -41
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -0,0 +1,123 @@
|
|
|
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, messageId, withThinking);
|
|
61
|
+
}, [steps, streamActivity, streamingText, withThinking, messageId]);
|
|
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/IHJlYWRUaGlua2luZ0ZsYWcoKVxuICBjb25zdCBsYXN0U3RyZWFtZWROYXJyYXRpb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBwZW5kaW5nTmFycmF0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PiByZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQoc3RlcHMsIHN0cmVhbUFjdGl2aXR5LCBzdHJlYW1pbmdUZXh0LCBtZXNzYWdlSWQsIHdpdGhUaGlua2luZyksXG4gICAgW3N0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgd2l0aFRoaW5raW5nLCBtZXNzYWdlSWRdXG4gIClcblxuICBpZiAocGVuZGluZ05hcnJhdGlvbikge1xuICAgIGxhc3RTdHJlYW1lZE5hcnJhdGlvblJlZi5jdXJyZW50ID0gcGVuZGluZ05hcnJhdGlvblxuICB9XG5cbiAgY29uc3QgYWxsUm93cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHZpc2libGUgPSB3aXRoVGhpbmtpbmcgPyBzdGVwcyA6IHN0ZXBzLmZpbHRlcihpc1Zpc2libGVTdGVwKVxuICAgIHJldHVybiBncm91cFBhcmFsbGVsU3RlcHModmlzaWJsZSwgc3RlcCA9PiBzdGVwTGFiZWwoc3RlcCwgdCkpXG4gIH0sIFtzdGVwcywgd2l0aFRoaW5raW5nLCB0XSlcblxuICBjb25zdCBkaXNwbGF5Um93cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHBlbmRpbmdOYXJyYXRpb24gPyBoaWRlVGFpbE5hcnJhdGlvblJvdyhhbGxSb3dzKSA6IGFsbFJvd3MpLFxuICAgIFthbGxSb3dzLCBwZW5kaW5nTmFycmF0aW9uXVxuICApXG5cbiAgY29uc3Qgc2VhbWxlc3NSb3dLZXkgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocGVuZGluZ05hcnJhdGlvbiB8fCAhYWxsUm93cy5sZW5ndGgpIHJldHVybiBudWxsXG4gICAgY29uc3QgbGFzdCA9IGFsbFJvd3NbYWxsUm93cy5sZW5ndGggLSAxXVxuICAgIGlmIChsYXN0LmtpbmQgIT09ICdzaW5nbGUnKSByZXR1cm4gbnVsbFxuICAgIGlmICghaXNTZWFtbGVzc05hcnJhdGlvbkNvbW1pdChsYXN0LnN0ZXAsIGxhc3RTdHJlYW1lZE5hcnJhdGlvblJlZi5jdXJyZW50KSkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gZGlzcGxheVJvd0tleShsYXN0KVxuICB9LCBbYWxsUm93cywgcGVuZGluZ05hcnJhdGlvbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VhbWxlc3NSb3dLZXkpIGxhc3RTdHJlYW1lZE5hcnJhdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbc2VhbWxlc3NSb3dLZXldKVxuXG4gIGlmICghZGlzcGxheVJvd3MubGVuZ3RoICYmICFwZW5kaW5nTmFycmF0aW9uKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IHJvd0NvdW50ID0gZGlzcGxheVJvd3MubGVuZ3RoICsgKHBlbmRpbmdOYXJyYXRpb24gPyAxIDogMClcblxuICBjb25zdCByZW5kZXJSb3cgPSAocm93OiBSZWFzb25pbmdEaXNwbGF5Um93LCBpbmRleDogbnVtYmVyLCBzZWFtbGVzczogYm9vbGVhbikgPT4ge1xuICAgIGlmIChyb3cua2luZCA9PT0gJ3NpbmdsZScgJiYgcm93LnN0ZXAudHlwZSA9PT0gJ25hcnJhdGlvbicpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ1RpbWVsaW5lUm93IGtleT17ZGlzcGxheVJvd0tleShyb3cpfSAkc2VhbWxlc3M9e3NlYW1sZXNzfT5cbiAgICAgICAgICA8VGltZWxpbmVOYXJyYXRpb25Sb3cgdGV4dD17cm93LnN0ZXAudGV4dCA/PyAnJ30gbGl2ZT17ZmFsc2V9IGNvbm5lY3RBYm92ZT17aW5kZXggPiAwfSAvPlxuICAgICAgICA8L1NDVGltZWxpbmVSb3c+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ1RpbWVsaW5lUm93IGtleT17ZGlzcGxheVJvd0tleShyb3cpfSAkc2VhbWxlc3M9e3NlYW1sZXNzfT5cbiAgICAgICAgPERpc3BsYXlTdGVwUm93XG4gICAgICAgICAgcm93PXtyb3d9XG4gICAgICAgICAgdD17dH1cbiAgICAgICAgICBjb25uZWN0QWJvdmU9e2luZGV4ID4gMH1cbiAgICAgICAgICBjb25uZWN0QmVsb3c9e2luZGV4IDwgcm93Q291bnQgLSAxfVxuICAgICAgICAgIHNob3dEZXRhaWw9e2ZhbHNlfVxuICAgICAgICAgIHNob3dDaHJvbWU9e2ZhbHNlfVxuICAgICAgICAvPlxuICAgICAgPC9TQ1RpbWVsaW5lUm93PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDUmVhc29uaW5nVGltZWxpbmU+XG4gICAgICB7ZGlzcGxheVJvd3MubWFwKChyb3csIGluZGV4KSA9PiByZW5kZXJSb3cocm93LCBpbmRleCwgZGlzcGxheVJvd0tleShyb3cpID09PSBzZWFtbGVzc1Jvd0tleSkpfVxuICAgICAge3BlbmRpbmdOYXJyYXRpb24gJiYgKFxuICAgICAgICA8U0NUaW1lbGluZVJvdyBrZXk9e1BFTkRJTkdfTkFSUkFUSU9OX0tFWX0gJHNlYW1sZXNzPlxuICAgICAgICAgIDxUaW1lbGluZU5hcnJhdGlvblJvdyB0ZXh0PXtwZW5kaW5nTmFycmF0aW9ufSBsaXZlIGNvbm5lY3RBYm92ZT17ZGlzcGxheVJvd3MubGVuZ3RoID4gMH0gLz5cbiAgICAgICAgPC9TQ1RpbWVsaW5lUm93PlxuICAgICAg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
|
|
@@ -0,0 +1,115 @@
|
|
|
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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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { ReasoningBlock } from './ReasoningBlock';
|
|
2
|
+
export { ReasoningTimeline } from './ReasoningTimeline';
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFzb25pbmdCbG9jayIsIlJlYXNvbmluZ1RpbWVsaW5lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuL1JlYXNvbmluZ0Jsb2NrJ1xuZXhwb3J0IHR5cGUgeyBSZWFzb25pbmdCbG9ja1Byb3BzIH0gZnJvbSAnLi9SZWFzb25pbmdCbG9jaydcbmV4cG9ydCB7IFJlYXNvbmluZ1RpbWVsaW5lIH0gZnJvbSAnLi9SZWFzb25pbmdUaW1lbGluZSdcbmV4cG9ydCB0eXBlIHsgUmVhc29uaW5nVGltZWxpbmVQcm9wcyB9IGZyb20gJy4vUmVhc29uaW5nVGltZWxpbmUnXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGNBQWMsUUFBUSxrQkFBa0I7QUFFakQsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { reasoningStore } from '../../../hooks/useReasoningTrace/reasoningStore';
|
|
2
|
+
import { isVisibleStep } from './ReasoningSteps';
|
|
3
|
+
export var PENDING_NARRATION_KEY = 'pending-narration';
|
|
4
|
+
export var visibleReasoningSteps = function visibleReasoningSteps(steps) {
|
|
5
|
+
var showThinking = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
6
|
+
return showThinking ? steps : steps.filter(isVisibleStep);
|
|
7
|
+
};
|
|
8
|
+
export var narrationTextsMatch = function narrationTextsMatch(committed, streamed) {
|
|
9
|
+
if (!committed || !streamed) return false;
|
|
10
|
+
if (committed === streamed) return true;
|
|
11
|
+
// Mientras streamea: el texto en curso es prefijo de la narración commiteada.
|
|
12
|
+
return committed.startsWith(streamed);
|
|
13
|
+
};
|
|
14
|
+
export var isSeamlessNarrationCommit = function isSeamlessNarrationCommit(step, streamedText) {
|
|
15
|
+
return step.type === 'narration' && narrationTextsMatch(step.text, streamedText);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Narración de turno intermedio: el back la absorbe con `reasoning_step` +
|
|
20
|
+
* `answer_reset`. Mientras llega, va en la traza (no en el cuerpo del mensaje).
|
|
21
|
+
* Tras una narración en la traza, lo que sigue escribiéndose es la respuesta final.
|
|
22
|
+
*/
|
|
23
|
+
export var shouldStreamNarrationInTimeline = function shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, messageId) {
|
|
24
|
+
var showThinking = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
25
|
+
if ((streamActivity === null || streamActivity === void 0 ? void 0 : streamActivity.phase) !== 'writing') return false;
|
|
26
|
+
if (!streamingText.trim()) return false;
|
|
27
|
+
var visible = visibleReasoningSteps(steps, showThinking);
|
|
28
|
+
var last = visible[visible.length - 1];
|
|
29
|
+
if (!last || last.type === 'thinking') return false;
|
|
30
|
+
|
|
31
|
+
// Carrera commit: narración commiteada, body aún no limpiado (pre answer_reset).
|
|
32
|
+
if (last.type === 'narration') {
|
|
33
|
+
if (messageId && !reasoningStore.isNarrationHandoffPending(messageId)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
return narrationTextsMatch(last.text, streamingText);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Narración intermedia: solo tras una acción (tool/handoff). Lo demás va al cuerpo.
|
|
40
|
+
if (last.type === 'tool' || last.type === 'handoff') {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Texto de la fila live al final de la traza; null si ya está commiteado o va al cuerpo. */
|
|
47
|
+
export var resolvePendingNarrationText = function resolvePendingNarrationText(steps, streamActivity, streamingText, messageId) {
|
|
48
|
+
var showThinking = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
49
|
+
if (!shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, messageId, showThinking)) return null;
|
|
50
|
+
var last = visibleReasoningSteps(steps, showThinking).at(-1);
|
|
51
|
+
// Step commiteado pero body/stream aún no limpiado: seguir en fila live para no
|
|
52
|
+
// desmontar MaiaStreamdown 1 frame antes del answer_reset.
|
|
53
|
+
if ((last === null || last === void 0 ? void 0 : last.type) === 'narration' && narrationTextsMatch(last.text, streamingText)) {
|
|
54
|
+
return streamingText;
|
|
55
|
+
}
|
|
56
|
+
return streamingText;
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFzb25pbmdTdG9yZSIsImlzVmlzaWJsZVN0ZXAiLCJQRU5ESU5HX05BUlJBVElPTl9LRVkiLCJ2aXNpYmxlUmVhc29uaW5nU3RlcHMiLCJzdGVwcyIsInNob3dUaGlua2luZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImZpbHRlciIsIm5hcnJhdGlvblRleHRzTWF0Y2giLCJjb21taXR0ZWQiLCJzdHJlYW1lZCIsInN0YXJ0c1dpdGgiLCJpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0Iiwic3RlcCIsInN0cmVhbWVkVGV4dCIsInR5cGUiLCJ0ZXh0Iiwic2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0cmVhbUFjdGl2aXR5Iiwic3RyZWFtaW5nVGV4dCIsIm1lc3NhZ2VJZCIsInBoYXNlIiwidHJpbSIsInZpc2libGUiLCJsYXN0IiwiaXNOYXJyYXRpb25IYW5kb2ZmUGVuZGluZyIsInJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCIsImF0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlL3JlYXNvbmluZ1N0b3JlJ1xuaW1wb3J0IHsgaXNWaXNpYmxlU3RlcCB9IGZyb20gJy4vUmVhc29uaW5nU3RlcHMnXG5cbmV4cG9ydCBjb25zdCBQRU5ESU5HX05BUlJBVElPTl9LRVkgPSAncGVuZGluZy1uYXJyYXRpb24nXG5cbmV4cG9ydCBjb25zdCB2aXNpYmxlUmVhc29uaW5nU3RlcHMgPSAoc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSwgc2hvd1RoaW5raW5nID0gZmFsc2UpOiBSZWFzb25pbmdTdGVwW10gPT5cbiAgc2hvd1RoaW5raW5nID8gc3RlcHMgOiBzdGVwcy5maWx0ZXIoaXNWaXNpYmxlU3RlcClcblxuZXhwb3J0IGNvbnN0IG5hcnJhdGlvblRleHRzTWF0Y2ggPSAoY29tbWl0dGVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmVhbWVkOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PiB7XG4gIGlmICghY29tbWl0dGVkIHx8ICFzdHJlYW1lZCkgcmV0dXJuIGZhbHNlXG4gIGlmIChjb21taXR0ZWQgPT09IHN0cmVhbWVkKSByZXR1cm4gdHJ1ZVxuICAvLyBNaWVudHJhcyBzdHJlYW1lYTogZWwgdGV4dG8gZW4gY3Vyc28gZXMgcHJlZmlqbyBkZSBsYSBuYXJyYWNpw7NuIGNvbW1pdGVhZGEuXG4gIHJldHVybiBjb21taXR0ZWQuc3RhcnRzV2l0aChzdHJlYW1lZClcbn1cblxuZXhwb3J0IGNvbnN0IGlzU2VhbWxlc3NOYXJyYXRpb25Db21taXQgPSAoc3RlcDogUmVhc29uaW5nU3RlcCwgc3RyZWFtZWRUZXh0OiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PlxuICBzdGVwLnR5cGUgPT09ICduYXJyYXRpb24nICYmIG5hcnJhdGlvblRleHRzTWF0Y2goc3RlcC50ZXh0LCBzdHJlYW1lZFRleHQpXG5cbi8qKlxuICogTmFycmFjacOzbiBkZSB0dXJubyBpbnRlcm1lZGlvOiBlbCBiYWNrIGxhIGFic29yYmUgY29uIGByZWFzb25pbmdfc3RlcGAgK1xuICogYGFuc3dlcl9yZXNldGAuIE1pZW50cmFzIGxsZWdhLCB2YSBlbiBsYSB0cmF6YSAobm8gZW4gZWwgY3VlcnBvIGRlbCBtZW5zYWplKS5cbiAqIFRyYXMgdW5hIG5hcnJhY2nDs24gZW4gbGEgdHJhemEsIGxvIHF1ZSBzaWd1ZSBlc2NyaWJpw6luZG9zZSBlcyBsYSByZXNwdWVzdGEgZmluYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID0gKFxuICBzdGVwczogUmVhc29uaW5nU3RlcFtdLFxuICBzdHJlYW1BY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzdHJlYW1pbmdUZXh0OiBzdHJpbmcsXG4gIG1lc3NhZ2VJZD86IHN0cmluZyB8IG51bGwsXG4gIHNob3dUaGlua2luZyA9IGZhbHNlXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKHN0cmVhbUFjdGl2aXR5Py5waGFzZSAhPT0gJ3dyaXRpbmcnKSByZXR1cm4gZmFsc2VcbiAgaWYgKCFzdHJlYW1pbmdUZXh0LnRyaW0oKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgdmlzaWJsZSA9IHZpc2libGVSZWFzb25pbmdTdGVwcyhzdGVwcywgc2hvd1RoaW5raW5nKVxuICBjb25zdCBsYXN0ID0gdmlzaWJsZVt2aXNpYmxlLmxlbmd0aCAtIDFdXG4gIGlmICghbGFzdCB8fCBsYXN0LnR5cGUgPT09ICd0aGlua2luZycpIHJldHVybiBmYWxzZVxuXG4gIC8vIENhcnJlcmEgY29tbWl0OiBuYXJyYWNpw7NuIGNvbW1pdGVhZGEsIGJvZHkgYcO6biBubyBsaW1waWFkbyAocHJlIGFuc3dlcl9yZXNldCkuXG4gIGlmIChsYXN0LnR5cGUgPT09ICduYXJyYXRpb24nKSB7XG4gICAgaWYgKG1lc3NhZ2VJZCAmJiAhcmVhc29uaW5nU3RvcmUuaXNOYXJyYXRpb25IYW5kb2ZmUGVuZGluZyhtZXNzYWdlSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG5hcnJhdGlvblRleHRzTWF0Y2gobGFzdC50ZXh0LCBzdHJlYW1pbmdUZXh0KVxuICB9XG5cbiAgLy8gTmFycmFjacOzbiBpbnRlcm1lZGlhOiBzb2xvIHRyYXMgdW5hIGFjY2nDs24gKHRvb2wvaGFuZG9mZikuIExvIGRlbcOhcyB2YSBhbCBjdWVycG8uXG4gIGlmIChsYXN0LnR5cGUgPT09ICd0b29sJyB8fCBsYXN0LnR5cGUgPT09ICdoYW5kb2ZmJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqIFRleHRvIGRlIGxhIGZpbGEgbGl2ZSBhbCBmaW5hbCBkZSBsYSB0cmF6YTsgbnVsbCBzaSB5YSBlc3TDoSBjb21taXRlYWRvIG8gdmEgYWwgY3VlcnBvLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCA9IChcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSxcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3RyZWFtaW5nVGV4dDogc3RyaW5nLFxuICBtZXNzYWdlSWQ/OiBzdHJpbmcgfCBudWxsLFxuICBzaG93VGhpbmtpbmcgPSBmYWxzZVxuKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShzdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQsIG1lc3NhZ2VJZCwgc2hvd1RoaW5raW5nKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBsYXN0ID0gdmlzaWJsZVJlYXNvbmluZ1N0ZXBzKHN0ZXBzLCBzaG93VGhpbmtpbmcpLmF0KC0xKVxuICAvLyBTdGVwIGNvbW1pdGVhZG8gcGVybyBib2R5L3N0cmVhbSBhw7puIG5vIGxpbXBpYWRvOiBzZWd1aXIgZW4gZmlsYSBsaXZlIHBhcmEgbm9cbiAgLy8gZGVzbW9udGFyIE1haWFTdHJlYW1kb3duIDEgZnJhbWUgYW50ZXMgZGVsIGFuc3dlcl9yZXNldC5cbiAgaWYgKGxhc3Q/LnR5cGUgPT09ICduYXJyYXRpb24nICYmIG5hcnJhdGlvblRleHRzTWF0Y2gobGFzdC50ZXh0LCBzdHJlYW1pbmdUZXh0KSkge1xuICAgIHJldHVybiBzdHJlYW1pbmdUZXh0XG4gIH1cblxuICByZXR1cm4gc3RyZWFtaW5n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
|