feat(frontend): register schema-linking widget + response summary

This commit is contained in:
2026-07-06 23:25:00 +02:00
committed by Marco Pancotti
parent b6397bd965
commit 32b8e78032
3 changed files with 12 additions and 1 deletions
+4 -1
View File
@@ -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();
};
+2
View File
@@ -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";
+6
View File
@@ -13,3 +13,9 @@ test("resolve falls back for unknown kind and shows the JSON", () => {
render(<Comp descriptor={{ id: "u1", widget: "totally-unknown", title: "X" } as any} onRespond={() => {}} />);
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");
});