DYN-10119: Add IValueSchemaProvider and typeIds to DefineData#17040
Conversation
There was a problem hiding this comment.
See the ticket for this pull request: https://jira.autodesk.com/browse/DYN-10119
There was a problem hiding this comment.
Pull request overview
This PR adds a new public API surface to expose a stable, wire-format type identifier ($typeid) for DefineData nodes so external consumers (e.g., DynamoPlayer, DynamoMCP) can resolve canonical type identifiers without relying on display names.
Changes:
- Introduces
Dynamo.Graph.Nodes.IValueSchemaProviderwithValueTypeIdandIsListValue. - Extends
DSCore.Data.DataNodeDynamoTypewith aTypeIdfield populated for supported types and wires those IDs into the supported type list. - Implements
IValueSchemaProvideronCoreNodeModels.DefineDataand updatesDynamoCore/PublicAPI.Unshipped.txt.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| src/Libraries/CoreNodes/Data.cs | Adds TypeId to supported data types and populates wire-format $typeid strings. |
| src/Libraries/CoreNodeModels/DefineData.cs | Implements IValueSchemaProvider to expose typeId/list context from the dropdown selection. |
| src/DynamoCore/Graph/Nodes/IValueSchemaProvider.cs | Adds the new public interface for external consumers to query schema/type info. |
| src/DynamoCore/PublicAPI.Unshipped.txt | Registers the new public interface members for API analyzer compliance. |
RobertGlobant20
left a comment
There was a problem hiding this comment.
Just some minor comments LGTM,
| [Category("UnitTests")] | ||
| public void ValueTypeIdSafeWhenNoSelection() | ||
| { | ||
| var node = new DefineData(); |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
| </summary> | ||
| </member> | ||
| <member name="M:DSCore.Data.DataNodeDynamoType.#ctor(System.Type,System.String)"> | ||
| <member name="M:DSCore.Data.DataNodeDynamoType.#ctor(System.Type,System.String,System.String)"> |
There was a problem hiding this comment.
it's been a while since I have looked at the localization pipeline - @kalunkuo @RobertGlobant20 @QilongTang - just curious - do updates to the xmls here drive the localization prs?
There was a problem hiding this comment.
as far as I remember the files like DSCoreNodes.xml file are generated when CoreNodes documentation in cs files is updated (and after the csproj file is build) and the xml is generated in the Dynamo output directory, so there is a process that copy the xml file from output to doc/distrib/xml/en-US/ so you will see it as change in github, then after the dev submits the PR and is merged to master the localization process detects a change in doc/distrib/xml/ and generate a PR with all the other xml files in doc/distrib/xml/ for each language, finally when dynamo installer/release is created we are using the localized xml files for showing the info in the Dynamo language selected
| polygon, | ||
| rectangle, | ||
| new(typeof(System.DateTime)), | ||
| new(typeof(double), "Number"), |
There was a problem hiding this comment.
hmm @saintentropy - what am I missing here WRT to the forgedata primitive types you mentioned?
| public class DefineData : DSDropDownBase, IValueSchemaProvider | ||
| { | ||
| /// <inheritdoc/> | ||
| [JsonIgnore] |
There was a problem hiding this comment.
is there a use case for serializing these values?
|
@kalunkuo is there a reason this has not been merged yet? Was it waiting on anything else? It looks ok to me, with a few questions. |
|
started a new build job here https://c007.cloudbees-ci.autodesk.com/job/DYNCI/job/Dynamo/job/DynamoSelfServe/job/pullRequestValidation/184/ |
No particular reason — it was submitted while everyone was on vacation. |
|



Purpose
Expose wire-format
$typeidvalues fromDataNodeDynamoTypethrough a new publicIValueSchemaProviderinterface, so DynamoPlayer and DynamoMCP can programmatically resolve the canonical type identifier for DefineData nodes.Previously, external consumers (DynamoPlayer, MCP) had no programmatic way to get the
$typeidthat ProtoGeometry'sToJson()emits for a given DefineData type. They relied on display names (e.g. "Point") and maintained separate hardcoded lookup dictionaries, which drifted from actual wire values.Related PRs: DynamoPlayer (reads
ValueTypeIdvia reflection) and DynamoMCP (resolves typeIds to JSON Schemas for LLM consumers).Key changes:
IValueSchemaProviderinterface inDynamoCore/Graph/Nodes/withValueTypeId(string) andIsListValue(bool)DefineDataimplementsIValueSchemaProvider, returningDataNodeDynamoType.TypeIdviaValueTypeIdDataNodeDynamoTypegains aTypeIdproperty populated with the actual wire-format$typeidfor each supported type (e.g."autodesk.math:point3d-1.0.0"for Point,"autodesk.geometry.curve:circle-1.0.0"for Arc/Circle)StringifyJSONoutput — see Sample.json attached to the Jira ticketPublicAPI.Unshipped.txtupdated with the 3 new public API membersDeclarations
Check these if you believe they are true
Release Notes
Expose wire-format
$typeidvalues fromDataNodeDynamoTypethrough a new publicIValueSchemaProviderinterfaceReviewers
(FILL ME IN) Reviewer 1 (If possible, assign the Reviewer for the PR)
(FILL ME IN, optional) Any additional notes to reviewers or testers.
FYIs
(FILL ME IN, Optional) Names of anyone else you wish to be notified of