@lvce-editor/chat-debug-view 4.0.0 → 4.1.0
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/chatDebugViewWorkerMain.js +182 -88
- package/package.json +1 -1
|
@@ -1071,6 +1071,94 @@ const diff2 = uid => {
|
|
|
1071
1071
|
return diff(oldState, newState);
|
|
1072
1072
|
};
|
|
1073
1073
|
|
|
1074
|
+
const parseSelectedEventIndex$1 = value => {
|
|
1075
|
+
const parsed = Number.parseInt(value, 10);
|
|
1076
|
+
if (Number.isNaN(parsed) || parsed < 0) {
|
|
1077
|
+
return null;
|
|
1078
|
+
}
|
|
1079
|
+
return parsed;
|
|
1080
|
+
};
|
|
1081
|
+
const handleEventRowClick = (state, value) => {
|
|
1082
|
+
const selectedEventIndex = parseSelectedEventIndex$1(value);
|
|
1083
|
+
if (selectedEventIndex === null) {
|
|
1084
|
+
return state;
|
|
1085
|
+
}
|
|
1086
|
+
return {
|
|
1087
|
+
...state,
|
|
1088
|
+
selectedEventIndex
|
|
1089
|
+
};
|
|
1090
|
+
};
|
|
1091
|
+
|
|
1092
|
+
const startedEventType = 'tool-execution-started';
|
|
1093
|
+
const finishedEventType = 'tool-execution-finished';
|
|
1094
|
+
const mergedEventType = 'tool-execution';
|
|
1095
|
+
const eventStableIds = new WeakMap();
|
|
1096
|
+
let nextStableEventId = 1;
|
|
1097
|
+
const getOrCreateStableEventId = event => {
|
|
1098
|
+
const existingStableEventId = eventStableIds.get(event);
|
|
1099
|
+
if (existingStableEventId) {
|
|
1100
|
+
return existingStableEventId;
|
|
1101
|
+
}
|
|
1102
|
+
const stableEventId = `event-${nextStableEventId++}`;
|
|
1103
|
+
eventStableIds.set(event, stableEventId);
|
|
1104
|
+
return stableEventId;
|
|
1105
|
+
};
|
|
1106
|
+
const setStableEventId = (event, stableEventId) => {
|
|
1107
|
+
eventStableIds.set(event, stableEventId);
|
|
1108
|
+
};
|
|
1109
|
+
const getStartedTimestamp = event => {
|
|
1110
|
+
return event.started ?? event.startTime ?? event.startTimestamp ?? event.timestamp;
|
|
1111
|
+
};
|
|
1112
|
+
const getEndedTimestamp = event => {
|
|
1113
|
+
return event.ended ?? event.endTime ?? event.endTimestamp ?? event.timestamp;
|
|
1114
|
+
};
|
|
1115
|
+
const isToolExecutionStartedEvent = event => {
|
|
1116
|
+
return event.type === startedEventType;
|
|
1117
|
+
};
|
|
1118
|
+
const isToolExecutionFinishedEvent = event => {
|
|
1119
|
+
return event.type === finishedEventType;
|
|
1120
|
+
};
|
|
1121
|
+
const hasMatchingToolName = (startedEvent, finishedEvent) => {
|
|
1122
|
+
if (typeof startedEvent.toolName === 'string' && typeof finishedEvent.toolName === 'string') {
|
|
1123
|
+
return startedEvent.toolName === finishedEvent.toolName;
|
|
1124
|
+
}
|
|
1125
|
+
return true;
|
|
1126
|
+
};
|
|
1127
|
+
const isMatchingToolExecutionPair = (startedEvent, finishedEvent) => {
|
|
1128
|
+
return startedEvent.sessionId === finishedEvent.sessionId && hasMatchingToolName(startedEvent, finishedEvent);
|
|
1129
|
+
};
|
|
1130
|
+
const mergeToolExecutionEvents = (startedEvent, finishedEvent) => {
|
|
1131
|
+
const mergedEvent = {
|
|
1132
|
+
...startedEvent,
|
|
1133
|
+
...finishedEvent,
|
|
1134
|
+
ended: getEndedTimestamp(finishedEvent),
|
|
1135
|
+
started: getStartedTimestamp(startedEvent),
|
|
1136
|
+
type: mergedEventType
|
|
1137
|
+
};
|
|
1138
|
+
const stableEventId = `${getOrCreateStableEventId(startedEvent)}:${getOrCreateStableEventId(finishedEvent)}`;
|
|
1139
|
+
setStableEventId(mergedEvent, stableEventId);
|
|
1140
|
+
return mergedEvent;
|
|
1141
|
+
};
|
|
1142
|
+
const getStableEventId = event => {
|
|
1143
|
+
return getOrCreateStableEventId(event);
|
|
1144
|
+
};
|
|
1145
|
+
const collapseToolExecutionEvents = events => {
|
|
1146
|
+
const collapsedEvents = [];
|
|
1147
|
+
for (let i = 0; i < events.length; i++) {
|
|
1148
|
+
const event = events[i];
|
|
1149
|
+
if (isToolExecutionStartedEvent(event)) {
|
|
1150
|
+
const nextEvent = events[i + 1];
|
|
1151
|
+
if (nextEvent && isToolExecutionFinishedEvent(nextEvent) && isMatchingToolExecutionPair(event, nextEvent)) {
|
|
1152
|
+
collapsedEvents.push(mergeToolExecutionEvents(event, nextEvent));
|
|
1153
|
+
i++;
|
|
1154
|
+
continue;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
collapsedEvents.push(event);
|
|
1158
|
+
}
|
|
1159
|
+
return collapsedEvents;
|
|
1160
|
+
};
|
|
1161
|
+
|
|
1074
1162
|
const getBoolean = value => {
|
|
1075
1163
|
return value === true || value === 'true' || value === 'on' || value === '1';
|
|
1076
1164
|
};
|
|
@@ -1094,7 +1182,7 @@ const parseFilterValue = filterValue => {
|
|
|
1094
1182
|
};
|
|
1095
1183
|
};
|
|
1096
1184
|
|
|
1097
|
-
const toolEventTypePrefix = 'tool-execution
|
|
1185
|
+
const toolEventTypePrefix = 'tool-execution';
|
|
1098
1186
|
const isToolEvent = event => {
|
|
1099
1187
|
return event.type.startsWith(toolEventTypePrefix);
|
|
1100
1188
|
};
|
|
@@ -1124,7 +1212,7 @@ const matchesEventCategoryFilter = (event, eventCategoryFilter) => {
|
|
|
1124
1212
|
};
|
|
1125
1213
|
const getVisibleEvents = (events, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents) => {
|
|
1126
1214
|
return events.filter(event => {
|
|
1127
|
-
if (!showInputEvents &&
|
|
1215
|
+
if (!showInputEvents && event.type === 'handle-input') {
|
|
1128
1216
|
return false;
|
|
1129
1217
|
}
|
|
1130
1218
|
if (!showResponsePartEvents && event.type === 'sse-response-part') {
|
|
@@ -1142,9 +1230,10 @@ const getVisibleEvents = (events, showInputEvents, showResponsePartEvents, showE
|
|
|
1142
1230
|
};
|
|
1143
1231
|
const getFilteredEvents = (events, filterValue, eventCategoryFilter, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents) => {
|
|
1144
1232
|
const visibleEvents = getVisibleEvents(events, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents);
|
|
1233
|
+
const collapsedEvents = collapseToolExecutionEvents(visibleEvents);
|
|
1145
1234
|
const parsedFilter = parseFilterValue(filterValue);
|
|
1146
1235
|
const activeEventCategoryFilter = parsedFilter.eventCategoryFilter === All ? eventCategoryFilter : parsedFilter.eventCategoryFilter;
|
|
1147
|
-
const filteredByCategory =
|
|
1236
|
+
const filteredByCategory = collapsedEvents.filter(event => matchesEventCategoryFilter(event, activeEventCategoryFilter));
|
|
1148
1237
|
const {
|
|
1149
1238
|
filterText
|
|
1150
1239
|
} = parsedFilter;
|
|
@@ -1313,6 +1402,10 @@ const parseTimelineRangePreset = value => {
|
|
|
1313
1402
|
timelineStartSeconds
|
|
1314
1403
|
};
|
|
1315
1404
|
};
|
|
1405
|
+
const getEventIndexByStableId = (events, event) => {
|
|
1406
|
+
const stableEventId = getStableEventId(event);
|
|
1407
|
+
return events.findIndex(candidate => getStableEventId(candidate) === stableEventId);
|
|
1408
|
+
};
|
|
1316
1409
|
const getSelectedEventIndex = state => {
|
|
1317
1410
|
const {
|
|
1318
1411
|
selectedEventIndex
|
|
@@ -1325,7 +1418,7 @@ const getSelectedEventIndex = state => {
|
|
|
1325
1418
|
if (!selectedEvent) {
|
|
1326
1419
|
return null;
|
|
1327
1420
|
}
|
|
1328
|
-
const newIndex = filteredEvents
|
|
1421
|
+
const newIndex = getEventIndexByStableId(filteredEvents, selectedEvent);
|
|
1329
1422
|
if (newIndex === -1) {
|
|
1330
1423
|
return null;
|
|
1331
1424
|
}
|
|
@@ -1344,7 +1437,7 @@ const getPreservedSelectedEventIndex = (oldState, newState) => {
|
|
|
1344
1437
|
return null;
|
|
1345
1438
|
}
|
|
1346
1439
|
const newFilteredEvents = getCurrentEvents(newState);
|
|
1347
|
-
const newIndex = newFilteredEvents
|
|
1440
|
+
const newIndex = getEventIndexByStableId(newFilteredEvents, selectedEvent);
|
|
1348
1441
|
if (newIndex === -1) {
|
|
1349
1442
|
return null;
|
|
1350
1443
|
}
|
|
@@ -1904,8 +1997,8 @@ const getCss = () => {
|
|
|
1904
1997
|
return `
|
|
1905
1998
|
.ChatDebugView {
|
|
1906
1999
|
padding: 8px;
|
|
1907
|
-
display:
|
|
1908
|
-
|
|
2000
|
+
display: flex;
|
|
2001
|
+
flex-direction: column;
|
|
1909
2002
|
height: 100%;
|
|
1910
2003
|
box-sizing: border-box;
|
|
1911
2004
|
gap: 8px;
|
|
@@ -1939,20 +2032,16 @@ const getCss = () => {
|
|
|
1939
2032
|
gap: 4px;
|
|
1940
2033
|
}
|
|
1941
2034
|
|
|
1942
|
-
.
|
|
1943
|
-
|
|
1944
|
-
|
|
2035
|
+
.ChatDebugViewQuickFilterPill {
|
|
2036
|
+
display: inline-flex;
|
|
2037
|
+
align-items: center;
|
|
2038
|
+
justify-content: center;
|
|
1945
2039
|
}
|
|
1946
2040
|
|
|
2041
|
+
|
|
1947
2042
|
.ChatDebugViewQuickFilters {
|
|
1948
2043
|
display: flex;
|
|
1949
2044
|
gap: 8px;
|
|
1950
|
-
flex-wrap: wrap;
|
|
1951
|
-
}
|
|
1952
|
-
|
|
1953
|
-
.ChatDebugViewQuickFilterPill {
|
|
1954
|
-
display: inline-flex;
|
|
1955
|
-
align-items: center;
|
|
1956
2045
|
justify-content: center;
|
|
1957
2046
|
min-height: 28px;
|
|
1958
2047
|
padding: 0 12px;
|
|
@@ -1977,8 +2066,8 @@ const getCss = () => {
|
|
|
1977
2066
|
}
|
|
1978
2067
|
|
|
1979
2068
|
.ChatDebugViewEvents {
|
|
1980
|
-
display:
|
|
1981
|
-
|
|
2069
|
+
display: flex;
|
|
2070
|
+
flex-direction: column;
|
|
1982
2071
|
overflow: auto;
|
|
1983
2072
|
min-width: 0;
|
|
1984
2073
|
min-height: 0;
|
|
@@ -1987,30 +2076,49 @@ const getCss = () => {
|
|
|
1987
2076
|
}
|
|
1988
2077
|
|
|
1989
2078
|
.ChatDebugViewEvents--timeline {
|
|
1990
|
-
|
|
2079
|
+
gap: 0;
|
|
1991
2080
|
}
|
|
1992
2081
|
|
|
1993
2082
|
.ChatDebugView--devtools .ChatDebugViewEvents {
|
|
1994
2083
|
border: 1px solid var(--vscode-editorWidget-border, #454545);
|
|
1995
2084
|
border-radius: 6px;
|
|
1996
2085
|
margin-bottom: 0;
|
|
2086
|
+
overflow: hidden;
|
|
1997
2087
|
}
|
|
1998
2088
|
|
|
1999
2089
|
.ChatDebugViewEventsFullWidth {
|
|
2000
|
-
|
|
2090
|
+
flex: 1 1 100%;
|
|
2001
2091
|
}
|
|
2002
2092
|
|
|
2003
2093
|
.ChatDebugViewDevtoolsMain {
|
|
2004
|
-
display:
|
|
2005
|
-
|
|
2094
|
+
display: flex;
|
|
2095
|
+
flex-wrap: wrap;
|
|
2096
|
+
align-items: stretch;
|
|
2006
2097
|
gap: 8px;
|
|
2007
2098
|
min-width: 0;
|
|
2008
2099
|
min-height: 0;
|
|
2009
2100
|
overflow: hidden;
|
|
2010
2101
|
}
|
|
2011
2102
|
|
|
2103
|
+
.ChatDebugViewDevtoolsMain > .ChatDebugViewEvents {
|
|
2104
|
+
flex: 1 1 480px;
|
|
2105
|
+
min-width: 0;
|
|
2106
|
+
}
|
|
2107
|
+
|
|
2108
|
+
.ChatDebugViewDevtoolsMain > .ChatDebugViewDetails {
|
|
2109
|
+
flex: 0 0 clamp(320px, 32vw, 420px);
|
|
2110
|
+
}
|
|
2111
|
+
|
|
2112
|
+
.ChatDebugViewTable {
|
|
2113
|
+
display: flex;
|
|
2114
|
+
flex-direction: column;
|
|
2115
|
+
min-height: 0;
|
|
2116
|
+
flex: 1 1 auto;
|
|
2117
|
+
}
|
|
2118
|
+
|
|
2012
2119
|
.ChatDebugViewTimeline {
|
|
2013
|
-
display:
|
|
2120
|
+
display: flex;
|
|
2121
|
+
flex-direction: column;
|
|
2014
2122
|
gap: 8px;
|
|
2015
2123
|
padding: 10px;
|
|
2016
2124
|
border-bottom: 1px solid var(--vscode-editorWidget-border, #454545);
|
|
@@ -2042,17 +2150,6 @@ const getCss = () => {
|
|
|
2042
2150
|
flex-wrap: wrap;
|
|
2043
2151
|
}
|
|
2044
2152
|
|
|
2045
|
-
.ChatDebugViewTimelineField {
|
|
2046
|
-
display: inline-flex;
|
|
2047
|
-
align-items: center;
|
|
2048
|
-
gap: 6px;
|
|
2049
|
-
font-size: 12px;
|
|
2050
|
-
}
|
|
2051
|
-
|
|
2052
|
-
.ChatDebugViewTimelineInput {
|
|
2053
|
-
width: 84px;
|
|
2054
|
-
}
|
|
2055
|
-
|
|
2056
2153
|
.ChatDebugViewTimelineReset {
|
|
2057
2154
|
display: inline-flex;
|
|
2058
2155
|
align-items: center;
|
|
@@ -2072,8 +2169,7 @@ const getCss = () => {
|
|
|
2072
2169
|
}
|
|
2073
2170
|
|
|
2074
2171
|
.ChatDebugViewTimelineBuckets {
|
|
2075
|
-
display:
|
|
2076
|
-
grid-template-columns: repeat(auto-fit, minmax(10px, 1fr));
|
|
2172
|
+
display: flex;
|
|
2077
2173
|
align-items: end;
|
|
2078
2174
|
gap: 4px;
|
|
2079
2175
|
min-height: 60px;
|
|
@@ -2082,6 +2178,8 @@ const getCss = () => {
|
|
|
2082
2178
|
.ChatDebugViewTimelineBucket {
|
|
2083
2179
|
display: flex;
|
|
2084
2180
|
align-items: stretch;
|
|
2181
|
+
flex: 1 1 10px;
|
|
2182
|
+
min-width: 10px;
|
|
2085
2183
|
min-height: 60px;
|
|
2086
2184
|
cursor: pointer;
|
|
2087
2185
|
}
|
|
@@ -2124,8 +2222,7 @@ const getCss = () => {
|
|
|
2124
2222
|
|
|
2125
2223
|
.ChatDebugViewTableHeader,
|
|
2126
2224
|
.ChatDebugViewEventRow {
|
|
2127
|
-
display:
|
|
2128
|
-
grid-template-columns: minmax(140px, 1fr) minmax(180px, 1fr) minmax(180px, 1fr) 90px 64px;
|
|
2225
|
+
display: flex;
|
|
2129
2226
|
align-items: center;
|
|
2130
2227
|
gap: 8px;
|
|
2131
2228
|
}
|
|
@@ -2149,6 +2246,8 @@ const getCss = () => {
|
|
|
2149
2246
|
.ChatDebugViewTableBody {
|
|
2150
2247
|
overflow: auto;
|
|
2151
2248
|
min-height: 0;
|
|
2249
|
+
flex: 1 1 auto;
|
|
2250
|
+
contain: strict;
|
|
2152
2251
|
}
|
|
2153
2252
|
|
|
2154
2253
|
.ChatDebugViewEventRowLabel {
|
|
@@ -2181,13 +2280,26 @@ const getCss = () => {
|
|
|
2181
2280
|
overflow: hidden;
|
|
2182
2281
|
text-overflow: ellipsis;
|
|
2183
2282
|
white-space: nowrap;
|
|
2283
|
+
min-width: 0;
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
.ChatDebugViewCellType {
|
|
2287
|
+
flex: 1 1 140px;
|
|
2288
|
+
min-width: 0;
|
|
2289
|
+
}
|
|
2290
|
+
|
|
2291
|
+
.ChatDebugViewCellTime {
|
|
2292
|
+
flex: 1 1 180px;
|
|
2293
|
+
min-width: 0;
|
|
2184
2294
|
}
|
|
2185
2295
|
|
|
2186
2296
|
.ChatDebugViewCellDuration {
|
|
2297
|
+
flex: 0 0 90px;
|
|
2187
2298
|
text-align: right;
|
|
2188
2299
|
}
|
|
2189
2300
|
|
|
2190
2301
|
.ChatDebugViewCellStatus {
|
|
2302
|
+
flex: 0 0 64px;
|
|
2191
2303
|
text-align: right;
|
|
2192
2304
|
}
|
|
2193
2305
|
|
|
@@ -2197,8 +2309,9 @@ const getCss = () => {
|
|
|
2197
2309
|
overflow: hidden;
|
|
2198
2310
|
min-width: 0;
|
|
2199
2311
|
min-height: 0;
|
|
2200
|
-
display:
|
|
2201
|
-
|
|
2312
|
+
display: flex;
|
|
2313
|
+
flex-direction: column;
|
|
2314
|
+
contain: strict;
|
|
2202
2315
|
}
|
|
2203
2316
|
|
|
2204
2317
|
.ChatDebugViewDetailsTop {
|
|
@@ -2246,6 +2359,9 @@ const getCss = () => {
|
|
|
2246
2359
|
.ChatDebugViewDetailsBody {
|
|
2247
2360
|
overflow: auto;
|
|
2248
2361
|
padding: 8px;
|
|
2362
|
+
flex: 1 1 auto;
|
|
2363
|
+
min-height: 0;
|
|
2364
|
+
contain: strict;
|
|
2249
2365
|
}
|
|
2250
2366
|
|
|
2251
2367
|
.ChatDebugViewEvents::-webkit-scrollbar {
|
|
@@ -2644,6 +2760,7 @@ const diffTree = (oldNodes, newNodes) => {
|
|
|
2644
2760
|
const HandleInput = 4;
|
|
2645
2761
|
const HandleFilterInput = 5;
|
|
2646
2762
|
const HandleSimpleInput = 6;
|
|
2763
|
+
const HandleEventRowClick = 7;
|
|
2647
2764
|
|
|
2648
2765
|
const getDurationText = event => {
|
|
2649
2766
|
const explicitDuration = event.durationMs ?? event.duration;
|
|
@@ -2733,42 +2850,36 @@ const getDevtoolsRows = (events, selectedEventIndex) => {
|
|
|
2733
2850
|
for (let i = 0; i < events.length; i++) {
|
|
2734
2851
|
const event = events[i];
|
|
2735
2852
|
const isSelected = selectedEventIndex === i;
|
|
2853
|
+
const rowIndex = String(i);
|
|
2736
2854
|
rows.push({
|
|
2737
|
-
childCount: 2,
|
|
2738
|
-
className: `ChatDebugViewEventRowLabel${isSelected ? ' ChatDebugViewEventRowLabelSelected' : ''}`,
|
|
2739
|
-
type: Label
|
|
2740
|
-
}, {
|
|
2741
|
-
checked: isSelected,
|
|
2742
|
-
childCount: 0,
|
|
2743
|
-
className: 'ChatDebugViewEventRowInput',
|
|
2744
|
-
inputType: 'radio',
|
|
2745
|
-
name: SelectedEventIndex,
|
|
2746
|
-
onChange: HandleSimpleInput,
|
|
2747
|
-
type: Input,
|
|
2748
|
-
value: String(i)
|
|
2749
|
-
}, {
|
|
2750
2855
|
childCount: 5,
|
|
2751
2856
|
className: `ChatDebugViewEventRow${isSelected ? ' ChatDebugViewEventRowSelected' : ''}`,
|
|
2857
|
+
'data-index': rowIndex,
|
|
2752
2858
|
type: Div
|
|
2753
2859
|
}, {
|
|
2754
2860
|
childCount: 1,
|
|
2755
2861
|
className: 'ChatDebugViewCell ChatDebugViewCellType',
|
|
2862
|
+
'data-index': rowIndex,
|
|
2756
2863
|
type: Div
|
|
2757
2864
|
}, text(event.type), {
|
|
2758
2865
|
childCount: 1,
|
|
2759
|
-
className: 'ChatDebugViewCell',
|
|
2866
|
+
className: 'ChatDebugViewCell ChatDebugViewCellTime',
|
|
2867
|
+
'data-index': rowIndex,
|
|
2760
2868
|
type: Div
|
|
2761
2869
|
}, text(getStartText(event)), {
|
|
2762
2870
|
childCount: 1,
|
|
2763
|
-
className: 'ChatDebugViewCell',
|
|
2871
|
+
className: 'ChatDebugViewCell ChatDebugViewCellTime',
|
|
2872
|
+
'data-index': rowIndex,
|
|
2764
2873
|
type: Div
|
|
2765
2874
|
}, text(getEndText(event)), {
|
|
2766
2875
|
childCount: 1,
|
|
2767
2876
|
className: 'ChatDebugViewCell ChatDebugViewCellDuration',
|
|
2877
|
+
'data-index': rowIndex,
|
|
2768
2878
|
type: Div
|
|
2769
2879
|
}, text(getDurationText(event)), {
|
|
2770
2880
|
childCount: 1,
|
|
2771
2881
|
className: 'ChatDebugViewCell ChatDebugViewCellStatus',
|
|
2882
|
+
'data-index': rowIndex,
|
|
2772
2883
|
type: Div
|
|
2773
2884
|
}, text(getStatusText(event)));
|
|
2774
2885
|
}
|
|
@@ -2920,35 +3031,9 @@ const getTimelineNodes = (timelineEvents, timelineStartSeconds, timelineEndSecon
|
|
|
2920
3031
|
className: 'ChatDebugViewTimelineSummary',
|
|
2921
3032
|
type: Div
|
|
2922
3033
|
}, text(getTimelineSummary(timelineEvents, timelineStartSeconds, timelineEndSeconds)), {
|
|
2923
|
-
childCount:
|
|
3034
|
+
childCount: 1,
|
|
2924
3035
|
className: 'ChatDebugViewTimelineControls',
|
|
2925
3036
|
type: Div
|
|
2926
|
-
}, {
|
|
2927
|
-
childCount: 2,
|
|
2928
|
-
className: 'ChatDebugViewTimelineField',
|
|
2929
|
-
type: Label
|
|
2930
|
-
}, text('From'), {
|
|
2931
|
-
childCount: 0,
|
|
2932
|
-
className: 'InputBox ChatDebugViewTimelineInput',
|
|
2933
|
-
inputType: 'number',
|
|
2934
|
-
name: TimelineStartSeconds,
|
|
2935
|
-
onInput: HandleFilterInput,
|
|
2936
|
-
placeholder: '0',
|
|
2937
|
-
type: Input,
|
|
2938
|
-
value: timelineStartSeconds
|
|
2939
|
-
}, {
|
|
2940
|
-
childCount: 2,
|
|
2941
|
-
className: 'ChatDebugViewTimelineField',
|
|
2942
|
-
type: Label
|
|
2943
|
-
}, text('To'), {
|
|
2944
|
-
childCount: 0,
|
|
2945
|
-
className: 'InputBox ChatDebugViewTimelineInput',
|
|
2946
|
-
inputType: 'number',
|
|
2947
|
-
name: TimelineEndSeconds,
|
|
2948
|
-
onInput: HandleFilterInput,
|
|
2949
|
-
placeholder: formatTimelinePresetValue(timelineInfo.durationSeconds),
|
|
2950
|
-
type: Input,
|
|
2951
|
-
value: timelineEndSeconds
|
|
2952
3037
|
}, {
|
|
2953
3038
|
childCount: 2,
|
|
2954
3039
|
className: `ChatDebugViewTimelineReset${timelineInfo.hasSelection ? '' : ' ChatDebugViewTimelineResetSelected'}`,
|
|
@@ -3006,6 +3091,7 @@ const getDevtoolsDom = (events, selectedEventIndex, timelineEvents, timelineStar
|
|
|
3006
3091
|
const selectedEventNodes = selectedEvent ? getEventNode(selectedEvent) : [];
|
|
3007
3092
|
const hasSelectedEvent = selectedEventNodes.length > 0;
|
|
3008
3093
|
const eventsClassName = `${hasSelectedEvent ? 'ChatDebugViewEvents' : 'ChatDebugViewEvents ChatDebugViewEventsFullWidth'}${timelineNodes.length > 0 ? ' ChatDebugViewEvents--timeline' : ''}`;
|
|
3094
|
+
const eventsChildCount = timelineNodes.length > 0 ? 2 : 1;
|
|
3009
3095
|
const detailsNodes = hasSelectedEvent ? [{
|
|
3010
3096
|
childCount: 2,
|
|
3011
3097
|
className: 'ChatDebugViewDetails',
|
|
@@ -3036,10 +3122,14 @@ const getDevtoolsDom = (events, selectedEventIndex, timelineEvents, timelineStar
|
|
|
3036
3122
|
className: 'ChatDebugViewDevtoolsMain',
|
|
3037
3123
|
type: Div
|
|
3038
3124
|
}, {
|
|
3039
|
-
childCount:
|
|
3125
|
+
childCount: eventsChildCount,
|
|
3040
3126
|
className: eventsClassName,
|
|
3041
3127
|
type: Div
|
|
3042
3128
|
}, ...timelineNodes, {
|
|
3129
|
+
childCount: 2,
|
|
3130
|
+
className: 'ChatDebugViewTable',
|
|
3131
|
+
type: Div
|
|
3132
|
+
}, {
|
|
3043
3133
|
childCount: 5,
|
|
3044
3134
|
className: 'ChatDebugViewTableHeader',
|
|
3045
3135
|
type: Div
|
|
@@ -3049,11 +3139,11 @@ const getDevtoolsDom = (events, selectedEventIndex, timelineEvents, timelineStar
|
|
|
3049
3139
|
type: Div
|
|
3050
3140
|
}, text('Type'), {
|
|
3051
3141
|
childCount: 1,
|
|
3052
|
-
className: 'ChatDebugViewHeaderCell',
|
|
3142
|
+
className: 'ChatDebugViewHeaderCell ChatDebugViewCellTime',
|
|
3053
3143
|
type: Div
|
|
3054
3144
|
}, text('Started'), {
|
|
3055
3145
|
childCount: 1,
|
|
3056
|
-
className: 'ChatDebugViewHeaderCell',
|
|
3146
|
+
className: 'ChatDebugViewHeaderCell ChatDebugViewCellTime',
|
|
3057
3147
|
type: Div
|
|
3058
3148
|
}, text('Ended'), {
|
|
3059
3149
|
childCount: 1,
|
|
@@ -3066,6 +3156,7 @@ const getDevtoolsDom = (events, selectedEventIndex, timelineEvents, timelineStar
|
|
|
3066
3156
|
}, text('Status'), {
|
|
3067
3157
|
childCount: rowNodes.length === 0 ? 1 : rowNodes.length,
|
|
3068
3158
|
className: 'ChatDebugViewTableBody',
|
|
3159
|
+
onClick: HandleEventRowClick,
|
|
3069
3160
|
type: Div
|
|
3070
3161
|
}, ...rowNodes, ...detailsNodes];
|
|
3071
3162
|
};
|
|
@@ -3237,10 +3328,9 @@ const renderItems = (oldState, newState) => {
|
|
|
3237
3328
|
if (newState.initial) {
|
|
3238
3329
|
return [SetDom2, newState.uid, []];
|
|
3239
3330
|
}
|
|
3240
|
-
const
|
|
3241
|
-
const timelineEvents = getFilteredEvents(eventsWithIds, newState.filterValue, newState.eventCategoryFilter, newState.showInputEvents, newState.showResponsePartEvents, newState.showEventStreamFinishedEvents);
|
|
3331
|
+
const timelineEvents = getFilteredEvents(newState.events, newState.filterValue, newState.eventCategoryFilter, newState.showInputEvents, newState.showResponsePartEvents, newState.showEventStreamFinishedEvents);
|
|
3242
3332
|
const filteredEvents = filterEventsByTimelineRange(timelineEvents, newState.timelineStartSeconds, newState.timelineEndSeconds);
|
|
3243
|
-
const dom = getChatDebugViewDom(newState.errorMessage, newState.filterValue, newState.eventCategoryFilter, newState.showEventStreamFinishedEvents, newState.showInputEvents, newState.showResponsePartEvents, newState.useDevtoolsLayout, newState.selectedEventIndex, newState.timelineStartSeconds, newState.timelineEndSeconds, timelineEvents, filteredEvents);
|
|
3333
|
+
const dom = getChatDebugViewDom(newState.errorMessage, newState.filterValue, newState.eventCategoryFilter, newState.showEventStreamFinishedEvents, newState.showInputEvents, newState.showResponsePartEvents, newState.useDevtoolsLayout, newState.selectedEventIndex, newState.timelineStartSeconds, newState.timelineEndSeconds, withSessionEventIds(timelineEvents), withSessionEventIds(filteredEvents));
|
|
3244
3334
|
return [SetDom2, newState.uid, dom];
|
|
3245
3335
|
};
|
|
3246
3336
|
|
|
@@ -3287,6 +3377,9 @@ const render2 = (uid, diffResult) => {
|
|
|
3287
3377
|
|
|
3288
3378
|
const renderEventListeners = () => {
|
|
3289
3379
|
return [{
|
|
3380
|
+
name: HandleEventRowClick,
|
|
3381
|
+
params: ['handleEventRowClick', 'event.target.dataset.index']
|
|
3382
|
+
}, {
|
|
3290
3383
|
name: HandleFilterInput,
|
|
3291
3384
|
params: ['handleInput', TargetName, TargetValue]
|
|
3292
3385
|
}, {
|
|
@@ -3367,6 +3460,7 @@ const commandMap = {
|
|
|
3367
3460
|
'ChatDebug.create': create,
|
|
3368
3461
|
'ChatDebug.diff2': diff2,
|
|
3369
3462
|
'ChatDebug.getCommandIds': getCommandIds,
|
|
3463
|
+
'ChatDebug.handleEventRowClick': wrapCommand(handleEventRowClick),
|
|
3370
3464
|
'ChatDebug.handleInput': wrapCommand(handleInput),
|
|
3371
3465
|
'ChatDebug.loadContent': wrapCommand(loadContent),
|
|
3372
3466
|
'ChatDebug.loadContent2': wrapCommand(loadContent),
|