@lvce-editor/chat-debug-view 10.15.0 → 10.17.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.
@@ -2466,18 +2466,6 @@ const diff2 = uid => {
2466
2466
  return diff(oldState, newState);
2467
2467
  };
2468
2468
 
2469
- const getSelectedDetailTab = detailTabs => {
2470
- const selectedDetailTab = detailTabs.find(detailTab => detailTab.isSelected);
2471
- if (selectedDetailTab) {
2472
- return selectedDetailTab.name;
2473
- }
2474
- const responseTab = detailTabs.find(detailTab => detailTab.name === Response$1);
2475
- if (responseTab) {
2476
- return responseTab.name;
2477
- }
2478
- return detailTabs[0]?.name ?? Response$1;
2479
- };
2480
-
2481
2469
  const filterEventsByTimelineRange = (events, startValue, endValue) => {
2482
2470
  const eventsWithTime = getEventsWithTime(events);
2483
2471
  if (eventsWithTime.length === 0) {
@@ -2725,6 +2713,9 @@ const getFilteredEvents = (events, filterValue, eventCategoryFilters, showInputE
2725
2713
  };
2726
2714
 
2727
2715
  const getDurationText = event => {
2716
+ if (event.time) {
2717
+ return event.time;
2718
+ }
2728
2719
  const explicitDuration = event.durationMs ?? event.duration;
2729
2720
  if (typeof explicitDuration === 'number' && Number.isFinite(explicitDuration)) {
2730
2721
  return `${explicitDuration}ms`;
@@ -2879,15 +2870,38 @@ const sortEventsByTableColumn = (events, sortColumn, sortDescending) => {
2879
2870
  return sortableEvents.toSorted(compareEntries).map(item => item.event);
2880
2871
  };
2881
2872
 
2882
- const getCurrentEvents$2 = state => {
2873
+ const getCurrentEvents$1 = state => {
2883
2874
  const eventCategoryFilters = getSelectedEventCategoryFilters(state.categoryFilters);
2884
2875
  const filteredEvents = getFilteredEvents(state.events, state.filterValue, eventCategoryFilters, state.showInputEvents, state.showResponsePartEvents, state.showEventStreamFinishedEvents);
2885
2876
  const timelineEvents = filterEventsByTimelineRange(filteredEvents, state.timelineStartSeconds, state.timelineEndSeconds);
2886
2877
  return sortEventsByTableColumn(timelineEvents, state.sortColumn, state.sortDescending);
2887
2878
  };
2888
2879
 
2889
- const loadSelectedEvent = async (_databaseName, _dataBaseVersion, _eventStoreName, sessionId, _sessionIdIndexName, eventId, type) => {
2890
- return loadSelectedEvent$1(sessionId, eventId, type);
2880
+ const getCurrentEvents = state => getCurrentEvents$1(state);
2881
+
2882
+ const getSelectedDetailTab = detailTabs => {
2883
+ const selectedDetailTab = detailTabs.find(detailTab => detailTab.isSelected);
2884
+ if (selectedDetailTab) {
2885
+ return selectedDetailTab.name;
2886
+ }
2887
+ const responseTab = detailTabs.find(detailTab => detailTab.name === Response$1);
2888
+ if (responseTab) {
2889
+ return responseTab.name;
2890
+ }
2891
+ return detailTabs[0]?.name ?? Response$1;
2892
+ };
2893
+
2894
+ const loadSelectedEvent = async (_databaseName, _dataBaseVersion, _eventStoreName, sessionId, _sessionIdIndexName, eventId, type, endEventId) => {
2895
+ const raw = await loadSelectedEvent$1(sessionId, eventId, type);
2896
+ if (endEventId && endEventId !== -1) {
2897
+ const end = await loadSelectedEvent$1(sessionId, endEventId, type);
2898
+ // @ts-ignore
2899
+ return {
2900
+ ...raw,
2901
+ endValue: end
2902
+ };
2903
+ }
2904
+ return raw;
2891
2905
  };
2892
2906
 
2893
2907
  const mergeSelectedEventDetails = (selectedEvent, selectedEventDetails) => {
@@ -2977,7 +2991,7 @@ const getScrollBarOffset = (deltaY, maxDeltaY, tableBodyHeight, scrollBarHeight)
2977
2991
  return Math.round(deltaY / maxDeltaY * (tableBodyHeight - scrollBarHeight));
2978
2992
  };
2979
2993
  const applyVirtualTableState = state => {
2980
- const currentEvents = getCurrentEvents$2(state);
2994
+ const currentEvents = getCurrentEvents$1(state);
2981
2995
  const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
2982
2996
  const deltaY = clampTableDeltaY(state.tableDeltaY, currentEvents.length, tableBodyHeight);
2983
2997
  const minLineY = Math.floor(deltaY / devtoolsTableRowHeight);
@@ -3000,7 +3014,7 @@ const withSelectedEventVisible = state => {
3000
3014
  if (state.selectedEventIndex === null || state.selectedEventIndex < 0) {
3001
3015
  return applyVirtualTableState(state);
3002
3016
  }
3003
- const currentEvents = getCurrentEvents$2(state);
3017
+ const currentEvents = getCurrentEvents$1(state);
3004
3018
  const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
3005
3019
  const visibleRowCount = getVisibleRowCount(tableBodyHeight);
3006
3020
  if (visibleRowCount === 0) {
@@ -3017,10 +3031,11 @@ const withSelectedEventVisible = state => {
3017
3031
  return applyVirtualTableState(state);
3018
3032
  };
3019
3033
 
3020
- const svgWidthRegex = /\bwidth=["']([\d.]+)(?:px)?["']/i;
3021
- const svgHeightRegex = /\bheight=["']([\d.]+)(?:px)?["']/i;
3022
- const svgViewBoxRegex = /\bviewBox=["'][^"']*?([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)["']/i;
3023
- const getBlob = event => {
3034
+ const getAttachmentImagePreviewAltText = event => {
3035
+ return typeof event.name === 'string' && event.name ? event.name : 'image preview';
3036
+ };
3037
+
3038
+ const getAttachmentImagePreviewBlob = event => {
3024
3039
  const {
3025
3040
  blob
3026
3041
  } = event;
@@ -3029,24 +3044,37 @@ const getBlob = event => {
3029
3044
  }
3030
3045
  return undefined;
3031
3046
  };
3032
- const getMimeType = event => {
3047
+
3048
+ const getAttachmentImagePreviewMimeType = event => {
3033
3049
  return typeof event.mimeType === 'string' ? event.mimeType : undefined;
3034
3050
  };
3035
- const getAltText = event => {
3036
- return typeof event.name === 'string' && event.name ? event.name : 'image preview';
3037
- };
3038
- const isImageMimeType = mimeType => {
3039
- return typeof mimeType === 'string' && mimeType.startsWith('image/');
3040
- };
3051
+
3041
3052
  const formatImageSize = size => {
3042
3053
  if (size < 1024) {
3043
3054
  return `${size} B`;
3044
3055
  }
3045
3056
  return `${(size / 1024).toFixed(1)} kB`;
3046
3057
  };
3058
+
3047
3059
  const formatImageStats = (width, height, size) => {
3048
3060
  return `${width} × ${height} px · ${formatImageSize(size)}`;
3049
3061
  };
3062
+
3063
+ const getRasterImageStats = async blob => {
3064
+ if (typeof createImageBitmap !== 'function') {
3065
+ throw new TypeError('image bitmap decoder is not available');
3066
+ }
3067
+ const bitmap = await createImageBitmap(blob);
3068
+ try {
3069
+ return formatImageStats(bitmap.width, bitmap.height, blob.size);
3070
+ } finally {
3071
+ bitmap.close?.();
3072
+ }
3073
+ };
3074
+
3075
+ const svgWidthRegex = /\bwidth=["']([\d.]+)(?:px)?["']/i;
3076
+ const svgHeightRegex = /\bheight=["']([\d.]+)(?:px)?["']/i;
3077
+ const svgViewBoxRegex = /\bviewBox=["'][^"']*?([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)["']/i;
3050
3078
  const getSvgImageStats = async blob => {
3051
3079
  const text = await blob.text();
3052
3080
  const widthMatch = text.match(svgWidthRegex);
@@ -3060,27 +3088,7 @@ const getSvgImageStats = async blob => {
3060
3088
  }
3061
3089
  return undefined;
3062
3090
  };
3063
- const readBlobAsPreviewUrl = blob => {
3064
- if (typeof FileReaderSync === 'function') {
3065
- const reader = new FileReaderSync();
3066
- return reader.readAsDataURL(blob);
3067
- }
3068
- if (typeof URL.createObjectURL === 'function') {
3069
- return URL.createObjectURL(blob);
3070
- }
3071
- throw new Error('image preview reader is not available');
3072
- };
3073
- const getRasterImageStats = async blob => {
3074
- if (typeof createImageBitmap !== 'function') {
3075
- throw new TypeError('image bitmap decoder is not available');
3076
- }
3077
- const bitmap = await createImageBitmap(blob);
3078
- try {
3079
- return formatImageStats(bitmap.width, bitmap.height, blob.size);
3080
- } finally {
3081
- bitmap.close?.();
3082
- }
3083
- };
3091
+
3084
3092
  const getImageStats = async (blob, mimeType) => {
3085
3093
  if (mimeType === 'image/svg+xml') {
3086
3094
  const svgStats = await getSvgImageStats(blob);
@@ -3091,19 +3099,35 @@ const getImageStats = async (blob, mimeType) => {
3091
3099
  }
3092
3100
  return getRasterImageStats(blob);
3093
3101
  };
3102
+
3103
+ const isImageMimeType = mimeType => {
3104
+ return typeof mimeType === 'string' && mimeType.startsWith('image/');
3105
+ };
3106
+
3107
+ const readBlobAsPreviewUrl = blob => {
3108
+ if (typeof FileReaderSync === 'function') {
3109
+ const reader = new FileReaderSync();
3110
+ return reader.readAsDataURL(blob);
3111
+ }
3112
+ if (typeof URL.createObjectURL === 'function') {
3113
+ return URL.createObjectURL(blob);
3114
+ }
3115
+ throw new Error('image preview reader is not available');
3116
+ };
3117
+
3094
3118
  const getAttachmentImagePreview = async event => {
3095
3119
  if (event.type !== 'chat-attachment-added' && event.type !== 'chat-attachment-removed') {
3096
3120
  return undefined;
3097
3121
  }
3098
- const blob = getBlob(event);
3099
- const mimeType = getMimeType(event);
3122
+ const blob = getAttachmentImagePreviewBlob(event);
3123
+ const mimeType = getAttachmentImagePreviewMimeType(event);
3100
3124
  if (!blob || !isImageMimeType(mimeType)) {
3101
3125
  return undefined;
3102
3126
  }
3103
3127
  try {
3104
3128
  const stats = await getImageStats(blob, mimeType);
3105
3129
  return {
3106
- alt: getAltText(event),
3130
+ alt: getAttachmentImagePreviewAltText(event),
3107
3131
  previewType: 'image',
3108
3132
  src: readBlobAsPreviewUrl(blob),
3109
3133
  stats
@@ -3135,8 +3159,7 @@ const withPreparedSelectedEventPreview = async event => {
3135
3159
  return setSelectedEventPreview(event, preview);
3136
3160
  };
3137
3161
 
3138
- const getCurrentEvents$1 = state => getCurrentEvents$2(state);
3139
- const selectEventAtIndex = async (state, selectedEventIndex, loadSelectedEvent$1 = loadSelectedEvent) => {
3162
+ const selectEventAtIndex = async (state, selectedEventIndex) => {
3140
3163
  const {
3141
3164
  databaseName,
3142
3165
  dataBaseVersion,
@@ -3164,7 +3187,9 @@ const selectEventAtIndex = async (state, selectedEventIndex, loadSelectedEvent$1
3164
3187
  selectedEventIndex
3165
3188
  };
3166
3189
  }
3167
- const selectedEventDetails = await loadSelectedEvent$1(databaseName, dataBaseVersion, eventStoreName, sessionId, sessionIdIndexName, selectedEvent.eventId, selectedEvent.type);
3190
+ const selectedEventDetails = await loadSelectedEvent(databaseName, dataBaseVersion, eventStoreName, sessionId, sessionIdIndexName, selectedEvent.eventId, selectedEvent.type,
3191
+ // @ts-ignore
3192
+ selectedEvent['eventEndId'] || 0);
3168
3193
  const resolvedSelectedEvent = await withPreparedSelectedEventPreview(mergeSelectedEventDetails(selectedEvent, selectedEventDetails));
3169
3194
  return withSelectedEventVisible({
3170
3195
  ...state,
@@ -3181,7 +3206,7 @@ const selectEventAtIndex = async (state, selectedEventIndex, loadSelectedEvent$1
3181
3206
  };
3182
3207
 
3183
3208
  const focusIndex = async (state, index) => {
3184
- const currentEvents = getCurrentEvents$1(state);
3209
+ const currentEvents = getCurrentEvents(state);
3185
3210
  if (currentEvents.length === 0 || state.selectedEventIndex === index) {
3186
3211
  return state;
3187
3212
  }
@@ -3349,6 +3374,26 @@ const getResponseMap = events => {
3349
3374
  return seen;
3350
3375
  };
3351
3376
 
3377
+ const getMergedRequestResponseEvent = (item, response) => {
3378
+ const parsedStart = new Date(item.timestamp || '');
3379
+ const parsedEnd = new Date(response.timestamp || '');
3380
+ const durationMs = parsedEnd.getTime() - parsedStart.getTime();
3381
+ if (Number.isFinite(durationMs) && durationMs >= 0) {
3382
+ return {
3383
+ durationMs,
3384
+ eventEndId: response.eventId,
3385
+ eventId: item.eventId,
3386
+ method: 'POST',
3387
+ type: 'ai-request-response'
3388
+ };
3389
+ }
3390
+ return {
3391
+ eventEndId: response.eventId,
3392
+ eventId: item.eventId,
3393
+ method: 'POST',
3394
+ type: 'ai-request-response'
3395
+ };
3396
+ };
3352
3397
  const toPrettyEvents = rawEvents => {
3353
3398
  if (rawEvents.type === 'error') {
3354
3399
  return [];
@@ -3359,10 +3404,7 @@ const toPrettyEvents = rawEvents => {
3359
3404
  if (item.type === 'ai-request' && 'requestId' in item && typeof item.requestId === 'string') {
3360
3405
  const response = map[item.requestId];
3361
3406
  if (response) {
3362
- pretty.push({
3363
- eventId: item.eventId,
3364
- type: 'ai-request-response'
3365
- });
3407
+ pretty.push(getMergedRequestResponseEvent(item, response));
3366
3408
  } else {
3367
3409
  pretty.push(item);
3368
3410
  }
@@ -3573,7 +3615,7 @@ const restoreSelectedEvent = async state => {
3573
3615
  selectedEventIndex: null
3574
3616
  };
3575
3617
  }
3576
- const currentEvents = getCurrentEvents$2(state);
3618
+ const currentEvents = getCurrentEvents$1(state);
3577
3619
  const selectedEventIndex = currentEvents.findIndex(event => event.eventId === state.selectedEventId);
3578
3620
  if (selectedEventIndex === -1) {
3579
3621
  return {
@@ -3733,8 +3775,6 @@ const handleEscape = state => {
3733
3775
  return state;
3734
3776
  };
3735
3777
 
3736
- const getCurrentEvents = state => getCurrentEvents$2(state);
3737
-
3738
3778
  const getEventIndexByStableId$1 = (events, event) => {
3739
3779
  return events.findIndex(candidate => candidate.eventId === event.eventId);
3740
3780
  };
@@ -3807,7 +3847,7 @@ const handleEventCategoryFilter$1 = (state, value, ctrlKey = false, metaKey = fa
3807
3847
  const isPrimaryButton = button => {
3808
3848
  return button === 0;
3809
3849
  };
3810
- const handleEventRowClick = async (state, index, button = 0, loadSelectedEvent) => {
3850
+ const handleEventRowClick = async (state, index, button = 0) => {
3811
3851
  const actual = typeof index === 'string' ? Number.parseInt(index, 10) : index;
3812
3852
  if (!isPrimaryButton(button)) {
3813
3853
  return state;
@@ -3815,12 +3855,12 @@ const handleEventRowClick = async (state, index, button = 0, loadSelectedEvent)
3815
3855
  if (actual === -1) {
3816
3856
  return state;
3817
3857
  }
3818
- return selectEventAtIndex(state, actual, loadSelectedEvent);
3858
+ return selectEventAtIndex(state, actual);
3819
3859
  };
3820
3860
 
3821
- const handleEventRowClickAt = async (state, eventX, eventY, button = 0, loadSelectedEvent) => {
3861
+ const handleEventRowClickAt = async (state, eventX, eventY, button = 0) => {
3822
3862
  const selectedEventIndex = getTableBodyEventIndex(state, eventX, eventY);
3823
- return handleEventRowClick(state, selectedEventIndex, button, loadSelectedEvent);
3863
+ return handleEventRowClick(state, selectedEventIndex, button);
3824
3864
  };
3825
3865
 
3826
3866
  const getBoolean = value => {
@@ -3850,7 +3890,7 @@ const getSelectedEventIndex = state => {
3850
3890
  if (selectedEventIndex === null) {
3851
3891
  return null;
3852
3892
  }
3853
- const filteredEvents = getCurrentEvents$2(state);
3893
+ const filteredEvents = getCurrentEvents$1(state);
3854
3894
  const selectedEvent = filteredEvents[selectedEventIndex];
3855
3895
  if (!selectedEvent) {
3856
3896
  return null;
@@ -3868,12 +3908,12 @@ const getPreservedSelectedEventIndex = (oldState, newState) => {
3868
3908
  if (selectedEventIndex === null) {
3869
3909
  return null;
3870
3910
  }
3871
- const oldFilteredEvents = getCurrentEvents$2(oldState);
3911
+ const oldFilteredEvents = getCurrentEvents$1(oldState);
3872
3912
  const selectedEvent = oldFilteredEvents[selectedEventIndex];
3873
3913
  if (!selectedEvent) {
3874
3914
  return null;
3875
3915
  }
3876
- const newFilteredEvents = getCurrentEvents$2(newState);
3916
+ const newFilteredEvents = getCurrentEvents$1(newState);
3877
3917
  const newIndex = getEventIndexByStableId(newFilteredEvents, selectedEvent);
3878
3918
  if (newIndex === -1) {
3879
3919
  return null;
@@ -4661,7 +4701,7 @@ const getHandleOffsetAndPercent = (tableBodyHeight, scrollBarHeight, relativeY)
4661
4701
  };
4662
4702
  };
4663
4703
  const handleTableScrollBarPointerDown = (state, eventY) => {
4664
- const currentEvents = getCurrentEvents$2(state);
4704
+ const currentEvents = getCurrentEvents$1(state);
4665
4705
  const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
4666
4706
  const scrollBarHeight = getScrollBarHeight(currentEvents.length, tableBodyHeight);
4667
4707
  if (tableBodyHeight === 0 || scrollBarHeight === 0) {
@@ -4685,7 +4725,7 @@ const handleTableScrollBarPointerMove = (state, eventY) => {
4685
4725
  if (!state.tableScrollBarPointerActive) {
4686
4726
  return state;
4687
4727
  }
4688
- const currentEvents = getCurrentEvents$2(state);
4728
+ const currentEvents = getCurrentEvents$1(state);
4689
4729
  const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
4690
4730
  const scrollBarHeight = getScrollBarHeight(currentEvents.length, tableBodyHeight);
4691
4731
  if (tableBodyHeight === 0 || scrollBarHeight === 0) {
@@ -5053,7 +5093,7 @@ const getDetailsLineNumberWidth = state => {
5053
5093
  const getCss = state => {
5054
5094
  const hasSelectedEvent = !!state.selectedEvent;
5055
5095
  const tableWidth = hasSelectedEvent ? clampTableWidth(state, state.tableWidth) : getMainWidth(state);
5056
- const currentEvents = getCurrentEvents$2(state);
5096
+ const currentEvents = getCurrentEvents$1(state);
5057
5097
  const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
5058
5098
  const scrollBarHeight = getScrollBarHeight(currentEvents.length, tableBodyHeight);
5059
5099
  const maxDeltaY = getMaxDeltaY(currentEvents.length, tableBodyHeight);
@@ -7020,13 +7060,6 @@ const getStartText = event => {
7020
7060
  return getTimestampText(event.started ?? event.startTime ?? event.startTimestamp ?? event.timestamp);
7021
7061
  };
7022
7062
 
7023
- const getTimingPreviewSegments = event => {
7024
- return [{
7025
- endPercent: 100,
7026
- label: getDurationText(event),
7027
- startPercent: 0
7028
- }];
7029
- };
7030
7063
  const getTimingPreviewSegmentNodes = segments => {
7031
7064
  return [{
7032
7065
  childCount: segments.length,
@@ -7042,6 +7075,15 @@ const getTimingPreviewSegmentNodes = segments => {
7042
7075
  }, text(segment.label)];
7043
7076
  })];
7044
7077
  };
7078
+
7079
+ const getTimingPreviewSegments = event => {
7080
+ return [{
7081
+ endPercent: 100,
7082
+ label: getDurationText(event),
7083
+ startPercent: 0
7084
+ }];
7085
+ };
7086
+
7045
7087
  const getTimingPreviewDom = event => {
7046
7088
  const segments = getTimingPreviewSegments(event);
7047
7089
  return [{
@@ -7103,27 +7145,30 @@ const getTimingContentNodes = (responseEventNodes, selectedEvent) => {
7103
7145
  return getTimingDetailsDom(selectedEvent);
7104
7146
  };
7105
7147
 
7106
- const getTokenUsageDetailsDom = event => {
7148
+ const getRowViewModels = event => {
7107
7149
  const usageDetails = getTokenUsageDetails(event);
7108
7150
  if (!usageDetails) {
7109
7151
  return [];
7110
7152
  }
7111
- const rows = [];
7112
- let rowCount = 0;
7113
- if (usageDetails.inputTokens !== undefined) {
7114
- rows.push(...getTimingRowDom(inputTokens(), String(usageDetails.inputTokens)));
7115
- rowCount++;
7116
- }
7117
- if (usageDetails.outputTokens !== undefined) {
7118
- rows.push(...getTimingRowDom(outputTokens(), String(usageDetails.outputTokens)));
7119
- rowCount++;
7120
- }
7121
- if (usageDetails.cachedTokens !== undefined) {
7122
- rows.push(...getTimingRowDom(cachedTokens(), String(usageDetails.cachedTokens)));
7123
- rowCount++;
7153
+ return [{
7154
+ key: inputTokens(),
7155
+ value: usageDetails.inputTokens
7156
+ }, {
7157
+ key: outputTokens(),
7158
+ value: usageDetails.outputTokens
7159
+ }, {
7160
+ key: cachedTokens(),
7161
+ value: usageDetails.cachedTokens
7162
+ }].filter(row => row.value !== undefined);
7163
+ };
7164
+ const getTokenUsageDetailsDom = event => {
7165
+ const rowViewModels = getRowViewModels(event);
7166
+ if (rowViewModels.length === 0) {
7167
+ return [];
7124
7168
  }
7169
+ const rows = rowViewModels.flatMap(row => getTimingRowDom(row.key, String(row.value)));
7125
7170
  return [{
7126
- childCount: rowCount,
7171
+ childCount: rowViewModels.length,
7127
7172
  className: ChatDebugViewTiming,
7128
7173
  type: Div
7129
7174
  }, ...rows];
@@ -7170,10 +7215,21 @@ const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes,
7170
7215
  }, ...getDetailsTopVirtualDom(normalizedDetailTabs), ...getDetailContentDom(selectedDetailTab, safeSelectedDetailTab, contentNodes)];
7171
7216
  };
7172
7217
 
7218
+ const getCellDurationDom = event => {
7219
+ return [{
7220
+ childCount: 1,
7221
+ className: mergeClassNames(TableCell, ChatDebugViewCellDuration),
7222
+ type: Td
7223
+ }, text(getEventTableDurationText(event))];
7224
+ };
7225
+
7173
7226
  const getMethods = new Set(['list_dir', 'list_files', 'read_file']);
7174
7227
  const postMethods = new Set(['create_directory', 'create_file', 'mkdir', 'write_file']);
7175
7228
  const deleteMethods = new Set(['delete_directory', 'delete_file', 'delete_folder', 'remove_directory', 'remove_file', 'remove_folder']);
7176
7229
  const getEventTableMethodLabel = event => {
7230
+ if (event.method) {
7231
+ return event.method;
7232
+ }
7177
7233
  const toolName = getToolName(event);
7178
7234
  if (!toolName) {
7179
7235
  return '';
@@ -7190,36 +7246,45 @@ const getEventTableMethodLabel = event => {
7190
7246
  return '';
7191
7247
  };
7192
7248
 
7249
+ const getCellMethodDom = event => {
7250
+ return [{
7251
+ childCount: 1,
7252
+ className: TableCell,
7253
+ type: Td
7254
+ }, text(getEventTableMethodLabel(event))];
7255
+ };
7256
+
7257
+ const getCellStatusDom = (event, isErrorStatus) => {
7258
+ return [{
7259
+ childCount: 1,
7260
+ className: mergeClassNames(TableCell, isErrorStatus ? ChatDebugViewCellStatusError : ''),
7261
+ type: Td
7262
+ }, text(getStatusText(event))];
7263
+ };
7264
+
7265
+ const getCellTypeDom = event => {
7266
+ return [{
7267
+ childCount: 1,
7268
+ className: TableCell,
7269
+ type: Td
7270
+ }, text(getEventTableTypeLabel(event))];
7271
+ };
7272
+
7193
7273
  const getTableCellDom = (column, event, isErrorStatus) => {
7194
7274
  switch (column) {
7195
7275
  case Duration:
7196
- return [{
7197
- childCount: 1,
7198
- className: mergeClassNames(TableCell, ChatDebugViewCellDuration),
7199
- type: Td
7200
- }, text(getEventTableDurationText(event))];
7276
+ return getCellDurationDom(event);
7201
7277
  case Method:
7202
- return [{
7203
- childCount: 1,
7204
- className: TableCell,
7205
- type: Td
7206
- }, text(getEventTableMethodLabel(event))];
7278
+ return getCellMethodDom(event);
7207
7279
  case Status$1:
7208
- return [{
7209
- childCount: 1,
7210
- className: mergeClassNames(TableCell, isErrorStatus ? ChatDebugViewCellStatusError : ''),
7211
- type: Td
7212
- }, text(getStatusText(event))];
7280
+ return getCellStatusDom(event, isErrorStatus);
7213
7281
  case Type:
7214
- return [{
7215
- childCount: 1,
7216
- className: TableCell,
7217
- type: Td
7218
- }, text(getEventTableTypeLabel(event))];
7282
+ return getCellTypeDom(event);
7219
7283
  default:
7220
7284
  return [];
7221
7285
  }
7222
7286
  };
7287
+
7223
7288
  const getRowCellNodes = (event, isErrorStatus, visibleTableColumns) => {
7224
7289
  const orderedVisibleTableColumns = getOrderedVisibleTableColumns(visibleTableColumns);
7225
7290
  return orderedVisibleTableColumns.flatMap(column => {
@@ -7804,7 +7869,7 @@ const renderItems = (oldState, newState) => {
7804
7869
  if (newState.initial) {
7805
7870
  return [SetDom2, newState.uid, []];
7806
7871
  }
7807
- const filteredEvents = getCurrentEvents$2(newState);
7872
+ const filteredEvents = getCurrentEvents$1(newState);
7808
7873
  const previewTextViewportHeight = getPreviewTextViewportHeight(newState);
7809
7874
  const dom = getChatDebugViewDom(newState.errorMessage, newState.filterValue, getSelectedEventCategoryFilters(newState.categoryFilters), newState.categoryFilters, newState.showEventStreamFinishedEvents, newState.showInputEvents, newState.showResponsePartEvents, newState.useDevtoolsLayout, newState.selectedEvent, newState.selectedEventIndex, newState.timelineStartSeconds, newState.timelineEndSeconds, newState.timelineFilterDescription, withSessionEventIds(newState.timelineEvents), withSessionEventIds(filteredEvents), newState.timelineSelectionActive, newState.timelineSelectionAnchorSeconds, newState.timelineSelectionFocusSeconds, getVisibleTableColumns(newState.tableColumns), newState.detailTabs, newState.tableColumns, newState.timelineInfo, newState.timelineHoverPercent, newState.focus, newState.previewTextCursorRowIndex, newState.previewTextCursorColumnIndex, newState.tableMinLineY, newState.tableMaxLineY, newState.previewTextDeltaY, previewTextViewportHeight);
7810
7875
  return [SetDom2, newState.uid, dom];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/chat-debug-view",
3
- "version": "10.15.0",
3
+ "version": "10.17.0",
4
4
  "description": "Chat Debug View Worker",
5
5
  "repository": {
6
6
  "type": "git",