Skip to content
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
350 commits
Select commit Hold shift + click to select a range
c1b5655
chore(deps): bump octokit/request-action from 2.4.0 to 3.0.0 (#999)
dependabot[bot] Mar 23, 2026
ebe6f3b
Sync main into develop (#1002)
luluiz Mar 25, 2026
eb906c3
Release 1.24.3: Sync main into develop (#1005)
lichtblick-bot Mar 25, 2026
37b66dd
Allow manual triggering of SonarCloud workflow (#1009)
luluiz Mar 25, 2026
52481ff
Fix for revert changes on layout not working on some cases (#997)
ctw-joao-luis Mar 25, 2026
774ca03
chore(deps): bump actions/deploy-pages from 4 to 5 (#1013)
dependabot[bot] Mar 26, 2026
6bd0cc0
chore(deps): bump picomatch from 2.3.1 to 2.3.2 in the npm_and_yarn g…
dependabot[bot] Mar 26, 2026
0711425
chore(deps): bump yaml from 1.10.2 to 1.10.3 in the npm_and_yarn grou…
dependabot[bot] Mar 26, 2026
c1231eb
feat: Tooltip in 3D view to show metadata (#933)
udovonbmw Mar 27, 2026
57a1716
Add latest-per-render-tick sampling (#932)
thomassedlmayer Mar 27, 2026
100361a
chore(deps): bump actions/configure-pages from 5 to 6 (#1019)
dependabot[bot] Mar 30, 2026
0ffeb6a
Bugfix - Update how layout chages are calculated (#1018)
gabriela-almeida-ctw Mar 30, 2026
0deb6c0
fix: trigger SonarCloud after release and remove redundant main push …
luluiz Mar 30, 2026
4438799
feat: Plot uses subscribeMessageRange (#1004)
rodrigo-rodrigues-ctw Mar 30, 2026
455a5ee
feat: Improve tests related to Plot Panel (#1020)
rodrigo-rodrigues-ctw Mar 31, 2026
e1b5f99
Update copy-webpack-plugin suite-web dependency (#1022)
gabriela-almeida-ctw Mar 31, 2026
d7361cf
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Apr 1, 2026
7fe69ac
chore(deps-dev): bump the webpack group across 1 directory with 2 upd…
dependabot[bot] Apr 1, 2026
cc201ab
chore(deps): bump the jest group with 3 updates (#1024)
dependabot[bot] Apr 1, 2026
f952b6c
chore(deps-dev): bump @babel/preset-env from 7.29.0 to 7.29.2 in the …
dependabot[bot] Apr 1, 2026
8bc66b5
chore(deps-dev): bump @xmldom/xmldom from 0.8.12 to 0.9.9 (#1027)
dependabot[bot] Apr 1, 2026
13552c2
Update serve-handler web dependency (#1021)
gabriela-almeida-ctw Apr 1, 2026
8e47bd4
chore(deps): bump sonarsource/sonarqube-scan-action from 7.0.0 to 7.1…
dependabot[bot] Apr 2, 2026
0298053
chore(deps): bump the npm_and_yarn group across 3 directories with 1 …
dependabot[bot] Apr 2, 2026
79b19ed
chore(deps): bump lodash from 4.17.23 to 4.18.1 in the npm_and_yarn g…
dependabot[bot] Apr 2, 2026
04d604b
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Apr 4, 2026
68cc539
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Apr 4, 2026
a9e6ade
Add changelog and readme to ExtensionsAPI body (#1031)
gabriela-almeida-ctw Apr 7, 2026
e7eaba0
Update rosbag2-web package version (#1039)
rodrigo-rodrigues-ctw Apr 8, 2026
556c2df
implementing useSubscribeMessageRange on state transitions panel (#1037)
ctw-joao-luis Apr 8, 2026
8b9b411
Feature/clear alerts on player change (#1016)
thomassedlmayer Apr 9, 2026
8e87806
Migrate eslint to 9.x (#1038)
gabriela-almeida-ctw Apr 10, 2026
3a6d2da
chore(deps-dev): bump the npm_and_yarn group across 3 directories wit…
dependabot[bot] Apr 13, 2026
b6c11d4
chore(deps): bump actions/upload-pages-artifact from 4 to 5 (#1042)
dependabot[bot] Apr 14, 2026
cdf8614
chore(deps): bump follow-redirects from 1.15.11 to 1.16.0 in the npm_…
dependabot[bot] Apr 14, 2026
2de8ee7
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Apr 18, 2026
5d4d305
Fix npm vulnerability (#1056)
gabriela-almeida-ctw Apr 22, 2026
fec3adf
New e2e test (#1055)
gabriela-almeida-ctw Apr 22, 2026
519e8c5
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Apr 22, 2026
8973c0c
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Apr 23, 2026
3172636
update node version on jobs and actual runner to version 24 (#1054)
ctw-joao-luis Apr 23, 2026
d43d54d
New e2e test (#1058)
gabriela-almeida-ctw Apr 23, 2026
b2f0879
separating sonarqube analysis into 2 jobs (#1063)
ctw-joao-luis Apr 27, 2026
c2717f5
chore(deps): bump actions/download-artifact from 4 to 8 (#1069)
dependabot[bot] Apr 28, 2026
0337e7a
Release 1.25.0: Sync main into develop (#1068)
lichtblick-bot Apr 28, 2026
d600ebd
chore(deps): bump sonarsource/sonarqube-scan-action from 7.1.0 to 7.2…
dependabot[bot] Apr 29, 2026
173421d
chore(deps): bump sonarsource/sonarqube-scan-action from 7.2.0 to 8.0…
dependabot[bot] Apr 30, 2026
fd87eac
Associate sonarqube check with PR that triggered it (#1067)
ctw-joao-luis Apr 30, 2026
789fdaf
fix: update VSCode eslint.options (#1075)
rodrigo-rodrigues-ctw Apr 30, 2026
c7b4ad2
fix: State Transition Panel detects settings (#1074)
rodrigo-rodrigues-ctw Apr 30, 2026
f0e2e25
Fix 2 bugs on sonar workflow (#1077)
ctw-joao-luis Apr 30, 2026
b5042ca
chore(deps): bump actions/github-script from 7 to 9 (#1079)
dependabot[bot] May 1, 2026
50e6cea
chore(deps-dev): bump webpack from 5.105.4 to 5.106.2 in the webpack …
dependabot[bot] May 1, 2026
0a62395
chore(deps-dev): bump @babel/preset-env from 7.29.2 to 7.29.3 in the …
dependabot[bot] May 1, 2026
b061936
chore(deps-dev): bump eslint-import-resolver-webpack from 0.13.8 to 0…
dependabot[bot] May 1, 2026
d3a08fe
chore(deps-dev): bump plist from 3.1.0 to 4.0.0 (#1084)
dependabot[bot] May 1, 2026
89c073c
chore(deps-dev): bump @eslint/compat from 1.4.1 to 2.0.5 (#1085)
dependabot[bot] May 1, 2026
cf88a4d
feat: Add axis labels to plot and state transition panels (#1072)
rodrigo-rodrigues-ctw May 4, 2026
93f247a
creating two separate workflows with same name for sonar analysis (#1…
ctw-joao-luis May 4, 2026
9e2f195
fix bug with scripts path (#1088)
ctw-joao-luis May 4, 2026
becbd13
chore(deps): bump the npm_and_yarn group across 1 directory with 2 up…
dependabot[bot] May 7, 2026
3ca644a
chore(deps): bump fast-uri from 3.1.0 to 3.1.2 in the npm_and_yarn gr…
dependabot[bot] May 11, 2026
a0a49b8
chore(deps): bump @babel/plugin-transform-modules-systemjs from 7.29.…
dependabot[bot] May 11, 2026
8a25a50
Bump sanitize-html version to fix vulnerability (#1102)
ctw-joao-luis May 15, 2026
fc79e23
Fix multiple issues on state transitions (#1099)
ctw-joao-luis May 19, 2026
64021a0
bump webpack-dev-server version (#1105)
ctw-joao-luis May 19, 2026
204b44c
Add H.265 parser and rework VideoPlayer for variable decode latency (…
xucheng0813 May 19, 2026
8f3228a
chore(deps): bump @protobufjs/utf8 from 1.1.0 to 1.1.1 in the npm_and…
dependabot[bot] May 19, 2026
c3a90ab
Revert "Add H.265 parser and rework VideoPlayer for variable decode l…
rodrigo-rodrigues-ctw May 19, 2026
c9f32e9
chore(deps): bump sonarsource/sonarqube-scan-action from 8.0.0 to 8.1…
dependabot[bot] May 19, 2026
6628856
Fix: PlotCoordinator and UserScripts interaction/behavior (#1098)
rodrigo-rodrigues-ctw May 19, 2026
28fc446
Release 1.25.1: Sync main into develop (#1112)
lichtblick-bot May 20, 2026
0c534e5
chore(deps): bump actions/stale from 10.2.0 to 10.3.0 (#1113)
dependabot[bot] May 21, 2026
27a1ec7
Apply fix to NPM vulnerabilities (#1118)
gabriela-almeida-ctw May 27, 2026
7629099
chore: Bump Playwright version to 1.60.0 (#1130)
rodrigo-rodrigues-ctw Jun 2, 2026
edc7868
[ai integration] POC to AI Strategy for e2e testing (#1117)
gabriela-almeida-ctw Jun 2, 2026
4ba2db7
feature: Implement session-based mcap resolution (#1122)
rodrigo-rodrigues-ctw Jun 2, 2026
5c20a29
chore(deps): bump the jest group across 1 directory with 3 updates (#…
dependabot[bot] Jun 8, 2026
9571538
chore(deps-dev): bump the babel group across 1 directory with 5 updat…
dependabot[bot] Jun 8, 2026
48decbc
fix(layouts): use updatedAt timestamp for layout version tracking (#1…
gabriela-almeida-ctw Jun 8, 2026
fc859ed
chore(deps-dev): bump @eslint/compat from 2.0.5 to 2.1.0 (#1127)
dependabot[bot] Jun 8, 2026
2ea85a0
chore(deps-dev): bump react-mosaic-component from 6.1.0 to 6.2.0 (#1129)
dependabot[bot] Jun 9, 2026
9b061c5
[ai-integration] Setup coderabbit and update CONTRIBUTING guidelines …
gabriela-almeida-ctw Jun 9, 2026
7a85ad4
chore(deps): bump sonarsource/sonarqube-scan-action from 8.1.0 to 8.2…
dependabot[bot] Jun 11, 2026
0da2621
chore(deps-dev): bump @pmmmwh/react-refresh-webpack-plugin from 0.6.1…
dependabot[bot] Jun 11, 2026
18356f6
chore(deps-dev): bump @types/wicg-file-system-access from 2023.10.6 t…
dependabot[bot] Jun 11, 2026
c2c251c
chore(deps-dev): bump moment-timezone from 0.6.0 to 0.6.2 (#1136)
dependabot[bot] Jun 11, 2026
86ecc65
chore(deps-dev): bump ramda from 0.31.3 to 0.32.0 (#1137)
dependabot[bot] Jun 11, 2026
d7ba344
fix(multi-mcap): add minimum cache floor per source to prevent crash …
luluiz Jun 15, 2026
2e3f950
Fixing cursor not moving in State Transition panel (#1143)
ctw-joao-luis Jun 15, 2026
0fb7cf1
feat: update contributing documentation (#1010)
rodrigo-rodrigues-ctw Jun 15, 2026
bc939e1
feat(multi-mcap): lazy-load remote MCAP sources to avoid full up-fron…
luluiz Jun 17, 2026
6ad05a2
Release 1.26.0: Sync main into develop (#1157)
lichtblick-bot Jun 17, 2026
727c875
chore(deps-dev): bump the webpack group across 1 directory with 3 upd…
dependabot[bot] Jun 17, 2026
cd22174
chore(deps): bump actions/checkout from 6 to 7 (#1161)
dependabot[bot] Jun 19, 2026
c6d026d
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Jun 23, 2026
4ee490c
chore(deps-dev): bump react-i18next from 15.7.3 to 17.0.8 (#1139)
dependabot[bot] Jun 23, 2026
67410d7
chore(deps): bump the npm_and_yarn group across 2 directories with 2 …
dependabot[bot] Jun 23, 2026
8ef9538
chore(deps-dev): bump the electron group across 1 directory with 3 up…
dependabot[bot] Jun 23, 2026
eb5d099
chore(deps): bump actions/cache from 5 to 6 (#1164)
dependabot[bot] Jun 24, 2026
11b5a57
Update yarn version to a stable one to fix Audit CI (#1165)
ctw-joao-luis Jun 24, 2026
d682f9f
Fix some vulnerabilities (#1166)
ctw-joao-luis Jun 24, 2026
6783272
chore(deps-dev): bump dompurify from 3.4.1 to 3.4.11 in the npm_and_y…
dependabot[bot] Jun 24, 2026
0ee8259
Fix - Support typed arrays in raw messages panel (#998)
benedikt-schwering Jun 25, 2026
e1c5df4
docs(ai-agents): add SDD workflow, agent system, and MCP integration …
gabriela-almeida-ctw Jun 26, 2026
4c9503f
chore(deps): bump typescript from 5.9.3 to 6.0.3 (#1138)
dependabot[bot] Jun 26, 2026
fa8d3cf
Bump typescript-eslint to 8.62 (#1168)
ctw-joao-luis Jun 27, 2026
0ea80e6
Add bypass to new actions/checkout safety rule (#1171)
ctw-joao-luis Jun 30, 2026
83e393c
bump protobufjs and remove unnecessary patches (#1173)
ctw-joao-luis Jun 30, 2026
c818a2a
bump dompurify to 3.4.11 (#1174)
ctw-joao-luis Jun 30, 2026
d26e66e
feat: add H265 codec support (#1175)
rodrigo-rodrigues-ctw Jun 30, 2026
db92415
chore(deps-dev): bump the eslint group with 4 updates (#1176)
dependabot[bot] Jul 1, 2026
e3b3240
chore(deps-dev): bump the webpack group with 2 updates (#1178)
dependabot[bot] Jul 1, 2026
89ca2bc
chore(deps-dev): bump electron from 42.4.1 to 43.0.0 in the electron …
dependabot[bot] Jul 1, 2026
856fcb7
chore(deps-dev): bump @playwright/mcp from 0.0.75 to 0.0.77 (#1180)
dependabot[bot] Jul 1, 2026
9344a6d
feat: add layout URL parameter to preselect a layout on startup (#1170)
gabriela-almeida-ctw Jul 1, 2026
98c0d0b
feat: add VS Code workspace and improve worktree setup prompt (#1185)
luluiz Jul 1, 2026
42eee4b
docs: focus CodeRabbit and agents on performance review (#1184)
luluiz Jul 1, 2026
04acc9a
feat: add support for layoutUrl URL parameter (#1050)
skrutzler-knapp Jul 2, 2026
c09e813
perf(h265): reduce per-frame allocations in H.265 decode path (#1188)
luluiz Jul 2, 2026
cbbd611
feat: Add SPS parser to H265 codec (#1186)
rodrigo-rodrigues-ctw Jul 3, 2026
a5a6951
Make layout section collapsable (#1189)
ctw-joao-luis Jul 3, 2026
96e6740
chore(deps): bump flatbuffers_reflection from 0.0.7 to 1.3.0 (#948)
dependabot[bot] Jul 6, 2026
29de254
chore(deps): bump the npm_and_yarn group across 1 directory with 11 u…
dependabot[bot] Jul 6, 2026
2750440
feat: add getTopicSchema and getSchema to PanelExtensionContext (#1191)
rodrigo-rodrigues-ctw Jul 6, 2026
a295259
chore(deps-dev): bump prettier from 3.6.2 to 3.9.4 (#1183)
dependabot[bot] Jul 6, 2026
9c2b8d2
Bump rosbag2-web version (#1194)
ctw-joao-luis Jul 6, 2026
9f030f2
Fix duplicate Default layout creation (#1199)
luluiz Jul 8, 2026
9feca4c
chore(security): raise CI npm audit to high and fix high-severity adv…
luluiz Jul 8, 2026
19aeddf
Add biome formatter to replace prettier and add pre-commit hook (#1197)
ctw-joao-luis Jul 8, 2026
269e9eb
fix(e2e): align regression tests with RawMessagesVirtual default layo…
luluiz Jul 9, 2026
a6e9939
improve collapse by adding persistence and trigger on certain actions…
ctw-joao-luis Jul 9, 2026
ef0aafe
Release 1.27.0: Sync main into develop (#1207)
lichtblick-bot Jul 10, 2026
887ba1f
chore(deps): bump actions/stale from 10.3.0 to 10.4.0 (#1209)
dependabot[bot] Jul 13, 2026
5b5e9c1
Protobuf message field names are now preserved in their original snak…
ctw-joao-luis Jul 13, 2026
6290403
Release 1.27.1: Sync main into develop (#1212)
lichtblick-bot Jul 13, 2026
5d4200e
chore(deps-dev): bump the storybook group across 1 directory with 3 u…
dependabot[bot] Jul 13, 2026
1e0c60d
Fix packaging regression that doubles Lichtblick artifacts size (#1213)
ctw-joao-luis Jul 14, 2026
d51ef9b
perf: coalesce nearby remote MCAP reads to cut HTTP Range requests (#…
luluiz Jul 14, 2026
91f9304
chore(deps): bump actions/setup-node from 6 to 7 (#1214)
dependabot[bot] Jul 15, 2026
12b08d9
feat(3d-panel): configurable scene lighting controls (#1123)
gordon-n-stevenson Jul 15, 2026
1623f1f
fix(AppBar): use palette color instead of hardcode white (#1152)
quentin-couton Jul 15, 2026
bea34f9
chore(deps): bump sonarsource/sonarqube-scan-action from 8.2.0 to 8.2…
dependabot[bot] Jul 16, 2026
c4a5aa1
Fix log interface contract (#1205)
ctw-joao-luis Jul 16, 2026
ab9c0c1
feature: Add alert functionality in panel context (#1218)
rodrigo-rodrigues-ctw Jul 17, 2026
fdde526
chore(deps): bump @foxglove/schemas from 1.9.0 to 1.13.0 (#1216)
gordon-n-stevenson Jul 21, 2026
8a61a61
chore(deps): bump the npm_and_yarn group across 4 directories with 2 …
dependabot[bot] Jul 21, 2026
96b69c6
bump tar and js-yaml versions (#1229)
ctw-joao-luis Jul 21, 2026
68d996b
chore(deps-dev): bump react-window and @types/react-window (#1181)
dependabot[bot] Jul 21, 2026
0c1ca18
e2e: rename panel title (#1234)
rodrigo-rodrigues-ctw Jul 22, 2026
189dee3
e2e: Add Indicator panel in new layout with topic selection (#1233)
rodrigo-rodrigues-ctw Jul 22, 2026
25623eb
feature: validate imported layouts (#1230)
rodrigo-rodrigues-ctw Jul 22, 2026
ac93193
e2e: add Image panel in new layout and select a topic (#1232)
rodrigo-rodrigues-ctw Jul 22, 2026
d1ae031
ai: Add branch naming instructions and ensure headless mode for e2e t…
rodrigo-rodrigues-ctw Jul 22, 2026
b3fa6b1
[fix]: fix virtualized lists after migration to react-window v2 (#1236)
gabriela-almeida-ctw Jul 22, 2026
2e2e2e3
fix vulnerabilities (#1235)
ctw-joao-luis Jul 22, 2026
bccac9c
chore: add tmp folder to .gitignore (#1238)
luluiz Jul 22, 2026
efdde87
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Jul 22, 2026
763406f
Unit tests for BottomBar section of UserScripts panel (#1240)
ctw-joao-luis Jul 23, 2026
cab9317
Unit tests for sidebar component of userscript panel (#1242)
ctw-joao-luis Jul 23, 2026
edc6bb5
Alerts section with new actions and dynamic alert notification color …
ctw-joao-luis Jul 24, 2026
6cfbdbf
feature: Improve UI/UX for layout validation toast bars (#1244)
rodrigo-rodrigues-ctw Jul 27, 2026
7d2eccf
[fix]: fix frontmatter, update file names to keep consistency
gabriela-almeida-ctw Jul 27, 2026
3e9f6fd
add filter text for node editor
rodrigo-rodrigues-ctw Jul 28, 2026
98af1ae
chore: reconcile develop ancestry with main (fix frozen merge-base) (…
luluiz Jul 28, 2026
afbcb4a
address sonar
rodrigo-rodrigues-ctw Jul 28, 2026
6bec8b1
chore: merge main (v1.28.0) into develop to reconcile ancestry (advan…
luluiz Jul 28, 2026
bdedbba
ci: keep sync PRs as merge commits to prevent frozen merge-base
luluiz Jul 28, 2026
a01157f
chore: reconcile develop ancestry with main v1.28.0 (advance frozen m…
luluiz Jul 28, 2026
bcbd52f
ci: use shell expansion for BRANCH_NAME in gh pr merge (avoid express…
luluiz Jul 28, 2026
26b9c40
chore(deps): bump actions/stale from 10.4.0 to 11.0.0
dependabot[bot] Jul 29, 2026
69b1a45
[dependabot skip] Fix yarn.lock
dependabot[bot] Jul 29, 2026
d5fe791
chore(deps): bump actions/stale from 10.4.0 to 11.0.0 (#1257)
ctw-joao-luis Jul 29, 2026
7378f29
chore(deps): bump the npm_and_yarn group across 1 directory with 2 up…
dependabot[bot] Jul 29, 2026
0adfeab
[dependabot skip] Fix yarn.lock
dependabot[bot] Jul 29, 2026
dd45aeb
chore(deps): bump the npm_and_yarn group across 1 directory with 2 up…
ctw-joao-luis Jul 29, 2026
616bf56
[fix]: fix frontmatter, update file names to keep consistency (#1245)
gabriela-almeida-ctw Jul 30, 2026
7f89776
ci: keep main→develop sync PRs as merge commits (prevent frozen merge…
luluiz Jul 30, 2026
462728d
chore(deps): bump docker/login-action from 4 to 4.5.2
dependabot[bot] Jul 31, 2026
0d0c805
[dependabot skip] Fix yarn.lock
dependabot[bot] Jul 31, 2026
a69a009
chore(deps): bump docker/login-action from 4 to 4.5.2 (#1259)
ctw-joao-luis Jul 31, 2026
33945d4
Enhance Docker build for multi-platform support
pbert519 Jul 31, 2026
c3d6b2f
feature: Add text filter for node editor (#1250)
rodrigo-rodrigues-ctw Jul 31, 2026
528be41
fix: bound worker memory for large multi-MCAP sessions to prevent OOM
luluiz Jul 31, 2026
0eeae03
style: fix formatting in multi-MCAP OOM test files
luluiz Jul 31, 2026
e8e5ff8
feat: memory-weighted pool budget, earliest-warm, pin-guard for multi…
luluiz Jul 31, 2026
8cb8a1e
fix: make layout userNodes optional in validation
luluiz Jul 31, 2026
2b5b318
feature: memoize useStructuredItemsByPath computed structure map
luluiz Jul 31, 2026
4cd8ab4
fix: use JSON.stringify for validTypes cache keys to avoid comma coll…
luluiz Jul 31, 2026
04eae7a
fix: reject explicit null userNodes in layout validation
luluiz Jul 31, 2026
3c13097
chore: remove userNodes comments in layout validation
luluiz Jul 31, 2026
f1932c3
chore: fix formatting (remove trailing blank lines in tests)
luluiz Jul 31, 2026
32bee67
refactor: trim redundant comments in multi-MCAP OOM changes
luluiz Jul 31, 2026
d179d60
refactor: extract reader-weight estimation and consolidate pool types
luluiz Jul 31, 2026
05bebc6
fix: avoid unnecessary array spread when iterating activeUncachedReads
luluiz Jul 31, 2026
f63bce4
fix: satisfy FileStream's end event overload in test mocks
luluiz Jul 31, 2026
35db54a
fix: stop re-exporting unused HydratedSourcePoolOptions type
luluiz Jul 31, 2026
6d22655
chore(deps-dev): bump the storybook group with 2 updates
dependabot[bot] Aug 1, 2026
fd0ec84
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 1, 2026
f9cd7a2
chore(deps-dev): bump electron in the electron group
dependabot[bot] Aug 1, 2026
69c145e
chore(deps-dev): bump jest-canvas-mock in the jest group
dependabot[bot] Aug 1, 2026
469db32
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 1, 2026
bb9211e
chore(deps-dev): bump readable-stream from 4.4.2 to 4.7.0
dependabot[bot] Aug 1, 2026
f13d033
chore(deps-dev): bump moment-timezone from 0.6.2 to 0.6.3
dependabot[bot] Aug 1, 2026
e34885b
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 1, 2026
79edbe4
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 1, 2026
7c62c68
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 1, 2026
6e7194f
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
dependabot[bot] Aug 1, 2026
241e38b
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 1, 2026
7843abf
chore(deps): bump docker/login-action from 4.5.2 to 4.6.0
dependabot[bot] Aug 3, 2026
650226b
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 3, 2026
e06d033
chore(deps): bump docker/login-action from 4.5.2 to 4.6.0 (#1274)
ctw-joao-luis Aug 3, 2026
3d3fce3
chore(deps-dev): bump the npm_and_yarn group across 2 directories wit…
ctw-joao-luis Aug 3, 2026
1ff7587
chore(deps-dev): bump moment-timezone from 0.6.2 to 0.6.3 (#1272)
ctw-joao-luis Aug 3, 2026
7a3bca1
chore(deps-dev): bump readable-stream from 4.4.2 to 4.7.0 (#1271)
ctw-joao-luis Aug 3, 2026
757f4ae
chore(deps-dev): bump jest-canvas-mock from 2.5.2 to 2.5.8 in the jes…
ctw-joao-luis Aug 3, 2026
bf8700f
chore(deps-dev): bump electron from 43.0.0 to 43.2.0 in the electron …
ctw-joao-luis Aug 3, 2026
3ffa677
chore(deps-dev): bump the storybook group with 2 updates (#1265)
ctw-joao-luis Aug 3, 2026
b21274e
fix: make layout userNodes optional in validation (#1263)
luluiz Aug 3, 2026
809195e
Enhance Docker build for multi-platform support (#1275)
ctw-joao-luis Aug 3, 2026
56a2234
fix: address PR review feedback from rodrigo-rodrigues-ctw
luluiz Aug 3, 2026
976f6dd
fix: address remaining review findings (pool minResident clamp, worke…
luluiz Aug 3, 2026
f3632c8
docs(agents): reflect HydratedSourcePool architecture from PR #1262
luluiz Aug 3, 2026
6c20f3f
chore(deps): bump docker/setup-qemu-action from 3 to 4
dependabot[bot] Aug 4, 2026
df3f48c
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 4, 2026
14dc298
chore(deps): bump docker/setup-qemu-action from 3 to 4 (#1279)
ctw-joao-luis Aug 4, 2026
84a87f2
chore(deps-dev): bump dompurify
dependabot[bot] Aug 4, 2026
4e06616
[dependabot skip] Fix yarn.lock
dependabot[bot] Aug 4, 2026
0beb5dd
(feat): improvements
luluiz Aug 4, 2026
096f74d
fix lint
luluiz Aug 4, 2026
93f7346
fix: refactor #openInner method and add OpenedInner type for improved…
luluiz Aug 4, 2026
8e83814
docs(agents): document multiFileHydrationOptions.ts and session-persi…
luluiz Aug 4, 2026
e943514
fix: bound worker memory for large multi-MCAP sessions to prevent OOM…
luluiz Aug 4, 2026
135ccf4
Merge remote-tracking branch 'origin/develop' into feature/improve-st…
luluiz Aug 4, 2026
5f5c3dd
Merge branch 'develop' into feature/update-agent-skill-specs-hydrated…
luluiz Aug 4, 2026
b4271b0
docs: fix HydratedSourcePool spec inaccuracies in agent/skill docs
luluiz Aug 4, 2026
85c009d
docs: clarify totalCacheSizeInBytes is not a hard aggregate cap
luluiz Aug 4, 2026
be0869d
docs(agents): add release-process skill and lb-release prompt
luluiz Aug 4, 2026
b88f29e
docs: address PR review feedback on release-process skill and prompt
luluiz Aug 4, 2026
38f84a6
chore(deps-dev): bump dompurify from 3.4.11 to 3.4.12 in the npm_and_…
ctw-joao-luis Aug 5, 2026
b384fcf
fix high vulnerabilities
ctw-joao-luis Aug 5, 2026
779f365
fix: refactor tests to use dynamic mock values for schema names and p…
luluiz Aug 5, 2026
b2cf2e6
docs: reference packageManager field instead of hardcoding Yarn version
luluiz Aug 5, 2026
165d7ae
Fix audit high vulnerabilities (#1284)
luluiz Aug 5, 2026
e9d7b2d
feature: memoize useStructuredItemsByPath computed structure map (#1264)
luluiz Aug 5, 2026
5507491
docs(agents): add release-process skill and lb-release prompt (#1283)
luluiz Aug 5, 2026
5e362cd
docs(agents): reflect HydratedSourcePool architecture from PR #1262 (…
luluiz Aug 5, 2026
e29f7d2
fix: restore version fields to 1.28.0 before v1.28.1 release bump
luluiz Aug 5, 2026
a07fb5e
fix: update manual workflow_dispatch trigger to require explicit tag …
luluiz Aug 5, 2026
ddd30b7
fix: add missing permissions for actions and contents in stale workflow
luluiz Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/agents/lb-message-pipeline.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "MessagePipeline specialist covering the React context, zustand store, subscription management, and render state building. Use for data flow from Player to panels."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick MessagePipeline — the central data bus that connects Players to Panels.

Expand Down
6 changes: 5 additions & 1 deletion .github/agents/lb-orchestrator.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,14 @@ You are the top-level routing agent for the Lichtblick monorepo. Your job is to
Parallelism happens at two distinct layers — do not conflate them:

1. **Within a single task** — governed by the Write-Ownership Principle above. Multiple agents may read the same files; exactly one writer edits a given path. This is logical parallelism inside one checkout; no git worktree is involved.
2. **Across independent tasks** — handled at the session level using git worktrees (`setup-worktree.prompt.md`), set up **once per task by a human before** orchestration begins, ideally with a separate session per worktree.
2. **Across independent tasks** — handled at the session level using git worktrees (`lb-setup-worktree.prompt.md`), set up **once per task by a human before** orchestration begins, ideally with a separate session per worktree.

This orchestrator does **not** create worktrees: it has no `execute` tool, and prompt files are human-invoked entry points, not agent-callable. Do not route a task expecting a sub-agent to provision its own worktree — sub-agent invocations share this workspace's filesystem and working directory.

## Release Requests

Release-cutting requests (creating a release branch, triggering a release, or verifying that a release/RC published successfully) are **not** routed to a sub-agent. Point the user to `.github/prompts/lb-release.prompt.md`, which is a human-invoked runbook. Like `lb-setup-worktree.prompt.md`, it is a prompt file rather than an agent tool target, and this orchestrator has no `execute` tool, so release execution stays a human-invoked entry point rather than an agent delegation.

## Routing Rules

### Tier 1: Cross-cutting (action-capable)
Expand Down
1 change: 1 addition & 0 deletions .github/agents/lb-panel-image.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "Image panel specialist covering camera image visualization within the 3D rendering context (ImageMode). Use for image display, camera models, still image and H.264 video decoding, and annotation overlays."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick Image panel — which is actually a specialized mode of the 3D panel (ThreeDeeRender).

Expand Down
1 change: 1 addition & 0 deletions .github/agents/lb-panel-log.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "Log panel specialist covering virtualized log display, react-window VariableSizeList, dynamic row heights, autoscroll behavior, and log level filtering. Use for log visualization and filtering issues."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick Log panel — a high-performance log viewer with virtualized rendering and filtering.

Expand Down
1 change: 1 addition & 0 deletions .github/agents/lb-panel-map.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "Map panel specialist covering Leaflet integration, GeoJSON rendering, NavSatFix message handling, and the FilteredPointLayer pixel-deduplication system. Use for geographic visualization and GPS data display."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick Map panel — a geographic visualization tool built on Leaflet for displaying GPS/NavSatFix data.

Expand Down
1 change: 1 addition & 0 deletions .github/agents/lb-panel-plot.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "Plot panel specialist covering PlotCoordinator, TimestampDatasetsBuilder, Chart.js Worker rendering, OffscreenCanvas, and time-series data extraction. Use for plot visualization, chart performance, and dataset management."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick Plot panel — a high-performance time-series chart built on Chart.js with Worker-based rendering.

Expand Down
1 change: 1 addition & 0 deletions .github/agents/lb-panel-state-transitions.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "StateTransitions panel specialist covering discrete state visualization using TimeBasedChart, message-path extraction, and preloaded data range subscriptions. Use for state timeline display and discrete event visualization."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick StateTransitions panel — a timeline visualization for discrete state changes extracted from messages.

Expand Down
1 change: 1 addition & 0 deletions .github/agents/lb-panel-user-scripts.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "UserScripts panel specialist covering the Monaco editor integration, TypeScript compilation, script execution in SharedWorkers, diagnostics, and the user script API. Use for script editor, script runtime, and script diagnostics."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick UserScripts panel — the in-app TypeScript editor that lets users write custom message transformations.

Expand Down
1 change: 1 addition & 0 deletions .github/agents/lb-panels-general.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "General panel infrastructure specialist covering PanelExtensionAdapter, renderState building, panel lifecycle, pauseFrame, and the extension API contract. Use for panel framework patterns and creating new panels."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on the Lichtblick panel infrastructure — the framework that connects panels to the MessagePipeline and manages their lifecycle.

Expand Down
6 changes: 6 additions & 0 deletions .github/agents/lb-player.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ const cancel = subscribeMessageRange({
| `WorkerIterableSource` | Runs an `IIterableSource` in a Web Worker via Comlink |
| `WorkerSerializedIterableSource` | Serialized variant for Worker-based sources |

`IIterableSource` also exposes optional lifecycle hooks: `terminate?()` for cleanup on close, and
`prewarm?()` to warm a source before it becomes active (used by pooled/multi-file sources; failures are non-fatal).

### IteratorResult Types
```typescript
type IteratorResult =
Expand Down Expand Up @@ -288,6 +291,8 @@ type IteratorResult =
- `packages/suite-base/src/players/IterablePlayer/DeserializingIterableSource.ts` — lazy deserialization + sampling
- `packages/suite-base/src/players/IterablePlayer/BlockLoader.ts` — preloading for full subscriptions
- `packages/suite-base/src/players/IterablePlayer/WorkerIterableSource.ts` — Worker-based source (Comlink)
- `packages/suite-base/src/players/IterablePlayer/shared/MultiIterableSource.ts` — multi-file/multi-URL orchestration; deep dive in `@lb-remote-connection`'s knowledge base
- `packages/suite-base/src/players/IterablePlayer/shared/HydratedSourcePool.ts` — bounded LRU pool for resident heavyweight per-file readers; deep dive in `@lb-remote-connection`'s knowledge base
- `packages/suite-base/src/players/IterablePlayer/CachingIterableSource.ts` — block-level cache
- `packages/suite-base/src/players/FoxgloveWebSocketPlayer/index.ts` — WebSocket player
- `packages/suite-base/src/players/FoxgloveWebSocketPlayer/WorkerSocketAdapter.ts` — Worker WebSocket
Expand All @@ -301,6 +306,7 @@ type IteratorResult =
- Modifying `#allTopics` identity without triggering `reset-playback-iterator` (misses new topics)
- Calling `seekPlayback` before initialization completes (must store in `#seekTarget` for later)
- Not clamping times to `[start, end]` range (causes source errors)
- When `initialize()` and `terminate()` can race on shared mutable fields, `terminate()` must capture fields into locals before any `await`, clear instance fields synchronously, and run dispose/cleanup in a `finally` block so rejections do not skip cleanup or touch newer state; this pattern was established in `WorkerSerializedIterableSource.terminate()` this session, and similar sibling lifecycles (for example `WorkerIterableSource`) have not yet been audited
Comment thread
luluiz marked this conversation as resolved.
- UserScriptPlayer: emitting upstream messages twice when scripts change (use empty messages array)

## Skills Reference
Expand Down
73 changes: 58 additions & 15 deletions .github/agents/lb-remote-connection.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,14 @@ IterablePlayer (state machine, tick loop)
URLs: [url1.mcap, url2.mcap, url3.mcap]
MultiIterableSource (500MB total cache ÷ N sources)
MultiIterableSource (500MB total cache ÷ N, floored by MIN_CACHE_PER_SOURCE_BYTES)
├── McapIterableSource(url1, ~166MB cache)
├── McapIterableSource(url2, ~166MB cache)
└── McapIterableSource(url3, ~166MB cache)
├── shared HydratedSourcePool (bounds resident McapIndexedReaders by count + bytes)
│ ├── McapIterableSource(url1, ~166MB cache)
│ ├── McapIterableSource(url2, ~166MB cache)
│ └── McapIterableSource(url3, ~166MB cache)
▼ (each initialized in parallel)
▼ (each initialized under bounded concurrency)
mergeSequentialIterators (min-heap, lazy source activation)
Expand All @@ -83,6 +84,9 @@ WorkerSerializedIterableSource → BufferedIterableSource → Player
| `IterablePlayer/Mcap/BatchingReadable.ts` | Coalesces nearby `IReadable.read()` calls into fewer, larger reads |
| `IterablePlayer/Mcap/McapIterableSource.ts` | Factory: indexed vs streaming decision |
| `IterablePlayer/Mcap/McapIndexedIterableSource.ts` | Random access via chunk indexes |
| `IterablePlayer/Mcap/readerWeight.ts` | Heuristic byte-weight estimate for a `McapIndexedReader`, used as the pool's `weigh()` hook |
| `IterablePlayer/shared/HydratedSourcePool.ts` | Bounded LRU pool of resident heavyweight per-file readers (byte + count budget) |
| `IterablePlayer/shared/multiFileHydrationOptions.ts` | Shared hydration-override merging (`maxHydratedSources`/`maxHydratedBytes`/`initConcurrency`), used by both data source factories and the MCAP worker |
| `IterablePlayer/shared/MultiIterableSource.ts` | Multi-file orchestration |
| `IterablePlayer/shared/utils/mergeSequentialIterators.ts` | Heap-based lazy iterator merge |
| `IterablePlayer/shared/utils/sourceTimeOverlap.ts` | Time range filtering |
Expand Down Expand Up @@ -124,8 +128,40 @@ WorkerSerializedIterableSource → BufferedIterableSource → Player

### Error Recovery
- **`keepReconnectingCallback` set** (browser mode): unlimited retries, UI notified of reconnection state
- **No callback**: two errors within 100ms → fatal, rejects all pending reads
- **Single error**: destroys connection, retries via `#updateState()`
- **No callback**: two errors within 100ms → fatal, routes through shared `#closeWithError(error)` cleanup
- **`close()` + fatal path**: both destroy the active stream, reject pending `#readRequests`, cancel `#activeUncachedReads`, and reset `#virtualBuffer`

---

## HydratedSourcePool (Bounded Reader Pool)

`HydratedSourcePool` bounds **resident heavyweight per-file `McapIndexedReader` instances** (reader/deserializer state sized from chunk-index and channel counts). It does **not** bound decoded message data or each source's byte cache; those still live in `BufferedIterableSource`, `CachedFilelike`, and downstream playback buffers.

```typescript
const pool = new HydratedSourcePool({
maxCount: dataSource.maxHydratedSources ?? 4,
maxBytes: dataSource.maxHydratedBytes ?? 512 * 1024 * 1024,
});
```
(`minResident` is not passed at the call site — it relies on `HydratedSourcePool`'s own internal default of `1`.)

- **Hybrid budget**: `maxCount` caps resident readers, `maxBytes` caps total estimated resident weight, and `minResident` keeps a small floor hot (clamped so it never exceeds the count cap). `MultiIterableSource` constructs one shared pool and passes it to **both** the local-files and remote-urls branches.
- **API contract**:
- `acquire(token, hydrator)`: open or reuse a resident reader, increment its pin count, refresh LRU recency, and keep it non-evictable until a matching `release(token)`. After `terminate()`, `acquire()` throws instead of rehydrating.
- `release(token)`: decrement the pin count (floor 0) and opportunistically evict
- `admit(token, hydrator, value)`: seed an already-open reader (for example from `initialize()` / prewarm) without calling `open()`. If the token is already resident, or the pool is already terminated, the redundant value is closed instead of replacing the existing entry.
- `terminate()`: mark the pool terminated first, then close every resident entry in parallel so late `acquire()` / `admit()` calls cannot repopulate it
- **Eviction semantics**: entries live in a `Map<object, Entry>` whose insertion order is the LRU order. Re-inserting on access moves an entry to the most-recent end. Eviction scans from oldest to newest and closes the first **unpinned** entries until the pool is back under budget. If everything remaining is pinned, the pool may temporarily stay over budget by design.
- **Weight heuristic** (`readerWeight.ts`): `weigh()` defaults to `1`, but MCAP readers use an approximate byte estimate so larger readers churn first:
```typescript
READER_BASE_BYTES +
reader.chunkIndexes.length * BYTES_PER_CHUNK_INDEX_BASE +
messageIndexEntries * BYTES_PER_MESSAGE_INDEX_ENTRY +
reader.channelsById.size * BYTES_PER_CHANNEL
```
where `messageIndexEntries` sums `chunkIndex.messageIndexOffsets.size` across all chunk indexes. There is no `cacheBytes` term — the weight reflects only reader/index/channel structure size, not each source's byte-cache allocation. The absolute numbers are heuristic; relative weighting is what matters.
- **Indexed URL reuse vs unindexed bypass**: for `type: "url"` sources, `McapIterableSource` keeps one session-long `#persistentReadable` (`RemoteFileReadable` + `CachedFilelike` cache) and reuses it across pool eviction/re-`acquire()`; the pool only evicts the heavyweight `McapIndexedReader` layer, not that transport/cache. If a source proves unindexed (or the URL path falls back to raw `fetch()` streaming), it skips `HydratedSourcePool` entirely and lives in `#eagerInner` for the whole session, so unindexed files are outside the pool's count/byte budget. `#persistentReadable` is also closed unconditionally when the whole `McapIterableSource` is `terminate()`d at normal session end — not only on failed init or unindexed fallback.

---

Expand Down Expand Up @@ -180,18 +216,22 @@ getBackfillMessages({ topics, time }) {
### Cache Budget Distribution
```typescript
const totalCache = dataSource.totalCacheSizeInBytes ?? 500 * 1024 * 1024; // 500MB total
const perSourceCache = Math.floor(totalCache / urls.length);
// Each source gets: totalCache / N
const minPerSource = dataSource.minCachePerSourceBytes ?? 10 * 1024 * 1024; // 10MB floor
const perSourceCache = Math.max(minPerSource, Math.floor(totalCache / urls.length));
```
- 2 files → 250MB each
- 5 files → 100MB each
- More files = more network re-fetches per file
- Hundreds of files → floor at 10MiB per source by default (override `minCachePerSourceBytes`)
- Prevents `totalCache / N` from dropping below a viable per-file metadata-read budget; if `perSourceCache * N > totalCache`, a `log.warn` notes the aggregate may exceed the nominal budget

### Initialization
1. Creates N `McapIterableSource` instances (one per URL) with divided cache budget
2. Initializes all sources **in parallel** (`Promise.all`)
3. Merges results: topics, datatypes, metadata, topicStats, alerts, publishersByTopic
4. Sorts sources by start time (`source.getStart()`)
1. Constructs one shared `HydratedSourcePool` before branching on local files vs remote URLs (`maxHydratedSources ?? 4`, `maxHydratedBytes ?? 512 MiB`) and passes `pool` to every source constructor.
2. Creates N `McapIterableSource` instances (one per URL) with the divided cache budget; `readAheadEnabled` still defaults to `true` for both single- and multi-file sessions. What changes for multi-file (`numSources > 1`) is `readAheadBufferBytes`, which defaults to `min(2 MiB, perSourceCache / 4)` instead of the legacy 50 MiB default, bounding read-ahead so it doesn't outrun the smaller per-source cache slice.
3. Initializes sources under a `Semaphore` (`initConcurrency ?? 4`, normalized to a positive integer) instead of unconstrained `Promise.all`; the returned `Initialization[]` still preserves input order.
4. Merges results: topics, datatypes, metadata, topicStats, alerts, publishersByTopic.
5. Sorts sources by start time (`source.getStart()`), then `#prewarmEarliestSources()` prewarms the earliest 3 sources in **reverse** order so the t=0 source ends up most-recently-used in the pool. Prewarm failures are logged at debug and treated as non-fatal.

- `terminate()`: runs `Promise.allSettled` over `source.terminate?.()`, logs each rejection, re-throws the first rejection after cleanup, and always tears down `pool.terminate()` in a `finally` block.

### Message Iteration — Lazy Sequential Merge
```typescript
Expand Down Expand Up @@ -308,15 +348,16 @@ WorkerSerializedIterableSource McapIterableSourceWorker.worker.ts
6. **Lazy sequential merge** avoids simultaneous HTTP streams to all remote files
7. **Indexed MCAP** required for acceptable remote performance (random access via chunk indexes)
8. **WASM decompression preload** prevents initialization failures under slow network
9. **Cache budget division** for multi-file: consider fewer large files over many small ones
9. **Cache budget division** for multi-file uses a 10MiB per-source floor; many small files still increase refetch pressure and reader churn
10. **BufferedIterableSource** (10s, 300MB) smooths network latency for playback
11. **Read coalescing** (`BatchingReadable`): merges `read()` calls arriving in the same microtask tick (gap <64KiB, ≤4MiB span) before they reach `CachedFilelike`

## Common Pitfalls
- Server missing `Accept-Ranges: bytes` header → fails at open
- CORS not exposing `Accept-Ranges` header → browser can't detect range support
- Unindexed MCAP over remote → falls back to full streaming (slow, limited to 1GB)
- Too many remote files → cache per file drops below useful threshold
- Too many remote files → per-source cache hits the 10MiB floor, aggregate cache may exceed the nominal total, and readers churn more often
- Worker teardown races → follow the capture-before-`await` plus `disposeRemote()`-in-`finally` pattern from `WorkerSerializedIterableSource.terminate()` or an older terminate can leak/dispose the wrong worker
- S3 presigned URLs with non-GET method → `BrowserHttpReader.open()` requires GET

## Skills Reference
Expand All @@ -325,3 +366,5 @@ WorkerSerializedIterableSource McapIterableSourceWorker.worker.ts
- Worker/Comlink patterns: `read_file(".github/skills/web-workers/SKILL.md")`
- BufferedIterableSource or BlockLoader details: `read_file(".github/skills/caching-internals/SKILL.md")`
- Network/read latency profiling and buffering performance: `read_file(".github/skills/performance/SKILL.md")`
- Bounded reader pool implementation: `read_file("packages/suite-base/src/players/IterablePlayer/shared/HydratedSourcePool.ts")`
- Reader weight heuristic: `read_file("packages/suite-base/src/players/IterablePlayer/Mcap/readerWeight.ts")`
1 change: 1 addition & 0 deletions .github/agents/lb-websocket-connection.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: "WebSocket connection specialist covering FoxgloveWebSocketPlayer, WorkerSocketAdapter, and the Foxglove WebSocket protocol. Use for live data streaming, connection lifecycle, and real-time message handling."
tools: ["read", "edit", "search", "execute"]
---

You are an expert on live WebSocket connections in Lichtblick — the real-time data path from robot/simulation to visualization.

Expand Down
Loading
Loading