Capability discovery API

Ownership and purpose

core/capability/ owns the GUI-independent catalog of semantic Command and Query operations that exist today. perastage_capability_core owns neutral C++ descriptors and structural Command request validation, while perastage_capability_serialization owns deterministic JSON schema version 1. The catalog is descriptive only: it contains no callbacks, scene access, dispatch, confirmation policy, or transport behavior.

Stable Command IDs are owned by the neutral core/command/command_operation_ids.h contract. Capability Core consumes that header and the generic request value contract without linking Command execution, mutation, or transaction targets. The serialization target depends only on Capability Core, and the development CLI consumes that serialization facade.

Descriptors contain the stable operation ID, command or query kind, a concise English summary, effect, arguments, and current frontend exposure. Arguments use the closed vocabulary boolean, int64, float64, string, int64_list, float64_list, and string_list. Required means unconditionally required by the generic request shape; semantic constraints remain with the operation.

Effects are read_only, mutating, and destructive. Destructive identifies the conversions that replace scene node types; it does not prescribe a confirmation policy. Selection clear is mutating, not destructive.

Discovery and frontend exposure

Catalog() returns every descriptor once in ascending operation-ID order, and Find() performs lookup without application state. Exposure uses only current technical frontend identifiers: embedded_console, desktop_gui, development_cli, local_live_cli, mcp, and osc. full means the frontend exposes the semantic surface; partial records a meaningful subset. Console selection update is partial because its numeric grammar selects fixtures and trusses while the semantic operation also accepts supports and SceneObjects. An empty list means Core exists without a current frontend. The development CLI's isolated scene workflow and local live workflow are described separately so consumers can distinguish file-based execution from active-project execution. perastage-cli capabilities itself only reads the catalog.

The osc frontend identifier is present only on the three implemented OSC addresses. Selection clear is full; position and rotation are partial because OSC accepts one explicit axis/value tuple and does not expose semantic ranges, multi-axis requests, or explicit pivots.

The six live queries (scene.summary, scene.selection.get, scene.objects.list, scene.object.get, scene.layers.list, and scene.groups.list) are full for both local_live_cli and mcp. scene.selection.update is also full for these frontends: all four selectable kinds, replacement/preservation, and ordered add/remove operations are available through explicit UUID references. scene.patch.status has no frontend exposure because live execution does not provide its footprint resolver.

MCP selection clear is full. Position and rotation are partial because the adapter accepts one explicit axis/value component and does not expose semantic ranges, multi-axis requests, or explicit rotation pivots. MVR/GDTF inspection tools are process-level Inspection API adapters and are not Command or Query catalog entries.

scene.transform.batch is mutating and full for local_live_cli and mcp. Its seven required aligned lists describe ordered exact UUID targets and position/rotation components. Each list is a string_list, except values, which is a float64_list in millimeters or degrees. Batch execution validates identity, alignment, modes, spaces, and finite values in the Command owner; discovery continues to validate only the generic request shape.

The scene.object.get metadata names its existing typed C++ object reference as object_kind and object_uuid. The CLI and MCP lookup syntax projects those roles to kind and uuid in the live arguments object. Patch footprint resolution is host context and is not an argument.

Adapter contract

Capability metadata is distinct from embedded Console grammar such as f, t, pos, axis shorthand, and ranges. That human syntax remains in the text adapters. Future adapters should consume this inventory rather than copy operation lists, while invoking Command or Query services directly for behavior. They must not turn the catalog into an execution registry.

Back to top