@lvce-editor/chat-debug-view 10.19.0 → 10.21.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 +454 -238
- package/package.json +1 -1
|
@@ -1377,14 +1377,6 @@ const appendStoredImageAttachmentForTest = async (state, sessionId, eventId, mim
|
|
|
1377
1377
|
return state;
|
|
1378
1378
|
};
|
|
1379
1379
|
|
|
1380
|
-
const decodeBase64 = value => {
|
|
1381
|
-
const decoded = atob(value);
|
|
1382
|
-
const bytes = new Uint8Array(decoded.length);
|
|
1383
|
-
for (let i = 0; i < decoded.length; i++) {
|
|
1384
|
-
bytes[i] = decoded.codePointAt(i) || 0;
|
|
1385
|
-
}
|
|
1386
|
-
return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
1387
|
-
};
|
|
1388
1380
|
const createCanvasBlob = async mimeType => {
|
|
1389
1381
|
const canvas = new OffscreenCanvas(2, 2);
|
|
1390
1382
|
const context = canvas.getContext('2d');
|
|
@@ -1397,6 +1389,16 @@ const createCanvasBlob = async mimeType => {
|
|
|
1397
1389
|
type: mimeType
|
|
1398
1390
|
});
|
|
1399
1391
|
};
|
|
1392
|
+
|
|
1393
|
+
const decodeBase64 = value => {
|
|
1394
|
+
const decoded = atob(value);
|
|
1395
|
+
const bytes = new Uint8Array(decoded.length);
|
|
1396
|
+
for (let i = 0; i < decoded.length; i++) {
|
|
1397
|
+
bytes[i] = decoded.codePointAt(i) || 0;
|
|
1398
|
+
}
|
|
1399
|
+
return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
1400
|
+
};
|
|
1401
|
+
|
|
1400
1402
|
const createBlob = async (mimeType, contentKind, content) => {
|
|
1401
1403
|
if (contentKind === 'canvas') {
|
|
1402
1404
|
return createCanvasBlob(mimeType);
|
|
@@ -1410,6 +1412,7 @@ const createBlob = async (mimeType, contentKind, content) => {
|
|
|
1410
1412
|
type: mimeType
|
|
1411
1413
|
});
|
|
1412
1414
|
};
|
|
1415
|
+
|
|
1413
1416
|
const appendStoredRemovedImageAttachmentForTest = async (state, sessionId, eventId, mimeType, name, contentKind, content, timestamp) => {
|
|
1414
1417
|
const blob = await createBlob(mimeType, contentKind, content);
|
|
1415
1418
|
await appendEvent({
|
|
@@ -1438,6 +1441,7 @@ const TimelineStartSeconds = 'timelineStartSeconds';
|
|
|
1438
1441
|
const TimelineEndSeconds = 'timelineEndSeconds';
|
|
1439
1442
|
const TimelineRangePreset = 'timelineRangePreset';
|
|
1440
1443
|
const Refresh$1 = 'refresh';
|
|
1444
|
+
const ToggleHeadersSection = 'toggleHeadersSection';
|
|
1441
1445
|
const All$1 = 'all';
|
|
1442
1446
|
const Tools$1 = 'tools';
|
|
1443
1447
|
const Network$1 = 'network';
|
|
@@ -1473,7 +1477,7 @@ const FailedToLoadChatDebugSession = 'Failed to load chat debug session "{PH1}".
|
|
|
1473
1477
|
const FailedToLoadChatDebugSessionWithError = 'Failed to load chat debug session "{PH1}": {PH2}';
|
|
1474
1478
|
const FilterEvents = 'Filter events';
|
|
1475
1479
|
const FromSeconds = 'from {PH1}s';
|
|
1476
|
-
const General = 'General';
|
|
1480
|
+
const General$1 = 'General';
|
|
1477
1481
|
const Headers = 'Headers';
|
|
1478
1482
|
const ImageCouldNotBeLoaded = 'image could not be loaded';
|
|
1479
1483
|
const InputTokens = 'Input Tokens';
|
|
@@ -1494,12 +1498,13 @@ const Preview = 'Preview';
|
|
|
1494
1498
|
const Refresh = 'Refresh';
|
|
1495
1499
|
const RefreshEvents = 'Refresh events';
|
|
1496
1500
|
const ResetColumns = 'Reset columns';
|
|
1497
|
-
const RequestHeaders = 'Request Headers';
|
|
1501
|
+
const RequestHeaders$1 = 'Request Headers';
|
|
1498
1502
|
const RequestMethod = 'Request Method';
|
|
1499
1503
|
const RequestUrl = 'Request URL';
|
|
1500
1504
|
const Response = 'Response';
|
|
1501
|
-
const ResponseHeaders = 'Response Headers';
|
|
1505
|
+
const ResponseHeaders$1 = 'Response Headers';
|
|
1502
1506
|
const SecondsRange = '{PH1}s-{PH2}s';
|
|
1507
|
+
const Size$1 = 'Size';
|
|
1503
1508
|
const Started = 'Started';
|
|
1504
1509
|
const Status$2 = 'Status';
|
|
1505
1510
|
const StatusCode = 'Status Code';
|
|
@@ -1563,7 +1568,7 @@ const fromSeconds = seconds => {
|
|
|
1563
1568
|
});
|
|
1564
1569
|
};
|
|
1565
1570
|
const general = () => {
|
|
1566
|
-
return i18nString(General);
|
|
1571
|
+
return i18nString(General$1);
|
|
1567
1572
|
};
|
|
1568
1573
|
const headers = () => {
|
|
1569
1574
|
return i18nString(Headers);
|
|
@@ -1624,7 +1629,7 @@ const refreshEvents$1 = () => {
|
|
|
1624
1629
|
return i18nString(RefreshEvents);
|
|
1625
1630
|
};
|
|
1626
1631
|
const requestHeaders = () => {
|
|
1627
|
-
return i18nString(RequestHeaders);
|
|
1632
|
+
return i18nString(RequestHeaders$1);
|
|
1628
1633
|
};
|
|
1629
1634
|
const requestMethod = () => {
|
|
1630
1635
|
return i18nString(RequestMethod);
|
|
@@ -1633,7 +1638,7 @@ const requestUrl = () => {
|
|
|
1633
1638
|
return i18nString(RequestUrl);
|
|
1634
1639
|
};
|
|
1635
1640
|
const responseHeaders = () => {
|
|
1636
|
-
return i18nString(ResponseHeaders);
|
|
1641
|
+
return i18nString(ResponseHeaders$1);
|
|
1637
1642
|
};
|
|
1638
1643
|
const resetColumns = () => {
|
|
1639
1644
|
return i18nString(ResetColumns);
|
|
@@ -1641,6 +1646,9 @@ const resetColumns = () => {
|
|
|
1641
1646
|
const response = () => {
|
|
1642
1647
|
return i18nString(Response);
|
|
1643
1648
|
};
|
|
1649
|
+
const size = () => {
|
|
1650
|
+
return i18nString(Size$1);
|
|
1651
|
+
};
|
|
1644
1652
|
const secondsRange = (start, end) => {
|
|
1645
1653
|
return i18nString(SecondsRange, {
|
|
1646
1654
|
PH1: start,
|
|
@@ -1842,7 +1850,8 @@ const Type = 'type';
|
|
|
1842
1850
|
const Method = 'method';
|
|
1843
1851
|
const Duration = 'duration';
|
|
1844
1852
|
const Status$1 = 'status';
|
|
1845
|
-
const
|
|
1853
|
+
const Size = 'size';
|
|
1854
|
+
const tableColumnNames = [Type, Method, Status$1, Size, Duration];
|
|
1846
1855
|
const createTableColumns = () => {
|
|
1847
1856
|
return [{
|
|
1848
1857
|
isVisible: true,
|
|
@@ -1856,6 +1865,10 @@ const createTableColumns = () => {
|
|
|
1856
1865
|
isVisible: true,
|
|
1857
1866
|
label: status(),
|
|
1858
1867
|
name: Status$1
|
|
1868
|
+
}, {
|
|
1869
|
+
isVisible: true,
|
|
1870
|
+
label: size(),
|
|
1871
|
+
name: Size
|
|
1859
1872
|
}, {
|
|
1860
1873
|
isVisible: true,
|
|
1861
1874
|
label: duration(),
|
|
@@ -1893,6 +1906,8 @@ const getTableColumnLabel = (tableColumns, name) => {
|
|
|
1893
1906
|
return duration();
|
|
1894
1907
|
case Method:
|
|
1895
1908
|
return method();
|
|
1909
|
+
case Size:
|
|
1910
|
+
return size();
|
|
1896
1911
|
case Status$1:
|
|
1897
1912
|
return status();
|
|
1898
1913
|
case Type:
|
|
@@ -1905,6 +1920,7 @@ const getTableColumnLabel = (tableColumns, name) => {
|
|
|
1905
1920
|
const defaultTableColumnWidths = {
|
|
1906
1921
|
duration: 110,
|
|
1907
1922
|
method: 90,
|
|
1923
|
+
size: 100,
|
|
1908
1924
|
status: 110,
|
|
1909
1925
|
type: 260
|
|
1910
1926
|
};
|
|
@@ -1931,6 +1947,7 @@ const getTableWidthFromClientX = (state, clientX) => {
|
|
|
1931
1947
|
const minimumTableColumnWidths = {
|
|
1932
1948
|
[Duration]: 80,
|
|
1933
1949
|
[Method]: 56,
|
|
1950
|
+
[Size]: 80,
|
|
1934
1951
|
[Status$1]: 56,
|
|
1935
1952
|
[Type]: 80
|
|
1936
1953
|
};
|
|
@@ -1999,7 +2016,7 @@ const getResizedTableColumnWidths = (state, visibleTableColumns, tableColumnWidt
|
|
|
1999
2016
|
};
|
|
2000
2017
|
|
|
2001
2018
|
const isSameTableColumnWidths = (first, second) => {
|
|
2002
|
-
return first.type === second.type && first.method === second.method && first.duration === second.duration && first.status === second.status;
|
|
2019
|
+
return first.type === second.type && first.method === second.method && first.duration === second.duration && first.size === second.size && first.status === second.status;
|
|
2003
2020
|
};
|
|
2004
2021
|
|
|
2005
2022
|
const isFiniteNumber = value => {
|
|
@@ -2011,13 +2028,20 @@ const isTableColumnWidths = value => {
|
|
|
2011
2028
|
return false;
|
|
2012
2029
|
}
|
|
2013
2030
|
const record = value;
|
|
2014
|
-
return isFiniteNumber(record.type) && isFiniteNumber(record.method) && isFiniteNumber(record.duration) && isFiniteNumber(record.status);
|
|
2031
|
+
return isFiniteNumber(record.type) && isFiniteNumber(record.method) && isFiniteNumber(record.duration) && isFiniteNumber(record.size) && isFiniteNumber(record.status);
|
|
2015
2032
|
};
|
|
2016
2033
|
|
|
2017
2034
|
const validEventCategoryFilters = new Set([All$1, Network$1, Stream$1, Tools$1, Ui$1]);
|
|
2018
2035
|
const isSavedState = value => {
|
|
2019
2036
|
return typeof value === 'object' && value !== null;
|
|
2020
2037
|
};
|
|
2038
|
+
const isLegacyTableColumnWidths = value => {
|
|
2039
|
+
if (typeof value !== 'object' || value === null) {
|
|
2040
|
+
return false;
|
|
2041
|
+
}
|
|
2042
|
+
const record = value;
|
|
2043
|
+
return typeof record.duration === 'number' && Number.isFinite(record.duration) && typeof record.method === 'number' && Number.isFinite(record.method) && typeof record.status === 'number' && Number.isFinite(record.status) && typeof record.type === 'number' && Number.isFinite(record.type) && !('size' in record);
|
|
2044
|
+
};
|
|
2021
2045
|
const restoreCategoryFilters = (savedState, currentCategoryFilters) => {
|
|
2022
2046
|
if (Array.isArray(savedState.eventCategoryFilters)) {
|
|
2023
2047
|
return selectCategoryFilters(currentCategoryFilters, savedState.eventCategoryFilters.filter(value => typeof value === 'string'));
|
|
@@ -2050,10 +2074,31 @@ const restoreVisibleTableColumns = (savedState, currentTableColumns) => {
|
|
|
2050
2074
|
return currentTableColumns;
|
|
2051
2075
|
}
|
|
2052
2076
|
const visibleTableColumns = savedState.visibleTableColumns.filter(value => typeof value === 'string');
|
|
2077
|
+
if (isLegacyTableColumnWidths(savedState.tableColumnWidths)) {
|
|
2078
|
+
const savedVisibleColumns = new Set(visibleTableColumns);
|
|
2079
|
+
const visibleColumnsWithDefaults = currentTableColumns.filter(column => savedVisibleColumns.has(column.name) || column.name === 'size').map(column => column.name);
|
|
2080
|
+
return getTableColumnsWithVisibility(currentTableColumns, visibleColumnsWithDefaults);
|
|
2081
|
+
}
|
|
2053
2082
|
return getTableColumnsWithVisibility(currentTableColumns, visibleTableColumns);
|
|
2054
2083
|
};
|
|
2055
2084
|
const restoreTableColumnWidths = (savedState, currentTableColumnWidths) => {
|
|
2056
|
-
|
|
2085
|
+
const {
|
|
2086
|
+
tableColumnWidths: savedTableColumnWidths
|
|
2087
|
+
} = savedState;
|
|
2088
|
+
if (isTableColumnWidths(savedTableColumnWidths)) {
|
|
2089
|
+
return savedTableColumnWidths;
|
|
2090
|
+
}
|
|
2091
|
+
if (isLegacyTableColumnWidths(savedTableColumnWidths)) {
|
|
2092
|
+
const legacyTableColumnWidths = savedTableColumnWidths;
|
|
2093
|
+
return {
|
|
2094
|
+
duration: legacyTableColumnWidths.duration,
|
|
2095
|
+
method: legacyTableColumnWidths.method,
|
|
2096
|
+
size: currentTableColumnWidths.size,
|
|
2097
|
+
status: legacyTableColumnWidths.status,
|
|
2098
|
+
type: legacyTableColumnWidths.type
|
|
2099
|
+
};
|
|
2100
|
+
}
|
|
2101
|
+
return currentTableColumnWidths;
|
|
2057
2102
|
};
|
|
2058
2103
|
const restoreSavedState = (state, savedState) => {
|
|
2059
2104
|
if (!isSavedState(savedState)) {
|
|
@@ -2105,21 +2150,37 @@ const hasTimingDetails = event => {
|
|
|
2105
2150
|
return hasDuration || hasStart && hasEnd;
|
|
2106
2151
|
};
|
|
2107
2152
|
|
|
2108
|
-
const
|
|
2109
|
-
|
|
2110
|
-
if (
|
|
2111
|
-
|
|
2112
|
-
return event.endValue.value;
|
|
2153
|
+
const getEndValueResponseData = event => {
|
|
2154
|
+
const endValue = event.endValue;
|
|
2155
|
+
if (!endValue || endValue.value === undefined) {
|
|
2156
|
+
return undefined;
|
|
2113
2157
|
}
|
|
2158
|
+
return endValue.value;
|
|
2159
|
+
};
|
|
2160
|
+
const getMergedResponseData = event => {
|
|
2114
2161
|
const {
|
|
2115
2162
|
responseEvent
|
|
2116
2163
|
} = event;
|
|
2117
|
-
if (responseEvent
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
return
|
|
2164
|
+
if (!responseEvent || typeof responseEvent !== 'object' || typeof responseEvent.type !== 'string') {
|
|
2165
|
+
return undefined;
|
|
2166
|
+
}
|
|
2167
|
+
const mergedResponseEvent = responseEvent;
|
|
2168
|
+
if (mergedResponseEvent.value !== undefined) {
|
|
2169
|
+
return mergedResponseEvent.value;
|
|
2170
|
+
}
|
|
2171
|
+
return responseEvent;
|
|
2172
|
+
};
|
|
2173
|
+
const getResponseData = event => {
|
|
2174
|
+
const endValueResponseData = getEndValueResponseData(event);
|
|
2175
|
+
if (endValueResponseData !== undefined) {
|
|
2176
|
+
return endValueResponseData;
|
|
2177
|
+
}
|
|
2178
|
+
return getMergedResponseData(event);
|
|
2179
|
+
};
|
|
2180
|
+
const getResponseEvent = event => {
|
|
2181
|
+
const responseData = getResponseData(event);
|
|
2182
|
+
if (responseData !== undefined) {
|
|
2183
|
+
return responseData;
|
|
2123
2184
|
}
|
|
2124
2185
|
return event;
|
|
2125
2186
|
};
|
|
@@ -2381,6 +2442,7 @@ const createDefaultState = () => {
|
|
|
2381
2442
|
return {
|
|
2382
2443
|
assetDir: '',
|
|
2383
2444
|
categoryFilters: createCategoryFilters(),
|
|
2445
|
+
collapsedHeaderSections: [],
|
|
2384
2446
|
databaseName: 'lvce-chat-view-sessions',
|
|
2385
2447
|
dataBaseVersion: 2,
|
|
2386
2448
|
defaultTableWidth,
|
|
@@ -2464,7 +2526,6 @@ const create = (uid, uri, x, y, width, height, platform, assetDir, sessionId = '
|
|
|
2464
2526
|
platform,
|
|
2465
2527
|
sessionId,
|
|
2466
2528
|
sessionIdIndexName,
|
|
2467
|
-
tableColumns: [],
|
|
2468
2529
|
uid,
|
|
2469
2530
|
uri,
|
|
2470
2531
|
width,
|
|
@@ -2481,7 +2542,7 @@ const RenderFocusContext = 4;
|
|
|
2481
2542
|
const RenderFocus = 5;
|
|
2482
2543
|
|
|
2483
2544
|
const diff = (oldState, newState) => {
|
|
2484
|
-
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.previewTextDeltaY !== newState.previewTextDeltaY || 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.timelineHeight !== newState.timelineHeight || 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) {
|
|
2545
|
+
if (oldState.categoryFilters !== newState.categoryFilters || oldState.collapsedHeaderSections !== newState.collapsedHeaderSections || 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.previewTextDeltaY !== newState.previewTextDeltaY || 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.timelineHeight !== newState.timelineHeight || 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) {
|
|
2485
2546
|
return [RenderIncremental, RenderCss];
|
|
2486
2547
|
}
|
|
2487
2548
|
return [];
|
|
@@ -2741,25 +2802,38 @@ const getFilteredEvents = (events, filterValue, eventCategoryFilters, showInputE
|
|
|
2741
2802
|
return filteredByCategory.filter(event => JSON.stringify(event).toLowerCase().includes(filterText));
|
|
2742
2803
|
};
|
|
2743
2804
|
|
|
2805
|
+
const formatDurationSeconds = value => {
|
|
2806
|
+
return `${value.toFixed(1)}s`;
|
|
2807
|
+
};
|
|
2808
|
+
|
|
2809
|
+
const formatDurationText = durationMs => {
|
|
2810
|
+
if (durationMs >= 1000) {
|
|
2811
|
+
return formatDurationSeconds(durationMs / 1000);
|
|
2812
|
+
}
|
|
2813
|
+
return `${durationMs}ms`;
|
|
2814
|
+
};
|
|
2744
2815
|
const getDurationText = event => {
|
|
2745
2816
|
if (event.time) {
|
|
2746
2817
|
return event.time;
|
|
2747
2818
|
}
|
|
2748
2819
|
const explicitDuration = event.durationMs ?? event.duration;
|
|
2749
2820
|
if (typeof explicitDuration === 'number' && Number.isFinite(explicitDuration)) {
|
|
2750
|
-
return
|
|
2821
|
+
return formatDurationText(explicitDuration);
|
|
2751
2822
|
}
|
|
2752
2823
|
const start = toTimeNumber(event.started ?? event.startTime ?? event.startTimestamp ?? event.timestamp);
|
|
2753
2824
|
const end = toTimeNumber(event.ended ?? event.endTime ?? event.endTimestamp ?? event.timestamp);
|
|
2754
2825
|
if (start === undefined || end === undefined || end < start) {
|
|
2755
2826
|
return '-';
|
|
2756
2827
|
}
|
|
2757
|
-
return
|
|
2828
|
+
return formatDurationText(end - start);
|
|
2758
2829
|
};
|
|
2759
2830
|
|
|
2760
2831
|
const getEventTableDurationText = event => {
|
|
2761
2832
|
const durationText = getDurationText(event);
|
|
2762
2833
|
if (!durationText.endsWith('ms')) {
|
|
2834
|
+
if (durationText.endsWith('s')) {
|
|
2835
|
+
return `${durationText.slice(0, -1)} s`;
|
|
2836
|
+
}
|
|
2763
2837
|
return durationText;
|
|
2764
2838
|
}
|
|
2765
2839
|
return `${durationText.slice(0, -2)} ms`;
|
|
@@ -2858,10 +2932,19 @@ const getStatusText = event => {
|
|
|
2858
2932
|
return hasErrorStatus(event) ? '400' : '200';
|
|
2859
2933
|
};
|
|
2860
2934
|
|
|
2935
|
+
const getSizeSortValue = event => {
|
|
2936
|
+
const rawSize = event.size;
|
|
2937
|
+
if (typeof rawSize !== 'number' || !Number.isFinite(rawSize)) {
|
|
2938
|
+
return '0000000000000000';
|
|
2939
|
+
}
|
|
2940
|
+
return String(Math.max(0, Math.trunc(rawSize))).padStart(16, '0');
|
|
2941
|
+
};
|
|
2861
2942
|
const getEventTableColumnValue = (event, column) => {
|
|
2862
2943
|
switch (column) {
|
|
2863
2944
|
case Duration:
|
|
2864
2945
|
return getEventTableDurationText(event);
|
|
2946
|
+
case Size:
|
|
2947
|
+
return getSizeSortValue(event);
|
|
2865
2948
|
case Status$1:
|
|
2866
2949
|
return getStatusText(event);
|
|
2867
2950
|
case Type:
|
|
@@ -3083,11 +3166,26 @@ const getAttachmentImagePreviewMimeType = event => {
|
|
|
3083
3166
|
return typeof event.mimeType === 'string' ? event.mimeType : undefined;
|
|
3084
3167
|
};
|
|
3085
3168
|
|
|
3086
|
-
const
|
|
3087
|
-
|
|
3088
|
-
|
|
3169
|
+
const units = ['B', 'kB', 'MB', 'GB', 'TB', 'PB'];
|
|
3170
|
+
const formatBytes = size => {
|
|
3171
|
+
if (!Number.isFinite(size) || size <= 0) {
|
|
3172
|
+
return '0 B';
|
|
3089
3173
|
}
|
|
3090
|
-
|
|
3174
|
+
let value = size;
|
|
3175
|
+
let unitIndex = 0;
|
|
3176
|
+
while (value >= 1024 && unitIndex < units.length - 1) {
|
|
3177
|
+
value /= 1024;
|
|
3178
|
+
unitIndex++;
|
|
3179
|
+
}
|
|
3180
|
+
if (unitIndex === 0) {
|
|
3181
|
+
return `${Math.trunc(value)} ${units[unitIndex]}`;
|
|
3182
|
+
}
|
|
3183
|
+
const formatted = value >= 10 ? value.toFixed(0) : value.toFixed(1);
|
|
3184
|
+
return `${formatted} ${units[unitIndex]}`;
|
|
3185
|
+
};
|
|
3186
|
+
|
|
3187
|
+
const formatImageSize = size => {
|
|
3188
|
+
return formatBytes(size);
|
|
3091
3189
|
};
|
|
3092
3190
|
|
|
3093
3191
|
const formatImageStats = (width, height, size) => {
|
|
@@ -3313,6 +3411,12 @@ const getMenuEntriesTableHeader = state => {
|
|
|
3313
3411
|
flags: getColumnVisibilityFlags(state.tableColumns, Status$1),
|
|
3314
3412
|
id: 'status',
|
|
3315
3413
|
label: status()
|
|
3414
|
+
}, {
|
|
3415
|
+
args: [Size],
|
|
3416
|
+
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3417
|
+
flags: getColumnVisibilityFlags(state.tableColumns, Size),
|
|
3418
|
+
id: 'size',
|
|
3419
|
+
label: size()
|
|
3316
3420
|
}, {
|
|
3317
3421
|
args: [Duration],
|
|
3318
3422
|
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
@@ -3398,102 +3502,6 @@ const getMenuIds = () => {
|
|
|
3398
3502
|
return [MenuChatDebugTableHeader, MenuChatDebugTableBody, 556, 557];
|
|
3399
3503
|
};
|
|
3400
3504
|
|
|
3401
|
-
const getResponseMap = events => {
|
|
3402
|
-
const seen = Object.create(null);
|
|
3403
|
-
for (const event of events) {
|
|
3404
|
-
if (event.type === 'ai-response' && 'requestId' in event && typeof event.requestId === 'string') {
|
|
3405
|
-
seen[event.requestId] = event;
|
|
3406
|
-
}
|
|
3407
|
-
}
|
|
3408
|
-
return seen;
|
|
3409
|
-
};
|
|
3410
|
-
|
|
3411
|
-
const getMergedRequestResponseEvent = (item, response) => {
|
|
3412
|
-
const parsedStart = new Date(item.timestamp || '');
|
|
3413
|
-
const parsedEnd = new Date(response.timestamp || '');
|
|
3414
|
-
const durationMs = parsedEnd.getTime() - parsedStart.getTime();
|
|
3415
|
-
const started = getStartedTimestamp(item);
|
|
3416
|
-
const ended = getEndedTimestamp(response);
|
|
3417
|
-
const timestamp = item.timestamp ?? started;
|
|
3418
|
-
if (Number.isFinite(durationMs) && durationMs >= 0) {
|
|
3419
|
-
return {
|
|
3420
|
-
durationMs,
|
|
3421
|
-
...(ended === undefined ? {} : {
|
|
3422
|
-
ended
|
|
3423
|
-
}),
|
|
3424
|
-
eventEndId: response.eventId,
|
|
3425
|
-
eventId: item.eventId,
|
|
3426
|
-
method: 'POST',
|
|
3427
|
-
...(started === undefined ? {} : {
|
|
3428
|
-
started
|
|
3429
|
-
}),
|
|
3430
|
-
...(timestamp === undefined ? {} : {
|
|
3431
|
-
timestamp
|
|
3432
|
-
}),
|
|
3433
|
-
type: 'ai-request-response'
|
|
3434
|
-
};
|
|
3435
|
-
}
|
|
3436
|
-
return {
|
|
3437
|
-
...(ended === undefined ? {} : {
|
|
3438
|
-
ended
|
|
3439
|
-
}),
|
|
3440
|
-
eventEndId: response.eventId,
|
|
3441
|
-
eventId: item.eventId,
|
|
3442
|
-
method: 'POST',
|
|
3443
|
-
...(started === undefined ? {} : {
|
|
3444
|
-
started
|
|
3445
|
-
}),
|
|
3446
|
-
...(timestamp === undefined ? {} : {
|
|
3447
|
-
timestamp
|
|
3448
|
-
}),
|
|
3449
|
-
type: 'ai-request-response'
|
|
3450
|
-
};
|
|
3451
|
-
};
|
|
3452
|
-
const toPrettyEvents = rawEvents => {
|
|
3453
|
-
if (rawEvents.type === 'error') {
|
|
3454
|
-
return [];
|
|
3455
|
-
}
|
|
3456
|
-
const pretty = [];
|
|
3457
|
-
const map = getResponseMap(rawEvents.events);
|
|
3458
|
-
for (const item of rawEvents.events) {
|
|
3459
|
-
if (item.type === 'ai-request' && 'requestId' in item && typeof item.requestId === 'string') {
|
|
3460
|
-
const response = map[item.requestId];
|
|
3461
|
-
if (response) {
|
|
3462
|
-
pretty.push(getMergedRequestResponseEvent(item, response));
|
|
3463
|
-
} else {
|
|
3464
|
-
pretty.push(item);
|
|
3465
|
-
}
|
|
3466
|
-
} else if (item.type === 'ai-response' && 'requestId' in item && typeof item.requestId === 'string') ; else {
|
|
3467
|
-
pretty.push(item);
|
|
3468
|
-
}
|
|
3469
|
-
}
|
|
3470
|
-
return pretty;
|
|
3471
|
-
};
|
|
3472
|
-
|
|
3473
|
-
const listChatViewEvents = async (sessionId, _databaseName, _dataBaseVersion, _eventStoreName, _sessionIdIndexName) => {
|
|
3474
|
-
try {
|
|
3475
|
-
const rawEvents = await listChatViewEvents$1(sessionId);
|
|
3476
|
-
if (rawEvents.type === 'error') {
|
|
3477
|
-
return rawEvents;
|
|
3478
|
-
}
|
|
3479
|
-
const prettyEvents = toPrettyEvents(rawEvents);
|
|
3480
|
-
return {
|
|
3481
|
-
events: prettyEvents,
|
|
3482
|
-
type: 'success'
|
|
3483
|
-
};
|
|
3484
|
-
} catch (error) {
|
|
3485
|
-
return {
|
|
3486
|
-
error,
|
|
3487
|
-
type: 'error'
|
|
3488
|
-
};
|
|
3489
|
-
}
|
|
3490
|
-
};
|
|
3491
|
-
|
|
3492
|
-
const loadEventsDependencies = {
|
|
3493
|
-
listChatViewEvents: listChatViewEvents,
|
|
3494
|
-
loadSelectedEvent: loadSelectedEvent
|
|
3495
|
-
};
|
|
3496
|
-
|
|
3497
3505
|
const ParseChatDebugUriErrorCode = {
|
|
3498
3506
|
InvalidSessionId: 1,
|
|
3499
3507
|
InvalidUriEncoding: 2,
|
|
@@ -3657,6 +3665,99 @@ const getSessionNotFoundMessage = sessionId => {
|
|
|
3657
3665
|
return noChatSessionFound(sessionId);
|
|
3658
3666
|
};
|
|
3659
3667
|
|
|
3668
|
+
const getResponseMap = events => {
|
|
3669
|
+
const seen = Object.create(null);
|
|
3670
|
+
for (const event of events) {
|
|
3671
|
+
if (event.type === 'ai-response' && 'requestId' in event && typeof event.requestId === 'string') {
|
|
3672
|
+
seen[event.requestId] = event;
|
|
3673
|
+
}
|
|
3674
|
+
}
|
|
3675
|
+
return seen;
|
|
3676
|
+
};
|
|
3677
|
+
|
|
3678
|
+
const getMergedRequestResponseEvent = (item, response) => {
|
|
3679
|
+
const parsedStart = new Date(item.timestamp || '');
|
|
3680
|
+
const parsedEnd = new Date(response.timestamp || '');
|
|
3681
|
+
const durationMs = parsedEnd.getTime() - parsedStart.getTime();
|
|
3682
|
+
const started = getStartedTimestamp(item);
|
|
3683
|
+
const ended = getEndedTimestamp(response);
|
|
3684
|
+
const timestamp = item.timestamp ?? started;
|
|
3685
|
+
if (Number.isFinite(durationMs) && durationMs >= 0) {
|
|
3686
|
+
return {
|
|
3687
|
+
durationMs,
|
|
3688
|
+
...(ended === undefined ? {} : {
|
|
3689
|
+
ended
|
|
3690
|
+
}),
|
|
3691
|
+
eventEndId: response.eventId,
|
|
3692
|
+
eventId: item.eventId,
|
|
3693
|
+
method: 'POST',
|
|
3694
|
+
size: 0,
|
|
3695
|
+
...(started === undefined ? {} : {
|
|
3696
|
+
started
|
|
3697
|
+
}),
|
|
3698
|
+
...(timestamp === undefined ? {} : {
|
|
3699
|
+
timestamp
|
|
3700
|
+
}),
|
|
3701
|
+
type: 'ai-request-response'
|
|
3702
|
+
};
|
|
3703
|
+
}
|
|
3704
|
+
return {
|
|
3705
|
+
...(ended === undefined ? {} : {
|
|
3706
|
+
ended
|
|
3707
|
+
}),
|
|
3708
|
+
eventEndId: response.eventId,
|
|
3709
|
+
eventId: item.eventId,
|
|
3710
|
+
method: 'POST',
|
|
3711
|
+
size: 0,
|
|
3712
|
+
...(started === undefined ? {} : {
|
|
3713
|
+
started
|
|
3714
|
+
}),
|
|
3715
|
+
...(timestamp === undefined ? {} : {
|
|
3716
|
+
timestamp
|
|
3717
|
+
}),
|
|
3718
|
+
type: 'ai-request-response'
|
|
3719
|
+
};
|
|
3720
|
+
};
|
|
3721
|
+
const toPrettyEvents = rawEvents => {
|
|
3722
|
+
if (rawEvents.type === 'error') {
|
|
3723
|
+
return [];
|
|
3724
|
+
}
|
|
3725
|
+
const pretty = [];
|
|
3726
|
+
const map = getResponseMap(rawEvents.events);
|
|
3727
|
+
for (const item of rawEvents.events) {
|
|
3728
|
+
if (item.type === 'ai-request' && 'requestId' in item && typeof item.requestId === 'string') {
|
|
3729
|
+
const response = map[item.requestId];
|
|
3730
|
+
if (response) {
|
|
3731
|
+
pretty.push(getMergedRequestResponseEvent(item, response));
|
|
3732
|
+
} else {
|
|
3733
|
+
pretty.push(item);
|
|
3734
|
+
}
|
|
3735
|
+
} else if (item.type === 'ai-response' && 'requestId' in item && typeof item.requestId === 'string') ; else {
|
|
3736
|
+
pretty.push(item);
|
|
3737
|
+
}
|
|
3738
|
+
}
|
|
3739
|
+
return pretty;
|
|
3740
|
+
};
|
|
3741
|
+
|
|
3742
|
+
const listChatViewEvents = async (sessionId, _databaseName, _dataBaseVersion, _eventStoreName, _sessionIdIndexName) => {
|
|
3743
|
+
try {
|
|
3744
|
+
const rawEvents = await listChatViewEvents$1(sessionId);
|
|
3745
|
+
if (rawEvents.type === 'error') {
|
|
3746
|
+
return rawEvents;
|
|
3747
|
+
}
|
|
3748
|
+
const prettyEvents = toPrettyEvents(rawEvents);
|
|
3749
|
+
return {
|
|
3750
|
+
events: prettyEvents,
|
|
3751
|
+
type: 'success'
|
|
3752
|
+
};
|
|
3753
|
+
} catch (error) {
|
|
3754
|
+
return {
|
|
3755
|
+
error,
|
|
3756
|
+
type: 'error'
|
|
3757
|
+
};
|
|
3758
|
+
}
|
|
3759
|
+
};
|
|
3760
|
+
|
|
3660
3761
|
const restoreSelectedEvent = async state => {
|
|
3661
3762
|
if (state.selectedEventId === null) {
|
|
3662
3763
|
return {
|
|
@@ -3699,7 +3800,7 @@ const restoreSelectedEvent = async state => {
|
|
|
3699
3800
|
selectedEventIndex: null
|
|
3700
3801
|
};
|
|
3701
3802
|
}
|
|
3702
|
-
const selectedEventDetails = await
|
|
3803
|
+
const selectedEventDetails = await loadSelectedEvent({
|
|
3703
3804
|
eventId: selectedEvent.eventId,
|
|
3704
3805
|
sessionId: state.sessionId,
|
|
3705
3806
|
type: selectedEvent.type
|
|
@@ -3719,13 +3820,7 @@ const restoreSelectedEvent = async state => {
|
|
|
3719
3820
|
};
|
|
3720
3821
|
|
|
3721
3822
|
const loadEventsForSessionId = async (state, sessionId) => {
|
|
3722
|
-
const
|
|
3723
|
-
databaseName,
|
|
3724
|
-
dataBaseVersion,
|
|
3725
|
-
eventStoreName,
|
|
3726
|
-
sessionIdIndexName
|
|
3727
|
-
} = state;
|
|
3728
|
-
const result = await loadEventsDependencies.listChatViewEvents(sessionId, databaseName, dataBaseVersion, eventStoreName, sessionIdIndexName);
|
|
3823
|
+
const result = await listChatViewEvents(sessionId);
|
|
3729
3824
|
if (result.type === 'error') {
|
|
3730
3825
|
return applyVirtualTableState(getStateWithTimelineInfo({
|
|
3731
3826
|
...state,
|
|
@@ -3764,14 +3859,6 @@ const loadEventsForSessionId = async (state, sessionId) => {
|
|
|
3764
3859
|
return withSelectedEventVisible(restoredState);
|
|
3765
3860
|
};
|
|
3766
3861
|
|
|
3767
|
-
const loadEventsFromUri = async state => {
|
|
3768
|
-
const sessionId = getSessionIdFromUri(state);
|
|
3769
|
-
if (!sessionId) {
|
|
3770
|
-
return getStateWithInvalidUri(state);
|
|
3771
|
-
}
|
|
3772
|
-
return loadEventsForSessionId(state, sessionId);
|
|
3773
|
-
};
|
|
3774
|
-
|
|
3775
3862
|
const refreshEvents = async state => {
|
|
3776
3863
|
const sessionId = state.sessionId || getSessionIdFromUri(state);
|
|
3777
3864
|
if (!sessionId) {
|
|
@@ -3784,11 +3871,8 @@ const refresh = async state => {
|
|
|
3784
3871
|
return refreshEvents(state);
|
|
3785
3872
|
};
|
|
3786
3873
|
|
|
3787
|
-
const handleClickRefreshDependencies = {
|
|
3788
|
-
refresh: refresh
|
|
3789
|
-
};
|
|
3790
3874
|
const handleClickRefresh = async state => {
|
|
3791
|
-
return
|
|
3875
|
+
return refresh(state);
|
|
3792
3876
|
};
|
|
3793
3877
|
|
|
3794
3878
|
const handleCloseDetails$1 = state => {
|
|
@@ -3926,6 +4010,28 @@ const getBoolean = value => {
|
|
|
3926
4010
|
return value === true || value === 'true' || value === 'on' || value === '1';
|
|
3927
4011
|
};
|
|
3928
4012
|
|
|
4013
|
+
const General = 'general';
|
|
4014
|
+
const RequestHeaders = 'requestHeaders';
|
|
4015
|
+
const ResponseHeaders = 'responseHeaders';
|
|
4016
|
+
const headerSectionKeys = [General, RequestHeaders, ResponseHeaders];
|
|
4017
|
+
const isHeaderSectionKey = value => {
|
|
4018
|
+
return headerSectionKeys.includes(value);
|
|
4019
|
+
};
|
|
4020
|
+
|
|
4021
|
+
const removeSection = (collapsedHeaderSections, section) => {
|
|
4022
|
+
return collapsedHeaderSections.filter(value => value !== section);
|
|
4023
|
+
};
|
|
4024
|
+
const toggleHeadersSection = (state, value) => {
|
|
4025
|
+
if (!isHeaderSectionKey(value)) {
|
|
4026
|
+
return state;
|
|
4027
|
+
}
|
|
4028
|
+
const isCollapsed = state.collapsedHeaderSections.includes(value);
|
|
4029
|
+
return {
|
|
4030
|
+
...state,
|
|
4031
|
+
collapsedHeaderSections: isCollapsed ? removeSection(state.collapsedHeaderSections, value) : [...state.collapsedHeaderSections, value]
|
|
4032
|
+
};
|
|
4033
|
+
};
|
|
4034
|
+
|
|
3929
4035
|
const parseTimelineRangePreset$1 = value => {
|
|
3930
4036
|
if (!value) {
|
|
3931
4037
|
return {
|
|
@@ -4095,6 +4201,9 @@ const handleDetailTab = (state, value) => {
|
|
|
4095
4201
|
detailTabs
|
|
4096
4202
|
};
|
|
4097
4203
|
};
|
|
4204
|
+
const handleToggleHeadersSection = (state, value) => {
|
|
4205
|
+
return toggleHeadersSection(state, value);
|
|
4206
|
+
};
|
|
4098
4207
|
const inputHandlers = {
|
|
4099
4208
|
[CloseDetails$1]: handleCloseDetails,
|
|
4100
4209
|
[DetailTab]: handleDetailTab,
|
|
@@ -4107,6 +4216,7 @@ const inputHandlers = {
|
|
|
4107
4216
|
[TimelineEndSeconds]: handleTimelineEndSeconds$1,
|
|
4108
4217
|
[TimelineRangePreset]: handleTimelineRangePreset$1,
|
|
4109
4218
|
[TimelineStartSeconds]: handleTimelineStartSeconds$1,
|
|
4219
|
+
[ToggleHeadersSection]: handleToggleHeadersSection,
|
|
4110
4220
|
[UseDevtoolsLayout]: handleUseDevtoolsLayout
|
|
4111
4221
|
};
|
|
4112
4222
|
const handleInput = (state, name, value, checked) => {
|
|
@@ -4209,9 +4319,6 @@ const getPayloadObject = (event, name) => {
|
|
|
4209
4319
|
};
|
|
4210
4320
|
};
|
|
4211
4321
|
const getPayloadEvent = event => {
|
|
4212
|
-
if (event && event.type === 'ai-request') {
|
|
4213
|
-
return event.body;
|
|
4214
|
-
}
|
|
4215
4322
|
const {
|
|
4216
4323
|
requestEvent
|
|
4217
4324
|
} = event;
|
|
@@ -4219,6 +4326,9 @@ const getPayloadEvent = event => {
|
|
|
4219
4326
|
if (mergedRequestPayloadEvent.found) {
|
|
4220
4327
|
return mergedRequestPayloadEvent.value;
|
|
4221
4328
|
}
|
|
4329
|
+
if (event && event.type === 'ai-request') {
|
|
4330
|
+
return event.body;
|
|
4331
|
+
}
|
|
4222
4332
|
const name = getPreviewName(event);
|
|
4223
4333
|
if (name === 'list_files' && hasOwn(event, 'arguments')) {
|
|
4224
4334
|
return event.arguments;
|
|
@@ -4238,57 +4348,75 @@ const isChatMessageUpdatedEvent = event => {
|
|
|
4238
4348
|
return event.type === 'chat-message-updated';
|
|
4239
4349
|
};
|
|
4240
4350
|
|
|
4351
|
+
const getObjectValue = value => {
|
|
4352
|
+
if (!value || typeof value !== 'object') {
|
|
4353
|
+
return undefined;
|
|
4354
|
+
}
|
|
4355
|
+
return value;
|
|
4356
|
+
};
|
|
4241
4357
|
const getResponseContentText = content => {
|
|
4242
|
-
|
|
4358
|
+
const contentObject = getObjectValue(content);
|
|
4359
|
+
if (!contentObject) {
|
|
4243
4360
|
return undefined;
|
|
4244
4361
|
}
|
|
4245
4362
|
if (Array.isArray(content)) {
|
|
4246
4363
|
const [firstContentItem] = content;
|
|
4247
|
-
|
|
4364
|
+
const firstContentItemObject = getObjectValue(firstContentItem);
|
|
4365
|
+
if (!firstContentItemObject) {
|
|
4248
4366
|
return undefined;
|
|
4249
4367
|
}
|
|
4250
4368
|
const {
|
|
4251
4369
|
text
|
|
4252
|
-
} =
|
|
4370
|
+
} = firstContentItemObject;
|
|
4253
4371
|
return typeof text === 'string' ? text : undefined;
|
|
4254
4372
|
}
|
|
4255
4373
|
const {
|
|
4256
4374
|
text
|
|
4257
|
-
} =
|
|
4375
|
+
} = contentObject;
|
|
4258
4376
|
return typeof text === 'string' ? text : undefined;
|
|
4259
4377
|
};
|
|
4260
|
-
const
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
} = event;
|
|
4265
|
-
if (!value || typeof value !== 'object') {
|
|
4266
|
-
return undefined;
|
|
4267
|
-
}
|
|
4268
|
-
const {
|
|
4269
|
-
response
|
|
4270
|
-
} = value;
|
|
4271
|
-
if (!response || typeof response !== 'object') {
|
|
4272
|
-
return undefined;
|
|
4273
|
-
}
|
|
4274
|
-
const {
|
|
4275
|
-
output
|
|
4276
|
-
} = response;
|
|
4277
|
-
return Array.isArray(output) ? output : undefined;
|
|
4378
|
+
const getOutput = value => {
|
|
4379
|
+
const valueObject = getObjectValue(value);
|
|
4380
|
+
if (!valueObject) {
|
|
4381
|
+
return undefined;
|
|
4278
4382
|
}
|
|
4279
|
-
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4383
|
+
const {
|
|
4384
|
+
output
|
|
4385
|
+
} = valueObject;
|
|
4386
|
+
return Array.isArray(output) ? output : undefined;
|
|
4387
|
+
};
|
|
4388
|
+
const getAiRequestResponseOutput = event => {
|
|
4389
|
+
const {
|
|
4390
|
+
endValue
|
|
4391
|
+
} = event;
|
|
4392
|
+
const endValueObject = getObjectValue(endValue);
|
|
4393
|
+
if (!endValueObject) {
|
|
4394
|
+
return undefined;
|
|
4395
|
+
}
|
|
4396
|
+
return getOutput(endValueObject.value);
|
|
4397
|
+
};
|
|
4398
|
+
const getCompletedResponseOutput = event => {
|
|
4399
|
+
const valueObject = getObjectValue(event.value);
|
|
4400
|
+
if (!valueObject) {
|
|
4401
|
+
return undefined;
|
|
4402
|
+
}
|
|
4403
|
+
const responseObject = getObjectValue(valueObject.response);
|
|
4404
|
+
if (!responseObject) {
|
|
4405
|
+
return undefined;
|
|
4406
|
+
}
|
|
4407
|
+
return getOutput(responseObject);
|
|
4408
|
+
};
|
|
4409
|
+
const getResponseOutput = event => {
|
|
4410
|
+
switch (event.type) {
|
|
4411
|
+
case 'ai-request':
|
|
4412
|
+
return getAiRequestResponseOutput(event);
|
|
4413
|
+
case 'ai-response':
|
|
4414
|
+
return getOutput(event.value);
|
|
4415
|
+
case 'sse-response-completed':
|
|
4416
|
+
return getCompletedResponseOutput(event);
|
|
4417
|
+
default:
|
|
4284
4418
|
return undefined;
|
|
4285
|
-
}
|
|
4286
|
-
const {
|
|
4287
|
-
output
|
|
4288
|
-
} = value;
|
|
4289
|
-
return Array.isArray(output) ? output : undefined;
|
|
4290
4419
|
}
|
|
4291
|
-
return undefined;
|
|
4292
4420
|
};
|
|
4293
4421
|
const getResponsePreviewText = event => {
|
|
4294
4422
|
const output = getResponseOutput(event);
|
|
@@ -4296,12 +4424,13 @@ const getResponsePreviewText = event => {
|
|
|
4296
4424
|
return undefined;
|
|
4297
4425
|
}
|
|
4298
4426
|
const [firstOutput] = output;
|
|
4299
|
-
|
|
4427
|
+
const firstOutputObject = getObjectValue(firstOutput);
|
|
4428
|
+
if (!firstOutputObject) {
|
|
4300
4429
|
return undefined;
|
|
4301
4430
|
}
|
|
4302
4431
|
const {
|
|
4303
4432
|
content
|
|
4304
|
-
} =
|
|
4433
|
+
} = firstOutputObject;
|
|
4305
4434
|
return getResponseContentText(content);
|
|
4306
4435
|
};
|
|
4307
4436
|
const getPreviewMessageText = event => {
|
|
@@ -4710,6 +4839,8 @@ const handleTableHeaderClick = (state, value) => {
|
|
|
4710
4839
|
|
|
4711
4840
|
const getTableResizerId = name => {
|
|
4712
4841
|
switch (name) {
|
|
4842
|
+
case 'ResizerFour':
|
|
4843
|
+
return 4;
|
|
4713
4844
|
case 'ResizerOne':
|
|
4714
4845
|
return 1;
|
|
4715
4846
|
case 'ResizerThree':
|
|
@@ -4758,6 +4889,30 @@ const handleTableRowCopy = async (state, eventIndex) => {
|
|
|
4758
4889
|
return state;
|
|
4759
4890
|
};
|
|
4760
4891
|
|
|
4892
|
+
const toDataUri$1 = text => {
|
|
4893
|
+
return `data:application/json,${encodeURIComponent(text)}`;
|
|
4894
|
+
};
|
|
4895
|
+
const handleTableRowDoubleClick = async (state, eventX, eventY) => {
|
|
4896
|
+
const eventIndex = getTableBodyEventIndex(state, eventX, eventY);
|
|
4897
|
+
if (eventIndex === -1) {
|
|
4898
|
+
return state;
|
|
4899
|
+
}
|
|
4900
|
+
const event = getCurrentEvents$1(state)[eventIndex];
|
|
4901
|
+
if (!event) {
|
|
4902
|
+
return state;
|
|
4903
|
+
}
|
|
4904
|
+
const responseData = getResponseData(event);
|
|
4905
|
+
if (responseData === undefined) {
|
|
4906
|
+
return state;
|
|
4907
|
+
}
|
|
4908
|
+
const text = JSON.stringify(responseData, null, 2);
|
|
4909
|
+
if (!text) {
|
|
4910
|
+
return state;
|
|
4911
|
+
}
|
|
4912
|
+
await openUri(toDataUri$1(text));
|
|
4913
|
+
return state;
|
|
4914
|
+
};
|
|
4915
|
+
|
|
4761
4916
|
const toDataUri = text => {
|
|
4762
4917
|
return `data:application/json,${encodeURIComponent(text)}`;
|
|
4763
4918
|
};
|
|
@@ -5089,14 +5244,20 @@ const handleStorageWorkerUpdate = async uid => {
|
|
|
5089
5244
|
await invoke('Viewlet.executeViewletCommand', uid, 'ChatDebug.handleClickRefresh');
|
|
5090
5245
|
};
|
|
5091
5246
|
|
|
5092
|
-
const
|
|
5093
|
-
|
|
5247
|
+
const loadEventsFromUri = async state => {
|
|
5248
|
+
const sessionId = getSessionIdFromUri(state);
|
|
5249
|
+
if (!sessionId) {
|
|
5250
|
+
return getStateWithInvalidUri(state);
|
|
5251
|
+
}
|
|
5252
|
+
return loadEventsForSessionId(state, sessionId);
|
|
5253
|
+
};
|
|
5254
|
+
|
|
5094
5255
|
const loadContent = async (state, savedState) => {
|
|
5095
5256
|
await getPreference('chatDebug.autoRefresh');
|
|
5096
5257
|
const nextState = await loadEventsFromUri(restoreSavedState(state, savedState));
|
|
5097
5258
|
if (nextState.sessionId) {
|
|
5098
5259
|
try {
|
|
5099
|
-
await
|
|
5260
|
+
await registerUpdateListener(nextState.sessionId, rpcId, nextState.uid);
|
|
5100
5261
|
} catch {
|
|
5101
5262
|
// ignore
|
|
5102
5263
|
}
|
|
@@ -5104,8 +5265,7 @@ const loadContent = async (state, savedState) => {
|
|
|
5104
5265
|
return applyVirtualTableState({
|
|
5105
5266
|
...nextState,
|
|
5106
5267
|
categoryFilters: createCategoryFilters(getSelectedEventCategoryFilters(nextState.categoryFilters)),
|
|
5107
|
-
detailTabs: createDetailTabs(getSelectedDetailTab(nextState.detailTabs), nextState.selectedEvent)
|
|
5108
|
-
tableColumns: createTableColumns()
|
|
5268
|
+
detailTabs: createDetailTabs(getSelectedDetailTab(nextState.detailTabs), nextState.selectedEvent)
|
|
5109
5269
|
});
|
|
5110
5270
|
};
|
|
5111
5271
|
|
|
@@ -5200,10 +5360,11 @@ const getCss = state => {
|
|
|
5200
5360
|
topSize = 30;
|
|
5201
5361
|
}
|
|
5202
5362
|
const tableColumnLayout = getTableColumnLayout(tableContentWidth, getVisibleTableColumns(state.tableColumns), state.tableColumnWidths);
|
|
5203
|
-
const [tableColZeroWidth = 0, tableColOneWidth = 0, tableColTwoWidth = 0, tableColThreeWidth = 0] = tableColumnLayout.visibleColumnWidths;
|
|
5363
|
+
const [tableColZeroWidth = 0, tableColOneWidth = 0, tableColTwoWidth = 0, tableColThreeWidth = 0, tableColFourWidth = 0] = tableColumnLayout.visibleColumnWidths;
|
|
5204
5364
|
const resizerOneLeft = tableColumnLayout.resizerLefts[0] ?? 0;
|
|
5205
5365
|
const resizerTwoLeft = tableColumnLayout.resizerLefts[1] ?? 0;
|
|
5206
5366
|
const resizerThreeLeft = tableColumnLayout.resizerLefts[2] ?? 0;
|
|
5367
|
+
const resizerFourLeft = tableColumnLayout.resizerLefts[3] ?? 0;
|
|
5207
5368
|
const {
|
|
5208
5369
|
selectionEndPercent,
|
|
5209
5370
|
selectionStartPercent
|
|
@@ -5216,6 +5377,7 @@ const getCss = state => {
|
|
|
5216
5377
|
--ChatDebugViewTableColOneWidth: ${tableColOneWidth}px;
|
|
5217
5378
|
--ChatDebugViewTableColTwoWidth: ${tableColTwoWidth}px;
|
|
5218
5379
|
--ChatDebugViewTableColThreeWidth: ${tableColThreeWidth}px;
|
|
5380
|
+
--ChatDebugViewTableColFourWidth: ${tableColFourWidth}px;
|
|
5219
5381
|
--ChatDebugViewDetailsLineNumberWidth: ${detailsLineNumberWidth}px;
|
|
5220
5382
|
--ChatDebugViewPreviewScrollBarHeight: ${previewVirtualization.scrollBarHeight}px;
|
|
5221
5383
|
--ChatDebugViewPreviewScrollBarOffset: ${previewVirtualization.scrollBarOffset}px;
|
|
@@ -5230,6 +5392,7 @@ const getCss = state => {
|
|
|
5230
5392
|
--ResizerOneLeft: ${resizerOneLeft}px;
|
|
5231
5393
|
--ResizerTwoLeft: ${resizerTwoLeft}px;
|
|
5232
5394
|
--ResizerThreeLeft: ${resizerThreeLeft}px;
|
|
5395
|
+
--ResizerFourLeft: ${resizerFourLeft}px;
|
|
5233
5396
|
--ChatDebugViewSashWidth: ${state.sashWidth}px;
|
|
5234
5397
|
--ChatDebugViewTableWidth: ${tableWidth}px;
|
|
5235
5398
|
--ChatDebugViewTimelineHeight: ${state.timelineHeight}px;
|
|
@@ -5252,6 +5415,26 @@ const getCss = state => {
|
|
|
5252
5415
|
width: calc(100% - var(--ChatDebugViewTableScrollBarWidth));
|
|
5253
5416
|
}
|
|
5254
5417
|
|
|
5418
|
+
.TableColZero {
|
|
5419
|
+
width: var(--ChatDebugViewTableColZeroWidth);
|
|
5420
|
+
}
|
|
5421
|
+
|
|
5422
|
+
.TableColOne {
|
|
5423
|
+
width: var(--ChatDebugViewTableColOneWidth);
|
|
5424
|
+
}
|
|
5425
|
+
|
|
5426
|
+
.TableColTwo {
|
|
5427
|
+
width: var(--ChatDebugViewTableColTwoWidth);
|
|
5428
|
+
}
|
|
5429
|
+
|
|
5430
|
+
.TableColThree {
|
|
5431
|
+
width: var(--ChatDebugViewTableColThreeWidth);
|
|
5432
|
+
}
|
|
5433
|
+
|
|
5434
|
+
.TableColFour {
|
|
5435
|
+
width: var(--ChatDebugViewTableColFourWidth);
|
|
5436
|
+
}
|
|
5437
|
+
|
|
5255
5438
|
.Resizers {
|
|
5256
5439
|
bottom: 0;
|
|
5257
5440
|
left: 0;
|
|
@@ -5287,6 +5470,10 @@ const getCss = state => {
|
|
|
5287
5470
|
left: var(--ResizerThreeLeft);
|
|
5288
5471
|
}
|
|
5289
5472
|
|
|
5473
|
+
.ResizerFour {
|
|
5474
|
+
left: var(--ResizerFourLeft);
|
|
5475
|
+
}
|
|
5476
|
+
|
|
5290
5477
|
.ResizerInner {
|
|
5291
5478
|
background: var(--vscode-panel-border, rgba(255, 255, 255, 0.12));
|
|
5292
5479
|
bottom: 0;
|
|
@@ -5333,14 +5520,26 @@ const getCss = state => {
|
|
|
5333
5520
|
}
|
|
5334
5521
|
|
|
5335
5522
|
.ChatDebugViewHeadersSectionHeading {
|
|
5523
|
+
align-items: center;
|
|
5524
|
+
background: transparent;
|
|
5525
|
+
border: 0;
|
|
5336
5526
|
color: var(--vscode-descriptionForeground, rgba(255, 255, 255, 0.7));
|
|
5527
|
+
cursor: pointer;
|
|
5528
|
+
display: flex;
|
|
5337
5529
|
font-size: 11px;
|
|
5338
5530
|
font-weight: 600;
|
|
5531
|
+
justify-content: flex-start;
|
|
5339
5532
|
letter-spacing: 0.08em;
|
|
5340
5533
|
margin-bottom: 6px;
|
|
5534
|
+
padding: 0;
|
|
5535
|
+
text-align: left;
|
|
5341
5536
|
text-transform: uppercase;
|
|
5342
5537
|
}
|
|
5343
5538
|
|
|
5539
|
+
.ChatDebugViewHeadersSectionHeading:hover {
|
|
5540
|
+
color: var(--vscode-editor-foreground);
|
|
5541
|
+
}
|
|
5542
|
+
|
|
5344
5543
|
.ChatDebugViewHeadersRow {
|
|
5345
5544
|
display: grid;
|
|
5346
5545
|
grid-template-columns: minmax(0, 38%) minmax(0, 1fr);
|
|
@@ -5818,6 +6017,7 @@ const ResizerInner = 'ResizerInner';
|
|
|
5818
6017
|
const ResizerOne = 'ResizerOne';
|
|
5819
6018
|
const ResizerTwo = 'ResizerTwo';
|
|
5820
6019
|
const ResizerThree = 'ResizerThree';
|
|
6020
|
+
const ResizerFour = 'ResizerFour';
|
|
5821
6021
|
const TableHead = 'TableHead';
|
|
5822
6022
|
const Resizers = 'Resizers';
|
|
5823
6023
|
const TableCol = 'TableCol';
|
|
@@ -5861,6 +6061,7 @@ const ChatDebugViewTop = 'ChatDebugViewTop';
|
|
|
5861
6061
|
const ChatDebugViewTopDevtools = 'ChatDebugViewTop--devtools';
|
|
5862
6062
|
const TableCell = 'TableCell';
|
|
5863
6063
|
const ChatDebugViewCellDuration = 'ChatDebugViewCellDuration';
|
|
6064
|
+
const ChatDebugViewCellSize = 'ChatDebugViewCellSize';
|
|
5864
6065
|
const ChatDebugViewCellStatusError = 'ChatDebugViewCellStatusError';
|
|
5865
6066
|
const InputBox = 'InputBox';
|
|
5866
6067
|
const TokenBoolean = 'Token TokenBoolean';
|
|
@@ -5912,6 +6113,7 @@ const HandlePreviewTextScrollBarPointerDown = 37;
|
|
|
5912
6113
|
const HandlePreviewTextScrollBarPointerMove = 38;
|
|
5913
6114
|
const HandlePreviewTextScrollBarPointerUp = 39;
|
|
5914
6115
|
const HandleRootContextMenu = 40;
|
|
6116
|
+
const HandleTableRowDoubleClick = 41;
|
|
5915
6117
|
|
|
5916
6118
|
const debugErrorRootNode = {
|
|
5917
6119
|
childCount: 1,
|
|
@@ -6307,18 +6509,23 @@ const getHeadersTableNodes = headers => {
|
|
|
6307
6509
|
type: Ul
|
|
6308
6510
|
}, ...headerRows];
|
|
6309
6511
|
};
|
|
6310
|
-
const getHeaderSectionNodes = (label, headers) => {
|
|
6512
|
+
const getHeaderSectionNodes = (section, label, headers, collapsedHeaderSections) => {
|
|
6513
|
+
const isCollapsed = collapsedHeaderSections.includes(section);
|
|
6311
6514
|
return [{
|
|
6312
|
-
childCount: 2,
|
|
6515
|
+
childCount: isCollapsed ? 1 : 2,
|
|
6313
6516
|
className: ChatDebugViewHeadersSection,
|
|
6314
6517
|
type: Div
|
|
6315
6518
|
}, {
|
|
6316
6519
|
childCount: 1,
|
|
6317
6520
|
className: ChatDebugViewHeadersSectionHeading,
|
|
6318
|
-
|
|
6319
|
-
|
|
6521
|
+
name: ToggleHeadersSection,
|
|
6522
|
+
onChange: HandleFilterInput,
|
|
6523
|
+
onClick: HandleFilterInput,
|
|
6524
|
+
type: Button$1,
|
|
6525
|
+
value: section
|
|
6526
|
+
}, text(label), ...(isCollapsed ? [] : getHeadersTableNodes(headers))];
|
|
6320
6527
|
};
|
|
6321
|
-
const getHeadersContentNodes = (responseEventNodes, selectedEvent) => {
|
|
6528
|
+
const getHeadersContentNodes = (responseEventNodes, selectedEvent, collapsedHeaderSections = []) => {
|
|
6322
6529
|
const generalEntries = getGeneralEntries(selectedEvent);
|
|
6323
6530
|
const requestHeaders$1 = getHeaders(selectedEvent?.headers);
|
|
6324
6531
|
const responseHeaders$1 = getHeaders(isHeadersRecord(selectedEvent?.endValue) ? selectedEvent.endValue.headers : undefined);
|
|
@@ -6327,13 +6534,13 @@ const getHeadersContentNodes = (responseEventNodes, selectedEvent) => {
|
|
|
6327
6534
|
}
|
|
6328
6535
|
const nodes = [];
|
|
6329
6536
|
if (generalEntries.length > 0) {
|
|
6330
|
-
nodes.push(...getHeaderSectionNodes(general(), generalEntries));
|
|
6537
|
+
nodes.push(...getHeaderSectionNodes(General, general(), generalEntries, collapsedHeaderSections));
|
|
6331
6538
|
}
|
|
6332
6539
|
if (requestHeaders$1.length > 0) {
|
|
6333
|
-
nodes.push(...getHeaderSectionNodes(requestHeaders(), requestHeaders$1));
|
|
6540
|
+
nodes.push(...getHeaderSectionNodes(RequestHeaders, requestHeaders(), requestHeaders$1, collapsedHeaderSections));
|
|
6334
6541
|
}
|
|
6335
6542
|
if (responseHeaders$1.length > 0) {
|
|
6336
|
-
nodes.push(...getHeaderSectionNodes(responseHeaders(), responseHeaders$1));
|
|
6543
|
+
nodes.push(...getHeaderSectionNodes(ResponseHeaders, responseHeaders(), responseHeaders$1, collapsedHeaderSections));
|
|
6337
6544
|
}
|
|
6338
6545
|
return nodes;
|
|
6339
6546
|
};
|
|
@@ -7427,7 +7634,7 @@ const getTokenUsageContentNodes = (responseEventNodes, selectedEvent) => {
|
|
|
7427
7634
|
return getTokenUsageDetailsDom(selectedEvent);
|
|
7428
7635
|
};
|
|
7429
7636
|
|
|
7430
|
-
const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization) => {
|
|
7637
|
+
const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization, collapsedHeaderSections = []) => {
|
|
7431
7638
|
if (safeSelectedDetailTab === Tokens$1) {
|
|
7432
7639
|
return getTokenUsageContentNodes(responseEventNodes, selectedEvent);
|
|
7433
7640
|
}
|
|
@@ -7441,19 +7648,19 @@ const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, paylo
|
|
|
7441
7648
|
return getPayloadContentNodes(payloadEventNodes, selectedEvent);
|
|
7442
7649
|
}
|
|
7443
7650
|
if (safeSelectedDetailTab === Headers$1) {
|
|
7444
|
-
return getHeadersContentNodes(responseEventNodes, selectedEvent);
|
|
7651
|
+
return getHeadersContentNodes(responseEventNodes, selectedEvent, collapsedHeaderSections);
|
|
7445
7652
|
}
|
|
7446
7653
|
return getResponseContentNodes(responseEventNodes, selectedEvent);
|
|
7447
7654
|
};
|
|
7448
7655
|
|
|
7449
|
-
const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes, responseEventNodes = payloadEventNodes, selectedEvent = null, detailTabs = createDetailTabs(), previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, previewVirtualization) => {
|
|
7656
|
+
const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes, responseEventNodes = payloadEventNodes, selectedEvent = null, detailTabs = createDetailTabs(), previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, previewVirtualization, collapsedHeaderSections = []) => {
|
|
7450
7657
|
if (previewEventNodes.length === 0 && payloadEventNodes.length === 0 && responseEventNodes.length === 0) {
|
|
7451
7658
|
return [];
|
|
7452
7659
|
}
|
|
7453
7660
|
const normalizedDetailTabs = getNormalizedDetailTabs(selectedEvent, detailTabs);
|
|
7454
7661
|
const safeSelectedDetailTab = getSelectedDetailTab(normalizedDetailTabs);
|
|
7455
7662
|
const selectedDetailTab = normalizedDetailTabs.find(detailTab => detailTab.name === safeSelectedDetailTab) ?? normalizedDetailTabs[0];
|
|
7456
|
-
const contentNodes = getSelectedContentNodes(safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization);
|
|
7663
|
+
const contentNodes = getSelectedContentNodes(safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization, collapsedHeaderSections);
|
|
7457
7664
|
return [{
|
|
7458
7665
|
childCount: 2,
|
|
7459
7666
|
className: ChatDebugViewDetails,
|
|
@@ -7461,13 +7668,13 @@ const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes,
|
|
|
7461
7668
|
}, ...getDetailsTopVirtualDom(normalizedDetailTabs), ...getDetailContentDom(selectedDetailTab, safeSelectedDetailTab, contentNodes)];
|
|
7462
7669
|
};
|
|
7463
7670
|
|
|
7464
|
-
const td$
|
|
7671
|
+
const td$2 = {
|
|
7465
7672
|
childCount: 1,
|
|
7466
7673
|
className: mergeClassNames(TableCell, ChatDebugViewCellDuration),
|
|
7467
7674
|
type: Td
|
|
7468
7675
|
};
|
|
7469
7676
|
const getCellDurationDom = event => {
|
|
7470
|
-
return [td$
|
|
7677
|
+
return [td$2, text(getEventTableDurationText(event))];
|
|
7471
7678
|
};
|
|
7472
7679
|
|
|
7473
7680
|
const getMethods = new Set(['list_dir', 'list_files', 'read_file']);
|
|
@@ -7493,13 +7700,22 @@ const getEventTableMethodLabel = event => {
|
|
|
7493
7700
|
return '';
|
|
7494
7701
|
};
|
|
7495
7702
|
|
|
7496
|
-
const td = {
|
|
7703
|
+
const td$1 = {
|
|
7497
7704
|
childCount: 1,
|
|
7498
7705
|
className: TableCell,
|
|
7499
7706
|
type: Td
|
|
7500
7707
|
};
|
|
7501
7708
|
const getCellMethodDom = event => {
|
|
7502
|
-
return [td, text(getEventTableMethodLabel(event))];
|
|
7709
|
+
return [td$1, text(getEventTableMethodLabel(event))];
|
|
7710
|
+
};
|
|
7711
|
+
|
|
7712
|
+
const td = {
|
|
7713
|
+
childCount: 1,
|
|
7714
|
+
className: mergeClassNames(TableCell, ChatDebugViewCellSize),
|
|
7715
|
+
type: Td
|
|
7716
|
+
};
|
|
7717
|
+
const getCellSizeDom = event => {
|
|
7718
|
+
return [td, text(formatBytes(event.size ?? 0))];
|
|
7503
7719
|
};
|
|
7504
7720
|
|
|
7505
7721
|
const getCellStatusDom = (event, isErrorStatus) => {
|
|
@@ -7524,6 +7740,8 @@ const getTableCellDom = (column, event, isErrorStatus) => {
|
|
|
7524
7740
|
return getCellDurationDom(event);
|
|
7525
7741
|
case Method:
|
|
7526
7742
|
return getCellMethodDom(event);
|
|
7743
|
+
case Size:
|
|
7744
|
+
return getCellSizeDom(event);
|
|
7527
7745
|
case Status$1:
|
|
7528
7746
|
return getCellStatusDom(event, isErrorStatus);
|
|
7529
7747
|
case Type:
|
|
@@ -7683,23 +7901,27 @@ const getTableBodyDom = (rowNodes, eventCount) => {
|
|
|
7683
7901
|
childCount: eventCount === 0 ? 1 : eventCount,
|
|
7684
7902
|
className: TableBody,
|
|
7685
7903
|
onContextMenu: HandleTableBodyContextMenu,
|
|
7904
|
+
onDblClick: HandleTableRowDoubleClick,
|
|
7686
7905
|
onPointerDown: HandleEventRowClickAt,
|
|
7687
7906
|
type: TBody
|
|
7688
7907
|
}, ...rowNodes];
|
|
7689
7908
|
};
|
|
7690
7909
|
|
|
7691
|
-
const tableColClassNames = ['TableColZero', 'TableColOne', 'TableColTwo', 'TableColThree'];
|
|
7910
|
+
const tableColClassNames = ['TableColZero', 'TableColOne', 'TableColTwo', 'TableColThree', 'TableColFour'];
|
|
7692
7911
|
const getTableColumnGroupDom = visibleTableColumns => {
|
|
7693
7912
|
const orderedVisibleTableColumns = getOrderedVisibleTableColumns(visibleTableColumns);
|
|
7694
7913
|
return [{
|
|
7695
7914
|
childCount: orderedVisibleTableColumns.length,
|
|
7696
7915
|
className: 'ColGroup',
|
|
7697
7916
|
type: ColGroup
|
|
7698
|
-
}, ...orderedVisibleTableColumns.map((_, index) =>
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7702
|
-
|
|
7917
|
+
}, ...orderedVisibleTableColumns.map((_, index) => {
|
|
7918
|
+
const columnClassName = tableColClassNames[index] ?? `TableCol${index}`;
|
|
7919
|
+
return {
|
|
7920
|
+
childCount: 0,
|
|
7921
|
+
className: `${TableCol} ${columnClassName}`,
|
|
7922
|
+
type: Col
|
|
7923
|
+
};
|
|
7924
|
+
})];
|
|
7703
7925
|
};
|
|
7704
7926
|
|
|
7705
7927
|
const getHeaderCellNode = (column, tableColumns) => {
|
|
@@ -7740,8 +7962,8 @@ const getTableDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleT
|
|
|
7740
7962
|
}, ...getTableColumnGroupDom(visibleTableColumns), ...getTableHeaderDom(visibleTableColumns, tableColumns), ...getTableBodyDom(rowNodes, eventCount)];
|
|
7741
7963
|
};
|
|
7742
7964
|
|
|
7743
|
-
const resizerNames = ['ResizerOne', 'ResizerTwo', 'ResizerThree'];
|
|
7744
|
-
const resizerClassNames = [ResizerOne, ResizerTwo, ResizerThree];
|
|
7965
|
+
const resizerNames = ['ResizerOne', 'ResizerTwo', 'ResizerThree', 'ResizerFour'];
|
|
7966
|
+
const resizerClassNames = [ResizerOne, ResizerTwo, ResizerThree, ResizerFour];
|
|
7745
7967
|
const getTableResizersDom = visibleTableColumns => {
|
|
7746
7968
|
const visibleColumnCount = getOrderedVisibleTableColumns(visibleTableColumns).length;
|
|
7747
7969
|
const resizerCount = Math.max(0, visibleColumnCount - 1);
|
|
@@ -7980,7 +8202,7 @@ const getTimelineDom = (timelineInfo, hoverPercent = null) => {
|
|
|
7980
8202
|
}, ...selectionNodes];
|
|
7981
8203
|
};
|
|
7982
8204
|
|
|
7983
|
-
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, previewTextDeltaY = 0, previewTextViewportHeight = 0, minLineY = 0, maxLineY = events.length) => {
|
|
8205
|
+
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, previewTextDeltaY = 0, previewTextViewportHeight = 0, minLineY = 0, maxLineY = events.length, collapsedHeaderSections = []) => {
|
|
7984
8206
|
const visibleEvents = events.slice(minLineY, maxLineY);
|
|
7985
8207
|
const rows = createDevtoolsRows(visibleEvents, selectedEventIndex, minLineY);
|
|
7986
8208
|
const rowNodes = getDevtoolsRows(rows, visibleTableColumns);
|
|
@@ -8005,7 +8227,7 @@ const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvent
|
|
|
8005
8227
|
const summary = getTableSummary(events);
|
|
8006
8228
|
const showScrollBar = visibleEvents.length < events.length;
|
|
8007
8229
|
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableWrapperWrapperDom(rowNodes, visibleEvents.length, visibleTableColumns, tableColumns, summary, focus, '', '', showScrollBar);
|
|
8008
|
-
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualizationOptions);
|
|
8230
|
+
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualizationOptions, collapsedHeaderSections);
|
|
8009
8231
|
const sashNodes = getSashNodesDom(hasSelectedEvent);
|
|
8010
8232
|
const splitChildCount = hasSelectedEvent ? 3 : 1;
|
|
8011
8233
|
const rootChildCount = 3;
|
|
@@ -8059,7 +8281,7 @@ const getEventCategoryFilterDescription = eventCategoryFilters => {
|
|
|
8059
8281
|
}
|
|
8060
8282
|
return eventCategoryFilters.map(eventCategoryFilter => getEventCategoryFilterLabel(eventCategoryFilter).toLowerCase()).join(', ');
|
|
8061
8283
|
};
|
|
8062
|
-
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, previewTextDeltaY = 0, previewTextViewportHeight = 0) => {
|
|
8284
|
+
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, previewTextDeltaY = 0, previewTextViewportHeight = 0, collapsedHeaderSections = []) => {
|
|
8063
8285
|
if (errorMessage) {
|
|
8064
8286
|
return getDebugErrorDom(errorMessage);
|
|
8065
8287
|
}
|
|
@@ -8083,7 +8305,7 @@ const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, ca
|
|
|
8083
8305
|
const emptyMessage = getEmptyMessage(events.length, hasFilterValue, useNoToolCallEventsMessage, noFilteredEventsMessage);
|
|
8084
8306
|
const safeSelectedEventIndex = selectedEventIndex === null || selectedEventIndex < 0 || selectedEventIndex >= events.length ? null : selectedEventIndex;
|
|
8085
8307
|
if (useDevtoolsLayout) {
|
|
8086
|
-
const devtoolsDom = getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, detailTabs, visibleTableColumns, tableColumns, timelineInfo, timelineHoverPercent, focus, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewTextDeltaY, previewTextViewportHeight, minLineY, maxLineY);
|
|
8308
|
+
const devtoolsDom = getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, detailTabs, visibleTableColumns, tableColumns, timelineInfo, timelineHoverPercent, focus, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewTextDeltaY, previewTextViewportHeight, minLineY, maxLineY, collapsedHeaderSections);
|
|
8087
8309
|
const devtoolsContentNodes = devtoolsDom.slice(1);
|
|
8088
8310
|
const topLevelNodes = [...getDebugViewTopDom(filterValue, useDevtoolsLayout, categoryFilters), ...devtoolsContentNodes];
|
|
8089
8311
|
const rootChildCount = getTopLevelChildCount(topLevelNodes);
|
|
@@ -8119,7 +8341,7 @@ const renderItems = (oldState, newState) => {
|
|
|
8119
8341
|
}
|
|
8120
8342
|
const filteredEvents = getCurrentEvents$1(newState);
|
|
8121
8343
|
const previewTextViewportHeight = getPreviewTextViewportHeight(newState);
|
|
8122
|
-
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);
|
|
8344
|
+
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, newState.collapsedHeaderSections);
|
|
8123
8345
|
return [SetDom2, newState.uid, dom];
|
|
8124
8346
|
};
|
|
8125
8347
|
|
|
@@ -8204,6 +8426,9 @@ const renderEventListeners = () => {
|
|
|
8204
8426
|
}, {
|
|
8205
8427
|
name: HandleEventRowClickAt,
|
|
8206
8428
|
params: ['handleEventRowClickAt', ClientX, ClientY, Button]
|
|
8429
|
+
}, {
|
|
8430
|
+
name: HandleTableRowDoubleClick,
|
|
8431
|
+
params: ['handleTableRowDoubleClick', ClientX, ClientY]
|
|
8207
8432
|
}, {
|
|
8208
8433
|
name: HandleTableBodyContextMenu,
|
|
8209
8434
|
params: ['handleTableBodyContextMenu', ClientX, ClientY],
|
|
@@ -8407,19 +8632,9 @@ const setEvents = (state, events) => {
|
|
|
8407
8632
|
}));
|
|
8408
8633
|
};
|
|
8409
8634
|
|
|
8410
|
-
const setSessionIdDependencies = {
|
|
8411
|
-
listChatViewEvents: listChatViewEvents,
|
|
8412
|
-
registerUpdateListener: registerUpdateListener
|
|
8413
|
-
};
|
|
8414
8635
|
const setSessionId = async (state, sessionId) => {
|
|
8415
|
-
const
|
|
8416
|
-
|
|
8417
|
-
dataBaseVersion,
|
|
8418
|
-
eventStoreName,
|
|
8419
|
-
sessionIdIndexName
|
|
8420
|
-
} = state;
|
|
8421
|
-
const result = await setSessionIdDependencies.listChatViewEvents(sessionId, databaseName, dataBaseVersion, eventStoreName, sessionIdIndexName);
|
|
8422
|
-
await setSessionIdDependencies.registerUpdateListener(sessionId, rpcId, state.uid);
|
|
8636
|
+
const result = await listChatViewEvents(sessionId);
|
|
8637
|
+
await registerUpdateListener(sessionId, rpcId, state.uid);
|
|
8423
8638
|
if (result.type === 'error') {
|
|
8424
8639
|
return {
|
|
8425
8640
|
...state,
|
|
@@ -8518,6 +8733,7 @@ const commandMap = {
|
|
|
8518
8733
|
'ChatDebug.handleTableResizerPointerMove': wrapCommand(handleTableResizerPointerMove),
|
|
8519
8734
|
'ChatDebug.handleTableResizerPointerUp': wrapCommand(handleTableResizerPointerUp),
|
|
8520
8735
|
'ChatDebug.handleTableRowCopy': wrapCommand(handleTableRowCopy),
|
|
8736
|
+
'ChatDebug.handleTableRowDoubleClick': wrapCommand(handleTableRowDoubleClick),
|
|
8521
8737
|
'ChatDebug.handleTableRowOpenInNewTab': wrapCommand(handleTableRowOpenInNewTab),
|
|
8522
8738
|
'ChatDebug.handleTableScrollBarPointerDown': wrapCommand(handleTableScrollBarPointerDown),
|
|
8523
8739
|
'ChatDebug.handleTableScrollBarPointerMove': wrapCommand(handleTableScrollBarPointerMove),
|