langchain_agentx_stream_ui 0.7.7 → 0.8.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/dist/{chunk-AMUGAG7U.js → chunk-MI4NGIDF.js} +2 -2
- package/dist/{chunk-RWKNI52H.js → chunk-XEIQBTD2.js} +155 -71
- package/dist/chunk-XEIQBTD2.js.map +1 -0
- package/dist/default.css +23 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/{multi-session-9LtrGlsm.d.ts → multi-session-BoyeyFv9.d.ts} +25 -0
- package/dist/multi-session.d.ts +1 -1
- package/dist/multi-session.js +2 -2
- package/dist/virtual.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-RWKNI52H.js.map +0 -1
- /package/dist/{chunk-AMUGAG7U.js.map → chunk-MI4NGIDF.js.map} +0 -0
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
useSessionStoreApi,
|
|
26
26
|
useSessionViewOptions,
|
|
27
27
|
useToolDisplayOptions
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-XEIQBTD2.js";
|
|
29
29
|
import {
|
|
30
30
|
classifyToolResultSoftKind,
|
|
31
31
|
createDefaultToolRegistry,
|
|
@@ -2212,4 +2212,4 @@ export {
|
|
|
2212
2212
|
createActiveSessionBridge,
|
|
2213
2213
|
MultiAgentSession
|
|
2214
2214
|
};
|
|
2215
|
-
//# sourceMappingURL=chunk-
|
|
2215
|
+
//# sourceMappingURL=chunk-MI4NGIDF.js.map
|
|
@@ -51,6 +51,7 @@ function createEmptyTree() {
|
|
|
51
51
|
customMessage: null
|
|
52
52
|
},
|
|
53
53
|
modelRetry: null,
|
|
54
|
+
compactProgress: null,
|
|
54
55
|
parallelAgentTextGateCallIds: null,
|
|
55
56
|
deferredMainText: ""
|
|
56
57
|
};
|
|
@@ -88,6 +89,7 @@ var DEFAULT_EVENT_TIERS = {
|
|
|
88
89
|
"assistant-turn-superseded": "main",
|
|
89
90
|
/** D-CMP-EVT-11:主可见(非仅 debug);淡提示 Conversation compacted */
|
|
90
91
|
"compact-boundary": "collapsed",
|
|
92
|
+
"compact-progress": "debug",
|
|
91
93
|
"task-started": "debug",
|
|
92
94
|
"task-progress": "debug",
|
|
93
95
|
"task-notification-enqueued": "debug",
|
|
@@ -540,6 +542,48 @@ function formatModelRetryCategoryLabel(category) {
|
|
|
540
542
|
}
|
|
541
543
|
}
|
|
542
544
|
|
|
545
|
+
// src/types/compactProgress.ts
|
|
546
|
+
function normalizePercent(value) {
|
|
547
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
548
|
+
if (!Number.isFinite(n)) return 0;
|
|
549
|
+
return Math.max(0, Math.min(100, Math.round(n)));
|
|
550
|
+
}
|
|
551
|
+
function optionalInt(value) {
|
|
552
|
+
if (value == null) return null;
|
|
553
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
554
|
+
return Number.isFinite(n) ? Math.floor(n) : null;
|
|
555
|
+
}
|
|
556
|
+
function defaultPrecompactDetail(stage, detail) {
|
|
557
|
+
if (detail) return detail;
|
|
558
|
+
const normalized = stage.trim().toLowerCase();
|
|
559
|
+
if (normalized === "precompact" || normalized === "pre_compact" || normalized === "hooks") {
|
|
560
|
+
return "Running PreCompact hooks\u2026";
|
|
561
|
+
}
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
function parseCompactProgressEventData(data, timestampMs) {
|
|
565
|
+
const phaseRaw = data.phase;
|
|
566
|
+
const phase = typeof phaseRaw === "string" && phaseRaw.trim() ? phaseRaw.trim().toLowerCase() : "tick";
|
|
567
|
+
const stage = typeof data.stage === "string" ? data.stage : String(data.stage ?? "");
|
|
568
|
+
const percent = normalizePercent(data.percent);
|
|
569
|
+
const detailRaw = data.detail;
|
|
570
|
+
const detail = typeof detailRaw === "string" && detailRaw.trim() ? detailRaw.trim() : null;
|
|
571
|
+
return {
|
|
572
|
+
phase,
|
|
573
|
+
percent,
|
|
574
|
+
stage,
|
|
575
|
+
stageIndex: optionalInt(data.stage_index),
|
|
576
|
+
totalStages: optionalInt(data.total_stages),
|
|
577
|
+
detail: defaultPrecompactDetail(stage, detail),
|
|
578
|
+
updatedAt: timestampMs
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
function formatCompactProgressBar(percent, barWidth = 40) {
|
|
582
|
+
const filled = Math.round(barWidth * percent / 100);
|
|
583
|
+
const safeFilled = Math.max(0, Math.min(barWidth, filled));
|
|
584
|
+
return `${"\u25B0".repeat(safeFilled)}${"\u25B1".repeat(barWidth - safeFilled)}`;
|
|
585
|
+
}
|
|
586
|
+
|
|
543
587
|
// src/core/taskNotification.ts
|
|
544
588
|
function trimStr(value) {
|
|
545
589
|
return typeof value === "string" ? value.trim() : "";
|
|
@@ -677,11 +721,16 @@ function cloneTree(tree) {
|
|
|
677
721
|
waitingForFinalResponseAfterTasks: tree.waitingForFinalResponseAfterTasks,
|
|
678
722
|
taskStartTime: tree.taskStartTime,
|
|
679
723
|
hookProgress: { ...tree.hookProgress },
|
|
680
|
-
modelRetry: tree.modelRetry ? { ...tree.modelRetry } : null
|
|
724
|
+
modelRetry: tree.modelRetry ? { ...tree.modelRetry } : null,
|
|
725
|
+
compactProgress: tree.compactProgress ? { ...tree.compactProgress } : null
|
|
681
726
|
};
|
|
682
727
|
}
|
|
728
|
+
function clearCompactProgress(tree) {
|
|
729
|
+
tree.compactProgress = null;
|
|
730
|
+
}
|
|
683
731
|
function clearModelRetry(tree) {
|
|
684
732
|
tree.modelRetry = null;
|
|
733
|
+
clearCompactProgress(tree);
|
|
685
734
|
}
|
|
686
735
|
function buildClassifyContext(tree) {
|
|
687
736
|
let streamingToolNodeId;
|
|
@@ -1009,6 +1058,16 @@ function handleApiRetry(tree, event) {
|
|
|
1009
1058
|
tree.modelRetry = modelRetry;
|
|
1010
1059
|
}
|
|
1011
1060
|
}
|
|
1061
|
+
function handleCompactProgress(tree, event) {
|
|
1062
|
+
const data = event.data;
|
|
1063
|
+
const parsed = parseCompactProgressEventData(data, eventTimeToMs(event.timestamp));
|
|
1064
|
+
if (!parsed) return;
|
|
1065
|
+
if (parsed.phase === "end") {
|
|
1066
|
+
clearCompactProgress(tree);
|
|
1067
|
+
return;
|
|
1068
|
+
}
|
|
1069
|
+
tree.compactProgress = parsed;
|
|
1070
|
+
}
|
|
1012
1071
|
function handleHookProgress(tree, event) {
|
|
1013
1072
|
const data = event.data;
|
|
1014
1073
|
const modelRetry = parseModelRetryHookData(data, eventTimeToMs(event.timestamp));
|
|
@@ -1644,6 +1703,9 @@ function handleDebug(tree, event, eventIndex, parentNodeId, collectDebug) {
|
|
|
1644
1703
|
case "api-retry":
|
|
1645
1704
|
handleApiRetry(tree, event);
|
|
1646
1705
|
break;
|
|
1706
|
+
case "compact-progress":
|
|
1707
|
+
handleCompactProgress(tree, event);
|
|
1708
|
+
break;
|
|
1647
1709
|
case "hook-progress":
|
|
1648
1710
|
handleHookProgress(tree, event);
|
|
1649
1711
|
break;
|
|
@@ -1836,6 +1898,7 @@ function applyClassified(tree, classified, eventIndex, options) {
|
|
|
1836
1898
|
handleTaskNotification(tree, event);
|
|
1837
1899
|
break;
|
|
1838
1900
|
case "compact-boundary":
|
|
1901
|
+
clearCompactProgress(tree);
|
|
1839
1902
|
pushSystemSummarySource(tree, event, eventIndex);
|
|
1840
1903
|
if (options?.collectDebug === true) {
|
|
1841
1904
|
tree.debugEvents.push({
|
|
@@ -4707,6 +4770,22 @@ function ModelRetryBlock({ state, verbose = false }) {
|
|
|
4707
4770
|
] });
|
|
4708
4771
|
}
|
|
4709
4772
|
|
|
4773
|
+
// src/view/CompactProgressBlock.tsx
|
|
4774
|
+
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
4775
|
+
function CompactProgressBlock({ state }) {
|
|
4776
|
+
const bar = formatCompactProgressBar(state.percent);
|
|
4777
|
+
return /* @__PURE__ */ jsxs4("div", { className: "lax-compact-progress", "data-testid": "lax-compact-progress", children: [
|
|
4778
|
+
/* @__PURE__ */ jsx6("div", { className: "lax-compact-progress__title", "data-testid": "lax-compact-progress-title", children: "\u273D Compacting conversation\u2026" }),
|
|
4779
|
+
/* @__PURE__ */ jsxs4("div", { className: "lax-compact-progress__bar-line", "data-testid": "lax-compact-progress-bar", children: [
|
|
4780
|
+
bar,
|
|
4781
|
+
" ",
|
|
4782
|
+
state.percent,
|
|
4783
|
+
"%"
|
|
4784
|
+
] }),
|
|
4785
|
+
state.detail ? /* @__PURE__ */ jsx6("div", { className: "lax-compact-progress__detail", "data-testid": "lax-compact-progress-detail", children: state.detail }) : null
|
|
4786
|
+
] });
|
|
4787
|
+
}
|
|
4788
|
+
|
|
4710
4789
|
// src/view/spinner/constants.ts
|
|
4711
4790
|
var _BASE_FRAMES = ["\xB7", "\u2722", "*", "\u2736", "\u273B", "\u273D"];
|
|
4712
4791
|
var SPINNER_FRAMES = [..._BASE_FRAMES, ..._BASE_FRAMES.slice().reverse()];
|
|
@@ -4937,7 +5016,7 @@ function getSpinnerFrameIndex(timeMs, reducedMotion = false) {
|
|
|
4937
5016
|
import { useRef as useRef5 } from "react";
|
|
4938
5017
|
|
|
4939
5018
|
// src/view/spinner/SpinnerGlimmerVerb.tsx
|
|
4940
|
-
import { jsxs as
|
|
5019
|
+
import { jsxs as jsxs5 } from "react/jsx-runtime";
|
|
4941
5020
|
function SpinnerGlimmerVerb({
|
|
4942
5021
|
verb,
|
|
4943
5022
|
mode,
|
|
@@ -4963,7 +5042,7 @@ function SpinnerGlimmerVerb({
|
|
|
4963
5042
|
["--lax-spinner-flash-opacity"]: String(flashOpacity)
|
|
4964
5043
|
}
|
|
4965
5044
|
};
|
|
4966
|
-
return /* @__PURE__ */
|
|
5045
|
+
return /* @__PURE__ */ jsxs5("span", { className: classes.join(" "), style, children: [
|
|
4967
5046
|
verb,
|
|
4968
5047
|
"\u2026"
|
|
4969
5048
|
] });
|
|
@@ -5112,7 +5191,7 @@ function useStalledSpinnerIntensity(time, currentResponseLength, hasActiveTools
|
|
|
5112
5191
|
}
|
|
5113
5192
|
|
|
5114
5193
|
// src/view/spinner/SpinnerAnimationRow.tsx
|
|
5115
|
-
import { jsx as
|
|
5194
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
5116
5195
|
function SpinnerAnimationRow({
|
|
5117
5196
|
mode,
|
|
5118
5197
|
verb,
|
|
@@ -5170,9 +5249,9 @@ function SpinnerAnimationRow({
|
|
|
5170
5249
|
className: thinkingStatus === "thinking" ? "lax-spinner-status-part--thinking" : void 0
|
|
5171
5250
|
});
|
|
5172
5251
|
}
|
|
5173
|
-
return /* @__PURE__ */
|
|
5174
|
-
/* @__PURE__ */
|
|
5175
|
-
/* @__PURE__ */
|
|
5252
|
+
return /* @__PURE__ */ jsxs6("div", { className: "lax-spinner", "data-testid": "lax-spinner", children: [
|
|
5253
|
+
/* @__PURE__ */ jsx7("span", { className: "lax-spinner-frame", "data-testid": "lax-spinner-frame", children: frame }),
|
|
5254
|
+
/* @__PURE__ */ jsx7(
|
|
5176
5255
|
SpinnerGlimmerVerb,
|
|
5177
5256
|
{
|
|
5178
5257
|
verb,
|
|
@@ -5182,9 +5261,9 @@ function SpinnerAnimationRow({
|
|
|
5182
5261
|
flashOpacity
|
|
5183
5262
|
}
|
|
5184
5263
|
),
|
|
5185
|
-
statusParts.length > 0 && /* @__PURE__ */
|
|
5264
|
+
statusParts.length > 0 && /* @__PURE__ */ jsxs6("span", { className: "lax-spinner-status", children: [
|
|
5186
5265
|
" (",
|
|
5187
|
-
statusParts.map((part, i) => /* @__PURE__ */
|
|
5266
|
+
statusParts.map((part, i) => /* @__PURE__ */ jsxs6(
|
|
5188
5267
|
"span",
|
|
5189
5268
|
{
|
|
5190
5269
|
className: `lax-spinner-status-part${part.className ? ` ${part.className}` : ""}`,
|
|
@@ -5225,11 +5304,11 @@ function shouldShowNextTaskLine(showTaskList, tasks, sessionStatus) {
|
|
|
5225
5304
|
}
|
|
5226
5305
|
|
|
5227
5306
|
// src/view/Spinner.tsx
|
|
5228
|
-
import { jsx as
|
|
5307
|
+
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
5229
5308
|
function MessageResponse({ children }) {
|
|
5230
|
-
return /* @__PURE__ */
|
|
5231
|
-
/* @__PURE__ */
|
|
5232
|
-
/* @__PURE__ */
|
|
5309
|
+
return /* @__PURE__ */ jsxs7("div", { className: "lax-message-response", children: [
|
|
5310
|
+
/* @__PURE__ */ jsx8("span", { className: "lax-message-response__marker", children: "\u23BF " }),
|
|
5311
|
+
/* @__PURE__ */ jsx8("span", { className: "lax-message-response__content", children })
|
|
5233
5312
|
] });
|
|
5234
5313
|
}
|
|
5235
5314
|
function shouldShowSpinnerTaskList(taskPhase, tasks, hasEverShownTaskList, contentCharCount = 0) {
|
|
@@ -5270,6 +5349,10 @@ function Spinner({
|
|
|
5270
5349
|
(callback) => store.subscribe(callback),
|
|
5271
5350
|
() => store.getState().tree.modelRetry
|
|
5272
5351
|
);
|
|
5352
|
+
const compactProgress = useSyncExternalStore(
|
|
5353
|
+
(callback) => store.subscribe(callback),
|
|
5354
|
+
() => store.getState().tree.compactProgress
|
|
5355
|
+
);
|
|
5273
5356
|
const taskListRevision = useSyncExternalStore(
|
|
5274
5357
|
(callback) => store.subscribe(callback),
|
|
5275
5358
|
() => {
|
|
@@ -5352,9 +5435,10 @@ function Spinner({
|
|
|
5352
5435
|
} else if (typeof thinkingStatus === "number") {
|
|
5353
5436
|
thinkingText = `thought for ${Math.max(1, Math.round(thinkingStatus / 1e3))}s`;
|
|
5354
5437
|
}
|
|
5355
|
-
return /* @__PURE__ */
|
|
5356
|
-
modelRetry ? /* @__PURE__ */
|
|
5357
|
-
/* @__PURE__ */
|
|
5438
|
+
return /* @__PURE__ */ jsxs7("div", { className: "lax-spinner-container", "data-testid": "lax-spinner-container", children: [
|
|
5439
|
+
modelRetry ? /* @__PURE__ */ jsx8(ModelRetryBlock, { state: modelRetry, verbose }) : null,
|
|
5440
|
+
compactProgress ? /* @__PURE__ */ jsx8(CompactProgressBlock, { state: compactProgress }) : null,
|
|
5441
|
+
/* @__PURE__ */ jsx8(
|
|
5358
5442
|
SpinnerAnimationRow,
|
|
5359
5443
|
{
|
|
5360
5444
|
mode: effectiveMode,
|
|
@@ -5369,19 +5453,19 @@ function Spinner({
|
|
|
5369
5453
|
timing
|
|
5370
5454
|
}
|
|
5371
5455
|
),
|
|
5372
|
-
showTaskList && /* @__PURE__ */
|
|
5373
|
-
nextTask && /* @__PURE__ */
|
|
5456
|
+
showTaskList && /* @__PURE__ */ jsx8(MessageResponse, { children: /* @__PURE__ */ jsx8(TaskList, { tasks, isStandalone: false }) }),
|
|
5457
|
+
nextTask && /* @__PURE__ */ jsx8(MessageResponse, { children: /* @__PURE__ */ jsx8("span", { className: "lax-spinner-next-line", children: formatNextTaskLineText(nextTask) }) })
|
|
5374
5458
|
] });
|
|
5375
5459
|
}
|
|
5376
5460
|
|
|
5377
5461
|
// src/view/TaskListFooter.tsx
|
|
5378
5462
|
import { useMemo as useMemo6, useState as useState8 } from "react";
|
|
5379
5463
|
import { useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
5380
|
-
import { jsx as
|
|
5464
|
+
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
5381
5465
|
function MessageResponse2({ children }) {
|
|
5382
|
-
return /* @__PURE__ */
|
|
5383
|
-
/* @__PURE__ */
|
|
5384
|
-
/* @__PURE__ */
|
|
5466
|
+
return /* @__PURE__ */ jsxs8("div", { className: "lax-message-response", children: [
|
|
5467
|
+
/* @__PURE__ */ jsx9("span", { className: "lax-message-response__marker", children: "\u23BF " }),
|
|
5468
|
+
/* @__PURE__ */ jsx9("span", { className: "lax-message-response__content", children })
|
|
5385
5469
|
] });
|
|
5386
5470
|
}
|
|
5387
5471
|
function formatTaskFooterLabel(tasks) {
|
|
@@ -5440,8 +5524,8 @@ function TaskListFooter() {
|
|
|
5440
5524
|
return null;
|
|
5441
5525
|
}
|
|
5442
5526
|
const label = formatTaskFooterLabel(tasks);
|
|
5443
|
-
return /* @__PURE__ */
|
|
5444
|
-
/* @__PURE__ */
|
|
5527
|
+
return /* @__PURE__ */ jsxs8("div", { className: "lax-task-list-footer", "data-testid": "lax-task-list-footer", children: [
|
|
5528
|
+
/* @__PURE__ */ jsxs8(
|
|
5445
5529
|
"button",
|
|
5446
5530
|
{
|
|
5447
5531
|
type: "button",
|
|
@@ -5451,17 +5535,17 @@ function TaskListFooter() {
|
|
|
5451
5535
|
onClick: () => setExpanded((v) => !v),
|
|
5452
5536
|
children: [
|
|
5453
5537
|
label,
|
|
5454
|
-
/* @__PURE__ */
|
|
5538
|
+
/* @__PURE__ */ jsx9("span", { className: "lax-task-list-footer__hint", children: expanded ? " \xB7 \u2191 to hide" : " \xB7 \u2193 to view" })
|
|
5455
5539
|
]
|
|
5456
5540
|
}
|
|
5457
5541
|
),
|
|
5458
|
-
expanded && /* @__PURE__ */
|
|
5542
|
+
expanded && /* @__PURE__ */ jsx9(MessageResponse2, { children: /* @__PURE__ */ jsx9(TaskList, { tasks }) })
|
|
5459
5543
|
] });
|
|
5460
5544
|
}
|
|
5461
5545
|
|
|
5462
5546
|
// src/view/GroupedToolCallRow.tsx
|
|
5463
5547
|
import { useCallback, useState as useState9 } from "react";
|
|
5464
|
-
import { jsx as
|
|
5548
|
+
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
5465
5549
|
var INITIALIZING = "Initializing\u2026";
|
|
5466
5550
|
function readGroupMeta(payload) {
|
|
5467
5551
|
const raw = payload.groupMeta;
|
|
@@ -5528,22 +5612,22 @@ function GroupedSubline({
|
|
|
5528
5612
|
const toggleExpanded = useCallback(() => {
|
|
5529
5613
|
setExpanded((prev) => !prev);
|
|
5530
5614
|
}, []);
|
|
5531
|
-
return /* @__PURE__ */
|
|
5615
|
+
return /* @__PURE__ */ jsxs9(
|
|
5532
5616
|
"div",
|
|
5533
5617
|
{
|
|
5534
5618
|
className: "lax-tool-group__item lax-tool-group__subline-block",
|
|
5535
5619
|
"data-group-index": index + 1,
|
|
5536
5620
|
"data-tool-call-id": callId,
|
|
5537
5621
|
children: [
|
|
5538
|
-
/* @__PURE__ */
|
|
5539
|
-
/* @__PURE__ */
|
|
5540
|
-
/* @__PURE__ */
|
|
5541
|
-
/* @__PURE__ */
|
|
5542
|
-
status ? /* @__PURE__ */
|
|
5622
|
+
/* @__PURE__ */ jsxs9("div", { className: "lax-tool-group__subline", children: [
|
|
5623
|
+
/* @__PURE__ */ jsx10("span", { className: "lax-tool-group__tree", "aria-hidden": true, children: treeChar }),
|
|
5624
|
+
/* @__PURE__ */ jsxs9("span", { className: "lax-tool-group__subline-flow", children: [
|
|
5625
|
+
/* @__PURE__ */ jsx10("span", { className: "lax-tool-group__subline-title", children: subTitle }),
|
|
5626
|
+
status ? /* @__PURE__ */ jsxs9("span", { className: "lax-tool-group__subline-status", children: [
|
|
5543
5627
|
" \xB7 ",
|
|
5544
5628
|
status
|
|
5545
5629
|
] }) : null,
|
|
5546
|
-
canExpand ? /* @__PURE__ */
|
|
5630
|
+
canExpand ? /* @__PURE__ */ jsx10(
|
|
5547
5631
|
"button",
|
|
5548
5632
|
{
|
|
5549
5633
|
type: "button",
|
|
@@ -5555,7 +5639,7 @@ function GroupedSubline({
|
|
|
5555
5639
|
) : null
|
|
5556
5640
|
] })
|
|
5557
5641
|
] }),
|
|
5558
|
-
canExpand && expanded ? /* @__PURE__ */
|
|
5642
|
+
canExpand && expanded ? /* @__PURE__ */ jsx10("div", { className: "lax-tool-group__transcript-panel", "data-testid": "lax-grouped-transcript", children: hasTranscriptLane ? /* @__PURE__ */ jsx10(SubagentTranscriptBlock, { entries: transcript, dataSource: "transcript-lane" }) : /* @__PURE__ */ jsx10(AgentProgressLines, { entries: progress, mode: "full" }) }) : null
|
|
5559
5643
|
]
|
|
5560
5644
|
}
|
|
5561
5645
|
);
|
|
@@ -5569,8 +5653,8 @@ function GroupedToolCallRow({ payload }) {
|
|
|
5569
5653
|
const anyPending = Array.isArray(payload.pendingCallIds) && payload.pendingCallIds.length > 0;
|
|
5570
5654
|
const anyError = Array.isArray(payload.erroredCallIds) && payload.erroredCallIds.length > 0;
|
|
5571
5655
|
const enableTranscript = toolUses.length >= 2;
|
|
5572
|
-
return /* @__PURE__ */
|
|
5573
|
-
/* @__PURE__ */
|
|
5656
|
+
return /* @__PURE__ */ jsxs9("div", { className: "lax-tool-group", "data-tool-name": toolName, "data-kind": "grouped_tool_use", children: [
|
|
5657
|
+
/* @__PURE__ */ jsxs9(
|
|
5574
5658
|
"div",
|
|
5575
5659
|
{
|
|
5576
5660
|
className: [
|
|
@@ -5579,16 +5663,16 @@ function GroupedToolCallRow({ payload }) {
|
|
|
5579
5663
|
anyError ? "lax-tool-group__header--error" : ""
|
|
5580
5664
|
].filter(Boolean).join(" "),
|
|
5581
5665
|
children: [
|
|
5582
|
-
anyPending && /* @__PURE__ */
|
|
5583
|
-
/* @__PURE__ */
|
|
5666
|
+
anyPending && /* @__PURE__ */ jsx10("span", { className: "lax-tool-group__dot", "aria-hidden": true, children: "\u25CF" }),
|
|
5667
|
+
/* @__PURE__ */ jsx10("span", { className: "lax-tool-group__label", children: title })
|
|
5584
5668
|
]
|
|
5585
5669
|
}
|
|
5586
5670
|
),
|
|
5587
|
-
/* @__PURE__ */
|
|
5671
|
+
/* @__PURE__ */ jsx10("div", { className: "lax-tool-group__items", children: toolUses.map((entry, index) => {
|
|
5588
5672
|
const callId = String(entry.tool_call_id ?? "");
|
|
5589
5673
|
const isLast = index === toolUses.length - 1;
|
|
5590
5674
|
const treeChar = isLast ? "\u2514\u2500" : "\u251C\u2500";
|
|
5591
|
-
return /* @__PURE__ */
|
|
5675
|
+
return /* @__PURE__ */ jsx10(
|
|
5592
5676
|
GroupedSubline,
|
|
5593
5677
|
{
|
|
5594
5678
|
callId,
|
|
@@ -5606,7 +5690,7 @@ function GroupedToolCallRow({ payload }) {
|
|
|
5606
5690
|
}
|
|
5607
5691
|
|
|
5608
5692
|
// src/view/nodes/ThinkingSummaryNode.tsx
|
|
5609
|
-
import { jsx as
|
|
5693
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
5610
5694
|
function formatThoughtDuration(seconds) {
|
|
5611
5695
|
const rounded = Math.max(1, Math.round(seconds));
|
|
5612
5696
|
return `${rounded}s`;
|
|
@@ -5631,29 +5715,29 @@ function ThinkingSummary({ node }) {
|
|
|
5631
5715
|
const viewOptions = useSessionViewOptions();
|
|
5632
5716
|
const showToolDetail = shouldShowReasoningInTimeline(viewOptions);
|
|
5633
5717
|
const toolText = showToolDetail ? formatToolCounts(node) : null;
|
|
5634
|
-
return /* @__PURE__ */
|
|
5718
|
+
return /* @__PURE__ */ jsxs10(
|
|
5635
5719
|
"div",
|
|
5636
5720
|
{
|
|
5637
5721
|
className: "lax-thought-summary",
|
|
5638
5722
|
"data-kind": "thinking_summary",
|
|
5639
5723
|
"data-round-id": node.roundId,
|
|
5640
5724
|
children: [
|
|
5641
|
-
/* @__PURE__ */
|
|
5725
|
+
/* @__PURE__ */ jsxs10("span", { className: "lax-thought-summary__text", children: [
|
|
5642
5726
|
"Thought for ",
|
|
5643
5727
|
formatThoughtDuration(node.elapsedSeconds)
|
|
5644
5728
|
] }),
|
|
5645
|
-
toolText ? /* @__PURE__ */
|
|
5729
|
+
toolText ? /* @__PURE__ */ jsxs10("span", { className: "lax-thought-summary__tools", children: [
|
|
5646
5730
|
" \xB7 ",
|
|
5647
5731
|
toolText
|
|
5648
5732
|
] }) : null,
|
|
5649
|
-
!showToolDetail ? /* @__PURE__ */
|
|
5733
|
+
!showToolDetail ? /* @__PURE__ */ jsx11("span", { className: "lax-thought-summary__hint", children: " (ctrl+o to expand)" }) : null
|
|
5650
5734
|
]
|
|
5651
5735
|
}
|
|
5652
5736
|
);
|
|
5653
5737
|
}
|
|
5654
5738
|
|
|
5655
5739
|
// src/view/projectedTimelineRender.tsx
|
|
5656
|
-
import { jsx as
|
|
5740
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
5657
5741
|
function zeroToolCounts2() {
|
|
5658
5742
|
return {
|
|
5659
5743
|
searchCount: 0,
|
|
@@ -5681,39 +5765,39 @@ function ThinkingSummaryWrapper({ entry }) {
|
|
|
5681
5765
|
isExpanded: Boolean(payload.isExpanded ?? false),
|
|
5682
5766
|
startedAt: Number(payload.startedAt ?? Date.now())
|
|
5683
5767
|
};
|
|
5684
|
-
return /* @__PURE__ */
|
|
5768
|
+
return /* @__PURE__ */ jsx12("div", { className: "lax-timeline__item", "data-kind": "thinking_summary", children: /* @__PURE__ */ jsx12(ThinkingSummary, { node }) });
|
|
5685
5769
|
}
|
|
5686
5770
|
function renderProjectedTimelineItem(item, registry) {
|
|
5687
5771
|
const { key, entry } = item;
|
|
5688
5772
|
if (entry.kind === "thinking_summary") {
|
|
5689
|
-
return /* @__PURE__ */
|
|
5773
|
+
return /* @__PURE__ */ jsx12(ThinkingSummaryWrapper, { entry }, key);
|
|
5690
5774
|
}
|
|
5691
5775
|
if (entry.kind === "collapsed_explore") {
|
|
5692
|
-
return /* @__PURE__ */
|
|
5776
|
+
return /* @__PURE__ */ jsx12("div", { className: "lax-timeline__item", "data-kind": "collapsed_explore", children: /* @__PURE__ */ jsx12(CollapsedExploreNode, { entry, registry }) }, key);
|
|
5693
5777
|
}
|
|
5694
5778
|
if (entry.kind === "grouped_tool_use") {
|
|
5695
|
-
return /* @__PURE__ */
|
|
5779
|
+
return /* @__PURE__ */ jsx12("div", { className: "lax-timeline__item", "data-kind": "grouped_tool_use", children: /* @__PURE__ */ jsx12(GroupedToolCallRow, { payload: entry.payload }) }, key);
|
|
5696
5780
|
}
|
|
5697
5781
|
if (entry.kind === "system_summary") {
|
|
5698
5782
|
const summary = String(entry.payload.summaryText ?? entry.payload.summary_text ?? "");
|
|
5699
|
-
return /* @__PURE__ */
|
|
5783
|
+
return /* @__PURE__ */ jsx12("div", { className: "lax-timeline__item", "data-kind": "system_summary", children: /* @__PURE__ */ jsx12(SystemSummaryNode, { summaryText: summary }) }, key);
|
|
5700
5784
|
}
|
|
5701
5785
|
const nodeId = entry.sourceNodeIds[0];
|
|
5702
5786
|
if (!nodeId) return null;
|
|
5703
|
-
return /* @__PURE__ */
|
|
5787
|
+
return /* @__PURE__ */ jsx12(TimelineItem, { nodeId, registry }, key);
|
|
5704
5788
|
}
|
|
5705
5789
|
|
|
5706
5790
|
// src/view/TimelineEntries.tsx
|
|
5707
|
-
import { Fragment as Fragment2, jsx as
|
|
5791
|
+
import { Fragment as Fragment2, jsx as jsx13 } from "react/jsx-runtime";
|
|
5708
5792
|
function TimelineEntries({ registry }) {
|
|
5709
5793
|
const projectedItems = useProjectedTimeline();
|
|
5710
|
-
return /* @__PURE__ */
|
|
5794
|
+
return /* @__PURE__ */ jsx13(Fragment2, { children: projectedItems.map((item) => renderProjectedTimelineItem(item, registry)) });
|
|
5711
5795
|
}
|
|
5712
5796
|
|
|
5713
5797
|
// src/view/Timeline.tsx
|
|
5714
5798
|
import { useStore as useStore6 } from "zustand";
|
|
5715
5799
|
import { useShallow as useShallow5 } from "zustand/shallow";
|
|
5716
|
-
import { jsx as
|
|
5800
|
+
import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
5717
5801
|
function useContentCharCount() {
|
|
5718
5802
|
const store = useSessionStoreApi();
|
|
5719
5803
|
return useStore6(
|
|
@@ -5735,9 +5819,9 @@ function Timeline({ showTaskListFooter = true }) {
|
|
|
5735
5819
|
const { verbose } = useSessionViewOptions();
|
|
5736
5820
|
const { startedAt } = useStore6(store, (s) => s.tree.meta);
|
|
5737
5821
|
const contentCharCount = useContentCharCount();
|
|
5738
|
-
return /* @__PURE__ */
|
|
5739
|
-
/* @__PURE__ */
|
|
5740
|
-
/* @__PURE__ */
|
|
5822
|
+
return /* @__PURE__ */ jsxs11("div", { className: "lax-timeline", "data-testid": "lax-timeline", children: [
|
|
5823
|
+
/* @__PURE__ */ jsx14(TimelineEntries, { registry }),
|
|
5824
|
+
/* @__PURE__ */ jsx14(
|
|
5741
5825
|
Spinner,
|
|
5742
5826
|
{
|
|
5743
5827
|
startedAt,
|
|
@@ -5745,7 +5829,7 @@ function Timeline({ showTaskListFooter = true }) {
|
|
|
5745
5829
|
verbose
|
|
5746
5830
|
}
|
|
5747
5831
|
),
|
|
5748
|
-
showTaskListFooter ? /* @__PURE__ */
|
|
5832
|
+
showTaskListFooter ? /* @__PURE__ */ jsx14(TaskListFooter, {}) : null
|
|
5749
5833
|
] });
|
|
5750
5834
|
}
|
|
5751
5835
|
|
|
@@ -5798,7 +5882,7 @@ function estimateProjectedEntrySize(entry, fallback = DEFAULT_ESTIMATE_SIZE) {
|
|
|
5798
5882
|
import { useRef as useRef7 } from "react";
|
|
5799
5883
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
5800
5884
|
import { useStore as useStore7 } from "zustand";
|
|
5801
|
-
import { jsx as
|
|
5885
|
+
import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
5802
5886
|
var DEFAULT_VIRTUALIZE_THRESHOLD = 500;
|
|
5803
5887
|
function useContentCharCount2() {
|
|
5804
5888
|
const store = useSessionStoreApi();
|
|
@@ -5832,14 +5916,14 @@ function VirtualTimeline({
|
|
|
5832
5916
|
},
|
|
5833
5917
|
overscan: 5
|
|
5834
5918
|
});
|
|
5835
|
-
return /* @__PURE__ */
|
|
5919
|
+
return /* @__PURE__ */ jsxs12(
|
|
5836
5920
|
"div",
|
|
5837
5921
|
{
|
|
5838
5922
|
ref: parentRef,
|
|
5839
5923
|
className: "lax-virtual-timeline",
|
|
5840
5924
|
"data-testid": "lax-virtual-timeline",
|
|
5841
5925
|
children: [
|
|
5842
|
-
/* @__PURE__ */
|
|
5926
|
+
/* @__PURE__ */ jsx15(
|
|
5843
5927
|
"div",
|
|
5844
5928
|
{
|
|
5845
5929
|
className: "lax-virtual-timeline__inner",
|
|
@@ -5851,7 +5935,7 @@ function VirtualTimeline({
|
|
|
5851
5935
|
children: virtualizer.getVirtualItems().map((virtualRow) => {
|
|
5852
5936
|
const item = items[virtualRow.index];
|
|
5853
5937
|
if (!item) return null;
|
|
5854
|
-
return /* @__PURE__ */
|
|
5938
|
+
return /* @__PURE__ */ jsx15(
|
|
5855
5939
|
"div",
|
|
5856
5940
|
{
|
|
5857
5941
|
className: "lax-virtual-timeline__item lax-timeline__item",
|
|
@@ -5872,7 +5956,7 @@ function VirtualTimeline({
|
|
|
5872
5956
|
})
|
|
5873
5957
|
}
|
|
5874
5958
|
),
|
|
5875
|
-
/* @__PURE__ */
|
|
5959
|
+
/* @__PURE__ */ jsx15(
|
|
5876
5960
|
Spinner,
|
|
5877
5961
|
{
|
|
5878
5962
|
startedAt,
|
|
@@ -5880,14 +5964,14 @@ function VirtualTimeline({
|
|
|
5880
5964
|
verbose
|
|
5881
5965
|
}
|
|
5882
5966
|
),
|
|
5883
|
-
showTaskListFooter ? /* @__PURE__ */
|
|
5967
|
+
showTaskListFooter ? /* @__PURE__ */ jsx15(TaskListFooter, {}) : null
|
|
5884
5968
|
]
|
|
5885
5969
|
}
|
|
5886
5970
|
);
|
|
5887
5971
|
}
|
|
5888
5972
|
|
|
5889
5973
|
// src/view/SessionTimeline.tsx
|
|
5890
|
-
import { jsx as
|
|
5974
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
5891
5975
|
function SessionTimeline({
|
|
5892
5976
|
virtualized = false,
|
|
5893
5977
|
virtualizeThreshold = DEFAULT_VIRTUALIZE_THRESHOLD,
|
|
@@ -5896,12 +5980,12 @@ function SessionTimeline({
|
|
|
5896
5980
|
}) {
|
|
5897
5981
|
const ids = useTimeline();
|
|
5898
5982
|
if (groupParallelTools) {
|
|
5899
|
-
return /* @__PURE__ */
|
|
5983
|
+
return /* @__PURE__ */ jsx16(Timeline, { showTaskListFooter });
|
|
5900
5984
|
}
|
|
5901
5985
|
if (virtualized && ids.length > virtualizeThreshold) {
|
|
5902
|
-
return /* @__PURE__ */
|
|
5986
|
+
return /* @__PURE__ */ jsx16(VirtualTimeline, { showTaskListFooter });
|
|
5903
5987
|
}
|
|
5904
|
-
return /* @__PURE__ */
|
|
5988
|
+
return /* @__PURE__ */ jsx16(Timeline, { showTaskListFooter });
|
|
5905
5989
|
}
|
|
5906
5990
|
|
|
5907
5991
|
export {
|
|
@@ -5997,4 +6081,4 @@ export {
|
|
|
5997
6081
|
VirtualTimeline,
|
|
5998
6082
|
SessionTimeline
|
|
5999
6083
|
};
|
|
6000
|
-
//# sourceMappingURL=chunk-
|
|
6084
|
+
//# sourceMappingURL=chunk-XEIQBTD2.js.map
|