@yourgpt/copilot-sdk 2.1.5-alpha.4 → 2.1.5-alpha.6
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.
- package/dist/{MessageTree-CSIHErPK.d.ts → MessageTree-Clhiv_k2.d.ts} +4 -3
- package/dist/{MessageTree-B0JGQOCi.d.cts → MessageTree-Dt9qfJ55.d.cts} +4 -3
- package/dist/{chunk-XUR3IOPX.cjs → chunk-2QLF7XM7.cjs} +1557 -3120
- package/dist/chunk-2QLF7XM7.cjs.map +1 -0
- package/dist/{chunk-NUXLAZOE.cjs → chunk-3ZDRX7J2.cjs} +2 -2
- package/dist/{chunk-NUXLAZOE.cjs.map → chunk-3ZDRX7J2.cjs.map} +1 -1
- package/dist/{chunk-RKGRQRZU.js → chunk-533K2Z7C.js} +4 -4
- package/dist/{chunk-RKGRQRZU.js.map → chunk-533K2Z7C.js.map} +1 -1
- package/dist/chunk-5EGBIQYS.cjs +292 -0
- package/dist/chunk-5EGBIQYS.cjs.map +1 -0
- package/dist/{chunk-3AONOZLY.js → chunk-AIVXGTWS.js} +2 -2
- package/dist/chunk-AIVXGTWS.js.map +1 -0
- package/dist/{chunk-LLM7AHMO.js → chunk-DDZLRCVX.js} +2 -2
- package/dist/{chunk-LLM7AHMO.js.map → chunk-DDZLRCVX.js.map} +1 -1
- package/dist/{chunk-FLZO2FO3.js → chunk-I2XOCFHG.js} +1558 -3071
- package/dist/chunk-I2XOCFHG.js.map +1 -0
- package/dist/{chunk-EEH3L64W.js → chunk-PSNLKMZH.js} +73 -11
- package/dist/chunk-PSNLKMZH.js.map +1 -0
- package/dist/chunk-PURFAD2P.js +2020 -0
- package/dist/chunk-PURFAD2P.js.map +1 -0
- package/dist/chunk-QTGEEBRW.cjs +2077 -0
- package/dist/chunk-QTGEEBRW.cjs.map +1 -0
- package/dist/{chunk-TPB7XED6.cjs → chunk-TPDMBDQX.cjs} +2 -2
- package/dist/chunk-TPDMBDQX.cjs.map +1 -0
- package/dist/chunk-TXQ37MAO.js +287 -0
- package/dist/chunk-TXQ37MAO.js.map +1 -0
- package/dist/{chunk-B4YDIMP3.cjs → chunk-VION33GW.cjs} +92 -30
- package/dist/chunk-VION33GW.cjs.map +1 -0
- package/dist/{chunk-MDS23G2S.cjs → chunk-Y2A6AMGO.cjs} +10 -10
- package/dist/{chunk-MDS23G2S.cjs.map → chunk-Y2A6AMGO.cjs.map} +1 -1
- package/dist/core/index.cjs +93 -93
- package/dist/core/index.d.cts +3 -3
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +5 -5
- package/dist/experimental/index.cjs +644 -0
- package/dist/experimental/index.cjs.map +1 -0
- package/dist/experimental/index.d.cts +924 -0
- package/dist/experimental/index.d.ts +924 -0
- package/dist/experimental/index.js +611 -0
- package/dist/experimental/index.js.map +1 -0
- package/dist/{index-D7169xuR.d.ts → index-D8zza1Q8.d.ts} +1 -1
- package/dist/{index-CzJB8Ddo.d.cts → index-DCVjTdIZ.d.cts} +1 -1
- package/dist/mcp/index.d.cts +3 -3
- package/dist/mcp/index.d.ts +3 -3
- package/dist/react/index.cjs +140 -123
- package/dist/react/index.d.cts +378 -10
- package/dist/react/index.d.ts +378 -10
- package/dist/react/index.js +7 -6
- package/dist/styles.css +45 -0
- package/dist/tools/anthropic/index.cjs +3 -3
- package/dist/tools/anthropic/index.d.cts +1 -1
- package/dist/tools/anthropic/index.d.ts +1 -1
- package/dist/tools/anthropic/index.js +2 -2
- package/dist/tools/brave/index.cjs +6 -6
- package/dist/tools/brave/index.d.cts +1 -1
- package/dist/tools/brave/index.d.ts +1 -1
- package/dist/tools/brave/index.js +3 -3
- package/dist/tools/exa/index.cjs +6 -6
- package/dist/tools/exa/index.d.cts +1 -1
- package/dist/tools/exa/index.d.ts +1 -1
- package/dist/tools/exa/index.js +3 -3
- package/dist/tools/google/index.cjs +6 -6
- package/dist/tools/google/index.d.cts +1 -1
- package/dist/tools/google/index.d.ts +1 -1
- package/dist/tools/google/index.js +4 -4
- package/dist/tools/openai/index.cjs +6 -6
- package/dist/tools/openai/index.d.cts +1 -1
- package/dist/tools/openai/index.d.ts +1 -1
- package/dist/tools/openai/index.js +3 -3
- package/dist/tools/searxng/index.cjs +6 -6
- package/dist/tools/searxng/index.d.cts +1 -1
- package/dist/tools/searxng/index.d.ts +1 -1
- package/dist/tools/searxng/index.js +3 -3
- package/dist/tools/serper/index.cjs +6 -6
- package/dist/tools/serper/index.d.cts +1 -1
- package/dist/tools/serper/index.d.ts +1 -1
- package/dist/tools/serper/index.js +3 -3
- package/dist/tools/tavily/index.cjs +6 -6
- package/dist/tools/tavily/index.d.cts +1 -1
- package/dist/tools/tavily/index.d.ts +1 -1
- package/dist/tools/tavily/index.js +3 -3
- package/dist/tools/web-search/index.cjs +7 -7
- package/dist/tools/web-search/index.d.cts +2 -2
- package/dist/tools/web-search/index.d.ts +2 -2
- package/dist/tools/web-search/index.js +4 -4
- package/dist/{tools-tmksfhUo.d.cts → tools-DcS6Aeao.d.cts} +7 -3
- package/dist/{tools-tmksfhUo.d.ts → tools-DcS6Aeao.d.ts} +7 -3
- package/dist/{types-BqwW3Baj.d.ts → types-BUYni9B8.d.ts} +1 -1
- package/dist/{types-BLw7mxtW.d.cts → types-Cvg4DUoc.d.cts} +1 -1
- package/dist/ui/index.cjs +1297 -596
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +136 -9
- package/dist/ui/index.d.ts +136 -9
- package/dist/ui/index.js +1128 -436
- package/dist/ui/index.js.map +1 -1
- package/package.json +6 -1
- package/dist/chunk-3AONOZLY.js.map +0 -1
- package/dist/chunk-B4YDIMP3.cjs.map +0 -1
- package/dist/chunk-EEH3L64W.js.map +0 -1
- package/dist/chunk-FLZO2FO3.js.map +0 -1
- package/dist/chunk-TPB7XED6.cjs.map +0 -1
- package/dist/chunk-XUR3IOPX.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/experimental/generativeUITool.ts","../../src/experimental/renderers/HtmlRenderer.tsx","../../src/experimental/renderers/TableRenderer.tsx","../../src/experimental/renderers/StatRenderer.tsx","../../src/experimental/renderers/CardRenderer.tsx","../../src/experimental/types.ts","../../src/experimental/useGenerativeUI.tsx"],"names":["jsxs","cn","jsx","React","z","React2","useTool","DotsLoader"],"mappings":"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","file":"index.cjs","sourcesContent":["// Flat JSON schema — GenerativeUIPayloadSchema is used only in the client handler for validation — same structure as RENDER_UI_SCHEMA in useGenerativeUI.\n// Flat object schemas with a discriminator field work reliably across all LLMs.\nexport const RENDER_UI_PARAMETERS = {\n type: \"object\" as const,\n properties: {\n type: {\n type: \"string\" as const,\n enum: [\"html\", \"chart\", \"table\", \"stat\", \"card\"],\n description: \"UI component type to render\",\n },\n html: {\n type: \"string\" as const,\n description: \"Raw HTML with Tailwind classes (type=html)\",\n },\n height: { type: \"string\" as const },\n chartType: {\n type: \"string\" as const,\n enum: [\"bar\", \"line\", \"pie\", \"area\", \"scatter\"],\n description: \"Chart variant (type=chart)\",\n },\n labels: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n description: \"X-axis category labels (type=chart)\",\n },\n datasets: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n data: { type: \"array\" as const, items: { type: \"number\" as const } },\n },\n required: [\"label\", \"data\"],\n },\n description: \"Data series (type=chart)\",\n },\n xLabel: { type: \"string\" as const },\n yLabel: { type: \"string\" as const },\n columns: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n key: { type: \"string\" as const },\n label: { type: \"string\" as const },\n align: { type: \"string\" as const },\n },\n required: [\"key\", \"label\"],\n },\n description:\n \"Column definitions — key matches row property names (type=table)\",\n },\n rows: {\n type: \"array\" as const,\n items: { type: \"object\" as const },\n description: \"Array of row objects keyed by column.key (type=table)\",\n },\n caption: { type: \"string\" as const },\n stats: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n value: { type: \"string\" as const },\n change: { type: \"string\" as const },\n changeDirection: {\n type: \"string\" as const,\n enum: [\"positive\", \"negative\", \"neutral\"],\n },\n description: { type: \"string\" as const },\n },\n required: [\"label\", \"value\"],\n },\n description: \"KPI stats array (type=stat)\",\n },\n title: {\n type: \"string\" as const,\n description: \"Title shown above the component\",\n },\n subtitle: { type: \"string\" as const },\n body: { type: \"string\" as const },\n fields: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n value: { type: \"string\" as const },\n badge: { type: \"boolean\" as const },\n },\n required: [\"label\", \"value\"],\n },\n description: \"Key-value fields (type=card)\",\n },\n cta: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n url: { type: \"string\" as const },\n },\n required: [\"label\", \"url\"],\n description: \"Call-to-action link (type=card)\",\n },\n },\n required: [\"type\"],\n};\n\nexport interface GenerativeUIToolConfig {\n /**\n * Override the default LLM description.\n * The default instructs the model when to use each UI type.\n */\n description?: string;\n}\n\n/**\n * Returns a tool definition compatible with `streamText` for use in your backend route.\n *\n * Pass the returned object as a value in the `tools` map of `streamText`.\n * The key you use becomes the tool name — use the same name in `useGenerativeUI({ name })` on the frontend.\n *\n * @example\n * ```ts\n * import { streamText } from \"@yourgpt/llm-sdk\";\n * import { generativeUITool } from \"@yourgpt/copilot-sdk/experimental\";\n *\n * const result = await streamText({\n * model: openai(\"gpt-4o\"),\n * messages,\n * tools: {\n * render_ui: generativeUITool(),\n * // ...your other tools\n * },\n * });\n * ```\n */\nexport function generativeUITool(config: GenerativeUIToolConfig = {}) {\n return {\n description:\n config.description ??\n `Render a rich visual UI component directly in the chat. Use this tool whenever the user's request is best answered with a visual instead of text.\n\nChoose the type based on what fits best:\n- \"table\": structured rows of data (comparisons, lists, records)\n- \"stat\": KPI metrics, numbers with labels, dashboards with change deltas\n- \"card\": entity summaries — profiles, products, results, structured key-value info\n- \"chart\": graphs and visualizations — bar, line, pie, area, scatter — pass raw data only, not markup\n- \"html\": anything that requires custom layout, rich formatting, or doesn't fit the above types — use Tailwind CSS classes freely\n\nAlways prefer a structured type (table, stat, card) over html when the data fits.\nOnly use html as a last resort for truly freeform content.`,\n parameters: RENDER_UI_PARAMETERS,\n };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../ui/lib/utils\";\nimport type { HtmlPayload } from \"../types\";\n\ninterface HtmlRendererProps {\n payload: HtmlPayload;\n className?: string;\n}\n\n/**\n * Strip only external script src= tags (e.g. duplicate CDN loads the AI might add).\n * Inline <script> blocks are kept — they're needed for Chart.js initialization\n * and are safe inside the sandboxed iframe.\n * Inline event handlers (onclick=, onerror=) are stripped as defense-in-depth.\n */\nfunction sanitizeHtml(html: string): string {\n return html\n .replace(/<script\\b[^>]*\\bsrc=[\"'][^\"']*[\"'][^>]*><\\/script>/gi, \"\")\n .replace(/\\s*on\\w+=\"[^\"]*\"/gi, \"\")\n .replace(/\\s*on\\w+='[^']*'/gi, \"\");\n}\n\n/**\n * Renders AI-generated HTML inside an isolated iframe.\n * Tailwind CSS is loaded via CDN — iframes provide a full document context\n * so the Tailwind Play CDN can scan and style classes correctly.\n */\nexport function HtmlRenderer({ payload, className }: HtmlRendererProps) {\n const clean = sanitizeHtml(payload.html);\n\n const srcdoc = `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\" />\n <script src=\"https://cdn.tailwindcss.com\"><\\/script>\n <script src=\"https://cdn.jsdelivr.net/npm/chart.js\"><\\/script>\n <style>\n body { margin: 0; padding: 4px; font-family: ui-sans-serif, system-ui, sans-serif; }\n * { box-sizing: border-box; }\n </style>\n</head>\n<body>${clean}</body>\n</html>`;\n\n return (\n <div\n className={cn(\"csdk-genui-html\", className)}\n style={{ width: \"min(700px, calc(100vw - 320px))\", minWidth: \"320px\" }}\n >\n {payload.title && (\n <p className=\"mb-1.5 text-xs font-medium text-muted-foreground\">\n {payload.title}\n </p>\n )}\n <iframe\n srcDoc={srcdoc}\n sandbox=\"allow-scripts\"\n style={{\n height: payload.height ?? \"520px\",\n minHeight: \"120px\",\n width: \"100%\",\n }}\n className=\"rounded-md border border-border bg-white\"\n title={payload.title ?? \"Rendered HTML\"}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../ui/lib/utils\";\nimport type { TablePayload } from \"../types\";\n\ninterface TableRendererProps {\n payload: TablePayload;\n className?: string;\n}\n\nexport function TableRenderer({ payload, className }: TableRendererProps) {\n const { columns, rows, caption } = payload;\n\n return (\n <div\n className={cn(\n \"csdk-genui-table w-full overflow-x-auto rounded-md border border-border\",\n className,\n )}\n >\n <table className=\"w-full min-w-full text-sm\">\n {caption && (\n <caption className=\"px-3 pt-2 pb-1 text-left text-xs text-muted-foreground\">\n {caption}\n </caption>\n )}\n <thead>\n <tr className=\"border-b border-border bg-muted/40\">\n {columns.map((col) => (\n <th\n key={col.key}\n className={cn(\n \"whitespace-nowrap px-3 py-2 font-medium text-foreground\",\n col.align === \"right\" && \"text-right\",\n col.align === \"center\" && \"text-center\",\n (!col.align || col.align === \"left\") && \"text-left\",\n )}\n >\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className=\"px-3 py-4 text-center text-sm text-muted-foreground\"\n >\n No data\n </td>\n </tr>\n ) : (\n rows.map((row, i) => (\n <tr\n key={i}\n className={cn(\n \"border-b border-border last:border-0\",\n i % 2 === 1 && \"bg-muted/20\",\n )}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className={cn(\n \"px-3 py-2 text-foreground/90\",\n col.align === \"right\" && \"text-right tabular-nums\",\n col.align === \"center\" && \"text-center\",\n (!col.align || col.align === \"left\") && \"text-left\",\n )}\n >\n {row[col.key] === null || row[col.key] === undefined\n ? \"—\"\n : String(row[col.key])}\n </td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../ui/lib/utils\";\nimport type { StatPayload } from \"../types\";\n\ninterface StatRendererProps {\n payload: StatPayload;\n className?: string;\n}\n\nexport function StatRenderer({ payload, className }: StatRendererProps) {\n const { stats, title } = payload;\n\n return (\n <div className={cn(\"csdk-genui-stat\", className)}>\n {title && (\n <p className=\"mb-2 text-sm font-semibold text-foreground\">{title}</p>\n )}\n <div\n className={cn(\n \"grid gap-2\",\n stats.length === 1 && \"grid-cols-1\",\n stats.length === 2 && \"grid-cols-2\",\n stats.length >= 3 && \"grid-cols-2 sm:grid-cols-3\",\n )}\n >\n {stats.map((stat, i) => (\n <div\n key={i}\n className=\"flex flex-col gap-0.5 rounded-lg border border-border bg-card p-3\"\n >\n <span className=\"truncate text-xs text-muted-foreground\">\n {stat.label}\n </span>\n <span className=\"text-xl font-bold tabular-nums leading-tight text-foreground\">\n {stat.value}\n </span>\n {stat.change && (\n <span\n className={cn(\n \"text-xs font-medium\",\n stat.changeDirection === \"positive\" &&\n \"text-green-600 dark:text-green-400\",\n stat.changeDirection === \"negative\" &&\n \"text-red-500 dark:text-red-400\",\n (!stat.changeDirection ||\n stat.changeDirection === \"neutral\") &&\n \"text-muted-foreground\",\n )}\n >\n {stat.change}\n </span>\n )}\n {stat.description && (\n <span className=\"text-xs leading-snug text-muted-foreground\">\n {stat.description}\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../ui/lib/utils\";\nimport type { CardPayload } from \"../types\";\n\ninterface CardRendererProps {\n payload: CardPayload;\n className?: string;\n}\n\nexport function CardRenderer({ payload, className }: CardRendererProps) {\n const { title, subtitle, fields, body, cta } = payload;\n\n return (\n <div\n className={cn(\n \"csdk-genui-card flex flex-col gap-3 rounded-lg border border-border bg-card p-4\",\n className,\n )}\n >\n {/* Header */}\n <div>\n <p className=\"text-sm font-semibold leading-snug text-foreground\">\n {title}\n </p>\n {subtitle && (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{subtitle}</p>\n )}\n </div>\n\n {/* Key-value fields */}\n {fields && fields.length > 0 && (\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5\">\n {fields.map((field, i) => (\n <React.Fragment key={i}>\n <dt className=\"self-center whitespace-nowrap text-xs text-muted-foreground\">\n {field.label}\n </dt>\n <dd className=\"text-xs text-foreground\">\n {field.badge ? (\n <span className=\"inline-flex items-center rounded-full border border-border bg-muted px-2 py-0.5 font-medium text-foreground\">\n {String(field.value)}\n </span>\n ) : (\n String(field.value)\n )}\n </dd>\n </React.Fragment>\n ))}\n </dl>\n )}\n\n {/* Body */}\n {body && (\n <p className=\"text-xs leading-relaxed text-muted-foreground\">{body}</p>\n )}\n\n {/* CTA */}\n {cta && (\n <a\n href={cta.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-1 inline-flex items-center gap-1 text-xs font-medium text-primary underline-offset-2 hover:underline\"\n >\n {cta.label} ↗\n </a>\n )}\n </div>\n );\n}\n","import { z } from \"zod\";\nimport type React from \"react\";\n\n// ─── Payload Schemas ──────────────────────────────────────────────────────────\n\nexport const HtmlPayloadSchema = z\n .object({\n type: z.literal(\"html\"),\n html: z\n .string()\n .describe(\n \"Raw HTML string rendered in an isolated Shadow DOM with Tailwind CSS\",\n ),\n title: z\n .string()\n .optional()\n .describe(\"Optional label shown above the component\"),\n height: z\n .string()\n .optional()\n .describe(\"CSS height value e.g. '300px'. Defaults to auto.\"),\n })\n .passthrough();\n\nexport const ChartPayloadSchema = z\n .object({\n type: z.literal(\"chart\"),\n chartType: z\n .enum([\"bar\", \"line\", \"pie\", \"area\", \"scatter\"])\n .describe(\"Chart visualization type\"),\n title: z.string().optional(),\n labels: z.array(z.string()).describe(\"X-axis labels or category names\"),\n datasets: z\n .array(\n z.object({\n label: z.string(),\n data: z.array(z.number()),\n color: z\n .string()\n .optional()\n .describe(\"Hex or CSS color for this series\"),\n }),\n )\n .describe(\"One or more data series\"),\n xLabel: z.string().optional().describe(\"X-axis label\"),\n yLabel: z.string().optional().describe(\"Y-axis label\"),\n })\n .passthrough();\n\nexport const TablePayloadSchema = z\n .object({\n type: z.literal(\"table\"),\n title: z.string().optional(),\n columns: z\n .array(\n z\n .object({\n key: z.string(),\n label: z.string(),\n align: z.enum([\"left\", \"right\", \"center\"]).optional(),\n })\n .passthrough(),\n )\n .describe(\"Column definitions — order controls render order\"),\n rows: z\n .array(z.record(z.string(), z.unknown()))\n .describe(\"Row data keyed by column.key\"),\n caption: z.string().optional(),\n })\n .passthrough();\n\nexport const StatPayloadSchema = z\n .object({\n type: z.literal(\"stat\"),\n title: z.string().optional(),\n stats: z.array(\n z\n .object({\n label: z.string(),\n value: z.union([z.string(), z.number()]),\n change: z.string().optional().describe(\"e.g. '+12%' or '-3.4%'\"),\n changeDirection: z\n .enum([\"positive\", \"negative\", \"neutral\"])\n .optional(),\n description: z.string().optional().describe(\"Sub-text below value\"),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\nexport const CardPayloadSchema = z\n .object({\n type: z.literal(\"card\"),\n title: z.string(),\n subtitle: z.string().optional(),\n body: z.string().optional(),\n fields: z\n .array(\n z.object({\n label: z.string(),\n value: z.union([z.string(), z.number(), z.boolean()]),\n badge: z\n .boolean()\n .optional()\n .describe(\"Render value as a badge pill\"),\n }),\n )\n .optional(),\n cta: z\n .object({\n label: z.string().optional(),\n text: z.string().optional(), // LLMs sometimes use \"text\" instead of \"label\"\n url: z.string().describe(\"URL for the call-to-action link\"),\n })\n .transform((c) => ({ ...c, label: c.label ?? c.text ?? \"\" }))\n .optional(),\n })\n .passthrough();\n\n/** Full discriminated union of all generative UI payload types */\nexport const GenerativeUIPayloadSchema = z.discriminatedUnion(\"type\", [\n HtmlPayloadSchema,\n ChartPayloadSchema,\n TablePayloadSchema,\n StatPayloadSchema,\n CardPayloadSchema,\n]);\n\n// ─── TypeScript Types ──────────────────────────────────────────────────────────\n\nexport type HtmlPayload = z.infer<typeof HtmlPayloadSchema>;\nexport type ChartPayload = z.infer<typeof ChartPayloadSchema>;\nexport type TablePayload = z.infer<typeof TablePayloadSchema>;\nexport type StatPayload = z.infer<typeof StatPayloadSchema>;\nexport type CardPayload = z.infer<typeof CardPayloadSchema>;\nexport type GenerativeUIPayload = z.infer<typeof GenerativeUIPayloadSchema>;\n\n/** Props passed to user-supplied chart renderer */\nexport interface ChartRendererProps {\n payload: ChartPayload;\n}\n\n/** Config for useGenerativeUI hook */\nexport interface UseGenerativeUIConfig {\n /**\n * Tool name — must match the key used in generativeUITool() on the server.\n * @default \"render_ui\"\n */\n name?: string;\n /**\n * Renderer for chart payloads. The SDK does not bundle a chart library.\n * Pass your own Recharts / Chart.js / Victory component here.\n * If omitted, chart results show a JSON data fallback.\n *\n * @example\n * ```tsx\n * chartRenderer={({ payload }) => (\n * <BarChart data={payload.datasets} xLabels={payload.labels} />\n * )}\n * ```\n */\n chartRenderer?: React.ComponentType<ChartRendererProps>;\n /**\n * Override any built-in renderer per type.\n * Useful when you want custom styling while keeping the SDK's schema validation.\n */\n overrideRenderers?: Partial<{\n html: React.ComponentType<{ payload: HtmlPayload }>;\n chart: React.ComponentType<ChartRendererProps>;\n table: React.ComponentType<{ payload: TablePayload }>;\n stat: React.ComponentType<{ payload: StatPayload }>;\n card: React.ComponentType<{ payload: CardPayload }>;\n }>;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useTool } from \"../react/hooks/useTool\";\nimport type { ToolRenderProps } from \"../core/types/tools\";\nimport { DotsLoader } from \"../ui/components/ui/loader\";\nimport { HtmlRenderer } from \"./renderers/HtmlRenderer\";\nimport { TableRenderer } from \"./renderers/TableRenderer\";\nimport { StatRenderer } from \"./renderers/StatRenderer\";\nimport { CardRenderer } from \"./renderers/CardRenderer\";\nimport { GenerativeUIPayloadSchema } from \"./types\";\nimport type {\n GenerativeUIPayload,\n ChartPayload,\n UseGenerativeUIConfig,\n} from \"./types\";\n\n/**\n * Flat JSON schema for the render_ui tool.\n * Using a flat object with a discriminator `type` field works reliably across all LLMs.\n * The Zod schema (GenerativeUIPayloadSchema) is still used for server-side validation.\n */\nconst RENDER_UI_SCHEMA = {\n type: \"object\" as const,\n properties: {\n type: {\n type: \"string\" as const,\n enum: [\"html\", \"chart\", \"table\", \"stat\", \"card\"],\n description: \"The UI component type to render\",\n },\n // html\n html: {\n type: \"string\" as const,\n description: \"Raw HTML with Tailwind classes (type=html only)\",\n },\n height: {\n type: \"string\" as const,\n description: \"Optional CSS height (type=html only)\",\n },\n // chart\n chartType: {\n type: \"string\" as const,\n enum: [\"bar\", \"line\", \"pie\", \"area\", \"scatter\"],\n description: \"Chart variant (type=chart only)\",\n },\n labels: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n description: \"X-axis labels (type=chart only)\",\n },\n datasets: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n data: { type: \"array\" as const, items: { type: \"number\" as const } },\n },\n required: [\"label\", \"data\"],\n },\n description: \"Data series array (type=chart only)\",\n },\n xLabel: { type: \"string\" as const },\n yLabel: { type: \"string\" as const },\n // table\n columns: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n key: { type: \"string\" as const },\n label: { type: \"string\" as const },\n align: { type: \"string\" as const, enum: [\"left\", \"right\", \"center\"] },\n },\n required: [\"key\", \"label\"],\n },\n description:\n \"Column definitions — key matches row property names (type=table only)\",\n },\n rows: {\n type: \"array\" as const,\n items: { type: \"object\" as const },\n description: \"Row objects keyed by column.key values (type=table only)\",\n },\n caption: { type: \"string\" as const },\n // stat\n stats: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n value: { type: \"string\" as const },\n change: { type: \"string\" as const },\n changeDirection: {\n type: \"string\" as const,\n enum: [\"positive\", \"negative\", \"neutral\"],\n },\n description: { type: \"string\" as const },\n },\n required: [\"label\", \"value\"],\n },\n description: \"KPI stats array (type=stat only)\",\n },\n // card\n title: { type: \"string\" as const, description: \"Card or table title\" },\n subtitle: { type: \"string\" as const },\n body: { type: \"string\" as const },\n fields: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n value: { type: \"string\" as const },\n badge: { type: \"boolean\" as const },\n },\n required: [\"label\", \"value\"],\n },\n description: \"Key-value fields (type=card only)\",\n },\n cta: {\n type: \"object\" as const,\n properties: {\n label: { type: \"string\" as const },\n url: { type: \"string\" as const },\n },\n required: [\"label\", \"url\"],\n description: \"Call-to-action link (type=card only)\",\n },\n },\n required: [\"type\"],\n};\n\n/**\n * Register the generative UI tool and attach built-in renderers for all payload types.\n *\n * Must be called inside a `CopilotProvider`. The `name` must match\n * the key used for `generativeUITool()` in your backend `streamText` tools map.\n *\n * @example\n * ```tsx\n * import { useGenerativeUI } from \"@yourgpt/copilot-sdk/experimental\";\n *\n * function App() {\n * useGenerativeUI({\n * chartRenderer: ({ payload }) => (\n * <BarChart labels={payload.labels} datasets={payload.datasets} />\n * ),\n * });\n * return <CopilotChat />;\n * }\n * ```\n *\n * @experimental This API may change without a semver major bump.\n */\nexport function useGenerativeUI(config: UseGenerativeUIConfig = {}): void {\n const toolName = config.name ?? \"render_ui\";\n\n // Keep config in a ref so the render function always has the latest without\n // triggering useTool re-registration on every render\n const configRef = React.useRef(config);\n configRef.current = config;\n\n useTool<GenerativeUIPayload>({\n name: toolName,\n description:\n \"Renders a rich UI component inline in the chat. Handled automatically by the SDK.\",\n inputSchema: RENDER_UI_SCHEMA,\n hidden: false,\n aiResponseMode: \"none\",\n aiContext: (_, args) => {\n const type = (args as GenerativeUIPayload)?.type ?? \"ui\";\n return `[Rendered ${type} component to user]`;\n },\n handler: async (params) => {\n // Some LLMs wrap the payload in a `data` key — unwrap if needed\n const raw =\n params && typeof params === \"object\" && \"data\" in params\n ? (params as Record<string, unknown>).data\n : params;\n const parsed = GenerativeUIPayloadSchema.safeParse(raw);\n if (!parsed.success) {\n return {\n success: false,\n error: `Invalid generative UI payload: ${parsed.error.message}`,\n };\n }\n return {\n success: true,\n data: parsed.data,\n _aiContext: `[Rendered ${parsed.data.type} component to user]`,\n _aiResponseMode: \"none\" as const,\n };\n },\n render: (props: ToolRenderProps<GenerativeUIPayload>) => (\n <GenerativeUIRenderer props={props} configRef={configRef} />\n ),\n });\n}\n\n// ─── Internal renderer ────────────────────────────────────────────────────────\n\ninterface InternalRendererProps {\n props: ToolRenderProps<GenerativeUIPayload>;\n configRef: React.MutableRefObject<UseGenerativeUIConfig>;\n}\n\nfunction GenerativeUIRenderer({\n props: renderProps,\n configRef,\n}: InternalRendererProps) {\n const { status, result, error } = renderProps;\n const config = configRef.current;\n\n // Loading\n if (status === \"pending\" || status === \"executing\") {\n return (\n <div className=\"flex items-center gap-2 py-1.5 text-sm text-muted-foreground\">\n <DotsLoader size=\"sm\" />\n <span>Preparing response…</span>\n </div>\n );\n }\n\n // Error\n if (status === \"error\") {\n return (\n <div className=\"rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-sm text-destructive\">\n {error ?? \"Failed to render UI component.\"}\n </div>\n );\n }\n\n // Completed — parse payload from result.data\n if (status !== \"completed\") return null;\n\n const rawPayload = result?.data as GenerativeUIPayload | undefined;\n const parsed = GenerativeUIPayloadSchema.safeParse(rawPayload);\n\n if (!parsed.success) {\n return (\n <div className=\"overflow-auto rounded-md border border-border bg-muted/30 px-3 py-2\">\n <pre className=\"whitespace-pre-wrap text-xs text-muted-foreground\">\n {JSON.stringify(rawPayload, null, 2)}\n </pre>\n </div>\n );\n }\n\n const payload = parsed.data;\n\n switch (payload.type) {\n case \"html\": {\n const Override = config.overrideRenderers?.html;\n return Override ? (\n <Override payload={payload} />\n ) : (\n <HtmlRenderer payload={payload} />\n );\n }\n\n case \"chart\": {\n const ChartComp = config.overrideRenderers?.chart ?? config.chartRenderer;\n return ChartComp ? (\n <ChartComp payload={payload} />\n ) : (\n <ChartFallback payload={payload} />\n );\n }\n\n case \"table\": {\n const Override = config.overrideRenderers?.table;\n return Override ? (\n <Override payload={payload} />\n ) : (\n <TableRenderer payload={payload} />\n );\n }\n\n case \"stat\": {\n const Override = config.overrideRenderers?.stat;\n return Override ? (\n <Override payload={payload} />\n ) : (\n <StatRenderer payload={payload} />\n );\n }\n\n case \"card\": {\n const Override = config.overrideRenderers?.card;\n return Override ? (\n <Override payload={payload} />\n ) : (\n <CardRenderer payload={payload} />\n );\n }\n\n default:\n return null;\n }\n}\n\n/** Shown when no chartRenderer is provided */\nfunction ChartFallback({ payload }: { payload: ChartPayload }) {\n return (\n <div className=\"rounded-md border border-border bg-muted/20 p-3\">\n {payload.title && (\n <p className=\"mb-1.5 text-sm font-medium text-foreground\">\n {payload.title}\n </p>\n )}\n <p className=\"mb-2 text-xs text-muted-foreground\">\n Chart type:{\" \"}\n <code className=\"rounded bg-muted px-1 py-0.5 font-mono text-xs\">\n {payload.chartType}\n </code>\n . Pass a <code className=\"font-mono\">chartRenderer</code> prop to{\" \"}\n <code className=\"font-mono\">useGenerativeUI()</code> to render this.\n </p>\n <pre className=\"max-h-40 overflow-auto whitespace-pre-wrap text-xs text-muted-foreground font-mono\">\n {JSON.stringify(\n { labels: payload.labels, datasets: payload.datasets },\n null,\n 2,\n )}\n </pre>\n </div>\n );\n}\n"]}
|