CompletionProvider
argName is the field’s
path within the form (a property key at the root, a dotted path when nested);
partial is the value typed so far. The caller owns the source (e.g. an MCP
completion/complete call) — SchemaForm only routes string fields through the
completion-backed input when a provider is supplied.
Discriminator
ExpressionFieldComponent
JqField, which the
host imports straight from @tai42/jq-studio.
It is a COMPONENT, rendered as an element, never called as a function: the door
owns hooks and state (editor open, worker handle), which only survive as its own
element identity. A host may inject a lazy door to keep the jq subgraph in a
split chunk — the form mounts it inside a Suspense boundary that paints the
resting shell while that chunk resolves.
Related: ExpressionFieldProps
ExpressionFieldContext
SchemaEditor’s preview and
ElicitationForm render forms a caller does not own the props of, and a plugin
page renders its own); the form’s own expressionField prop overrides it for a
single form.
Related: ExpressionFieldComponent
ExpressionFieldProps
Field.
Properties
Related: ExpressionInputShape
ExpressionInputKey
ExpressionInputShape
. IS for an expression-annotated field, as the form hands it to the
injected door. Built by the renderer from the schema’s x-tai42-expression
annotation.
Like the annotation type it is built from, this MIRRORS jq-studio’s input-shape
descriptor without importing it: the schema-form tree names no jq type, in code
OR in its declarations, which is what keeps a consumer that never injects a door
free of the jq subgraph. JqField satisfies it structurally; a test pins that.
Properties
Related: ExpressionInputKey
JsonSchema
Related: Discriminator, JsonSchemaType
JsonSchemaType
type keyword values Pydantic emits.
RecordEntryContext
Related: JsonSchema
RecordEntryRenderer
record fields — the injection
point a masked/secret editor (or any other value affordance) mounts through.
It returns the node to render in the entry’s value slot; returning
entry.defaultField falls back to the built-in editor. Absent (the default),
every entry renders its defaultField.
Related: RecordEntryContext
RecordEntryRendererContext
SchemaForm
schema. The root is usually an object (a tool’s
input schema); a scalar/array/union root renders as a single field group.
Props
Related: SchemaFormProps
SchemaFormErrors
"" = the root value, "user.name", "tags[0]");
each entry is a loud, human-readable message. Empty object = valid.
SchemaFormProps
Related: CompletionProvider, ExpressionFieldComponent, JsonSchema
SecretRef
SecretRefField emits and reads back. The source discriminant
is what the host branches on:
key— reference an existing env key; the host writes!ENV ${key}.paste— a new plaintext secret; the host stores it under a generated key (combined op) and writes the resulting marker.secretis write-only and is never rendered.
SecretRefField
Related: SecretRefFieldProps
SecretRefFieldProps
Related: SecretRef
defaultValueForSchema
root carries the $defs document for
$ref resolution and defaults to the schema itself (the common
whole-tool-schema call).
Parameters
Related: JsonSchema
resolveRef
$ref against the document root, following chained refs
(a $ref whose target is itself a $ref). Only same-document pointers are
supported (#/$defs/Name, #/definitions/Name, #); an external or
unresolvable ref throws LOUDLY rather than yielding a silent empty schema.
A schema with no $ref is returned unchanged. A pointer cycle throws.
Parameters
Related: JsonSchema
validateAgainstSchema
value against schema, returning a per-path error bag (empty =
valid). The caller runs this before submit and feeds the result back to
SchemaForm for display. options.maxUploadBytes mirrors the renderer’s
maxUploadBytes prop so a media field’s byte cap is enforced identically here.
Parameters
Related: JsonSchema, SchemaFormErrors

