@lvce-editor/chat-debug-view 10.0.0 → 10.2.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 +775 -416
- package/package.json +1 -1
|
@@ -1315,6 +1315,9 @@ const listChatViewEvents$1 = async sessionId => {
|
|
|
1315
1315
|
const loadSelectedEvent$1 = async (sessionId, eventId, type) => {
|
|
1316
1316
|
return invoke$1('ChatStorage.loadSelectedEvent', sessionId, eventId, type);
|
|
1317
1317
|
};
|
|
1318
|
+
const registerUpdateListener = async (sessionId, rpcId, uid) => {
|
|
1319
|
+
return invoke$1('ChatStorage.registerUpdateListener', sessionId, rpcId, uid);
|
|
1320
|
+
};
|
|
1318
1321
|
|
|
1319
1322
|
const appendStoredEventForTest = async (state, event) => {
|
|
1320
1323
|
await appendEvent(event);
|
|
@@ -2217,6 +2220,8 @@ const createDefaultState = () => {
|
|
|
2217
2220
|
largeBreakpoint: 900,
|
|
2218
2221
|
mediumBreakpoint: 600,
|
|
2219
2222
|
platform: 0,
|
|
2223
|
+
previewTextCursorColumnIndex: null,
|
|
2224
|
+
previewTextCursorRowIndex: null,
|
|
2220
2225
|
sashPointerActive: false,
|
|
2221
2226
|
selectedEvent: null,
|
|
2222
2227
|
selectedEventId: null,
|
|
@@ -2230,7 +2235,12 @@ const createDefaultState = () => {
|
|
|
2230
2235
|
sortDescending: false,
|
|
2231
2236
|
tableColumns: createTableColumns(),
|
|
2232
2237
|
tableColumnWidths: defaultTableColumnWidths,
|
|
2238
|
+
tableDeltaY: 0,
|
|
2239
|
+
tableMaxLineY: 0,
|
|
2240
|
+
tableMinLineY: 0,
|
|
2233
2241
|
tableResizerDownId: 0,
|
|
2242
|
+
tableScrollBarHandleOffset: 0,
|
|
2243
|
+
tableScrollBarPointerActive: false,
|
|
2234
2244
|
tableWidth: defaultTableWidth,
|
|
2235
2245
|
timelineEndSeconds: '',
|
|
2236
2246
|
timelineEvents: [],
|
|
@@ -2282,7 +2292,7 @@ const RenderFocusContext = 4;
|
|
|
2282
2292
|
const RenderFocus = 5;
|
|
2283
2293
|
|
|
2284
2294
|
const diff = (oldState, newState) => {
|
|
2285
|
-
if (oldState.categoryFilters !== newState.categoryFilters || oldState.detailTabs !== newState.detailTabs || oldState.errorMessage !== newState.errorMessage || oldState.events !== newState.events || oldState.filterValue !== newState.filterValue || oldState.sessionId !== newState.sessionId || oldState.showEventStreamFinishedEvents !== newState.showEventStreamFinishedEvents || oldState.showInputEvents !== newState.showInputEvents || oldState.showResponsePartEvents !== newState.showResponsePartEvents || oldState.sortColumn !== newState.sortColumn || oldState.sortDescending !== newState.sortDescending || oldState.tableColumnWidths !== newState.tableColumnWidths || oldState.tableWidth !== newState.tableWidth || oldState.timelineEndSeconds !== newState.timelineEndSeconds || oldState.timelineHoverPercent !== newState.timelineHoverPercent || oldState.timelineHoverSeconds !== newState.timelineHoverSeconds || oldState.timelineSelectionActive !== newState.timelineSelectionActive || oldState.timelineSelectionAnchorSeconds !== newState.timelineSelectionAnchorSeconds || oldState.timelineSelectionFocusSeconds !== newState.timelineSelectionFocusSeconds || oldState.timelineStartSeconds !== newState.timelineStartSeconds || oldState.useDevtoolsLayout !== newState.useDevtoolsLayout || oldState.tableColumns !== newState.tableColumns || oldState.selectedEvent !== newState.selectedEvent || oldState.selectedEventIndex !== newState.selectedEventIndex || oldState.focus !== newState.focus || oldState.width !== newState.width || oldState.uid !== newState.uid) {
|
|
2295
|
+
if (oldState.categoryFilters !== newState.categoryFilters || oldState.detailTabs !== newState.detailTabs || oldState.errorMessage !== newState.errorMessage || oldState.events !== newState.events || oldState.filterValue !== newState.filterValue || oldState.previewTextCursorColumnIndex !== newState.previewTextCursorColumnIndex || oldState.previewTextCursorRowIndex !== newState.previewTextCursorRowIndex || oldState.sessionId !== newState.sessionId || oldState.showEventStreamFinishedEvents !== newState.showEventStreamFinishedEvents || oldState.showInputEvents !== newState.showInputEvents || oldState.showResponsePartEvents !== newState.showResponsePartEvents || oldState.sortColumn !== newState.sortColumn || oldState.sortDescending !== newState.sortDescending || oldState.tableColumnWidths !== newState.tableColumnWidths || oldState.tableDeltaY !== newState.tableDeltaY || oldState.tableMaxLineY !== newState.tableMaxLineY || oldState.tableMinLineY !== newState.tableMinLineY || oldState.tableWidth !== newState.tableWidth || oldState.timelineEndSeconds !== newState.timelineEndSeconds || oldState.timelineHoverPercent !== newState.timelineHoverPercent || oldState.timelineHoverSeconds !== newState.timelineHoverSeconds || oldState.timelineSelectionActive !== newState.timelineSelectionActive || oldState.timelineSelectionAnchorSeconds !== newState.timelineSelectionAnchorSeconds || oldState.timelineSelectionFocusSeconds !== newState.timelineSelectionFocusSeconds || oldState.timelineStartSeconds !== newState.timelineStartSeconds || oldState.useDevtoolsLayout !== newState.useDevtoolsLayout || oldState.tableColumns !== newState.tableColumns || oldState.selectedEvent !== newState.selectedEvent || oldState.selectedEventIndex !== newState.selectedEventIndex || oldState.focus !== newState.focus || oldState.width !== newState.width || oldState.uid !== newState.uid) {
|
|
2286
2296
|
return [RenderIncremental, RenderCss];
|
|
2287
2297
|
}
|
|
2288
2298
|
return [];
|
|
@@ -2555,6 +2565,9 @@ const hasErrorStatus = event => {
|
|
|
2555
2565
|
const {
|
|
2556
2566
|
status
|
|
2557
2567
|
} = event;
|
|
2568
|
+
if (status === 'error') {
|
|
2569
|
+
return true;
|
|
2570
|
+
}
|
|
2558
2571
|
if (isErrorStatusCode(status)) {
|
|
2559
2572
|
return true;
|
|
2560
2573
|
}
|
|
@@ -2631,6 +2644,102 @@ const loadSelectedEvent = async (_databaseName, _dataBaseVersion, _eventStoreNam
|
|
|
2631
2644
|
return loadSelectedEvent$1(sessionId, eventId, type);
|
|
2632
2645
|
};
|
|
2633
2646
|
|
|
2647
|
+
const devtoolsTableHeaderHeight = 24;
|
|
2648
|
+
const devtoolsTableRowHeight = 24;
|
|
2649
|
+
const devtoolsTableScrollBarWidth = 12;
|
|
2650
|
+
const devtoolsTableSummaryHeight = 24;
|
|
2651
|
+
const minimumDevtoolsTableScrollBarHeight = 20;
|
|
2652
|
+
|
|
2653
|
+
const devtoolsRootGap = 4;
|
|
2654
|
+
const devtoolsTopHeight = 28;
|
|
2655
|
+
const devtoolsTimelineHeight = 88;
|
|
2656
|
+
const getTableBodyY = (state, hasTimeline) => {
|
|
2657
|
+
return state.y + viewPadding + devtoolsTopHeight + devtoolsRootGap + (hasTimeline ? devtoolsTimelineHeight : 0) + devtoolsTableHeaderHeight;
|
|
2658
|
+
};
|
|
2659
|
+
|
|
2660
|
+
const getTableBodyHeight = (state, eventCount) => {
|
|
2661
|
+
if (eventCount === 0) {
|
|
2662
|
+
return 0;
|
|
2663
|
+
}
|
|
2664
|
+
const tableBodyY = getTableBodyY(state, true);
|
|
2665
|
+
return Math.max(0, state.height - (tableBodyY - state.y) - viewPadding - devtoolsTableSummaryHeight);
|
|
2666
|
+
};
|
|
2667
|
+
const getVisibleRowCount = tableBodyHeight => {
|
|
2668
|
+
if (tableBodyHeight <= 0) {
|
|
2669
|
+
return 0;
|
|
2670
|
+
}
|
|
2671
|
+
return Math.max(1, Math.ceil(tableBodyHeight / devtoolsTableRowHeight));
|
|
2672
|
+
};
|
|
2673
|
+
const getMaxDeltaY = (eventCount, tableBodyHeight) => {
|
|
2674
|
+
return Math.max(eventCount * devtoolsTableRowHeight - tableBodyHeight, 0);
|
|
2675
|
+
};
|
|
2676
|
+
const clampTableDeltaY = (deltaY, eventCount, tableBodyHeight) => {
|
|
2677
|
+
const maxDeltaY = getMaxDeltaY(eventCount, tableBodyHeight);
|
|
2678
|
+
if (deltaY < 0) {
|
|
2679
|
+
return 0;
|
|
2680
|
+
}
|
|
2681
|
+
if (deltaY > maxDeltaY) {
|
|
2682
|
+
return maxDeltaY;
|
|
2683
|
+
}
|
|
2684
|
+
return deltaY;
|
|
2685
|
+
};
|
|
2686
|
+
const getScrollBarHeight = (eventCount, tableBodyHeight) => {
|
|
2687
|
+
if (eventCount === 0 || tableBodyHeight <= 0) {
|
|
2688
|
+
return 0;
|
|
2689
|
+
}
|
|
2690
|
+
const contentHeight = eventCount * devtoolsTableRowHeight;
|
|
2691
|
+
if (contentHeight <= tableBodyHeight) {
|
|
2692
|
+
return 0;
|
|
2693
|
+
}
|
|
2694
|
+
return Math.max(minimumDevtoolsTableScrollBarHeight, Math.floor(tableBodyHeight * tableBodyHeight / contentHeight));
|
|
2695
|
+
};
|
|
2696
|
+
const getScrollBarOffset = (deltaY, maxDeltaY, tableBodyHeight, scrollBarHeight) => {
|
|
2697
|
+
if (maxDeltaY <= 0 || scrollBarHeight <= 0 || tableBodyHeight <= scrollBarHeight) {
|
|
2698
|
+
return 0;
|
|
2699
|
+
}
|
|
2700
|
+
return Math.round(deltaY / maxDeltaY * (tableBodyHeight - scrollBarHeight));
|
|
2701
|
+
};
|
|
2702
|
+
const applyVirtualTableState = state => {
|
|
2703
|
+
const currentEvents = getCurrentEvents$2(state);
|
|
2704
|
+
const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
|
|
2705
|
+
const deltaY = clampTableDeltaY(state.tableDeltaY, currentEvents.length, tableBodyHeight);
|
|
2706
|
+
const minLineY = Math.floor(deltaY / devtoolsTableRowHeight);
|
|
2707
|
+
const visibleRowCount = getVisibleRowCount(tableBodyHeight);
|
|
2708
|
+
const maxLineY = Math.min(currentEvents.length, minLineY + visibleRowCount);
|
|
2709
|
+
return {
|
|
2710
|
+
...state,
|
|
2711
|
+
tableDeltaY: deltaY,
|
|
2712
|
+
tableMaxLineY: maxLineY,
|
|
2713
|
+
tableMinLineY: minLineY
|
|
2714
|
+
};
|
|
2715
|
+
};
|
|
2716
|
+
const setTableDeltaY = (state, deltaY) => {
|
|
2717
|
+
return applyVirtualTableState({
|
|
2718
|
+
...state,
|
|
2719
|
+
tableDeltaY: deltaY
|
|
2720
|
+
});
|
|
2721
|
+
};
|
|
2722
|
+
const withSelectedEventVisible = state => {
|
|
2723
|
+
if (state.selectedEventIndex === null || state.selectedEventIndex < 0) {
|
|
2724
|
+
return applyVirtualTableState(state);
|
|
2725
|
+
}
|
|
2726
|
+
const currentEvents = getCurrentEvents$2(state);
|
|
2727
|
+
const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
|
|
2728
|
+
const visibleRowCount = getVisibleRowCount(tableBodyHeight);
|
|
2729
|
+
if (visibleRowCount === 0) {
|
|
2730
|
+
return applyVirtualTableState(state);
|
|
2731
|
+
}
|
|
2732
|
+
const minLineY = Math.floor(state.tableDeltaY / devtoolsTableRowHeight);
|
|
2733
|
+
const maxLineY = minLineY + visibleRowCount;
|
|
2734
|
+
if (state.selectedEventIndex < minLineY) {
|
|
2735
|
+
return setTableDeltaY(state, state.selectedEventIndex * devtoolsTableRowHeight);
|
|
2736
|
+
}
|
|
2737
|
+
if (state.selectedEventIndex >= maxLineY) {
|
|
2738
|
+
return setTableDeltaY(state, (state.selectedEventIndex + 1) * devtoolsTableRowHeight - tableBodyHeight);
|
|
2739
|
+
}
|
|
2740
|
+
return applyVirtualTableState(state);
|
|
2741
|
+
};
|
|
2742
|
+
|
|
2634
2743
|
const svgWidthRegex = /\bwidth=["']([\d.]+)(?:px)?["']/i;
|
|
2635
2744
|
const svgHeightRegex = /\bheight=["']([\d.]+)(?:px)?["']/i;
|
|
2636
2745
|
const svgViewBoxRegex = /\bviewBox=["'][^"']*?([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)["']/i;
|
|
@@ -2775,13 +2884,15 @@ const selectEventAtIndex = async (state, selectedEventIndex, dependencies = sele
|
|
|
2775
2884
|
}
|
|
2776
2885
|
const selectedEventDetails = await dependencies.loadSelectedEvent(state.databaseName, state.dataBaseVersion, state.eventStoreName, state.sessionId, state.sessionIdIndexName, selectedEvent.eventId, selectedEvent.type);
|
|
2777
2886
|
const resolvedSelectedEvent = await withPreparedSelectedEventPreview(selectedEventDetails ?? selectedEvent);
|
|
2778
|
-
return {
|
|
2887
|
+
return withSelectedEventVisible({
|
|
2779
2888
|
...state,
|
|
2780
2889
|
detailTabs: createDetailTabs(selectedDetailTab, resolvedSelectedEvent),
|
|
2890
|
+
previewTextCursorColumnIndex: null,
|
|
2891
|
+
previewTextCursorRowIndex: null,
|
|
2781
2892
|
selectedEvent: resolvedSelectedEvent,
|
|
2782
2893
|
selectedEventId: selectedEvent.eventId,
|
|
2783
2894
|
selectedEventIndex
|
|
2784
|
-
};
|
|
2895
|
+
});
|
|
2785
2896
|
};
|
|
2786
2897
|
|
|
2787
2898
|
const focusIndex = async (state, index) => {
|
|
@@ -2879,16 +2990,6 @@ const show2 = async (uid, menuId, x, y, args) => {
|
|
|
2879
2990
|
await showContextMenu2(uid, menuId, x, y, args);
|
|
2880
2991
|
};
|
|
2881
2992
|
|
|
2882
|
-
const devtoolsTableHeaderHeight = 24;
|
|
2883
|
-
const devtoolsTableRowHeight = 24;
|
|
2884
|
-
|
|
2885
|
-
const devtoolsRootGap = 4;
|
|
2886
|
-
const devtoolsTopHeight = 28;
|
|
2887
|
-
const devtoolsTimelineHeight = 88;
|
|
2888
|
-
const getTableBodyY = (state, hasTimeline) => {
|
|
2889
|
-
return state.y + viewPadding + devtoolsTopHeight + devtoolsRootGap + (hasTimeline ? devtoolsTimelineHeight : 0) + devtoolsTableHeaderHeight;
|
|
2890
|
-
};
|
|
2891
|
-
|
|
2892
2993
|
const getTableBodyEventIndex = (state, eventX, eventY) => {
|
|
2893
2994
|
if (!state.useDevtoolsLayout) {
|
|
2894
2995
|
return -1;
|
|
@@ -2906,8 +3007,8 @@ const getTableBodyEventIndex = (state, eventX, eventY) => {
|
|
|
2906
3007
|
if (relativeX < 0 || relativeX >= tableWidth || relativeY < 0) {
|
|
2907
3008
|
return -1;
|
|
2908
3009
|
}
|
|
2909
|
-
const eventIndex = Math.floor(relativeY / devtoolsTableRowHeight);
|
|
2910
|
-
if (eventIndex <
|
|
3010
|
+
const eventIndex = state.tableMinLineY + Math.floor(relativeY / devtoolsTableRowHeight);
|
|
3011
|
+
if (eventIndex < state.tableMinLineY || eventIndex >= state.tableMaxLineY || eventIndex >= currentEvents.length) {
|
|
2911
3012
|
return -1;
|
|
2912
3013
|
}
|
|
2913
3014
|
return eventIndex;
|
|
@@ -3120,6 +3221,8 @@ const restoreSelectedEvent = async state => {
|
|
|
3120
3221
|
if (state.selectedEventId === null) {
|
|
3121
3222
|
return {
|
|
3122
3223
|
...state,
|
|
3224
|
+
previewTextCursorColumnIndex: null,
|
|
3225
|
+
previewTextCursorRowIndex: null,
|
|
3123
3226
|
selectedEvent: null,
|
|
3124
3227
|
selectedEventIndex: null
|
|
3125
3228
|
};
|
|
@@ -3129,6 +3232,8 @@ const restoreSelectedEvent = async state => {
|
|
|
3129
3232
|
if (selectedEventIndex === -1) {
|
|
3130
3233
|
return {
|
|
3131
3234
|
...state,
|
|
3235
|
+
previewTextCursorColumnIndex: null,
|
|
3236
|
+
previewTextCursorRowIndex: null,
|
|
3132
3237
|
selectedEvent: null,
|
|
3133
3238
|
selectedEventId: null,
|
|
3134
3239
|
selectedEventIndex: null
|
|
@@ -3138,6 +3243,8 @@ const restoreSelectedEvent = async state => {
|
|
|
3138
3243
|
if (!selectedEvent || typeof selectedEvent.eventId !== 'number') {
|
|
3139
3244
|
return {
|
|
3140
3245
|
...state,
|
|
3246
|
+
previewTextCursorColumnIndex: null,
|
|
3247
|
+
previewTextCursorRowIndex: null,
|
|
3141
3248
|
selectedEvent: null,
|
|
3142
3249
|
selectedEventId: null,
|
|
3143
3250
|
selectedEventIndex: null
|
|
@@ -3147,6 +3254,8 @@ const restoreSelectedEvent = async state => {
|
|
|
3147
3254
|
const resolvedSelectedEvent = selectedEventDetails ? await withPreparedSelectedEventPreview(selectedEventDetails) : null;
|
|
3148
3255
|
return {
|
|
3149
3256
|
...state,
|
|
3257
|
+
previewTextCursorColumnIndex: null,
|
|
3258
|
+
previewTextCursorRowIndex: null,
|
|
3150
3259
|
selectedEvent: resolvedSelectedEvent,
|
|
3151
3260
|
selectedEventId: selectedEvent.eventId,
|
|
3152
3261
|
selectedEventIndex
|
|
@@ -3162,7 +3271,7 @@ const loadEventsForSessionId = async (state, sessionId) => {
|
|
|
3162
3271
|
} = state;
|
|
3163
3272
|
const result = await loadEventsDependencies.listChatViewEvents(sessionId, databaseName, dataBaseVersion, eventStoreName, sessionIdIndexName);
|
|
3164
3273
|
if (result.type === 'error') {
|
|
3165
|
-
return getStateWithTimelineInfo({
|
|
3274
|
+
return applyVirtualTableState(getStateWithTimelineInfo({
|
|
3166
3275
|
...state,
|
|
3167
3276
|
errorMessage: getFailedToLoadMessage(sessionId, result.error),
|
|
3168
3277
|
events: [],
|
|
@@ -3171,13 +3280,13 @@ const loadEventsForSessionId = async (state, sessionId) => {
|
|
|
3171
3280
|
selectedEventId: null,
|
|
3172
3281
|
selectedEventIndex: null,
|
|
3173
3282
|
sessionId
|
|
3174
|
-
});
|
|
3283
|
+
}));
|
|
3175
3284
|
}
|
|
3176
3285
|
const {
|
|
3177
3286
|
events
|
|
3178
3287
|
} = result;
|
|
3179
3288
|
if (events.length === 0) {
|
|
3180
|
-
return getStateWithTimelineInfo({
|
|
3289
|
+
return applyVirtualTableState(getStateWithTimelineInfo({
|
|
3181
3290
|
...state,
|
|
3182
3291
|
errorMessage: getSessionNotFoundMessage(sessionId),
|
|
3183
3292
|
events: [],
|
|
@@ -3186,7 +3295,7 @@ const loadEventsForSessionId = async (state, sessionId) => {
|
|
|
3186
3295
|
selectedEventId: null,
|
|
3187
3296
|
selectedEventIndex: null,
|
|
3188
3297
|
sessionId
|
|
3189
|
-
});
|
|
3298
|
+
}));
|
|
3190
3299
|
}
|
|
3191
3300
|
const nextState = getStateWithTimelineInfo({
|
|
3192
3301
|
...state,
|
|
@@ -3195,7 +3304,8 @@ const loadEventsForSessionId = async (state, sessionId) => {
|
|
|
3195
3304
|
initial: false,
|
|
3196
3305
|
sessionId
|
|
3197
3306
|
});
|
|
3198
|
-
|
|
3307
|
+
const restoredState = await restoreSelectedEvent(nextState);
|
|
3308
|
+
return withSelectedEventVisible(restoredState);
|
|
3199
3309
|
};
|
|
3200
3310
|
|
|
3201
3311
|
const loadEventsFromUri = async state => {
|
|
@@ -3228,6 +3338,8 @@ const handleClickRefresh = async state => {
|
|
|
3228
3338
|
const handleCloseDetails = state => {
|
|
3229
3339
|
return {
|
|
3230
3340
|
...state,
|
|
3341
|
+
previewTextCursorColumnIndex: null,
|
|
3342
|
+
previewTextCursorRowIndex: null,
|
|
3231
3343
|
selectedEvent: null,
|
|
3232
3344
|
selectedEventId: null,
|
|
3233
3345
|
selectedEventIndex: null
|
|
@@ -3311,12 +3423,12 @@ const getPreservedSelectedEventIndex$1 = (oldState, newState) => {
|
|
|
3311
3423
|
const withPreservedSelection$1 = (state, nextState) => {
|
|
3312
3424
|
const nextStateWithTimelineInfo = getStateWithTimelineInfo(nextState);
|
|
3313
3425
|
const selectedEventIndex = getPreservedSelectedEventIndex$1(state, nextStateWithTimelineInfo);
|
|
3314
|
-
return {
|
|
3426
|
+
return withSelectedEventVisible({
|
|
3315
3427
|
...nextStateWithTimelineInfo,
|
|
3316
3428
|
selectedEvent: selectedEventIndex === null ? null : state.selectedEvent,
|
|
3317
3429
|
selectedEventId: selectedEventIndex === null ? null : state.selectedEventId,
|
|
3318
3430
|
selectedEventIndex
|
|
3319
|
-
};
|
|
3431
|
+
});
|
|
3320
3432
|
};
|
|
3321
3433
|
|
|
3322
3434
|
const handleEventCategoryFilter = (state, value, ctrlKey = false, metaKey = false) => {
|
|
@@ -3423,12 +3535,14 @@ const parseSelectedEventIndex = value => {
|
|
|
3423
3535
|
const withPreservedSelection = (state, nextState) => {
|
|
3424
3536
|
const nextStateWithTimelineInfo = getStateWithTimelineInfo(nextState);
|
|
3425
3537
|
const selectedEventIndex = getPreservedSelectedEventIndex(state, nextStateWithTimelineInfo);
|
|
3426
|
-
return {
|
|
3538
|
+
return withSelectedEventVisible({
|
|
3427
3539
|
...nextStateWithTimelineInfo,
|
|
3540
|
+
previewTextCursorColumnIndex: selectedEventIndex === null ? null : state.previewTextCursorColumnIndex,
|
|
3541
|
+
previewTextCursorRowIndex: selectedEventIndex === null ? null : state.previewTextCursorRowIndex,
|
|
3428
3542
|
selectedEvent: selectedEventIndex === null ? null : state.selectedEvent,
|
|
3429
3543
|
selectedEventId: selectedEventIndex === null ? null : state.selectedEventId,
|
|
3430
3544
|
selectedEventIndex
|
|
3431
|
-
};
|
|
3545
|
+
});
|
|
3432
3546
|
};
|
|
3433
3547
|
const handleInput = (state, name, value, checked) => {
|
|
3434
3548
|
if (name === Filter) {
|
|
@@ -3473,22 +3587,26 @@ const handleInput = (state, name, value, checked) => {
|
|
|
3473
3587
|
if (name === UseDevtoolsLayout) {
|
|
3474
3588
|
const useDevtoolsLayout = getBoolean(checked);
|
|
3475
3589
|
const selectedEventIndex = useDevtoolsLayout ? getSelectedEventIndex(state) : null;
|
|
3476
|
-
return {
|
|
3590
|
+
return applyVirtualTableState({
|
|
3477
3591
|
...state,
|
|
3592
|
+
previewTextCursorColumnIndex: useDevtoolsLayout && selectedEventIndex !== null ? state.previewTextCursorColumnIndex : null,
|
|
3593
|
+
previewTextCursorRowIndex: useDevtoolsLayout && selectedEventIndex !== null ? state.previewTextCursorRowIndex : null,
|
|
3478
3594
|
selectedEvent: useDevtoolsLayout && selectedEventIndex !== null ? state.selectedEvent : null,
|
|
3479
3595
|
selectedEventId: useDevtoolsLayout && selectedEventIndex !== null ? state.selectedEventId : null,
|
|
3480
3596
|
selectedEventIndex,
|
|
3481
3597
|
useDevtoolsLayout
|
|
3482
|
-
};
|
|
3598
|
+
});
|
|
3483
3599
|
}
|
|
3484
3600
|
if (name === SelectedEventIndex) {
|
|
3485
3601
|
const selectedEventIndex = parseSelectedEventIndex(value);
|
|
3486
|
-
return {
|
|
3602
|
+
return withSelectedEventVisible({
|
|
3487
3603
|
...state,
|
|
3604
|
+
previewTextCursorColumnIndex: selectedEventIndex === null ? null : state.previewTextCursorColumnIndex,
|
|
3605
|
+
previewTextCursorRowIndex: selectedEventIndex === null ? null : state.previewTextCursorRowIndex,
|
|
3488
3606
|
selectedEvent: selectedEventIndex === null ? null : state.selectedEvent,
|
|
3489
3607
|
selectedEventId: selectedEventIndex === null ? null : state.selectedEventId,
|
|
3490
3608
|
selectedEventIndex
|
|
3491
|
-
};
|
|
3609
|
+
});
|
|
3492
3610
|
}
|
|
3493
3611
|
if (name === TimelineStartSeconds) {
|
|
3494
3612
|
const nextState = {
|
|
@@ -3512,12 +3630,14 @@ const handleInput = (state, name, value, checked) => {
|
|
|
3512
3630
|
return withPreservedSelection(state, nextState);
|
|
3513
3631
|
}
|
|
3514
3632
|
if (name === CloseDetails) {
|
|
3515
|
-
return {
|
|
3633
|
+
return applyVirtualTableState({
|
|
3516
3634
|
...state,
|
|
3635
|
+
previewTextCursorColumnIndex: null,
|
|
3636
|
+
previewTextCursorRowIndex: null,
|
|
3517
3637
|
selectedEvent: null,
|
|
3518
3638
|
selectedEventId: null,
|
|
3519
3639
|
selectedEventIndex: null
|
|
3520
|
-
};
|
|
3640
|
+
});
|
|
3521
3641
|
}
|
|
3522
3642
|
if (name === DetailTab) {
|
|
3523
3643
|
if (!isDetailTab(value)) {
|
|
@@ -3535,138 +3655,470 @@ const handleInput = (state, name, value, checked) => {
|
|
|
3535
3655
|
return state;
|
|
3536
3656
|
};
|
|
3537
3657
|
|
|
3538
|
-
const
|
|
3539
|
-
if (
|
|
3540
|
-
return
|
|
3658
|
+
const getListFilesPreviewEvent = (event, name) => {
|
|
3659
|
+
if (name !== 'list_files') {
|
|
3660
|
+
return undefined;
|
|
3541
3661
|
}
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
const handleSashPointerMove = (state, eventX, eventY) => {
|
|
3549
|
-
if (!state.sashPointerActive) {
|
|
3550
|
-
return state;
|
|
3662
|
+
const {
|
|
3663
|
+
result
|
|
3664
|
+
} = event;
|
|
3665
|
+
if (typeof result !== 'object' || result === null) {
|
|
3666
|
+
return undefined;
|
|
3551
3667
|
}
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
const handleSashPointerUp = (state, eventX, eventY) => {
|
|
3559
|
-
if (!state.sashPointerActive) {
|
|
3560
|
-
return state;
|
|
3668
|
+
const {
|
|
3669
|
+
entries
|
|
3670
|
+
} = result;
|
|
3671
|
+
if (entries !== undefined) {
|
|
3672
|
+
return entries;
|
|
3561
3673
|
}
|
|
3562
|
-
return
|
|
3563
|
-
...state,
|
|
3564
|
-
sashPointerActive: false
|
|
3565
|
-
};
|
|
3566
|
-
};
|
|
3567
|
-
|
|
3568
|
-
const FocusChatDebugTable = 221_139;
|
|
3569
|
-
|
|
3570
|
-
const handleTableFocus = state => {
|
|
3571
|
-
return {
|
|
3572
|
-
...state,
|
|
3573
|
-
focus: FocusChatDebugTable
|
|
3574
|
-
};
|
|
3674
|
+
return result;
|
|
3575
3675
|
};
|
|
3576
3676
|
|
|
3577
|
-
const
|
|
3578
|
-
if (
|
|
3579
|
-
return
|
|
3677
|
+
const getPreviewName = event => {
|
|
3678
|
+
if (typeof event.name === 'string' && event.name) {
|
|
3679
|
+
return event.name;
|
|
3580
3680
|
}
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
...state,
|
|
3584
|
-
sortColumn: value,
|
|
3585
|
-
sortDescending
|
|
3586
|
-
};
|
|
3587
|
-
return withPreservedSelection$1(state, nextState);
|
|
3588
|
-
};
|
|
3589
|
-
|
|
3590
|
-
const getTableResizerId = name => {
|
|
3591
|
-
switch (name) {
|
|
3592
|
-
case 'ResizerOne':
|
|
3593
|
-
return 1;
|
|
3594
|
-
case 'ResizerTwo':
|
|
3595
|
-
return 2;
|
|
3596
|
-
default:
|
|
3597
|
-
return 0;
|
|
3681
|
+
if (typeof event.toolName === 'string' && event.toolName) {
|
|
3682
|
+
return event.toolName;
|
|
3598
3683
|
}
|
|
3684
|
+
return undefined;
|
|
3599
3685
|
};
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
tableResizerDownId: getTableResizerId(name)
|
|
3604
|
-
};
|
|
3686
|
+
|
|
3687
|
+
const hasOwn = (event, key) => {
|
|
3688
|
+
return Object.hasOwn(event, key);
|
|
3605
3689
|
};
|
|
3606
3690
|
|
|
3607
|
-
const
|
|
3608
|
-
if (!
|
|
3609
|
-
return
|
|
3691
|
+
const shouldIncludeArguments = (event, name) => {
|
|
3692
|
+
if (!hasOwn(event, 'arguments')) {
|
|
3693
|
+
return false;
|
|
3610
3694
|
}
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3695
|
+
if (name === 'getWorkspaceUri') {
|
|
3696
|
+
return false;
|
|
3697
|
+
}
|
|
3698
|
+
return true;
|
|
3615
3699
|
};
|
|
3616
3700
|
|
|
3617
|
-
const
|
|
3618
|
-
|
|
3619
|
-
|
|
3701
|
+
const getPayloadEvent = event => {
|
|
3702
|
+
const name = getPreviewName(event);
|
|
3703
|
+
if (name === 'list_files' && hasOwn(event, 'arguments')) {
|
|
3704
|
+
return event.arguments;
|
|
3620
3705
|
}
|
|
3621
|
-
|
|
3622
|
-
...
|
|
3623
|
-
|
|
3706
|
+
const payloadEvent = {
|
|
3707
|
+
...(name === undefined ? {} : {
|
|
3708
|
+
name
|
|
3709
|
+
}),
|
|
3710
|
+
...(shouldIncludeArguments(event, name) ? {
|
|
3711
|
+
arguments: event.arguments
|
|
3712
|
+
} : {}),
|
|
3713
|
+
...(hasOwn(event, 'result') ? {
|
|
3714
|
+
result: event.result
|
|
3715
|
+
} : {})
|
|
3624
3716
|
};
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
const handleTableRowCopy = async (state, eventIndex) => {
|
|
3628
|
-
const currentEvents = getCurrentEvents$1(state);
|
|
3629
|
-
const event = currentEvents[eventIndex];
|
|
3630
|
-
if (!event) {
|
|
3631
|
-
return state;
|
|
3717
|
+
if (Object.keys(payloadEvent).length > 0) {
|
|
3718
|
+
return payloadEvent;
|
|
3632
3719
|
}
|
|
3633
|
-
|
|
3634
|
-
await writeClipBoardText(text);
|
|
3635
|
-
return state;
|
|
3720
|
+
return event;
|
|
3636
3721
|
};
|
|
3637
3722
|
|
|
3638
|
-
const
|
|
3639
|
-
return
|
|
3723
|
+
const isChatMessageAddedEvent = event => {
|
|
3724
|
+
return event.type === 'chat-message-added';
|
|
3640
3725
|
};
|
|
3641
3726
|
|
|
3642
|
-
const
|
|
3643
|
-
return
|
|
3644
|
-
...state,
|
|
3645
|
-
timelineSelectionActive: false,
|
|
3646
|
-
timelineSelectionAnchorSeconds: '',
|
|
3647
|
-
timelineSelectionFocusSeconds: ''
|
|
3648
|
-
});
|
|
3727
|
+
const isChatMessageUpdatedEvent = event => {
|
|
3728
|
+
return event.type === 'chat-message-updated';
|
|
3649
3729
|
};
|
|
3650
3730
|
|
|
3651
|
-
const
|
|
3652
|
-
if (!
|
|
3653
|
-
return
|
|
3654
|
-
timelineEndSeconds: '',
|
|
3655
|
-
timelineStartSeconds: ''
|
|
3656
|
-
};
|
|
3731
|
+
const getResponseContentText = content => {
|
|
3732
|
+
if (!content || typeof content !== 'object') {
|
|
3733
|
+
return undefined;
|
|
3657
3734
|
}
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3735
|
+
if (Array.isArray(content)) {
|
|
3736
|
+
const [firstContentItem] = content;
|
|
3737
|
+
if (!firstContentItem || typeof firstContentItem !== 'object') {
|
|
3738
|
+
return undefined;
|
|
3739
|
+
}
|
|
3740
|
+
const {
|
|
3741
|
+
text
|
|
3742
|
+
} = firstContentItem;
|
|
3743
|
+
return typeof text === 'string' ? text : undefined;
|
|
3744
|
+
}
|
|
3745
|
+
const {
|
|
3746
|
+
text
|
|
3747
|
+
} = content;
|
|
3748
|
+
return typeof text === 'string' ? text : undefined;
|
|
3663
3749
|
};
|
|
3664
|
-
const
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3750
|
+
const getSseResponseCompletedPreviewText = event => {
|
|
3751
|
+
if (event.type !== 'sse-response-completed') {
|
|
3752
|
+
return undefined;
|
|
3753
|
+
}
|
|
3754
|
+
const {
|
|
3755
|
+
value
|
|
3756
|
+
} = event;
|
|
3757
|
+
if (!value || typeof value !== 'object') {
|
|
3758
|
+
return undefined;
|
|
3759
|
+
}
|
|
3760
|
+
const {
|
|
3761
|
+
response
|
|
3762
|
+
} = value;
|
|
3763
|
+
if (!response || typeof response !== 'object') {
|
|
3764
|
+
return undefined;
|
|
3765
|
+
}
|
|
3766
|
+
const {
|
|
3767
|
+
output
|
|
3768
|
+
} = response;
|
|
3769
|
+
if (!Array.isArray(output) || output.length === 0) {
|
|
3770
|
+
return undefined;
|
|
3771
|
+
}
|
|
3772
|
+
const [firstOutput] = output;
|
|
3773
|
+
if (!firstOutput || typeof firstOutput !== 'object') {
|
|
3774
|
+
return undefined;
|
|
3775
|
+
}
|
|
3776
|
+
const {
|
|
3777
|
+
content
|
|
3778
|
+
} = firstOutput;
|
|
3779
|
+
return getResponseContentText(content);
|
|
3780
|
+
};
|
|
3781
|
+
const getPreviewMessageText = event => {
|
|
3782
|
+
if (isChatMessageUpdatedEvent(event) && typeof event.text === 'string') {
|
|
3783
|
+
return event.text;
|
|
3784
|
+
}
|
|
3785
|
+
const sseResponseCompletedPreviewText = getSseResponseCompletedPreviewText(event);
|
|
3786
|
+
if (sseResponseCompletedPreviewText !== undefined) {
|
|
3787
|
+
return sseResponseCompletedPreviewText;
|
|
3788
|
+
}
|
|
3789
|
+
if (!isChatMessageAddedEvent(event)) {
|
|
3790
|
+
return undefined;
|
|
3791
|
+
}
|
|
3792
|
+
const {
|
|
3793
|
+
message
|
|
3794
|
+
} = event;
|
|
3795
|
+
if (!message || typeof message !== 'object') {
|
|
3796
|
+
return undefined;
|
|
3797
|
+
}
|
|
3798
|
+
if (!Object.hasOwn(message, 'text')) {
|
|
3799
|
+
return undefined;
|
|
3800
|
+
}
|
|
3801
|
+
const {
|
|
3802
|
+
text
|
|
3803
|
+
} = message;
|
|
3804
|
+
if (typeof text !== 'string') {
|
|
3805
|
+
return undefined;
|
|
3806
|
+
}
|
|
3807
|
+
return text;
|
|
3808
|
+
};
|
|
3809
|
+
|
|
3810
|
+
const getReadFilePreviewText = (event, name) => {
|
|
3811
|
+
if (name !== 'read_file') {
|
|
3812
|
+
return undefined;
|
|
3813
|
+
}
|
|
3814
|
+
const {
|
|
3815
|
+
result
|
|
3816
|
+
} = event;
|
|
3817
|
+
if (typeof result !== 'string') {
|
|
3818
|
+
return undefined;
|
|
3819
|
+
}
|
|
3820
|
+
return result;
|
|
3821
|
+
};
|
|
3822
|
+
|
|
3823
|
+
const getWriteFilePreviewText = (event, name) => {
|
|
3824
|
+
if (name !== 'write_file') {
|
|
3825
|
+
return undefined;
|
|
3826
|
+
}
|
|
3827
|
+
const {
|
|
3828
|
+
arguments: toolArguments
|
|
3829
|
+
} = event;
|
|
3830
|
+
if (typeof toolArguments !== 'object' || toolArguments === null || !Object.hasOwn(toolArguments, 'content')) {
|
|
3831
|
+
return undefined;
|
|
3832
|
+
}
|
|
3833
|
+
const {
|
|
3834
|
+
content
|
|
3835
|
+
} = toolArguments;
|
|
3836
|
+
if (typeof content !== 'string') {
|
|
3837
|
+
return undefined;
|
|
3838
|
+
}
|
|
3839
|
+
return content;
|
|
3840
|
+
};
|
|
3841
|
+
|
|
3842
|
+
const getPreviewEvent = event => {
|
|
3843
|
+
const selectedEventPreview = getSelectedEventPreview(event);
|
|
3844
|
+
if (selectedEventPreview !== undefined) {
|
|
3845
|
+
return selectedEventPreview;
|
|
3846
|
+
}
|
|
3847
|
+
const previewMessageText = getPreviewMessageText(event);
|
|
3848
|
+
if (previewMessageText !== undefined) {
|
|
3849
|
+
return previewMessageText;
|
|
3850
|
+
}
|
|
3851
|
+
const name = getPreviewName(event);
|
|
3852
|
+
const writeFilePreviewText = getWriteFilePreviewText(event, name);
|
|
3853
|
+
if (writeFilePreviewText !== undefined) {
|
|
3854
|
+
return writeFilePreviewText;
|
|
3855
|
+
}
|
|
3856
|
+
const readFilePreviewText = getReadFilePreviewText(event, name);
|
|
3857
|
+
if (readFilePreviewText !== undefined) {
|
|
3858
|
+
return readFilePreviewText;
|
|
3859
|
+
}
|
|
3860
|
+
const listFilesPreviewEvent = getListFilesPreviewEvent(event, name);
|
|
3861
|
+
if (listFilesPreviewEvent !== undefined) {
|
|
3862
|
+
return listFilesPreviewEvent;
|
|
3863
|
+
}
|
|
3864
|
+
return getPayloadEvent(event);
|
|
3865
|
+
};
|
|
3866
|
+
|
|
3867
|
+
const previewTextRowHeight = 20;
|
|
3868
|
+
const defaultPreviewTextColumnWidth = 9;
|
|
3869
|
+
const clamp = (value, min, max) => {
|
|
3870
|
+
return Math.min(Math.max(value, min), max);
|
|
3871
|
+
};
|
|
3872
|
+
const getPreviewTextCursorFromPoint = (value, x, y) => {
|
|
3873
|
+
const lines = value.split('\n');
|
|
3874
|
+
const rowIndex = clamp(Math.floor(Math.max(y, 0) / previewTextRowHeight), 0, Math.max(lines.length - 1, 0));
|
|
3875
|
+
const line = lines[rowIndex] || '';
|
|
3876
|
+
const columnIndex = clamp(Math.floor(Math.max(x, 0) / defaultPreviewTextColumnWidth), 0, line.length);
|
|
3877
|
+
return {
|
|
3878
|
+
columnIndex,
|
|
3879
|
+
rowIndex
|
|
3880
|
+
};
|
|
3881
|
+
};
|
|
3882
|
+
const getPreviewTextCursorStyle = cursor => {
|
|
3883
|
+
return `height: ${previewTextRowHeight}px; left: ${cursor.columnIndex * defaultPreviewTextColumnWidth}px; top: ${cursor.rowIndex * previewTextRowHeight}px; width: 0px;`;
|
|
3884
|
+
};
|
|
3885
|
+
|
|
3886
|
+
const hasNumberedTextPreview = (state, previewEvent) => {
|
|
3887
|
+
if (typeof previewEvent !== 'string') {
|
|
3888
|
+
return false;
|
|
3889
|
+
}
|
|
3890
|
+
if (previewEvent === ImageCouldNotBeLoaded) {
|
|
3891
|
+
return false;
|
|
3892
|
+
}
|
|
3893
|
+
return !state.selectedEvent || !isChatMessageUpdatedEvent(state.selectedEvent);
|
|
3894
|
+
};
|
|
3895
|
+
const handlePreviewTextPointerDown = (state, x, y) => {
|
|
3896
|
+
if (!state.selectedEvent) {
|
|
3897
|
+
return state;
|
|
3898
|
+
}
|
|
3899
|
+
const previewEvent = getPreviewEvent(state.selectedEvent);
|
|
3900
|
+
if (!hasNumberedTextPreview(state, previewEvent)) {
|
|
3901
|
+
return state;
|
|
3902
|
+
}
|
|
3903
|
+
const cursor = getPreviewTextCursorFromPoint(previewEvent, x, y);
|
|
3904
|
+
if (state.previewTextCursorColumnIndex === cursor.columnIndex && state.previewTextCursorRowIndex === cursor.rowIndex) {
|
|
3905
|
+
return state;
|
|
3906
|
+
}
|
|
3907
|
+
return {
|
|
3908
|
+
...state,
|
|
3909
|
+
previewTextCursorColumnIndex: cursor.columnIndex,
|
|
3910
|
+
previewTextCursorRowIndex: cursor.rowIndex
|
|
3911
|
+
};
|
|
3912
|
+
};
|
|
3913
|
+
|
|
3914
|
+
const handleSashPointerDown = (state, eventX, eventY) => {
|
|
3915
|
+
if (state.sashPointerActive) {
|
|
3916
|
+
return state;
|
|
3917
|
+
}
|
|
3918
|
+
return {
|
|
3919
|
+
...state,
|
|
3920
|
+
sashPointerActive: true
|
|
3921
|
+
};
|
|
3922
|
+
};
|
|
3923
|
+
|
|
3924
|
+
const handleSashPointerMove = (state, eventX, eventY) => {
|
|
3925
|
+
if (!state.sashPointerActive) {
|
|
3926
|
+
return state;
|
|
3927
|
+
}
|
|
3928
|
+
return {
|
|
3929
|
+
...state,
|
|
3930
|
+
tableWidth: getTableWidthFromClientX(state.x, state.width, eventX)
|
|
3931
|
+
};
|
|
3932
|
+
};
|
|
3933
|
+
|
|
3934
|
+
const handleSashPointerUp = (state, eventX, eventY) => {
|
|
3935
|
+
if (!state.sashPointerActive) {
|
|
3936
|
+
return state;
|
|
3937
|
+
}
|
|
3938
|
+
return {
|
|
3939
|
+
...state,
|
|
3940
|
+
sashPointerActive: false
|
|
3941
|
+
};
|
|
3942
|
+
};
|
|
3943
|
+
|
|
3944
|
+
const FocusChatDebugTable = 221_139;
|
|
3945
|
+
|
|
3946
|
+
const handleTableFocus = state => {
|
|
3947
|
+
return {
|
|
3948
|
+
...state,
|
|
3949
|
+
focus: FocusChatDebugTable
|
|
3950
|
+
};
|
|
3951
|
+
};
|
|
3952
|
+
|
|
3953
|
+
const handleTableHeaderClick = (state, value) => {
|
|
3954
|
+
if (!isTableColumn(value)) {
|
|
3955
|
+
return state;
|
|
3956
|
+
}
|
|
3957
|
+
const sortDescending = state.sortColumn === value ? !state.sortDescending : false;
|
|
3958
|
+
const nextState = {
|
|
3959
|
+
...state,
|
|
3960
|
+
sortColumn: value,
|
|
3961
|
+
sortDescending
|
|
3962
|
+
};
|
|
3963
|
+
return withPreservedSelection$1(state, nextState);
|
|
3964
|
+
};
|
|
3965
|
+
|
|
3966
|
+
const getTableResizerId = name => {
|
|
3967
|
+
switch (name) {
|
|
3968
|
+
case 'ResizerOne':
|
|
3969
|
+
return 1;
|
|
3970
|
+
case 'ResizerTwo':
|
|
3971
|
+
return 2;
|
|
3972
|
+
default:
|
|
3973
|
+
return 0;
|
|
3974
|
+
}
|
|
3975
|
+
};
|
|
3976
|
+
const handleTableResizerPointerDown = (state, name, clientX) => {
|
|
3977
|
+
return {
|
|
3978
|
+
...state,
|
|
3979
|
+
tableResizerDownId: getTableResizerId(name)
|
|
3980
|
+
};
|
|
3981
|
+
};
|
|
3982
|
+
|
|
3983
|
+
const handleTableResizerPointerMove = (state, clientX) => {
|
|
3984
|
+
if (!state.tableResizerDownId) {
|
|
3985
|
+
return state;
|
|
3986
|
+
}
|
|
3987
|
+
return {
|
|
3988
|
+
...state,
|
|
3989
|
+
tableColumnWidths: getResizedTableColumnWidths(state.width, state.tableWidth, getVisibleTableColumns(state.tableColumns), state.tableColumnWidths, state.x, clientX, state.tableResizerDownId)
|
|
3990
|
+
};
|
|
3991
|
+
};
|
|
3992
|
+
|
|
3993
|
+
const handleTableResizerPointerUp = state => {
|
|
3994
|
+
if (!state.tableResizerDownId) {
|
|
3995
|
+
return state;
|
|
3996
|
+
}
|
|
3997
|
+
return {
|
|
3998
|
+
...state,
|
|
3999
|
+
tableResizerDownId: 0
|
|
4000
|
+
};
|
|
4001
|
+
};
|
|
4002
|
+
|
|
4003
|
+
const handleTableRowCopy = async (state, eventIndex) => {
|
|
4004
|
+
const currentEvents = getCurrentEvents$1(state);
|
|
4005
|
+
const event = currentEvents[eventIndex];
|
|
4006
|
+
if (!event) {
|
|
4007
|
+
return state;
|
|
4008
|
+
}
|
|
4009
|
+
const text = JSON.stringify(event, null, 2);
|
|
4010
|
+
await writeClipBoardText(text);
|
|
4011
|
+
return state;
|
|
4012
|
+
};
|
|
4013
|
+
|
|
4014
|
+
const getHandleOffsetAndPercent = (tableBodyHeight, scrollBarHeight, relativeY) => {
|
|
4015
|
+
const halfScrollBarHeight = scrollBarHeight / 2;
|
|
4016
|
+
if (relativeY <= halfScrollBarHeight) {
|
|
4017
|
+
return {
|
|
4018
|
+
handleOffset: relativeY,
|
|
4019
|
+
percent: 0
|
|
4020
|
+
};
|
|
4021
|
+
}
|
|
4022
|
+
if (relativeY <= tableBodyHeight - halfScrollBarHeight) {
|
|
4023
|
+
return {
|
|
4024
|
+
handleOffset: halfScrollBarHeight,
|
|
4025
|
+
percent: (relativeY - halfScrollBarHeight) / Math.max(1, tableBodyHeight - scrollBarHeight)
|
|
4026
|
+
};
|
|
4027
|
+
}
|
|
4028
|
+
return {
|
|
4029
|
+
handleOffset: scrollBarHeight - tableBodyHeight + relativeY,
|
|
4030
|
+
percent: 1
|
|
4031
|
+
};
|
|
4032
|
+
};
|
|
4033
|
+
const handleTableScrollBarPointerDown = (state, eventY) => {
|
|
4034
|
+
const currentEvents = getCurrentEvents$2(state);
|
|
4035
|
+
const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
|
|
4036
|
+
const scrollBarHeight = getScrollBarHeight(currentEvents.length, tableBodyHeight);
|
|
4037
|
+
if (tableBodyHeight === 0 || scrollBarHeight === 0) {
|
|
4038
|
+
return state;
|
|
4039
|
+
}
|
|
4040
|
+
const relativeY = eventY - getTableBodyY(state, currentEvents.length > 0);
|
|
4041
|
+
const {
|
|
4042
|
+
handleOffset,
|
|
4043
|
+
percent
|
|
4044
|
+
} = getHandleOffsetAndPercent(tableBodyHeight, scrollBarHeight, relativeY);
|
|
4045
|
+
const maxDeltaY = getMaxDeltaY(currentEvents.length, tableBodyHeight);
|
|
4046
|
+
const nextState = setTableDeltaY(state, percent * maxDeltaY);
|
|
4047
|
+
return {
|
|
4048
|
+
...nextState,
|
|
4049
|
+
tableScrollBarHandleOffset: handleOffset,
|
|
4050
|
+
tableScrollBarPointerActive: true
|
|
4051
|
+
};
|
|
4052
|
+
};
|
|
4053
|
+
|
|
4054
|
+
const handleTableScrollBarPointerMove = (state, eventY) => {
|
|
4055
|
+
if (!state.tableScrollBarPointerActive) {
|
|
4056
|
+
return state;
|
|
4057
|
+
}
|
|
4058
|
+
const currentEvents = getCurrentEvents$2(state);
|
|
4059
|
+
const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
|
|
4060
|
+
const scrollBarHeight = getScrollBarHeight(currentEvents.length, tableBodyHeight);
|
|
4061
|
+
if (tableBodyHeight === 0 || scrollBarHeight === 0) {
|
|
4062
|
+
return state;
|
|
4063
|
+
}
|
|
4064
|
+
const relativeY = eventY - getTableBodyY(state, currentEvents.length > 0);
|
|
4065
|
+
const nextHandleTop = Math.max(0, Math.min(tableBodyHeight - scrollBarHeight, relativeY - state.tableScrollBarHandleOffset));
|
|
4066
|
+
const percent = nextHandleTop / Math.max(1, tableBodyHeight - scrollBarHeight);
|
|
4067
|
+
const maxDeltaY = getMaxDeltaY(currentEvents.length, tableBodyHeight);
|
|
4068
|
+
const nextState = setTableDeltaY(state, percent * maxDeltaY);
|
|
4069
|
+
return {
|
|
4070
|
+
...nextState,
|
|
4071
|
+
tableScrollBarPointerActive: true
|
|
4072
|
+
};
|
|
4073
|
+
};
|
|
4074
|
+
|
|
4075
|
+
const handleTableScrollBarPointerUp = state => {
|
|
4076
|
+
if (!state.tableScrollBarPointerActive && state.tableScrollBarHandleOffset === 0) {
|
|
4077
|
+
return state;
|
|
4078
|
+
}
|
|
4079
|
+
return {
|
|
4080
|
+
...state,
|
|
4081
|
+
tableScrollBarHandleOffset: 0,
|
|
4082
|
+
tableScrollBarPointerActive: false
|
|
4083
|
+
};
|
|
4084
|
+
};
|
|
4085
|
+
|
|
4086
|
+
const handleTableWheel = (state, deltaY) => {
|
|
4087
|
+
return setTableDeltaY(state, state.tableDeltaY + deltaY);
|
|
4088
|
+
};
|
|
4089
|
+
|
|
4090
|
+
const handleTimelineContextMenu = state => {
|
|
4091
|
+
return state;
|
|
4092
|
+
};
|
|
4093
|
+
|
|
4094
|
+
const clearTimelineSelectionState = state => {
|
|
4095
|
+
return getStateWithTimelineInfo({
|
|
4096
|
+
...state,
|
|
4097
|
+
timelineSelectionActive: false,
|
|
4098
|
+
timelineSelectionAnchorSeconds: '',
|
|
4099
|
+
timelineSelectionFocusSeconds: ''
|
|
4100
|
+
});
|
|
4101
|
+
};
|
|
4102
|
+
|
|
4103
|
+
const parseTimelineRangePreset = value => {
|
|
4104
|
+
if (!value) {
|
|
4105
|
+
return {
|
|
4106
|
+
timelineEndSeconds: '',
|
|
4107
|
+
timelineStartSeconds: ''
|
|
4108
|
+
};
|
|
4109
|
+
}
|
|
4110
|
+
const [timelineStartSeconds = '', timelineEndSeconds = ''] = value.split(':', 2);
|
|
4111
|
+
return {
|
|
4112
|
+
timelineEndSeconds,
|
|
4113
|
+
timelineStartSeconds
|
|
4114
|
+
};
|
|
4115
|
+
};
|
|
4116
|
+
const handleTimelineStartSeconds = (state, value) => {
|
|
4117
|
+
const nextState = {
|
|
4118
|
+
...state,
|
|
4119
|
+
timelineStartSeconds: value
|
|
4120
|
+
};
|
|
4121
|
+
return withPreservedSelection$1(state, nextState);
|
|
3670
4122
|
};
|
|
3671
4123
|
const handleTimelineEndSeconds = (state, value) => {
|
|
3672
4124
|
const nextState = {
|
|
@@ -3694,8 +4146,8 @@ const formatTimelinePresetValue = value => {
|
|
|
3694
4146
|
return value.toFixed(3).replace(trailingZeroFractionRegex, '').replace(trailingFractionZeroRegex, '$1');
|
|
3695
4147
|
};
|
|
3696
4148
|
|
|
3697
|
-
const getTimelineEventX =
|
|
3698
|
-
return
|
|
4149
|
+
const getTimelineEventX = eventX => {
|
|
4150
|
+
return eventX;
|
|
3699
4151
|
};
|
|
3700
4152
|
|
|
3701
4153
|
const getTimelineLeft = state => {
|
|
@@ -3757,7 +4209,7 @@ const handleTimelinePointerDown = (state, name, eventX) => {
|
|
|
3757
4209
|
}
|
|
3758
4210
|
const timelineLeft = getTimelineLeft(state);
|
|
3759
4211
|
const timelineWidth = getTimelineWidth(state);
|
|
3760
|
-
const clientX = getTimelineEventX(
|
|
4212
|
+
const clientX = getTimelineEventX(eventX);
|
|
3761
4213
|
const seconds = getTimelineSecondsFromClientX(state.timelineEvents, clientX, timelineLeft, timelineWidth);
|
|
3762
4214
|
if (seconds === undefined) {
|
|
3763
4215
|
return state;
|
|
@@ -3787,7 +4239,7 @@ const handleTimelinePointerLeave = state => {
|
|
|
3787
4239
|
const handleTimelinePointerMove = (state, eventX) => {
|
|
3788
4240
|
const timelineLeft = getTimelineLeft(state);
|
|
3789
4241
|
const timelineWidth = getTimelineWidth(state);
|
|
3790
|
-
const clientX = getTimelineEventX(
|
|
4242
|
+
const clientX = getTimelineEventX(eventX);
|
|
3791
4243
|
const seconds = getTimelineSecondsFromClientX(state.timelineEvents, clientX, timelineLeft, timelineWidth);
|
|
3792
4244
|
if (seconds === undefined) {
|
|
3793
4245
|
return state;
|
|
@@ -3814,7 +4266,7 @@ const handleTimelinePointerUp = (state, eventX) => {
|
|
|
3814
4266
|
}
|
|
3815
4267
|
const timelineLeft = getTimelineLeft(state);
|
|
3816
4268
|
const timelineWidth = getTimelineWidth(state);
|
|
3817
|
-
const clientX = getTimelineEventX(
|
|
4269
|
+
const clientX = getTimelineEventX(eventX);
|
|
3818
4270
|
const focusSeconds = getTimelineSecondsFromClientX(state.timelineEvents, clientX, timelineLeft, timelineWidth);
|
|
3819
4271
|
if (focusSeconds === undefined) {
|
|
3820
4272
|
return clearTimelineSelectionState(state);
|
|
@@ -3835,13 +4287,15 @@ const handleTimelinePointerUp = (state, eventX) => {
|
|
|
3835
4287
|
const setUseDevtoolsLayout = (state, checked) => {
|
|
3836
4288
|
const useDevtoolsLayout = getBoolean(checked);
|
|
3837
4289
|
const selectedEventIndex = useDevtoolsLayout ? getSelectedEventIndex$1(state) : null;
|
|
3838
|
-
return {
|
|
4290
|
+
return applyVirtualTableState({
|
|
3839
4291
|
...state,
|
|
4292
|
+
previewTextCursorColumnIndex: useDevtoolsLayout && selectedEventIndex !== null ? state.previewTextCursorColumnIndex : null,
|
|
4293
|
+
previewTextCursorRowIndex: useDevtoolsLayout && selectedEventIndex !== null ? state.previewTextCursorRowIndex : null,
|
|
3840
4294
|
selectedEvent: useDevtoolsLayout && selectedEventIndex !== null ? state.selectedEvent : null,
|
|
3841
4295
|
selectedEventId: useDevtoolsLayout && selectedEventIndex !== null ? state.selectedEventId : null,
|
|
3842
4296
|
selectedEventIndex,
|
|
3843
4297
|
useDevtoolsLayout
|
|
3844
|
-
};
|
|
4298
|
+
});
|
|
3845
4299
|
};
|
|
3846
4300
|
|
|
3847
4301
|
const handleShowEventStreamFinishedEvents = (state, checked) => {
|
|
@@ -3866,15 +4320,29 @@ const handleShowResponsePartEvents = (state, checked) => {
|
|
|
3866
4320
|
return withPreservedSelection$1(state, nextState);
|
|
3867
4321
|
};
|
|
3868
4322
|
|
|
4323
|
+
const rpcId = 'handleStorageWorkerUpdate';
|
|
4324
|
+
const handleStorageWorkerUpdate = async uid => {
|
|
4325
|
+
await invoke('Viewlet.executeViewletCommand', uid, 'ChatDebug.handleClickRefresh');
|
|
4326
|
+
};
|
|
4327
|
+
|
|
4328
|
+
const loadContentDependencies = loadEventsDependencies;
|
|
4329
|
+
loadContentDependencies.registerUpdateListener = registerUpdateListener;
|
|
3869
4330
|
const loadContent = async (state, savedState) => {
|
|
3870
4331
|
await getPreference('chatDebug.autoRefresh');
|
|
3871
4332
|
const nextState = await loadEventsFromUri(restoreSavedState(state, savedState));
|
|
3872
|
-
|
|
4333
|
+
if (nextState.sessionId) {
|
|
4334
|
+
try {
|
|
4335
|
+
await loadContentDependencies.registerUpdateListener(nextState.sessionId, rpcId, nextState.uid);
|
|
4336
|
+
} catch {
|
|
4337
|
+
// ignore
|
|
4338
|
+
}
|
|
4339
|
+
}
|
|
4340
|
+
return applyVirtualTableState({
|
|
3873
4341
|
...nextState,
|
|
3874
4342
|
categoryFilters: createCategoryFilters(getSelectedEventCategoryFilters(nextState.categoryFilters)),
|
|
3875
4343
|
detailTabs: createDetailTabs(getSelectedDetailTab(nextState.detailTabs), nextState.selectedEvent),
|
|
3876
4344
|
tableColumns: createTableColumns()
|
|
3877
|
-
};
|
|
4345
|
+
});
|
|
3878
4346
|
};
|
|
3879
4347
|
|
|
3880
4348
|
// cspell:ignore liga calt
|
|
@@ -3882,9 +4350,16 @@ const loadContent = async (state, savedState) => {
|
|
|
3882
4350
|
const getCss = state => {
|
|
3883
4351
|
const hasSelectedEvent = !!state.selectedEvent;
|
|
3884
4352
|
const tableWidth = hasSelectedEvent ? clampTableWidth(state.width, state.tableWidth) : getMainWidth(state.width);
|
|
4353
|
+
const currentEvents = getCurrentEvents$2(state);
|
|
4354
|
+
const tableBodyHeight = getTableBodyHeight(state, currentEvents.length);
|
|
4355
|
+
const scrollBarHeight = getScrollBarHeight(currentEvents.length, tableBodyHeight);
|
|
4356
|
+
const maxDeltaY = getMaxDeltaY(currentEvents.length, tableBodyHeight);
|
|
4357
|
+
const showScrollBar = scrollBarHeight > 0;
|
|
4358
|
+
const scrollBarOffset = getScrollBarOffset(state.tableDeltaY, maxDeltaY, tableBodyHeight, scrollBarHeight);
|
|
4359
|
+
const tableContentWidth = Math.max(0, tableWidth - (showScrollBar ? devtoolsTableScrollBarWidth : 0));
|
|
3885
4360
|
const detailsWidth = hasSelectedEvent ? getDetailsWidth(state.width, state.tableWidth) : 0;
|
|
3886
4361
|
const topSize = state.width >= state.largeBreakpoint ? 30 : state.width >= state.mediumBreakpoint ? 60 : 60;
|
|
3887
|
-
const tableColumnLayout = getTableColumnLayout(
|
|
4362
|
+
const tableColumnLayout = getTableColumnLayout(tableContentWidth, getVisibleTableColumns(state.tableColumns), state.tableColumnWidths);
|
|
3888
4363
|
const [tableColZeroWidth = 0, tableColOneWidth = 0, tableColTwoWidth = 0] = tableColumnLayout.visibleColumnWidths;
|
|
3889
4364
|
const resizerOneLeft = tableColumnLayout.resizerLefts[0] ?? 0;
|
|
3890
4365
|
const resizerTwoLeft = tableColumnLayout.resizerLefts[1] ?? 0;
|
|
@@ -3894,6 +4369,7 @@ const getCss = state => {
|
|
|
3894
4369
|
} = state.timelineInfo;
|
|
3895
4370
|
return `
|
|
3896
4371
|
.ChatDebugView {
|
|
4372
|
+
--ChatDebugViewTableBodyHeight: ${tableBodyHeight}px;
|
|
3897
4373
|
--ChatDebugViewTableHeaderHeight: ${devtoolsTableHeaderHeight}px;
|
|
3898
4374
|
--ChatDebugViewTableColZeroWidth: ${tableColZeroWidth}px;
|
|
3899
4375
|
--ChatDebugViewTableColOneWidth: ${tableColOneWidth}px;
|
|
@@ -3901,6 +4377,9 @@ const getCss = state => {
|
|
|
3901
4377
|
--ChatDebugViewDetailsWidth: ${detailsWidth}px;
|
|
3902
4378
|
--ChatDebugViewDurationColumnWidth: ${state.tableColumnWidths.duration}px;
|
|
3903
4379
|
--ChatDebugViewTableRowHeight: ${devtoolsTableRowHeight}px;
|
|
4380
|
+
--ChatDebugViewTableScrollBarHeight: ${scrollBarHeight}px;
|
|
4381
|
+
--ChatDebugViewTableScrollBarOffset: ${scrollBarOffset}px;
|
|
4382
|
+
--ChatDebugViewTableScrollBarWidth: ${showScrollBar ? devtoolsTableScrollBarWidth : 0}px;
|
|
3904
4383
|
--ResizerOneLeft: ${resizerOneLeft}px;
|
|
3905
4384
|
--ResizerTwoLeft: ${resizerTwoLeft}px;
|
|
3906
4385
|
--ChatDebugViewSashWidth: ${sashWidth}px;
|
|
@@ -3913,6 +4392,36 @@ const getCss = state => {
|
|
|
3913
4392
|
padding: ${viewPadding}px;
|
|
3914
4393
|
}
|
|
3915
4394
|
|
|
4395
|
+
.TableWrapper {
|
|
4396
|
+
height: calc(var(--ChatDebugViewTableHeaderHeight) + var(--ChatDebugViewTableBodyHeight));
|
|
4397
|
+
overflow: hidden;
|
|
4398
|
+
position: relative;
|
|
4399
|
+
}
|
|
4400
|
+
|
|
4401
|
+
.Table {
|
|
4402
|
+
width: calc(100% - var(--ChatDebugViewTableScrollBarWidth));
|
|
4403
|
+
}
|
|
4404
|
+
|
|
4405
|
+
.TableScrollBar {
|
|
4406
|
+
background: rgba(255, 255, 255, 0.06);
|
|
4407
|
+
border-radius: 999px;
|
|
4408
|
+
height: var(--ChatDebugViewTableBodyHeight);
|
|
4409
|
+
position: absolute;
|
|
4410
|
+
right: 0;
|
|
4411
|
+
top: var(--ChatDebugViewTableHeaderHeight);
|
|
4412
|
+
width: var(--ChatDebugViewTableScrollBarWidth);
|
|
4413
|
+
}
|
|
4414
|
+
|
|
4415
|
+
.TableScrollBarThumb {
|
|
4416
|
+
background: rgba(255, 255, 255, 0.22);
|
|
4417
|
+
border-radius: 999px;
|
|
4418
|
+
height: var(--ChatDebugViewTableScrollBarHeight);
|
|
4419
|
+
left: 2px;
|
|
4420
|
+
position: absolute;
|
|
4421
|
+
top: var(--ChatDebugViewTableScrollBarOffset);
|
|
4422
|
+
width: calc(100% - 4px);
|
|
4423
|
+
}
|
|
4424
|
+
|
|
3916
4425
|
`;
|
|
3917
4426
|
};
|
|
3918
4427
|
|
|
@@ -4259,10 +4768,11 @@ const ChatDebugViewQuickFilterPill = 'ChatDebugViewQuickFilterPill';
|
|
|
4259
4768
|
const ChatDebugViewQuickFilterPillSelected = 'ChatDebugViewQuickFilterPillSelected';
|
|
4260
4769
|
const ChatDebugViewQuickFilters = 'ChatDebugViewQuickFilters';
|
|
4261
4770
|
const Sash = 'Sash';
|
|
4262
|
-
const ChatDebugViewSashLine = 'ChatDebugViewSashLine';
|
|
4263
4771
|
const Table = 'Table';
|
|
4264
4772
|
const TableBody = 'TableBody';
|
|
4265
4773
|
const TableSummary = 'TableSummary';
|
|
4774
|
+
const TableScrollBar = 'TableScrollBar';
|
|
4775
|
+
const TableScrollBarThumb = 'TableScrollBarThumb';
|
|
4266
4776
|
const TableWrapper = 'TableWrapper';
|
|
4267
4777
|
const TableWrapperWrapper = 'TableWrapperWrapper';
|
|
4268
4778
|
const FocusOutline = 'FocusOutline';
|
|
@@ -4297,7 +4807,6 @@ const ChatDebugViewTimelineSelectionMarkerEnd = 'ChatDebugViewTimelineSelectionM
|
|
|
4297
4807
|
const ChatDebugViewTimelineSelectionMarkerStart = 'ChatDebugViewTimelineSelectionMarkerStart';
|
|
4298
4808
|
const ChatDebugViewTimelineSelectionOverlay = 'ChatDebugViewTimelineSelectionOverlay';
|
|
4299
4809
|
const ChatDebugViewTimelineSelectionRange = 'ChatDebugViewTimelineSelectionRange';
|
|
4300
|
-
const ChatDebugViewTimelineTop = 'ChatDebugViewTimelineTop';
|
|
4301
4810
|
const ChatDebugViewTiming = 'ChatDebugViewTiming';
|
|
4302
4811
|
const ChatDebugViewTimingLabel = 'ChatDebugViewTimingLabel';
|
|
4303
4812
|
const ChatDebugViewTimingPreview = 'ChatDebugViewTimingPreview';
|
|
@@ -4313,7 +4822,6 @@ const ChatDebugViewTimingValue = 'ChatDebugViewTimingValue';
|
|
|
4313
4822
|
const ChatDebugViewTop = 'ChatDebugViewTop';
|
|
4314
4823
|
const ChatDebugViewTopDevtools = 'ChatDebugViewTop--devtools';
|
|
4315
4824
|
const TableCell = 'TableCell';
|
|
4316
|
-
const ChatDebugViewColumnFixed = 'ChatDebugViewColumnFixed';
|
|
4317
4825
|
const ChatDebugViewCellDuration = 'ChatDebugViewCellDuration';
|
|
4318
4826
|
const ChatDebugViewCellStatusError = 'ChatDebugViewCellStatusError';
|
|
4319
4827
|
const InputBox = 'InputBox';
|
|
@@ -4364,6 +4872,11 @@ const HandleTimelinePointerLeave = 27;
|
|
|
4364
4872
|
const HandleEventRowClick = 28;
|
|
4365
4873
|
const HandleTableFocus = 29;
|
|
4366
4874
|
const HandleDetailTabsFocus = 30;
|
|
4875
|
+
const HandlePreviewTextPointerDown = 31;
|
|
4876
|
+
const HandleTableScrollBarPointerDown = 32;
|
|
4877
|
+
const HandleTableScrollBarPointerMove = 33;
|
|
4878
|
+
const HandleTableScrollBarPointerUp = 34;
|
|
4879
|
+
const HandleTableWheel = 35;
|
|
4367
4880
|
|
|
4368
4881
|
const getFilterInputDom = (filterValue, useDevtoolsLayout) => {
|
|
4369
4882
|
return {
|
|
@@ -4458,17 +4971,22 @@ const getDetailsCloseButtonDom = () => {
|
|
|
4458
4971
|
return detailsCloseButtonDom;
|
|
4459
4972
|
};
|
|
4460
4973
|
|
|
4461
|
-
const
|
|
4974
|
+
const defaultEditorCursor = {
|
|
4975
|
+
columnIndex: 0,
|
|
4976
|
+
rowIndex: 1
|
|
4977
|
+
};
|
|
4978
|
+
const getEditorSelectionDom = (cursor = defaultEditorCursor) => {
|
|
4979
|
+
const hasCursor = cursor !== null;
|
|
4462
4980
|
return [{
|
|
4463
|
-
childCount: 1,
|
|
4981
|
+
childCount: hasCursor ? 1 : 0,
|
|
4464
4982
|
className: EditorSelections,
|
|
4465
4983
|
type: Div
|
|
4466
|
-
}, {
|
|
4984
|
+
}, ...(hasCursor ? [{
|
|
4467
4985
|
childCount: 0,
|
|
4468
4986
|
className: EditorSelection,
|
|
4469
|
-
style:
|
|
4987
|
+
style: getPreviewTextCursorStyle(cursor),
|
|
4470
4988
|
type: Div
|
|
4471
|
-
}];
|
|
4989
|
+
}] : [])];
|
|
4472
4990
|
};
|
|
4473
4991
|
const getGutterDom = (lineData, showLineNumbers) => {
|
|
4474
4992
|
const gutterNodes = showLineNumbers ? lineData.flatMap((_, index) => {
|
|
@@ -4498,7 +5016,7 @@ const getEditorRowsDom = lineData => {
|
|
|
4498
5016
|
type: Div
|
|
4499
5017
|
}, ...lineData.flatMap(getEditorRowDom)];
|
|
4500
5018
|
};
|
|
4501
|
-
const getEditorDom = (lineData, showLineNumbers = true) => {
|
|
5019
|
+
const getEditorDom = (lineData, showLineNumbers = true, cursor = defaultEditorCursor, onPointerDown) => {
|
|
4502
5020
|
return [{
|
|
4503
5021
|
childCount: 1,
|
|
4504
5022
|
className: EditorContainer,
|
|
@@ -4511,6 +5029,7 @@ const getEditorDom = (lineData, showLineNumbers = true) => {
|
|
|
4511
5029
|
}, ...getGutterDom(lineData, showLineNumbers), {
|
|
4512
5030
|
childCount: 2,
|
|
4513
5031
|
className: EditorContent,
|
|
5032
|
+
onPointerDown,
|
|
4514
5033
|
type: Div
|
|
4515
5034
|
}, {
|
|
4516
5035
|
'aria-autocomplete': 'list',
|
|
@@ -4530,7 +5049,7 @@ const getEditorDom = (lineData, showLineNumbers = true) => {
|
|
|
4530
5049
|
childCount: 2,
|
|
4531
5050
|
className: EditorLayers,
|
|
4532
5051
|
type: Div
|
|
4533
|
-
}, ...getEditorSelectionDom(), ...getEditorRowsDom(lineData)];
|
|
5052
|
+
}, ...getEditorSelectionDom(cursor), ...getEditorRowsDom(lineData)];
|
|
4534
5053
|
};
|
|
4535
5054
|
|
|
4536
5055
|
const isDigit = character => {
|
|
@@ -4703,216 +5222,6 @@ const getPanelId = detailTab => {
|
|
|
4703
5222
|
return `ChatDebugViewDetailsPanel-${detailTab}`;
|
|
4704
5223
|
};
|
|
4705
5224
|
|
|
4706
|
-
const getPreviewName = event => {
|
|
4707
|
-
if (typeof event.name === 'string' && event.name) {
|
|
4708
|
-
return event.name;
|
|
4709
|
-
}
|
|
4710
|
-
if (typeof event.toolName === 'string' && event.toolName) {
|
|
4711
|
-
return event.toolName;
|
|
4712
|
-
}
|
|
4713
|
-
return undefined;
|
|
4714
|
-
};
|
|
4715
|
-
|
|
4716
|
-
const hasOwn = (event, key) => {
|
|
4717
|
-
return Object.hasOwn(event, key);
|
|
4718
|
-
};
|
|
4719
|
-
|
|
4720
|
-
const shouldIncludeArguments = (event, name) => {
|
|
4721
|
-
if (!hasOwn(event, 'arguments')) {
|
|
4722
|
-
return false;
|
|
4723
|
-
}
|
|
4724
|
-
if (name === 'getWorkspaceUri') {
|
|
4725
|
-
return false;
|
|
4726
|
-
}
|
|
4727
|
-
return true;
|
|
4728
|
-
};
|
|
4729
|
-
|
|
4730
|
-
const getPayloadEvent = event => {
|
|
4731
|
-
const name = getPreviewName(event);
|
|
4732
|
-
if (name === 'list_files' && hasOwn(event, 'arguments')) {
|
|
4733
|
-
return event.arguments;
|
|
4734
|
-
}
|
|
4735
|
-
const payloadEvent = {
|
|
4736
|
-
...(name === undefined ? {} : {
|
|
4737
|
-
name
|
|
4738
|
-
}),
|
|
4739
|
-
...(shouldIncludeArguments(event, name) ? {
|
|
4740
|
-
arguments: event.arguments
|
|
4741
|
-
} : {}),
|
|
4742
|
-
...(hasOwn(event, 'result') ? {
|
|
4743
|
-
result: event.result
|
|
4744
|
-
} : {})
|
|
4745
|
-
};
|
|
4746
|
-
if (Object.keys(payloadEvent).length > 0) {
|
|
4747
|
-
return payloadEvent;
|
|
4748
|
-
}
|
|
4749
|
-
return event;
|
|
4750
|
-
};
|
|
4751
|
-
|
|
4752
|
-
const getListFilesPreviewEvent = (event, name) => {
|
|
4753
|
-
if (name !== 'list_files') {
|
|
4754
|
-
return undefined;
|
|
4755
|
-
}
|
|
4756
|
-
const {
|
|
4757
|
-
result
|
|
4758
|
-
} = event;
|
|
4759
|
-
if (typeof result !== 'object' || result === null) {
|
|
4760
|
-
return undefined;
|
|
4761
|
-
}
|
|
4762
|
-
const {
|
|
4763
|
-
entries,
|
|
4764
|
-
error
|
|
4765
|
-
} = result;
|
|
4766
|
-
if (entries !== undefined) {
|
|
4767
|
-
return entries;
|
|
4768
|
-
}
|
|
4769
|
-
return error;
|
|
4770
|
-
};
|
|
4771
|
-
|
|
4772
|
-
const isChatMessageAddedEvent = event => {
|
|
4773
|
-
return event.type === 'chat-message-added';
|
|
4774
|
-
};
|
|
4775
|
-
|
|
4776
|
-
const isChatMessageUpdatedEvent = event => {
|
|
4777
|
-
return event.type === 'chat-message-updated';
|
|
4778
|
-
};
|
|
4779
|
-
|
|
4780
|
-
const getResponseContentText = content => {
|
|
4781
|
-
if (!content || typeof content !== 'object') {
|
|
4782
|
-
return undefined;
|
|
4783
|
-
}
|
|
4784
|
-
if (Array.isArray(content)) {
|
|
4785
|
-
const [firstContentItem] = content;
|
|
4786
|
-
if (!firstContentItem || typeof firstContentItem !== 'object') {
|
|
4787
|
-
return undefined;
|
|
4788
|
-
}
|
|
4789
|
-
const {
|
|
4790
|
-
text
|
|
4791
|
-
} = firstContentItem;
|
|
4792
|
-
return typeof text === 'string' ? text : undefined;
|
|
4793
|
-
}
|
|
4794
|
-
const {
|
|
4795
|
-
text
|
|
4796
|
-
} = content;
|
|
4797
|
-
return typeof text === 'string' ? text : undefined;
|
|
4798
|
-
};
|
|
4799
|
-
const getSseResponseCompletedPreviewText = event => {
|
|
4800
|
-
if (event.type !== 'sse-response-completed') {
|
|
4801
|
-
return undefined;
|
|
4802
|
-
}
|
|
4803
|
-
const {
|
|
4804
|
-
value
|
|
4805
|
-
} = event;
|
|
4806
|
-
if (!value || typeof value !== 'object') {
|
|
4807
|
-
return undefined;
|
|
4808
|
-
}
|
|
4809
|
-
const {
|
|
4810
|
-
response
|
|
4811
|
-
} = value;
|
|
4812
|
-
if (!response || typeof response !== 'object') {
|
|
4813
|
-
return undefined;
|
|
4814
|
-
}
|
|
4815
|
-
const {
|
|
4816
|
-
output
|
|
4817
|
-
} = response;
|
|
4818
|
-
if (!Array.isArray(output) || output.length === 0) {
|
|
4819
|
-
return undefined;
|
|
4820
|
-
}
|
|
4821
|
-
const [firstOutput] = output;
|
|
4822
|
-
if (!firstOutput || typeof firstOutput !== 'object') {
|
|
4823
|
-
return undefined;
|
|
4824
|
-
}
|
|
4825
|
-
const {
|
|
4826
|
-
content
|
|
4827
|
-
} = firstOutput;
|
|
4828
|
-
return getResponseContentText(content);
|
|
4829
|
-
};
|
|
4830
|
-
const getPreviewMessageText = event => {
|
|
4831
|
-
if (isChatMessageUpdatedEvent(event) && typeof event.text === 'string') {
|
|
4832
|
-
return event.text;
|
|
4833
|
-
}
|
|
4834
|
-
const sseResponseCompletedPreviewText = getSseResponseCompletedPreviewText(event);
|
|
4835
|
-
if (sseResponseCompletedPreviewText !== undefined) {
|
|
4836
|
-
return sseResponseCompletedPreviewText;
|
|
4837
|
-
}
|
|
4838
|
-
if (!isChatMessageAddedEvent(event)) {
|
|
4839
|
-
return undefined;
|
|
4840
|
-
}
|
|
4841
|
-
const {
|
|
4842
|
-
message
|
|
4843
|
-
} = event;
|
|
4844
|
-
if (!message || typeof message !== 'object') {
|
|
4845
|
-
return undefined;
|
|
4846
|
-
}
|
|
4847
|
-
if (!Object.hasOwn(message, 'text')) {
|
|
4848
|
-
return undefined;
|
|
4849
|
-
}
|
|
4850
|
-
const {
|
|
4851
|
-
text
|
|
4852
|
-
} = message;
|
|
4853
|
-
if (typeof text !== 'string') {
|
|
4854
|
-
return undefined;
|
|
4855
|
-
}
|
|
4856
|
-
return text;
|
|
4857
|
-
};
|
|
4858
|
-
|
|
4859
|
-
const getReadFilePreviewText = (event, name) => {
|
|
4860
|
-
if (name !== 'read_file') {
|
|
4861
|
-
return undefined;
|
|
4862
|
-
}
|
|
4863
|
-
const {
|
|
4864
|
-
result
|
|
4865
|
-
} = event;
|
|
4866
|
-
if (typeof result !== 'string') {
|
|
4867
|
-
return undefined;
|
|
4868
|
-
}
|
|
4869
|
-
return result;
|
|
4870
|
-
};
|
|
4871
|
-
|
|
4872
|
-
const getWriteFilePreviewText = (event, name) => {
|
|
4873
|
-
if (name !== 'write_file') {
|
|
4874
|
-
return undefined;
|
|
4875
|
-
}
|
|
4876
|
-
const {
|
|
4877
|
-
arguments: toolArguments
|
|
4878
|
-
} = event;
|
|
4879
|
-
if (typeof toolArguments !== 'object' || toolArguments === null || !Object.hasOwn(toolArguments, 'content')) {
|
|
4880
|
-
return undefined;
|
|
4881
|
-
}
|
|
4882
|
-
const {
|
|
4883
|
-
content
|
|
4884
|
-
} = toolArguments;
|
|
4885
|
-
if (typeof content !== 'string') {
|
|
4886
|
-
return undefined;
|
|
4887
|
-
}
|
|
4888
|
-
return content;
|
|
4889
|
-
};
|
|
4890
|
-
|
|
4891
|
-
const getPreviewEvent = event => {
|
|
4892
|
-
const selectedEventPreview = getSelectedEventPreview(event);
|
|
4893
|
-
if (selectedEventPreview !== undefined) {
|
|
4894
|
-
return selectedEventPreview;
|
|
4895
|
-
}
|
|
4896
|
-
const previewMessageText = getPreviewMessageText(event);
|
|
4897
|
-
if (previewMessageText !== undefined) {
|
|
4898
|
-
return previewMessageText;
|
|
4899
|
-
}
|
|
4900
|
-
const name = getPreviewName(event);
|
|
4901
|
-
const writeFilePreviewText = getWriteFilePreviewText(event, name);
|
|
4902
|
-
if (writeFilePreviewText !== undefined) {
|
|
4903
|
-
return writeFilePreviewText;
|
|
4904
|
-
}
|
|
4905
|
-
const readFilePreviewText = getReadFilePreviewText(event, name);
|
|
4906
|
-
if (readFilePreviewText !== undefined) {
|
|
4907
|
-
return readFilePreviewText;
|
|
4908
|
-
}
|
|
4909
|
-
const listFilesPreviewEvent = getListFilesPreviewEvent(event, name);
|
|
4910
|
-
if (listFilesPreviewEvent !== undefined) {
|
|
4911
|
-
return listFilesPreviewEvent;
|
|
4912
|
-
}
|
|
4913
|
-
return getPayloadEvent(event);
|
|
4914
|
-
};
|
|
4915
|
-
|
|
4916
5225
|
const isAttachmentImagePreview = value => {
|
|
4917
5226
|
return typeof value === 'object' && value !== null && value.previewType === 'image';
|
|
4918
5227
|
};
|
|
@@ -4955,11 +5264,11 @@ const getImagePreviewDom = preview => {
|
|
|
4955
5264
|
}, ...getImagePreviewLabelDom(preview)];
|
|
4956
5265
|
};
|
|
4957
5266
|
|
|
4958
|
-
const getTextNode = (value, showLineNumbers = true) => {
|
|
5267
|
+
const getTextNode = (value, showLineNumbers = true, cursor = null) => {
|
|
4959
5268
|
const lines = value.split('\n');
|
|
4960
5269
|
const lineData = lines.map(line => {
|
|
4961
5270
|
return {
|
|
4962
|
-
childCount:
|
|
5271
|
+
childCount: 1,
|
|
4963
5272
|
nodes: [{
|
|
4964
5273
|
childCount: 1,
|
|
4965
5274
|
className: TokenText,
|
|
@@ -4967,15 +5276,15 @@ const getTextNode = (value, showLineNumbers = true) => {
|
|
|
4967
5276
|
}, text(line)]
|
|
4968
5277
|
};
|
|
4969
5278
|
});
|
|
4970
|
-
return getEditorDom(lineData, showLineNumbers);
|
|
5279
|
+
return getEditorDom(lineData, showLineNumbers, cursor, showLineNumbers ? HandlePreviewTextPointerDown : undefined);
|
|
4971
5280
|
};
|
|
4972
5281
|
|
|
4973
|
-
const getPreviewEventNodes = (previewEvent, selectedEvent) => {
|
|
5282
|
+
const getPreviewEventNodes = (previewEvent, selectedEvent, previewTextCursor) => {
|
|
4974
5283
|
if (typeof previewEvent === 'string') {
|
|
4975
5284
|
const isInvalidImageMessage = previewEvent === ImageCouldNotBeLoaded;
|
|
4976
5285
|
const isChatMessageUpdatedPreview = !!selectedEvent && isChatMessageUpdatedEvent(selectedEvent);
|
|
4977
5286
|
const showLineNumbers = !isInvalidImageMessage && !isChatMessageUpdatedPreview;
|
|
4978
|
-
return getTextNode(previewEvent, showLineNumbers);
|
|
5287
|
+
return getTextNode(previewEvent, showLineNumbers, showLineNumbers ? previewTextCursor ?? null : null);
|
|
4979
5288
|
}
|
|
4980
5289
|
if (previewEvent === undefined) {
|
|
4981
5290
|
return [];
|
|
@@ -5151,7 +5460,7 @@ const getNormalizedDetailTabs = (selectedEvent, detailTabs) => {
|
|
|
5151
5460
|
}
|
|
5152
5461
|
return createDetailTabs(getSelectedDetailTab(detailTabs), selectedEvent);
|
|
5153
5462
|
};
|
|
5154
|
-
const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes, responseEventNodes = payloadEventNodes, selectedEvent = null, detailTabs = createDetailTabs()) => {
|
|
5463
|
+
const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes, responseEventNodes = payloadEventNodes, selectedEvent = null, detailTabs = createDetailTabs(), previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null) => {
|
|
5155
5464
|
if (previewEventNodes.length === 0 && payloadEventNodes.length === 0 && responseEventNodes.length === 0) {
|
|
5156
5465
|
return [];
|
|
5157
5466
|
}
|
|
@@ -5172,7 +5481,10 @@ const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes,
|
|
|
5172
5481
|
if (selectedEvent === null) {
|
|
5173
5482
|
return [];
|
|
5174
5483
|
}
|
|
5175
|
-
return getPreviewEventNodes(getPreviewEvent(selectedEvent), selectedEvent
|
|
5484
|
+
return getPreviewEventNodes(getPreviewEvent(selectedEvent), selectedEvent, previewTextCursorRowIndex === null || previewTextCursorColumnIndex === null ? null : {
|
|
5485
|
+
columnIndex: previewTextCursorColumnIndex,
|
|
5486
|
+
rowIndex: previewTextCursorRowIndex
|
|
5487
|
+
});
|
|
5176
5488
|
};
|
|
5177
5489
|
const getDetailContentDomPayload = () => {
|
|
5178
5490
|
if (payloadEventNodes.length > 0) {
|
|
@@ -5218,7 +5530,6 @@ const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes,
|
|
|
5218
5530
|
const getRowCellNodes = (event, isErrorStatus, visibleTableColumns) => {
|
|
5219
5531
|
const orderedVisibleTableColumns = getOrderedVisibleTableColumns(visibleTableColumns);
|
|
5220
5532
|
return orderedVisibleTableColumns.flatMap((column, index) => {
|
|
5221
|
-
const isFixed = index < orderedVisibleTableColumns.length - 1;
|
|
5222
5533
|
switch (column) {
|
|
5223
5534
|
case Duration:
|
|
5224
5535
|
return [{
|
|
@@ -5229,7 +5540,7 @@ const getRowCellNodes = (event, isErrorStatus, visibleTableColumns) => {
|
|
|
5229
5540
|
case Status$1:
|
|
5230
5541
|
return [{
|
|
5231
5542
|
childCount: 1,
|
|
5232
|
-
className: mergeClassNames(TableCell, isErrorStatus ? ChatDebugViewCellStatusError : ''
|
|
5543
|
+
className: mergeClassNames(TableCell, isErrorStatus ? ChatDebugViewCellStatusError : ''),
|
|
5233
5544
|
type: Td
|
|
5234
5545
|
}, text(getStatusText(event))];
|
|
5235
5546
|
case Type:
|
|
@@ -5244,16 +5555,18 @@ const getRowCellNodes = (event, isErrorStatus, visibleTableColumns) => {
|
|
|
5244
5555
|
});
|
|
5245
5556
|
};
|
|
5246
5557
|
|
|
5247
|
-
const getDevtoolsRows = (events, selectedEventIndex, visibleTableColumns = defaultVisibleTableColumns) => {
|
|
5558
|
+
const getDevtoolsRows = (events, selectedEventIndex, visibleTableColumns = defaultVisibleTableColumns, startIndex = 0) => {
|
|
5248
5559
|
return events.flatMap((event, i) => {
|
|
5249
|
-
const
|
|
5560
|
+
const actualIndex = startIndex + i;
|
|
5561
|
+
const isEvenRow = actualIndex % 2 === 1;
|
|
5250
5562
|
const rowClassName = isEvenRow ? TableRowEven : TableRowOdd;
|
|
5251
|
-
const isSelected = selectedEventIndex ===
|
|
5563
|
+
const isSelected = selectedEventIndex === actualIndex;
|
|
5252
5564
|
const isErrorStatus = hasErrorStatus(event);
|
|
5253
5565
|
const rowCellNodes = getRowCellNodes(event, isErrorStatus, visibleTableColumns);
|
|
5254
5566
|
return [{
|
|
5255
5567
|
childCount: visibleTableColumns.length,
|
|
5256
5568
|
className: mergeClassNames(TableRow, rowClassName, isSelected ? TableRowSelected : ''),
|
|
5569
|
+
'data-index': `${actualIndex}`,
|
|
5257
5570
|
type: Tr
|
|
5258
5571
|
}, ...rowCellNodes];
|
|
5259
5572
|
});
|
|
@@ -5274,14 +5587,10 @@ const getEventsClassName = hasSelectedEvent => {
|
|
|
5274
5587
|
};
|
|
5275
5588
|
|
|
5276
5589
|
const sashNodesDom = [{
|
|
5277
|
-
childCount:
|
|
5590
|
+
childCount: 0,
|
|
5278
5591
|
className: Sash,
|
|
5279
5592
|
onPointerDown: HandleSashPointerDown,
|
|
5280
5593
|
type: Button$1
|
|
5281
|
-
}, {
|
|
5282
|
-
childCount: 0,
|
|
5283
|
-
className: ChatDebugViewSashLine,
|
|
5284
|
-
type: Div
|
|
5285
5594
|
}];
|
|
5286
5595
|
const getSashNodesDom = hasSelectedEvent => {
|
|
5287
5596
|
if (!hasSelectedEvent) {
|
|
@@ -5479,26 +5788,44 @@ const getTableResizersDom = visibleTableColumns => {
|
|
|
5479
5788
|
}, ...resizerNodes];
|
|
5480
5789
|
};
|
|
5481
5790
|
|
|
5482
|
-
const
|
|
5791
|
+
const getTableScrollBarDom = visible => {
|
|
5792
|
+
if (!visible) {
|
|
5793
|
+
return [];
|
|
5794
|
+
}
|
|
5795
|
+
return [{
|
|
5796
|
+
childCount: 1,
|
|
5797
|
+
className: TableScrollBar,
|
|
5798
|
+
onPointerDown: HandleTableScrollBarPointerDown,
|
|
5799
|
+
type: Div
|
|
5800
|
+
}, {
|
|
5801
|
+
childCount: 0,
|
|
5802
|
+
className: TableScrollBarThumb,
|
|
5803
|
+
type: Div
|
|
5804
|
+
}];
|
|
5805
|
+
};
|
|
5806
|
+
|
|
5807
|
+
const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summary = '', focus = 0, className = '', role = '', showScrollBar = false) => {
|
|
5483
5808
|
const tableWrapperClassName = mergeClassNames(TableWrapper, focus === FocusChatDebugTable ? FocusOutline : '', className);
|
|
5809
|
+
const scrollBarNodes = getTableScrollBarDom(showScrollBar);
|
|
5484
5810
|
const tableWrapperNode = {
|
|
5485
|
-
childCount: 2,
|
|
5811
|
+
childCount: showScrollBar ? 3 : 2,
|
|
5486
5812
|
className: tableWrapperClassName,
|
|
5813
|
+
onWheel: HandleTableWheel,
|
|
5487
5814
|
type: Div,
|
|
5488
5815
|
...(role ? {
|
|
5489
5816
|
role
|
|
5490
5817
|
} : {})
|
|
5491
5818
|
};
|
|
5492
|
-
return [tableWrapperNode, ...getTableDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summary, focus), ...getTableResizersDom(visibleTableColumns)];
|
|
5819
|
+
return [tableWrapperNode, ...getTableDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summary, focus), ...getTableResizersDom(visibleTableColumns), ...scrollBarNodes];
|
|
5493
5820
|
};
|
|
5494
5821
|
|
|
5495
|
-
const getTableWrapperWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summary = '', focus = 0, className = '', role = '') => {
|
|
5822
|
+
const getTableWrapperWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summary = '', focus = 0, className = '', role = '', showScrollBar = false) => {
|
|
5496
5823
|
const tableSummaryNodes = getTableSummaryDom(summary);
|
|
5497
5824
|
return [{
|
|
5498
5825
|
childCount: tableSummaryNodes.length === 0 ? 1 : 2,
|
|
5499
5826
|
className: TableWrapperWrapper,
|
|
5500
5827
|
type: Div
|
|
5501
|
-
}, ...getTableWrapperDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summary, focus, className, role), ...tableSummaryNodes];
|
|
5828
|
+
}, ...getTableWrapperDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summary, focus, className, role, showScrollBar), ...tableSummaryNodes];
|
|
5502
5829
|
};
|
|
5503
5830
|
|
|
5504
5831
|
const getBucketUnitDom = (unitCount, presetValue) => {
|
|
@@ -5624,36 +5951,31 @@ const getTimelineBadgeNodes = timelineInfo => {
|
|
|
5624
5951
|
};
|
|
5625
5952
|
|
|
5626
5953
|
const getTimelineSummary = timelineInfo => {
|
|
5954
|
+
if (timelineInfo.durationSeconds === 0) {
|
|
5955
|
+
return '';
|
|
5956
|
+
}
|
|
5627
5957
|
if (timelineInfo.hasSelection && timelineInfo.startSeconds !== null && timelineInfo.endSeconds !== null) {
|
|
5628
5958
|
return windowSummary(formatTimelineSeconds(timelineInfo.startSeconds), formatTimelineSeconds(timelineInfo.endSeconds), formatTimelineSeconds(timelineInfo.durationSeconds));
|
|
5629
5959
|
}
|
|
5630
5960
|
return windowSummary('0s', formatTimelineSeconds(timelineInfo.durationSeconds), formatTimelineSeconds(timelineInfo.durationSeconds));
|
|
5631
5961
|
};
|
|
5632
5962
|
|
|
5633
|
-
const getTimelineTopDom = timelineInfo => {
|
|
5634
|
-
return [{
|
|
5635
|
-
childCount: 1,
|
|
5636
|
-
className: ChatDebugViewTimelineTop,
|
|
5637
|
-
type: Div
|
|
5638
|
-
}, text(getTimelineSummary(timelineInfo))];
|
|
5639
|
-
};
|
|
5640
|
-
|
|
5641
5963
|
// cspell:ignore gettimelinedom
|
|
5642
5964
|
const getTimelineDom = (timelineInfo, hoverPercent = null) => {
|
|
5643
5965
|
if (timelineInfo.buckets.length === 0) {
|
|
5644
5966
|
return [];
|
|
5645
5967
|
}
|
|
5968
|
+
const summary = getTimelineSummary(timelineInfo);
|
|
5646
5969
|
const badgeNodes = getTimelineBadgeNodes(timelineInfo);
|
|
5647
5970
|
const bucketNodes = getBucketsDom(timelineInfo.buckets);
|
|
5648
5971
|
const selectionNodes = getSelectionNodesDom(timelineInfo.hasSelection, timelineInfo.selectionStartPercent, timelineInfo.selectionEndPercent);
|
|
5649
5972
|
const cursorGuideNodes = getCursorGuideNodes(hoverPercent);
|
|
5650
|
-
const timelineTopDom = getTimelineTopDom(timelineInfo);
|
|
5651
5973
|
return [{
|
|
5652
|
-
childCount: 2,
|
|
5974
|
+
childCount: summary ? 2 : 1,
|
|
5653
5975
|
className: ChatDebugViewTimeline,
|
|
5654
5976
|
onContextMenu: HandleTimelineContextMenu,
|
|
5655
5977
|
type: Section
|
|
5656
|
-
}, ...
|
|
5978
|
+
}, ...(summary ? [text(summary)] : []), {
|
|
5657
5979
|
childCount: 3,
|
|
5658
5980
|
className: ChatDebugViewTimelineInteractive,
|
|
5659
5981
|
onDblClick: HandleTimelineDoubleClick,
|
|
@@ -5674,20 +5996,25 @@ const getTimelineDom = (timelineInfo, hoverPercent = null) => {
|
|
|
5674
5996
|
}, ...selectionNodes];
|
|
5675
5997
|
};
|
|
5676
5998
|
|
|
5677
|
-
const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage = noEventsFound(), timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', detailTabs = createDetailTabs(), visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0) => {
|
|
5678
|
-
const
|
|
5999
|
+
const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage = noEventsFound(), timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', detailTabs = createDetailTabs(), visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0, previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, minLineY = 0, maxLineY = events.length) => {
|
|
6000
|
+
const visibleEvents = events.slice(minLineY, maxLineY);
|
|
6001
|
+
const rowNodes = getDevtoolsRows(visibleEvents, selectedEventIndex, visibleTableColumns, minLineY);
|
|
5679
6002
|
const effectiveRange = getEffectiveTimelineRange(timelineStartSeconds, timelineEndSeconds, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds);
|
|
5680
6003
|
const resolvedTimelineInfo = timelineInfo || getTimelineInfo(timelineEvents, effectiveRange.startSeconds, effectiveRange.endSeconds);
|
|
5681
6004
|
const timelineNodes = getTimelineDom(resolvedTimelineInfo, timelineHoverPercent);
|
|
5682
6005
|
const previewEvent = selectedEvent ? getPreviewEvent(selectedEvent) : undefined;
|
|
5683
|
-
const previewEventNodes = getPreviewEventNodes(previewEvent, selectedEvent
|
|
6006
|
+
const previewEventNodes = getPreviewEventNodes(previewEvent, selectedEvent, previewTextCursorRowIndex === null || previewTextCursorColumnIndex === null ? null : {
|
|
6007
|
+
columnIndex: previewTextCursorColumnIndex,
|
|
6008
|
+
rowIndex: previewTextCursorRowIndex
|
|
6009
|
+
});
|
|
5684
6010
|
const payloadEventNodes = selectedEvent ? getEventNode(getPayloadEvent(selectedEvent)) : [];
|
|
5685
6011
|
const responseEventNodes = selectedEvent ? getEventNode(selectedEvent) : [];
|
|
5686
6012
|
const hasSelectedEvent = responseEventNodes.length > 0;
|
|
5687
6013
|
const eventsClassName = getEventsClassName(hasSelectedEvent);
|
|
5688
6014
|
const summary = getTableSummary(events);
|
|
5689
|
-
const
|
|
5690
|
-
const
|
|
6015
|
+
const showScrollBar = visibleEvents.length < events.length;
|
|
6016
|
+
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableWrapperWrapperDom(rowNodes, visibleEvents.length, visibleTableColumns, tableColumns, summary, focus, '', '', showScrollBar);
|
|
6017
|
+
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex);
|
|
5691
6018
|
const sashNodes = getSashNodesDom(hasSelectedEvent);
|
|
5692
6019
|
const splitChildCount = hasSelectedEvent ? 3 : 1;
|
|
5693
6020
|
const rootChildCount = 3;
|
|
@@ -5741,7 +6068,7 @@ const getEventCategoryFilterDescription = eventCategoryFilters => {
|
|
|
5741
6068
|
}
|
|
5742
6069
|
return eventCategoryFilters.map(eventCategoryFilter => getEventCategoryFilterLabel(eventCategoryFilter).toLowerCase()).join(', ');
|
|
5743
6070
|
};
|
|
5744
|
-
const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, categoryFilters, _showEventStreamFinishedEvents, _showInputEvents, _showResponsePartEvents, useDevtoolsLayout, selectedEvent, selectedEventIndex, timelineStartSeconds, timelineEndSeconds, timelineFilterDescription, timelineEvents, events, timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', visibleTableColumns = defaultVisibleTableColumns, detailTabs = createDetailTabs(), tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0) => {
|
|
6071
|
+
const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, categoryFilters, _showEventStreamFinishedEvents, _showInputEvents, _showResponsePartEvents, useDevtoolsLayout, selectedEvent, selectedEventIndex, timelineStartSeconds, timelineEndSeconds, timelineFilterDescription, timelineEvents, events, timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', visibleTableColumns = defaultVisibleTableColumns, detailTabs = createDetailTabs(), tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0, previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, minLineY = 0, maxLineY = events.length) => {
|
|
5745
6072
|
if (errorMessage) {
|
|
5746
6073
|
return getDebugErrorDom(errorMessage);
|
|
5747
6074
|
}
|
|
@@ -5765,7 +6092,7 @@ const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, ca
|
|
|
5765
6092
|
const emptyMessage = getEmptyMessage(events.length, hasFilterValue, useNoToolCallEventsMessage, noFilteredEventsMessage);
|
|
5766
6093
|
const safeSelectedEventIndex = selectedEventIndex === null || selectedEventIndex < 0 || selectedEventIndex >= events.length ? null : selectedEventIndex;
|
|
5767
6094
|
if (useDevtoolsLayout) {
|
|
5768
|
-
const devtoolsDom = getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, detailTabs, visibleTableColumns, tableColumns, timelineInfo, timelineHoverPercent, focus);
|
|
6095
|
+
const devtoolsDom = getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, detailTabs, visibleTableColumns, tableColumns, timelineInfo, timelineHoverPercent, focus, previewTextCursorRowIndex, previewTextCursorColumnIndex, minLineY, maxLineY);
|
|
5769
6096
|
const devtoolsContentNodes = devtoolsDom.slice(1);
|
|
5770
6097
|
const topLevelNodes = [...getDebugViewTopDom(filterValue, useDevtoolsLayout, categoryFilters), ...devtoolsContentNodes];
|
|
5771
6098
|
const rootChildCount = getTopLevelChildCount(topLevelNodes);
|
|
@@ -5797,8 +6124,8 @@ const renderItems = (oldState, newState) => {
|
|
|
5797
6124
|
if (newState.initial) {
|
|
5798
6125
|
return [SetDom2, newState.uid, []];
|
|
5799
6126
|
}
|
|
5800
|
-
const filteredEvents =
|
|
5801
|
-
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);
|
|
6127
|
+
const filteredEvents = getCurrentEvents$2(newState);
|
|
6128
|
+
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);
|
|
5802
6129
|
return [SetDom2, newState.uid, dom];
|
|
5803
6130
|
};
|
|
5804
6131
|
|
|
@@ -5942,6 +6269,20 @@ const renderEventListeners = () => {
|
|
|
5942
6269
|
}, {
|
|
5943
6270
|
name: HandleTableResizerPointerUp,
|
|
5944
6271
|
params: ['handleTableResizerPointerUp']
|
|
6272
|
+
}, {
|
|
6273
|
+
name: HandleTableScrollBarPointerDown,
|
|
6274
|
+
params: ['handleTableScrollBarPointerDown', ClientY],
|
|
6275
|
+
trackPointerEvents: [HandleTableScrollBarPointerMove, HandleTableScrollBarPointerUp]
|
|
6276
|
+
}, {
|
|
6277
|
+
name: HandleTableScrollBarPointerMove,
|
|
6278
|
+
params: ['handleTableScrollBarPointerMove', ClientY]
|
|
6279
|
+
}, {
|
|
6280
|
+
name: HandleTableScrollBarPointerUp,
|
|
6281
|
+
params: ['handleTableScrollBarPointerUp']
|
|
6282
|
+
}, {
|
|
6283
|
+
name: HandleTableWheel,
|
|
6284
|
+
params: ['handleTableWheel', 'event.deltaY'],
|
|
6285
|
+
preventDefault: true
|
|
5945
6286
|
}, {
|
|
5946
6287
|
name: HandleTimelinePointerDown,
|
|
5947
6288
|
params: ['handleTimelinePointerDown', TargetName, ClientX],
|
|
@@ -5958,6 +6299,9 @@ const renderEventListeners = () => {
|
|
|
5958
6299
|
}, {
|
|
5959
6300
|
name: HandleTimelineDoubleClick,
|
|
5960
6301
|
params: ['handleTimelineDoubleClick']
|
|
6302
|
+
}, {
|
|
6303
|
+
name: HandlePreviewTextPointerDown,
|
|
6304
|
+
params: ['handlePreviewTextPointerDown', 'event.clientX - event.currentTarget.getBoundingClientRect().left', 'event.clientY - event.currentTarget.getBoundingClientRect().top']
|
|
5961
6305
|
}];
|
|
5962
6306
|
};
|
|
5963
6307
|
|
|
@@ -5981,10 +6325,10 @@ const handleResize = (state, dimensions) => {
|
|
|
5981
6325
|
...state,
|
|
5982
6326
|
...dimensions
|
|
5983
6327
|
};
|
|
5984
|
-
return {
|
|
6328
|
+
return applyVirtualTableState({
|
|
5985
6329
|
...nextState,
|
|
5986
6330
|
tableWidth: clampTableWidth(nextState.width, state.tableWidth)
|
|
5987
|
-
};
|
|
6331
|
+
});
|
|
5988
6332
|
};
|
|
5989
6333
|
|
|
5990
6334
|
const isResizeDimensions = value => {
|
|
@@ -6033,19 +6377,22 @@ const selectCurrent = async state => {
|
|
|
6033
6377
|
};
|
|
6034
6378
|
|
|
6035
6379
|
const setEvents = (state, events) => {
|
|
6036
|
-
return getStateWithTimelineInfo({
|
|
6380
|
+
return applyVirtualTableState(getStateWithTimelineInfo({
|
|
6037
6381
|
...state,
|
|
6038
6382
|
errorMessage: '',
|
|
6039
6383
|
events,
|
|
6040
6384
|
initial: false,
|
|
6385
|
+
previewTextCursorColumnIndex: null,
|
|
6386
|
+
previewTextCursorRowIndex: null,
|
|
6041
6387
|
selectedEvent: null,
|
|
6042
6388
|
selectedEventId: null,
|
|
6043
6389
|
selectedEventIndex: null
|
|
6044
|
-
});
|
|
6390
|
+
}));
|
|
6045
6391
|
};
|
|
6046
6392
|
|
|
6047
6393
|
const setSessionIdDependencies = {
|
|
6048
|
-
listChatViewEvents: listChatViewEvents
|
|
6394
|
+
listChatViewEvents: listChatViewEvents,
|
|
6395
|
+
registerUpdateListener: registerUpdateListener
|
|
6049
6396
|
};
|
|
6050
6397
|
const setSessionId = async (state, sessionId) => {
|
|
6051
6398
|
const {
|
|
@@ -6055,12 +6402,15 @@ const setSessionId = async (state, sessionId) => {
|
|
|
6055
6402
|
sessionIdIndexName
|
|
6056
6403
|
} = state;
|
|
6057
6404
|
const result = await setSessionIdDependencies.listChatViewEvents(sessionId, databaseName, dataBaseVersion, eventStoreName, sessionIdIndexName);
|
|
6405
|
+
await setSessionIdDependencies.registerUpdateListener(sessionId, rpcId, state.uid);
|
|
6058
6406
|
if (result.type === 'error') {
|
|
6059
6407
|
return {
|
|
6060
6408
|
...state,
|
|
6061
6409
|
errorMessage: getFailedToLoadMessage(sessionId, result.error),
|
|
6062
6410
|
events: [],
|
|
6063
6411
|
initial: false,
|
|
6412
|
+
previewTextCursorColumnIndex: null,
|
|
6413
|
+
previewTextCursorRowIndex: null,
|
|
6064
6414
|
selectedEvent: null,
|
|
6065
6415
|
selectedEventId: null,
|
|
6066
6416
|
selectedEventIndex: null,
|
|
@@ -6075,6 +6425,8 @@ const setSessionId = async (state, sessionId) => {
|
|
|
6075
6425
|
errorMessage: '',
|
|
6076
6426
|
events,
|
|
6077
6427
|
initial: false,
|
|
6428
|
+
previewTextCursorColumnIndex: null,
|
|
6429
|
+
previewTextCursorRowIndex: null,
|
|
6078
6430
|
selectedEvent: null,
|
|
6079
6431
|
selectedEventId: null,
|
|
6080
6432
|
selectedEventIndex: null,
|
|
@@ -6124,6 +6476,7 @@ const commandMap = {
|
|
|
6124
6476
|
'ChatDebug.handleEventRowClickAt': wrapCommand(handleEventRowClickAt),
|
|
6125
6477
|
'ChatDebug.handleHeaderContextMenu': wrapCommand(handleHeaderContextMenu),
|
|
6126
6478
|
'ChatDebug.handleInput': wrapCommand(handleInput),
|
|
6479
|
+
'ChatDebug.handlePreviewTextPointerDown': wrapCommand(handlePreviewTextPointerDown),
|
|
6127
6480
|
'ChatDebug.handleSashPointerDown': wrapCommand(handleSashPointerDown),
|
|
6128
6481
|
'ChatDebug.handleSashPointerMove': wrapCommand(handleSashPointerMove),
|
|
6129
6482
|
'ChatDebug.handleSashPointerUp': wrapCommand(handleSashPointerUp),
|
|
@@ -6137,6 +6490,10 @@ const commandMap = {
|
|
|
6137
6490
|
'ChatDebug.handleTableResizerPointerMove': wrapCommand(handleTableResizerPointerMove),
|
|
6138
6491
|
'ChatDebug.handleTableResizerPointerUp': wrapCommand(handleTableResizerPointerUp),
|
|
6139
6492
|
'ChatDebug.handleTableRowCopy': wrapCommand(handleTableRowCopy),
|
|
6493
|
+
'ChatDebug.handleTableScrollBarPointerDown': wrapCommand(handleTableScrollBarPointerDown),
|
|
6494
|
+
'ChatDebug.handleTableScrollBarPointerMove': wrapCommand(handleTableScrollBarPointerMove),
|
|
6495
|
+
'ChatDebug.handleTableScrollBarPointerUp': wrapCommand(handleTableScrollBarPointerUp),
|
|
6496
|
+
'ChatDebug.handleTableWheel': wrapCommand(handleTableWheel),
|
|
6140
6497
|
'ChatDebug.handleTimelineContextMenu': wrapCommand(handleTimelineContextMenu),
|
|
6141
6498
|
'ChatDebug.handleTimelineDoubleClick': wrapCommand(handleTimelineDoubleClick),
|
|
6142
6499
|
'ChatDebug.handleTimelineEndSeconds': wrapCommand(handleTimelineEndSeconds),
|
|
@@ -6169,7 +6526,9 @@ const sendMessagePortToChatStorageWorker = async port => {
|
|
|
6169
6526
|
};
|
|
6170
6527
|
const initializeChatStorageWorker = async () => {
|
|
6171
6528
|
const rpc = await create$4({
|
|
6172
|
-
commandMap: {
|
|
6529
|
+
commandMap: {
|
|
6530
|
+
[rpcId]: handleStorageWorkerUpdate
|
|
6531
|
+
},
|
|
6173
6532
|
send: sendMessagePortToChatStorageWorker
|
|
6174
6533
|
});
|
|
6175
6534
|
set$2(rpc);
|