feat(ext-registry): external package variant registry (Plan 09) + folder-based package management - #291
Merged
Merged
Conversation
…fallback) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 2add158)
…r + cycle detect) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit dfa523c)
…/placeholders) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 7e3f75d)
…iant test Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit d0aa6b6)
…registry/startup Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit e4c0fbb)
…back Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 478e6c0)
…pper kept) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit dede8fb)
…r + ROS device node Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 6eef718)
…ig only feeds placeholders) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 28a1879)
Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 764cd31)
…ame-doc JSON-Schema $ref (#/$defs) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 54b8a8f)
…entry points Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit b95a463)
…ib + edge wrapper) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 80cfa8c)
…devices roots + entry points); B local external-package full-chain test Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit f74eec5)
…stry/ devices inspect/upload previously only saw @device decorators and a root-level registry.yaml. Add read_external_registry_devices() (reuses Plan-09 discover_registry_paths_from_project + resolve_yaml_refs, reads devices/*.yaml like the runtime registry) and wire it into inspect_package source priority: root registry.yaml > unilabos_registry/ folder > @device AST. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
17 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Lands the external package variant registry (Plan 09) on
dev, plus extends package management to discover folder-based registries (Plan 04). External packages can expose registry YAML viapyproject.toml [tool.unilabos.registry] paths=[...](fallbackunilabos_registry/), where multiple device entries share one Python class with differentclass.initparams.15 commits, fast-forward over
dev(0 behind), all isolated from the sim-pair / RMF work on the isaac branch.Core capabilities
[tool.unilabos.registry]+unilabos_registry/fallback)$refresolver (relative path + JSON pointer + cycle detection); fix: only expand cross-file refs, preserve same-doc JSON-Schema$ref(#/$defs)class.init(factory / value /${config.*}/${node.*}placeholders)$refduring device YAML loading (shared contracts), multi-variant supportsetup/build_registry/ startupclass.initintodriver_params(ROS2 wrapper kept; config only feeds placeholders)community.<id>→ local id)unilabos.registryentry pointsinspect/uploadnow discover folder-basedunilabos_registry/devices/*.yaml(reuses the discovery +$refhelpers, readsdevices/*.yamllike the runtime registry). Source priority: rootregistry.yaml>unilabos_registry/folder >@deviceAST.Tests
tests/registry/full suite green (21 passed), incl. newtest_package_cli_folder_registry.pyand the external-package full-chain test.pylabrobotpackage (5 devices: 4LiquidHandlervariants with distinct backends + 1PlateReader), discovered from its native Plan-09 folder layout with no per-package workaround file.Test plan
pytest tests/registry/unilab package inspect --path <external-pkg-with-unilabos_registry/>reports sourceunilabos_registry/and all variant devicescommunity.*variant ids; confirm class.init construction🤖 Generated with Claude Code