Skip to main content
Version: 3.0 (next)

SDK changelog

Coming soon

App Studio is coming soon: it is in development and testing and is not part of release 3.0. This page describes App Studio as it is being built, so names and steps may change before release.

@maestrohub/sdk is compiled into the pinned runtime an app is built against (runtime-v1 today), so a published app keeps working as it was built. What changes is the surface a new build compiles against — this page says what, when, and what to change in an app's source when it is next edited.

2026-09 — entities.* becomes plant.* (#6017)​

The knowledge model moved out of the UNS module into the knowledge module, and the SDK's entity reads moved with it. The old entities namespace read the retired entity tree over /api/v1/uns/entities…; the new plant namespace asks the knowledge module's own tools over POST /api/v1/knowledge/tools/<tool> — the same tools an agent calls as plant_* and the Things pages read. There is no compatibility layer: entities is not exported by the runtime any more, and an app that names it fails its next build with the import error naming the missing export.

RemovedUse instead
entities.list({ typeLineageId, lifecycle, parentId, under })plant.whatCanIAsk() for the sites, then plant.walk({ from: <site or place>, tree: 'physical', direction: 'down', type?: [...] }) for what is under a place; plant.find({ name }) for a thing by name
entities.get(id) / entities.byUri(uri)plant.describe(id) — the thing, its facts, places, identities
entities.bindings(id) (topic_path)plant.describe(id).result.bindings — each series.ref is the topic path when series.kind is "uns"
entities.computedStatus(id)No equivalent: computed properties were the old model's. plant.describe(id, { include: ['values'] }).result.readings carries each reading's quality, stale and flat
entities.fleetMetrics({ propertyId, under, descending, limit })plant.numbers({ set: { under }, property, measure: 'latest', order: 'desc', top }), or plant.walk({ from, tree: 'physical', direction: 'down', values: [property] }) and rank in the app
SCOPE_ENTITIES_READSCOPE_PLANT_READ — the scope string is still entities:read, so manifests need no change
Types Entity, ListEntitiesOptions, EntityBinding, EntityComputedStatus, FleetMetricRow, FleetMetricsOptionsEnvelope<T>, Thing, Described, Candidate, WalkedThing, Binding, Reading, Vocabulary, TimelineEntry, and the *Options of each call — see the reference

Every plant.* answer is an Envelope<T>: read result, and show what the planner says about the answer — coverage.missing (what the plant does not record that the answer needed), hidden (rows the viewer may not see), computed (the answer's own sentence). Errors arrive as ApiError with the module's code and message, as every SDK call's do.

The builder agent's prompt pack and the Equipment Maintenance Log template were moved with the surface; the lint that says which scope a call needs names the plant.* calls now.