@lvce-editor/chat-debug-view 7.3.0 → 7.4.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 +425 -88
- package/package.json +1 -1
|
@@ -1139,6 +1139,10 @@ const ClientY = 'event.clientY';
|
|
|
1139
1139
|
const TargetName = 'event.target.name';
|
|
1140
1140
|
const TargetValue = 'event.target.value';
|
|
1141
1141
|
|
|
1142
|
+
const None = 0;
|
|
1143
|
+
const Checked = 2;
|
|
1144
|
+
const Unchecked = 3;
|
|
1145
|
+
|
|
1142
1146
|
const ChatStorageWorker = 6003;
|
|
1143
1147
|
const RendererWorker = 1;
|
|
1144
1148
|
|
|
@@ -1305,6 +1309,186 @@ const appendStoredEventForTest = async (state, event) => {
|
|
|
1305
1309
|
return state;
|
|
1306
1310
|
};
|
|
1307
1311
|
|
|
1312
|
+
const emptyObject = {};
|
|
1313
|
+
const RE_PLACEHOLDER = /\{(PH\d+)\}/g;
|
|
1314
|
+
const i18nString = (key, placeholders = emptyObject) => {
|
|
1315
|
+
if (placeholders === emptyObject) {
|
|
1316
|
+
return key;
|
|
1317
|
+
}
|
|
1318
|
+
const replacer = (match, rest) => {
|
|
1319
|
+
return placeholders[rest];
|
|
1320
|
+
};
|
|
1321
|
+
return key.replaceAll(RE_PLACEHOLDER, replacer);
|
|
1322
|
+
};
|
|
1323
|
+
|
|
1324
|
+
const All$1 = 'All';
|
|
1325
|
+
const CloseDetails$1 = 'Close details';
|
|
1326
|
+
const Copy = 'Copy';
|
|
1327
|
+
const DetailSections = 'Detail sections';
|
|
1328
|
+
const Duration$1 = 'Duration';
|
|
1329
|
+
const Ended = 'Ended';
|
|
1330
|
+
const FailedToLoadChatDebugSession = 'Failed to load chat debug session "{PH1}". Please try again.';
|
|
1331
|
+
const FailedToLoadChatDebugSessionWithError = 'Failed to load chat debug session "{PH1}": {PH2}';
|
|
1332
|
+
const FilterEvents = 'Filter events';
|
|
1333
|
+
const FromSeconds = 'from {PH1}s';
|
|
1334
|
+
const InvalidSessionId = 'Invalid session id';
|
|
1335
|
+
const InvalidUriEncoding = 'Invalid URI encoding';
|
|
1336
|
+
const InvalidUriFormat = 'Invalid URI format';
|
|
1337
|
+
const MissingUri = 'Missing URI';
|
|
1338
|
+
const Network$1 = 'Network';
|
|
1339
|
+
const NoChatSessionFound = 'No chat session found for sessionId "{PH1}".';
|
|
1340
|
+
const NoEventsFound = 'No events have been found';
|
|
1341
|
+
const NoEventsFoundMatching = 'No events found matching {PH1}';
|
|
1342
|
+
const NoToolCallEvents = 'No tool call events.';
|
|
1343
|
+
const Preview$1 = 'Preview';
|
|
1344
|
+
const Refresh$1 = 'Refresh';
|
|
1345
|
+
const RefreshEvents = 'Refresh events';
|
|
1346
|
+
const ResetColumns = 'Reset columns';
|
|
1347
|
+
const Response$1 = 'Response';
|
|
1348
|
+
const SecondsRange = '{PH1}s-{PH2}s';
|
|
1349
|
+
const Started = 'Started';
|
|
1350
|
+
const Status$1 = 'Status';
|
|
1351
|
+
const Stream$1 = 'Stream';
|
|
1352
|
+
const Timing$1 = 'Timing';
|
|
1353
|
+
const ToSeconds = 'to {PH1}s';
|
|
1354
|
+
const Tools$1 = 'Tools';
|
|
1355
|
+
const Type$1 = 'Type';
|
|
1356
|
+
const Ui$1 = 'UI';
|
|
1357
|
+
const UnableToLoadDebugSessionInvalidUri = 'Unable to load debug session: invalid URI "{PH1}". Expected format: chat-debug://<sessionId>.';
|
|
1358
|
+
const UnableToLoadDebugSessionMissingUri = 'Unable to load debug session: missing URI. Expected format: chat-debug://<sessionId>.';
|
|
1359
|
+
const WindowSummary = 'Window {PH1}-{PH2} of {PH3}';
|
|
1360
|
+
|
|
1361
|
+
const copy = () => {
|
|
1362
|
+
return i18nString(Copy);
|
|
1363
|
+
};
|
|
1364
|
+
const status = () => {
|
|
1365
|
+
return i18nString(Status$1);
|
|
1366
|
+
};
|
|
1367
|
+
const all = () => {
|
|
1368
|
+
return i18nString(All$1);
|
|
1369
|
+
};
|
|
1370
|
+
const closeDetails = () => {
|
|
1371
|
+
return i18nString(CloseDetails$1);
|
|
1372
|
+
};
|
|
1373
|
+
const detailSections = () => {
|
|
1374
|
+
return i18nString(DetailSections);
|
|
1375
|
+
};
|
|
1376
|
+
const duration = () => {
|
|
1377
|
+
return i18nString(Duration$1);
|
|
1378
|
+
};
|
|
1379
|
+
const ended = () => {
|
|
1380
|
+
return i18nString(Ended);
|
|
1381
|
+
};
|
|
1382
|
+
const failedToLoadChatDebugSession = sessionId => {
|
|
1383
|
+
return i18nString(FailedToLoadChatDebugSession, {
|
|
1384
|
+
PH1: sessionId
|
|
1385
|
+
});
|
|
1386
|
+
};
|
|
1387
|
+
const failedToLoadChatDebugSessionWithError = (sessionId, errorMessage) => {
|
|
1388
|
+
return i18nString(FailedToLoadChatDebugSessionWithError, {
|
|
1389
|
+
PH1: sessionId,
|
|
1390
|
+
PH2: errorMessage
|
|
1391
|
+
});
|
|
1392
|
+
};
|
|
1393
|
+
const filterEvents = () => {
|
|
1394
|
+
return i18nString(FilterEvents);
|
|
1395
|
+
};
|
|
1396
|
+
const fromSeconds = seconds => {
|
|
1397
|
+
return i18nString(FromSeconds, {
|
|
1398
|
+
PH1: seconds
|
|
1399
|
+
});
|
|
1400
|
+
};
|
|
1401
|
+
const invalidSessionId = () => {
|
|
1402
|
+
return i18nString(InvalidSessionId);
|
|
1403
|
+
};
|
|
1404
|
+
const invalidUriEncoding = () => {
|
|
1405
|
+
return i18nString(InvalidUriEncoding);
|
|
1406
|
+
};
|
|
1407
|
+
const invalidUriFormat = () => {
|
|
1408
|
+
return i18nString(InvalidUriFormat);
|
|
1409
|
+
};
|
|
1410
|
+
const missingUri = () => {
|
|
1411
|
+
return i18nString(MissingUri);
|
|
1412
|
+
};
|
|
1413
|
+
const network = () => {
|
|
1414
|
+
return i18nString(Network$1);
|
|
1415
|
+
};
|
|
1416
|
+
const noChatSessionFound = sessionId => {
|
|
1417
|
+
return i18nString(NoChatSessionFound, {
|
|
1418
|
+
PH1: sessionId
|
|
1419
|
+
});
|
|
1420
|
+
};
|
|
1421
|
+
const noEventsFound = () => {
|
|
1422
|
+
return i18nString(NoEventsFound);
|
|
1423
|
+
};
|
|
1424
|
+
const noEventsFoundMatching = filterDescription => {
|
|
1425
|
+
return i18nString(NoEventsFoundMatching, {
|
|
1426
|
+
PH1: filterDescription
|
|
1427
|
+
});
|
|
1428
|
+
};
|
|
1429
|
+
const noToolCallEvents = () => {
|
|
1430
|
+
return i18nString(NoToolCallEvents);
|
|
1431
|
+
};
|
|
1432
|
+
const preview = () => {
|
|
1433
|
+
return i18nString(Preview$1);
|
|
1434
|
+
};
|
|
1435
|
+
const refresh$1 = () => {
|
|
1436
|
+
return i18nString(Refresh$1);
|
|
1437
|
+
};
|
|
1438
|
+
const refreshEvents$1 = () => {
|
|
1439
|
+
return i18nString(RefreshEvents);
|
|
1440
|
+
};
|
|
1441
|
+
const resetColumns = () => {
|
|
1442
|
+
return i18nString(ResetColumns);
|
|
1443
|
+
};
|
|
1444
|
+
const response = () => {
|
|
1445
|
+
return i18nString(Response$1);
|
|
1446
|
+
};
|
|
1447
|
+
const secondsRange = (start, end) => {
|
|
1448
|
+
return i18nString(SecondsRange, {
|
|
1449
|
+
PH1: start,
|
|
1450
|
+
PH2: end
|
|
1451
|
+
});
|
|
1452
|
+
};
|
|
1453
|
+
const started = () => {
|
|
1454
|
+
return i18nString(Started);
|
|
1455
|
+
};
|
|
1456
|
+
const stream = () => {
|
|
1457
|
+
return i18nString(Stream$1);
|
|
1458
|
+
};
|
|
1459
|
+
const timing = () => {
|
|
1460
|
+
return i18nString(Timing$1);
|
|
1461
|
+
};
|
|
1462
|
+
const toSeconds = seconds => {
|
|
1463
|
+
return i18nString(ToSeconds, {
|
|
1464
|
+
PH1: seconds
|
|
1465
|
+
});
|
|
1466
|
+
};
|
|
1467
|
+
const tools = () => {
|
|
1468
|
+
return i18nString(Tools$1);
|
|
1469
|
+
};
|
|
1470
|
+
const type = () => {
|
|
1471
|
+
return i18nString(Type$1);
|
|
1472
|
+
};
|
|
1473
|
+
const ui = () => {
|
|
1474
|
+
return i18nString(Ui$1);
|
|
1475
|
+
};
|
|
1476
|
+
const unableToLoadDebugSessionInvalidUri = uri => {
|
|
1477
|
+
return i18nString(UnableToLoadDebugSessionInvalidUri, {
|
|
1478
|
+
PH1: uri
|
|
1479
|
+
});
|
|
1480
|
+
};
|
|
1481
|
+
const unableToLoadDebugSessionMissingUri = () => {
|
|
1482
|
+
return i18nString(UnableToLoadDebugSessionMissingUri);
|
|
1483
|
+
};
|
|
1484
|
+
const windowSummary = (start, end, duration) => {
|
|
1485
|
+
return i18nString(WindowSummary, {
|
|
1486
|
+
PH1: start,
|
|
1487
|
+
PH2: end,
|
|
1488
|
+
PH3: duration
|
|
1489
|
+
});
|
|
1490
|
+
};
|
|
1491
|
+
|
|
1308
1492
|
const Response = 'response';
|
|
1309
1493
|
const Preview = 'preview';
|
|
1310
1494
|
const Timing = 'timing';
|
|
@@ -1314,29 +1498,29 @@ const isDetailTab = value => {
|
|
|
1314
1498
|
};
|
|
1315
1499
|
const getDetailTabLabel = value => {
|
|
1316
1500
|
if (value === Preview) {
|
|
1317
|
-
return
|
|
1501
|
+
return preview();
|
|
1318
1502
|
}
|
|
1319
1503
|
if (value === Timing) {
|
|
1320
|
-
return
|
|
1504
|
+
return timing();
|
|
1321
1505
|
}
|
|
1322
|
-
return
|
|
1506
|
+
return response();
|
|
1323
1507
|
};
|
|
1324
1508
|
|
|
1325
1509
|
const createEventCategoryFilterOptions = () => {
|
|
1326
1510
|
return [{
|
|
1327
|
-
label:
|
|
1511
|
+
label: all(),
|
|
1328
1512
|
value: All
|
|
1329
1513
|
}, {
|
|
1330
|
-
label:
|
|
1514
|
+
label: tools(),
|
|
1331
1515
|
value: Tools
|
|
1332
1516
|
}, {
|
|
1333
|
-
label:
|
|
1517
|
+
label: network(),
|
|
1334
1518
|
value: Network
|
|
1335
1519
|
}, {
|
|
1336
|
-
label:
|
|
1520
|
+
label: ui(),
|
|
1337
1521
|
value: Ui
|
|
1338
1522
|
}, {
|
|
1339
|
-
label:
|
|
1523
|
+
label: stream(),
|
|
1340
1524
|
value: Stream
|
|
1341
1525
|
}];
|
|
1342
1526
|
};
|
|
@@ -1344,15 +1528,15 @@ const createEventCategoryFilterOptions = () => {
|
|
|
1344
1528
|
const getEventCategoryFilterLabel = eventCategoryFilter => {
|
|
1345
1529
|
switch (eventCategoryFilter) {
|
|
1346
1530
|
case Network:
|
|
1347
|
-
return
|
|
1531
|
+
return network();
|
|
1348
1532
|
case Stream:
|
|
1349
|
-
return
|
|
1533
|
+
return stream();
|
|
1350
1534
|
case Tools:
|
|
1351
|
-
return
|
|
1535
|
+
return tools();
|
|
1352
1536
|
case Ui:
|
|
1353
|
-
return
|
|
1537
|
+
return ui();
|
|
1354
1538
|
default:
|
|
1355
|
-
return
|
|
1539
|
+
return all();
|
|
1356
1540
|
}
|
|
1357
1541
|
};
|
|
1358
1542
|
|
|
@@ -1381,6 +1565,22 @@ const parseFilterValue = filterValue => {
|
|
|
1381
1565
|
};
|
|
1382
1566
|
};
|
|
1383
1567
|
|
|
1568
|
+
const Type = 'type';
|
|
1569
|
+
const Duration = 'duration';
|
|
1570
|
+
const Status = 'status';
|
|
1571
|
+
const tableColumns = [Type, Duration, Status];
|
|
1572
|
+
const defaultVisibleTableColumns = tableColumns;
|
|
1573
|
+
const isTableColumn = value => {
|
|
1574
|
+
return tableColumns.includes(value);
|
|
1575
|
+
};
|
|
1576
|
+
const getOrderedVisibleTableColumns = values => {
|
|
1577
|
+
const visibleColumns = new Set(values.filter(isTableColumn));
|
|
1578
|
+
return tableColumns.filter(column => visibleColumns.has(column));
|
|
1579
|
+
};
|
|
1580
|
+
const isVisibleTableColumn = (visibleTableColumns, column) => {
|
|
1581
|
+
return visibleTableColumns.includes(column);
|
|
1582
|
+
};
|
|
1583
|
+
|
|
1384
1584
|
const validEventCategoryFilters = new Set([All, Network, Stream, Tools, Ui]);
|
|
1385
1585
|
const isSavedState = value => {
|
|
1386
1586
|
return typeof value === 'object' && value !== null;
|
|
@@ -1398,6 +1598,7 @@ const restoreSavedState = (state, savedState) => {
|
|
|
1398
1598
|
if (!isSavedState(savedState)) {
|
|
1399
1599
|
return state;
|
|
1400
1600
|
}
|
|
1601
|
+
const restoredVisibleTableColumns = Array.isArray(savedState.visibleTableColumns) ? getOrderedVisibleTableColumns(savedState.visibleTableColumns.filter(value => typeof value === 'string')) : state.visibleTableColumns;
|
|
1401
1602
|
return {
|
|
1402
1603
|
...state,
|
|
1403
1604
|
eventCategoryFilter: getRestoredEventCategoryFilter(savedState, state.eventCategoryFilter),
|
|
@@ -1405,7 +1606,8 @@ const restoreSavedState = (state, savedState) => {
|
|
|
1405
1606
|
selectedDetailTab: typeof savedState.selectedDetailTab === 'string' && isDetailTab(savedState.selectedDetailTab) ? savedState.selectedDetailTab : state.selectedDetailTab,
|
|
1406
1607
|
selectedEventId: typeof savedState.selectedEventId === 'number' || savedState.selectedEventId === null ? savedState.selectedEventId : state.selectedEventId,
|
|
1407
1608
|
timelineEndSeconds: typeof savedState.timelineEndSeconds === 'string' ? savedState.timelineEndSeconds : state.timelineEndSeconds,
|
|
1408
|
-
timelineStartSeconds: typeof savedState.timelineStartSeconds === 'string' ? savedState.timelineStartSeconds : state.timelineStartSeconds
|
|
1609
|
+
timelineStartSeconds: typeof savedState.timelineStartSeconds === 'string' ? savedState.timelineStartSeconds : state.timelineStartSeconds,
|
|
1610
|
+
visibleTableColumns: restoredVisibleTableColumns
|
|
1409
1611
|
};
|
|
1410
1612
|
};
|
|
1411
1613
|
|
|
@@ -1477,6 +1679,7 @@ const createDefaultState = () => {
|
|
|
1477
1679
|
uid: 0,
|
|
1478
1680
|
uri: '',
|
|
1479
1681
|
useDevtoolsLayout: true,
|
|
1682
|
+
visibleTableColumns: defaultVisibleTableColumns,
|
|
1480
1683
|
width: 0,
|
|
1481
1684
|
x: 0,
|
|
1482
1685
|
y: 0
|
|
@@ -1510,7 +1713,7 @@ const RenderCss = 2;
|
|
|
1510
1713
|
const RenderIncremental = 3;
|
|
1511
1714
|
|
|
1512
1715
|
const diff = (oldState, newState) => {
|
|
1513
|
-
if (oldState.errorMessage !== newState.errorMessage || oldState.eventCategoryFilter !== newState.eventCategoryFilter || oldState.events !== newState.events || oldState.filterValue !== newState.filterValue || oldState.sessionId !== newState.sessionId || oldState.showEventStreamFinishedEvents !== newState.showEventStreamFinishedEvents || oldState.showInputEvents !== newState.showInputEvents || oldState.showResponsePartEvents !== newState.showResponsePartEvents || oldState.tableWidth !== newState.tableWidth || oldState.timelineEndSeconds !== newState.timelineEndSeconds || oldState.timelineSelectionActive !== newState.timelineSelectionActive || oldState.timelineSelectionAnchorSeconds !== newState.timelineSelectionAnchorSeconds || oldState.timelineSelectionFocusSeconds !== newState.timelineSelectionFocusSeconds || oldState.timelineStartSeconds !== newState.timelineStartSeconds || oldState.useDevtoolsLayout !== newState.useDevtoolsLayout || oldState.selectedDetailTab !== newState.selectedDetailTab || oldState.selectedEvent !== newState.selectedEvent || oldState.selectedEventIndex !== newState.selectedEventIndex || oldState.width !== newState.width || oldState.uid !== newState.uid) {
|
|
1716
|
+
if (oldState.errorMessage !== newState.errorMessage || oldState.eventCategoryFilter !== newState.eventCategoryFilter || oldState.events !== newState.events || oldState.filterValue !== newState.filterValue || oldState.sessionId !== newState.sessionId || oldState.showEventStreamFinishedEvents !== newState.showEventStreamFinishedEvents || oldState.showInputEvents !== newState.showInputEvents || oldState.showResponsePartEvents !== newState.showResponsePartEvents || oldState.tableWidth !== newState.tableWidth || oldState.timelineEndSeconds !== newState.timelineEndSeconds || oldState.timelineSelectionActive !== newState.timelineSelectionActive || oldState.timelineSelectionAnchorSeconds !== newState.timelineSelectionAnchorSeconds || oldState.timelineSelectionFocusSeconds !== newState.timelineSelectionFocusSeconds || oldState.timelineStartSeconds !== newState.timelineStartSeconds || oldState.useDevtoolsLayout !== newState.useDevtoolsLayout || oldState.visibleTableColumns !== newState.visibleTableColumns || oldState.selectedDetailTab !== newState.selectedDetailTab || oldState.selectedEvent !== newState.selectedEvent || oldState.selectedEventIndex !== newState.selectedEventIndex || oldState.width !== newState.width || oldState.uid !== newState.uid) {
|
|
1514
1717
|
return [RenderIncremental, RenderCss];
|
|
1515
1718
|
}
|
|
1516
1719
|
return [];
|
|
@@ -1524,6 +1727,14 @@ const diff2 = uid => {
|
|
|
1524
1727
|
return diff(oldState, newState);
|
|
1525
1728
|
};
|
|
1526
1729
|
|
|
1730
|
+
const MenuChatDebugTableHeader = 2189;
|
|
1731
|
+
const handleHeaderContextMenu = async (state, eventX, eventY) => {
|
|
1732
|
+
await showContextMenu2(state.uid, MenuChatDebugTableHeader, eventX, eventY, {
|
|
1733
|
+
menuId: MenuChatDebugTableHeader
|
|
1734
|
+
});
|
|
1735
|
+
return state;
|
|
1736
|
+
};
|
|
1737
|
+
|
|
1527
1738
|
const hasMatchingToolName = (startedEvent, finishedEvent) => {
|
|
1528
1739
|
if (typeof startedEvent.toolName === 'string' && typeof finishedEvent.toolName === 'string') {
|
|
1529
1740
|
return startedEvent.toolName === finishedEvent.toolName;
|
|
@@ -1891,8 +2102,51 @@ const handleTableBodyContextMenu = async (state, eventX, eventY) => {
|
|
|
1891
2102
|
return state;
|
|
1892
2103
|
};
|
|
1893
2104
|
|
|
2105
|
+
const getColumnVisibilityFlags = (state, column) => {
|
|
2106
|
+
return isVisibleTableColumn(state.visibleTableColumns, column) ? Checked : Unchecked;
|
|
2107
|
+
};
|
|
2108
|
+
const getMenuEntries2 = (state, props) => {
|
|
2109
|
+
if (props.menuId === MenuChatDebugTableHeader) {
|
|
2110
|
+
return [{
|
|
2111
|
+
args: [Type],
|
|
2112
|
+
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
2113
|
+
flags: getColumnVisibilityFlags(state, Type),
|
|
2114
|
+
id: 'type',
|
|
2115
|
+
label: type()
|
|
2116
|
+
}, {
|
|
2117
|
+
args: [Duration],
|
|
2118
|
+
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
2119
|
+
flags: getColumnVisibilityFlags(state, Duration),
|
|
2120
|
+
id: 'duration',
|
|
2121
|
+
label: duration()
|
|
2122
|
+
}, {
|
|
2123
|
+
args: [Status],
|
|
2124
|
+
command: 'ChatDebug.toggleTableColumnVisibility',
|
|
2125
|
+
flags: getColumnVisibilityFlags(state, Status),
|
|
2126
|
+
id: 'status',
|
|
2127
|
+
label: status()
|
|
2128
|
+
}, {
|
|
2129
|
+
args: [],
|
|
2130
|
+
command: 'ChatDebug.resetTableColumns',
|
|
2131
|
+
flags: None,
|
|
2132
|
+
id: 'reset-columns',
|
|
2133
|
+
label: resetColumns()
|
|
2134
|
+
}];
|
|
2135
|
+
}
|
|
2136
|
+
if (props.menuId === MenuChatDebugTableBody) {
|
|
2137
|
+
return [{
|
|
2138
|
+
args: [],
|
|
2139
|
+
command: 'ChatDebug.copy',
|
|
2140
|
+
flags: None,
|
|
2141
|
+
id: 'copy',
|
|
2142
|
+
label: copy()
|
|
2143
|
+
}];
|
|
2144
|
+
}
|
|
2145
|
+
return [];
|
|
2146
|
+
};
|
|
2147
|
+
|
|
1894
2148
|
const getMenuIds = () => {
|
|
1895
|
-
return [MenuChatDebugTableBody, 556, 557];
|
|
2149
|
+
return [MenuChatDebugTableHeader, MenuChatDebugTableBody, 556, 557];
|
|
1896
2150
|
};
|
|
1897
2151
|
|
|
1898
2152
|
const getErrorMessage = error => {
|
|
@@ -1910,9 +2164,9 @@ const getErrorMessage = error => {
|
|
|
1910
2164
|
const getFailedToLoadMessage = (sessionId, error) => {
|
|
1911
2165
|
const errorMessage = getErrorMessage(error);
|
|
1912
2166
|
if (errorMessage) {
|
|
1913
|
-
return
|
|
2167
|
+
return failedToLoadChatDebugSessionWithError(sessionId, errorMessage);
|
|
1914
2168
|
}
|
|
1915
|
-
return
|
|
2169
|
+
return failedToLoadChatDebugSession(sessionId);
|
|
1916
2170
|
};
|
|
1917
2171
|
|
|
1918
2172
|
const ParseChatDebugUriErrorCode = {
|
|
@@ -1924,13 +2178,13 @@ const ParseChatDebugUriErrorCode = {
|
|
|
1924
2178
|
|
|
1925
2179
|
const getInvalidUriMessage = (uri, code) => {
|
|
1926
2180
|
if (code === ParseChatDebugUriErrorCode.MissingUri) {
|
|
1927
|
-
return
|
|
2181
|
+
return unableToLoadDebugSessionMissingUri();
|
|
1928
2182
|
}
|
|
1929
|
-
return
|
|
2183
|
+
return unableToLoadDebugSessionInvalidUri(uri);
|
|
1930
2184
|
};
|
|
1931
2185
|
|
|
1932
2186
|
const getSessionNotFoundMessage = sessionId => {
|
|
1933
|
-
return
|
|
2187
|
+
return noChatSessionFound(sessionId);
|
|
1934
2188
|
};
|
|
1935
2189
|
|
|
1936
2190
|
const listChatViewEventsDependencies = {
|
|
@@ -1960,7 +2214,7 @@ const parseChatDebugUri = uri => {
|
|
|
1960
2214
|
if (!uri) {
|
|
1961
2215
|
return {
|
|
1962
2216
|
code: ParseChatDebugUriErrorCode.MissingUri,
|
|
1963
|
-
message:
|
|
2217
|
+
message: missingUri(),
|
|
1964
2218
|
type: 'error'
|
|
1965
2219
|
};
|
|
1966
2220
|
}
|
|
@@ -1968,7 +2222,7 @@ const parseChatDebugUri = uri => {
|
|
|
1968
2222
|
if (!match) {
|
|
1969
2223
|
return {
|
|
1970
2224
|
code: ParseChatDebugUriErrorCode.InvalidUriFormat,
|
|
1971
|
-
message:
|
|
2225
|
+
message: invalidUriFormat(),
|
|
1972
2226
|
type: 'error'
|
|
1973
2227
|
};
|
|
1974
2228
|
}
|
|
@@ -1979,14 +2233,14 @@ const parseChatDebugUri = uri => {
|
|
|
1979
2233
|
} catch {
|
|
1980
2234
|
return {
|
|
1981
2235
|
code: ParseChatDebugUriErrorCode.InvalidUriEncoding,
|
|
1982
|
-
message:
|
|
2236
|
+
message: invalidUriEncoding(),
|
|
1983
2237
|
type: 'error'
|
|
1984
2238
|
};
|
|
1985
2239
|
}
|
|
1986
2240
|
if (!sessionId || invalidSessionIdPattern.test(sessionId)) {
|
|
1987
2241
|
return {
|
|
1988
2242
|
code: ParseChatDebugUriErrorCode.InvalidSessionId,
|
|
1989
|
-
message:
|
|
2243
|
+
message: invalidSessionId(),
|
|
1990
2244
|
type: 'error'
|
|
1991
2245
|
};
|
|
1992
2246
|
}
|
|
@@ -2145,6 +2399,10 @@ const handleDetailsContextMenu = state => {
|
|
|
2145
2399
|
return state;
|
|
2146
2400
|
};
|
|
2147
2401
|
|
|
2402
|
+
const handleDetailsTopContextMenu = state => {
|
|
2403
|
+
return state;
|
|
2404
|
+
};
|
|
2405
|
+
|
|
2148
2406
|
const handleDetailTab = (state, value) => {
|
|
2149
2407
|
if (!isDetailTab(value)) {
|
|
2150
2408
|
return state;
|
|
@@ -2241,10 +2499,6 @@ const handleEventRowClick = async (state, value, button = 0) => {
|
|
|
2241
2499
|
return selectEventAtIndex(state, selectedEventIndex, handleEventRowClickDependencies);
|
|
2242
2500
|
};
|
|
2243
2501
|
|
|
2244
|
-
const handleHeaderContextMenu = state => {
|
|
2245
|
-
return state;
|
|
2246
|
-
};
|
|
2247
|
-
|
|
2248
2502
|
const getBoolean = value => {
|
|
2249
2503
|
return value === true || value === 'true' || value === 'on' || value === '1';
|
|
2250
2504
|
};
|
|
@@ -2448,6 +2702,10 @@ const handleSashPointerUp = (state, eventX, eventY) => {
|
|
|
2448
2702
|
return state;
|
|
2449
2703
|
};
|
|
2450
2704
|
|
|
2705
|
+
const handleTimelineContextMenu = state => {
|
|
2706
|
+
return state;
|
|
2707
|
+
};
|
|
2708
|
+
|
|
2451
2709
|
const clearTimelineSelectionState = state => {
|
|
2452
2710
|
return {
|
|
2453
2711
|
...state,
|
|
@@ -3105,17 +3363,19 @@ const HandleTableKeyDown = 18;
|
|
|
3105
3363
|
const HandleTimelineRangePreset = 19;
|
|
3106
3364
|
const HandleCloseDetails = 20;
|
|
3107
3365
|
const HandleClickRefresh = 21;
|
|
3366
|
+
const HandleDetailsTopContextMenu = 22;
|
|
3367
|
+
const HandleTimelineContextMenu = 23;
|
|
3108
3368
|
|
|
3109
3369
|
const getRefreshButtonDom = () => {
|
|
3110
3370
|
return [{
|
|
3111
|
-
'aria-label':
|
|
3371
|
+
'aria-label': refreshEvents$1(),
|
|
3112
3372
|
childCount: 1,
|
|
3113
3373
|
className: ChatDebugViewRefreshButton,
|
|
3114
3374
|
name: Refresh,
|
|
3115
3375
|
onClick: HandleClickRefresh,
|
|
3116
3376
|
type: Button$1,
|
|
3117
3377
|
value: Refresh
|
|
3118
|
-
}, text(
|
|
3378
|
+
}, text(refresh$1())];
|
|
3119
3379
|
};
|
|
3120
3380
|
const getDebugViewTopDom = (filterValue, useDevtoolsLayout, quickFilterNodes) => {
|
|
3121
3381
|
const refreshButtonDom = getRefreshButtonDom();
|
|
@@ -3132,7 +3392,7 @@ const getDebugViewTopDom = (filterValue, useDevtoolsLayout, quickFilterNodes) =>
|
|
|
3132
3392
|
inputType: 'search',
|
|
3133
3393
|
name: Filter,
|
|
3134
3394
|
onInput: HandleFilterInput,
|
|
3135
|
-
placeholder:
|
|
3395
|
+
placeholder: filterEvents(),
|
|
3136
3396
|
type: Input,
|
|
3137
3397
|
value: filterValue
|
|
3138
3398
|
}, ...quickFilterNodes, ...refreshButtonDom];
|
|
@@ -3149,7 +3409,7 @@ const getDebugViewTopDom = (filterValue, useDevtoolsLayout, quickFilterNodes) =>
|
|
|
3149
3409
|
inputType: 'search',
|
|
3150
3410
|
name: Filter,
|
|
3151
3411
|
onInput: HandleFilterInput,
|
|
3152
|
-
placeholder:
|
|
3412
|
+
placeholder: filterEvents(),
|
|
3153
3413
|
type: Input,
|
|
3154
3414
|
value: filterValue
|
|
3155
3415
|
}, ...refreshButtonDom];
|
|
@@ -3225,7 +3485,7 @@ const getTimingDetailsDom = event => {
|
|
|
3225
3485
|
childCount: 3,
|
|
3226
3486
|
className: ChatDebugViewTiming,
|
|
3227
3487
|
type: Div
|
|
3228
|
-
}, ...getTimingRowDom(
|
|
3488
|
+
}, ...getTimingRowDom(started(), getStartText(event)), ...getTimingRowDom(ended(), getEndText(event)), ...getTimingRowDom(duration(), getDurationText(event))];
|
|
3229
3489
|
};
|
|
3230
3490
|
|
|
3231
3491
|
const getTabId = detailTab => {
|
|
@@ -3265,9 +3525,10 @@ const getDetailsDom = (previewEventNodes, responseEventNodes = previewEventNodes
|
|
|
3265
3525
|
}, {
|
|
3266
3526
|
childCount: 2,
|
|
3267
3527
|
className: ChatDebugViewDetailsTop,
|
|
3528
|
+
onContextMenu: HandleDetailsTopContextMenu,
|
|
3268
3529
|
type: Div
|
|
3269
3530
|
}, {
|
|
3270
|
-
'aria-label':
|
|
3531
|
+
'aria-label': closeDetails(),
|
|
3271
3532
|
childCount: 0,
|
|
3272
3533
|
className: ChatDebugViewDetailsClose,
|
|
3273
3534
|
name: CloseDetails,
|
|
@@ -3276,7 +3537,7 @@ const getDetailsDom = (previewEventNodes, responseEventNodes = previewEventNodes
|
|
|
3276
3537
|
type: Button$1,
|
|
3277
3538
|
value: 'close'
|
|
3278
3539
|
}, {
|
|
3279
|
-
'aria-label':
|
|
3540
|
+
'aria-label': detailSections(),
|
|
3280
3541
|
childCount: detailTabs.length,
|
|
3281
3542
|
className: ChatDebugViewDetailsTabs,
|
|
3282
3543
|
role: 'tablist',
|
|
@@ -3372,30 +3633,45 @@ const getStatusText = event => {
|
|
|
3372
3633
|
return hasErrorStatus(event) ? '400' : '200';
|
|
3373
3634
|
};
|
|
3374
3635
|
|
|
3375
|
-
const
|
|
3636
|
+
const getRowCellNodes = (event, isErrorStatus, visibleTableColumns) => {
|
|
3637
|
+
return visibleTableColumns.flatMap(column => {
|
|
3638
|
+
switch (column) {
|
|
3639
|
+
case Duration:
|
|
3640
|
+
return [{
|
|
3641
|
+
childCount: 1,
|
|
3642
|
+
className: joinClassNames(ChatDebugViewCell, ChatDebugViewCellDuration),
|
|
3643
|
+
type: Td
|
|
3644
|
+
}, text(getDurationText(event))];
|
|
3645
|
+
case Status:
|
|
3646
|
+
return [{
|
|
3647
|
+
childCount: 1,
|
|
3648
|
+
className: joinClassNames(ChatDebugViewCell, ChatDebugViewCellStatus, isErrorStatus && ChatDebugViewCellStatusError),
|
|
3649
|
+
type: Td
|
|
3650
|
+
}, text(getStatusText(event))];
|
|
3651
|
+
case Type:
|
|
3652
|
+
return [{
|
|
3653
|
+
childCount: 1,
|
|
3654
|
+
className: joinClassNames(ChatDebugViewCell, ChatDebugViewCellType),
|
|
3655
|
+
type: Td
|
|
3656
|
+
}, text(getEventTypeLabel(event))];
|
|
3657
|
+
default:
|
|
3658
|
+
return [];
|
|
3659
|
+
}
|
|
3660
|
+
});
|
|
3661
|
+
};
|
|
3662
|
+
const getDevtoolsRows = (events, selectedEventIndex, visibleTableColumns = defaultVisibleTableColumns) => {
|
|
3376
3663
|
return events.flatMap((event, i) => {
|
|
3377
3664
|
const isEvenRow = i % 2 === 1;
|
|
3378
3665
|
const isSelected = selectedEventIndex === i;
|
|
3379
3666
|
const isErrorStatus = hasErrorStatus(event);
|
|
3380
3667
|
const rowIndex = String(i);
|
|
3668
|
+
const rowCellNodes = getRowCellNodes(event, isErrorStatus, visibleTableColumns);
|
|
3381
3669
|
return [{
|
|
3382
|
-
childCount:
|
|
3670
|
+
childCount: visibleTableColumns.length,
|
|
3383
3671
|
className: joinClassNames(ChatDebugViewEventRow, isEvenRow && TableRowEven, isSelected && ChatDebugViewEventRowSelected),
|
|
3384
3672
|
'data-index': rowIndex,
|
|
3385
3673
|
type: Tr
|
|
3386
|
-
},
|
|
3387
|
-
childCount: 1,
|
|
3388
|
-
className: joinClassNames(ChatDebugViewCell, ChatDebugViewCellType),
|
|
3389
|
-
type: Td
|
|
3390
|
-
}, text(getEventTypeLabel(event)), {
|
|
3391
|
-
childCount: 1,
|
|
3392
|
-
className: joinClassNames(ChatDebugViewCell, ChatDebugViewCellDuration),
|
|
3393
|
-
type: Td
|
|
3394
|
-
}, text(getDurationText(event)), {
|
|
3395
|
-
childCount: 1,
|
|
3396
|
-
className: joinClassNames(ChatDebugViewCell, ChatDebugViewCellStatus, isErrorStatus && ChatDebugViewCellStatusError),
|
|
3397
|
-
type: Td
|
|
3398
|
-
}, text(getStatusText(event))];
|
|
3674
|
+
}, ...rowCellNodes];
|
|
3399
3675
|
});
|
|
3400
3676
|
};
|
|
3401
3677
|
|
|
@@ -3694,39 +3970,55 @@ const getTableBodyDom = (rowNodes, eventCount) => {
|
|
|
3694
3970
|
}, ...rowNodes];
|
|
3695
3971
|
};
|
|
3696
3972
|
|
|
3697
|
-
const
|
|
3973
|
+
const getHeaderCellNodes = visibleTableColumns => {
|
|
3974
|
+
return visibleTableColumns.flatMap(column => {
|
|
3975
|
+
switch (column) {
|
|
3976
|
+
case Duration:
|
|
3977
|
+
return [{
|
|
3978
|
+
childCount: 1,
|
|
3979
|
+
className: ChatDebugViewHeaderCell,
|
|
3980
|
+
scope: 'col',
|
|
3981
|
+
type: Th
|
|
3982
|
+
}, text(duration())];
|
|
3983
|
+
case Status:
|
|
3984
|
+
return [{
|
|
3985
|
+
childCount: 1,
|
|
3986
|
+
className: ChatDebugViewHeaderCell,
|
|
3987
|
+
scope: 'col',
|
|
3988
|
+
type: Th
|
|
3989
|
+
}, text(status())];
|
|
3990
|
+
case Type:
|
|
3991
|
+
return [{
|
|
3992
|
+
childCount: 1,
|
|
3993
|
+
className: ChatDebugViewHeaderCell,
|
|
3994
|
+
scope: 'col',
|
|
3995
|
+
type: Th
|
|
3996
|
+
}, text(type())];
|
|
3997
|
+
default:
|
|
3998
|
+
return [];
|
|
3999
|
+
}
|
|
4000
|
+
});
|
|
4001
|
+
};
|
|
4002
|
+
const getTableHeaderDom = (visibleTableColumns = defaultVisibleTableColumns) => {
|
|
4003
|
+
const headerCellNodes = getHeaderCellNodes(visibleTableColumns);
|
|
3698
4004
|
return [{
|
|
3699
4005
|
childCount: 1,
|
|
3700
4006
|
className: ChatDebugViewTableHeader,
|
|
4007
|
+
onContextMenu: HandleHeaderContextMenu,
|
|
3701
4008
|
type: THead
|
|
3702
4009
|
}, {
|
|
3703
|
-
childCount:
|
|
4010
|
+
childCount: visibleTableColumns.length,
|
|
3704
4011
|
className: ChatDebugViewTableHeaderRow,
|
|
3705
4012
|
type: Tr
|
|
3706
|
-
},
|
|
3707
|
-
childCount: 1,
|
|
3708
|
-
className: ChatDebugViewHeaderCell,
|
|
3709
|
-
scope: 'col',
|
|
3710
|
-
type: Th
|
|
3711
|
-
}, text('Type'), {
|
|
3712
|
-
childCount: 1,
|
|
3713
|
-
className: ChatDebugViewHeaderCell,
|
|
3714
|
-
scope: 'col',
|
|
3715
|
-
type: Th
|
|
3716
|
-
}, text('Duration'), {
|
|
3717
|
-
childCount: 1,
|
|
3718
|
-
className: ChatDebugViewHeaderCell,
|
|
3719
|
-
scope: 'col',
|
|
3720
|
-
type: Th
|
|
3721
|
-
}, text('Status')];
|
|
4013
|
+
}, ...headerCellNodes];
|
|
3722
4014
|
};
|
|
3723
4015
|
|
|
3724
|
-
const getTableDom = (rowNodes, eventCount) => {
|
|
4016
|
+
const getTableDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns) => {
|
|
3725
4017
|
return [{
|
|
3726
4018
|
childCount: 2,
|
|
3727
4019
|
className: ChatDebugViewTable,
|
|
3728
4020
|
type: Table
|
|
3729
|
-
}, ...getTableHeaderDom(), ...getTableBodyDom(rowNodes, eventCount)];
|
|
4021
|
+
}, ...getTableHeaderDom(visibleTableColumns), ...getTableBodyDom(rowNodes, eventCount)];
|
|
3730
4022
|
};
|
|
3731
4023
|
|
|
3732
4024
|
const formatPercent = value => {
|
|
@@ -3795,9 +4087,9 @@ const formatTimelineSeconds = value => {
|
|
|
3795
4087
|
const getTimelineSummary = (timelineEvents, timelineStartSeconds, timelineEndSeconds) => {
|
|
3796
4088
|
const timelineInfo = getTimelineInfo(timelineEvents, timelineStartSeconds, timelineEndSeconds);
|
|
3797
4089
|
if (timelineInfo.hasSelection && timelineInfo.startSeconds !== null && timelineInfo.endSeconds !== null) {
|
|
3798
|
-
return
|
|
4090
|
+
return windowSummary(formatTimelineSeconds(timelineInfo.startSeconds), formatTimelineSeconds(timelineInfo.endSeconds), formatTimelineSeconds(timelineInfo.durationSeconds));
|
|
3799
4091
|
}
|
|
3800
|
-
return
|
|
4092
|
+
return windowSummary('0s', formatTimelineSeconds(timelineInfo.durationSeconds), formatTimelineSeconds(timelineInfo.durationSeconds));
|
|
3801
4093
|
};
|
|
3802
4094
|
|
|
3803
4095
|
const getTimelineNodes = (timelineEvents, timelineStartSeconds, timelineEndSeconds, timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '') => {
|
|
@@ -3825,6 +4117,7 @@ const getTimelineNodes = (timelineEvents, timelineStartSeconds, timelineEndSecon
|
|
|
3825
4117
|
return [{
|
|
3826
4118
|
childCount: 2,
|
|
3827
4119
|
className: ChatDebugViewTimeline,
|
|
4120
|
+
onContextMenu: HandleTimelineContextMenu,
|
|
3828
4121
|
type: Section
|
|
3829
4122
|
}, {
|
|
3830
4123
|
childCount: 1,
|
|
@@ -3851,13 +4144,13 @@ const getTimelineNodes = (timelineEvents, timelineStartSeconds, timelineEndSecon
|
|
|
3851
4144
|
}, ...selectionNodes];
|
|
3852
4145
|
};
|
|
3853
4146
|
|
|
3854
|
-
const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage =
|
|
3855
|
-
const rowNodes = getDevtoolsRows(events, selectedEventIndex);
|
|
4147
|
+
const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage = noEventsFound(), timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', selectedDetailTab = Response, visibleTableColumns = defaultVisibleTableColumns) => {
|
|
4148
|
+
const rowNodes = getDevtoolsRows(events, selectedEventIndex, visibleTableColumns);
|
|
3856
4149
|
const timelineNodes = getTimelineNodes(timelineEvents, timelineStartSeconds, timelineEndSeconds, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds);
|
|
3857
4150
|
const previewEventNodes = selectedEvent ? getEventNode(getPreviewEvent(selectedEvent)) : [];
|
|
3858
4151
|
const responseEventNodes = selectedEvent ? getEventNode(selectedEvent) : [];
|
|
3859
4152
|
const hasSelectedEvent = responseEventNodes.length > 0;
|
|
3860
|
-
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableDom(rowNodes, events.length);
|
|
4153
|
+
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableDom(rowNodes, events.length, visibleTableColumns);
|
|
3861
4154
|
const eventsClassName = getEventsClassName(hasSelectedEvent);
|
|
3862
4155
|
const detailsNodes = getDetailsDom(previewEventNodes, responseEventNodes, selectedEvent, isDetailTab(selectedDetailTab) ? selectedDetailTab : Response);
|
|
3863
4156
|
const sashNodes = getSashNodesDom(hasSelectedEvent);
|
|
@@ -3925,18 +4218,18 @@ const getTimelineFilterDescription = (timelineStartSeconds, timelineEndSeconds)
|
|
|
3925
4218
|
const trimmedStart = timelineStartSeconds.trim();
|
|
3926
4219
|
const trimmedEnd = timelineEndSeconds.trim();
|
|
3927
4220
|
if (trimmedStart && trimmedEnd) {
|
|
3928
|
-
return
|
|
4221
|
+
return secondsRange(trimmedStart, trimmedEnd);
|
|
3929
4222
|
}
|
|
3930
4223
|
if (trimmedStart) {
|
|
3931
|
-
return
|
|
4224
|
+
return fromSeconds(trimmedStart);
|
|
3932
4225
|
}
|
|
3933
4226
|
if (trimmedEnd) {
|
|
3934
|
-
return
|
|
4227
|
+
return toSeconds(trimmedEnd);
|
|
3935
4228
|
}
|
|
3936
4229
|
return '';
|
|
3937
4230
|
};
|
|
3938
4231
|
|
|
3939
|
-
const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilter, eventCategoryFilterOptions, _showEventStreamFinishedEvents, _showInputEvents, _showResponsePartEvents, useDevtoolsLayout, selectedEvent, selectedEventIndex, timelineStartSeconds, timelineEndSeconds, timelineEvents, events, timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', selectedDetailTab = Response) => {
|
|
4232
|
+
const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilter, eventCategoryFilterOptions, _showEventStreamFinishedEvents, _showInputEvents, _showResponsePartEvents, useDevtoolsLayout, selectedEvent, selectedEventIndex, timelineStartSeconds, timelineEndSeconds, timelineEvents, events, timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', selectedDetailTab = Response, visibleTableColumns = defaultVisibleTableColumns) => {
|
|
3940
4233
|
if (errorMessage) {
|
|
3941
4234
|
return getDebugErrorDom(errorMessage);
|
|
3942
4235
|
}
|
|
@@ -3955,11 +4248,11 @@ const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilter, eve
|
|
|
3955
4248
|
const hasTimelineFilter = Boolean(timelineFilterDescription);
|
|
3956
4249
|
const hasFilterValue = filterDescriptionParts.length > 0;
|
|
3957
4250
|
const filterDescription = filterDescriptionParts.join(' ');
|
|
3958
|
-
const noFilteredEventsMessage =
|
|
4251
|
+
const noFilteredEventsMessage = noEventsFoundMatching(filterDescription);
|
|
3959
4252
|
const useNoToolCallEventsMessage = eventCategoryFilter === Tools && !trimmedFilterValue && !hasTimelineFilter;
|
|
3960
|
-
const emptyMessage = events.length === 0 && hasFilterValue ? useNoToolCallEventsMessage ?
|
|
4253
|
+
const emptyMessage = events.length === 0 && hasFilterValue ? useNoToolCallEventsMessage ? noToolCallEvents() : noFilteredEventsMessage : noEventsFound();
|
|
3961
4254
|
const safeSelectedEventIndex = selectedEventIndex === null || selectedEventIndex < 0 || selectedEventIndex >= events.length ? null : selectedEventIndex;
|
|
3962
|
-
const contentNodes = useDevtoolsLayout ? getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, isDetailTab(selectedDetailTab) ? selectedDetailTab : Response) : getLegacyEventsDom(errorMessage, emptyMessage, events.flatMap(getEventNode));
|
|
4255
|
+
const contentNodes = useDevtoolsLayout ? getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, isDetailTab(selectedDetailTab) ? selectedDetailTab : Response, visibleTableColumns) : getLegacyEventsDom(errorMessage, emptyMessage, events.flatMap(getEventNode));
|
|
3963
4256
|
const quickFilterNodes = useDevtoolsLayout ? getQuickFilterNodes(eventCategoryFilter, eventCategoryFilterOptions) : [];
|
|
3964
4257
|
const debugViewTopDom = getDebugViewTopDom(filterValue, useDevtoolsLayout, quickFilterNodes);
|
|
3965
4258
|
const rootChildCount = 2;
|
|
@@ -3984,7 +4277,7 @@ const renderItems = (oldState, newState) => {
|
|
|
3984
4277
|
}
|
|
3985
4278
|
const timelineEvents = getTimelineEvents(newState);
|
|
3986
4279
|
const filteredEvents = filterEventsByTimelineRange(timelineEvents, newState.timelineStartSeconds, newState.timelineEndSeconds);
|
|
3987
|
-
const dom = getChatDebugViewDom(newState.errorMessage, newState.filterValue, newState.eventCategoryFilter, newState.eventCategoryFilterOptions, newState.showEventStreamFinishedEvents, newState.showInputEvents, newState.showResponsePartEvents, newState.useDevtoolsLayout, newState.selectedEvent, newState.selectedEventIndex, newState.timelineStartSeconds, newState.timelineEndSeconds, withSessionEventIds(timelineEvents), withSessionEventIds(filteredEvents), newState.timelineSelectionActive, newState.timelineSelectionAnchorSeconds, newState.timelineSelectionFocusSeconds, newState.selectedDetailTab);
|
|
4280
|
+
const dom = getChatDebugViewDom(newState.errorMessage, newState.filterValue, newState.eventCategoryFilter, newState.eventCategoryFilterOptions, newState.showEventStreamFinishedEvents, newState.showInputEvents, newState.showResponsePartEvents, newState.useDevtoolsLayout, newState.selectedEvent, newState.selectedEventIndex, newState.timelineStartSeconds, newState.timelineEndSeconds, withSessionEventIds(timelineEvents), withSessionEventIds(filteredEvents), newState.timelineSelectionActive, newState.timelineSelectionAnchorSeconds, newState.timelineSelectionFocusSeconds, newState.selectedDetailTab, newState.visibleTableColumns);
|
|
3988
4281
|
return [SetDom2, newState.uid, dom];
|
|
3989
4282
|
};
|
|
3990
4283
|
|
|
@@ -4032,7 +4325,7 @@ const render2 = (uid, diffResult) => {
|
|
|
4032
4325
|
const renderEventListeners = () => {
|
|
4033
4326
|
return [{
|
|
4034
4327
|
name: HandleHeaderContextMenu,
|
|
4035
|
-
params: ['handleHeaderContextMenu'],
|
|
4328
|
+
params: ['handleHeaderContextMenu', ClientX, ClientY],
|
|
4036
4329
|
preventDefault: true
|
|
4037
4330
|
}, {
|
|
4038
4331
|
name: HandleEventRowClick,
|
|
@@ -4045,6 +4338,14 @@ const renderEventListeners = () => {
|
|
|
4045
4338
|
name: HandleDetailsContextMenu,
|
|
4046
4339
|
params: ['handleDetailsContextMenu'],
|
|
4047
4340
|
preventDefault: true
|
|
4341
|
+
}, {
|
|
4342
|
+
name: HandleDetailsTopContextMenu,
|
|
4343
|
+
params: ['handleDetailsTopContextMenu'],
|
|
4344
|
+
preventDefault: true
|
|
4345
|
+
}, {
|
|
4346
|
+
name: HandleTimelineContextMenu,
|
|
4347
|
+
params: ['handleTimelineContextMenu'],
|
|
4348
|
+
preventDefault: true
|
|
4048
4349
|
}, {
|
|
4049
4350
|
name: HandleFilterInput,
|
|
4050
4351
|
params: ['handleInput', TargetName, TargetValue]
|
|
@@ -4096,6 +4397,19 @@ const rerender = state => {
|
|
|
4096
4397
|
return structuredClone(state);
|
|
4097
4398
|
};
|
|
4098
4399
|
|
|
4400
|
+
const isSameVisibleTableColumns = (a, b) => {
|
|
4401
|
+
return a.length === b.length && a.every((value, index) => value === b[index]);
|
|
4402
|
+
};
|
|
4403
|
+
const resetTableColumns = state => {
|
|
4404
|
+
if (isSameVisibleTableColumns(state.visibleTableColumns, defaultVisibleTableColumns)) {
|
|
4405
|
+
return state;
|
|
4406
|
+
}
|
|
4407
|
+
return {
|
|
4408
|
+
...state,
|
|
4409
|
+
visibleTableColumns: defaultVisibleTableColumns
|
|
4410
|
+
};
|
|
4411
|
+
};
|
|
4412
|
+
|
|
4099
4413
|
const handleResize = (state, dimensions) => {
|
|
4100
4414
|
const nextState = {
|
|
4101
4415
|
...state,
|
|
@@ -4125,7 +4439,8 @@ const saveState = state => {
|
|
|
4125
4439
|
selectedEventId,
|
|
4126
4440
|
sessionId,
|
|
4127
4441
|
timelineEndSeconds,
|
|
4128
|
-
timelineStartSeconds
|
|
4442
|
+
timelineStartSeconds,
|
|
4443
|
+
visibleTableColumns
|
|
4129
4444
|
} = state;
|
|
4130
4445
|
return {
|
|
4131
4446
|
eventCategoryFilter,
|
|
@@ -4134,7 +4449,8 @@ const saveState = state => {
|
|
|
4134
4449
|
selectedEventId,
|
|
4135
4450
|
sessionId,
|
|
4136
4451
|
timelineEndSeconds,
|
|
4137
|
-
timelineStartSeconds
|
|
4452
|
+
timelineStartSeconds,
|
|
4453
|
+
visibleTableColumns
|
|
4138
4454
|
};
|
|
4139
4455
|
};
|
|
4140
4456
|
|
|
@@ -4182,15 +4498,33 @@ const setSessionId = async (state, sessionId) => {
|
|
|
4182
4498
|
};
|
|
4183
4499
|
};
|
|
4184
4500
|
|
|
4501
|
+
const toggleTableColumnVisibility = (state, column) => {
|
|
4502
|
+
if (!isTableColumn(column)) {
|
|
4503
|
+
return state;
|
|
4504
|
+
}
|
|
4505
|
+
const nextVisibleColumns = new Set(state.visibleTableColumns);
|
|
4506
|
+
if (nextVisibleColumns.has(column)) {
|
|
4507
|
+
nextVisibleColumns.delete(column);
|
|
4508
|
+
} else {
|
|
4509
|
+
nextVisibleColumns.add(column);
|
|
4510
|
+
}
|
|
4511
|
+
return {
|
|
4512
|
+
...state,
|
|
4513
|
+
visibleTableColumns: getOrderedVisibleTableColumns([...nextVisibleColumns])
|
|
4514
|
+
};
|
|
4515
|
+
};
|
|
4516
|
+
|
|
4185
4517
|
const commandMap = {
|
|
4186
4518
|
'ChatDebug.appendStoredEventForTest': wrapCommand(appendStoredEventForTest),
|
|
4187
4519
|
'ChatDebug.create': create,
|
|
4188
4520
|
'ChatDebug.diff2': diff2,
|
|
4189
4521
|
'ChatDebug.getCommandIds': getCommandIds,
|
|
4522
|
+
'ChatDebug.getMenuEntries': wrapGetter(getMenuEntries2),
|
|
4190
4523
|
'ChatDebug.getMenuIds': getMenuIds,
|
|
4191
4524
|
'ChatDebug.handleClickRefresh': wrapCommand(handleClickRefresh),
|
|
4192
4525
|
'ChatDebug.handleCloseDetails': wrapCommand(handleCloseDetails),
|
|
4193
4526
|
'ChatDebug.handleDetailsContextMenu': wrapCommand(handleDetailsContextMenu),
|
|
4527
|
+
'ChatDebug.handleDetailsTopContextMenu': wrapCommand(handleDetailsTopContextMenu),
|
|
4194
4528
|
'ChatDebug.handleDetailTab': wrapCommand(handleDetailTab),
|
|
4195
4529
|
'ChatDebug.handleEventCategoryFilter': wrapCommand(handleEventCategoryFilter),
|
|
4196
4530
|
'ChatDebug.handleEventRowClick': wrapCommand(handleEventRowClick),
|
|
@@ -4203,6 +4537,7 @@ const commandMap = {
|
|
|
4203
4537
|
'ChatDebug.handleShowInputEvents': wrapCommand(handleShowInputEvents),
|
|
4204
4538
|
'ChatDebug.handleShowResponsePartEvents': wrapCommand(handleShowResponsePartEvents),
|
|
4205
4539
|
'ChatDebug.handleTableBodyContextMenu': wrapCommand(handleTableBodyContextMenu),
|
|
4540
|
+
'ChatDebug.handleTimelineContextMenu': wrapCommand(handleTimelineContextMenu),
|
|
4206
4541
|
'ChatDebug.handleTimelineDoubleClick': wrapCommand(handleTimelineDoubleClick),
|
|
4207
4542
|
'ChatDebug.handleTimelineEndSeconds': wrapCommand(handleTimelineEndSeconds),
|
|
4208
4543
|
'ChatDebug.handleTimelinePointerDown': wrapCommand(handleTimelinePointerDown),
|
|
@@ -4217,11 +4552,13 @@ const commandMap = {
|
|
|
4217
4552
|
'ChatDebug.render2': render2,
|
|
4218
4553
|
'ChatDebug.renderEventListeners': renderEventListeners,
|
|
4219
4554
|
'ChatDebug.rerender': wrapCommand(rerender),
|
|
4555
|
+
'ChatDebug.resetTableColumns': wrapCommand(resetTableColumns),
|
|
4220
4556
|
'ChatDebug.resize': wrapCommand(resize),
|
|
4221
4557
|
'ChatDebug.saveState': wrapGetter(saveState),
|
|
4222
4558
|
'ChatDebug.setEvents': wrapCommand(setEvents),
|
|
4223
4559
|
'ChatDebug.setSessionId': wrapCommand(setSessionId),
|
|
4224
|
-
'ChatDebug.terminate': terminate
|
|
4560
|
+
'ChatDebug.terminate': terminate,
|
|
4561
|
+
'ChatDebug.toggleTableColumnVisibility': wrapCommand(toggleTableColumnVisibility)
|
|
4225
4562
|
};
|
|
4226
4563
|
|
|
4227
4564
|
const sendMessagePortToChatStorageWorker = async port => {
|