@lvce-editor/chat-debug-view 10.21.0 → 10.22.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 +422 -276
- package/package.json +1 -1
|
@@ -1481,11 +1481,11 @@ const General$1 = 'General';
|
|
|
1481
1481
|
const Headers = 'Headers';
|
|
1482
1482
|
const ImageCouldNotBeLoaded = 'image could not be loaded';
|
|
1483
1483
|
const InputTokens = 'Input Tokens';
|
|
1484
|
-
const InvalidSessionId = 'Invalid session id';
|
|
1485
|
-
const InvalidUriEncoding = 'Invalid URI encoding';
|
|
1486
|
-
const InvalidUriFormat = 'Invalid URI format';
|
|
1484
|
+
const InvalidSessionId$1 = 'Invalid session id';
|
|
1485
|
+
const InvalidUriEncoding$1 = 'Invalid URI encoding';
|
|
1486
|
+
const InvalidUriFormat$1 = 'Invalid URI format';
|
|
1487
1487
|
const Method$1 = 'Method';
|
|
1488
|
-
const MissingUri = 'Missing URI';
|
|
1488
|
+
const MissingUri$1 = 'Missing URI';
|
|
1489
1489
|
const Network = 'Network';
|
|
1490
1490
|
const NoChatSessionFound = 'No chat session found for sessionId "{PH1}".';
|
|
1491
1491
|
const NoEventsFound = 'No events have been found';
|
|
@@ -1503,14 +1503,16 @@ const RequestMethod = 'Request Method';
|
|
|
1503
1503
|
const RequestUrl = 'Request URL';
|
|
1504
1504
|
const Response = 'Response';
|
|
1505
1505
|
const ResponseHeaders$1 = 'Response Headers';
|
|
1506
|
+
const ResponseHeadersInfo = 'Some headers may not be displayed due to Access-Control-Expose-Headers header.';
|
|
1506
1507
|
const SecondsRange = '{PH1}s-{PH2}s';
|
|
1507
1508
|
const Size$1 = 'Size';
|
|
1508
1509
|
const Started = 'Started';
|
|
1509
1510
|
const Status$2 = 'Status';
|
|
1510
1511
|
const StatusCode = 'Status Code';
|
|
1511
1512
|
const Stream = 'Stream';
|
|
1512
|
-
const
|
|
1513
|
-
const
|
|
1513
|
+
const TableSummaryRequestPlural = '{PH1} requests';
|
|
1514
|
+
const TableSummaryRequestSingular = '{PH1} request';
|
|
1515
|
+
const TableSummaryFinish = 'Finish {PH1}';
|
|
1514
1516
|
const Timing = 'Timing';
|
|
1515
1517
|
const Tokens = 'Tokens';
|
|
1516
1518
|
const ToSeconds = 'to {PH1}s';
|
|
@@ -1574,7 +1576,7 @@ const headers = () => {
|
|
|
1574
1576
|
return i18nString(Headers);
|
|
1575
1577
|
};
|
|
1576
1578
|
const invalidSessionId = () => {
|
|
1577
|
-
return i18nString(InvalidSessionId);
|
|
1579
|
+
return i18nString(InvalidSessionId$1);
|
|
1578
1580
|
};
|
|
1579
1581
|
const imageCouldNotBeLoaded = () => {
|
|
1580
1582
|
return i18nString(ImageCouldNotBeLoaded);
|
|
@@ -1583,13 +1585,13 @@ const inputTokens = () => {
|
|
|
1583
1585
|
return i18nString(InputTokens);
|
|
1584
1586
|
};
|
|
1585
1587
|
const invalidUriEncoding = () => {
|
|
1586
|
-
return i18nString(InvalidUriEncoding);
|
|
1588
|
+
return i18nString(InvalidUriEncoding$1);
|
|
1587
1589
|
};
|
|
1588
1590
|
const invalidUriFormat = () => {
|
|
1589
|
-
return i18nString(InvalidUriFormat);
|
|
1591
|
+
return i18nString(InvalidUriFormat$1);
|
|
1590
1592
|
};
|
|
1591
1593
|
const missingUri = () => {
|
|
1592
|
-
return i18nString(MissingUri);
|
|
1594
|
+
return i18nString(MissingUri$1);
|
|
1593
1595
|
};
|
|
1594
1596
|
const method = () => {
|
|
1595
1597
|
return i18nString(Method$1);
|
|
@@ -1640,6 +1642,9 @@ const requestUrl = () => {
|
|
|
1640
1642
|
const responseHeaders = () => {
|
|
1641
1643
|
return i18nString(ResponseHeaders$1);
|
|
1642
1644
|
};
|
|
1645
|
+
const responseHeadersInfo = () => {
|
|
1646
|
+
return i18nString(ResponseHeadersInfo);
|
|
1647
|
+
};
|
|
1643
1648
|
const resetColumns = () => {
|
|
1644
1649
|
return i18nString(ResetColumns);
|
|
1645
1650
|
};
|
|
@@ -1670,10 +1675,14 @@ const timing = () => {
|
|
|
1670
1675
|
const tokens = () => {
|
|
1671
1676
|
return i18nString(Tokens);
|
|
1672
1677
|
};
|
|
1673
|
-
const
|
|
1674
|
-
return i18nString(eventCount === 1 ?
|
|
1675
|
-
PH1: String(eventCount)
|
|
1676
|
-
|
|
1678
|
+
const tableSummaryRequests = eventCount => {
|
|
1679
|
+
return i18nString(eventCount === 1 ? TableSummaryRequestSingular : TableSummaryRequestPlural, {
|
|
1680
|
+
PH1: String(eventCount)
|
|
1681
|
+
});
|
|
1682
|
+
};
|
|
1683
|
+
const tableSummaryFinish = duration => {
|
|
1684
|
+
return i18nString(TableSummaryFinish, {
|
|
1685
|
+
PH1: duration
|
|
1677
1686
|
});
|
|
1678
1687
|
};
|
|
1679
1688
|
const toSeconds = seconds => {
|
|
@@ -1811,25 +1820,6 @@ const isDetailTab = value => {
|
|
|
1811
1820
|
return value === Response$1 || value === Preview$1 || value === Payload$1 || value === Headers$1 || value === Tokens$1 || value === Headers$1 || value === Timing$1;
|
|
1812
1821
|
};
|
|
1813
1822
|
|
|
1814
|
-
const RE_SPACE = /\s+/;
|
|
1815
|
-
const tokenToEventCategoryFilter = new Map([['@tools', Tools$1], ['@network', Network$1], ['@ui', Ui$1], ['@stream', Stream$1]]);
|
|
1816
|
-
const parseFilterValue = filterValue => {
|
|
1817
|
-
const normalizedFilter = filterValue.trim().toLowerCase();
|
|
1818
|
-
if (!normalizedFilter) {
|
|
1819
|
-
return {
|
|
1820
|
-
eventCategoryFilter: All$1,
|
|
1821
|
-
filterText: ''
|
|
1822
|
-
};
|
|
1823
|
-
}
|
|
1824
|
-
const parts = normalizedFilter.split(RE_SPACE);
|
|
1825
|
-
const eventCategoryFilter = parts.map(part => tokenToEventCategoryFilter.get(part)).find(Boolean) || All$1;
|
|
1826
|
-
const filterText = parts.filter(part => !tokenToEventCategoryFilter.has(part)).join(' ');
|
|
1827
|
-
return {
|
|
1828
|
-
eventCategoryFilter,
|
|
1829
|
-
filterText
|
|
1830
|
-
};
|
|
1831
|
-
};
|
|
1832
|
-
|
|
1833
1823
|
const hasDetailTab = (detailTabs, value) => {
|
|
1834
1824
|
return detailTabs.some(detailTab => detailTab.name === value);
|
|
1835
1825
|
};
|
|
@@ -1852,28 +1842,45 @@ const Duration = 'duration';
|
|
|
1852
1842
|
const Status$1 = 'status';
|
|
1853
1843
|
const Size = 'size';
|
|
1854
1844
|
const tableColumnNames = [Type, Method, Status$1, Size, Duration];
|
|
1855
|
-
const
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
label:
|
|
1859
|
-
|
|
1860
|
-
},
|
|
1861
|
-
|
|
1845
|
+
const tableColumnDefinitions = {
|
|
1846
|
+
[Duration]: {
|
|
1847
|
+
defaultWidth: 110,
|
|
1848
|
+
label: duration(),
|
|
1849
|
+
minimumWidth: 80
|
|
1850
|
+
},
|
|
1851
|
+
[Method]: {
|
|
1852
|
+
defaultWidth: 90,
|
|
1862
1853
|
label: method(),
|
|
1863
|
-
|
|
1864
|
-
},
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
name: Status$1
|
|
1868
|
-
}, {
|
|
1869
|
-
isVisible: true,
|
|
1854
|
+
minimumWidth: 56
|
|
1855
|
+
},
|
|
1856
|
+
[Size]: {
|
|
1857
|
+
defaultWidth: 100,
|
|
1870
1858
|
label: size(),
|
|
1871
|
-
|
|
1872
|
-
},
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1859
|
+
minimumWidth: 80
|
|
1860
|
+
},
|
|
1861
|
+
[Status$1]: {
|
|
1862
|
+
defaultWidth: 110,
|
|
1863
|
+
label: status(),
|
|
1864
|
+
minimumWidth: 56
|
|
1865
|
+
},
|
|
1866
|
+
[Type]: {
|
|
1867
|
+
defaultWidth: 260,
|
|
1868
|
+
label: type(),
|
|
1869
|
+
minimumWidth: 80
|
|
1870
|
+
}
|
|
1871
|
+
};
|
|
1872
|
+
const createTableColumns = () => {
|
|
1873
|
+
return tableColumnNames.map(name => {
|
|
1874
|
+
const definition = tableColumnDefinitions[name];
|
|
1875
|
+
return {
|
|
1876
|
+
defaultWidth: definition.defaultWidth,
|
|
1877
|
+
isVisible: true,
|
|
1878
|
+
label: definition.label,
|
|
1879
|
+
minimumWidth: definition.minimumWidth,
|
|
1880
|
+
name,
|
|
1881
|
+
width: definition.defaultWidth
|
|
1882
|
+
};
|
|
1883
|
+
});
|
|
1877
1884
|
};
|
|
1878
1885
|
const defaultVisibleTableColumns = tableColumnNames;
|
|
1879
1886
|
const isTableColumn = value => {
|
|
@@ -1889,13 +1896,45 @@ const getTableColumnsWithVisibility = (tableColumns, visibleTableColumns) => {
|
|
|
1889
1896
|
isVisible: visibleColumns.has(column.name)
|
|
1890
1897
|
}));
|
|
1891
1898
|
};
|
|
1899
|
+
const getTableColumnByName = (tableColumns, name) => {
|
|
1900
|
+
return tableColumns.find(column => column.name === name);
|
|
1901
|
+
};
|
|
1902
|
+
const getTableColumnWidth = (tableColumns, name) => {
|
|
1903
|
+
return getTableColumnByName(tableColumns, name)?.width ?? 0;
|
|
1904
|
+
};
|
|
1905
|
+
const getTableColumnMinimumWidth = (tableColumns, name) => {
|
|
1906
|
+
return getTableColumnByName(tableColumns, name)?.minimumWidth ?? 0;
|
|
1907
|
+
};
|
|
1908
|
+
const getTableColumnWidths = tableColumns => {
|
|
1909
|
+
return {
|
|
1910
|
+
duration: getTableColumnWidth(tableColumns, Duration),
|
|
1911
|
+
method: getTableColumnWidth(tableColumns, Method),
|
|
1912
|
+
size: getTableColumnWidth(tableColumns, Size),
|
|
1913
|
+
status: getTableColumnWidth(tableColumns, Status$1),
|
|
1914
|
+
type: getTableColumnWidth(tableColumns, Type)
|
|
1915
|
+
};
|
|
1916
|
+
};
|
|
1917
|
+
const setTableColumnWidths = (tableColumns, tableColumnWidths) => {
|
|
1918
|
+
return tableColumns.map(column => ({
|
|
1919
|
+
...column,
|
|
1920
|
+
width: tableColumnWidths[column.name]
|
|
1921
|
+
}));
|
|
1922
|
+
};
|
|
1923
|
+
const setTableColumnWidth = (tableColumns, columnName, width) => {
|
|
1924
|
+
return tableColumns.map(column => {
|
|
1925
|
+
if (column.name !== columnName) {
|
|
1926
|
+
return column;
|
|
1927
|
+
}
|
|
1928
|
+
return {
|
|
1929
|
+
...column,
|
|
1930
|
+
width
|
|
1931
|
+
};
|
|
1932
|
+
});
|
|
1933
|
+
};
|
|
1892
1934
|
const getOrderedVisibleTableColumns = (values, tableColumns = createTableColumns()) => {
|
|
1893
1935
|
const visibleColumns = new Set(values.filter(isTableColumn));
|
|
1894
1936
|
return tableColumns.map(column => column.name).filter(column => visibleColumns.has(column));
|
|
1895
1937
|
};
|
|
1896
|
-
const isVisibleTableColumn = (tableColumns, column) => {
|
|
1897
|
-
return tableColumns.some(tableColumn => tableColumn.name === column && tableColumn.isVisible);
|
|
1898
|
-
};
|
|
1899
1938
|
const getTableColumnLabel = (tableColumns, name) => {
|
|
1900
1939
|
const match = tableColumns.find(column => column.name === name);
|
|
1901
1940
|
if (match) {
|
|
@@ -1917,17 +1956,15 @@ const getTableColumnLabel = (tableColumns, name) => {
|
|
|
1917
1956
|
}
|
|
1918
1957
|
};
|
|
1919
1958
|
|
|
1920
|
-
const defaultTableColumnWidths = {
|
|
1921
|
-
duration: 110,
|
|
1922
|
-
method: 90,
|
|
1923
|
-
size: 100,
|
|
1924
|
-
status: 110,
|
|
1925
|
-
type: 260
|
|
1926
|
-
};
|
|
1927
|
-
|
|
1928
1959
|
const getMainWidth = state => {
|
|
1929
1960
|
return Math.max(0, state.width - state.horizontalPadding);
|
|
1930
1961
|
};
|
|
1962
|
+
const getNarrowMainWidthBreakpoint = state => {
|
|
1963
|
+
return Math.max(0, state.mediumBreakpoint - state.horizontalPadding);
|
|
1964
|
+
};
|
|
1965
|
+
const isNarrowSplitLayout = state => {
|
|
1966
|
+
return getMainWidth(state) <= getNarrowMainWidthBreakpoint(state);
|
|
1967
|
+
};
|
|
1931
1968
|
const clampTableWidth = (state, tableWidth) => {
|
|
1932
1969
|
const mainWidth = getMainWidth(state);
|
|
1933
1970
|
const maxTableWidth = Math.max(0, mainWidth - state.minDetailsWidth - state.sashWidth);
|
|
@@ -1939,24 +1976,21 @@ const getDetailsWidth = (state, tableWidth) => {
|
|
|
1939
1976
|
const clampedTableWidth = clampTableWidth(state, tableWidth);
|
|
1940
1977
|
return Math.max(0, mainWidth - clampedTableWidth - state.sashWidth);
|
|
1941
1978
|
};
|
|
1979
|
+
const getBalancedSplitTableWidth = state => {
|
|
1980
|
+
const mainWidth = getMainWidth(state);
|
|
1981
|
+
const balancedTableWidth = Math.floor(Math.max(0, mainWidth - state.sashWidth) / 2);
|
|
1982
|
+
return clampTableWidth(state, balancedTableWidth);
|
|
1983
|
+
};
|
|
1984
|
+
const shouldUseBalancedSplitTableWidth = state => {
|
|
1985
|
+
return !!state.selectedEvent && state.useDevtoolsLayout && !state.tableWidthManuallyResized && isNarrowSplitLayout(state);
|
|
1986
|
+
};
|
|
1942
1987
|
const getTableWidthFromClientX = (state, clientX) => {
|
|
1943
1988
|
const nextTableWidth = clientX - state.x - state.leftPadding;
|
|
1944
1989
|
return clampTableWidth(state, nextTableWidth);
|
|
1945
1990
|
};
|
|
1946
1991
|
|
|
1947
|
-
const
|
|
1948
|
-
|
|
1949
|
-
[Method]: 56,
|
|
1950
|
-
[Size]: 80,
|
|
1951
|
-
[Status$1]: 56,
|
|
1952
|
-
[Type]: 80
|
|
1953
|
-
};
|
|
1954
|
-
const getMinimumTableColumnWidth = column => {
|
|
1955
|
-
return minimumTableColumnWidths[column];
|
|
1956
|
-
};
|
|
1957
|
-
|
|
1958
|
-
const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumnWidths) => {
|
|
1959
|
-
const visibleColumns = getOrderedVisibleTableColumns(visibleTableColumns);
|
|
1992
|
+
const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumns) => {
|
|
1993
|
+
const visibleColumns = getOrderedVisibleTableColumns(visibleTableColumns, tableColumns);
|
|
1960
1994
|
if (visibleColumns.length === 0) {
|
|
1961
1995
|
return {
|
|
1962
1996
|
fixedColumns: [],
|
|
@@ -1973,10 +2007,10 @@ const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumnWidths
|
|
|
1973
2007
|
visibleColumnWidths.push(Math.max(0, remainingWidth));
|
|
1974
2008
|
continue;
|
|
1975
2009
|
}
|
|
1976
|
-
const minimumWidth =
|
|
1977
|
-
const minimumRemainingWidth = visibleColumns.slice(index + 1).reduce((total, remainingColumn) => total +
|
|
2010
|
+
const minimumWidth = getTableColumnMinimumWidth(tableColumns, column);
|
|
2011
|
+
const minimumRemainingWidth = visibleColumns.slice(index + 1).reduce((total, remainingColumn) => total + getTableColumnMinimumWidth(tableColumns, remainingColumn), 0);
|
|
1978
2012
|
const maxWidth = Math.max(minimumWidth, remainingWidth - minimumRemainingWidth);
|
|
1979
|
-
const preferredWidth =
|
|
2013
|
+
const preferredWidth = getTableColumnWidth(tableColumns, column);
|
|
1980
2014
|
const clampedWidth = Math.max(minimumWidth, Math.min(preferredWidth, maxWidth));
|
|
1981
2015
|
visibleColumnWidths.push(clampedWidth);
|
|
1982
2016
|
remainingWidth -= clampedWidth;
|
|
@@ -1995,24 +2029,21 @@ const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumnWidths
|
|
|
1995
2029
|
};
|
|
1996
2030
|
};
|
|
1997
2031
|
|
|
1998
|
-
const getResizedTableColumnWidths = (state, visibleTableColumns,
|
|
2032
|
+
const getResizedTableColumnWidths = (state, visibleTableColumns, tableColumns, clientX, resizerDownId) => {
|
|
1999
2033
|
const clampedTableWidth = clampTableWidth(state, state.tableWidth);
|
|
2000
|
-
const layout = getTableColumnLayout(clampedTableWidth, visibleTableColumns,
|
|
2034
|
+
const layout = getTableColumnLayout(clampedTableWidth, visibleTableColumns, tableColumns);
|
|
2001
2035
|
if (resizerDownId < 1 || resizerDownId >= layout.visibleColumns.length) {
|
|
2002
|
-
return
|
|
2036
|
+
return tableColumns;
|
|
2003
2037
|
}
|
|
2004
2038
|
const boundaryIndex = resizerDownId - 1;
|
|
2005
2039
|
const precedingWidth = layout.visibleColumnWidths.slice(0, boundaryIndex).reduce((total, current) => total + current, 0);
|
|
2006
2040
|
const resizedColumn = layout.visibleColumns[boundaryIndex];
|
|
2007
|
-
const minimumWidth =
|
|
2008
|
-
const minimumRemainingWidth = layout.visibleColumns.slice(boundaryIndex + 1).reduce((total, column) => total +
|
|
2041
|
+
const minimumWidth = getTableColumnMinimumWidth(tableColumns, resizedColumn);
|
|
2042
|
+
const minimumRemainingWidth = layout.visibleColumns.slice(boundaryIndex + 1).reduce((total, column) => total + getTableColumnMinimumWidth(tableColumns, column), 0);
|
|
2009
2043
|
const maxWidth = Math.max(minimumWidth, clampedTableWidth - precedingWidth - minimumRemainingWidth);
|
|
2010
2044
|
const nextWidth = clientX - state.x - state.leftPadding - precedingWidth;
|
|
2011
2045
|
const clampedWidth = Math.max(minimumWidth, Math.min(nextWidth, maxWidth));
|
|
2012
|
-
return
|
|
2013
|
-
...tableColumnWidths,
|
|
2014
|
-
[resizedColumn]: clampedWidth
|
|
2015
|
-
};
|
|
2046
|
+
return setTableColumnWidth(tableColumns, resizedColumn, clampedWidth);
|
|
2016
2047
|
};
|
|
2017
2048
|
|
|
2018
2049
|
const isSameTableColumnWidths = (first, second) => {
|
|
@@ -2049,9 +2080,6 @@ const restoreCategoryFilters = (savedState, currentCategoryFilters) => {
|
|
|
2049
2080
|
if (typeof savedState.eventCategoryFilter === 'string' && validEventCategoryFilters.has(savedState.eventCategoryFilter)) {
|
|
2050
2081
|
return selectCategoryFilter(currentCategoryFilters, savedState.eventCategoryFilter);
|
|
2051
2082
|
}
|
|
2052
|
-
if (typeof savedState.filterValue === 'string') {
|
|
2053
|
-
return selectCategoryFilter(currentCategoryFilters, parseFilterValue(savedState.filterValue).eventCategoryFilter);
|
|
2054
|
-
}
|
|
2055
2083
|
return currentCategoryFilters;
|
|
2056
2084
|
};
|
|
2057
2085
|
const restoreFilterValue = (savedState, currentFilterValue) => {
|
|
@@ -2081,24 +2109,26 @@ const restoreVisibleTableColumns = (savedState, currentTableColumns) => {
|
|
|
2081
2109
|
}
|
|
2082
2110
|
return getTableColumnsWithVisibility(currentTableColumns, visibleTableColumns);
|
|
2083
2111
|
};
|
|
2084
|
-
const
|
|
2112
|
+
const restoreTableColumns = (savedState, currentTableColumns) => {
|
|
2113
|
+
const tableColumnsWithVisibility = restoreVisibleTableColumns(savedState, currentTableColumns);
|
|
2085
2114
|
const {
|
|
2086
2115
|
tableColumnWidths: savedTableColumnWidths
|
|
2087
2116
|
} = savedState;
|
|
2088
2117
|
if (isTableColumnWidths(savedTableColumnWidths)) {
|
|
2089
|
-
return savedTableColumnWidths;
|
|
2118
|
+
return setTableColumnWidths(tableColumnsWithVisibility, savedTableColumnWidths);
|
|
2090
2119
|
}
|
|
2091
2120
|
if (isLegacyTableColumnWidths(savedTableColumnWidths)) {
|
|
2092
2121
|
const legacyTableColumnWidths = savedTableColumnWidths;
|
|
2093
|
-
|
|
2122
|
+
const currentTableColumnWidths = getTableColumnWidths(currentTableColumns);
|
|
2123
|
+
return setTableColumnWidths(tableColumnsWithVisibility, {
|
|
2094
2124
|
duration: legacyTableColumnWidths.duration,
|
|
2095
2125
|
method: legacyTableColumnWidths.method,
|
|
2096
2126
|
size: currentTableColumnWidths.size,
|
|
2097
2127
|
status: legacyTableColumnWidths.status,
|
|
2098
2128
|
type: legacyTableColumnWidths.type
|
|
2099
|
-
};
|
|
2129
|
+
});
|
|
2100
2130
|
}
|
|
2101
|
-
return
|
|
2131
|
+
return tableColumnsWithVisibility;
|
|
2102
2132
|
};
|
|
2103
2133
|
const restoreSavedState = (state, savedState) => {
|
|
2104
2134
|
if (!isSavedState(savedState)) {
|
|
@@ -2110,8 +2140,7 @@ const restoreSavedState = (state, savedState) => {
|
|
|
2110
2140
|
detailTabs: restoreDetailTabs(savedState, state.detailTabs),
|
|
2111
2141
|
filterValue: restoreFilterValue(savedState, state.filterValue),
|
|
2112
2142
|
selectedEventId: restoreSelectedEventId(savedState, state.selectedEventId),
|
|
2113
|
-
tableColumns:
|
|
2114
|
-
tableColumnWidths: restoreTableColumnWidths(savedState, state.tableColumnWidths),
|
|
2143
|
+
tableColumns: restoreTableColumns(savedState, state.tableColumns),
|
|
2115
2144
|
timelineEndSeconds: restoreTimelineEndSeconds(savedState, state.timelineEndSeconds),
|
|
2116
2145
|
timelineStartSeconds: restoreTimelineStartSeconds(savedState, state.timelineStartSeconds)
|
|
2117
2146
|
};
|
|
@@ -2322,7 +2351,7 @@ const getEventsWithTime = events => {
|
|
|
2322
2351
|
});
|
|
2323
2352
|
};
|
|
2324
2353
|
|
|
2325
|
-
const clamp
|
|
2354
|
+
const clamp = (value, minimum, maximum) => {
|
|
2326
2355
|
return Math.max(minimum, Math.min(value, maximum));
|
|
2327
2356
|
};
|
|
2328
2357
|
|
|
@@ -2356,8 +2385,8 @@ const getNormalizedRange = (durationSeconds, startValue, endValue) => {
|
|
|
2356
2385
|
const rawEnd = parsedEnd ?? durationSeconds;
|
|
2357
2386
|
const rangeStart = Math.min(rawStart, rawEnd);
|
|
2358
2387
|
const rangeEnd = Math.max(rawStart, rawEnd);
|
|
2359
|
-
const normalizedStart = clamp
|
|
2360
|
-
const normalizedEnd = clamp
|
|
2388
|
+
const normalizedStart = clamp(rangeStart, 0, durationSeconds);
|
|
2389
|
+
const normalizedEnd = clamp(rangeEnd, 0, durationSeconds);
|
|
2361
2390
|
return {
|
|
2362
2391
|
endSeconds: roundSeconds(normalizedEnd),
|
|
2363
2392
|
hasSelection: true,
|
|
@@ -2481,8 +2510,8 @@ const createDefaultState = () => {
|
|
|
2481
2510
|
showResponsePartEvents: false,
|
|
2482
2511
|
sortColumn: '',
|
|
2483
2512
|
sortDescending: false,
|
|
2513
|
+
summaries: [],
|
|
2484
2514
|
tableColumns: createTableColumns(),
|
|
2485
|
-
tableColumnWidths: defaultTableColumnWidths,
|
|
2486
2515
|
tableDeltaY: 0,
|
|
2487
2516
|
tableMaxLineY: 0,
|
|
2488
2517
|
tableMinLineY: 0,
|
|
@@ -2490,6 +2519,7 @@ const createDefaultState = () => {
|
|
|
2490
2519
|
tableScrollBarHandleOffset: 0,
|
|
2491
2520
|
tableScrollBarPointerActive: false,
|
|
2492
2521
|
tableWidth: defaultTableWidth,
|
|
2522
|
+
tableWidthManuallyResized: false,
|
|
2493
2523
|
timelineEndSeconds: '',
|
|
2494
2524
|
timelineEvents: [],
|
|
2495
2525
|
timelineFilterDescription: '',
|
|
@@ -2542,7 +2572,7 @@ const RenderFocusContext = 4;
|
|
|
2542
2572
|
const RenderFocus = 5;
|
|
2543
2573
|
|
|
2544
2574
|
const diff = (oldState, newState) => {
|
|
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.
|
|
2575
|
+
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.summaries !== newState.summaries || 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.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) {
|
|
2546
2576
|
return [RenderIncremental, RenderCss];
|
|
2547
2577
|
}
|
|
2548
2578
|
return [];
|
|
@@ -2579,6 +2609,45 @@ const mergedEventType = 'tool-execution';
|
|
|
2579
2609
|
const handleSubmitEventType = 'handle-submit';
|
|
2580
2610
|
const sseResponseCompletedEventType = 'sse-response-completed';
|
|
2581
2611
|
|
|
2612
|
+
const encoder = new TextEncoder();
|
|
2613
|
+
const getEndValuePayload = event => {
|
|
2614
|
+
const {
|
|
2615
|
+
endValue
|
|
2616
|
+
} = event;
|
|
2617
|
+
return endValue?.value;
|
|
2618
|
+
};
|
|
2619
|
+
const getResponsePayload = event => {
|
|
2620
|
+
const endValuePayload = getEndValuePayload(event);
|
|
2621
|
+
if (endValuePayload !== undefined) {
|
|
2622
|
+
return endValuePayload;
|
|
2623
|
+
}
|
|
2624
|
+
if ('value' in event && event.value !== undefined) {
|
|
2625
|
+
return event.value;
|
|
2626
|
+
}
|
|
2627
|
+
if ('response' in event && event.response !== undefined) {
|
|
2628
|
+
return event.response;
|
|
2629
|
+
}
|
|
2630
|
+
return undefined;
|
|
2631
|
+
};
|
|
2632
|
+
const getPayloadText = payload => {
|
|
2633
|
+
if (typeof payload === 'string') {
|
|
2634
|
+
return payload;
|
|
2635
|
+
}
|
|
2636
|
+
const serialized = JSON.stringify(payload);
|
|
2637
|
+
return serialized ?? '';
|
|
2638
|
+
};
|
|
2639
|
+
const getResponsePayloadSize = event => {
|
|
2640
|
+
const payload = getResponsePayload(event);
|
|
2641
|
+
if (payload === undefined) {
|
|
2642
|
+
return 0;
|
|
2643
|
+
}
|
|
2644
|
+
try {
|
|
2645
|
+
return encoder.encode(getPayloadText(payload)).length;
|
|
2646
|
+
} catch {
|
|
2647
|
+
return 0;
|
|
2648
|
+
}
|
|
2649
|
+
};
|
|
2650
|
+
|
|
2582
2651
|
const hasMatchingToolName = (startedEvent, finishedEvent) => {
|
|
2583
2652
|
if (typeof startedEvent.toolName === 'string' && typeof finishedEvent.toolName === 'string') {
|
|
2584
2653
|
return startedEvent.toolName === finishedEvent.toolName;
|
|
@@ -2684,7 +2753,8 @@ const mergeRequestResponseEvents = (startedEvent, finishedEvent) => {
|
|
|
2684
2753
|
return {
|
|
2685
2754
|
...mergeToolExecutionEvents(startedEvent, finishedEvent, startedEvent.type),
|
|
2686
2755
|
requestEvent: startedEvent,
|
|
2687
|
-
responseEvent: finishedEvent
|
|
2756
|
+
responseEvent: finishedEvent,
|
|
2757
|
+
size: getResponsePayloadSize(finishedEvent)
|
|
2688
2758
|
};
|
|
2689
2759
|
};
|
|
2690
2760
|
const isMatchingRequestResponsePair = (startedEvent, finishedEvent) => {
|
|
@@ -2790,12 +2860,8 @@ const matchesEventCategoryFilter = (event, eventCategoryFilters) => {
|
|
|
2790
2860
|
const getFilteredEvents = (events, filterValue, eventCategoryFilters, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents) => {
|
|
2791
2861
|
const visibleEvents = getVisibleEvents(events, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents);
|
|
2792
2862
|
const collapsedEvents = collapseToolExecutionEvents(visibleEvents);
|
|
2793
|
-
const
|
|
2794
|
-
const
|
|
2795
|
-
const filteredByCategory = collapsedEvents.filter(event => matchesEventCategoryFilter(event, activeEventCategoryFilters));
|
|
2796
|
-
const {
|
|
2797
|
-
filterText
|
|
2798
|
-
} = parsedFilter;
|
|
2863
|
+
const filteredByCategory = collapsedEvents.filter(event => matchesEventCategoryFilter(event, eventCategoryFilters));
|
|
2864
|
+
const filterText = filterValue.trim().toLowerCase();
|
|
2799
2865
|
if (!filterText) {
|
|
2800
2866
|
return filteredByCategory;
|
|
2801
2867
|
}
|
|
@@ -2983,10 +3049,22 @@ const sortEventsByTableColumn = (events, sortColumn, sortDescending) => {
|
|
|
2983
3049
|
};
|
|
2984
3050
|
|
|
2985
3051
|
const getCurrentEvents$1 = state => {
|
|
2986
|
-
const
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
3052
|
+
const {
|
|
3053
|
+
categoryFilters,
|
|
3054
|
+
events,
|
|
3055
|
+
filterValue,
|
|
3056
|
+
showEventStreamFinishedEvents,
|
|
3057
|
+
showInputEvents,
|
|
3058
|
+
showResponsePartEvents,
|
|
3059
|
+
sortColumn,
|
|
3060
|
+
sortDescending,
|
|
3061
|
+
timelineEndSeconds,
|
|
3062
|
+
timelineStartSeconds
|
|
3063
|
+
} = state;
|
|
3064
|
+
const eventCategoryFilters = getSelectedEventCategoryFilters(categoryFilters);
|
|
3065
|
+
const filteredEvents = getFilteredEvents(events, filterValue, eventCategoryFilters, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents);
|
|
3066
|
+
const timelineEvents = filterEventsByTimelineRange(filteredEvents, timelineStartSeconds, timelineEndSeconds);
|
|
3067
|
+
return sortEventsByTableColumn(timelineEvents, sortColumn, sortDescending);
|
|
2990
3068
|
};
|
|
2991
3069
|
|
|
2992
3070
|
const getCurrentEvents = state => getCurrentEvents$1(state);
|
|
@@ -3009,6 +3087,8 @@ const loadSelectedEvent = async ({
|
|
|
3009
3087
|
sessionId,
|
|
3010
3088
|
type
|
|
3011
3089
|
}) => {
|
|
3090
|
+
// TODO load them in parallel
|
|
3091
|
+
// or adjust worker function to load both start and end event
|
|
3012
3092
|
const raw = await loadSelectedEvent$1(sessionId, eventId, type);
|
|
3013
3093
|
if (endEventId && endEventId !== -1) {
|
|
3014
3094
|
const end = await loadSelectedEvent$1(sessionId, endEventId, type);
|
|
@@ -3323,7 +3403,7 @@ const selectEventAtIndex = async (state, selectedEventIndex) => {
|
|
|
3323
3403
|
type: selectedEvent.type
|
|
3324
3404
|
});
|
|
3325
3405
|
const resolvedSelectedEvent = await withPreparedSelectedEventPreview(mergeSelectedEventDetails(selectedEvent, selectedEventDetails));
|
|
3326
|
-
|
|
3406
|
+
const nextState = {
|
|
3327
3407
|
...state,
|
|
3328
3408
|
detailTabs: createDetailTabs(selectedDetailTab, resolvedSelectedEvent),
|
|
3329
3409
|
previewTextCursorColumnIndex: null,
|
|
@@ -3334,6 +3414,10 @@ const selectEventAtIndex = async (state, selectedEventIndex) => {
|
|
|
3334
3414
|
selectedEvent: resolvedSelectedEvent,
|
|
3335
3415
|
selectedEventId: selectedEvent.eventId,
|
|
3336
3416
|
selectedEventIndex
|
|
3417
|
+
};
|
|
3418
|
+
return withSelectedEventVisible({
|
|
3419
|
+
...nextState,
|
|
3420
|
+
tableWidth: shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : state.tableWidth
|
|
3337
3421
|
});
|
|
3338
3422
|
};
|
|
3339
3423
|
|
|
@@ -3394,36 +3478,17 @@ const getMenuEntriesTableBody = props => {
|
|
|
3394
3478
|
}];
|
|
3395
3479
|
};
|
|
3396
3480
|
|
|
3397
|
-
const
|
|
3398
|
-
return
|
|
3481
|
+
const getColumnMenuEntry = (columnName, label, isVisible) => {
|
|
3482
|
+
return {
|
|
3483
|
+
args: [columnName],
|
|
3484
|
+
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3485
|
+
flags: isVisible ? Checked : Unchecked,
|
|
3486
|
+
id: columnName,
|
|
3487
|
+
label
|
|
3488
|
+
};
|
|
3399
3489
|
};
|
|
3400
|
-
|
|
3401
3490
|
const getMenuEntriesTableHeader = state => {
|
|
3402
|
-
return [{
|
|
3403
|
-
args: [Type],
|
|
3404
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3405
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Type),
|
|
3406
|
-
id: 'type',
|
|
3407
|
-
label: type()
|
|
3408
|
-
}, {
|
|
3409
|
-
args: [Status$1],
|
|
3410
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3411
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Status$1),
|
|
3412
|
-
id: 'status',
|
|
3413
|
-
label: status()
|
|
3414
|
-
}, {
|
|
3415
|
-
args: [Size],
|
|
3416
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3417
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Size),
|
|
3418
|
-
id: 'size',
|
|
3419
|
-
label: size()
|
|
3420
|
-
}, {
|
|
3421
|
-
args: [Duration],
|
|
3422
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3423
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Duration),
|
|
3424
|
-
id: 'duration',
|
|
3425
|
-
label: duration()
|
|
3426
|
-
}, {
|
|
3491
|
+
return [...state.tableColumns.map(column => getColumnMenuEntry(column.name, column.label, column.isVisible)), {
|
|
3427
3492
|
args: [],
|
|
3428
3493
|
command: 'ChatDebug.resetTableColumns',
|
|
3429
3494
|
flags: None$1,
|
|
@@ -3502,12 +3567,10 @@ const getMenuIds = () => {
|
|
|
3502
3567
|
return [MenuChatDebugTableHeader, MenuChatDebugTableBody, 556, 557];
|
|
3503
3568
|
};
|
|
3504
3569
|
|
|
3505
|
-
const
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3509
|
-
MissingUri: 4
|
|
3510
|
-
};
|
|
3570
|
+
const InvalidSessionId = 1;
|
|
3571
|
+
const InvalidUriEncoding = 2;
|
|
3572
|
+
const InvalidUriFormat = 3;
|
|
3573
|
+
const MissingUri = 4;
|
|
3511
3574
|
|
|
3512
3575
|
const ParseChatDebugUriResultType = {
|
|
3513
3576
|
Error: 2,
|
|
@@ -3519,7 +3582,7 @@ const invalidSessionIdPattern = /[/?#]/;
|
|
|
3519
3582
|
const parseChatDebugUri = uri => {
|
|
3520
3583
|
if (!uri) {
|
|
3521
3584
|
return {
|
|
3522
|
-
code:
|
|
3585
|
+
code: MissingUri,
|
|
3523
3586
|
message: missingUri(),
|
|
3524
3587
|
type: ParseChatDebugUriResultType.Error
|
|
3525
3588
|
};
|
|
@@ -3527,7 +3590,7 @@ const parseChatDebugUri = uri => {
|
|
|
3527
3590
|
const match = uri.match(chatDebugUriPattern);
|
|
3528
3591
|
if (!match) {
|
|
3529
3592
|
return {
|
|
3530
|
-
code:
|
|
3593
|
+
code: InvalidUriFormat,
|
|
3531
3594
|
message: invalidUriFormat(),
|
|
3532
3595
|
type: ParseChatDebugUriResultType.Error
|
|
3533
3596
|
};
|
|
@@ -3538,14 +3601,14 @@ const parseChatDebugUri = uri => {
|
|
|
3538
3601
|
sessionId = decodeURIComponent(encodedSessionId);
|
|
3539
3602
|
} catch {
|
|
3540
3603
|
return {
|
|
3541
|
-
code:
|
|
3604
|
+
code: InvalidUriEncoding,
|
|
3542
3605
|
message: invalidUriEncoding(),
|
|
3543
3606
|
type: ParseChatDebugUriResultType.Error
|
|
3544
3607
|
};
|
|
3545
3608
|
}
|
|
3546
3609
|
if (!sessionId || invalidSessionIdPattern.test(sessionId)) {
|
|
3547
3610
|
return {
|
|
3548
|
-
code:
|
|
3611
|
+
code: InvalidSessionId,
|
|
3549
3612
|
message: invalidSessionId(),
|
|
3550
3613
|
type: ParseChatDebugUriResultType.Error
|
|
3551
3614
|
};
|
|
@@ -3565,7 +3628,7 @@ const getSessionIdFromUri = state => {
|
|
|
3565
3628
|
};
|
|
3566
3629
|
|
|
3567
3630
|
const getInvalidUriMessage = (uri, code) => {
|
|
3568
|
-
if (code ===
|
|
3631
|
+
if (code === MissingUri) {
|
|
3569
3632
|
return unableToLoadDebugSessionMissingUri();
|
|
3570
3633
|
}
|
|
3571
3634
|
return unableToLoadDebugSessionInvalidUri(uri);
|
|
@@ -3584,6 +3647,49 @@ const getEffectiveTimelineRange = (timelineStartSeconds, timelineEndSeconds, tim
|
|
|
3584
3647
|
};
|
|
3585
3648
|
};
|
|
3586
3649
|
|
|
3650
|
+
const formatTimelineMilliseconds = value => {
|
|
3651
|
+
return `${Math.round(value * 1000)}ms`;
|
|
3652
|
+
};
|
|
3653
|
+
|
|
3654
|
+
const formatTimelineSeconds = value => {
|
|
3655
|
+
if (Number.isInteger(value)) {
|
|
3656
|
+
return `${value}s`;
|
|
3657
|
+
}
|
|
3658
|
+
return `${Number(value.toFixed(1))}s`;
|
|
3659
|
+
};
|
|
3660
|
+
|
|
3661
|
+
const getEndTime = event => {
|
|
3662
|
+
return event.ended ?? event.endTime ?? event.timestamp;
|
|
3663
|
+
};
|
|
3664
|
+
|
|
3665
|
+
const getStartTime = event => {
|
|
3666
|
+
return event.started ?? event.startTime ?? event.timestamp;
|
|
3667
|
+
};
|
|
3668
|
+
|
|
3669
|
+
const formatTableSummaryDuration = durationMs => {
|
|
3670
|
+
if (durationMs < 1000) {
|
|
3671
|
+
return formatTimelineMilliseconds(durationMs / 1000);
|
|
3672
|
+
}
|
|
3673
|
+
return formatTimelineSeconds(durationMs / 1000);
|
|
3674
|
+
};
|
|
3675
|
+
const getTableSummaries = events => {
|
|
3676
|
+
let minStart = Number.POSITIVE_INFINITY;
|
|
3677
|
+
let maxEnd = Number.NEGATIVE_INFINITY;
|
|
3678
|
+
for (const event of events) {
|
|
3679
|
+
const startTime = toTimeNumber(getStartTime(event));
|
|
3680
|
+
const endTime = toTimeNumber(getEndTime(event));
|
|
3681
|
+
if (typeof startTime === 'number' && Number.isFinite(startTime)) {
|
|
3682
|
+
minStart = Math.min(minStart, startTime);
|
|
3683
|
+
}
|
|
3684
|
+
if (typeof endTime === 'number' && Number.isFinite(endTime)) {
|
|
3685
|
+
maxEnd = Math.max(maxEnd, endTime);
|
|
3686
|
+
}
|
|
3687
|
+
}
|
|
3688
|
+
const durationMs = Number.isFinite(minStart) && Number.isFinite(maxEnd) ? Math.max(0, maxEnd - minStart) : 0;
|
|
3689
|
+
const duration = formatTableSummaryDuration(durationMs);
|
|
3690
|
+
return [tableSummaryRequests(events.length), tableSummaryFinish(duration)];
|
|
3691
|
+
};
|
|
3692
|
+
|
|
3587
3693
|
const getTimelineEvents = state => {
|
|
3588
3694
|
const {
|
|
3589
3695
|
events,
|
|
@@ -3616,12 +3722,16 @@ const getStateWithTimelineInfo = state => {
|
|
|
3616
3722
|
const effectiveRange = getEffectiveTimelineRange(state.timelineStartSeconds, state.timelineEndSeconds, state.timelineSelectionActive, state.timelineSelectionAnchorSeconds, state.timelineSelectionFocusSeconds);
|
|
3617
3723
|
const timelineInfo = getTimelineInfo(timelineEvents, effectiveRange.startSeconds, effectiveRange.endSeconds);
|
|
3618
3724
|
const timelineFilterDescription = getTimelineFilterDescription(state.timelineStartSeconds, state.timelineEndSeconds);
|
|
3619
|
-
|
|
3725
|
+
const nextState = {
|
|
3620
3726
|
...state,
|
|
3621
3727
|
timelineEvents,
|
|
3622
3728
|
timelineFilterDescription,
|
|
3623
3729
|
timelineInfo
|
|
3624
3730
|
};
|
|
3731
|
+
return {
|
|
3732
|
+
...nextState,
|
|
3733
|
+
summaries: getTableSummaries(getCurrentEvents$1(nextState))
|
|
3734
|
+
};
|
|
3625
3735
|
};
|
|
3626
3736
|
|
|
3627
3737
|
const getStateWithInvalidUri = state => {
|
|
@@ -3691,7 +3801,7 @@ const getMergedRequestResponseEvent = (item, response) => {
|
|
|
3691
3801
|
eventEndId: response.eventId,
|
|
3692
3802
|
eventId: item.eventId,
|
|
3693
3803
|
method: 'POST',
|
|
3694
|
-
size:
|
|
3804
|
+
size: getResponsePayloadSize(response),
|
|
3695
3805
|
...(started === undefined ? {} : {
|
|
3696
3806
|
started
|
|
3697
3807
|
}),
|
|
@@ -3708,7 +3818,7 @@ const getMergedRequestResponseEvent = (item, response) => {
|
|
|
3708
3818
|
eventEndId: response.eventId,
|
|
3709
3819
|
eventId: item.eventId,
|
|
3710
3820
|
method: 'POST',
|
|
3711
|
-
size:
|
|
3821
|
+
size: getResponsePayloadSize(response),
|
|
3712
3822
|
...(started === undefined ? {} : {
|
|
3713
3823
|
started
|
|
3714
3824
|
}),
|
|
@@ -3759,7 +3869,10 @@ const listChatViewEvents = async (sessionId, _databaseName, _dataBaseVersion, _e
|
|
|
3759
3869
|
};
|
|
3760
3870
|
|
|
3761
3871
|
const restoreSelectedEvent = async state => {
|
|
3762
|
-
|
|
3872
|
+
const {
|
|
3873
|
+
selectedEventId
|
|
3874
|
+
} = state;
|
|
3875
|
+
if (selectedEventId === null) {
|
|
3763
3876
|
return {
|
|
3764
3877
|
...state,
|
|
3765
3878
|
previewTextCursorColumnIndex: null,
|
|
@@ -3860,11 +3973,14 @@ const loadEventsForSessionId = async (state, sessionId) => {
|
|
|
3860
3973
|
};
|
|
3861
3974
|
|
|
3862
3975
|
const refreshEvents = async state => {
|
|
3863
|
-
const
|
|
3864
|
-
|
|
3976
|
+
const {
|
|
3977
|
+
sessionId
|
|
3978
|
+
} = state;
|
|
3979
|
+
const actual = sessionId || getSessionIdFromUri(state);
|
|
3980
|
+
if (!actual) {
|
|
3865
3981
|
return getStateWithInvalidUri(state);
|
|
3866
3982
|
}
|
|
3867
|
-
return loadEventsForSessionId(state,
|
|
3983
|
+
return loadEventsForSessionId(state, actual);
|
|
3868
3984
|
};
|
|
3869
3985
|
|
|
3870
3986
|
const refresh = async state => {
|
|
@@ -3919,6 +4035,9 @@ const handleEscape = state => {
|
|
|
3919
4035
|
};
|
|
3920
4036
|
|
|
3921
4037
|
const getEventIndexByStableId$1 = (events, event) => {
|
|
4038
|
+
if (typeof event.eventId !== 'number') {
|
|
4039
|
+
return -1;
|
|
4040
|
+
}
|
|
3922
4041
|
return events.findIndex(candidate => candidate.eventId === event.eventId);
|
|
3923
4042
|
};
|
|
3924
4043
|
|
|
@@ -4013,7 +4132,7 @@ const getBoolean = value => {
|
|
|
4013
4132
|
const General = 'general';
|
|
4014
4133
|
const RequestHeaders = 'requestHeaders';
|
|
4015
4134
|
const ResponseHeaders = 'responseHeaders';
|
|
4016
|
-
const headerSectionKeys = [General,
|
|
4135
|
+
const headerSectionKeys = [General, ResponseHeaders, RequestHeaders];
|
|
4017
4136
|
const isHeaderSectionKey = value => {
|
|
4018
4137
|
return headerSectionKeys.includes(value);
|
|
4019
4138
|
};
|
|
@@ -4046,6 +4165,9 @@ const parseTimelineRangePreset$1 = value => {
|
|
|
4046
4165
|
};
|
|
4047
4166
|
};
|
|
4048
4167
|
const getEventIndexByStableId = (events, event) => {
|
|
4168
|
+
if (typeof event.eventId !== 'number') {
|
|
4169
|
+
return -1;
|
|
4170
|
+
}
|
|
4049
4171
|
return events.findIndex(candidate => candidate.eventId === event.eventId);
|
|
4050
4172
|
};
|
|
4051
4173
|
const getSelectedEventIndex = state => {
|
|
@@ -4143,7 +4265,7 @@ const handleUseDevtoolsLayout = (state, _value, checked) => {
|
|
|
4143
4265
|
const useDevtoolsLayout = getBoolean(checked);
|
|
4144
4266
|
const selectedEventIndex = useDevtoolsLayout ? getSelectedEventIndex(state) : null;
|
|
4145
4267
|
const hasSelectedEvent = useDevtoolsLayout && selectedEventIndex !== null;
|
|
4146
|
-
|
|
4268
|
+
const nextState = {
|
|
4147
4269
|
...state,
|
|
4148
4270
|
previewTextCursorColumnIndex: hasSelectedEvent ? state.previewTextCursorColumnIndex : null,
|
|
4149
4271
|
previewTextCursorRowIndex: hasSelectedEvent ? state.previewTextCursorRowIndex : null,
|
|
@@ -4151,6 +4273,10 @@ const handleUseDevtoolsLayout = (state, _value, checked) => {
|
|
|
4151
4273
|
selectedEventId: hasSelectedEvent ? state.selectedEventId : null,
|
|
4152
4274
|
selectedEventIndex,
|
|
4153
4275
|
useDevtoolsLayout
|
|
4276
|
+
};
|
|
4277
|
+
return applyVirtualTableState({
|
|
4278
|
+
...nextState,
|
|
4279
|
+
tableWidth: shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : state.tableWidth
|
|
4154
4280
|
});
|
|
4155
4281
|
};
|
|
4156
4282
|
const handleSelectedEventIndex = (state, value) => {
|
|
@@ -4574,9 +4700,6 @@ const getPreviewEvent = event => {
|
|
|
4574
4700
|
|
|
4575
4701
|
const previewTextRowHeight = 20;
|
|
4576
4702
|
const defaultPreviewTextColumnWidth = 9;
|
|
4577
|
-
const clamp = (value, min, max) => {
|
|
4578
|
-
return Math.min(Math.max(value, min), max);
|
|
4579
|
-
};
|
|
4580
4703
|
const getPreviewTextCursorFromPoint = (value, x, y) => {
|
|
4581
4704
|
const lines = value.split('\n');
|
|
4582
4705
|
const rowIndex = clamp(Math.floor(Math.max(y, 0) / previewTextRowHeight), 0, Math.max(lines.length - 1, 0));
|
|
@@ -4797,7 +4920,8 @@ const handleSashPointerMove = (state, eventX, eventY) => {
|
|
|
4797
4920
|
}
|
|
4798
4921
|
return {
|
|
4799
4922
|
...state,
|
|
4800
|
-
tableWidth: getTableWidthFromClientX(state, eventX)
|
|
4923
|
+
tableWidth: getTableWidthFromClientX(state, eventX),
|
|
4924
|
+
tableWidthManuallyResized: true
|
|
4801
4925
|
};
|
|
4802
4926
|
};
|
|
4803
4927
|
|
|
@@ -4864,7 +4988,7 @@ const handleTableResizerPointerMove = (state, clientX) => {
|
|
|
4864
4988
|
}
|
|
4865
4989
|
return {
|
|
4866
4990
|
...state,
|
|
4867
|
-
|
|
4991
|
+
tableColumns: getResizedTableColumnWidths(state, getVisibleTableColumns(state.tableColumns), state.tableColumns, clientX, state.tableResizerDownId)
|
|
4868
4992
|
};
|
|
4869
4993
|
};
|
|
4870
4994
|
|
|
@@ -5203,17 +5327,22 @@ const handleTimelinePointerUp = (state, eventX) => {
|
|
|
5203
5327
|
const setUseDevtoolsLayout = (state, checked) => {
|
|
5204
5328
|
const useDevtoolsLayout = getBoolean(checked);
|
|
5205
5329
|
const selectedEventIndex = useDevtoolsLayout ? getSelectedEventIndex$1(state) : null;
|
|
5206
|
-
|
|
5330
|
+
const hasSelectedEvent = useDevtoolsLayout && selectedEventIndex !== null;
|
|
5331
|
+
const nextState = {
|
|
5207
5332
|
...state,
|
|
5208
|
-
previewTextCursorColumnIndex:
|
|
5209
|
-
previewTextCursorRowIndex:
|
|
5210
|
-
previewTextDeltaY:
|
|
5333
|
+
previewTextCursorColumnIndex: hasSelectedEvent ? state.previewTextCursorColumnIndex : null,
|
|
5334
|
+
previewTextCursorRowIndex: hasSelectedEvent ? state.previewTextCursorRowIndex : null,
|
|
5335
|
+
previewTextDeltaY: hasSelectedEvent ? state.previewTextDeltaY : 0,
|
|
5211
5336
|
previewTextScrollBarHandleOffset: 0,
|
|
5212
5337
|
previewTextScrollBarPointerActive: false,
|
|
5213
|
-
selectedEvent:
|
|
5214
|
-
selectedEventId:
|
|
5338
|
+
selectedEvent: hasSelectedEvent ? state.selectedEvent : null,
|
|
5339
|
+
selectedEventId: hasSelectedEvent ? state.selectedEventId : null,
|
|
5215
5340
|
selectedEventIndex,
|
|
5216
5341
|
useDevtoolsLayout
|
|
5342
|
+
};
|
|
5343
|
+
return applyVirtualTableState({
|
|
5344
|
+
...nextState,
|
|
5345
|
+
tableWidth: shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : state.tableWidth
|
|
5217
5346
|
});
|
|
5218
5347
|
};
|
|
5219
5348
|
|
|
@@ -5254,7 +5383,8 @@ const loadEventsFromUri = async state => {
|
|
|
5254
5383
|
|
|
5255
5384
|
const loadContent = async (state, savedState) => {
|
|
5256
5385
|
await getPreference('chatDebug.autoRefresh');
|
|
5257
|
-
const
|
|
5386
|
+
const restoredState = restoreSavedState(state, savedState);
|
|
5387
|
+
const nextState = await loadEventsFromUri(restoredState);
|
|
5258
5388
|
if (nextState.sessionId) {
|
|
5259
5389
|
try {
|
|
5260
5390
|
await registerUpdateListener(nextState.sessionId, rpcId, nextState.uid);
|
|
@@ -5359,7 +5489,7 @@ const getCss = state => {
|
|
|
5359
5489
|
if (state.width >= state.largeBreakpoint) {
|
|
5360
5490
|
topSize = 30;
|
|
5361
5491
|
}
|
|
5362
|
-
const tableColumnLayout = getTableColumnLayout(tableContentWidth, getVisibleTableColumns(state.tableColumns), state.
|
|
5492
|
+
const tableColumnLayout = getTableColumnLayout(tableContentWidth, getVisibleTableColumns(state.tableColumns), state.tableColumns);
|
|
5363
5493
|
const [tableColZeroWidth = 0, tableColOneWidth = 0, tableColTwoWidth = 0, tableColThreeWidth = 0, tableColFourWidth = 0] = tableColumnLayout.visibleColumnWidths;
|
|
5364
5494
|
const resizerOneLeft = tableColumnLayout.resizerLefts[0] ?? 0;
|
|
5365
5495
|
const resizerTwoLeft = tableColumnLayout.resizerLefts[1] ?? 0;
|
|
@@ -5384,7 +5514,7 @@ const getCss = state => {
|
|
|
5384
5514
|
--ChatDebugViewPreviewScrollBarWidth: ${previewVirtualization.showScrollBar ? devtoolsTableScrollBarWidth : 0}px;
|
|
5385
5515
|
--ChatDebugViewPreviewViewportHeight: ${previewVirtualization.viewportHeight}px;
|
|
5386
5516
|
--ChatDebugViewDetailsWidth: ${detailsWidth}px;
|
|
5387
|
-
--ChatDebugViewDurationColumnWidth: ${state.
|
|
5517
|
+
--ChatDebugViewDurationColumnWidth: ${getTableColumnWidth(state.tableColumns, Duration)}px;
|
|
5388
5518
|
--ChatDebugViewTableRowHeight: ${devtoolsTableRowHeight}px;
|
|
5389
5519
|
--ChatDebugViewTableScrollBarHeight: ${scrollBarHeight}px;
|
|
5390
5520
|
--ChatDebugViewTableScrollBarOffset: ${scrollBarOffset}px;
|
|
@@ -5400,7 +5530,7 @@ const getCss = state => {
|
|
|
5400
5530
|
--ChatDebugViewTimelineSelectionEndLeft: ${selectionEndPercent ?? 0}%;
|
|
5401
5531
|
--ChatDebugViewTimelineSelectionStartLeft: ${selectionStartPercent ?? 0}%;
|
|
5402
5532
|
--ChatDebugViewTopSize: ${topSize}px;
|
|
5403
|
-
--ChatDebugViewTypeColumnWidth: ${state.
|
|
5533
|
+
--ChatDebugViewTypeColumnWidth: ${getTableColumnWidth(state.tableColumns, Type)}px;
|
|
5404
5534
|
padding: ${state.viewPadding}px;
|
|
5405
5535
|
padding-right: 0;
|
|
5406
5536
|
}
|
|
@@ -5565,6 +5695,14 @@ const getCss = state => {
|
|
|
5565
5695
|
.ChatDebugViewHeadersCellName {
|
|
5566
5696
|
font-weight: 500;
|
|
5567
5697
|
}
|
|
5698
|
+
|
|
5699
|
+
.ChatDebugViewHeadersSectionInfo {
|
|
5700
|
+
color: var(--vscode-descriptionForeground, rgba(255, 255, 255, 0.7));
|
|
5701
|
+
font-size: 11px;
|
|
5702
|
+
line-height: 1.4;
|
|
5703
|
+
margin-top: 8px;
|
|
5704
|
+
}
|
|
5705
|
+
|
|
5568
5706
|
.PreviewVirtualizedEditor {
|
|
5569
5707
|
height: var(--ChatDebugViewPreviewViewportHeight);
|
|
5570
5708
|
overflow: hidden;
|
|
@@ -5972,6 +6110,7 @@ const ChatDebugViewHeadersRowEven = 'ChatDebugViewHeadersRowEven';
|
|
|
5972
6110
|
const ChatDebugViewHeadersRowOdd = 'ChatDebugViewHeadersRowOdd';
|
|
5973
6111
|
const ChatDebugViewHeadersSection = 'ChatDebugViewHeadersSection';
|
|
5974
6112
|
const ChatDebugViewHeadersSectionHeading = 'ChatDebugViewHeadersSectionHeading';
|
|
6113
|
+
const ChatDebugViewHeadersSectionInfo = 'ChatDebugViewHeadersSectionInfo';
|
|
5975
6114
|
const ChatDebugViewHeadersTable = 'ChatDebugViewHeadersTable';
|
|
5976
6115
|
const ChatDebugViewDevtoolsSplit = 'ChatDebugViewDevtoolsSplit';
|
|
5977
6116
|
const ChatDebugViewEmpty = 'ChatDebugViewEmpty';
|
|
@@ -6408,9 +6547,7 @@ const formatHttpStatusCode = value => {
|
|
|
6408
6547
|
const isHeadersRecord = value => {
|
|
6409
6548
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
6410
6549
|
};
|
|
6411
|
-
|
|
6412
|
-
return typeof value === 'string' && value.length > 0;
|
|
6413
|
-
};
|
|
6550
|
+
|
|
6414
6551
|
const getStatusCodeValue = selectedEvent => {
|
|
6415
6552
|
if (!selectedEvent) {
|
|
6416
6553
|
return undefined;
|
|
@@ -6427,6 +6564,36 @@ const getStatusCodeValue = selectedEvent => {
|
|
|
6427
6564
|
}
|
|
6428
6565
|
return undefined;
|
|
6429
6566
|
};
|
|
6567
|
+
|
|
6568
|
+
const isNonEmptyString = value => {
|
|
6569
|
+
return typeof value === 'string' && value.length > 0;
|
|
6570
|
+
};
|
|
6571
|
+
|
|
6572
|
+
const getGeneralEntries = selectedEvent => {
|
|
6573
|
+
if (!selectedEvent) {
|
|
6574
|
+
return [];
|
|
6575
|
+
}
|
|
6576
|
+
const entries = [];
|
|
6577
|
+
if (isNonEmptyString(selectedEvent.url)) {
|
|
6578
|
+
entries.push([requestUrl(), selectedEvent.url]);
|
|
6579
|
+
}
|
|
6580
|
+
if (isNonEmptyString(selectedEvent.method)) {
|
|
6581
|
+
entries.push([requestMethod(), selectedEvent.method]);
|
|
6582
|
+
}
|
|
6583
|
+
const statusCode$1 = getStatusCodeValue(selectedEvent);
|
|
6584
|
+
if (statusCode$1 !== undefined && statusCode$1 !== '') {
|
|
6585
|
+
entries.push([statusCode(), formatHttpStatusCode(statusCode$1)]);
|
|
6586
|
+
}
|
|
6587
|
+
return entries;
|
|
6588
|
+
};
|
|
6589
|
+
|
|
6590
|
+
const getHeaders = value => {
|
|
6591
|
+
if (!isHeadersRecord(value)) {
|
|
6592
|
+
return [];
|
|
6593
|
+
}
|
|
6594
|
+
return Object.entries(value);
|
|
6595
|
+
};
|
|
6596
|
+
|
|
6430
6597
|
const stringifyHeaderValue = value => {
|
|
6431
6598
|
try {
|
|
6432
6599
|
return JSON.stringify(value, (_key, nestedValue) => {
|
|
@@ -6439,6 +6606,7 @@ const stringifyHeaderValue = value => {
|
|
|
6439
6606
|
return '[unserializable]';
|
|
6440
6607
|
}
|
|
6441
6608
|
};
|
|
6609
|
+
|
|
6442
6610
|
const getHeaderValueText = value => {
|
|
6443
6611
|
if (typeof value === 'string') {
|
|
6444
6612
|
return value;
|
|
@@ -6460,29 +6628,7 @@ const getHeaderValueText = value => {
|
|
|
6460
6628
|
}
|
|
6461
6629
|
return stringifyHeaderValue(value);
|
|
6462
6630
|
};
|
|
6463
|
-
|
|
6464
|
-
if (!isHeadersRecord(value)) {
|
|
6465
|
-
return [];
|
|
6466
|
-
}
|
|
6467
|
-
return Object.entries(value);
|
|
6468
|
-
};
|
|
6469
|
-
const getGeneralEntries = selectedEvent => {
|
|
6470
|
-
if (!selectedEvent) {
|
|
6471
|
-
return [];
|
|
6472
|
-
}
|
|
6473
|
-
const entries = [];
|
|
6474
|
-
if (isNonEmptyString(selectedEvent.url)) {
|
|
6475
|
-
entries.push([requestUrl(), selectedEvent.url]);
|
|
6476
|
-
}
|
|
6477
|
-
if (isNonEmptyString(selectedEvent.method)) {
|
|
6478
|
-
entries.push([requestMethod(), selectedEvent.method]);
|
|
6479
|
-
}
|
|
6480
|
-
const statusCode$1 = getStatusCodeValue(selectedEvent);
|
|
6481
|
-
if (statusCode$1 !== undefined && statusCode$1 !== '') {
|
|
6482
|
-
entries.push([statusCode(), formatHttpStatusCode(statusCode$1)]);
|
|
6483
|
-
}
|
|
6484
|
-
return entries;
|
|
6485
|
-
};
|
|
6631
|
+
|
|
6486
6632
|
const getHeaderRowNodes = (headerName, headerValue, index) => {
|
|
6487
6633
|
return [{
|
|
6488
6634
|
childCount: 2,
|
|
@@ -6498,6 +6644,7 @@ const getHeaderRowNodes = (headerName, headerValue, index) => {
|
|
|
6498
6644
|
type: Div
|
|
6499
6645
|
}, text(getHeaderValueText(headerValue))];
|
|
6500
6646
|
};
|
|
6647
|
+
|
|
6501
6648
|
const getHeadersTableNodes = headers => {
|
|
6502
6649
|
const headerRows = [];
|
|
6503
6650
|
for (const [index, [headerName, headerValue]] of headers.entries()) {
|
|
@@ -6509,13 +6656,17 @@ const getHeadersTableNodes = headers => {
|
|
|
6509
6656
|
type: Ul
|
|
6510
6657
|
}, ...headerRows];
|
|
6511
6658
|
};
|
|
6512
|
-
|
|
6659
|
+
|
|
6660
|
+
const getHeaderSectionNodes = (section, label, headers, collapsedHeaderSections, infoMessage = '') => {
|
|
6513
6661
|
const isCollapsed = collapsedHeaderSections.includes(section);
|
|
6662
|
+
const hasInfoMessage = !isCollapsed && infoMessage !== '';
|
|
6663
|
+
const childCount = isCollapsed ? 1 : 2 + Number(hasInfoMessage);
|
|
6514
6664
|
return [{
|
|
6515
|
-
childCount
|
|
6665
|
+
childCount,
|
|
6516
6666
|
className: ChatDebugViewHeadersSection,
|
|
6517
6667
|
type: Div
|
|
6518
6668
|
}, {
|
|
6669
|
+
ariaExpanded: !isCollapsed,
|
|
6519
6670
|
childCount: 1,
|
|
6520
6671
|
className: ChatDebugViewHeadersSectionHeading,
|
|
6521
6672
|
name: ToggleHeadersSection,
|
|
@@ -6523,8 +6674,13 @@ const getHeaderSectionNodes = (section, label, headers, collapsedHeaderSections)
|
|
|
6523
6674
|
onClick: HandleFilterInput,
|
|
6524
6675
|
type: Button$1,
|
|
6525
6676
|
value: section
|
|
6526
|
-
}, text(label), ...(isCollapsed ? [] : getHeadersTableNodes(headers))
|
|
6677
|
+
}, text(label), ...(isCollapsed ? [] : getHeadersTableNodes(headers)), ...(hasInfoMessage ? [{
|
|
6678
|
+
childCount: 1,
|
|
6679
|
+
className: ChatDebugViewHeadersSectionInfo,
|
|
6680
|
+
type: Div
|
|
6681
|
+
}, text(infoMessage)] : [])];
|
|
6527
6682
|
};
|
|
6683
|
+
|
|
6528
6684
|
const getHeadersContentNodes = (responseEventNodes, selectedEvent, collapsedHeaderSections = []) => {
|
|
6529
6685
|
const generalEntries = getGeneralEntries(selectedEvent);
|
|
6530
6686
|
const requestHeaders$1 = getHeaders(selectedEvent?.headers);
|
|
@@ -6536,12 +6692,12 @@ const getHeadersContentNodes = (responseEventNodes, selectedEvent, collapsedHead
|
|
|
6536
6692
|
if (generalEntries.length > 0) {
|
|
6537
6693
|
nodes.push(...getHeaderSectionNodes(General, general(), generalEntries, collapsedHeaderSections));
|
|
6538
6694
|
}
|
|
6695
|
+
if (responseHeaders$1.length > 0) {
|
|
6696
|
+
nodes.push(...getHeaderSectionNodes(ResponseHeaders, responseHeaders(), responseHeaders$1, collapsedHeaderSections, responseHeadersInfo()));
|
|
6697
|
+
}
|
|
6539
6698
|
if (requestHeaders$1.length > 0) {
|
|
6540
6699
|
nodes.push(...getHeaderSectionNodes(RequestHeaders, requestHeaders(), requestHeaders$1, collapsedHeaderSections));
|
|
6541
6700
|
}
|
|
6542
|
-
if (responseHeaders$1.length > 0) {
|
|
6543
|
-
nodes.push(...getHeaderSectionNodes(ResponseHeaders, responseHeaders(), responseHeaders$1, collapsedHeaderSections));
|
|
6544
|
-
}
|
|
6545
6701
|
return nodes;
|
|
6546
6702
|
};
|
|
6547
6703
|
|
|
@@ -7841,59 +7997,42 @@ const getSplitViewDom = (splitChildCount, eventsClassName, tableNodes, sashNodes
|
|
|
7841
7997
|
}, ...tableNodes, ...sashNodes, ...detailsNodes];
|
|
7842
7998
|
};
|
|
7843
7999
|
|
|
7844
|
-
const formatTimelineMilliseconds = value => {
|
|
7845
|
-
return `${Math.round(value * 1000)}ms`;
|
|
7846
|
-
};
|
|
7847
|
-
|
|
7848
|
-
const formatTimelineSeconds = value => {
|
|
7849
|
-
if (Number.isInteger(value)) {
|
|
7850
|
-
return `${value}s`;
|
|
7851
|
-
}
|
|
7852
|
-
return `${Number(value.toFixed(1))}s`;
|
|
7853
|
-
};
|
|
7854
|
-
|
|
7855
|
-
const getEndTime = event => {
|
|
7856
|
-
return event.ended ?? event.endTime ?? event.timestamp;
|
|
7857
|
-
};
|
|
7858
|
-
|
|
7859
|
-
const getStartTime = event => {
|
|
7860
|
-
return event.started ?? event.startTime ?? event.timestamp;
|
|
7861
|
-
};
|
|
7862
|
-
|
|
7863
|
-
const formatTableSummaryDuration = durationMs => {
|
|
7864
|
-
if (durationMs < 1000) {
|
|
7865
|
-
return formatTimelineMilliseconds(durationMs / 1000);
|
|
7866
|
-
}
|
|
7867
|
-
return formatTimelineSeconds(durationMs / 1000);
|
|
7868
|
-
};
|
|
7869
|
-
const getTableSummary = events => {
|
|
7870
|
-
let minStart = Number.POSITIVE_INFINITY;
|
|
7871
|
-
let maxEnd = Number.NEGATIVE_INFINITY;
|
|
7872
|
-
for (const event of events) {
|
|
7873
|
-
const startTime = toTimeNumber(getStartTime(event));
|
|
7874
|
-
const endTime = toTimeNumber(getEndTime(event));
|
|
7875
|
-
if (typeof startTime === 'number' && Number.isFinite(startTime)) {
|
|
7876
|
-
minStart = Math.min(minStart, startTime);
|
|
7877
|
-
}
|
|
7878
|
-
if (typeof endTime === 'number' && Number.isFinite(endTime)) {
|
|
7879
|
-
maxEnd = Math.max(maxEnd, endTime);
|
|
7880
|
-
}
|
|
7881
|
-
}
|
|
7882
|
-
const durationMs = Number.isFinite(minStart) && Number.isFinite(maxEnd) ? Math.max(0, maxEnd - minStart) : 0;
|
|
7883
|
-
return tableSummary(events.length, formatTableSummaryDuration(durationMs));
|
|
7884
|
-
};
|
|
7885
|
-
|
|
7886
8000
|
const tableSummaryNode = {
|
|
7887
|
-
childCount:
|
|
8001
|
+
childCount: 0,
|
|
7888
8002
|
className: TableSummary,
|
|
7889
8003
|
role: Status,
|
|
7890
8004
|
type: Div
|
|
7891
8005
|
};
|
|
7892
|
-
const
|
|
7893
|
-
|
|
8006
|
+
const tableSummaryItemNode = {
|
|
8007
|
+
childCount: 1,
|
|
8008
|
+
type: Span
|
|
8009
|
+
};
|
|
8010
|
+
const tableSummaryNodes = new Map();
|
|
8011
|
+
const getTableSummaryNode = childCount => {
|
|
8012
|
+
const existing = tableSummaryNodes.get(childCount);
|
|
8013
|
+
if (existing) {
|
|
8014
|
+
return existing;
|
|
8015
|
+
}
|
|
8016
|
+
const node = {
|
|
8017
|
+
...tableSummaryNode,
|
|
8018
|
+
childCount
|
|
8019
|
+
};
|
|
8020
|
+
tableSummaryNodes.set(childCount, node);
|
|
8021
|
+
return node;
|
|
8022
|
+
};
|
|
8023
|
+
const getTableSummaryDom = summaries => {
|
|
8024
|
+
const nonEmptySummaries = summaries.filter(Boolean);
|
|
8025
|
+
if (nonEmptySummaries.length === 0) {
|
|
7894
8026
|
return [];
|
|
7895
8027
|
}
|
|
7896
|
-
|
|
8028
|
+
const nodes = [getTableSummaryNode(nonEmptySummaries.length * 2 - 1)];
|
|
8029
|
+
for (let i = 0; i < nonEmptySummaries.length; i++) {
|
|
8030
|
+
nodes.push(tableSummaryItemNode, text(nonEmptySummaries[i]));
|
|
8031
|
+
if (i < nonEmptySummaries.length - 1) {
|
|
8032
|
+
nodes.push(text(' | '));
|
|
8033
|
+
}
|
|
8034
|
+
}
|
|
8035
|
+
return nodes;
|
|
7897
8036
|
};
|
|
7898
8037
|
|
|
7899
8038
|
const getTableBodyDom = (rowNodes, eventCount) => {
|
|
@@ -7952,7 +8091,7 @@ const getTableHeaderDom = (visibleTableColumns = defaultVisibleTableColumns, tab
|
|
|
7952
8091
|
}, ...getHeaderCellNodes(visibleTableColumns, tableColumns)];
|
|
7953
8092
|
};
|
|
7954
8093
|
|
|
7955
|
-
const getTableDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(),
|
|
8094
|
+
const getTableDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summaries = [], focus = 0) => {
|
|
7956
8095
|
return [{
|
|
7957
8096
|
childCount: 3,
|
|
7958
8097
|
className: Table,
|
|
@@ -8009,7 +8148,7 @@ const getTableScrollBarDom = visible => {
|
|
|
8009
8148
|
}];
|
|
8010
8149
|
};
|
|
8011
8150
|
|
|
8012
|
-
const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(),
|
|
8151
|
+
const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summaries = [], focus = 0, className = '', role = 'none', showScrollBar = false) => {
|
|
8013
8152
|
const tableWrapperClassName = mergeClassNames(TableWrapper, focus === FocusChatDebugTable ? FocusOutline : '', className);
|
|
8014
8153
|
const tableWrapperNode = {
|
|
8015
8154
|
childCount: showScrollBar ? 3 : 2,
|
|
@@ -8020,16 +8159,16 @@ const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultV
|
|
|
8020
8159
|
role
|
|
8021
8160
|
} : {})
|
|
8022
8161
|
};
|
|
8023
|
-
return [tableWrapperNode, ...getTableDom(rowNodes, eventCount, visibleTableColumns, tableColumns,
|
|
8162
|
+
return [tableWrapperNode, ...getTableDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summaries, focus), ...getTableResizersDom(visibleTableColumns), ...getTableScrollBarDom(showScrollBar)];
|
|
8024
8163
|
};
|
|
8025
8164
|
|
|
8026
|
-
const getTableWrapperWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(),
|
|
8027
|
-
const tableSummaryNodes = getTableSummaryDom(
|
|
8165
|
+
const getTableWrapperWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summaries = [], focus = 0, className = '', role = 'none', showScrollBar = false) => {
|
|
8166
|
+
const tableSummaryNodes = getTableSummaryDom(summaries);
|
|
8028
8167
|
return [{
|
|
8029
8168
|
childCount: tableSummaryNodes.length === 0 ? 1 : 2,
|
|
8030
8169
|
className: TableWrapperWrapper,
|
|
8031
8170
|
type: Div
|
|
8032
|
-
}, ...getTableWrapperDom(rowNodes, eventCount, visibleTableColumns, tableColumns,
|
|
8171
|
+
}, ...getTableWrapperDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summaries, focus, className, role, showScrollBar), ...tableSummaryNodes];
|
|
8033
8172
|
};
|
|
8034
8173
|
|
|
8035
8174
|
const getBucketUnitDom = (unitCount, presetValue) => {
|
|
@@ -8202,7 +8341,7 @@ const getTimelineDom = (timelineInfo, hoverPercent = null) => {
|
|
|
8202
8341
|
}, ...selectionNodes];
|
|
8203
8342
|
};
|
|
8204
8343
|
|
|
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 = []) => {
|
|
8344
|
+
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 = [], summaries = getTableSummaries(events)) => {
|
|
8206
8345
|
const visibleEvents = events.slice(minLineY, maxLineY);
|
|
8207
8346
|
const rows = createDevtoolsRows(visibleEvents, selectedEventIndex, minLineY);
|
|
8208
8347
|
const rowNodes = getDevtoolsRows(rows, visibleTableColumns);
|
|
@@ -8224,9 +8363,8 @@ const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvent
|
|
|
8224
8363
|
const responseEventNodes = selectedEvent ? getEventNode(getResponseEvent(selectedEvent)) : [];
|
|
8225
8364
|
const hasSelectedEvent = !!selectedEvent;
|
|
8226
8365
|
const eventsClassName = getEventsClassName(hasSelectedEvent);
|
|
8227
|
-
const summary = getTableSummary(events);
|
|
8228
8366
|
const showScrollBar = visibleEvents.length < events.length;
|
|
8229
|
-
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableWrapperWrapperDom(rowNodes, visibleEvents.length, visibleTableColumns, tableColumns,
|
|
8367
|
+
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableWrapperWrapperDom(rowNodes, visibleEvents.length, visibleTableColumns, tableColumns, summaries, focus, '', '', showScrollBar);
|
|
8230
8368
|
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualizationOptions, collapsedHeaderSections);
|
|
8231
8369
|
const sashNodes = getSashNodesDom(hasSelectedEvent);
|
|
8232
8370
|
const splitChildCount = hasSelectedEvent ? 3 : 1;
|
|
@@ -8281,7 +8419,7 @@ const getEventCategoryFilterDescription = eventCategoryFilters => {
|
|
|
8281
8419
|
}
|
|
8282
8420
|
return eventCategoryFilters.map(eventCategoryFilter => getEventCategoryFilterLabel(eventCategoryFilter).toLowerCase()).join(', ');
|
|
8283
8421
|
};
|
|
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 = []) => {
|
|
8422
|
+
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 = [], summaries = getTableSummaries(events)) => {
|
|
8285
8423
|
if (errorMessage) {
|
|
8286
8424
|
return getDebugErrorDom(errorMessage);
|
|
8287
8425
|
}
|
|
@@ -8305,7 +8443,7 @@ const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, ca
|
|
|
8305
8443
|
const emptyMessage = getEmptyMessage(events.length, hasFilterValue, useNoToolCallEventsMessage, noFilteredEventsMessage);
|
|
8306
8444
|
const safeSelectedEventIndex = selectedEventIndex === null || selectedEventIndex < 0 || selectedEventIndex >= events.length ? null : selectedEventIndex;
|
|
8307
8445
|
if (useDevtoolsLayout) {
|
|
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);
|
|
8446
|
+
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, summaries);
|
|
8309
8447
|
const devtoolsContentNodes = devtoolsDom.slice(1);
|
|
8310
8448
|
const topLevelNodes = [...getDebugViewTopDom(filterValue, useDevtoolsLayout, categoryFilters), ...devtoolsContentNodes];
|
|
8311
8449
|
const rootChildCount = getTopLevelChildCount(topLevelNodes);
|
|
@@ -8341,7 +8479,7 @@ const renderItems = (oldState, newState) => {
|
|
|
8341
8479
|
}
|
|
8342
8480
|
const filteredEvents = getCurrentEvents$1(newState);
|
|
8343
8481
|
const previewTextViewportHeight = getPreviewTextViewportHeight(newState);
|
|
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);
|
|
8482
|
+
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, newState.summaries);
|
|
8345
8483
|
return [SetDom2, newState.uid, dom];
|
|
8346
8484
|
};
|
|
8347
8485
|
|
|
@@ -8547,15 +8685,20 @@ const rerender = state => {
|
|
|
8547
8685
|
};
|
|
8548
8686
|
|
|
8549
8687
|
const resetTableColumns = state => {
|
|
8550
|
-
|
|
8688
|
+
const {
|
|
8689
|
+
sortColumn,
|
|
8690
|
+
sortDescending,
|
|
8691
|
+
tableColumns
|
|
8692
|
+
} = state;
|
|
8693
|
+
const defaultTableColumns = createTableColumns();
|
|
8694
|
+
if (getVisibleTableColumns(tableColumns).join(',') === defaultVisibleTableColumns.join(',') && isSameTableColumnWidths(getTableColumnWidths(tableColumns), getTableColumnWidths(defaultTableColumns)) && sortColumn === '' && sortDescending === false) {
|
|
8551
8695
|
return state;
|
|
8552
8696
|
}
|
|
8553
8697
|
return {
|
|
8554
8698
|
...state,
|
|
8555
8699
|
sortColumn: '',
|
|
8556
8700
|
sortDescending: false,
|
|
8557
|
-
tableColumns:
|
|
8558
|
-
tableColumnWidths: defaultTableColumnWidths
|
|
8701
|
+
tableColumns: defaultTableColumns
|
|
8559
8702
|
};
|
|
8560
8703
|
};
|
|
8561
8704
|
|
|
@@ -8564,9 +8707,10 @@ const handleResize = (state, dimensions) => {
|
|
|
8564
8707
|
...state,
|
|
8565
8708
|
...dimensions
|
|
8566
8709
|
};
|
|
8710
|
+
const tableWidth = shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : clampTableWidth(nextState, state.tableWidth);
|
|
8567
8711
|
return applyVirtualTableState({
|
|
8568
8712
|
...nextState,
|
|
8569
|
-
tableWidth
|
|
8713
|
+
tableWidth
|
|
8570
8714
|
});
|
|
8571
8715
|
};
|
|
8572
8716
|
|
|
@@ -8588,7 +8732,6 @@ const saveState = state => {
|
|
|
8588
8732
|
selectedEventId,
|
|
8589
8733
|
sessionId,
|
|
8590
8734
|
tableColumns,
|
|
8591
|
-
tableColumnWidths,
|
|
8592
8735
|
timelineEndSeconds,
|
|
8593
8736
|
timelineStartSeconds
|
|
8594
8737
|
} = state;
|
|
@@ -8599,7 +8742,7 @@ const saveState = state => {
|
|
|
8599
8742
|
selectedDetailTab: getSelectedDetailTab(detailTabs),
|
|
8600
8743
|
selectedEventId,
|
|
8601
8744
|
sessionId,
|
|
8602
|
-
tableColumnWidths,
|
|
8745
|
+
tableColumnWidths: getTableColumnWidths(tableColumns),
|
|
8603
8746
|
timelineEndSeconds,
|
|
8604
8747
|
timelineStartSeconds,
|
|
8605
8748
|
visibleTableColumns: getVisibleTableColumns(tableColumns)
|
|
@@ -8673,12 +8816,15 @@ const setSessionId = async (state, sessionId) => {
|
|
|
8673
8816
|
};
|
|
8674
8817
|
|
|
8675
8818
|
const toggleTableColumnVisibility = (state, column) => {
|
|
8819
|
+
const {
|
|
8820
|
+
tableColumns
|
|
8821
|
+
} = state;
|
|
8676
8822
|
if (!isTableColumn(column)) {
|
|
8677
8823
|
return state;
|
|
8678
8824
|
}
|
|
8679
8825
|
return {
|
|
8680
8826
|
...state,
|
|
8681
|
-
tableColumns:
|
|
8827
|
+
tableColumns: tableColumns.map(tableColumn => {
|
|
8682
8828
|
if (tableColumn.name !== column) {
|
|
8683
8829
|
return tableColumn;
|
|
8684
8830
|
}
|