@lvce-editor/chat-debug-view 10.20.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 +552 -329
- package/package.json +1 -1
|
@@ -1441,6 +1441,7 @@ const TimelineStartSeconds = 'timelineStartSeconds';
|
|
|
1441
1441
|
const TimelineEndSeconds = 'timelineEndSeconds';
|
|
1442
1442
|
const TimelineRangePreset = 'timelineRangePreset';
|
|
1443
1443
|
const Refresh$1 = 'refresh';
|
|
1444
|
+
const ToggleHeadersSection = 'toggleHeadersSection';
|
|
1444
1445
|
const All$1 = 'all';
|
|
1445
1446
|
const Tools$1 = 'tools';
|
|
1446
1447
|
const Network$1 = 'network';
|
|
@@ -1476,15 +1477,15 @@ const FailedToLoadChatDebugSession = 'Failed to load chat debug session "{PH1}".
|
|
|
1476
1477
|
const FailedToLoadChatDebugSessionWithError = 'Failed to load chat debug session "{PH1}": {PH2}';
|
|
1477
1478
|
const FilterEvents = 'Filter events';
|
|
1478
1479
|
const FromSeconds = 'from {PH1}s';
|
|
1479
|
-
const General = 'General';
|
|
1480
|
+
const General$1 = 'General';
|
|
1480
1481
|
const Headers = 'Headers';
|
|
1481
1482
|
const ImageCouldNotBeLoaded = 'image could not be loaded';
|
|
1482
1483
|
const InputTokens = 'Input Tokens';
|
|
1483
|
-
const InvalidSessionId = 'Invalid session id';
|
|
1484
|
-
const InvalidUriEncoding = 'Invalid URI encoding';
|
|
1485
|
-
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';
|
|
1486
1487
|
const Method$1 = 'Method';
|
|
1487
|
-
const MissingUri = 'Missing URI';
|
|
1488
|
+
const MissingUri$1 = 'Missing URI';
|
|
1488
1489
|
const Network = 'Network';
|
|
1489
1490
|
const NoChatSessionFound = 'No chat session found for sessionId "{PH1}".';
|
|
1490
1491
|
const NoEventsFound = 'No events have been found';
|
|
@@ -1497,19 +1498,21 @@ const Preview = 'Preview';
|
|
|
1497
1498
|
const Refresh = 'Refresh';
|
|
1498
1499
|
const RefreshEvents = 'Refresh events';
|
|
1499
1500
|
const ResetColumns = 'Reset columns';
|
|
1500
|
-
const RequestHeaders = 'Request Headers';
|
|
1501
|
+
const RequestHeaders$1 = 'Request Headers';
|
|
1501
1502
|
const RequestMethod = 'Request Method';
|
|
1502
1503
|
const RequestUrl = 'Request URL';
|
|
1503
1504
|
const Response = 'Response';
|
|
1504
|
-
const ResponseHeaders = 'Response Headers';
|
|
1505
|
+
const ResponseHeaders$1 = 'Response Headers';
|
|
1506
|
+
const ResponseHeadersInfo = 'Some headers may not be displayed due to Access-Control-Expose-Headers header.';
|
|
1505
1507
|
const SecondsRange = '{PH1}s-{PH2}s';
|
|
1506
1508
|
const Size$1 = 'Size';
|
|
1507
1509
|
const Started = 'Started';
|
|
1508
1510
|
const Status$2 = 'Status';
|
|
1509
1511
|
const StatusCode = 'Status Code';
|
|
1510
1512
|
const Stream = 'Stream';
|
|
1511
|
-
const
|
|
1512
|
-
const
|
|
1513
|
+
const TableSummaryRequestPlural = '{PH1} requests';
|
|
1514
|
+
const TableSummaryRequestSingular = '{PH1} request';
|
|
1515
|
+
const TableSummaryFinish = 'Finish {PH1}';
|
|
1513
1516
|
const Timing = 'Timing';
|
|
1514
1517
|
const Tokens = 'Tokens';
|
|
1515
1518
|
const ToSeconds = 'to {PH1}s';
|
|
@@ -1567,13 +1570,13 @@ const fromSeconds = seconds => {
|
|
|
1567
1570
|
});
|
|
1568
1571
|
};
|
|
1569
1572
|
const general = () => {
|
|
1570
|
-
return i18nString(General);
|
|
1573
|
+
return i18nString(General$1);
|
|
1571
1574
|
};
|
|
1572
1575
|
const headers = () => {
|
|
1573
1576
|
return i18nString(Headers);
|
|
1574
1577
|
};
|
|
1575
1578
|
const invalidSessionId = () => {
|
|
1576
|
-
return i18nString(InvalidSessionId);
|
|
1579
|
+
return i18nString(InvalidSessionId$1);
|
|
1577
1580
|
};
|
|
1578
1581
|
const imageCouldNotBeLoaded = () => {
|
|
1579
1582
|
return i18nString(ImageCouldNotBeLoaded);
|
|
@@ -1582,13 +1585,13 @@ const inputTokens = () => {
|
|
|
1582
1585
|
return i18nString(InputTokens);
|
|
1583
1586
|
};
|
|
1584
1587
|
const invalidUriEncoding = () => {
|
|
1585
|
-
return i18nString(InvalidUriEncoding);
|
|
1588
|
+
return i18nString(InvalidUriEncoding$1);
|
|
1586
1589
|
};
|
|
1587
1590
|
const invalidUriFormat = () => {
|
|
1588
|
-
return i18nString(InvalidUriFormat);
|
|
1591
|
+
return i18nString(InvalidUriFormat$1);
|
|
1589
1592
|
};
|
|
1590
1593
|
const missingUri = () => {
|
|
1591
|
-
return i18nString(MissingUri);
|
|
1594
|
+
return i18nString(MissingUri$1);
|
|
1592
1595
|
};
|
|
1593
1596
|
const method = () => {
|
|
1594
1597
|
return i18nString(Method$1);
|
|
@@ -1628,7 +1631,7 @@ const refreshEvents$1 = () => {
|
|
|
1628
1631
|
return i18nString(RefreshEvents);
|
|
1629
1632
|
};
|
|
1630
1633
|
const requestHeaders = () => {
|
|
1631
|
-
return i18nString(RequestHeaders);
|
|
1634
|
+
return i18nString(RequestHeaders$1);
|
|
1632
1635
|
};
|
|
1633
1636
|
const requestMethod = () => {
|
|
1634
1637
|
return i18nString(RequestMethod);
|
|
@@ -1637,7 +1640,10 @@ const requestUrl = () => {
|
|
|
1637
1640
|
return i18nString(RequestUrl);
|
|
1638
1641
|
};
|
|
1639
1642
|
const responseHeaders = () => {
|
|
1640
|
-
return i18nString(ResponseHeaders);
|
|
1643
|
+
return i18nString(ResponseHeaders$1);
|
|
1644
|
+
};
|
|
1645
|
+
const responseHeadersInfo = () => {
|
|
1646
|
+
return i18nString(ResponseHeadersInfo);
|
|
1641
1647
|
};
|
|
1642
1648
|
const resetColumns = () => {
|
|
1643
1649
|
return i18nString(ResetColumns);
|
|
@@ -1669,10 +1675,14 @@ const timing = () => {
|
|
|
1669
1675
|
const tokens = () => {
|
|
1670
1676
|
return i18nString(Tokens);
|
|
1671
1677
|
};
|
|
1672
|
-
const
|
|
1673
|
-
return i18nString(eventCount === 1 ?
|
|
1674
|
-
PH1: String(eventCount)
|
|
1675
|
-
|
|
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
|
|
1676
1686
|
});
|
|
1677
1687
|
};
|
|
1678
1688
|
const toSeconds = seconds => {
|
|
@@ -1810,25 +1820,6 @@ const isDetailTab = value => {
|
|
|
1810
1820
|
return value === Response$1 || value === Preview$1 || value === Payload$1 || value === Headers$1 || value === Tokens$1 || value === Headers$1 || value === Timing$1;
|
|
1811
1821
|
};
|
|
1812
1822
|
|
|
1813
|
-
const RE_SPACE = /\s+/;
|
|
1814
|
-
const tokenToEventCategoryFilter = new Map([['@tools', Tools$1], ['@network', Network$1], ['@ui', Ui$1], ['@stream', Stream$1]]);
|
|
1815
|
-
const parseFilterValue = filterValue => {
|
|
1816
|
-
const normalizedFilter = filterValue.trim().toLowerCase();
|
|
1817
|
-
if (!normalizedFilter) {
|
|
1818
|
-
return {
|
|
1819
|
-
eventCategoryFilter: All$1,
|
|
1820
|
-
filterText: ''
|
|
1821
|
-
};
|
|
1822
|
-
}
|
|
1823
|
-
const parts = normalizedFilter.split(RE_SPACE);
|
|
1824
|
-
const eventCategoryFilter = parts.map(part => tokenToEventCategoryFilter.get(part)).find(Boolean) || All$1;
|
|
1825
|
-
const filterText = parts.filter(part => !tokenToEventCategoryFilter.has(part)).join(' ');
|
|
1826
|
-
return {
|
|
1827
|
-
eventCategoryFilter,
|
|
1828
|
-
filterText
|
|
1829
|
-
};
|
|
1830
|
-
};
|
|
1831
|
-
|
|
1832
1823
|
const hasDetailTab = (detailTabs, value) => {
|
|
1833
1824
|
return detailTabs.some(detailTab => detailTab.name === value);
|
|
1834
1825
|
};
|
|
@@ -1851,28 +1842,45 @@ const Duration = 'duration';
|
|
|
1851
1842
|
const Status$1 = 'status';
|
|
1852
1843
|
const Size = 'size';
|
|
1853
1844
|
const tableColumnNames = [Type, Method, Status$1, Size, Duration];
|
|
1854
|
-
const
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
label:
|
|
1858
|
-
|
|
1859
|
-
},
|
|
1860
|
-
|
|
1845
|
+
const tableColumnDefinitions = {
|
|
1846
|
+
[Duration]: {
|
|
1847
|
+
defaultWidth: 110,
|
|
1848
|
+
label: duration(),
|
|
1849
|
+
minimumWidth: 80
|
|
1850
|
+
},
|
|
1851
|
+
[Method]: {
|
|
1852
|
+
defaultWidth: 90,
|
|
1861
1853
|
label: method(),
|
|
1862
|
-
|
|
1863
|
-
},
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
name: Status$1
|
|
1867
|
-
}, {
|
|
1868
|
-
isVisible: true,
|
|
1854
|
+
minimumWidth: 56
|
|
1855
|
+
},
|
|
1856
|
+
[Size]: {
|
|
1857
|
+
defaultWidth: 100,
|
|
1869
1858
|
label: size(),
|
|
1870
|
-
|
|
1871
|
-
},
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
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
|
+
});
|
|
1876
1884
|
};
|
|
1877
1885
|
const defaultVisibleTableColumns = tableColumnNames;
|
|
1878
1886
|
const isTableColumn = value => {
|
|
@@ -1888,13 +1896,45 @@ const getTableColumnsWithVisibility = (tableColumns, visibleTableColumns) => {
|
|
|
1888
1896
|
isVisible: visibleColumns.has(column.name)
|
|
1889
1897
|
}));
|
|
1890
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
|
+
};
|
|
1891
1934
|
const getOrderedVisibleTableColumns = (values, tableColumns = createTableColumns()) => {
|
|
1892
1935
|
const visibleColumns = new Set(values.filter(isTableColumn));
|
|
1893
1936
|
return tableColumns.map(column => column.name).filter(column => visibleColumns.has(column));
|
|
1894
1937
|
};
|
|
1895
|
-
const isVisibleTableColumn = (tableColumns, column) => {
|
|
1896
|
-
return tableColumns.some(tableColumn => tableColumn.name === column && tableColumn.isVisible);
|
|
1897
|
-
};
|
|
1898
1938
|
const getTableColumnLabel = (tableColumns, name) => {
|
|
1899
1939
|
const match = tableColumns.find(column => column.name === name);
|
|
1900
1940
|
if (match) {
|
|
@@ -1916,17 +1956,15 @@ const getTableColumnLabel = (tableColumns, name) => {
|
|
|
1916
1956
|
}
|
|
1917
1957
|
};
|
|
1918
1958
|
|
|
1919
|
-
const defaultTableColumnWidths = {
|
|
1920
|
-
duration: 110,
|
|
1921
|
-
method: 90,
|
|
1922
|
-
size: 100,
|
|
1923
|
-
status: 110,
|
|
1924
|
-
type: 260
|
|
1925
|
-
};
|
|
1926
|
-
|
|
1927
1959
|
const getMainWidth = state => {
|
|
1928
1960
|
return Math.max(0, state.width - state.horizontalPadding);
|
|
1929
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
|
+
};
|
|
1930
1968
|
const clampTableWidth = (state, tableWidth) => {
|
|
1931
1969
|
const mainWidth = getMainWidth(state);
|
|
1932
1970
|
const maxTableWidth = Math.max(0, mainWidth - state.minDetailsWidth - state.sashWidth);
|
|
@@ -1938,24 +1976,21 @@ const getDetailsWidth = (state, tableWidth) => {
|
|
|
1938
1976
|
const clampedTableWidth = clampTableWidth(state, tableWidth);
|
|
1939
1977
|
return Math.max(0, mainWidth - clampedTableWidth - state.sashWidth);
|
|
1940
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
|
+
};
|
|
1941
1987
|
const getTableWidthFromClientX = (state, clientX) => {
|
|
1942
1988
|
const nextTableWidth = clientX - state.x - state.leftPadding;
|
|
1943
1989
|
return clampTableWidth(state, nextTableWidth);
|
|
1944
1990
|
};
|
|
1945
1991
|
|
|
1946
|
-
const
|
|
1947
|
-
|
|
1948
|
-
[Method]: 56,
|
|
1949
|
-
[Size]: 80,
|
|
1950
|
-
[Status$1]: 56,
|
|
1951
|
-
[Type]: 80
|
|
1952
|
-
};
|
|
1953
|
-
const getMinimumTableColumnWidth = column => {
|
|
1954
|
-
return minimumTableColumnWidths[column];
|
|
1955
|
-
};
|
|
1956
|
-
|
|
1957
|
-
const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumnWidths) => {
|
|
1958
|
-
const visibleColumns = getOrderedVisibleTableColumns(visibleTableColumns);
|
|
1992
|
+
const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumns) => {
|
|
1993
|
+
const visibleColumns = getOrderedVisibleTableColumns(visibleTableColumns, tableColumns);
|
|
1959
1994
|
if (visibleColumns.length === 0) {
|
|
1960
1995
|
return {
|
|
1961
1996
|
fixedColumns: [],
|
|
@@ -1972,10 +2007,10 @@ const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumnWidths
|
|
|
1972
2007
|
visibleColumnWidths.push(Math.max(0, remainingWidth));
|
|
1973
2008
|
continue;
|
|
1974
2009
|
}
|
|
1975
|
-
const minimumWidth =
|
|
1976
|
-
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);
|
|
1977
2012
|
const maxWidth = Math.max(minimumWidth, remainingWidth - minimumRemainingWidth);
|
|
1978
|
-
const preferredWidth =
|
|
2013
|
+
const preferredWidth = getTableColumnWidth(tableColumns, column);
|
|
1979
2014
|
const clampedWidth = Math.max(minimumWidth, Math.min(preferredWidth, maxWidth));
|
|
1980
2015
|
visibleColumnWidths.push(clampedWidth);
|
|
1981
2016
|
remainingWidth -= clampedWidth;
|
|
@@ -1994,24 +2029,21 @@ const getTableColumnLayout = (tableWidth, visibleTableColumns, tableColumnWidths
|
|
|
1994
2029
|
};
|
|
1995
2030
|
};
|
|
1996
2031
|
|
|
1997
|
-
const getResizedTableColumnWidths = (state, visibleTableColumns,
|
|
2032
|
+
const getResizedTableColumnWidths = (state, visibleTableColumns, tableColumns, clientX, resizerDownId) => {
|
|
1998
2033
|
const clampedTableWidth = clampTableWidth(state, state.tableWidth);
|
|
1999
|
-
const layout = getTableColumnLayout(clampedTableWidth, visibleTableColumns,
|
|
2034
|
+
const layout = getTableColumnLayout(clampedTableWidth, visibleTableColumns, tableColumns);
|
|
2000
2035
|
if (resizerDownId < 1 || resizerDownId >= layout.visibleColumns.length) {
|
|
2001
|
-
return
|
|
2036
|
+
return tableColumns;
|
|
2002
2037
|
}
|
|
2003
2038
|
const boundaryIndex = resizerDownId - 1;
|
|
2004
2039
|
const precedingWidth = layout.visibleColumnWidths.slice(0, boundaryIndex).reduce((total, current) => total + current, 0);
|
|
2005
2040
|
const resizedColumn = layout.visibleColumns[boundaryIndex];
|
|
2006
|
-
const minimumWidth =
|
|
2007
|
-
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);
|
|
2008
2043
|
const maxWidth = Math.max(minimumWidth, clampedTableWidth - precedingWidth - minimumRemainingWidth);
|
|
2009
2044
|
const nextWidth = clientX - state.x - state.leftPadding - precedingWidth;
|
|
2010
2045
|
const clampedWidth = Math.max(minimumWidth, Math.min(nextWidth, maxWidth));
|
|
2011
|
-
return
|
|
2012
|
-
...tableColumnWidths,
|
|
2013
|
-
[resizedColumn]: clampedWidth
|
|
2014
|
-
};
|
|
2046
|
+
return setTableColumnWidth(tableColumns, resizedColumn, clampedWidth);
|
|
2015
2047
|
};
|
|
2016
2048
|
|
|
2017
2049
|
const isSameTableColumnWidths = (first, second) => {
|
|
@@ -2048,9 +2080,6 @@ const restoreCategoryFilters = (savedState, currentCategoryFilters) => {
|
|
|
2048
2080
|
if (typeof savedState.eventCategoryFilter === 'string' && validEventCategoryFilters.has(savedState.eventCategoryFilter)) {
|
|
2049
2081
|
return selectCategoryFilter(currentCategoryFilters, savedState.eventCategoryFilter);
|
|
2050
2082
|
}
|
|
2051
|
-
if (typeof savedState.filterValue === 'string') {
|
|
2052
|
-
return selectCategoryFilter(currentCategoryFilters, parseFilterValue(savedState.filterValue).eventCategoryFilter);
|
|
2053
|
-
}
|
|
2054
2083
|
return currentCategoryFilters;
|
|
2055
2084
|
};
|
|
2056
2085
|
const restoreFilterValue = (savedState, currentFilterValue) => {
|
|
@@ -2080,24 +2109,26 @@ const restoreVisibleTableColumns = (savedState, currentTableColumns) => {
|
|
|
2080
2109
|
}
|
|
2081
2110
|
return getTableColumnsWithVisibility(currentTableColumns, visibleTableColumns);
|
|
2082
2111
|
};
|
|
2083
|
-
const
|
|
2112
|
+
const restoreTableColumns = (savedState, currentTableColumns) => {
|
|
2113
|
+
const tableColumnsWithVisibility = restoreVisibleTableColumns(savedState, currentTableColumns);
|
|
2084
2114
|
const {
|
|
2085
2115
|
tableColumnWidths: savedTableColumnWidths
|
|
2086
2116
|
} = savedState;
|
|
2087
2117
|
if (isTableColumnWidths(savedTableColumnWidths)) {
|
|
2088
|
-
return savedTableColumnWidths;
|
|
2118
|
+
return setTableColumnWidths(tableColumnsWithVisibility, savedTableColumnWidths);
|
|
2089
2119
|
}
|
|
2090
2120
|
if (isLegacyTableColumnWidths(savedTableColumnWidths)) {
|
|
2091
2121
|
const legacyTableColumnWidths = savedTableColumnWidths;
|
|
2092
|
-
|
|
2122
|
+
const currentTableColumnWidths = getTableColumnWidths(currentTableColumns);
|
|
2123
|
+
return setTableColumnWidths(tableColumnsWithVisibility, {
|
|
2093
2124
|
duration: legacyTableColumnWidths.duration,
|
|
2094
2125
|
method: legacyTableColumnWidths.method,
|
|
2095
2126
|
size: currentTableColumnWidths.size,
|
|
2096
2127
|
status: legacyTableColumnWidths.status,
|
|
2097
2128
|
type: legacyTableColumnWidths.type
|
|
2098
|
-
};
|
|
2129
|
+
});
|
|
2099
2130
|
}
|
|
2100
|
-
return
|
|
2131
|
+
return tableColumnsWithVisibility;
|
|
2101
2132
|
};
|
|
2102
2133
|
const restoreSavedState = (state, savedState) => {
|
|
2103
2134
|
if (!isSavedState(savedState)) {
|
|
@@ -2109,8 +2140,7 @@ const restoreSavedState = (state, savedState) => {
|
|
|
2109
2140
|
detailTabs: restoreDetailTabs(savedState, state.detailTabs),
|
|
2110
2141
|
filterValue: restoreFilterValue(savedState, state.filterValue),
|
|
2111
2142
|
selectedEventId: restoreSelectedEventId(savedState, state.selectedEventId),
|
|
2112
|
-
tableColumns:
|
|
2113
|
-
tableColumnWidths: restoreTableColumnWidths(savedState, state.tableColumnWidths),
|
|
2143
|
+
tableColumns: restoreTableColumns(savedState, state.tableColumns),
|
|
2114
2144
|
timelineEndSeconds: restoreTimelineEndSeconds(savedState, state.timelineEndSeconds),
|
|
2115
2145
|
timelineStartSeconds: restoreTimelineStartSeconds(savedState, state.timelineStartSeconds)
|
|
2116
2146
|
};
|
|
@@ -2321,7 +2351,7 @@ const getEventsWithTime = events => {
|
|
|
2321
2351
|
});
|
|
2322
2352
|
};
|
|
2323
2353
|
|
|
2324
|
-
const clamp
|
|
2354
|
+
const clamp = (value, minimum, maximum) => {
|
|
2325
2355
|
return Math.max(minimum, Math.min(value, maximum));
|
|
2326
2356
|
};
|
|
2327
2357
|
|
|
@@ -2355,8 +2385,8 @@ const getNormalizedRange = (durationSeconds, startValue, endValue) => {
|
|
|
2355
2385
|
const rawEnd = parsedEnd ?? durationSeconds;
|
|
2356
2386
|
const rangeStart = Math.min(rawStart, rawEnd);
|
|
2357
2387
|
const rangeEnd = Math.max(rawStart, rawEnd);
|
|
2358
|
-
const normalizedStart = clamp
|
|
2359
|
-
const normalizedEnd = clamp
|
|
2388
|
+
const normalizedStart = clamp(rangeStart, 0, durationSeconds);
|
|
2389
|
+
const normalizedEnd = clamp(rangeEnd, 0, durationSeconds);
|
|
2360
2390
|
return {
|
|
2361
2391
|
endSeconds: roundSeconds(normalizedEnd),
|
|
2362
2392
|
hasSelection: true,
|
|
@@ -2441,6 +2471,7 @@ const createDefaultState = () => {
|
|
|
2441
2471
|
return {
|
|
2442
2472
|
assetDir: '',
|
|
2443
2473
|
categoryFilters: createCategoryFilters(),
|
|
2474
|
+
collapsedHeaderSections: [],
|
|
2444
2475
|
databaseName: 'lvce-chat-view-sessions',
|
|
2445
2476
|
dataBaseVersion: 2,
|
|
2446
2477
|
defaultTableWidth,
|
|
@@ -2479,8 +2510,8 @@ const createDefaultState = () => {
|
|
|
2479
2510
|
showResponsePartEvents: false,
|
|
2480
2511
|
sortColumn: '',
|
|
2481
2512
|
sortDescending: false,
|
|
2513
|
+
summaries: [],
|
|
2482
2514
|
tableColumns: createTableColumns(),
|
|
2483
|
-
tableColumnWidths: defaultTableColumnWidths,
|
|
2484
2515
|
tableDeltaY: 0,
|
|
2485
2516
|
tableMaxLineY: 0,
|
|
2486
2517
|
tableMinLineY: 0,
|
|
@@ -2488,6 +2519,7 @@ const createDefaultState = () => {
|
|
|
2488
2519
|
tableScrollBarHandleOffset: 0,
|
|
2489
2520
|
tableScrollBarPointerActive: false,
|
|
2490
2521
|
tableWidth: defaultTableWidth,
|
|
2522
|
+
tableWidthManuallyResized: false,
|
|
2491
2523
|
timelineEndSeconds: '',
|
|
2492
2524
|
timelineEvents: [],
|
|
2493
2525
|
timelineFilterDescription: '',
|
|
@@ -2540,7 +2572,7 @@ const RenderFocusContext = 4;
|
|
|
2540
2572
|
const RenderFocus = 5;
|
|
2541
2573
|
|
|
2542
2574
|
const diff = (oldState, newState) => {
|
|
2543
|
-
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.
|
|
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) {
|
|
2544
2576
|
return [RenderIncremental, RenderCss];
|
|
2545
2577
|
}
|
|
2546
2578
|
return [];
|
|
@@ -2577,6 +2609,45 @@ const mergedEventType = 'tool-execution';
|
|
|
2577
2609
|
const handleSubmitEventType = 'handle-submit';
|
|
2578
2610
|
const sseResponseCompletedEventType = 'sse-response-completed';
|
|
2579
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
|
+
|
|
2580
2651
|
const hasMatchingToolName = (startedEvent, finishedEvent) => {
|
|
2581
2652
|
if (typeof startedEvent.toolName === 'string' && typeof finishedEvent.toolName === 'string') {
|
|
2582
2653
|
return startedEvent.toolName === finishedEvent.toolName;
|
|
@@ -2682,7 +2753,8 @@ const mergeRequestResponseEvents = (startedEvent, finishedEvent) => {
|
|
|
2682
2753
|
return {
|
|
2683
2754
|
...mergeToolExecutionEvents(startedEvent, finishedEvent, startedEvent.type),
|
|
2684
2755
|
requestEvent: startedEvent,
|
|
2685
|
-
responseEvent: finishedEvent
|
|
2756
|
+
responseEvent: finishedEvent,
|
|
2757
|
+
size: getResponsePayloadSize(finishedEvent)
|
|
2686
2758
|
};
|
|
2687
2759
|
};
|
|
2688
2760
|
const isMatchingRequestResponsePair = (startedEvent, finishedEvent) => {
|
|
@@ -2788,37 +2860,46 @@ const matchesEventCategoryFilter = (event, eventCategoryFilters) => {
|
|
|
2788
2860
|
const getFilteredEvents = (events, filterValue, eventCategoryFilters, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents) => {
|
|
2789
2861
|
const visibleEvents = getVisibleEvents(events, showInputEvents, showResponsePartEvents, showEventStreamFinishedEvents);
|
|
2790
2862
|
const collapsedEvents = collapseToolExecutionEvents(visibleEvents);
|
|
2791
|
-
const
|
|
2792
|
-
const
|
|
2793
|
-
const filteredByCategory = collapsedEvents.filter(event => matchesEventCategoryFilter(event, activeEventCategoryFilters));
|
|
2794
|
-
const {
|
|
2795
|
-
filterText
|
|
2796
|
-
} = parsedFilter;
|
|
2863
|
+
const filteredByCategory = collapsedEvents.filter(event => matchesEventCategoryFilter(event, eventCategoryFilters));
|
|
2864
|
+
const filterText = filterValue.trim().toLowerCase();
|
|
2797
2865
|
if (!filterText) {
|
|
2798
2866
|
return filteredByCategory;
|
|
2799
2867
|
}
|
|
2800
2868
|
return filteredByCategory.filter(event => JSON.stringify(event).toLowerCase().includes(filterText));
|
|
2801
2869
|
};
|
|
2802
2870
|
|
|
2871
|
+
const formatDurationSeconds = value => {
|
|
2872
|
+
return `${value.toFixed(1)}s`;
|
|
2873
|
+
};
|
|
2874
|
+
|
|
2875
|
+
const formatDurationText = durationMs => {
|
|
2876
|
+
if (durationMs >= 1000) {
|
|
2877
|
+
return formatDurationSeconds(durationMs / 1000);
|
|
2878
|
+
}
|
|
2879
|
+
return `${durationMs}ms`;
|
|
2880
|
+
};
|
|
2803
2881
|
const getDurationText = event => {
|
|
2804
2882
|
if (event.time) {
|
|
2805
2883
|
return event.time;
|
|
2806
2884
|
}
|
|
2807
2885
|
const explicitDuration = event.durationMs ?? event.duration;
|
|
2808
2886
|
if (typeof explicitDuration === 'number' && Number.isFinite(explicitDuration)) {
|
|
2809
|
-
return
|
|
2887
|
+
return formatDurationText(explicitDuration);
|
|
2810
2888
|
}
|
|
2811
2889
|
const start = toTimeNumber(event.started ?? event.startTime ?? event.startTimestamp ?? event.timestamp);
|
|
2812
2890
|
const end = toTimeNumber(event.ended ?? event.endTime ?? event.endTimestamp ?? event.timestamp);
|
|
2813
2891
|
if (start === undefined || end === undefined || end < start) {
|
|
2814
2892
|
return '-';
|
|
2815
2893
|
}
|
|
2816
|
-
return
|
|
2894
|
+
return formatDurationText(end - start);
|
|
2817
2895
|
};
|
|
2818
2896
|
|
|
2819
2897
|
const getEventTableDurationText = event => {
|
|
2820
2898
|
const durationText = getDurationText(event);
|
|
2821
2899
|
if (!durationText.endsWith('ms')) {
|
|
2900
|
+
if (durationText.endsWith('s')) {
|
|
2901
|
+
return `${durationText.slice(0, -1)} s`;
|
|
2902
|
+
}
|
|
2822
2903
|
return durationText;
|
|
2823
2904
|
}
|
|
2824
2905
|
return `${durationText.slice(0, -2)} ms`;
|
|
@@ -2968,10 +3049,22 @@ const sortEventsByTableColumn = (events, sortColumn, sortDescending) => {
|
|
|
2968
3049
|
};
|
|
2969
3050
|
|
|
2970
3051
|
const getCurrentEvents$1 = state => {
|
|
2971
|
-
const
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
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);
|
|
2975
3068
|
};
|
|
2976
3069
|
|
|
2977
3070
|
const getCurrentEvents = state => getCurrentEvents$1(state);
|
|
@@ -2994,6 +3087,8 @@ const loadSelectedEvent = async ({
|
|
|
2994
3087
|
sessionId,
|
|
2995
3088
|
type
|
|
2996
3089
|
}) => {
|
|
3090
|
+
// TODO load them in parallel
|
|
3091
|
+
// or adjust worker function to load both start and end event
|
|
2997
3092
|
const raw = await loadSelectedEvent$1(sessionId, eventId, type);
|
|
2998
3093
|
if (endEventId && endEventId !== -1) {
|
|
2999
3094
|
const end = await loadSelectedEvent$1(sessionId, endEventId, type);
|
|
@@ -3308,7 +3403,7 @@ const selectEventAtIndex = async (state, selectedEventIndex) => {
|
|
|
3308
3403
|
type: selectedEvent.type
|
|
3309
3404
|
});
|
|
3310
3405
|
const resolvedSelectedEvent = await withPreparedSelectedEventPreview(mergeSelectedEventDetails(selectedEvent, selectedEventDetails));
|
|
3311
|
-
|
|
3406
|
+
const nextState = {
|
|
3312
3407
|
...state,
|
|
3313
3408
|
detailTabs: createDetailTabs(selectedDetailTab, resolvedSelectedEvent),
|
|
3314
3409
|
previewTextCursorColumnIndex: null,
|
|
@@ -3319,6 +3414,10 @@ const selectEventAtIndex = async (state, selectedEventIndex) => {
|
|
|
3319
3414
|
selectedEvent: resolvedSelectedEvent,
|
|
3320
3415
|
selectedEventId: selectedEvent.eventId,
|
|
3321
3416
|
selectedEventIndex
|
|
3417
|
+
};
|
|
3418
|
+
return withSelectedEventVisible({
|
|
3419
|
+
...nextState,
|
|
3420
|
+
tableWidth: shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : state.tableWidth
|
|
3322
3421
|
});
|
|
3323
3422
|
};
|
|
3324
3423
|
|
|
@@ -3379,36 +3478,17 @@ const getMenuEntriesTableBody = props => {
|
|
|
3379
3478
|
}];
|
|
3380
3479
|
};
|
|
3381
3480
|
|
|
3382
|
-
const
|
|
3383
|
-
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
|
+
};
|
|
3384
3489
|
};
|
|
3385
|
-
|
|
3386
3490
|
const getMenuEntriesTableHeader = state => {
|
|
3387
|
-
return [{
|
|
3388
|
-
args: [Type],
|
|
3389
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3390
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Type),
|
|
3391
|
-
id: 'type',
|
|
3392
|
-
label: type()
|
|
3393
|
-
}, {
|
|
3394
|
-
args: [Status$1],
|
|
3395
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3396
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Status$1),
|
|
3397
|
-
id: 'status',
|
|
3398
|
-
label: status()
|
|
3399
|
-
}, {
|
|
3400
|
-
args: [Size],
|
|
3401
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3402
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Size),
|
|
3403
|
-
id: 'size',
|
|
3404
|
-
label: size()
|
|
3405
|
-
}, {
|
|
3406
|
-
args: [Duration],
|
|
3407
|
-
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
3408
|
-
flags: getColumnVisibilityFlags(state.tableColumns, Duration),
|
|
3409
|
-
id: 'duration',
|
|
3410
|
-
label: duration()
|
|
3411
|
-
}, {
|
|
3491
|
+
return [...state.tableColumns.map(column => getColumnMenuEntry(column.name, column.label, column.isVisible)), {
|
|
3412
3492
|
args: [],
|
|
3413
3493
|
command: 'ChatDebug.resetTableColumns',
|
|
3414
3494
|
flags: None$1,
|
|
@@ -3487,12 +3567,10 @@ const getMenuIds = () => {
|
|
|
3487
3567
|
return [MenuChatDebugTableHeader, MenuChatDebugTableBody, 556, 557];
|
|
3488
3568
|
};
|
|
3489
3569
|
|
|
3490
|
-
const
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
MissingUri: 4
|
|
3495
|
-
};
|
|
3570
|
+
const InvalidSessionId = 1;
|
|
3571
|
+
const InvalidUriEncoding = 2;
|
|
3572
|
+
const InvalidUriFormat = 3;
|
|
3573
|
+
const MissingUri = 4;
|
|
3496
3574
|
|
|
3497
3575
|
const ParseChatDebugUriResultType = {
|
|
3498
3576
|
Error: 2,
|
|
@@ -3504,7 +3582,7 @@ const invalidSessionIdPattern = /[/?#]/;
|
|
|
3504
3582
|
const parseChatDebugUri = uri => {
|
|
3505
3583
|
if (!uri) {
|
|
3506
3584
|
return {
|
|
3507
|
-
code:
|
|
3585
|
+
code: MissingUri,
|
|
3508
3586
|
message: missingUri(),
|
|
3509
3587
|
type: ParseChatDebugUriResultType.Error
|
|
3510
3588
|
};
|
|
@@ -3512,7 +3590,7 @@ const parseChatDebugUri = uri => {
|
|
|
3512
3590
|
const match = uri.match(chatDebugUriPattern);
|
|
3513
3591
|
if (!match) {
|
|
3514
3592
|
return {
|
|
3515
|
-
code:
|
|
3593
|
+
code: InvalidUriFormat,
|
|
3516
3594
|
message: invalidUriFormat(),
|
|
3517
3595
|
type: ParseChatDebugUriResultType.Error
|
|
3518
3596
|
};
|
|
@@ -3523,14 +3601,14 @@ const parseChatDebugUri = uri => {
|
|
|
3523
3601
|
sessionId = decodeURIComponent(encodedSessionId);
|
|
3524
3602
|
} catch {
|
|
3525
3603
|
return {
|
|
3526
|
-
code:
|
|
3604
|
+
code: InvalidUriEncoding,
|
|
3527
3605
|
message: invalidUriEncoding(),
|
|
3528
3606
|
type: ParseChatDebugUriResultType.Error
|
|
3529
3607
|
};
|
|
3530
3608
|
}
|
|
3531
3609
|
if (!sessionId || invalidSessionIdPattern.test(sessionId)) {
|
|
3532
3610
|
return {
|
|
3533
|
-
code:
|
|
3611
|
+
code: InvalidSessionId,
|
|
3534
3612
|
message: invalidSessionId(),
|
|
3535
3613
|
type: ParseChatDebugUriResultType.Error
|
|
3536
3614
|
};
|
|
@@ -3550,7 +3628,7 @@ const getSessionIdFromUri = state => {
|
|
|
3550
3628
|
};
|
|
3551
3629
|
|
|
3552
3630
|
const getInvalidUriMessage = (uri, code) => {
|
|
3553
|
-
if (code ===
|
|
3631
|
+
if (code === MissingUri) {
|
|
3554
3632
|
return unableToLoadDebugSessionMissingUri();
|
|
3555
3633
|
}
|
|
3556
3634
|
return unableToLoadDebugSessionInvalidUri(uri);
|
|
@@ -3569,6 +3647,49 @@ const getEffectiveTimelineRange = (timelineStartSeconds, timelineEndSeconds, tim
|
|
|
3569
3647
|
};
|
|
3570
3648
|
};
|
|
3571
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
|
+
|
|
3572
3693
|
const getTimelineEvents = state => {
|
|
3573
3694
|
const {
|
|
3574
3695
|
events,
|
|
@@ -3601,12 +3722,16 @@ const getStateWithTimelineInfo = state => {
|
|
|
3601
3722
|
const effectiveRange = getEffectiveTimelineRange(state.timelineStartSeconds, state.timelineEndSeconds, state.timelineSelectionActive, state.timelineSelectionAnchorSeconds, state.timelineSelectionFocusSeconds);
|
|
3602
3723
|
const timelineInfo = getTimelineInfo(timelineEvents, effectiveRange.startSeconds, effectiveRange.endSeconds);
|
|
3603
3724
|
const timelineFilterDescription = getTimelineFilterDescription(state.timelineStartSeconds, state.timelineEndSeconds);
|
|
3604
|
-
|
|
3725
|
+
const nextState = {
|
|
3605
3726
|
...state,
|
|
3606
3727
|
timelineEvents,
|
|
3607
3728
|
timelineFilterDescription,
|
|
3608
3729
|
timelineInfo
|
|
3609
3730
|
};
|
|
3731
|
+
return {
|
|
3732
|
+
...nextState,
|
|
3733
|
+
summaries: getTableSummaries(getCurrentEvents$1(nextState))
|
|
3734
|
+
};
|
|
3610
3735
|
};
|
|
3611
3736
|
|
|
3612
3737
|
const getStateWithInvalidUri = state => {
|
|
@@ -3676,7 +3801,7 @@ const getMergedRequestResponseEvent = (item, response) => {
|
|
|
3676
3801
|
eventEndId: response.eventId,
|
|
3677
3802
|
eventId: item.eventId,
|
|
3678
3803
|
method: 'POST',
|
|
3679
|
-
size:
|
|
3804
|
+
size: getResponsePayloadSize(response),
|
|
3680
3805
|
...(started === undefined ? {} : {
|
|
3681
3806
|
started
|
|
3682
3807
|
}),
|
|
@@ -3693,7 +3818,7 @@ const getMergedRequestResponseEvent = (item, response) => {
|
|
|
3693
3818
|
eventEndId: response.eventId,
|
|
3694
3819
|
eventId: item.eventId,
|
|
3695
3820
|
method: 'POST',
|
|
3696
|
-
size:
|
|
3821
|
+
size: getResponsePayloadSize(response),
|
|
3697
3822
|
...(started === undefined ? {} : {
|
|
3698
3823
|
started
|
|
3699
3824
|
}),
|
|
@@ -3744,7 +3869,10 @@ const listChatViewEvents = async (sessionId, _databaseName, _dataBaseVersion, _e
|
|
|
3744
3869
|
};
|
|
3745
3870
|
|
|
3746
3871
|
const restoreSelectedEvent = async state => {
|
|
3747
|
-
|
|
3872
|
+
const {
|
|
3873
|
+
selectedEventId
|
|
3874
|
+
} = state;
|
|
3875
|
+
if (selectedEventId === null) {
|
|
3748
3876
|
return {
|
|
3749
3877
|
...state,
|
|
3750
3878
|
previewTextCursorColumnIndex: null,
|
|
@@ -3845,11 +3973,14 @@ const loadEventsForSessionId = async (state, sessionId) => {
|
|
|
3845
3973
|
};
|
|
3846
3974
|
|
|
3847
3975
|
const refreshEvents = async state => {
|
|
3848
|
-
const
|
|
3849
|
-
|
|
3976
|
+
const {
|
|
3977
|
+
sessionId
|
|
3978
|
+
} = state;
|
|
3979
|
+
const actual = sessionId || getSessionIdFromUri(state);
|
|
3980
|
+
if (!actual) {
|
|
3850
3981
|
return getStateWithInvalidUri(state);
|
|
3851
3982
|
}
|
|
3852
|
-
return loadEventsForSessionId(state,
|
|
3983
|
+
return loadEventsForSessionId(state, actual);
|
|
3853
3984
|
};
|
|
3854
3985
|
|
|
3855
3986
|
const refresh = async state => {
|
|
@@ -3904,6 +4035,9 @@ const handleEscape = state => {
|
|
|
3904
4035
|
};
|
|
3905
4036
|
|
|
3906
4037
|
const getEventIndexByStableId$1 = (events, event) => {
|
|
4038
|
+
if (typeof event.eventId !== 'number') {
|
|
4039
|
+
return -1;
|
|
4040
|
+
}
|
|
3907
4041
|
return events.findIndex(candidate => candidate.eventId === event.eventId);
|
|
3908
4042
|
};
|
|
3909
4043
|
|
|
@@ -3995,6 +4129,28 @@ const getBoolean = value => {
|
|
|
3995
4129
|
return value === true || value === 'true' || value === 'on' || value === '1';
|
|
3996
4130
|
};
|
|
3997
4131
|
|
|
4132
|
+
const General = 'general';
|
|
4133
|
+
const RequestHeaders = 'requestHeaders';
|
|
4134
|
+
const ResponseHeaders = 'responseHeaders';
|
|
4135
|
+
const headerSectionKeys = [General, ResponseHeaders, RequestHeaders];
|
|
4136
|
+
const isHeaderSectionKey = value => {
|
|
4137
|
+
return headerSectionKeys.includes(value);
|
|
4138
|
+
};
|
|
4139
|
+
|
|
4140
|
+
const removeSection = (collapsedHeaderSections, section) => {
|
|
4141
|
+
return collapsedHeaderSections.filter(value => value !== section);
|
|
4142
|
+
};
|
|
4143
|
+
const toggleHeadersSection = (state, value) => {
|
|
4144
|
+
if (!isHeaderSectionKey(value)) {
|
|
4145
|
+
return state;
|
|
4146
|
+
}
|
|
4147
|
+
const isCollapsed = state.collapsedHeaderSections.includes(value);
|
|
4148
|
+
return {
|
|
4149
|
+
...state,
|
|
4150
|
+
collapsedHeaderSections: isCollapsed ? removeSection(state.collapsedHeaderSections, value) : [...state.collapsedHeaderSections, value]
|
|
4151
|
+
};
|
|
4152
|
+
};
|
|
4153
|
+
|
|
3998
4154
|
const parseTimelineRangePreset$1 = value => {
|
|
3999
4155
|
if (!value) {
|
|
4000
4156
|
return {
|
|
@@ -4009,6 +4165,9 @@ const parseTimelineRangePreset$1 = value => {
|
|
|
4009
4165
|
};
|
|
4010
4166
|
};
|
|
4011
4167
|
const getEventIndexByStableId = (events, event) => {
|
|
4168
|
+
if (typeof event.eventId !== 'number') {
|
|
4169
|
+
return -1;
|
|
4170
|
+
}
|
|
4012
4171
|
return events.findIndex(candidate => candidate.eventId === event.eventId);
|
|
4013
4172
|
};
|
|
4014
4173
|
const getSelectedEventIndex = state => {
|
|
@@ -4106,7 +4265,7 @@ const handleUseDevtoolsLayout = (state, _value, checked) => {
|
|
|
4106
4265
|
const useDevtoolsLayout = getBoolean(checked);
|
|
4107
4266
|
const selectedEventIndex = useDevtoolsLayout ? getSelectedEventIndex(state) : null;
|
|
4108
4267
|
const hasSelectedEvent = useDevtoolsLayout && selectedEventIndex !== null;
|
|
4109
|
-
|
|
4268
|
+
const nextState = {
|
|
4110
4269
|
...state,
|
|
4111
4270
|
previewTextCursorColumnIndex: hasSelectedEvent ? state.previewTextCursorColumnIndex : null,
|
|
4112
4271
|
previewTextCursorRowIndex: hasSelectedEvent ? state.previewTextCursorRowIndex : null,
|
|
@@ -4114,6 +4273,10 @@ const handleUseDevtoolsLayout = (state, _value, checked) => {
|
|
|
4114
4273
|
selectedEventId: hasSelectedEvent ? state.selectedEventId : null,
|
|
4115
4274
|
selectedEventIndex,
|
|
4116
4275
|
useDevtoolsLayout
|
|
4276
|
+
};
|
|
4277
|
+
return applyVirtualTableState({
|
|
4278
|
+
...nextState,
|
|
4279
|
+
tableWidth: shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : state.tableWidth
|
|
4117
4280
|
});
|
|
4118
4281
|
};
|
|
4119
4282
|
const handleSelectedEventIndex = (state, value) => {
|
|
@@ -4164,6 +4327,9 @@ const handleDetailTab = (state, value) => {
|
|
|
4164
4327
|
detailTabs
|
|
4165
4328
|
};
|
|
4166
4329
|
};
|
|
4330
|
+
const handleToggleHeadersSection = (state, value) => {
|
|
4331
|
+
return toggleHeadersSection(state, value);
|
|
4332
|
+
};
|
|
4167
4333
|
const inputHandlers = {
|
|
4168
4334
|
[CloseDetails$1]: handleCloseDetails,
|
|
4169
4335
|
[DetailTab]: handleDetailTab,
|
|
@@ -4176,6 +4342,7 @@ const inputHandlers = {
|
|
|
4176
4342
|
[TimelineEndSeconds]: handleTimelineEndSeconds$1,
|
|
4177
4343
|
[TimelineRangePreset]: handleTimelineRangePreset$1,
|
|
4178
4344
|
[TimelineStartSeconds]: handleTimelineStartSeconds$1,
|
|
4345
|
+
[ToggleHeadersSection]: handleToggleHeadersSection,
|
|
4179
4346
|
[UseDevtoolsLayout]: handleUseDevtoolsLayout
|
|
4180
4347
|
};
|
|
4181
4348
|
const handleInput = (state, name, value, checked) => {
|
|
@@ -4278,9 +4445,6 @@ const getPayloadObject = (event, name) => {
|
|
|
4278
4445
|
};
|
|
4279
4446
|
};
|
|
4280
4447
|
const getPayloadEvent = event => {
|
|
4281
|
-
if (event && event.type === 'ai-request') {
|
|
4282
|
-
return event.body;
|
|
4283
|
-
}
|
|
4284
4448
|
const {
|
|
4285
4449
|
requestEvent
|
|
4286
4450
|
} = event;
|
|
@@ -4288,6 +4452,9 @@ const getPayloadEvent = event => {
|
|
|
4288
4452
|
if (mergedRequestPayloadEvent.found) {
|
|
4289
4453
|
return mergedRequestPayloadEvent.value;
|
|
4290
4454
|
}
|
|
4455
|
+
if (event && event.type === 'ai-request') {
|
|
4456
|
+
return event.body;
|
|
4457
|
+
}
|
|
4291
4458
|
const name = getPreviewName(event);
|
|
4292
4459
|
if (name === 'list_files' && hasOwn(event, 'arguments')) {
|
|
4293
4460
|
return event.arguments;
|
|
@@ -4307,57 +4474,75 @@ const isChatMessageUpdatedEvent = event => {
|
|
|
4307
4474
|
return event.type === 'chat-message-updated';
|
|
4308
4475
|
};
|
|
4309
4476
|
|
|
4477
|
+
const getObjectValue = value => {
|
|
4478
|
+
if (!value || typeof value !== 'object') {
|
|
4479
|
+
return undefined;
|
|
4480
|
+
}
|
|
4481
|
+
return value;
|
|
4482
|
+
};
|
|
4310
4483
|
const getResponseContentText = content => {
|
|
4311
|
-
|
|
4484
|
+
const contentObject = getObjectValue(content);
|
|
4485
|
+
if (!contentObject) {
|
|
4312
4486
|
return undefined;
|
|
4313
4487
|
}
|
|
4314
4488
|
if (Array.isArray(content)) {
|
|
4315
4489
|
const [firstContentItem] = content;
|
|
4316
|
-
|
|
4490
|
+
const firstContentItemObject = getObjectValue(firstContentItem);
|
|
4491
|
+
if (!firstContentItemObject) {
|
|
4317
4492
|
return undefined;
|
|
4318
4493
|
}
|
|
4319
4494
|
const {
|
|
4320
4495
|
text
|
|
4321
|
-
} =
|
|
4496
|
+
} = firstContentItemObject;
|
|
4322
4497
|
return typeof text === 'string' ? text : undefined;
|
|
4323
4498
|
}
|
|
4324
4499
|
const {
|
|
4325
4500
|
text
|
|
4326
|
-
} =
|
|
4501
|
+
} = contentObject;
|
|
4327
4502
|
return typeof text === 'string' ? text : undefined;
|
|
4328
4503
|
};
|
|
4329
|
-
const
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
} = event;
|
|
4334
|
-
if (!value || typeof value !== 'object') {
|
|
4335
|
-
return undefined;
|
|
4336
|
-
}
|
|
4337
|
-
const {
|
|
4338
|
-
response
|
|
4339
|
-
} = value;
|
|
4340
|
-
if (!response || typeof response !== 'object') {
|
|
4341
|
-
return undefined;
|
|
4342
|
-
}
|
|
4343
|
-
const {
|
|
4344
|
-
output
|
|
4345
|
-
} = response;
|
|
4346
|
-
return Array.isArray(output) ? output : undefined;
|
|
4504
|
+
const getOutput = value => {
|
|
4505
|
+
const valueObject = getObjectValue(value);
|
|
4506
|
+
if (!valueObject) {
|
|
4507
|
+
return undefined;
|
|
4347
4508
|
}
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
|
|
4351
|
-
|
|
4352
|
-
|
|
4509
|
+
const {
|
|
4510
|
+
output
|
|
4511
|
+
} = valueObject;
|
|
4512
|
+
return Array.isArray(output) ? output : undefined;
|
|
4513
|
+
};
|
|
4514
|
+
const getAiRequestResponseOutput = event => {
|
|
4515
|
+
const {
|
|
4516
|
+
endValue
|
|
4517
|
+
} = event;
|
|
4518
|
+
const endValueObject = getObjectValue(endValue);
|
|
4519
|
+
if (!endValueObject) {
|
|
4520
|
+
return undefined;
|
|
4521
|
+
}
|
|
4522
|
+
return getOutput(endValueObject.value);
|
|
4523
|
+
};
|
|
4524
|
+
const getCompletedResponseOutput = event => {
|
|
4525
|
+
const valueObject = getObjectValue(event.value);
|
|
4526
|
+
if (!valueObject) {
|
|
4527
|
+
return undefined;
|
|
4528
|
+
}
|
|
4529
|
+
const responseObject = getObjectValue(valueObject.response);
|
|
4530
|
+
if (!responseObject) {
|
|
4531
|
+
return undefined;
|
|
4532
|
+
}
|
|
4533
|
+
return getOutput(responseObject);
|
|
4534
|
+
};
|
|
4535
|
+
const getResponseOutput = event => {
|
|
4536
|
+
switch (event.type) {
|
|
4537
|
+
case 'ai-request':
|
|
4538
|
+
return getAiRequestResponseOutput(event);
|
|
4539
|
+
case 'ai-response':
|
|
4540
|
+
return getOutput(event.value);
|
|
4541
|
+
case 'sse-response-completed':
|
|
4542
|
+
return getCompletedResponseOutput(event);
|
|
4543
|
+
default:
|
|
4353
4544
|
return undefined;
|
|
4354
|
-
}
|
|
4355
|
-
const {
|
|
4356
|
-
output
|
|
4357
|
-
} = value;
|
|
4358
|
-
return Array.isArray(output) ? output : undefined;
|
|
4359
4545
|
}
|
|
4360
|
-
return undefined;
|
|
4361
4546
|
};
|
|
4362
4547
|
const getResponsePreviewText = event => {
|
|
4363
4548
|
const output = getResponseOutput(event);
|
|
@@ -4365,12 +4550,13 @@ const getResponsePreviewText = event => {
|
|
|
4365
4550
|
return undefined;
|
|
4366
4551
|
}
|
|
4367
4552
|
const [firstOutput] = output;
|
|
4368
|
-
|
|
4553
|
+
const firstOutputObject = getObjectValue(firstOutput);
|
|
4554
|
+
if (!firstOutputObject) {
|
|
4369
4555
|
return undefined;
|
|
4370
4556
|
}
|
|
4371
4557
|
const {
|
|
4372
4558
|
content
|
|
4373
|
-
} =
|
|
4559
|
+
} = firstOutputObject;
|
|
4374
4560
|
return getResponseContentText(content);
|
|
4375
4561
|
};
|
|
4376
4562
|
const getPreviewMessageText = event => {
|
|
@@ -4514,9 +4700,6 @@ const getPreviewEvent = event => {
|
|
|
4514
4700
|
|
|
4515
4701
|
const previewTextRowHeight = 20;
|
|
4516
4702
|
const defaultPreviewTextColumnWidth = 9;
|
|
4517
|
-
const clamp = (value, min, max) => {
|
|
4518
|
-
return Math.min(Math.max(value, min), max);
|
|
4519
|
-
};
|
|
4520
4703
|
const getPreviewTextCursorFromPoint = (value, x, y) => {
|
|
4521
4704
|
const lines = value.split('\n');
|
|
4522
4705
|
const rowIndex = clamp(Math.floor(Math.max(y, 0) / previewTextRowHeight), 0, Math.max(lines.length - 1, 0));
|
|
@@ -4737,7 +4920,8 @@ const handleSashPointerMove = (state, eventX, eventY) => {
|
|
|
4737
4920
|
}
|
|
4738
4921
|
return {
|
|
4739
4922
|
...state,
|
|
4740
|
-
tableWidth: getTableWidthFromClientX(state, eventX)
|
|
4923
|
+
tableWidth: getTableWidthFromClientX(state, eventX),
|
|
4924
|
+
tableWidthManuallyResized: true
|
|
4741
4925
|
};
|
|
4742
4926
|
};
|
|
4743
4927
|
|
|
@@ -4804,7 +4988,7 @@ const handleTableResizerPointerMove = (state, clientX) => {
|
|
|
4804
4988
|
}
|
|
4805
4989
|
return {
|
|
4806
4990
|
...state,
|
|
4807
|
-
|
|
4991
|
+
tableColumns: getResizedTableColumnWidths(state, getVisibleTableColumns(state.tableColumns), state.tableColumns, clientX, state.tableResizerDownId)
|
|
4808
4992
|
};
|
|
4809
4993
|
};
|
|
4810
4994
|
|
|
@@ -5143,17 +5327,22 @@ const handleTimelinePointerUp = (state, eventX) => {
|
|
|
5143
5327
|
const setUseDevtoolsLayout = (state, checked) => {
|
|
5144
5328
|
const useDevtoolsLayout = getBoolean(checked);
|
|
5145
5329
|
const selectedEventIndex = useDevtoolsLayout ? getSelectedEventIndex$1(state) : null;
|
|
5146
|
-
|
|
5330
|
+
const hasSelectedEvent = useDevtoolsLayout && selectedEventIndex !== null;
|
|
5331
|
+
const nextState = {
|
|
5147
5332
|
...state,
|
|
5148
|
-
previewTextCursorColumnIndex:
|
|
5149
|
-
previewTextCursorRowIndex:
|
|
5150
|
-
previewTextDeltaY:
|
|
5333
|
+
previewTextCursorColumnIndex: hasSelectedEvent ? state.previewTextCursorColumnIndex : null,
|
|
5334
|
+
previewTextCursorRowIndex: hasSelectedEvent ? state.previewTextCursorRowIndex : null,
|
|
5335
|
+
previewTextDeltaY: hasSelectedEvent ? state.previewTextDeltaY : 0,
|
|
5151
5336
|
previewTextScrollBarHandleOffset: 0,
|
|
5152
5337
|
previewTextScrollBarPointerActive: false,
|
|
5153
|
-
selectedEvent:
|
|
5154
|
-
selectedEventId:
|
|
5338
|
+
selectedEvent: hasSelectedEvent ? state.selectedEvent : null,
|
|
5339
|
+
selectedEventId: hasSelectedEvent ? state.selectedEventId : null,
|
|
5155
5340
|
selectedEventIndex,
|
|
5156
5341
|
useDevtoolsLayout
|
|
5342
|
+
};
|
|
5343
|
+
return applyVirtualTableState({
|
|
5344
|
+
...nextState,
|
|
5345
|
+
tableWidth: shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : state.tableWidth
|
|
5157
5346
|
});
|
|
5158
5347
|
};
|
|
5159
5348
|
|
|
@@ -5194,7 +5383,8 @@ const loadEventsFromUri = async state => {
|
|
|
5194
5383
|
|
|
5195
5384
|
const loadContent = async (state, savedState) => {
|
|
5196
5385
|
await getPreference('chatDebug.autoRefresh');
|
|
5197
|
-
const
|
|
5386
|
+
const restoredState = restoreSavedState(state, savedState);
|
|
5387
|
+
const nextState = await loadEventsFromUri(restoredState);
|
|
5198
5388
|
if (nextState.sessionId) {
|
|
5199
5389
|
try {
|
|
5200
5390
|
await registerUpdateListener(nextState.sessionId, rpcId, nextState.uid);
|
|
@@ -5299,7 +5489,7 @@ const getCss = state => {
|
|
|
5299
5489
|
if (state.width >= state.largeBreakpoint) {
|
|
5300
5490
|
topSize = 30;
|
|
5301
5491
|
}
|
|
5302
|
-
const tableColumnLayout = getTableColumnLayout(tableContentWidth, getVisibleTableColumns(state.tableColumns), state.
|
|
5492
|
+
const tableColumnLayout = getTableColumnLayout(tableContentWidth, getVisibleTableColumns(state.tableColumns), state.tableColumns);
|
|
5303
5493
|
const [tableColZeroWidth = 0, tableColOneWidth = 0, tableColTwoWidth = 0, tableColThreeWidth = 0, tableColFourWidth = 0] = tableColumnLayout.visibleColumnWidths;
|
|
5304
5494
|
const resizerOneLeft = tableColumnLayout.resizerLefts[0] ?? 0;
|
|
5305
5495
|
const resizerTwoLeft = tableColumnLayout.resizerLefts[1] ?? 0;
|
|
@@ -5324,7 +5514,7 @@ const getCss = state => {
|
|
|
5324
5514
|
--ChatDebugViewPreviewScrollBarWidth: ${previewVirtualization.showScrollBar ? devtoolsTableScrollBarWidth : 0}px;
|
|
5325
5515
|
--ChatDebugViewPreviewViewportHeight: ${previewVirtualization.viewportHeight}px;
|
|
5326
5516
|
--ChatDebugViewDetailsWidth: ${detailsWidth}px;
|
|
5327
|
-
--ChatDebugViewDurationColumnWidth: ${state.
|
|
5517
|
+
--ChatDebugViewDurationColumnWidth: ${getTableColumnWidth(state.tableColumns, Duration)}px;
|
|
5328
5518
|
--ChatDebugViewTableRowHeight: ${devtoolsTableRowHeight}px;
|
|
5329
5519
|
--ChatDebugViewTableScrollBarHeight: ${scrollBarHeight}px;
|
|
5330
5520
|
--ChatDebugViewTableScrollBarOffset: ${scrollBarOffset}px;
|
|
@@ -5340,7 +5530,7 @@ const getCss = state => {
|
|
|
5340
5530
|
--ChatDebugViewTimelineSelectionEndLeft: ${selectionEndPercent ?? 0}%;
|
|
5341
5531
|
--ChatDebugViewTimelineSelectionStartLeft: ${selectionStartPercent ?? 0}%;
|
|
5342
5532
|
--ChatDebugViewTopSize: ${topSize}px;
|
|
5343
|
-
--ChatDebugViewTypeColumnWidth: ${state.
|
|
5533
|
+
--ChatDebugViewTypeColumnWidth: ${getTableColumnWidth(state.tableColumns, Type)}px;
|
|
5344
5534
|
padding: ${state.viewPadding}px;
|
|
5345
5535
|
padding-right: 0;
|
|
5346
5536
|
}
|
|
@@ -5460,14 +5650,26 @@ const getCss = state => {
|
|
|
5460
5650
|
}
|
|
5461
5651
|
|
|
5462
5652
|
.ChatDebugViewHeadersSectionHeading {
|
|
5653
|
+
align-items: center;
|
|
5654
|
+
background: transparent;
|
|
5655
|
+
border: 0;
|
|
5463
5656
|
color: var(--vscode-descriptionForeground, rgba(255, 255, 255, 0.7));
|
|
5657
|
+
cursor: pointer;
|
|
5658
|
+
display: flex;
|
|
5464
5659
|
font-size: 11px;
|
|
5465
5660
|
font-weight: 600;
|
|
5661
|
+
justify-content: flex-start;
|
|
5466
5662
|
letter-spacing: 0.08em;
|
|
5467
5663
|
margin-bottom: 6px;
|
|
5664
|
+
padding: 0;
|
|
5665
|
+
text-align: left;
|
|
5468
5666
|
text-transform: uppercase;
|
|
5469
5667
|
}
|
|
5470
5668
|
|
|
5669
|
+
.ChatDebugViewHeadersSectionHeading:hover {
|
|
5670
|
+
color: var(--vscode-editor-foreground);
|
|
5671
|
+
}
|
|
5672
|
+
|
|
5471
5673
|
.ChatDebugViewHeadersRow {
|
|
5472
5674
|
display: grid;
|
|
5473
5675
|
grid-template-columns: minmax(0, 38%) minmax(0, 1fr);
|
|
@@ -5493,6 +5695,14 @@ const getCss = state => {
|
|
|
5493
5695
|
.ChatDebugViewHeadersCellName {
|
|
5494
5696
|
font-weight: 500;
|
|
5495
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
|
+
|
|
5496
5706
|
.PreviewVirtualizedEditor {
|
|
5497
5707
|
height: var(--ChatDebugViewPreviewViewportHeight);
|
|
5498
5708
|
overflow: hidden;
|
|
@@ -5900,6 +6110,7 @@ const ChatDebugViewHeadersRowEven = 'ChatDebugViewHeadersRowEven';
|
|
|
5900
6110
|
const ChatDebugViewHeadersRowOdd = 'ChatDebugViewHeadersRowOdd';
|
|
5901
6111
|
const ChatDebugViewHeadersSection = 'ChatDebugViewHeadersSection';
|
|
5902
6112
|
const ChatDebugViewHeadersSectionHeading = 'ChatDebugViewHeadersSectionHeading';
|
|
6113
|
+
const ChatDebugViewHeadersSectionInfo = 'ChatDebugViewHeadersSectionInfo';
|
|
5903
6114
|
const ChatDebugViewHeadersTable = 'ChatDebugViewHeadersTable';
|
|
5904
6115
|
const ChatDebugViewDevtoolsSplit = 'ChatDebugViewDevtoolsSplit';
|
|
5905
6116
|
const ChatDebugViewEmpty = 'ChatDebugViewEmpty';
|
|
@@ -6336,9 +6547,7 @@ const formatHttpStatusCode = value => {
|
|
|
6336
6547
|
const isHeadersRecord = value => {
|
|
6337
6548
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
6338
6549
|
};
|
|
6339
|
-
|
|
6340
|
-
return typeof value === 'string' && value.length > 0;
|
|
6341
|
-
};
|
|
6550
|
+
|
|
6342
6551
|
const getStatusCodeValue = selectedEvent => {
|
|
6343
6552
|
if (!selectedEvent) {
|
|
6344
6553
|
return undefined;
|
|
@@ -6355,6 +6564,36 @@ const getStatusCodeValue = selectedEvent => {
|
|
|
6355
6564
|
}
|
|
6356
6565
|
return undefined;
|
|
6357
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
|
+
|
|
6358
6597
|
const stringifyHeaderValue = value => {
|
|
6359
6598
|
try {
|
|
6360
6599
|
return JSON.stringify(value, (_key, nestedValue) => {
|
|
@@ -6367,6 +6606,7 @@ const stringifyHeaderValue = value => {
|
|
|
6367
6606
|
return '[unserializable]';
|
|
6368
6607
|
}
|
|
6369
6608
|
};
|
|
6609
|
+
|
|
6370
6610
|
const getHeaderValueText = value => {
|
|
6371
6611
|
if (typeof value === 'string') {
|
|
6372
6612
|
return value;
|
|
@@ -6388,29 +6628,7 @@ const getHeaderValueText = value => {
|
|
|
6388
6628
|
}
|
|
6389
6629
|
return stringifyHeaderValue(value);
|
|
6390
6630
|
};
|
|
6391
|
-
|
|
6392
|
-
if (!isHeadersRecord(value)) {
|
|
6393
|
-
return [];
|
|
6394
|
-
}
|
|
6395
|
-
return Object.entries(value);
|
|
6396
|
-
};
|
|
6397
|
-
const getGeneralEntries = selectedEvent => {
|
|
6398
|
-
if (!selectedEvent) {
|
|
6399
|
-
return [];
|
|
6400
|
-
}
|
|
6401
|
-
const entries = [];
|
|
6402
|
-
if (isNonEmptyString(selectedEvent.url)) {
|
|
6403
|
-
entries.push([requestUrl(), selectedEvent.url]);
|
|
6404
|
-
}
|
|
6405
|
-
if (isNonEmptyString(selectedEvent.method)) {
|
|
6406
|
-
entries.push([requestMethod(), selectedEvent.method]);
|
|
6407
|
-
}
|
|
6408
|
-
const statusCode$1 = getStatusCodeValue(selectedEvent);
|
|
6409
|
-
if (statusCode$1 !== undefined && statusCode$1 !== '') {
|
|
6410
|
-
entries.push([statusCode(), formatHttpStatusCode(statusCode$1)]);
|
|
6411
|
-
}
|
|
6412
|
-
return entries;
|
|
6413
|
-
};
|
|
6631
|
+
|
|
6414
6632
|
const getHeaderRowNodes = (headerName, headerValue, index) => {
|
|
6415
6633
|
return [{
|
|
6416
6634
|
childCount: 2,
|
|
@@ -6426,6 +6644,7 @@ const getHeaderRowNodes = (headerName, headerValue, index) => {
|
|
|
6426
6644
|
type: Div
|
|
6427
6645
|
}, text(getHeaderValueText(headerValue))];
|
|
6428
6646
|
};
|
|
6647
|
+
|
|
6429
6648
|
const getHeadersTableNodes = headers => {
|
|
6430
6649
|
const headerRows = [];
|
|
6431
6650
|
for (const [index, [headerName, headerValue]] of headers.entries()) {
|
|
@@ -6437,18 +6656,32 @@ const getHeadersTableNodes = headers => {
|
|
|
6437
6656
|
type: Ul
|
|
6438
6657
|
}, ...headerRows];
|
|
6439
6658
|
};
|
|
6440
|
-
|
|
6659
|
+
|
|
6660
|
+
const getHeaderSectionNodes = (section, label, headers, collapsedHeaderSections, infoMessage = '') => {
|
|
6661
|
+
const isCollapsed = collapsedHeaderSections.includes(section);
|
|
6662
|
+
const hasInfoMessage = !isCollapsed && infoMessage !== '';
|
|
6663
|
+
const childCount = isCollapsed ? 1 : 2 + Number(hasInfoMessage);
|
|
6441
6664
|
return [{
|
|
6442
|
-
childCount
|
|
6665
|
+
childCount,
|
|
6443
6666
|
className: ChatDebugViewHeadersSection,
|
|
6444
6667
|
type: Div
|
|
6445
6668
|
}, {
|
|
6669
|
+
ariaExpanded: !isCollapsed,
|
|
6446
6670
|
childCount: 1,
|
|
6447
6671
|
className: ChatDebugViewHeadersSectionHeading,
|
|
6672
|
+
name: ToggleHeadersSection,
|
|
6673
|
+
onChange: HandleFilterInput,
|
|
6674
|
+
onClick: HandleFilterInput,
|
|
6675
|
+
type: Button$1,
|
|
6676
|
+
value: section
|
|
6677
|
+
}, text(label), ...(isCollapsed ? [] : getHeadersTableNodes(headers)), ...(hasInfoMessage ? [{
|
|
6678
|
+
childCount: 1,
|
|
6679
|
+
className: ChatDebugViewHeadersSectionInfo,
|
|
6448
6680
|
type: Div
|
|
6449
|
-
}, text(
|
|
6681
|
+
}, text(infoMessage)] : [])];
|
|
6450
6682
|
};
|
|
6451
|
-
|
|
6683
|
+
|
|
6684
|
+
const getHeadersContentNodes = (responseEventNodes, selectedEvent, collapsedHeaderSections = []) => {
|
|
6452
6685
|
const generalEntries = getGeneralEntries(selectedEvent);
|
|
6453
6686
|
const requestHeaders$1 = getHeaders(selectedEvent?.headers);
|
|
6454
6687
|
const responseHeaders$1 = getHeaders(isHeadersRecord(selectedEvent?.endValue) ? selectedEvent.endValue.headers : undefined);
|
|
@@ -6457,13 +6690,13 @@ const getHeadersContentNodes = (responseEventNodes, selectedEvent) => {
|
|
|
6457
6690
|
}
|
|
6458
6691
|
const nodes = [];
|
|
6459
6692
|
if (generalEntries.length > 0) {
|
|
6460
|
-
nodes.push(...getHeaderSectionNodes(general(), generalEntries));
|
|
6461
|
-
}
|
|
6462
|
-
if (requestHeaders$1.length > 0) {
|
|
6463
|
-
nodes.push(...getHeaderSectionNodes(requestHeaders(), requestHeaders$1));
|
|
6693
|
+
nodes.push(...getHeaderSectionNodes(General, general(), generalEntries, collapsedHeaderSections));
|
|
6464
6694
|
}
|
|
6465
6695
|
if (responseHeaders$1.length > 0) {
|
|
6466
|
-
nodes.push(...getHeaderSectionNodes(responseHeaders(), responseHeaders$1));
|
|
6696
|
+
nodes.push(...getHeaderSectionNodes(ResponseHeaders, responseHeaders(), responseHeaders$1, collapsedHeaderSections, responseHeadersInfo()));
|
|
6697
|
+
}
|
|
6698
|
+
if (requestHeaders$1.length > 0) {
|
|
6699
|
+
nodes.push(...getHeaderSectionNodes(RequestHeaders, requestHeaders(), requestHeaders$1, collapsedHeaderSections));
|
|
6467
6700
|
}
|
|
6468
6701
|
return nodes;
|
|
6469
6702
|
};
|
|
@@ -7557,7 +7790,7 @@ const getTokenUsageContentNodes = (responseEventNodes, selectedEvent) => {
|
|
|
7557
7790
|
return getTokenUsageDetailsDom(selectedEvent);
|
|
7558
7791
|
};
|
|
7559
7792
|
|
|
7560
|
-
const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization) => {
|
|
7793
|
+
const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization, collapsedHeaderSections = []) => {
|
|
7561
7794
|
if (safeSelectedDetailTab === Tokens$1) {
|
|
7562
7795
|
return getTokenUsageContentNodes(responseEventNodes, selectedEvent);
|
|
7563
7796
|
}
|
|
@@ -7571,19 +7804,19 @@ const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, paylo
|
|
|
7571
7804
|
return getPayloadContentNodes(payloadEventNodes, selectedEvent);
|
|
7572
7805
|
}
|
|
7573
7806
|
if (safeSelectedDetailTab === Headers$1) {
|
|
7574
|
-
return getHeadersContentNodes(responseEventNodes, selectedEvent);
|
|
7807
|
+
return getHeadersContentNodes(responseEventNodes, selectedEvent, collapsedHeaderSections);
|
|
7575
7808
|
}
|
|
7576
7809
|
return getResponseContentNodes(responseEventNodes, selectedEvent);
|
|
7577
7810
|
};
|
|
7578
7811
|
|
|
7579
|
-
const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes, responseEventNodes = payloadEventNodes, selectedEvent = null, detailTabs = createDetailTabs(), previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, previewVirtualization) => {
|
|
7812
|
+
const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes, responseEventNodes = payloadEventNodes, selectedEvent = null, detailTabs = createDetailTabs(), previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, previewVirtualization, collapsedHeaderSections = []) => {
|
|
7580
7813
|
if (previewEventNodes.length === 0 && payloadEventNodes.length === 0 && responseEventNodes.length === 0) {
|
|
7581
7814
|
return [];
|
|
7582
7815
|
}
|
|
7583
7816
|
const normalizedDetailTabs = getNormalizedDetailTabs(selectedEvent, detailTabs);
|
|
7584
7817
|
const safeSelectedDetailTab = getSelectedDetailTab(normalizedDetailTabs);
|
|
7585
7818
|
const selectedDetailTab = normalizedDetailTabs.find(detailTab => detailTab.name === safeSelectedDetailTab) ?? normalizedDetailTabs[0];
|
|
7586
|
-
const contentNodes = getSelectedContentNodes(safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization);
|
|
7819
|
+
const contentNodes = getSelectedContentNodes(safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization, collapsedHeaderSections);
|
|
7587
7820
|
return [{
|
|
7588
7821
|
childCount: 2,
|
|
7589
7822
|
className: ChatDebugViewDetails,
|
|
@@ -7764,59 +7997,42 @@ const getSplitViewDom = (splitChildCount, eventsClassName, tableNodes, sashNodes
|
|
|
7764
7997
|
}, ...tableNodes, ...sashNodes, ...detailsNodes];
|
|
7765
7998
|
};
|
|
7766
7999
|
|
|
7767
|
-
const formatTimelineMilliseconds = value => {
|
|
7768
|
-
return `${Math.round(value * 1000)}ms`;
|
|
7769
|
-
};
|
|
7770
|
-
|
|
7771
|
-
const formatTimelineSeconds = value => {
|
|
7772
|
-
if (Number.isInteger(value)) {
|
|
7773
|
-
return `${value}s`;
|
|
7774
|
-
}
|
|
7775
|
-
return `${Number(value.toFixed(1))}s`;
|
|
7776
|
-
};
|
|
7777
|
-
|
|
7778
|
-
const getEndTime = event => {
|
|
7779
|
-
return event.ended ?? event.endTime ?? event.timestamp;
|
|
7780
|
-
};
|
|
7781
|
-
|
|
7782
|
-
const getStartTime = event => {
|
|
7783
|
-
return event.started ?? event.startTime ?? event.timestamp;
|
|
7784
|
-
};
|
|
7785
|
-
|
|
7786
|
-
const formatTableSummaryDuration = durationMs => {
|
|
7787
|
-
if (durationMs < 1000) {
|
|
7788
|
-
return formatTimelineMilliseconds(durationMs / 1000);
|
|
7789
|
-
}
|
|
7790
|
-
return formatTimelineSeconds(durationMs / 1000);
|
|
7791
|
-
};
|
|
7792
|
-
const getTableSummary = events => {
|
|
7793
|
-
let minStart = Number.POSITIVE_INFINITY;
|
|
7794
|
-
let maxEnd = Number.NEGATIVE_INFINITY;
|
|
7795
|
-
for (const event of events) {
|
|
7796
|
-
const startTime = toTimeNumber(getStartTime(event));
|
|
7797
|
-
const endTime = toTimeNumber(getEndTime(event));
|
|
7798
|
-
if (typeof startTime === 'number' && Number.isFinite(startTime)) {
|
|
7799
|
-
minStart = Math.min(minStart, startTime);
|
|
7800
|
-
}
|
|
7801
|
-
if (typeof endTime === 'number' && Number.isFinite(endTime)) {
|
|
7802
|
-
maxEnd = Math.max(maxEnd, endTime);
|
|
7803
|
-
}
|
|
7804
|
-
}
|
|
7805
|
-
const durationMs = Number.isFinite(minStart) && Number.isFinite(maxEnd) ? Math.max(0, maxEnd - minStart) : 0;
|
|
7806
|
-
return tableSummary(events.length, formatTableSummaryDuration(durationMs));
|
|
7807
|
-
};
|
|
7808
|
-
|
|
7809
8000
|
const tableSummaryNode = {
|
|
7810
|
-
childCount:
|
|
8001
|
+
childCount: 0,
|
|
7811
8002
|
className: TableSummary,
|
|
7812
8003
|
role: Status,
|
|
7813
8004
|
type: Div
|
|
7814
8005
|
};
|
|
7815
|
-
const
|
|
7816
|
-
|
|
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) {
|
|
7817
8026
|
return [];
|
|
7818
8027
|
}
|
|
7819
|
-
|
|
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;
|
|
7820
8036
|
};
|
|
7821
8037
|
|
|
7822
8038
|
const getTableBodyDom = (rowNodes, eventCount) => {
|
|
@@ -7875,7 +8091,7 @@ const getTableHeaderDom = (visibleTableColumns = defaultVisibleTableColumns, tab
|
|
|
7875
8091
|
}, ...getHeaderCellNodes(visibleTableColumns, tableColumns)];
|
|
7876
8092
|
};
|
|
7877
8093
|
|
|
7878
|
-
const getTableDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(),
|
|
8094
|
+
const getTableDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summaries = [], focus = 0) => {
|
|
7879
8095
|
return [{
|
|
7880
8096
|
childCount: 3,
|
|
7881
8097
|
className: Table,
|
|
@@ -7932,7 +8148,7 @@ const getTableScrollBarDom = visible => {
|
|
|
7932
8148
|
}];
|
|
7933
8149
|
};
|
|
7934
8150
|
|
|
7935
|
-
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) => {
|
|
7936
8152
|
const tableWrapperClassName = mergeClassNames(TableWrapper, focus === FocusChatDebugTable ? FocusOutline : '', className);
|
|
7937
8153
|
const tableWrapperNode = {
|
|
7938
8154
|
childCount: showScrollBar ? 3 : 2,
|
|
@@ -7943,16 +8159,16 @@ const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultV
|
|
|
7943
8159
|
role
|
|
7944
8160
|
} : {})
|
|
7945
8161
|
};
|
|
7946
|
-
return [tableWrapperNode, ...getTableDom(rowNodes, eventCount, visibleTableColumns, tableColumns,
|
|
8162
|
+
return [tableWrapperNode, ...getTableDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summaries, focus), ...getTableResizersDom(visibleTableColumns), ...getTableScrollBarDom(showScrollBar)];
|
|
7947
8163
|
};
|
|
7948
8164
|
|
|
7949
|
-
const getTableWrapperWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(),
|
|
7950
|
-
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);
|
|
7951
8167
|
return [{
|
|
7952
8168
|
childCount: tableSummaryNodes.length === 0 ? 1 : 2,
|
|
7953
8169
|
className: TableWrapperWrapper,
|
|
7954
8170
|
type: Div
|
|
7955
|
-
}, ...getTableWrapperDom(rowNodes, eventCount, visibleTableColumns, tableColumns,
|
|
8171
|
+
}, ...getTableWrapperDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summaries, focus, className, role, showScrollBar), ...tableSummaryNodes];
|
|
7956
8172
|
};
|
|
7957
8173
|
|
|
7958
8174
|
const getBucketUnitDom = (unitCount, presetValue) => {
|
|
@@ -8125,7 +8341,7 @@ const getTimelineDom = (timelineInfo, hoverPercent = null) => {
|
|
|
8125
8341
|
}, ...selectionNodes];
|
|
8126
8342
|
};
|
|
8127
8343
|
|
|
8128
|
-
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) => {
|
|
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)) => {
|
|
8129
8345
|
const visibleEvents = events.slice(minLineY, maxLineY);
|
|
8130
8346
|
const rows = createDevtoolsRows(visibleEvents, selectedEventIndex, minLineY);
|
|
8131
8347
|
const rowNodes = getDevtoolsRows(rows, visibleTableColumns);
|
|
@@ -8147,10 +8363,9 @@ const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvent
|
|
|
8147
8363
|
const responseEventNodes = selectedEvent ? getEventNode(getResponseEvent(selectedEvent)) : [];
|
|
8148
8364
|
const hasSelectedEvent = !!selectedEvent;
|
|
8149
8365
|
const eventsClassName = getEventsClassName(hasSelectedEvent);
|
|
8150
|
-
const summary = getTableSummary(events);
|
|
8151
8366
|
const showScrollBar = visibleEvents.length < events.length;
|
|
8152
|
-
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableWrapperWrapperDom(rowNodes, visibleEvents.length, visibleTableColumns, tableColumns,
|
|
8153
|
-
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualizationOptions);
|
|
8367
|
+
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableWrapperWrapperDom(rowNodes, visibleEvents.length, visibleTableColumns, tableColumns, summaries, focus, '', '', showScrollBar);
|
|
8368
|
+
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualizationOptions, collapsedHeaderSections);
|
|
8154
8369
|
const sashNodes = getSashNodesDom(hasSelectedEvent);
|
|
8155
8370
|
const splitChildCount = hasSelectedEvent ? 3 : 1;
|
|
8156
8371
|
const rootChildCount = 3;
|
|
@@ -8204,7 +8419,7 @@ const getEventCategoryFilterDescription = eventCategoryFilters => {
|
|
|
8204
8419
|
}
|
|
8205
8420
|
return eventCategoryFilters.map(eventCategoryFilter => getEventCategoryFilterLabel(eventCategoryFilter).toLowerCase()).join(', ');
|
|
8206
8421
|
};
|
|
8207
|
-
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) => {
|
|
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)) => {
|
|
8208
8423
|
if (errorMessage) {
|
|
8209
8424
|
return getDebugErrorDom(errorMessage);
|
|
8210
8425
|
}
|
|
@@ -8228,7 +8443,7 @@ const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, ca
|
|
|
8228
8443
|
const emptyMessage = getEmptyMessage(events.length, hasFilterValue, useNoToolCallEventsMessage, noFilteredEventsMessage);
|
|
8229
8444
|
const safeSelectedEventIndex = selectedEventIndex === null || selectedEventIndex < 0 || selectedEventIndex >= events.length ? null : selectedEventIndex;
|
|
8230
8445
|
if (useDevtoolsLayout) {
|
|
8231
|
-
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);
|
|
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);
|
|
8232
8447
|
const devtoolsContentNodes = devtoolsDom.slice(1);
|
|
8233
8448
|
const topLevelNodes = [...getDebugViewTopDom(filterValue, useDevtoolsLayout, categoryFilters), ...devtoolsContentNodes];
|
|
8234
8449
|
const rootChildCount = getTopLevelChildCount(topLevelNodes);
|
|
@@ -8264,7 +8479,7 @@ const renderItems = (oldState, newState) => {
|
|
|
8264
8479
|
}
|
|
8265
8480
|
const filteredEvents = getCurrentEvents$1(newState);
|
|
8266
8481
|
const previewTextViewportHeight = getPreviewTextViewportHeight(newState);
|
|
8267
|
-
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);
|
|
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);
|
|
8268
8483
|
return [SetDom2, newState.uid, dom];
|
|
8269
8484
|
};
|
|
8270
8485
|
|
|
@@ -8470,15 +8685,20 @@ const rerender = state => {
|
|
|
8470
8685
|
};
|
|
8471
8686
|
|
|
8472
8687
|
const resetTableColumns = state => {
|
|
8473
|
-
|
|
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) {
|
|
8474
8695
|
return state;
|
|
8475
8696
|
}
|
|
8476
8697
|
return {
|
|
8477
8698
|
...state,
|
|
8478
8699
|
sortColumn: '',
|
|
8479
8700
|
sortDescending: false,
|
|
8480
|
-
tableColumns:
|
|
8481
|
-
tableColumnWidths: defaultTableColumnWidths
|
|
8701
|
+
tableColumns: defaultTableColumns
|
|
8482
8702
|
};
|
|
8483
8703
|
};
|
|
8484
8704
|
|
|
@@ -8487,9 +8707,10 @@ const handleResize = (state, dimensions) => {
|
|
|
8487
8707
|
...state,
|
|
8488
8708
|
...dimensions
|
|
8489
8709
|
};
|
|
8710
|
+
const tableWidth = shouldUseBalancedSplitTableWidth(nextState) ? getBalancedSplitTableWidth(nextState) : clampTableWidth(nextState, state.tableWidth);
|
|
8490
8711
|
return applyVirtualTableState({
|
|
8491
8712
|
...nextState,
|
|
8492
|
-
tableWidth
|
|
8713
|
+
tableWidth
|
|
8493
8714
|
});
|
|
8494
8715
|
};
|
|
8495
8716
|
|
|
@@ -8511,7 +8732,6 @@ const saveState = state => {
|
|
|
8511
8732
|
selectedEventId,
|
|
8512
8733
|
sessionId,
|
|
8513
8734
|
tableColumns,
|
|
8514
|
-
tableColumnWidths,
|
|
8515
8735
|
timelineEndSeconds,
|
|
8516
8736
|
timelineStartSeconds
|
|
8517
8737
|
} = state;
|
|
@@ -8522,7 +8742,7 @@ const saveState = state => {
|
|
|
8522
8742
|
selectedDetailTab: getSelectedDetailTab(detailTabs),
|
|
8523
8743
|
selectedEventId,
|
|
8524
8744
|
sessionId,
|
|
8525
|
-
tableColumnWidths,
|
|
8745
|
+
tableColumnWidths: getTableColumnWidths(tableColumns),
|
|
8526
8746
|
timelineEndSeconds,
|
|
8527
8747
|
timelineStartSeconds,
|
|
8528
8748
|
visibleTableColumns: getVisibleTableColumns(tableColumns)
|
|
@@ -8596,12 +8816,15 @@ const setSessionId = async (state, sessionId) => {
|
|
|
8596
8816
|
};
|
|
8597
8817
|
|
|
8598
8818
|
const toggleTableColumnVisibility = (state, column) => {
|
|
8819
|
+
const {
|
|
8820
|
+
tableColumns
|
|
8821
|
+
} = state;
|
|
8599
8822
|
if (!isTableColumn(column)) {
|
|
8600
8823
|
return state;
|
|
8601
8824
|
}
|
|
8602
8825
|
return {
|
|
8603
8826
|
...state,
|
|
8604
|
-
tableColumns:
|
|
8827
|
+
tableColumns: tableColumns.map(tableColumn => {
|
|
8605
8828
|
if (tableColumn.name !== column) {
|
|
8606
8829
|
return tableColumn;
|
|
8607
8830
|
}
|