Agent Skills
› lichtblick-suite/lichtblick
› panel-state-transitions
panel-state-transitions
GitHub解析离散状态转换面板知识,涵盖时间轴可视化、消息路径提取、250ms批量刷新机制及高性能数据集转换。
触发场景
询问关于 StateTransitions 面板的实现细节或结构
需要优化或理解基于时间的图表渲染逻辑
查询如何配置消息路径以提取特定状态值
分析高频率消息下的性能瓶颈与批处理策略
安装
npx skills add lichtblick-suite/lichtblick --skill panel-state-transitions -g -y
SKILL.md
Frontmatter
{
"name": "panel-state-transitions",
"description": "Deep StateTransitions panel knowledge: TimeBasedChart segments, message-path extraction, preloaded-range subscription with 250ms batch flush, block+currentFrame merge, and messagesToDataset."
}
Panel State Transitions Skill
A timeline visualization for discrete state changes extracted from messages.
Structure
panels/StateTransitions/
├── index.tsx # main panel, TimeBasedChart usage, message-path config
├── messagesToDataset.ts # message → Chart.js dataset (perf-critical)
└── hooks/
├── useDecodedMessageRange.ts # preloaded-range subscription, 250ms batch flush
└── useStateTransitionsData.ts # merges preloaded blocks + current frame
Data Flow
- User configures message paths (e.g.
/robot/state.mode) useDecodedMessageRangesubscribes to preloaded blocks for those paths- Messages arrive in batches (250ms flush interval)
messagesToDatasetextracts discrete values and builds chart segmentsuseStateTransitionsDatamerges block data with live current-frame dataTimeBasedChartrenders colored segments on a timeline
messagesToDataset (Performance Critical)
function messagesToDataset(messages: MessageEvent[], path: MessagePath): ChartDataset {
// iterate all messages, extract value at path
// create segment boundaries at state-change points
// return { data: [{ x: startTime, x2: endTime, y: stateLabel }] }
}
Runs on every data update — must stay fast for large datasets.
250ms Batch Flush
useDecodedMessageRange debounces:
- Accumulates incoming messages for 250ms
- Triggers a single state update with the full batch
- Prevents a React re-render per message — critical for topics with thousands of preloaded messages
TimeBasedChart
Shared chart component (also used by other panels):
- Time on the X-axis, discrete values on the Y-axis
- Supports multiple series (each path = a row)
- Zoom/pan synchronized with global playback time
- Colored segments represent distinct state values
Performance Notes
- 250ms batch flush prevents render storms from high-frequency messages
messagesToDatasetisO(n)per path — keepnbounded (downsample if needed)- Avoid re-processing already-processed blocks during the block + currentFrame merge
- Message-path parsing is cached (nearley grammar not re-parsed)
Key Files
packages/suite-base/src/panels/StateTransitions/index.tsxpackages/suite-base/src/panels/StateTransitions/messagesToDataset.tspackages/suite-base/src/panels/StateTransitions/hooks/useDecodedMessageRange.tspackages/suite-base/src/panels/StateTransitions/hooks/useStateTransitionsData.ts
Skills Reference
- For message-path syntax and extraction: load
message-pathskill
版本历史
- cab9317 当前 2026-07-24 12:17


