Deep MessagePipeline implementation knowledge: zustand store shape, React context provider, subscription merging/memoization, render-state flow, and the Player→panel data bus.
69%
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
Fix and improve this skill with Tessl
tessl review fix ./.github/skills/message-pipeline/SKILL.mdThe MessagePipeline is the central data bus connecting Players to Panels.
Player (emits PlayerState)
│ playerListener callback
▼
MessagePipeline (zustand store + React context)
│ selector-based notifications
▼
PanelExtensionAdapter (per-panel bridge)
│
▼
Panel (receives RenderState)| File | Role |
|---|---|
packages/suite-base/src/components/MessagePipeline/index.tsx | React context provider; creates the zustand store and connects to the Player |
packages/suite-base/src/components/MessagePipeline/store.ts | MessagePipelineInternalState + dispatch actions |
packages/suite-base/src/components/MessagePipeline/types.ts | MessagePipelineContext — the interface panels see |
packages/suite-base/src/components/MessagePipeline/subscriptions.ts | Subscription merging + memoization |
packages/suite-base/src/components/MessagePipeline/selectors.ts | Selector helpers for fine-grained subscriptions |
playerListener callback fires"update" action merges the new PlayerState into internal statePanelExtensionAdapter incrementally builds RenderState per panel"update" — new PlayerState received from the player listener"set-subscriptions" — a panel's subscriptions changed"playback-seek" — user seeks to a new time"set-playback-speed" — playback rate changedPanels declare the topics they need:
context.subscribe([{ topic: "/camera/image" }]);The pipeline:
player.setSubscriptions()subscriptions.ts uses reference equality to avoid recomputing the merged subscription setplayerState — current player status (playing, paused, error)activeData — messages, currentTime, startTime, endTime, topics, datatypesmessagesByTopic — Map<topic, messages> for the current framesortedTopics — alphabetically sorted topic listsubscriptions — currently active subscriptionsseekPlayback(time) — seek to a specific timesetPlaybackSpeed(speed) — change playback ratemessagesByTopic is rebuilt only when new messages arrive (not every frame)RenderState contract: load panel-extension-api skillplayer-internals skilllichtblick-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.