Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
66c6070
spec: add
TomCC7 Sep 21, 2026
4cebee8
feat: generate native CDR messages without ROS
TomCC7 Sep 21, 2026
d742ade
fix: bound schema validation and local demo socket
TomCC7 Sep 21, 2026
f0e9e5a
fix: include raw LCM crate in recorder Nix sources
TomCC7 Sep 21, 2026
bbba64a
fix: prepare generator-layer test dependencies and namespace imports
TomCC7 Oct 1, 2026
4749cc9
refactor: generate Python message source without native extensions
TomCC7 Oct 1, 2026
9a7ac76
fix: expose generated Python source exports and order test imports
TomCC7 Oct 1, 2026
681e874
fix: preserve bulk byte payloads and immutable borrowed views
TomCC7 Oct 1, 2026
ee46c76
fix: preserve generated message type in Python decode typing
TomCC7 Oct 1, 2026
7bbdc19
ci: install type checker for generated source consumer gate
TomCC7 Oct 1, 2026
5397024
ci: provide source codec dependency in lint environment
TomCC7 Oct 1, 2026
baac948
refactor: isolate generator review from message catalog and bus integ…
TomCC7 Oct 8, 2026
2fbaf00
docs: locate upstream maintenance in package review layer
TomCC7 Oct 8, 2026
70eec80
refactor: delegate Python and C++ message declarations to upstream ge…
TomCC7 Oct 9, 2026
f7484f4
test: preserve empty message value behavior with upstream dataclasses
TomCC7 Oct 9, 2026
095db45
fix: keep upstream generator imports portable in standalone backend
TomCC7 Oct 9, 2026
15de656
docs: record upstream replacement evidence and Rust packaging gap
TomCC7 Oct 9, 2026
762f5f0
refactor: delegate Rust and CDR traversal generation upstream
TomCC7 Oct 9, 2026
4d2c386
fix: preserve literal adapter markers in Rust message defaults
TomCC7 Oct 9, 2026
49a9c8a
fix: keep upstream vendored sources outside first-party mypy discovery
TomCC7 Oct 9, 2026
99b4527
fix: preserve namespace packages in vendored ROSIDL layout
TomCC7 Oct 9, 2026
eb5beed
fix(ci): provision TurboJPEG for macOS integration tests
TomCC7 Oct 9, 2026
5a741b5
test(cdr): report standalone codec and parser coverage
TomCC7 Oct 9, 2026
3be03c9
refactor(cdr): make native libraries the first-layer generator and su…
TomCC7 Oct 9, 2026
3030878
test(cdr): isolate SDK lookup in compiler cache checks
TomCC7 Oct 9, 2026
6287ed8
fix: subscribe to skill transforms at startup and control tick test time
TomCC7 Oct 10, 2026
d69551c
refactor: reuse verified upstream ROSIDL parser in build artifacts
TomCC7 Oct 10, 2026
baa8818
docs: address CDR proposal review and hardware dependency scope
TomCC7 Oct 11, 2026
1945949
build: add generic offline message source packages and pinned prepara…
TomCC7 Oct 12, 2026
6b04081
refactor: prepare upstream schema inputs outside the backend
TomCC7 Oct 13, 2026
409ac88
fix: preserve prepared native targets in exported toolchains
TomCC7 Oct 14, 2026
bda8c4f
fix: build Rust packages that only re-export dependency types
TomCC7 Oct 14, 2026
6ae6644
fix: preserve message outputs when generation fails
TomCC7 Oct 14, 2026
8809870
refactor: unify message generation entrypoints and simplify package code
TomCC7 Oct 14, 2026
5887b8c
refactor: remove unused message setup and reference fixtures
TomCC7 Oct 14, 2026
8cb9681
refactor: colocate message preparation with generator
TomCC7 Oct 14, 2026
85897da
refactor: use published dimos-cdrgen in CDR integration
TomCC7 Oct 15, 2026
4e79850
refactor: reduce CDR integration to published library adapters
TomCC7 Oct 15, 2026
78cc39f
fix: retain current main settings after CDR rebase
TomCC7 Oct 15, 2026
870b502
feat: package generated messages for external applications
TomCC7 Sep 21, 2026
dd45df9
fix: build external messages with their bundled generator
TomCC7 Sep 22, 2026
e9b72b9
fix: prepare Fast CDR before package-layer CI installs
TomCC7 Oct 1, 2026
6fca8f9
fix: supply package-layer typing and runner build prerequisites
TomCC7 Oct 1, 2026
c1db7e6
test: declare pybind11 for bundled generator helper checks
TomCC7 Oct 1, 2026
67ab44d
fix: enforce built-in message alignment in main CI
TomCC7 Oct 1, 2026
dadb963
fix: require alignment toolchain in its dedicated CI gate
TomCC7 Oct 1, 2026
575a9c0
refactor: build curated message packages from canonical sources
TomCC7 Oct 12, 2026
b36510f
refactor: prepare pinned builtin schemas outside package hooks
TomCC7 Oct 13, 2026
bf0fe7e
refactor: build the curated catalog with published cdrgen
TomCC7 Oct 15, 2026
bff245f
fix(messages): check generated sources after package preparation
TomCC7 Oct 15, 2026
5a07c6a
feat: record generated CDR with self-contained MCAP schemas
TomCC7 Sep 21, 2026
3cb96b7
refactor: use published schema registry for MCAP consumers
TomCC7 Oct 15, 2026
1cbbec8
docs: add installed message wheel verification example
TomCC7 Oct 16, 2026
fbccb5c
chore: sync cc/feat/remove-lcm-encoding with main
TomCC7 Oct 19, 2026
6cf23e4
chore: sync message packages with current main integration
TomCC7 Oct 19, 2026
5a29a09
chore: sync cc/feat/cdr-mcap-viewers with cc/feat/cdr-message-packages
TomCC7 Oct 19, 2026
bbccaff
fix(ci): prepare message sources for standalone PyO3 job
TomCC7 Oct 19, 2026
f966c81
chore: include message preparation in new native CI layout
TomCC7 Oct 19, 2026
3d4525c
[autofix.ci] apply automated fixes
autofix-ci[bot] Oct 19, 2026
cbaef34
chore: preserve shared-flake pin updates through PR 4366
TomCC7 Oct 19, 2026
c5f600f
chore: preserve shared-flake pin updates through PR 4367
TomCC7 Oct 19, 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
Empty file modified .github/scripts/check_sdist.py
100644 → 100755
Empty file.
70 changes: 60 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,35 @@ jobs:
path: .cachix-marker
key: cachix-published-${{ runner.os }}-${{ runner.arch }}-${{ needs.cachix-build-check.outputs.inputs-hash }}

message-alignment:
name: Built-in message alignment
env:
DIMOS_MESSAGE_ALIGNMENT_REQUIRED: "1"
timeout-minutes: 10
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v7
- uses: astral-sh/setup-uv@v10.0.1
with:
python-version: '3.12'
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: '1.92.0'
components: rustfmt
- name: Install locked generation/check dependencies only
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --only-group message-codegen --frozen
- name: Reject built-in Python/C++/Rust/schema drift
run: |
.venv/bin/python -m scripts.generate_builtin_messages
.venv/bin/python -m scripts.generate_builtin_messages --check
- name: Verify drift rejection for changed inputs and output inventories
run: .venv/bin/python -m pytest -c /dev/null --rootdir . --noconftest -q dimos/message_codegen/test_builtin_alignment.py


lint:
timeout-minutes: 10
runs-on: ubuntu-latest
Expand Down Expand Up @@ -309,7 +338,9 @@ jobs:
enable-cache: true
prune-cache: true
- name: Install lint dependencies
run: uv sync --only-group lint --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --only-group lint --frozen
- name: Check declared dependencies
run: uv run --no-sync deptry dimos --config pyproject.toml --github-output
- name: Mypy
Expand Down Expand Up @@ -379,7 +410,9 @@ jobs:
sudo apt-get update
sudo apt-get install -y portaudio19-dev
- name: Install dependencies
run: uv sync --group tests --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests --frozen
# Needs Python and Rust: `dimos bake` is Python that writes a Rust program and compiles it, and the tests jobs have no Rust.
- name: Bake e2e tests
run: uv run pytest -m bake_e2e dimos/cli/bake/test_bake_e2e.py --no-cov
Expand Down Expand Up @@ -434,7 +467,9 @@ jobs:
if: runner.os == 'macOS'
run: brew install portaudio
- name: Install dependencies
run: uv sync --group tests --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests --frozen
- name: Build the extensions
run: uv run python bin/pyo3-extensions --build
# Tested here, not in the tests jobs, so those start without waiting for this build.
Expand Down Expand Up @@ -465,7 +500,9 @@ jobs:
with:
node-version: 'lts/*'
- name: Install Python dependencies
run: uv sync --group tests --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests --frozen
- name: Restore Hugging Face model cache
id: hf-cache
uses: actions/cache/restore@v6
Expand Down Expand Up @@ -589,7 +626,9 @@ jobs:
- name: Fetch the go2_short replay dataset
run: git lfs pull --include="data/.lfs/go2_short.db.tar.gz" --exclude=""
- name: Install dependencies
run: uv sync --group tests --group browser-tests --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests --group browser-tests --frozen
- name: Install Playwright browsers # the e2e runs in both engines
run: uv run playwright install --with-deps chromium firefox
- name: Cockpit + SDK browser e2e
Expand Down Expand Up @@ -706,7 +745,9 @@ jobs:
if: steps.native-marker.outputs.cache-hit == 'true'
run: python3 bin/native-modules --link-results .cachix-marker/links.txt
- name: Install dependencies
run: uv sync --group tests --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests --frozen
- name: Run tests
run: uv run pytest --numprocesses=logical --cov=dimos/ --junitxml=junit.xml -m 'not (self_hosted or self_hosted_large or web_browser or bake_e2e or native_e2e)'
# Serial and after the parallel run: it binds the livox SDK's fixed ports.
Expand Down Expand Up @@ -845,11 +886,14 @@ jobs:
uv venv .codecov-venv
uv pip install --python .codecov-venv/bin/python codecov-cli==11.2.8
- name: Install dependencies
run: uv sync --group tests-self-hosted --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests-self-hosted --frozen
- name: Install web_browser e2e dependencies (macOS)
if: matrix.os == 'macOS'
run: |
brew install ffmpeg
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests-self-hosted --group browser-tests --frozen
uv run playwright install chromium firefox
- name: Install Node 24 for the Pi and dimcode CLIs
Expand Down Expand Up @@ -1113,7 +1157,9 @@ jobs:
`# Rerun viewer pulls in X11 keyboard bindings when DISPLAY is set.` \
libxkbcommon-x11-0
- name: Install dependencies
run: uv sync --group tests-self-hosted --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests-self-hosted --frozen
- name: Build C++ extensions in-place
run: uv run python setup.py build_ext --inplace
- name: Build DimSim and install its headless Chromium
Expand Down Expand Up @@ -1226,7 +1272,9 @@ jobs:
with:
enable-cache: true
- name: Install dependencies
run: uv sync --group tests --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --group tests --frozen
env:
# Compile bytecode at install rather than at first import.
UV_COMPILE_BYTECODE: "1"
Expand Down Expand Up @@ -1341,7 +1389,9 @@ jobs:
# Nothing worth caching: Otava's dependencies are all prebuilt wheels.
enable-cache: false
- name: Install Otava
run: uv sync --project .github/benchmark-analysis --frozen
run: |
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv sync --project .github/benchmark-analysis --frozen
- name: Analyse the series and file regressions
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
32 changes: 32 additions & 0 deletions .github/workflows/message-codegen.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: message-codegen

on:
pull_request:
paths:
- dimos/message_codegen/**
- native/cpp/include/dimos/native/cdr_codec.hpp
- docs/development/message-source-packages.md
- pyproject.toml
- uv.lock
- .github/workflows/message-codegen.yml
workflow_dispatch:

permissions:
contents: read

jobs:
integration:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-14]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: astral-sh/setup-uv@v10.0.1
- name: Install published generator and consumer test tools
run: |
uv venv .venv --python 3.12 --seed
uv pip install --python .venv/bin/python 'dimos-cdrgen[native]==0.1.0' numpy build pytest pytest-asyncio pytest-env
- name: Verify DimOS SDK, installed Python consumer and C++ consumer
run: .venv/bin/python -m pytest --noconftest -o addopts='' -q dimos/message_codegen/test_integration.py
6 changes: 6 additions & 0 deletions .github/workflows/release-build-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,18 @@ jobs:
env:
# Keep in sync with the build-wheels env in release.yml
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_34
CIBW_BEFORE_TEST: "pip install {project}/wheelhouse/dimos_generated-*.whl"
CIBW_TEST_COMMAND: "python {project}/.github/scripts/wheel_smoke.py"
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Build cockpit dist
uses: ./.github/actions/build-cockpit
- name: Prepare the curated message wheel
run: |
python -m pip install uv
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv build --wheel --out-dir wheelhouse packages/dimos-generated
- name: Build one wheel
uses: pypa/cibuildwheel@v4.2.1
with:
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,19 @@ jobs:
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_34 # open3d>=0.19 requires glibc 2.31+
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_34 # open3d>=0.19 requires glibc 2.31+
# Asserts the packaged relay + Cockpit and serves them from the installed wheel.
CIBW_BEFORE_TEST: "pip install {project}/wheelhouse/dimos_generated-*.whl"
CIBW_TEST_COMMAND: "python {project}/.github/scripts/wheel_smoke.py"
MACOSX_DEPLOYMENT_TARGET: "11.0"
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Build cockpit dist # setup.py copies it into the wheel's _relay_dist
uses: ./.github/actions/build-cockpit
- name: Prepare the curated message wheel
run: |
python -m pip install uv
uv run --no-project --with "dimos-cdrgen[prepare]==0.1.0" python -m scripts.prepare_builtin_sources
uv build --wheel --out-dir wheelhouse packages/dimos-generated
- name: Build wheels
uses: pypa/cibuildwheel@v4.2.1
- name: Attestation
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,6 @@ optuna.db

# policy blobs are loaded from outside the repository
*.bin

# Prepared from schema-sources.json; keep downloaded schemas out of Git.
/packages/dimos-generated/interfaces/
6 changes: 3 additions & 3 deletions dimos/hardware/sensors/lidar/fastlio2/cpp/flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 35 additions & 0 deletions dimos/message_codegen/native_build.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright 2026 Dimensional Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Add DimOS SDK discovery to the published CDR generator toolchain."""

from importlib.util import find_spec
import json
from pathlib import Path

from dimos_cdrgen.native_build import write_cmake_toolchain as library_toolchain


def write_cmake_toolchain(prefix: Path, destination: Path) -> Path:
"""Export the library toolchain and retain optional DimOS SDK discovery."""
result = library_toolchain(prefix, destination)
spec = find_spec("dimos")
if spec is not None and spec.submodule_search_locations:
package = Path(next(iter(spec.submodule_search_locations)))
for sdk in [package / "_native/cpp", package.parent / "native/cpp"]:
if (sdk / "dimos_nativeConfig.cmake").is_file():
with result.open("a") as output:
output.write("list(APPEND CMAKE_PREFIX_PATH " + json.dumps(str(sdk)) + ")\n")
break
return result
Loading
Loading