@tai42/studio-sdk 9.1.0 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,6 +29,41 @@ export interface MediaUpload {
29
29
  /** A per-field byte cap from `contentMaxBytes`, if the schema pins one. */
30
30
  readonly maxBytes: number | undefined;
31
31
  }
32
+ /** One top-level key of the expression's input document, with a one-line gloss. */
33
+ export interface ExpressionAnnotationKey {
34
+ readonly name: string;
35
+ readonly gloss: string;
36
+ }
37
+ /**
38
+ * The `x-tai42-expression` annotation on a string schema: the server declares
39
+ * that the field's value is authored in a pipeline expression language (only jq
40
+ * today) and optionally describes what `.` is for that expression. The renderer
41
+ * uses it to open the visual-editor door instead of a plain text box. The shape
42
+ * mirrors jq-studio's input-shape descriptor WITHOUT importing it — classification
43
+ * stays a pure schema concern; the renderer maps this onto a jq field declaration.
44
+ */
45
+ export interface ExpressionAnnotation {
46
+ /** The declared language. An unknown language never reaches here — it classifies
47
+ * as a plain string, so an older client renders a newer server's field as the
48
+ * ordinary text input it always was. */
49
+ readonly language: 'jq';
50
+ /** Short chip label for what `.` is (e.g. "node envelope"). */
51
+ readonly label: string | undefined;
52
+ /** One sentence describing what `.` is in this field. */
53
+ readonly blurb: string | undefined;
54
+ /** The top-level keys of `.`, each with a one-liner. */
55
+ readonly keys: readonly ExpressionAnnotationKey[] | undefined;
56
+ /** What the expression must return (e.g. "true or false"). */
57
+ readonly returns: string | undefined;
58
+ /** Per-field caveats. */
59
+ readonly caveats: readonly string[] | undefined;
60
+ /** True when the annotation carries a `sample` — tracked separately because a
61
+ * legitimate sample may be JSON `null`. */
62
+ readonly hasSample: boolean;
63
+ /** A static skeleton of `.` for the Test panel. Meaningful only when
64
+ * {@link hasSample} is true. */
65
+ readonly sample: unknown;
66
+ }
32
67
  /** One selectable variant of a union field. */
33
68
  export interface UnionVariant {
34
69
  readonly label: string;
@@ -49,6 +84,9 @@ export type FieldModel = {
49
84
  readonly format: string | undefined;
50
85
  /** Present when media annotations opt the field into the upload control. */
51
86
  readonly media: MediaUpload | undefined;
87
+ /** Present when a well-formed `x-tai42-expression` annotation opts the
88
+ * field into the jq expression editor (see {@link ExpressionAnnotation}). */
89
+ readonly expression: ExpressionAnnotation | undefined;
52
90
  } | {
53
91
  readonly kind: 'number';
54
92
  readonly integer: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/schema-form/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAQL,KAAK,UAAU,EAChB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GAClE;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;CACzC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACtD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACxC,GACD;IAKE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,GACD;IAQE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAgDD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,eAAe,CA8PjF"}
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/schema-form/classify.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,71 @@ function mediaUpload(schema) {
33
33
  }
34
34
  return undefined;
35
35
  }
36
+ const EXPRESSION_KEYWORD = 'x-tai42-expression';
37
+ /** A parsed-JSON plain object (arrays and `null` are `typeof 'object'` too). */
38
+ function isRecord(value) {
39
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
40
+ }
41
+ /**
42
+ * Detect the `x-tai42-expression` annotation on a (ref-resolved) string schema,
43
+ * mirroring {@link mediaUpload}: a well-formed annotation opts the field into the
44
+ * jq expression editor; anything else — absent, non-object, unknown language, or
45
+ * any wrongly-typed member — yields `undefined`, so the field renders EXACTLY as
46
+ * the plain string input it is today. Malformed payloads NEVER throw: a bad
47
+ * annotation is a server-side authoring bug, and degrading to the ordinary text
48
+ * box keeps the form usable while staying byte-identical to the unannotated
49
+ * rendering.
50
+ */
51
+ function expressionAnnotation(schema) {
52
+ const raw = schema[EXPRESSION_KEYWORD];
53
+ if (!isRecord(raw))
54
+ return undefined;
55
+ // The language gate doubles as the forward-compatibility valve: a future
56
+ // language this client does not understand degrades to a plain string field.
57
+ if (raw.language !== 'jq')
58
+ return undefined;
59
+ const { label, blurb, returns } = raw;
60
+ if (label !== undefined && typeof label !== 'string')
61
+ return undefined;
62
+ if (blurb !== undefined && typeof blurb !== 'string')
63
+ return undefined;
64
+ if (returns !== undefined && typeof returns !== 'string')
65
+ return undefined;
66
+ let keys;
67
+ if (raw.keys !== undefined) {
68
+ if (!Array.isArray(raw.keys))
69
+ return undefined;
70
+ keys = [];
71
+ for (const entry of raw.keys) {
72
+ if (!isRecord(entry) || typeof entry.name !== 'string' || typeof entry.gloss !== 'string') {
73
+ return undefined;
74
+ }
75
+ keys.push({ name: entry.name, gloss: entry.gloss });
76
+ }
77
+ }
78
+ let caveats;
79
+ if (raw.caveats !== undefined) {
80
+ if (!Array.isArray(raw.caveats))
81
+ return undefined;
82
+ caveats = [];
83
+ for (const entry of raw.caveats) {
84
+ if (typeof entry !== 'string')
85
+ return undefined;
86
+ caveats.push(entry);
87
+ }
88
+ }
89
+ // `sample` is any JSON — including `null` — so presence is tracked, not typed.
90
+ return {
91
+ language: 'jq',
92
+ label,
93
+ blurb,
94
+ keys,
95
+ returns,
96
+ caveats,
97
+ hasSample: 'sample' in raw,
98
+ sample: raw.sample,
99
+ };
100
+ }
36
101
  /**
37
102
  * Land a shape the form has no structured editor for on the free-form JSON
38
103
  * fallback (a mono JSON textarea) rather than a dead badge — a field is never
@@ -91,9 +156,15 @@ export function classifySchema(raw, root) {
91
156
  // that land on the OUTER null-union wrapper of an OPTIONAL field would
92
157
  // otherwise be lost when delegating to the inner string member, silently
93
158
  // degrading an optional upload field to a plain text box. Re-detect them on
94
- // the wrapper and attach to the inner string model.
95
- const model = inner.model.kind === 'string' && inner.model.media === undefined
96
- ? { ...inner.model, media: mediaUpload(resolved) }
159
+ // the wrapper and attach to the inner string model. The expression
160
+ // annotation gets the same treatment for the same reason: an optional
161
+ // annotated field must keep its editor door.
162
+ const model = inner.model.kind === 'string'
163
+ ? {
164
+ ...inner.model,
165
+ media: inner.model.media ?? mediaUpload(resolved),
166
+ expression: inner.model.expression ?? expressionAnnotation(resolved),
167
+ }
97
168
  : inner.model;
98
169
  return {
99
170
  model,
@@ -159,7 +230,12 @@ export function classifySchema(raw, root) {
159
230
  switch (type) {
160
231
  case 'string':
161
232
  return {
162
- model: { kind: 'string', format: resolved.format, media: mediaUpload(resolved) },
233
+ model: {
234
+ kind: 'string',
235
+ format: resolved.format,
236
+ media: mediaUpload(resolved),
237
+ expression: expressionAnnotation(resolved),
238
+ },
163
239
  nullable: nullableByType,
164
240
  schema: resolved,
165
241
  title,
@@ -1 +1 @@
1
- {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/schema-form/classify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/schema-form/classify.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"field-node.d.ts","sourceRoot":"","sources":["../../src/schema-form/field-node.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAMD,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CA0I1D"}
1
+ {"version":3,"file":"field-node.d.ts","sourceRoot":"","sources":["../../src/schema-form/field-node.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAMD,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CA2I1D"}
@@ -31,7 +31,7 @@ export function FieldNode(props) {
31
31
  case 'enum':
32
32
  return (_jsx(EnumField, { heading: heading, description: description, error: error, model: model, value: value, onChange: onChange }));
33
33
  case 'string':
34
- return (_jsx(StringField, { heading: heading, description: description, error: error, format: model.format, media: model.media, argName: path, value: value, required: required, onChange: onChange }));
34
+ return (_jsx(StringField, { heading: heading, description: description, error: error, format: model.format, media: model.media, expression: model.expression, argName: path, value: value, required: required, onChange: onChange }));
35
35
  case 'number':
36
36
  return (_jsx(Field, { label: heading, description: description, error: error, children: _jsx(NumberInput, { step: model.integer ? '1' : 'any', value: typeof value === 'number' ? value : '', onChange: (event) => {
37
37
  const raw = event.target.value;
@@ -1 +1 @@
1
- {"version":3,"file":"field-node.js","sourceRoot":"","sources":["../../src/schema-form/field-node.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-node.js","sourceRoot":"","sources":["../../src/schema-form/field-node.tsx"],"names":[],"mappings":"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"}
@@ -1,17 +1,33 @@
1
1
  /**
2
2
  * The string field renderer. A plain string renders as a text input (its
3
- * `type` derived from any JSON-Schema `format`); a media-annotated schema
4
- * renders the upload control instead; and when the form supplies a completion
5
- * provider, the input is backed by argument autocomplete.
3
+ * `type` derived from any JSON-Schema `format`); an expression-annotated schema
4
+ * renders the jq field (a resting textarea with the visual-editor door); a
5
+ * media-annotated schema renders the upload control instead; and when the form
6
+ * supplies a completion provider, the input is backed by argument autocomplete.
7
+ *
8
+ * `JqField` is reached through the SDK's own `./jq` re-export — the ONE
9
+ * `@tai42/jq-studio` instance the whole deployment shares — never from
10
+ * `@tai42/jq-studio` directly, which would bundle a second copy and orphan its
11
+ * worker (see the `jq` module doc-comment).
12
+ *
13
+ * That door is loaded LAZILY, through a dynamic `import('../jq')` behind
14
+ * {@link JqField}. The jq authoring door drags a heavy subgraph — the xyflow
15
+ * visual editor, a Web Worker entry, and a wasm engine chunk — that a form
16
+ * whose fields carry no `x-tai42-expression` annotation must never ship. A
17
+ * static import would pin that subgraph into every consumer that bundles the
18
+ * SDK (a host that externalises the SDK is unaffected either way); the dynamic
19
+ * import keeps it out of `schema-form`'s static graph and pulls it only when an
20
+ * annotated field actually mounts.
6
21
  */
7
22
  import type { ReactNode } from 'react';
8
- import type { MediaUpload } from './classify';
9
- export declare function StringField({ heading, description, error, format, media, argName, value, required, onChange, }: {
23
+ import type { ExpressionAnnotation, MediaUpload } from './classify';
24
+ export declare function StringField({ heading, description, error, format, media, expression, argName, value, required, onChange, }: {
10
25
  heading: string;
11
26
  description: string | undefined;
12
27
  error: string | undefined;
13
28
  format: string | undefined;
14
29
  media: MediaUpload | undefined;
30
+ expression: ExpressionAnnotation | undefined;
15
31
  argName: string;
16
32
  value: unknown;
17
33
  required: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"string-field.d.ts","sourceRoot":"","sources":["../../src/schema-form/string-field.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,WAAW,EACX,KAAK,EACL,MAAM,EACN,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,GAAG,SAAS,CA2CZ"}
1
+ {"version":3,"file":"string-field.d.ts","sourceRoot":"","sources":["../../src/schema-form/string-field.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkBpE,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,WAAW,EACX,KAAK,EACL,MAAM,EACN,KAAK,EACL,UAAU,EACV,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,GAAG,SAAS,CA+DZ"}
@@ -1,13 +1,25 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useCallback, useContext, useState } from 'react';
2
+ import { Suspense, lazy, useCallback, useContext, useMemo, useState } from 'react';
3
3
  import { CompletionInput } from '../components/completion-input';
4
4
  import { Field } from '../components/field';
5
5
  import { AlertTriangleIcon } from '../components/icons';
6
- import { TextInput } from '../components/inputs';
6
+ import { TextInput, Textarea } from '../components/inputs';
7
7
  import { errorMessage } from '../errors';
8
8
  import { CompletionProviderContext } from './context';
9
9
  import { MediaField } from './media-field';
10
- export function StringField({ heading, description, error, format, media, argName, value, required, onChange, }) {
10
+ // The lazily-loaded jq door. Defining it at module scope (never inside a
11
+ // component) is what keeps the lazy component's identity stable across renders,
12
+ // so React resolves the chunk once and never re-suspends a mounted field. The
13
+ // `import('../jq')` here is a DYNAMIC import — the sole runtime edge from
14
+ // `schema-form` to the jq door — so the visual editor, worker, and wasm live in
15
+ // a split chunk that a non-annotated form never requests. The `type`-only
16
+ // import of `JqInputShapeDescriptor` above is erased at compile time and adds no
17
+ // such edge.
18
+ const JqField = lazy(async () => {
19
+ const { JqField } = await import('../jq');
20
+ return { default: JqField };
21
+ });
22
+ export function StringField({ heading, description, error, format, media, expression, argName, value, required, onChange, }) {
11
23
  const completionProvider = useContext(CompletionProviderContext);
12
24
  const current = typeof value === 'string' ? value : '';
13
25
  // An empty optional field emits `undefined` (drops the key); a required one
@@ -15,6 +27,15 @@ export function StringField({ heading, description, error, format, media, argNam
15
27
  const emit = (next) => {
16
28
  onChange(next === '' && !required ? undefined : next);
17
29
  };
30
+ // An expression-annotated field renders the jq field — the resting control plus
31
+ // the visual-editor door. Checked before `media` because the expression
32
+ // annotation is the more specific, deliberate opt-in (`x-tai42-expression`);
33
+ // a schema carrying both is contradictory, and a jq expression is text, not an
34
+ // upload. Not reachable together with the completion provider path: an
35
+ // expression is authored, not completed from server suggestions.
36
+ if (expression !== undefined) {
37
+ return (_jsx(JqExpressionField, { heading: heading, description: description, error: error, expression: expression, argName: argName, value: current, onChange: emit }));
38
+ }
18
39
  // A media-annotated field renders the upload control instead of a text box.
19
40
  if (media !== undefined) {
20
41
  return (_jsx(MediaField, { heading: heading, description: description, error: error, media: media, value: current, onChange: emit }));
@@ -52,6 +73,73 @@ function CompletionField({ argName, value, onChange, provider, }) {
52
73
  onChange(next);
53
74
  }, fetchCompletions: fetchCompletions, onError: onError }), failure === null ? null : (_jsxs("p", { role: "status", className: "tai-field-hint", style: { margin: 0 }, children: [_jsx(AlertTriangleIcon, {}), `Suggestions are unavailable: ${failure}`] }))] }));
54
75
  }
76
+ /**
77
+ * An expression-annotated string field, rendered as `JqField`: a multiline
78
+ * resting control with the always-present visual-editor door. `JqField` brings
79
+ * its own label/description/error chrome (a11y-linked slots), so it is NOT
80
+ * wrapped in the form's `Field` component — the annotation's descriptor fields
81
+ * map onto jq-studio's input-shape descriptor, and the form's per-field error
82
+ * feeds the `error` prop.
83
+ *
84
+ * Deliberately unwired:
85
+ * - `serverValidate` — no author-time validation endpoint applies to a
86
+ * schema-declared field (the WASM runtime still powers the Test panel locally).
87
+ * - `onEditorOpenChange` — the hosts that render `SchemaForm` register no global
88
+ * keyboard shortcuts, so there is nothing to mute while the editor is open.
89
+ * - `compact` — the form renders every sibling field with a visible label;
90
+ * the compact variant (visually-hidden label, icon-only door) is for dense
91
+ * host rows, which the schema form does not have.
92
+ *
93
+ * The door is code-split ({@link JqField} is a `lazy` component), so it mounts
94
+ * inside a `Suspense` boundary. Its fallback paints the resting shell —
95
+ * label/description/error chrome around the current value in a read-only
96
+ * multiline control — so the field holds its layout and keeps the value visible
97
+ * while the chunk resolves, and the swap to the live door does not flash.
98
+ */
99
+ function JqExpressionField({ heading, description, error, expression, argName, value, onChange, }) {
100
+ // Memoised: the descriptor's identity feeds jq-studio's own memoisation, so a
101
+ // fresh object each keystroke would defeat it.
102
+ const shape = useMemo(() => expressionShape(expression, argName), [expression, argName]);
103
+ return (_jsx(Suspense, { fallback: _jsx(JqExpressionFieldSkeleton, { heading: heading, description: description, error: error, value: value }), children: _jsx(JqField, { label: heading, description: description, error: error, shape: shape, multiline: true, value: value, onChange: onChange }) }));
104
+ }
105
+ /**
106
+ * The resting shell shown while the jq door chunk loads. It mirrors the live
107
+ * door's footprint — the same label/description/error chrome wrapping a
108
+ * multiline control seeded with the current value — but the control is inert
109
+ * (read-only, `aria-busy`) because there is nothing to edit yet. Matching the
110
+ * footprint is what keeps the Suspense swap from shifting layout or flashing.
111
+ */
112
+ function JqExpressionFieldSkeleton({ heading, description, error, value, }) {
113
+ return (_jsx(Field, { label: heading, description: description, error: error, children: _jsx(Textarea, { value: value, readOnly: true, "aria-busy": "true" }) }));
114
+ }
115
+ /**
116
+ * Map a classified expression annotation onto jq-studio's input-shape
117
+ * descriptor. A bare annotation (`language` only) maps to NO descriptor — the
118
+ * undeclared-shape `JqField` is the honest rendering when the server said
119
+ * nothing about `.`. When any descriptor field is present, the required
120
+ * descriptor members the annotation omits fall back to neutral values rather
121
+ * than invented copy.
122
+ */
123
+ function expressionShape(expression, argName) {
124
+ const declared = expression.label !== undefined ||
125
+ expression.blurb !== undefined ||
126
+ expression.keys !== undefined ||
127
+ expression.returns !== undefined ||
128
+ expression.caveats !== undefined ||
129
+ expression.hasSample;
130
+ if (!declared)
131
+ return undefined;
132
+ return {
133
+ // Opaque, host-namespaced, stable per field (memoisation/telemetry only).
134
+ id: argName === '' ? 'tai42.schema-form' : `tai42.schema-form.${argName}`,
135
+ label: expression.label ?? 'input',
136
+ blurb: expression.blurb ?? '',
137
+ keys: expression.keys ?? [],
138
+ returns: expression.returns ?? '',
139
+ ...(expression.caveats === undefined ? {} : { caveats: expression.caveats }),
140
+ ...(expression.hasSample ? { sample: expression.sample } : {}),
141
+ };
142
+ }
55
143
  const FORMAT_INPUT_TYPES = {
56
144
  email: 'email',
57
145
  uri: 'url',
@@ -1 +1 @@
1
- {"version":3,"file":"string-field.js","sourceRoot":"","sources":["../../src/schema-form/string-field.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"string-field.js","sourceRoot":"","sources":["../../src/schema-form/string-field.tsx"],"names":[],"mappings":";AAsBA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,yEAAyE;AACzE,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAC1E,gFAAgF;AAChF,0EAA0E;AAC1E,iFAAiF;AACjF,aAAa;AACb,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;IAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,WAAW,EACX,KAAK,EACL,MAAM,EACN,KAAK,EACL,UAAU,EACV,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,GAYT;IACC,MAAM,kBAAkB,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,4EAA4E;IAC5E,oDAAoD;IACpD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;QAClC,QAAQ,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,gFAAgF;IAChF,wEAAwE;IACxE,6EAA6E;IAC7E,+EAA+E;IAC/E,uEAAuE;IACvE,iEAAiE;IACjE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CACL,KAAC,iBAAiB,IAChB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,GACd,CACH,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CACL,KAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,GACd,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,YAC1D,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,CAClC,KAAC,eAAe,IACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,kBAAkB,GAC5B,CACH,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IACR,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAC7B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,GACD,CACH,GACK,CACT,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,EACvB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,GAMT;IACC,2EAA2E;IAC3E,+EAA+E;IAC/E,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,OAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAC/C,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB,CAAC;IACF,8EAA8E;IAC9E,6EAA6E;IAC7E,4EAA4E;IAC5E,8EAA8E;IAC9E,+BAA+B;IAC/B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC5D,kEAAkE;IAClE,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,KAAc,EAAE,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,kDAAkD,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;QACnF,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO,CACL,8BACE,KAAC,eAAe,IACd,KAAK,EAAE,KAAK;gBACZ,uEAAuE;gBACvE,2DAA2D;gBAC3D,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;oBACjB,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC,EACD,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,OAAO,GAChB,EAID,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACzB,aAAG,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,aAC9D,KAAC,iBAAiB,KAAG,EACpB,gCAAgC,OAAO,EAAE,IACxC,CACL,IACA,CACJ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAS,iBAAiB,CAAC,EACzB,OAAO,EACP,WAAW,EACX,KAAK,EACL,UAAU,EACV,OAAO,EACP,KAAK,EACL,QAAQ,GAST;IACC,8EAA8E;IAC9E,+CAA+C;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACzF,OAAO,CACL,KAAC,QAAQ,IACP,QAAQ,EACN,KAAC,yBAAyB,IACxB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,GACZ,YAGJ,KAAC,OAAO,IACN,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,QACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GAClB,GACO,CACZ,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,EACjC,OAAO,EACP,WAAW,EACX,KAAK,EACL,KAAK,GAMN;IACC,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,YAC3D,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,qBAAW,MAAM,GAAG,GAC9C,CACT,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,UAAgC,EAChC,OAAe;IAEf,MAAM,QAAQ,GACZ,UAAU,CAAC,KAAK,KAAK,SAAS;QAC9B,UAAU,CAAC,KAAK,KAAK,SAAS;QAC9B,UAAU,CAAC,IAAI,KAAK,SAAS;QAC7B,UAAU,CAAC,OAAO,KAAK,SAAS;QAChC,UAAU,CAAC,OAAO,KAAK,SAAS;QAChC,UAAU,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO;QACL,0EAA0E;QAC1E,EAAE,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,qBAAqB,OAAO,EAAE;QACzE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,OAAO;QAClC,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE;QAC7B,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE;QAC3B,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,EAAE;QACjC,GAAG,CAAC,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC;QAC5E,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAA2B;IACjD,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IACV,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,gBAAgB;IAC7B,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,SAAS,eAAe,CAAC,MAA0B;IACjD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tai42/studio-sdk",
3
- "version": "9.1.0",
3
+ "version": "9.2.1",
4
4
  "description": "The Studio plugin contract, shared UI components, and hooks that every feature builds on.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "tai42 <oss@tai42.ai>",
@@ -91,7 +91,7 @@
91
91
  "@radix-ui/react-tabs": "^1.1.16",
92
92
  "@radix-ui/react-tooltip": "^1.2.11",
93
93
  "@tai42/jq-studio": "^0.1.3",
94
- "@tai42/api-client": "9.1.0"
94
+ "@tai42/api-client": "9.2.1"
95
95
  },
96
96
  "scripts": {
97
97
  "build": "tsc -b tsconfig.build.json && node scripts/copy-assets.mjs",
@@ -40,6 +40,43 @@ export interface MediaUpload {
40
40
  readonly maxBytes: number | undefined;
41
41
  }
42
42
 
43
+ /** One top-level key of the expression's input document, with a one-line gloss. */
44
+ export interface ExpressionAnnotationKey {
45
+ readonly name: string;
46
+ readonly gloss: string;
47
+ }
48
+
49
+ /**
50
+ * The `x-tai42-expression` annotation on a string schema: the server declares
51
+ * that the field's value is authored in a pipeline expression language (only jq
52
+ * today) and optionally describes what `.` is for that expression. The renderer
53
+ * uses it to open the visual-editor door instead of a plain text box. The shape
54
+ * mirrors jq-studio's input-shape descriptor WITHOUT importing it — classification
55
+ * stays a pure schema concern; the renderer maps this onto a jq field declaration.
56
+ */
57
+ export interface ExpressionAnnotation {
58
+ /** The declared language. An unknown language never reaches here — it classifies
59
+ * as a plain string, so an older client renders a newer server's field as the
60
+ * ordinary text input it always was. */
61
+ readonly language: 'jq';
62
+ /** Short chip label for what `.` is (e.g. "node envelope"). */
63
+ readonly label: string | undefined;
64
+ /** One sentence describing what `.` is in this field. */
65
+ readonly blurb: string | undefined;
66
+ /** The top-level keys of `.`, each with a one-liner. */
67
+ readonly keys: readonly ExpressionAnnotationKey[] | undefined;
68
+ /** What the expression must return (e.g. "true or false"). */
69
+ readonly returns: string | undefined;
70
+ /** Per-field caveats. */
71
+ readonly caveats: readonly string[] | undefined;
72
+ /** True when the annotation carries a `sample` — tracked separately because a
73
+ * legitimate sample may be JSON `null`. */
74
+ readonly hasSample: boolean;
75
+ /** A static skeleton of `.` for the Test panel. Meaningful only when
76
+ * {@link hasSample} is true. */
77
+ readonly sample: unknown;
78
+ }
79
+
43
80
  /** One selectable variant of a union field. */
44
81
  export interface UnionVariant {
45
82
  readonly label: string;
@@ -58,6 +95,9 @@ export type FieldModel =
58
95
  readonly format: string | undefined;
59
96
  /** Present when media annotations opt the field into the upload control. */
60
97
  readonly media: MediaUpload | undefined;
98
+ /** Present when a well-formed `x-tai42-expression` annotation opts the
99
+ * field into the jq expression editor (see {@link ExpressionAnnotation}). */
100
+ readonly expression: ExpressionAnnotation | undefined;
61
101
  }
62
102
  | { readonly kind: 'number'; readonly integer: boolean }
63
103
  | { readonly kind: 'boolean' }
@@ -132,6 +172,70 @@ function mediaUpload(schema: JsonSchema): MediaUpload | undefined {
132
172
  return undefined;
133
173
  }
134
174
 
175
+ const EXPRESSION_KEYWORD = 'x-tai42-expression';
176
+
177
+ /** A parsed-JSON plain object (arrays and `null` are `typeof 'object'` too). */
178
+ function isRecord(value: unknown): value is Record<string, unknown> {
179
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
180
+ }
181
+
182
+ /**
183
+ * Detect the `x-tai42-expression` annotation on a (ref-resolved) string schema,
184
+ * mirroring {@link mediaUpload}: a well-formed annotation opts the field into the
185
+ * jq expression editor; anything else — absent, non-object, unknown language, or
186
+ * any wrongly-typed member — yields `undefined`, so the field renders EXACTLY as
187
+ * the plain string input it is today. Malformed payloads NEVER throw: a bad
188
+ * annotation is a server-side authoring bug, and degrading to the ordinary text
189
+ * box keeps the form usable while staying byte-identical to the unannotated
190
+ * rendering.
191
+ */
192
+ function expressionAnnotation(schema: JsonSchema): ExpressionAnnotation | undefined {
193
+ const raw: unknown = schema[EXPRESSION_KEYWORD];
194
+ if (!isRecord(raw)) return undefined;
195
+ // The language gate doubles as the forward-compatibility valve: a future
196
+ // language this client does not understand degrades to a plain string field.
197
+ if (raw.language !== 'jq') return undefined;
198
+
199
+ const { label, blurb, returns } = raw;
200
+ if (label !== undefined && typeof label !== 'string') return undefined;
201
+ if (blurb !== undefined && typeof blurb !== 'string') return undefined;
202
+ if (returns !== undefined && typeof returns !== 'string') return undefined;
203
+
204
+ let keys: ExpressionAnnotationKey[] | undefined;
205
+ if (raw.keys !== undefined) {
206
+ if (!Array.isArray(raw.keys)) return undefined;
207
+ keys = [];
208
+ for (const entry of raw.keys as readonly unknown[]) {
209
+ if (!isRecord(entry) || typeof entry.name !== 'string' || typeof entry.gloss !== 'string') {
210
+ return undefined;
211
+ }
212
+ keys.push({ name: entry.name, gloss: entry.gloss });
213
+ }
214
+ }
215
+
216
+ let caveats: string[] | undefined;
217
+ if (raw.caveats !== undefined) {
218
+ if (!Array.isArray(raw.caveats)) return undefined;
219
+ caveats = [];
220
+ for (const entry of raw.caveats as readonly unknown[]) {
221
+ if (typeof entry !== 'string') return undefined;
222
+ caveats.push(entry);
223
+ }
224
+ }
225
+
226
+ // `sample` is any JSON — including `null` — so presence is tracked, not typed.
227
+ return {
228
+ language: 'jq',
229
+ label,
230
+ blurb,
231
+ keys,
232
+ returns,
233
+ caveats,
234
+ hasSample: 'sample' in raw,
235
+ sample: raw.sample,
236
+ };
237
+ }
238
+
135
239
  /**
136
240
  * Land a shape the form has no structured editor for on the free-form JSON
137
241
  * fallback (a mono JSON textarea) rather than a dead badge — a field is never
@@ -208,10 +312,16 @@ export function classifySchema(raw: JsonSchema, root: JsonSchema): ClassifiedFie
208
312
  // that land on the OUTER null-union wrapper of an OPTIONAL field would
209
313
  // otherwise be lost when delegating to the inner string member, silently
210
314
  // degrading an optional upload field to a plain text box. Re-detect them on
211
- // the wrapper and attach to the inner string model.
315
+ // the wrapper and attach to the inner string model. The expression
316
+ // annotation gets the same treatment for the same reason: an optional
317
+ // annotated field must keep its editor door.
212
318
  const model =
213
- inner.model.kind === 'string' && inner.model.media === undefined
214
- ? { ...inner.model, media: mediaUpload(resolved) }
319
+ inner.model.kind === 'string'
320
+ ? {
321
+ ...inner.model,
322
+ media: inner.model.media ?? mediaUpload(resolved),
323
+ expression: inner.model.expression ?? expressionAnnotation(resolved),
324
+ }
215
325
  : inner.model;
216
326
  return {
217
327
  model,
@@ -309,7 +419,12 @@ export function classifySchema(raw: JsonSchema, root: JsonSchema): ClassifiedFie
309
419
  switch (type) {
310
420
  case 'string':
311
421
  return {
312
- model: { kind: 'string', format: resolved.format, media: mediaUpload(resolved) },
422
+ model: {
423
+ kind: 'string',
424
+ format: resolved.format,
425
+ media: mediaUpload(resolved),
426
+ expression: expressionAnnotation(resolved),
427
+ },
313
428
  nullable: nullableByType,
314
429
  schema: resolved,
315
430
  title,
@@ -85,6 +85,7 @@ export function FieldNode(props: FieldNodeProps): ReactNode {
85
85
  error={error}
86
86
  format={model.format}
87
87
  media={model.media}
88
+ expression={model.expression}
88
89
  argName={path}
89
90
  value={value}
90
91
  required={required}
@@ -1,28 +1,58 @@
1
1
  /**
2
2
  * The string field renderer. A plain string renders as a text input (its
3
- * `type` derived from any JSON-Schema `format`); a media-annotated schema
4
- * renders the upload control instead; and when the form supplies a completion
5
- * provider, the input is backed by argument autocomplete.
3
+ * `type` derived from any JSON-Schema `format`); an expression-annotated schema
4
+ * renders the jq field (a resting textarea with the visual-editor door); a
5
+ * media-annotated schema renders the upload control instead; and when the form
6
+ * supplies a completion provider, the input is backed by argument autocomplete.
7
+ *
8
+ * `JqField` is reached through the SDK's own `./jq` re-export — the ONE
9
+ * `@tai42/jq-studio` instance the whole deployment shares — never from
10
+ * `@tai42/jq-studio` directly, which would bundle a second copy and orphan its
11
+ * worker (see the `jq` module doc-comment).
12
+ *
13
+ * That door is loaded LAZILY, through a dynamic `import('../jq')` behind
14
+ * {@link JqField}. The jq authoring door drags a heavy subgraph — the xyflow
15
+ * visual editor, a Web Worker entry, and a wasm engine chunk — that a form
16
+ * whose fields carry no `x-tai42-expression` annotation must never ship. A
17
+ * static import would pin that subgraph into every consumer that bundles the
18
+ * SDK (a host that externalises the SDK is unaffected either way); the dynamic
19
+ * import keeps it out of `schema-form`'s static graph and pulls it only when an
20
+ * annotated field actually mounts.
6
21
  */
7
22
  import type { ReactNode } from 'react';
8
- import { useCallback, useContext, useState } from 'react';
23
+ import { Suspense, lazy, useCallback, useContext, useMemo, useState } from 'react';
9
24
 
10
25
  import { CompletionInput } from '../components/completion-input';
11
26
  import { Field } from '../components/field';
12
27
  import { AlertTriangleIcon } from '../components/icons';
13
- import { TextInput } from '../components/inputs';
28
+ import { TextInput, Textarea } from '../components/inputs';
14
29
  import { errorMessage } from '../errors';
15
- import type { MediaUpload } from './classify';
30
+ import type { JqInputShapeDescriptor } from '../jq';
31
+ import type { ExpressionAnnotation, MediaUpload } from './classify';
16
32
  import { CompletionProviderContext } from './context';
17
33
  import { MediaField } from './media-field';
18
34
  import type { CompletionProvider } from './SchemaForm';
19
35
 
36
+ // The lazily-loaded jq door. Defining it at module scope (never inside a
37
+ // component) is what keeps the lazy component's identity stable across renders,
38
+ // so React resolves the chunk once and never re-suspends a mounted field. The
39
+ // `import('../jq')` here is a DYNAMIC import — the sole runtime edge from
40
+ // `schema-form` to the jq door — so the visual editor, worker, and wasm live in
41
+ // a split chunk that a non-annotated form never requests. The `type`-only
42
+ // import of `JqInputShapeDescriptor` above is erased at compile time and adds no
43
+ // such edge.
44
+ const JqField = lazy(async () => {
45
+ const { JqField } = await import('../jq');
46
+ return { default: JqField };
47
+ });
48
+
20
49
  export function StringField({
21
50
  heading,
22
51
  description,
23
52
  error,
24
53
  format,
25
54
  media,
55
+ expression,
26
56
  argName,
27
57
  value,
28
58
  required,
@@ -33,6 +63,7 @@ export function StringField({
33
63
  error: string | undefined;
34
64
  format: string | undefined;
35
65
  media: MediaUpload | undefined;
66
+ expression: ExpressionAnnotation | undefined;
36
67
  argName: string;
37
68
  value: unknown;
38
69
  required: boolean;
@@ -46,6 +77,26 @@ export function StringField({
46
77
  onChange(next === '' && !required ? undefined : next);
47
78
  };
48
79
 
80
+ // An expression-annotated field renders the jq field — the resting control plus
81
+ // the visual-editor door. Checked before `media` because the expression
82
+ // annotation is the more specific, deliberate opt-in (`x-tai42-expression`);
83
+ // a schema carrying both is contradictory, and a jq expression is text, not an
84
+ // upload. Not reachable together with the completion provider path: an
85
+ // expression is authored, not completed from server suggestions.
86
+ if (expression !== undefined) {
87
+ return (
88
+ <JqExpressionField
89
+ heading={heading}
90
+ description={description}
91
+ error={error}
92
+ expression={expression}
93
+ argName={argName}
94
+ value={current}
95
+ onChange={emit}
96
+ />
97
+ );
98
+ }
99
+
49
100
  // A media-annotated field renders the upload control instead of a text box.
50
101
  if (media !== undefined) {
51
102
  return (
@@ -146,6 +197,130 @@ function CompletionField({
146
197
  );
147
198
  }
148
199
 
200
+ /**
201
+ * An expression-annotated string field, rendered as `JqField`: a multiline
202
+ * resting control with the always-present visual-editor door. `JqField` brings
203
+ * its own label/description/error chrome (a11y-linked slots), so it is NOT
204
+ * wrapped in the form's `Field` component — the annotation's descriptor fields
205
+ * map onto jq-studio's input-shape descriptor, and the form's per-field error
206
+ * feeds the `error` prop.
207
+ *
208
+ * Deliberately unwired:
209
+ * - `serverValidate` — no author-time validation endpoint applies to a
210
+ * schema-declared field (the WASM runtime still powers the Test panel locally).
211
+ * - `onEditorOpenChange` — the hosts that render `SchemaForm` register no global
212
+ * keyboard shortcuts, so there is nothing to mute while the editor is open.
213
+ * - `compact` — the form renders every sibling field with a visible label;
214
+ * the compact variant (visually-hidden label, icon-only door) is for dense
215
+ * host rows, which the schema form does not have.
216
+ *
217
+ * The door is code-split ({@link JqField} is a `lazy` component), so it mounts
218
+ * inside a `Suspense` boundary. Its fallback paints the resting shell —
219
+ * label/description/error chrome around the current value in a read-only
220
+ * multiline control — so the field holds its layout and keeps the value visible
221
+ * while the chunk resolves, and the swap to the live door does not flash.
222
+ */
223
+ function JqExpressionField({
224
+ heading,
225
+ description,
226
+ error,
227
+ expression,
228
+ argName,
229
+ value,
230
+ onChange,
231
+ }: {
232
+ heading: string;
233
+ description: string | undefined;
234
+ error: string | undefined;
235
+ expression: ExpressionAnnotation;
236
+ argName: string;
237
+ value: string;
238
+ onChange: (value: string) => void;
239
+ }): ReactNode {
240
+ // Memoised: the descriptor's identity feeds jq-studio's own memoisation, so a
241
+ // fresh object each keystroke would defeat it.
242
+ const shape = useMemo(() => expressionShape(expression, argName), [expression, argName]);
243
+ return (
244
+ <Suspense
245
+ fallback={
246
+ <JqExpressionFieldSkeleton
247
+ heading={heading}
248
+ description={description}
249
+ error={error}
250
+ value={value}
251
+ />
252
+ }
253
+ >
254
+ <JqField
255
+ label={heading}
256
+ description={description}
257
+ error={error}
258
+ shape={shape}
259
+ multiline
260
+ value={value}
261
+ onChange={onChange}
262
+ />
263
+ </Suspense>
264
+ );
265
+ }
266
+
267
+ /**
268
+ * The resting shell shown while the jq door chunk loads. It mirrors the live
269
+ * door's footprint — the same label/description/error chrome wrapping a
270
+ * multiline control seeded with the current value — but the control is inert
271
+ * (read-only, `aria-busy`) because there is nothing to edit yet. Matching the
272
+ * footprint is what keeps the Suspense swap from shifting layout or flashing.
273
+ */
274
+ function JqExpressionFieldSkeleton({
275
+ heading,
276
+ description,
277
+ error,
278
+ value,
279
+ }: {
280
+ heading: string;
281
+ description: string | undefined;
282
+ error: string | undefined;
283
+ value: string;
284
+ }): ReactNode {
285
+ return (
286
+ <Field label={heading} description={description} error={error}>
287
+ <Textarea value={value} readOnly aria-busy="true" />
288
+ </Field>
289
+ );
290
+ }
291
+
292
+ /**
293
+ * Map a classified expression annotation onto jq-studio's input-shape
294
+ * descriptor. A bare annotation (`language` only) maps to NO descriptor — the
295
+ * undeclared-shape `JqField` is the honest rendering when the server said
296
+ * nothing about `.`. When any descriptor field is present, the required
297
+ * descriptor members the annotation omits fall back to neutral values rather
298
+ * than invented copy.
299
+ */
300
+ function expressionShape(
301
+ expression: ExpressionAnnotation,
302
+ argName: string,
303
+ ): JqInputShapeDescriptor | undefined {
304
+ const declared =
305
+ expression.label !== undefined ||
306
+ expression.blurb !== undefined ||
307
+ expression.keys !== undefined ||
308
+ expression.returns !== undefined ||
309
+ expression.caveats !== undefined ||
310
+ expression.hasSample;
311
+ if (!declared) return undefined;
312
+ return {
313
+ // Opaque, host-namespaced, stable per field (memoisation/telemetry only).
314
+ id: argName === '' ? 'tai42.schema-form' : `tai42.schema-form.${argName}`,
315
+ label: expression.label ?? 'input',
316
+ blurb: expression.blurb ?? '',
317
+ keys: expression.keys ?? [],
318
+ returns: expression.returns ?? '',
319
+ ...(expression.caveats === undefined ? {} : { caveats: expression.caveats }),
320
+ ...(expression.hasSample ? { sample: expression.sample } : {}),
321
+ };
322
+ }
323
+
149
324
  const FORMAT_INPUT_TYPES: Record<string, string> = {
150
325
  email: 'email',
151
326
  uri: 'url',