Agent Skillslichtblick-suite/lichtblick › message-pipeline

message-pipeline

GitHub

解析MessagePipeline数据总线,涵盖Zustand状态管理、React上下文、订阅合并及渲染流程。用于理解Player与Panel间的数据交互、状态更新机制及性能优化策略。

.github/skills/message-pipeline/SKILL.md lichtblick-suite/lichtblick

Trigger Scenarios

查询MessagePipeline架构或数据流 调试面板状态同步问题 了解订阅合并与去重逻辑 分析Zustand store结构

Install

npx skills add lichtblick-suite/lichtblick --skill message-pipeline -g -y
More Options

Non-standard path

npx skills add https://github.com/lichtblick-suite/lichtblick/tree/develop/.github/skills/message-pipeline -g -y

Use without installing

npx skills use lichtblick-suite/lichtblick@message-pipeline

指定 Agent (Claude Code)

npx skills add lichtblick-suite/lichtblick --skill message-pipeline -a claude-code -g -y

安装 repo 全部 skill

npx skills add lichtblick-suite/lichtblick --all -g -y

预览 repo 内 skill

npx skills add lichtblick-suite/lichtblick --list

SKILL.md

Frontmatter
{
    "name": "message-pipeline",
    "description": "Deep MessagePipeline implementation knowledge: zustand store shape, React context provider, subscription merging\/memoization, render-state flow, and the Player→panel data bus."
}

Message Pipeline Skill

The MessagePipeline is the central data bus connecting Players to Panels.

Data Flow

Player (emits PlayerState)
    │  playerListener callback
    ▼
MessagePipeline (zustand store + React context)
    │  selector-based notifications
    ▼
PanelExtensionAdapter (per-panel bridge)
    │
    ▼
Panel (receives RenderState)

Core Files

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

Store Update Flow

  1. Player emits state → the playerListener callback fires
  2. Store dispatch → the "update" action merges the new PlayerState into internal state
  3. Selectors react → zustand subscribers (panels) are notified via selector equality checks
  4. Render state builtPanelExtensionAdapter incrementally builds RenderState per panel

Internal Store Actions

  • "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 changed

Subscription System

Panels declare the topics they need:

context.subscribe([{ topic: "/camera/image" }]);

The pipeline:

  1. Collects subscriptions from all active panels
  2. Merges overlapping subscriptions (deduplicates topics)
  3. Forwards the merged set to the Player via player.setSubscriptions()
  4. The Player only iterates topics that are actually subscribed

Subscription Memoization

  • subscriptions.ts uses reference equality to avoid recomputing the merged subscription set
  • A Player update is only triggered when the effective topic set changes

MessagePipelineContext (what panels access)

  • playerState — current player status (playing, paused, error)
  • activeData — messages, currentTime, startTime, endTime, topics, datatypes
  • messagesByTopicMap<topic, messages> for the current frame
  • sortedTopics — alphabetically sorted topic list
  • subscriptions — currently active subscriptions
  • seekPlayback(time) — seek to a specific time
  • setPlaybackSpeed(speed) — change playback rate

Performance Notes

  • Zustand selectors enable per-panel, fine-grained updates (no full re-renders)
  • messagesByTopic is rebuilt only when new messages arrive (not every frame)
  • Subscription merging prevents redundant data iteration in the Player
  • Render state is built incrementally — only changed fields are recomputed

Skills Reference

  • For the panel-side bridge and RenderState contract: load panel-extension-api skill
  • For Player internals upstream of the pipeline: load player-internals skill

Version History

  • cab9317 Current 2026-07-24 12:17

Same Skill Collection

.github/skills/3d-rendering/SKILL.md
.github/skills/caching-internals/SKILL.md
.github/skills/deserialization/SKILL.md
.github/skills/e2e-playwright-mcp/SKILL.md
.github/skills/electron-internals/SKILL.md
.github/skills/extensions-internals/SKILL.md
.github/skills/layouts-internals/SKILL.md
.github/skills/mcap-format/SKILL.md
.github/skills/message-path/SKILL.md
.github/skills/panel-extension-api/SKILL.md
.github/skills/panel-image/SKILL.md
.github/skills/panel-log/SKILL.md
.github/skills/panel-map/SKILL.md
.github/skills/panel-raw-messages/SKILL.md
.github/skills/panel-state-transitions/SKILL.md
.github/skills/panel-user-scripts/SKILL.md
.github/skills/performance/SKILL.md
.github/skills/player-internals/SKILL.md
.github/skills/plot-internals/SKILL.md
.github/skills/remote-caching/SKILL.md
.github/skills/test-conventions/SKILL.md
.github/skills/theme/SKILL.md
.github/skills/unit-testing/SKILL.md
.github/skills/web-workers/SKILL.md
.github/skills/websocket-connection/SKILL.md

Metadata

Files
0
Version
cab9317
Hash
3906e1c0
Indexed
2026-07-24 12:17

trang chủ - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-08 21:09
浙ICP备14020137号-1 $bản đồ khách truy cập$