Skip to content

feat: external blueprint registration - #2517

Merged
TomCC7 merged 18 commits into
mainfrom
cc/exp/dyn-blueprint-reg
Jul 11, 2026
Merged

feat: external blueprint registration#2517
TomCC7 merged 18 commits into
mainfrom
cc/exp/dyn-blueprint-reg

Conversation

@TomCC7

@TomCC7 TomCC7 commented Jun 17, 2026

Copy link
Copy Markdown
Member

Summary

Adds dynamic discovery for externally packaged DimOS blueprints via Python package entry points.

External packages can expose runnable blueprints with:

[project.entry-points."dimos.blueprints"]
go2 = "my_robot_stack.go2:go2_blueprint"

Users can then run them by namespaced name:

dimos run my-robot-stack.go2
dimos run unitree-go2 my-robot-stack.keyboard-teleop

Changes

  • Add external blueprint discovery/resolution through importlib.metadata.
  • Require external names to use <canonical-distribution-namespace>.<local-kebab-name>.
  • Keep bare names reserved for built-in DimOS blueprints/modules.
  • Support external entry point targets that are:
    • Blueprint objects
    • DimOS Module classes converted with .blueprint()
  • Reject factories and unsupported targets.
  • Add metadata-only external blueprint listing in dimos list.
  • Add namespace-aware errors for missing namespaces, missing local names, invalid metadata, load failures, ambiguous namespaces, and invalid targets.
  • Cover shared resolution paths used by CLI, Python API, and coordinator loading.
  • Update user, contributor, and coding-agent docs for built-in vs external blueprint registration.

Testing

  • Manual QA with temporary external packages:
    • dimos list
    • dimos run my-test-stack.demo --daemon
    • dimos run demo-mcp-stress-test my-test-stack.demo --daemon
    • broken external entry point load failure

@TomCC7 TomCC7 changed the title WIP: dynamic blueprint registration feat: dynamic blueprint registration Jun 17, 2026
@TomCC7
TomCC7 marked this pull request as ready for review June 17, 2026 00:18
@greptile-apps

greptile-apps Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds dynamic discovery of externally packaged DimOS blueprints via Python package entry points (dimos.blueprints group), allowing external packages to register runnable blueprints without modifying the in-repo all_blueprints.py. Resolution, error handling, and listing are cleanly layered across CLI, Python API, and coordinator paths.

  • New external_blueprints.py: Implements _collect_external_blueprints(), list_external_blueprint_names(), and resolve_external_blueprint_by_name() using importlib.metadata. Entry points are validated against a kebab-case pattern; invalid and missing-distribution entries are skipped gracefully, and previously-reported issues (misleading error classes, halted discovery on bad packages, spurious ambiguity from all-invalid distributions) are addressed with dedicated tests.
  • Updated get_all_blueprints.py: Routes namespaced names (containing .) to the new external resolver, and fixes the sys.exit \u2192 raise typer.Exit(1) inconsistency flagged in a previous review.
  • Two unused dependencies added to pyproject.toml: annotation-protocol and lazy_loader are declared as runtime dependencies but are not imported or used anywhere in the codebase, unnecessarily inflating the dependency tree.

Confidence Score: 4/5

Safe to merge after removing the two unused dependencies from pyproject.toml; the external blueprint discovery logic itself is well-tested and correct.

Two packages — annotation-protocol and lazy_loader — are declared as runtime dependencies in pyproject.toml but are not imported or used anywhere in the codebase. Shipping them expands the install footprint, widens the transitive dependency surface, and could introduce unexpected version conflicts for downstream users. The external blueprint discovery and resolution implementation is otherwise clean, all previously-reported issues have been addressed with targeted tests, and the routing logic in get_all_blueprints is straightforward.

pyproject.toml — the annotation-protocol and lazy_loader entries should be removed before merging.

Important Files Changed

Filename Overview
dimos/robot/external_blueprints.py New core module implementing external blueprint discovery and resolution via importlib.metadata; gracefully handles invalid names, missing distributions, load errors, and unsupported targets with clear error messages.
pyproject.toml Adds packaging (used), but also adds annotation-protocol and lazy_loader which are not imported or used anywhere in the codebase — likely accidental inclusions.
dimos/robot/get_all_blueprints.py Routes namespaced names to the new external resolver; fixes the sys.exit → typer.Exit inconsistency and adds _exit_with_error helper for clean error propagation.
dimos/robot/test_external_blueprints.py Comprehensive test suite covering valid/invalid names, Blueprint and Module class targets, load failures, missing namespaces, invalid metadata, distribution collisions, and bare-name isolation.
dimos/robot/cli/dimos.py Updates dimos list to show built-in and external blueprint groups separately; propagates ExternalBlueprintError to the user with exit code 1.
dimos/robot/cli/test_dimos.py Adds CLI-level tests for grouped list output, empty external section, discovery errors, run error propagation, and unknown bare blueprint handling.
dimos/core/module.py Upgrades is_module_type signature to use TypeGuard[type[Module]] for proper narrowing; no behavioral change.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant CLI as dimos CLI / Porcelain API
    participant Resolver as get_all_blueprints.get_by_name
    participant BuiltIn as all_blueprints / all_modules
    participant External as external_blueprints
    participant Meta as importlib.metadata

    User->>CLI: dimos run my-robot-stack.go2
    CLI->>Resolver: get_by_name("my-robot-stack.go2")
    Resolver->>BuiltIn: name in all_blueprints? No
    Resolver->>BuiltIn: name in all_modules? No
    Resolver->>External: is_namespaced_blueprint_name() True
    Resolver->>External: resolve_external_blueprint_by_name()
    External->>External: validate local name valid
    External->>Meta: "entry_points(group="dimos.blueprints")"
    Meta-->>External: "[EntryPoint(name="go2", dist="my-robot-stack")]"
    External->>External: canonicalize namespace
    External->>External: find matching entry
    External->>External: entry_point.load()
    External->>External: _target_to_blueprint(target)
    External-->>Resolver: Blueprint
    Resolver-->>CLI: Blueprint
    CLI->>User: runs blueprint
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant CLI as dimos CLI / Porcelain API
    participant Resolver as get_all_blueprints.get_by_name
    participant BuiltIn as all_blueprints / all_modules
    participant External as external_blueprints
    participant Meta as importlib.metadata

    User->>CLI: dimos run my-robot-stack.go2
    CLI->>Resolver: get_by_name("my-robot-stack.go2")
    Resolver->>BuiltIn: name in all_blueprints? No
    Resolver->>BuiltIn: name in all_modules? No
    Resolver->>External: is_namespaced_blueprint_name() True
    Resolver->>External: resolve_external_blueprint_by_name()
    External->>External: validate local name valid
    External->>Meta: "entry_points(group="dimos.blueprints")"
    Meta-->>External: "[EntryPoint(name="go2", dist="my-robot-stack")]"
    External->>External: canonicalize namespace
    External->>External: find matching entry
    External->>External: entry_point.load()
    External->>External: _target_to_blueprint(target)
    External-->>Resolver: Blueprint
    Resolver-->>CLI: Blueprint
    CLI->>User: runs blueprint
Loading

Reviews (9): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

Comment thread dimos/robot/external_blueprints.py Outdated
Comment thread dimos/robot/external_blueprints.py Outdated
Comment thread dimos/robot/get_all_blueprints.py Outdated
@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
2857 1 2856 71
View the full list of 1 ❄️ flaky test(s)
dimos.e2e_tests.test_dimsim_walk_forward::test_walk_forward

Flake rate in main: 19.85% (Passed 105 times, Failed 26 times)

Stack Traces | 203s run time
lcm_spy = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x72f3b62dd520>
start_blueprint = <function start_blueprint.<locals>.set_name_and_start at 0x72f3b3d3c5e0>
human_input = <function human_input.<locals>.send_human_input at 0x72f3b3d3c4a0>
dim_sim = <dimos.e2e_tests.dim_sim_client.DimSimClient object at 0x72f3b61377d0>

    @pytest.mark.self_hosted_large
    def test_walk_forward(lcm_spy, start_blueprint, human_input, dim_sim) -> None:
        start_blueprint(
            "run",
            "--disable",
            "spatial-memory",
            "--disable",
            "security-module",
            "unitree-go2-agentic",
            simulator="dimsim",
        )
        lcm_spy.save_topic(".../McpClient/on_system_modules/res")
        lcm_spy.wait_for_saved_topic(".../McpClient/on_system_modules/res", timeout=1200.0)
    
        origin_x, origin_y = 1, 2
        dim_sim.set_agent_position(origin_x, origin_y)
    
        human_input("move forward 3 meter")
    
>       lcm_spy.wait_until_odom_position(origin_x + 3, origin_y, threshold=0.4, timeout=120)

dim_sim    = <dimos.e2e_tests.dim_sim_client.DimSimClient object at 0x72f3b61377d0>
human_input = <function human_input.<locals>.send_human_input at 0x72f3b3d3c4a0>
lcm_spy    = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x72f3b62dd520>
origin_x   = 1
origin_y   = 2
start_blueprint = <function start_blueprint.<locals>.set_name_and_start at 0x72f3b3d3c5e0>

dimos/e2e_tests/test_dimsim_walk_forward.py:37: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
dimos/e2e_tests/lcm_spy.py:167: in wait_until_odom_position
    self.wait_for_message_result(
        predicate  = <function LcmSpy.wait_until_odom_position.<locals>.predicate at 0x72f3b66db600>
        self       = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x72f3b62dd520>
        threshold  = 0.4
        timeout    = 120
        x          = 4
        y          = 2
dimos/e2e_tests/lcm_spy.py:153: in wait_for_message_result
    wait_until(
        event      = <threading.Event at 0x72f3b615c260: unset>
        fail_message = 'Failed to get to position x=4, y=2'
        listener   = <function LcmSpy.wait_for_message_result.<locals>.listener at 0x72f3b3d3c9a0>
        predicate  = <function LcmSpy.wait_until_odom_position.<locals>.predicate at 0x72f3b66db600>
        self       = <dimos.e2e_tests.lcm_spy.LcmSpy object at 0x72f3b62dd520>
        timeout    = 120
        topic      = '/odom#geometry_msgs.PoseStamped'
        type       = <class 'dimos.msgs.geometry_msgs.PoseStamped.PoseStamped'>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

predicate = <bound method Event.is_set of <threading.Event at 0x72f3b615c260: unset>>

    def wait_until(
        predicate: Callable[[], bool],
        *,
        timeout: float,
        interval: float = 0.1,
        message: str | None = None,
    ) -> None:
        """Poll ``predicate`` until it returns truthy or ``timeout`` elapses."""
        deadline = time.monotonic() + timeout
        while time.monotonic() < deadline:
            if predicate():
                return
            time.sleep(interval)
>       raise TimeoutError(message or f"Timed out after {timeout}s waiting for condition")
E       TimeoutError: Failed to get to position x=4, y=2

deadline   = 219390.386463015
interval   = 0.1
message    = 'Failed to get to position x=4, y=2'
predicate  = <bound method Event.is_set of <threading.Event at 0x72f3b615c260: unset>>
timeout    = 120

.../utils/testing/waiting.py:35: TimeoutError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Comment thread dimos/robot/external_blueprints.py Outdated
@TomCC7 TomCC7 changed the title feat: dynamic blueprint registration feat: external blueprint registration Jun 17, 2026
Comment thread dimos/core/coordination/test_module_coordinator.py Outdated
Comment thread dimos/core/coordination/test_module_coordinator.py Outdated
Comment thread dimos/core/coordination/test_module_coordinator.py Outdated
Comment thread dimos/core/coordination/test_module_coordinator.py Outdated
@github-actions github-actions Bot added the ready-to-merge Required CI checks have passed on this PR label Jun 17, 2026
Comment thread dimos/robot/external_blueprints.py Outdated
Comment thread dimos/robot/external_blueprints.py Outdated
Comment thread docs/usage/blueprints.md Outdated
Comment thread .codecov.yml Outdated
@github-actions github-actions Bot added ready-to-merge Required CI checks have passed on this PR and removed ready-to-merge Required CI checks have passed on this PR labels Jun 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs.

@github-actions github-actions Bot added the stale label Jul 11, 2026
@mintlify

mintlify Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
dimensional 🟢 Ready View Preview Jul 11, 2026, 5:57 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@github-actions github-actions Bot removed the ready-to-merge Required CI checks have passed on this PR label Jul 11, 2026
@TomCC7 TomCC7 assigned paul-nechifor and TomCC7 and unassigned TomCC7 Jul 11, 2026
@TomCC7
TomCC7 enabled auto-merge (squash) July 11, 2026 06:22
@TomCC7
TomCC7 merged commit 61b6fe7 into main Jul 11, 2026
32 of 34 checks passed
@TomCC7
TomCC7 deleted the cc/exp/dyn-blueprint-reg branch July 11, 2026 06:23
@github-actions github-actions Bot added the ready-to-merge Required CI checks have passed on this PR label Jul 11, 2026
T-Markus-Liang added a commit to T-Markus-Liang/dimos_m20 that referenced this pull request Jul 25, 2026
* fix: better save path for nav recordings (dimensionalOS#2796)

* feat(transport): rust zenoh support and api refactor (dimensionalOS#2753)

* feat(arduino): add ArduinoModule with full arduino sim (and real arduino) support (dimensionalOS#1879)

* Swastika/docs chore/cleanup and fix links (dimensionalOS#2832)

* Velocity API (dimensionalOS#2859)

* holonomic trajectory controller (dimensionalOS#2697)

Co-authored-by: danvi <bogdan@dimensionalos.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: leshy <lesh@sysphere.org>

* fix(config): merge nested module overrides (dimensionalOS#2829)

* fix(mls-planner): macOS fix, link pyo3 cdylib (dimensionalOS#2836)

* revert(voxels): drop unused time_window mode from VoxelGrid (dimensionalOS#2845)

* Revert "feat(arduino): add ArduinoModule with full arduino sim (and r… (dimensionalOS#2868)

* feat: external blueprint registration (dimensionalOS#2517)

* Fix test_basic_deployment in CI (dimensionalOS#2767)

* Run CI on merge queue (dimensionalOS#2936)

* fix: disallow unused _ variables (dimensionalOS#2928)

* Add Galaxea A1Z arm in simulation (dimensionalOS#2947)

Co-authored-by: cc <cc7@duck.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: cc <55869557+TomCC7@users.noreply.github.com>

* Initial  xArm6 WorldBelief perception stack (dimensionalOS#2665)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat(g1-groot): navigation on the real G1 (Point-LIO + raytracing costmap) (dimensionalOS#2861)

Co-authored-by: Jeff Hykin <jeff.hykin@gmail.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Swastika/docs/navigation relocalization (dimensionalOS#2764)

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(teleop): rename Hosted Teleop page to Remote Teleop (dimensionalOS#2967)

* feat(hosted-teleop): Go2 teleoperation over Cloudflare broker (dimensionalOS#2798)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: spomichter <pomichterstash@gmail.com>
Co-authored-by: Sam Bull <git@sambull.org>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* DimSim scene editing/authoring in JS + moving inside dimos (dimensionalOS#2187)

Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(unitree): marshal stop_movement zero-twist onto the loop thread (dimensionalOS#2977)

* chore: bump version to 0.0.14b1 (beta pre-release) (dimensionalOS#2971)

* add latency graph and description to hosted teleop page (dimensionalOS#2982)

* docs(hosted-teleop): operator how-to + config/architecture refresh (dimensionalOS#2945)

Co-authored-by: stash <pomichterstash@gmail.com>

* serve LFS media via dimos-docs-assets so it renders on mintlify (dimensionalOS#2973)

* style(docs): fix trailing whitespace breaking lint on main (dimensionalOS#2991)

* add dimTELE banner (dimensionalOS#2984)

Co-authored-by: stash <pomichterstash@gmail.com>

* feat: blueprint namespaces (dimensionalOS#2725)

* fix: delete dead dimsim code (dimensionalOS#2980)

Co-authored-by: leshy <lesh@sysphere.org>

* fix: run all tests locally (dimensionalOS#2995)

* add gitHub community files for contributors and AI-assisted development (dimensionalOS#2347)

* fix: large file (dimensionalOS#3003)

* Fix/ivan/3d planner voxel colors (dimensionalOS#2983)

* feat: ban `__new__` (dimensionalOS#3009)

* fix: remove removed cibuildwheel enable group breaking release builds (dimensionalOS#3007)

* [Backport release/0.0.14b1] fix: remove removed cibuildwheel enable group breaking release builds (dimensionalOS#3013)

Co-authored-by: stash <pomichterstash@gmail.com>

* build(deps): bump the actions group across 1 directory with 6 updates (dimensionalOS#3056)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(manipulation): stabilize agentic xArm simulation (dimensionalOS#2999)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* fewer fields (dimensionalOS#3052)

* Build all GC Roots into Cachix (dimensionalOS#2866)

* Control coordinator refactor to add declarative task (dimensionalOS#2959)

Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: leshy <lesh@sysphere.org>

* feat(hosted-teleop): Arm hosted teleoperation over the Cloudflare broker (dimensionalOS#3004)

* feat(control): removes frozen set of input streams - now Any Input stream can be routed to the control coordinator (dimensionalOS#3110)

* chore: add OpenYAM URDF support (dimensionalOS#3049)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat: add Viser robot mesh display options (dimensionalOS#3112)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* add links to cards (dimensionalOS#3065)

* [Tests] Add unit tests for SequentialIds (dimensionalOS#3060)

* feat(web): PR 1 - Deno (dimensionalOS#3042)

* Ivan/feat/go2zenoh (dimensionalOS#3141)

* feat: Piper teleop polishing (dimensionalOS#3101)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat(hosted-teleop): auto-select operator view via robot_type broker config (dimensionalOS#3144)

* chore: remove get_project_root (dimensionalOS#3131)

* Add backport label to Dependabot PRs and check docker weekly (dimensionalOS#3067)

* fix memory issues DIM-1326 (dimensionalOS#3149)

Co-authored-by: danvi <bogdan@dimensionalos.com>

* docs(drone): fix dead pre-built RosettaDrone APK link (dimensionalOS#2546)

Co-authored-by: Paul Nechifor <paul@nechifor.net>

* feat: manipulation planning group (dimensionalOS#2645)

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Go2 holonomic Pose tracker trajectory controller (dimensionalOS#2948)

Co-authored-by: Ivan Nikolic <lesh@sysphere.org>

* feat(web): PR 2 - Relay (dimensionalOS#3043)

* ai disclose rule update (dimensionalOS#3028)

* Replace httpx with aiohttp (dimensionalOS#2974)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* fix(memory2): recorder ingress reception_ts + poseless streams (dimensionalOS#2927)

* ci: smoke-build a wheel on PRs touching release build config (dimensionalOS#3008)

* Fix typos and grammar (dimensionalOS#2726)

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* feat: visualize manipulation obstacles (dimensionalOS#3108)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat(web): PR 3 - Python client (dimensionalOS#3044)

* feat(web): PR 4 - E2E (dimensionalOS#3045)

* Swastika/chore/readme update (dimensionalOS#3027)

* Persist dependencies on disk (dimensionalOS#3167)

* ci: label first-time contributor PRs (dimensionalOS#3171)

* Add @Dreamsorcerer as global codeowner (dimensionalOS#3165)

* feat(m20): integrate official MuJoCo model

* docs(m20): add official MuJoCo integration guide

* docs(m20): add English guide and fidelity review

* docs(m20): make English guide primary

* docs(m20): document lateral and yaw limitation

* docs(m20): add MuJoCo test matrix

* docs(m20): consolidate test matrix into guides

* docs(m20): clarify guide reading order

* fix(memory2): preserve recorder ingress timing

* fix(memory2): avoid undefined frame in pose warning

* fix(config): merge nested module overrides (dimensionalOS#2829)

(cherry picked from commit 66ce423)

* style: format Zenoh service

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Andrew Lauer <69774903+aclauer@users.noreply.github.com>
Co-authored-by: Jeff Hykin <jeff.hykin@gmail.com>
Co-authored-by: Swastika <44317853+swstica@users.noreply.github.com>
Co-authored-by: Dan Vi <bogwi@tutamail.com>
Co-authored-by: danvi <bogdan@dimensionalos.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: leshy <lesh@sysphere.org>
Co-authored-by: cc <55869557+TomCC7@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: Sam Bull <git@sambull.org>
Co-authored-by: Krishna_Hundekari <113392023+KrishnaH96@users.noreply.github.com>
Co-authored-by: cc <cc7@duck.com>
Co-authored-by: Jheng-Yi Lin <75511000+jhengyilin@users.noreply.github.com>
Co-authored-by: Pim Van den Bosch <49974392+Nabla7@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: stash <pomichterstash@gmail.com>
Co-authored-by: ruthwikdasyam <63036454+ruthwikdasyam@users.noreply.github.com>
Co-authored-by: Viswajit <39920874+Viswa4599@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dimos-release-bot[bot] <4143859+dimos-release-bot[bot]@users.noreply.github.com>
Co-authored-by: Mustafa Bhadsorawala <39084056+mustafab0@users.noreply.github.com>
Co-authored-by: 起岚 <155608604+xiaoyaoqilan@users.noreply.github.com>
Co-authored-by: Daniel Eneh <72442267+Danny024@users.noreply.github.com>
Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
T-Markus-Liang added a commit to T-Markus-Liang/dimos_m20 that referenced this pull request Jul 25, 2026
* fix: better save path for nav recordings (dimensionalOS#2796)

* feat(transport): rust zenoh support and api refactor (dimensionalOS#2753)

* feat(arduino): add ArduinoModule with full arduino sim (and real arduino) support (dimensionalOS#1879)

* Swastika/docs chore/cleanup and fix links (dimensionalOS#2832)

* Velocity API (dimensionalOS#2859)

* holonomic trajectory controller (dimensionalOS#2697)

Co-authored-by: danvi <bogdan@dimensionalos.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: leshy <lesh@sysphere.org>

* fix(config): merge nested module overrides (dimensionalOS#2829)

* fix(mls-planner): macOS fix, link pyo3 cdylib (dimensionalOS#2836)

* revert(voxels): drop unused time_window mode from VoxelGrid (dimensionalOS#2845)

* Revert "feat(arduino): add ArduinoModule with full arduino sim (and r… (dimensionalOS#2868)

* feat: external blueprint registration (dimensionalOS#2517)

* Fix test_basic_deployment in CI (dimensionalOS#2767)

* Run CI on merge queue (dimensionalOS#2936)

* fix: disallow unused _ variables (dimensionalOS#2928)

* Add Galaxea A1Z arm in simulation (dimensionalOS#2947)

Co-authored-by: cc <cc7@duck.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: cc <55869557+TomCC7@users.noreply.github.com>

* Initial  xArm6 WorldBelief perception stack (dimensionalOS#2665)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat(g1-groot): navigation on the real G1 (Point-LIO + raytracing costmap) (dimensionalOS#2861)

Co-authored-by: Jeff Hykin <jeff.hykin@gmail.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Swastika/docs/navigation relocalization (dimensionalOS#2764)

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(teleop): rename Hosted Teleop page to Remote Teleop (dimensionalOS#2967)

* feat(hosted-teleop): Go2 teleoperation over Cloudflare broker (dimensionalOS#2798)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: spomichter <pomichterstash@gmail.com>
Co-authored-by: Sam Bull <git@sambull.org>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* DimSim scene editing/authoring in JS + moving inside dimos (dimensionalOS#2187)

Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(unitree): marshal stop_movement zero-twist onto the loop thread (dimensionalOS#2977)

* chore: bump version to 0.0.14b1 (beta pre-release) (dimensionalOS#2971)

* add latency graph and description to hosted teleop page (dimensionalOS#2982)

* docs(hosted-teleop): operator how-to + config/architecture refresh (dimensionalOS#2945)

Co-authored-by: stash <pomichterstash@gmail.com>

* serve LFS media via dimos-docs-assets so it renders on mintlify (dimensionalOS#2973)

* style(docs): fix trailing whitespace breaking lint on main (dimensionalOS#2991)

* add dimTELE banner (dimensionalOS#2984)

Co-authored-by: stash <pomichterstash@gmail.com>

* feat: blueprint namespaces (dimensionalOS#2725)

* fix: delete dead dimsim code (dimensionalOS#2980)

Co-authored-by: leshy <lesh@sysphere.org>

* fix: run all tests locally (dimensionalOS#2995)

* add gitHub community files for contributors and AI-assisted development (dimensionalOS#2347)

* fix: large file (dimensionalOS#3003)

* Fix/ivan/3d planner voxel colors (dimensionalOS#2983)

* feat: ban `__new__` (dimensionalOS#3009)

* fix: remove removed cibuildwheel enable group breaking release builds (dimensionalOS#3007)

* [Backport release/0.0.14b1] fix: remove removed cibuildwheel enable group breaking release builds (dimensionalOS#3013)

Co-authored-by: stash <pomichterstash@gmail.com>

* build(deps): bump the actions group across 1 directory with 6 updates (dimensionalOS#3056)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(manipulation): stabilize agentic xArm simulation (dimensionalOS#2999)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* fewer fields (dimensionalOS#3052)

* Build all GC Roots into Cachix (dimensionalOS#2866)

* Control coordinator refactor to add declarative task (dimensionalOS#2959)

Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: leshy <lesh@sysphere.org>

* feat(hosted-teleop): Arm hosted teleoperation over the Cloudflare broker (dimensionalOS#3004)

* feat(control): removes frozen set of input streams - now Any Input stream can be routed to the control coordinator (dimensionalOS#3110)

* chore: add OpenYAM URDF support (dimensionalOS#3049)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat: add Viser robot mesh display options (dimensionalOS#3112)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* add links to cards (dimensionalOS#3065)

* [Tests] Add unit tests for SequentialIds (dimensionalOS#3060)

* feat(web): PR 1 - Deno (dimensionalOS#3042)

* Ivan/feat/go2zenoh (dimensionalOS#3141)

* feat: Piper teleop polishing (dimensionalOS#3101)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat(hosted-teleop): auto-select operator view via robot_type broker config (dimensionalOS#3144)

* chore: remove get_project_root (dimensionalOS#3131)

* Add backport label to Dependabot PRs and check docker weekly (dimensionalOS#3067)

* fix memory issues DIM-1326 (dimensionalOS#3149)

Co-authored-by: danvi <bogdan@dimensionalos.com>

* docs(drone): fix dead pre-built RosettaDrone APK link (dimensionalOS#2546)

Co-authored-by: Paul Nechifor <paul@nechifor.net>

* feat: manipulation planning group (dimensionalOS#2645)

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Go2 holonomic Pose tracker trajectory controller (dimensionalOS#2948)

Co-authored-by: Ivan Nikolic <lesh@sysphere.org>

* feat(web): PR 2 - Relay (dimensionalOS#3043)

* ai disclose rule update (dimensionalOS#3028)

* Replace httpx with aiohttp (dimensionalOS#2974)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* fix(memory2): recorder ingress reception_ts + poseless streams (dimensionalOS#2927)

* ci: smoke-build a wheel on PRs touching release build config (dimensionalOS#3008)

* Fix typos and grammar (dimensionalOS#2726)

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>

* feat: visualize manipulation obstacles (dimensionalOS#3108)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat(web): PR 3 - Python client (dimensionalOS#3044)

* feat(web): PR 4 - E2E (dimensionalOS#3045)

* Swastika/chore/readme update (dimensionalOS#3027)

* Persist dependencies on disk (dimensionalOS#3167)

* ci: label first-time contributor PRs (dimensionalOS#3171)

* Add @Dreamsorcerer as global codeowner (dimensionalOS#3165)

* feat: add RoboPlan multi-robot planning (dimensionalOS#3155)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Andrew Lauer <69774903+aclauer@users.noreply.github.com>
Co-authored-by: Jeff Hykin <jeff.hykin@gmail.com>
Co-authored-by: Swastika <44317853+swstica@users.noreply.github.com>
Co-authored-by: Dan Vi <bogwi@tutamail.com>
Co-authored-by: danvi <bogdan@dimensionalos.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: leshy <lesh@sysphere.org>
Co-authored-by: cc <55869557+TomCC7@users.noreply.github.com>
Co-authored-by: Paul Nechifor <paul@nechifor.net>
Co-authored-by: Sam Bull <git@sambull.org>
Co-authored-by: Krishna_Hundekari <113392023+KrishnaH96@users.noreply.github.com>
Co-authored-by: cc <cc7@duck.com>
Co-authored-by: Jheng-Yi Lin <75511000+jhengyilin@users.noreply.github.com>
Co-authored-by: Pim Van den Bosch <49974392+Nabla7@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: stash <pomichterstash@gmail.com>
Co-authored-by: ruthwikdasyam <63036454+ruthwikdasyam@users.noreply.github.com>
Co-authored-by: Viswajit <39920874+Viswa4599@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dimos-release-bot[bot] <4143859+dimos-release-bot[bot]@users.noreply.github.com>
Co-authored-by: Mustafa Bhadsorawala <39084056+mustafab0@users.noreply.github.com>
Co-authored-by: 起岚 <155608604+xiaoyaoqilan@users.noreply.github.com>
Co-authored-by: Daniel Eneh <72442267+Danny024@users.noreply.github.com>
Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Required CI checks have passed on this PR stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants