@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.
@@ -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 && (event.type === 'handle-input' || event.type === 'handle-submit')) {
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 = visibleEvents.filter(event => matchesEventCategoryFilter(event, activeEventCategoryFilter));
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.indexOf(selectedEvent);
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.indexOf(selectedEvent);
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: grid;
1908
- grid-template-rows: auto auto 1fr;
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
- .ChatDebugViewEventCount {
1943
- font-size: 12px;
1944
- opacity: 0.8;
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: grid;
1981
- grid-template-rows: auto minmax(0, 1fr);
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
- grid-template-rows: auto auto minmax(0, 1fr);
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
- grid-column: 1 / -1;
2090
+ flex: 1 1 100%;
2001
2091
  }
2002
2092
 
2003
2093
  .ChatDebugViewDevtoolsMain {
2004
- display: grid;
2005
- grid-template-columns: minmax(0, 1fr) minmax(320px, 420px);
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: grid;
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: grid;
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: grid;
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: grid;
2201
- grid-template-rows: auto 1fr;
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: 3,
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: timelineNodes.length > 0 ? 3 : 2,
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 eventsWithIds = withSessionEventIds(newState.events);
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),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/chat-debug-view",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "description": "Chat Debug View Worker",
5
5
  "repository": {
6
6
  "type": "git",