Agent Skillslichtblick-suite/lichtblick › panel-user-scripts

panel-user-scripts

GitHub

提供面板用户脚本技能的深度知识,涵盖Monaco编辑器集成、TypeScript编译、沙箱运行时执行及脚本API。用于指导自定义消息转换脚本的编写、调试与架构理解。

.github/skills/panel-user-scripts/SKILL.md lichtblick-suite/lichtblick

Trigger Scenarios

用户询问关于UserScripts面板的功能或配置 需要解释Monaco编辑器在脚本中的集成方式 涉及TypeScript编译、Worker隔离或沙箱执行机制的问题 查询脚本生命周期、性能优化或错误处理策略

Install

npx skills add lichtblick-suite/lichtblick --skill panel-user-scripts -g -y
More Options

Non-standard path

npx skills add https://github.com/lichtblick-suite/lichtblick/tree/develop/.github/skills/panel-user-scripts -g -y

Use without installing

npx skills use lichtblick-suite/lichtblick@panel-user-scripts

指定 Agent (Claude Code)

npx skills add lichtblick-suite/lichtblick --skill panel-user-scripts -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": "panel-user-scripts",
    "description": "Deep UserScripts panel knowledge: Monaco editor integration, UserScriptPlayer wrapper, TypeScript compilation in the transformer Worker, sandboxed runtime Worker execution, diagnostics, and the script API."
}

Panel User Scripts Skill

The in-app TypeScript editor that lets users write custom message transformations.

Architecture

UserScripts Panel (Monaco editor)
    │
    ▼
UserScriptPlayer (wraps the base Player)
    │
    ├── Transformer Worker (compiles + reports diagnostics)
    │   └── TypeScript compiler (in-Worker)
    │
    └── Runtime Worker (sandboxed script execution)
        └── user code runs here (isolated)

Core Components

File Role
panels/UserScriptEditor/ Monaco editor UI, diagnostics display
players/UserScriptPlayer/index.ts Player wrapper, Worker pool management
players/UserScriptPlayer/transformerWorker/ TypeScript compilation in a Worker
players/UserScriptPlayer/runtimeWorker/ Sandboxed script execution

Script Lifecycle

  1. User writes TypeScript in Monaco
  2. On save: code is sent to the Transformer Worker for compilation
  3. Transformer compiles TS → JS and reports diagnostics (errors/warnings)
  4. On success: the JS bundle is sent to the Runtime Worker
  5. During playback: messages on input topics → Runtime Worker → output messages
  6. Output messages are injected into PlayerState as additional topics

Worker Naming Pattern

// unique name per instance — isolates workers per tab (no cross-tab sharing)
new SharedWorker(new URL("./transformerWorker/index", import.meta.url), {
  name: uuidv4(),
});
  • SharedWorker is the worker type, but cross-tab instance reuse is disabled by unique naming.
  • Within a single player lifetime, runtime workers are reused/pooled where possible.
  • Each active script processor maps to an isolated runtime execution context.

Monaco Integration

  • Full TypeScript language service (autocomplete, errors, hover)
  • Custom Lichtblick script-API type definitions injected
  • Diagnostics shown inline and in a panel below the editor

Script API

export const inputs = ["/camera/image"];
export const output = "/processed_image";

export default function transform(event: MessageEvent): OutputMessage {
  return {
    /* processed data */
  };
}

Performance Notes

  • Script execution never blocks the main thread (Worker isolation)
  • Unchanged scripts don't recompile (compilation caching)
  • Only subscribed input topics are forwarded to the Worker
  • Runtime errors in user code are contained — they don't crash the app
  • Each Runtime Worker has its own heap (no cross-script interference)

Key Files

  • packages/suite-base/src/panels/UserScriptEditor/
  • packages/suite-base/src/players/UserScriptPlayer/index.ts
  • packages/suite-base/src/players/UserScriptPlayer/transformerWorker/
  • packages/suite-base/src/players/UserScriptPlayer/runtimeWorker/

Skills Reference

  • For SharedWorker patterns: load web-workers 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/message-pipeline/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/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
ce772626
Indexed
2026-07-24 12:17

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-07 11:26
浙ICP备14020137号-1 $Carte des visiteurs$