diff --git a/frontend/src/shell/WidgetHost.tsx b/frontend/src/shell/WidgetHost.tsx index b8c8867e..da9ae89c 100644 --- a/frontend/src/shell/WidgetHost.tsx +++ b/frontend/src/shell/WidgetHost.tsx @@ -29,7 +29,10 @@ export function WidgetHost({ sessionId }: { sessionId: string | null }) { } setLastUserEntry({ kind: "choice", - text: r.text ?? r.choices?.join(", ") ?? r.decision?.type ?? r.control ?? "(choice)", + text: + r.kind === "schema-linking" + ? `${r.tables?.filter((t) => t.enacted).length ?? 0} tables curated` + : r.text ?? r.choices?.join(", ") ?? r.decision?.type ?? r.control ?? "(choice)", }); clearPending(); }; diff --git a/frontend/src/widgets/index.ts b/frontend/src/widgets/index.ts index 640e7402..c5802a45 100644 --- a/frontend/src/widgets/index.ts +++ b/frontend/src/widgets/index.ts @@ -5,10 +5,12 @@ import { FreetextWidget } from "./FreetextWidget"; import { MultiselectWidget } from "./MultiselectWidget"; import { ArtifactGateWidget } from "./ArtifactGateWidget"; import { ArtifactWidget } from "./ArtifactWidget"; +import { SchemaLinkingGateWidget } from "./SchemaLinkingGateWidget"; register("select", SelectWidget); register("info", InfoWidget); register("freetext", FreetextWidget); register("multiselect", MultiselectWidget); register("artifact-gate", ArtifactGateWidget); register("artifact", ArtifactWidget); +register("schema-linking", SchemaLinkingGateWidget); export { resolve } from "./registry"; diff --git a/frontend/src/widgets/registry.test.tsx b/frontend/src/widgets/registry.test.tsx index 34b605cf..547ddcd2 100644 --- a/frontend/src/widgets/registry.test.tsx +++ b/frontend/src/widgets/registry.test.tsx @@ -13,3 +13,9 @@ test("resolve falls back for unknown kind and shows the JSON", () => { render( {}} />); expect(screen.getByText(/Unsupported widget/i)).toBeInTheDocument(); }); + +test("index registers the schema-linking widget", async () => { + await import("./index"); + const Comp = resolve("schema-linking"); + expect(Comp.name).toBe("SchemaLinkingGateWidget"); +});