Skip to main content

studio-adding-robot-form-ui-fields

Adds a new interactive robot form UI field for plugin payload schemas. Use when introducing a new `robot_payload_ui` item kind, wiring renderer support under application/ui/src/features/robots/robot-form/robot-schema/components, updating plugin SDK UI-schema validation, and documenting how plugin authors adopt the field.

Informations de source

Dépôt
open-edge-platform/physical-ai-studio
Dernière activité de la source
15 septembre 2026 à 07:21
Langue détectée de SKILL.md
anglais
Étoiles
136
Forks
53

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
studio-adding-robot-form-ui-fields
description
Adds a new interactive robot form UI field for plugin payload schemas. Use when introducing a new `robot_payload_ui` item kind, wiring renderer support under application/ui/src/features/robots/robot-form/robot-schema/components, updating plugin SDK UI-schema validation, and documenting how plugin authors adopt the field.
license
Apache-2.0
# Adding Robot Form UI Field Components Add new robot-form controls as explicit `robot_payload_ui(...)` item kinds so plugin authors can opt in without Studio-specific React code in plugins. Read these first: - `application/docs/robot-plugins.md` - `application/docs/explanation/robot-plugin-architecture.md` - `physicalai/packages/physicalai-studio-plugin/src/physicalai_studio_plugin/ui_schema.py` - `application/ui/src/features/robots/robot-form/robot-schema/schema-form.tsx` ## Workflow 1. **Define the UX contract and ownership model.** - Pick an explicit `kind` name (for example `calibration`) and required item shape (`name`, optional `label`, optional `description`, etc.). - Keep ownership semantics aligned with existing controls: item-owned fields must not also be rendered as `field` or owned by another item. - Prefer explicit opt-in (`kind`) over heuristic detection in the UI. - Done when: you can describe exactly which payload field(s) the item owns and how plugins enable it. 2. **Add SDK typing + validation for the new item kind.** - Edit `physicalai/packages/physicalai-studio-plugin/src/physicalai_studio_plugin/ui_schema.py`: - add a new `TypedDict` for the item kind, - include it in `RobotUiItem` union, - validate required fields and field type constraints, - enforce ownership conflict checks. - Keep validation errors precise and actionable for plugin authors. - Done when: invalid metadata fails `validate_robot_payload_ui(...)` with a clear error and valid metadata passes. 3. **Render the field in SchemaForm using kind-based dispatch.** - Add a component under `application/ui/src/features/robots/robot-form/robot-schema/components/`. - Integrate it in `application/ui/src/features/robots/robot-form/robot-schema/schema-form.tsx` in `SchemaFormItem` next to existing `connection` / `ip_address` handling. - Reuse shared visibility rules; do not create ad-hoc visibility behavior for a single kind. - Honor `robot_field_ui({"advanced_configuration": True})` and required/optional behavior consistently. - Done when: rendering is triggered only by explicit `kind` items and matches default form behavior for advanced/required fields. 4. **Implement robust field UX and payload updates.** - Parse and validate user input in the component before mutating payload. - Show clear inline errors for invalid input. - Keep labels/descriptions visually consistent with existing form controls. - For structured payloads (like calibration maps), include a compact preview so users can verify imported values. - Done when: happy path updates payload correctly, invalid path is recoverable, and the control is readable in dense forms. 5. **Adopt the new kind in built-in catalog payloads.** - Update backend payload UI metadata in the relevant catalog file(s), e.g. `application/backend/src/robots/catalog/so101.py`. - Replace generic `field` usage with the new item kind where appropriate. - Keep business semantics in field descriptions (for example: when a provided calibration bypasses guided calibration). - Done when: `/api/robots/catalog/{type}/schema` emits the expected `x-physicalai-ui` item and Studio renders the new control. 6. **Add tests at all affected layers.** - UI component tests (new file): - `application/ui/src/features/robots/robot-form/robot-schema/components/<new-field>.test.tsx` - cover parse success, parse failure, required/optional markers, preview/sorting, and clear/reset behavior. - Schema form integration tests: - `application/ui/src/features/robots/robot-form/robot-schema/schema-form.test.tsx` - assert kind-driven rendering, advanced visibility, and payload wiring. - Feature-level tests where used (example bimanual forms): - `application/ui/src/features/robots/robot-form/catalog/*.test.tsx` - Plugin SDK contract tests: - `physicalai/packages/physicalai-studio-plugin/tests/test_contracts.py` - cover valid item metadata, type errors, missing fields, and ownership conflicts. - Done when: all changed test suites pass locally. 7. **Update docs and communicate to plugin authors.** - Update public docs: - `application/docs/robot-plugins.md` (supported item kinds + usage snippet) - `application/docs/explanation/robot-plugin-architecture.md` (architecture list of supported kinds) - Add a handoff note for plugin maintainers when behavior changes materially: - `application/docs/handoff-<feature>.md` (expected JSON format, migration guidance, limitations) - Include copy-paste plugin snippet showing new `robot_payload_ui` usage. - Call out rollout notes explicitly for affected plugin owners (for example SO101, BimanualSO101, LeKiwi): - what to change, - what stays backward compatible, - what validation/runtime behavior changes. - Done when: plugin authors can adopt the feature without reading UI source code. ## Verify From `application/ui/`: ```bash npm run type-check npm run test:unit -- src/features/robots/robot-form/robot-schema/components/<new-field>.test.tsx npm run test:unit -- src/features/robots/robot-form/robot-schema/schema-form.test.tsx ``` From the runtime repo root (or environment where plugin tests run): ```bash uv run python -m pytest packages/physicalai-studio-plugin/tests/test_contracts.py ``` When skill files changed: ```bash python3 .github/scripts/skills/agent_skills.py sync python3 .github/scripts/skills/agent_skills.py validate ``` ## References - `application/ui/src/features/robots/robot-form/robot-schema/schema-form.tsx` - `application/ui/src/features/robots/robot-form/robot-schema/components/connection-field.tsx` - `application/ui/src/features/robots/robot-form/robot-schema/components/ip-address-field.tsx` - `application/ui/src/features/robots/robot-form/robot-schema/components/calibration-field.tsx` - `physicalai/packages/physicalai-studio-plugin/src/physicalai_studio_plugin/ui_schema.py` - `physicalai/packages/physicalai-studio-plugin/tests/test_contracts.py`
Voir sur GitHub