@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.
- package/dist/chatDebugViewWorkerMain.js +181 -116
- package/package.json +1 -1
|
@@ -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$
|
|
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
|
|
2890
|
-
|
|
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$
|
|
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$
|
|
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
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
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
|
-
|
|
3047
|
+
|
|
3048
|
+
const getAttachmentImagePreviewMimeType = event => {
|
|
3033
3049
|
return typeof event.mimeType === 'string' ? event.mimeType : undefined;
|
|
3034
3050
|
};
|
|
3035
|
-
|
|
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
|
-
|
|
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 =
|
|
3099
|
-
const mimeType =
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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$
|
|
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
|
|
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
|
|
3858
|
+
return selectEventAtIndex(state, actual);
|
|
3819
3859
|
};
|
|
3820
3860
|
|
|
3821
|
-
const handleEventRowClickAt = async (state, eventX, eventY, button = 0
|
|
3861
|
+
const handleEventRowClickAt = async (state, eventX, eventY, button = 0) => {
|
|
3822
3862
|
const selectedEventIndex = getTableBodyEventIndex(state, eventX, eventY);
|
|
3823
|
-
return handleEventRowClick(state, selectedEventIndex, button
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
7148
|
+
const getRowViewModels = event => {
|
|
7107
7149
|
const usageDetails = getTokenUsageDetails(event);
|
|
7108
7150
|
if (!usageDetails) {
|
|
7109
7151
|
return [];
|
|
7110
7152
|
}
|
|
7111
|
-
|
|
7112
|
-
|
|
7113
|
-
|
|
7114
|
-
|
|
7115
|
-
|
|
7116
|
-
|
|
7117
|
-
|
|
7118
|
-
|
|
7119
|
-
|
|
7120
|
-
}
|
|
7121
|
-
|
|
7122
|
-
|
|
7123
|
-
|
|
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:
|
|
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$
|
|
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];
|