Deep Log panel knowledge: react-window VariableSizeList virtualization, dynamic measured row heights, autoscroll/tail behavior, multi-format log normalization, and level/text filtering.
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
A high-performance log viewer with virtualized rendering and filtering.
panels/Log/
├── index.tsx # main panel, filter state, topic selection, settings
├── LogList.tsx # react-window VariableSizeList, dynamic heights, autoscroll
├── filterMessages.ts # level + text filtering
└── conversion.tsx # normalize ROS1/ROS2/Foxglove log formats<VariableSizeList
height={containerHeight}
itemCount={filteredMessages.length}
itemSize={getItemSize} // dynamic: cached height per row
ref={listRef}
>
{LogRow}
</VariableSizeList>resetAfterIndex() is called when content changes (recalculates from that point)conversion.tsx)Unifies multiple formats into one structure:
interface NormalizedLogMessage {
level: LogLevel; // DEBUG, INFO, WARN, ERROR, FATAL
message: string;
name?: string; // logger name
timestamp: Time;
file?: string;
line?: number;
}Supported inputs: rosgraph_msgs/Log (ROS 1), rcl_interfaces/msg/Log (ROS 2), foxglove.Log.
filterMessages.ts)function filterMessages(
messages: NormalizedLogMessage[],
minLevel: LogLevel,
searchTerm: string,
): NormalizedLogMessage[];scrollToItem is only called when actually at the bottompackages/suite-base/src/panels/Log/index.tsxpackages/suite-base/src/panels/Log/LogList.tsxpackages/suite-base/src/panels/Log/filterMessages.tspackages/suite-base/src/panels/Log/conversion.tsxlichtblick-suite/lichtblick
9589f38
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.