feat: external blueprint registration - #2517
Conversation
Greptile SummaryThis PR adds dynamic discovery of externally packaged DimOS blueprints via Python package entry points (
Confidence Score: 4/5Safe 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
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
%%{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
Reviews (9): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile |
❌ 1 Tests Failed:
View the full list of 1 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
|
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. |
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
* 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>
* 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>
Summary
Adds dynamic discovery for externally packaged DimOS blueprints via Python package entry points.
External packages can expose runnable blueprints with:
Users can then run them by namespaced name:
Changes
importlib.metadata.<canonical-distribution-namespace>.<local-kebab-name>.BlueprintobjectsModuleclasses converted with.blueprint()dimos list.Testing
dimos listdimos run my-test-stack.demo --daemondimos run demo-mcp-stress-test my-test-stack.demo --daemon