@aigentyc/chat-sdk 0.3.0 → 0.4.0

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.
Files changed (78) hide show
  1. package/AGENTS.md +24 -1
  2. package/claude-skill/aigentyc-chat-sdk/SKILL.md +1 -1
  3. package/context7.json +1 -1
  4. package/dist/{ChatInterface-f8ftS56n.d.ts → ChatInterface--yaDB5yp.d.ts} +1 -1
  5. package/dist/{ChatInterface-B0zbA3Lm.d.cts → ChatInterface-0rq8D5-8.d.cts} +1 -1
  6. package/dist/{JsonRenderResult-Ftw4AKwb.d.cts → JsonRenderResult-D6ogds0_.d.cts} +8 -1
  7. package/dist/{JsonRenderResult-Ftw4AKwb.d.ts → JsonRenderResult-D6ogds0_.d.ts} +8 -1
  8. package/dist/JsonRenderResult-GCNFMZYP.js +6 -0
  9. package/dist/{JsonRenderResult-ZFJ6VWMS.js.map → JsonRenderResult-GCNFMZYP.js.map} +1 -1
  10. package/dist/JsonRenderResult-II3IBENS.cjs +15 -0
  11. package/dist/{JsonRenderResult-GQOYPLVH.cjs.map → JsonRenderResult-II3IBENS.cjs.map} +1 -1
  12. package/dist/{SlotsContext-BjiX1mRx.d.ts → SlotsContext-CWTjP0mA.d.ts} +1 -1
  13. package/dist/{SlotsContext-CEOBjzfh.d.cts → SlotsContext-u5CFB7MS.d.cts} +1 -1
  14. package/dist/{chunk-FPQ3UCCJ.js → chunk-3EN3DMUL.js} +24 -5
  15. package/dist/chunk-3EN3DMUL.js.map +1 -0
  16. package/dist/{chunk-BPV66QNM.cjs → chunk-46MUOYPR.cjs} +24 -5
  17. package/dist/chunk-46MUOYPR.cjs.map +1 -0
  18. package/dist/{chunk-PQCGQ32Q.js → chunk-6ZZTTD5E.js} +12 -5
  19. package/dist/chunk-6ZZTTD5E.js.map +1 -0
  20. package/dist/{chunk-3HGOLNGG.cjs → chunk-AWRQSM42.cjs} +23 -3
  21. package/dist/chunk-AWRQSM42.cjs.map +1 -0
  22. package/dist/{chunk-J2H6MLQF.cjs → chunk-H7C3AGA2.cjs} +17 -6
  23. package/dist/chunk-H7C3AGA2.cjs.map +1 -0
  24. package/dist/{chunk-M4YRNNGB.js → chunk-LSKOJ7SH.js} +23 -3
  25. package/dist/chunk-LSKOJ7SH.js.map +1 -0
  26. package/dist/{chunk-PPCGZ5MP.cjs → chunk-LVWSWTI3.cjs} +22 -22
  27. package/dist/chunk-LVWSWTI3.cjs.map +1 -0
  28. package/dist/{chunk-TLGZSXTU.cjs → chunk-OEEDYJTV.cjs} +14 -7
  29. package/dist/chunk-OEEDYJTV.cjs.map +1 -0
  30. package/dist/{chunk-SWKWHBBN.js → chunk-RAQVW2D7.js} +7 -7
  31. package/dist/chunk-RAQVW2D7.js.map +1 -0
  32. package/dist/{chunk-RPDJXB3U.js → chunk-ZXP7IYRC.js} +17 -6
  33. package/dist/chunk-ZXP7IYRC.js.map +1 -0
  34. package/dist/components.cjs +15 -15
  35. package/dist/components.d.cts +2 -2
  36. package/dist/components.d.ts +2 -2
  37. package/dist/components.js +4 -4
  38. package/dist/core.d.cts +2 -2
  39. package/dist/core.d.ts +2 -2
  40. package/dist/hooks.cjs +6 -6
  41. package/dist/hooks.d.cts +2 -2
  42. package/dist/hooks.d.ts +2 -2
  43. package/dist/hooks.js +2 -2
  44. package/dist/i18n.d.cts +1 -1
  45. package/dist/i18n.d.ts +1 -1
  46. package/dist/index.cjs +33 -22
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.cts +4 -4
  49. package/dist/index.d.ts +4 -4
  50. package/dist/index.js +18 -7
  51. package/dist/index.js.map +1 -1
  52. package/dist/json-render.cjs +4 -4
  53. package/dist/json-render.d.cts +1 -1
  54. package/dist/json-render.d.ts +1 -1
  55. package/dist/json-render.js +1 -1
  56. package/dist/llms-full.txt +35 -12
  57. package/dist/theme.d.cts +1 -1
  58. package/dist/theme.d.ts +1 -1
  59. package/dist/tools.cjs +7 -7
  60. package/dist/tools.d.cts +3 -3
  61. package/dist/tools.d.ts +3 -3
  62. package/dist/tools.js +3 -3
  63. package/dist/{types-DlNwk-bG.d.cts → types-DQCjs81O.d.cts} +19 -1
  64. package/dist/{types-DlNwk-bG.d.ts → types-DQCjs81O.d.ts} +19 -1
  65. package/llms.txt +1 -1
  66. package/package.json +1 -1
  67. package/dist/JsonRenderResult-GQOYPLVH.cjs +0 -15
  68. package/dist/JsonRenderResult-ZFJ6VWMS.js +0 -6
  69. package/dist/chunk-3HGOLNGG.cjs.map +0 -1
  70. package/dist/chunk-BPV66QNM.cjs.map +0 -1
  71. package/dist/chunk-FPQ3UCCJ.js.map +0 -1
  72. package/dist/chunk-J2H6MLQF.cjs.map +0 -1
  73. package/dist/chunk-M4YRNNGB.js.map +0 -1
  74. package/dist/chunk-PPCGZ5MP.cjs.map +0 -1
  75. package/dist/chunk-PQCGQ32Q.js.map +0 -1
  76. package/dist/chunk-RPDJXB3U.js.map +0 -1
  77. package/dist/chunk-SWKWHBBN.js.map +0 -1
  78. package/dist/chunk-TLGZSXTU.cjs.map +0 -1
package/dist/tools.cjs CHANGED
@@ -2,10 +2,10 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk7AZMWPKX_cjs = require('./chunk-7AZMWPKX.cjs');
5
- var chunkTLGZSXTU_cjs = require('./chunk-TLGZSXTU.cjs');
6
- require('./chunk-BPV66QNM.cjs');
5
+ var chunkOEEDYJTV_cjs = require('./chunk-OEEDYJTV.cjs');
6
+ require('./chunk-46MUOYPR.cjs');
7
7
  require('./chunk-JOO6C3XT.cjs');
8
- var chunkJ2H6MLQF_cjs = require('./chunk-J2H6MLQF.cjs');
8
+ var chunkH7C3AGA2_cjs = require('./chunk-H7C3AGA2.cjs');
9
9
  var chunkQ7T3VAJV_cjs = require('./chunk-Q7T3VAJV.cjs');
10
10
  require('./chunk-JI5KCSOI.cjs');
11
11
  require('./chunk-AWAJOSFP.cjs');
@@ -23,19 +23,19 @@ Object.defineProperty(exports, "normalizeToolRows", {
23
23
  });
24
24
  Object.defineProperty(exports, "ComponentRenderer", {
25
25
  enumerable: true,
26
- get: function () { return chunkTLGZSXTU_cjs.ComponentRenderer; }
26
+ get: function () { return chunkOEEDYJTV_cjs.ComponentRenderer; }
27
27
  });
28
28
  Object.defineProperty(exports, "SearchKnowledgeBaseRenderer", {
29
29
  enumerable: true,
30
- get: function () { return chunkTLGZSXTU_cjs.SearchKnowledgeBaseRenderer; }
30
+ get: function () { return chunkOEEDYJTV_cjs.SearchKnowledgeBaseRenderer; }
31
31
  });
32
32
  Object.defineProperty(exports, "ToolRenderer", {
33
33
  enumerable: true,
34
- get: function () { return chunkTLGZSXTU_cjs.ToolRenderer; }
34
+ get: function () { return chunkOEEDYJTV_cjs.ToolRenderer; }
35
35
  });
36
36
  Object.defineProperty(exports, "JsonRenderResult", {
37
37
  enumerable: true,
38
- get: function () { return chunkJ2H6MLQF_cjs.JsonRenderResult; }
38
+ get: function () { return chunkH7C3AGA2_cjs.JsonRenderResult; }
39
39
  });
40
40
  Object.defineProperty(exports, "VisualizationRenderer", {
41
41
  enumerable: true,
package/dist/tools.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { g as ToolRendererProps } from './types-DlNwk-bG.cjs';
3
- export { d as ComponentAction, h as ToolResult } from './types-DlNwk-bG.cjs';
4
- export { J as JsonRenderResult } from './JsonRenderResult-Ftw4AKwb.cjs';
2
+ import { g as ToolRendererProps } from './types-DQCjs81O.cjs';
3
+ export { d as ComponentAction, h as ToolResult } from './types-DQCjs81O.cjs';
4
+ export { J as JsonRenderResult } from './JsonRenderResult-D6ogds0_.cjs';
5
5
  export { g as getToolDisplayData, n as normalizeToolRows } from './normalize-KzCLLqpU.cjs';
6
6
  import 'react';
7
7
  import '@json-render/core';
package/dist/tools.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { g as ToolRendererProps } from './types-DlNwk-bG.js';
3
- export { d as ComponentAction, h as ToolResult } from './types-DlNwk-bG.js';
4
- export { J as JsonRenderResult } from './JsonRenderResult-Ftw4AKwb.js';
2
+ import { g as ToolRendererProps } from './types-DQCjs81O.js';
3
+ export { d as ComponentAction, h as ToolResult } from './types-DQCjs81O.js';
4
+ export { J as JsonRenderResult } from './JsonRenderResult-D6ogds0_.js';
5
5
  export { g as getToolDisplayData, n as normalizeToolRows } from './normalize-KzCLLqpU.js';
6
6
  import 'react';
7
7
  import '@json-render/core';
package/dist/tools.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  export { getToolDisplayData, normalizeToolRows } from './chunk-XEAAB5ZM.js';
3
- export { ComponentRenderer, SearchKnowledgeBaseRenderer, ToolRenderer } from './chunk-PQCGQ32Q.js';
4
- import './chunk-FPQ3UCCJ.js';
3
+ export { ComponentRenderer, SearchKnowledgeBaseRenderer, ToolRenderer } from './chunk-6ZZTTD5E.js';
4
+ import './chunk-3EN3DMUL.js';
5
5
  import './chunk-PS3U7T37.js';
6
- export { JsonRenderResult } from './chunk-RPDJXB3U.js';
6
+ export { JsonRenderResult } from './chunk-ZXP7IYRC.js';
7
7
  export { VisualizationRenderer } from './chunk-5T4FJ2SR.js';
8
8
  import './chunk-4QT25AXI.js';
9
9
  import './chunk-NPJKLYLV.js';
@@ -80,12 +80,30 @@ interface QuestionConfig {
80
80
  interface ChatConfig {
81
81
  /** Project identifier on the Aigentyc platform */
82
82
  projectId: string;
83
- /** Base URL of the API (e.g. `"https://api.aigentyc.com"`) */
83
+ /** Base URL of the API (e.g. `"https://api.aigentyc.ai"`) */
84
84
  apiEndpoint: string;
85
85
  /** Bearer API key for authentication (alternative to session cookies) */
86
86
  apiKey?: string;
87
87
  /** Human-readable client / brand name shown in the header */
88
88
  clientName?: string;
89
+ /**
90
+ * URL of the page the widget is embedded in. Sent with every message so the
91
+ * assistant can answer in the context of what the visitor is looking at.
92
+ *
93
+ * Read fresh on each send, so a single-page app may update it on navigation
94
+ * without remounting the widget.
95
+ */
96
+ pageUrl?: string;
97
+ /** Title of the page the widget is embedded in. Sent with every message. */
98
+ pageTitle?: string;
99
+ /**
100
+ * Free-form structured context about the host page — the active category, the
101
+ * filters the visitor has applied, the product they are viewing. Sent verbatim
102
+ * with every message; the backend renders it into the system prompt as data.
103
+ *
104
+ * Shape is up to the host app. Keep it small: it is re-sent on every turn.
105
+ */
106
+ pageContext?: unknown;
89
107
  }
90
108
  /**
91
109
  * Props passed to every slot component so it can delegate to the default.
@@ -80,12 +80,30 @@ interface QuestionConfig {
80
80
  interface ChatConfig {
81
81
  /** Project identifier on the Aigentyc platform */
82
82
  projectId: string;
83
- /** Base URL of the API (e.g. `"https://api.aigentyc.com"`) */
83
+ /** Base URL of the API (e.g. `"https://api.aigentyc.ai"`) */
84
84
  apiEndpoint: string;
85
85
  /** Bearer API key for authentication (alternative to session cookies) */
86
86
  apiKey?: string;
87
87
  /** Human-readable client / brand name shown in the header */
88
88
  clientName?: string;
89
+ /**
90
+ * URL of the page the widget is embedded in. Sent with every message so the
91
+ * assistant can answer in the context of what the visitor is looking at.
92
+ *
93
+ * Read fresh on each send, so a single-page app may update it on navigation
94
+ * without remounting the widget.
95
+ */
96
+ pageUrl?: string;
97
+ /** Title of the page the widget is embedded in. Sent with every message. */
98
+ pageTitle?: string;
99
+ /**
100
+ * Free-form structured context about the host page — the active category, the
101
+ * filters the visitor has applied, the product they are viewing. Sent verbatim
102
+ * with every message; the backend renders it into the system prompt as data.
103
+ *
104
+ * Shape is up to the host app. Keep it small: it is re-sent on every turn.
105
+ */
106
+ pageContext?: unknown;
89
107
  }
90
108
  /**
91
109
  * Props passed to every slot component so it can delegate to the default.
package/llms.txt CHANGED
@@ -460,7 +460,7 @@ The built-in tool dispatcher already wraps each tool in a boundary, so a single
460
460
  | Symptom | Likely cause | Fix |
461
461
  | --- | --- | --- |
462
462
  | Unstyled / broken layout | Missing CSS import | `import "@aigentyc/chat-sdk/theme/styles.css"` |
463
- | 401 / "Missing Authorization" on embed | No `apiKey` passed — required for all third-party domain embeds | Pass `apiKey` prop (or `NEXT_PUBLIC_AIGENTYC_API_KEY` / `VITE_AIGENTYC_API_KEY` env var). The "no apiKey needed" path only works inside `app.aigentyc.com` itself (session cookie). |
463
+ | 401 / "Missing Authorization" on embed | No `apiKey` passed — required for all third-party domain embeds | Pass `apiKey` prop (or `NEXT_PUBLIC_AIGENTYC_API_KEY` / `VITE_AIGENTYC_API_KEY` env var). The "no apiKey needed" path only works inside `app.aigentyc.ai` itself (session cookie). |
464
464
  | 403 / invalid origin | API key's Allowed Origins list doesn't include your embed domain | Dashboard → Settings → API Keys → edit → add domain |
465
465
  | CORS error in browser | Allowed Origins on API key doesn't include current URL | Add `http://localhost:5173` (Vite) or `http://localhost:3000` (Next) to the key's Allowed Origins |
466
466
  | Slot override doesn't render | Using `toolRenderers` keyed by tool name | Use `tools` for per-tool overrides; `toolRenderers` is per render mode. Dev console warns automatically. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aigentyc/chat-sdk",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "React SDK for building AI-powered chat interfaces connected to the Aigentyc platform",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -1,15 +0,0 @@
1
- "use client";
2
- 'use strict';
3
-
4
- var chunkJ2H6MLQF_cjs = require('./chunk-J2H6MLQF.cjs');
5
- require('./chunk-Q7T3VAJV.cjs');
6
- require('./chunk-525KS5HM.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, "JsonRenderResult", {
11
- enumerable: true,
12
- get: function () { return chunkJ2H6MLQF_cjs.JsonRenderResult; }
13
- });
14
- //# sourceMappingURL=JsonRenderResult-GQOYPLVH.cjs.map
15
- //# sourceMappingURL=JsonRenderResult-GQOYPLVH.cjs.map
@@ -1,6 +0,0 @@
1
- "use client";
2
- export { JsonRenderResult } from './chunk-RPDJXB3U.js';
3
- import './chunk-5T4FJ2SR.js';
4
- import './chunk-3RW7O444.js';
5
- //# sourceMappingURL=JsonRenderResult-ZFJ6VWMS.js.map
6
- //# sourceMappingURL=JsonRenderResult-ZFJ6VWMS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-aigentyc-chat.ts"],"names":["useRef","useState","useMemo","DefaultChatTransport","useChat","useEffect","useCallback","transport","LiveChatTransport"],"mappings":"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","file":"chunk-3HGOLNGG.cjs","sourcesContent":["\"use client\";\n\nimport {\n useState,\n useCallback,\n useRef,\n useMemo,\n useEffect,\n type RefObject,\n} from \"react\";\nimport type {\n ChatProviderProps,\n ChatMessage,\n ChatEventCallbacks,\n LiveChatState,\n LiveChatMessage,\n} from \"../core/types\";\n\ntype ChatStatus = \"idle\" | \"streaming\" | \"error\";\n\ninterface ActiveTool {\n toolName: string;\n state: \"partial-call\" | \"call\" | \"output-available\";\n args: Record<string, unknown>;\n result?: unknown;\n renderMode: string;\n}\n// NOTE: @ai-sdk/react and ai are optional peer dependencies.\nimport { useChat } from \"@ai-sdk/react\";\nimport { DefaultChatTransport } from \"ai\";\nimport { LiveChatTransport } from \"../core/live-chat-transport\";\n\nconst SESSION_KEY_PREFIX = \"aigentyc-session-\";\nconst MESSAGE_KEY_PREFIX = \"aigentyc-messages-\";\n\nfunction getOrCreateSessionId(projectId: string): string {\n if (typeof window === \"undefined\") return crypto.randomUUID();\n const key = SESSION_KEY_PREFIX + projectId;\n try {\n const stored = sessionStorage.getItem(key);\n if (stored) return stored;\n const id = crypto.randomUUID();\n sessionStorage.setItem(key, id);\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nfunction loadPersistedMessages(projectId: string): ChatMessage[] {\n if (typeof window === \"undefined\") return [];\n try {\n const raw = localStorage.getItem(MESSAGE_KEY_PREFIX + projectId);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction persistMessages(projectId: string, messages: unknown[]): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(MESSAGE_KEY_PREFIX + projectId, JSON.stringify(messages));\n } catch {\n // Ignore.\n }\n}\n\nfunction clearPersistedMessages(projectId: string): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.removeItem(MESSAGE_KEY_PREFIX + projectId);\n } catch {\n // Ignore.\n }\n}\n\n/** Options for the headless `useAigentycChat` hook (same shape as ChatProviderProps). */\nexport type UseAigentycChatOptions = Omit<ChatProviderProps, \"children\" | \"slots\" | \"theme\">;\n\n/** Live chat sub-object returned by the hook. */\nexport interface LiveChatReturn {\n state: LiveChatState;\n messages: LiveChatMessage[];\n operatorName: string;\n queuePosition: number;\n showIdentityForm: boolean;\n initiate: (visitorName?: string, visitorEmail?: string) => Promise<void>;\n send: (content: string) => void;\n end: () => void;\n cancel: () => void;\n submitRating: (rating: \"positive\" | \"negative\", comment?: string) => void;\n returnToAI: () => void;\n requestManualHandoff: () => void;\n setShowIdentityForm: (show: boolean) => void;\n}\n\n/** Return value of `useAigentycChat`. */\nexport interface UseAigentycChatReturn {\n messages: ChatMessage[];\n status: ChatStatus;\n error: Error | undefined;\n sessionId: string;\n sendMessage: (content: string) => void;\n stopGeneration: () => void;\n newConversation: () => void;\n clearMessages: () => void;\n activeTools: ActiveTool[];\n liveChat: LiveChatReturn;\n chatRef: RefObject<HTMLDivElement | null>;\n}\n\nconst CALLBACK_KEYS: (keyof ChatEventCallbacks)[] = [\n \"onReady\",\n \"onSessionStart\",\n \"onSessionRestore\",\n \"onMessageSent\",\n \"onMessageReceived\",\n \"onStreamStart\",\n \"onStreamEnd\",\n \"onToolCall\",\n \"onToolResult\",\n \"onToolAction\",\n \"onLiveChatRequested\",\n \"onLiveChatConnected\",\n \"onLiveChatEnded\",\n \"onError\",\n \"onNewConversation\",\n \"onStopGeneration\",\n \"onClearMessages\",\n \"onInteraction\",\n];\n\nfunction pickCallbacks(opts: Record<string, unknown>): ChatEventCallbacks {\n const out: Record<string, unknown> = {};\n for (const key of CALLBACK_KEYS) {\n if (opts[key] !== undefined) out[key] = opts[key];\n }\n return out as ChatEventCallbacks;\n}\n\n/**\n * Standalone headless hook for Aigentyc Chat. No provider needed.\n *\n * Creates its own transport, session, and persistence internally. Use this\n * when you want full control over the UI but still want all SDK features\n * (chat, tools, live chat, persistence).\n */\nexport function useAigentycChat(options: UseAigentycChatOptions): UseAigentycChatReturn {\n const {\n projectId,\n apiEndpoint,\n apiKey,\n enableLiveChat = false,\n chatServiceUrl,\n persistMessages: shouldPersist = true,\n } = options;\n\n const callbacks = pickCallbacks(options as unknown as Record<string, unknown>);\n const callbacksRef = useRef(callbacks);\n callbacksRef.current = callbacks;\n\n const safeProjectId = projectId || \"default\";\n const [sessionId, setSessionId] = useState(() => getOrCreateSessionId(safeProjectId));\n const chatRef = useRef<HTMLDivElement | null>(null);\n\n const initialMessages = useMemo(\n () => (shouldPersist ? loadPersistedMessages(safeProjectId) : []),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const transport = useMemo(\n () =>\n new DefaultChatTransport({\n api: `${apiEndpoint || \"\"}/api/kb/chat`,\n headers: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,\n body: { projectId: safeProjectId, sessionId },\n }),\n [apiEndpoint, apiKey, safeProjectId, sessionId]\n );\n\n const {\n messages,\n sendMessage: sdkSendMessage,\n status: sdkStatus,\n error,\n stop,\n setMessages,\n } = useChat({\n id: sessionId,\n messages: initialMessages as never,\n transport,\n onFinish: (message) => {\n callbacksRef.current?.onMessageReceived?.(message as unknown as ChatMessage);\n },\n onError: (err) => {\n callbacksRef.current?.onError?.(err);\n },\n });\n\n const status: ChatStatus = error\n ? \"error\"\n : sdkStatus === \"streaming\" || sdkStatus === \"submitted\"\n ? \"streaming\"\n : \"idle\";\n\n // Persist messages\n useEffect(() => {\n if (shouldPersist) persistMessages(safeProjectId, messages);\n }, [messages, safeProjectId, shouldPersist]);\n\n // Derive active tools from the latest assistant message\n const activeTools = useMemo<ActiveTool[]>(() => {\n if (messages.length === 0) return [];\n const last = messages[messages.length - 1] as { role: string; parts?: unknown[] };\n if (last.role !== \"assistant\" || !Array.isArray(last.parts)) return [];\n return (last.parts as Array<Record<string, unknown>>)\n .filter((p) => typeof p.type === \"string\" && (p.type as string).startsWith(\"tool-\"))\n .map((p) => ({\n toolName: (p.toolName as string) || (p.type as string).replace(\"tool-\", \"\"),\n state: (p.state as ActiveTool[\"state\"]) || \"output-available\",\n args: (p.args as Record<string, unknown>) || {},\n result: p.result,\n renderMode: (p.renderMode as string) || \"inline\",\n }));\n }, [messages]);\n\n const sendMessage = useCallback(\n (content: string) => {\n if (!content.trim()) return;\n callbacksRef.current?.onMessageSent?.({\n id: crypto.randomUUID(),\n role: \"user\",\n content,\n } as ChatMessage);\n sdkSendMessage({ text: content });\n },\n [sdkSendMessage]\n );\n\n const stopGeneration = useCallback(() => {\n stop();\n callbacksRef.current?.onStopGeneration?.();\n }, [stop]);\n\n const newConversation = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(safeProjectId);\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(SESSION_KEY_PREFIX + safeProjectId);\n } catch {\n // Ignore.\n }\n }\n const nextSessionId = getOrCreateSessionId(safeProjectId);\n setSessionId(nextSessionId);\n callbacksRef.current?.onNewConversation?.(nextSessionId);\n }, [safeProjectId, setMessages]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(safeProjectId);\n callbacksRef.current?.onClearMessages?.();\n }, [safeProjectId, setMessages]);\n\n // --- Live Chat (self-contained) ---\n const [lcState, setLcState] = useState<LiveChatState>(\"ai\");\n const [lcMessages, setLcMessages] = useState<LiveChatMessage[]>([]);\n const [lcOperator, setLcOperator] = useState(\"\");\n const [lcQueue, setLcQueue] = useState(0);\n const [lcShowIdentity, setLcShowIdentity] = useState(false);\n const lcTransportRef = useRef<LiveChatTransport | null>(null);\n\n const lcResetState = useCallback(() => {\n lcTransportRef.current?.disconnect?.();\n lcTransportRef.current = null;\n setLcState(\"ai\");\n setLcMessages([]);\n setLcOperator(\"\");\n setLcQueue(0);\n setLcShowIdentity(false);\n }, []);\n\n const lcInitiate = useCallback(\n async (visitorName?: string, visitorEmail?: string) => {\n if (!enableLiveChat || lcTransportRef.current) return;\n const url = chatServiceUrl ?? apiEndpoint;\n if (!url || !apiKey) return;\n try {\n const transport = new LiveChatTransport({\n chatServiceUrl: url,\n apiKey,\n projectId: safeProjectId,\n visitorSessionId: sessionId,\n });\n transport.on(\"state-change\", (s: LiveChatState) => setLcState(s));\n transport.on(\"queued\", (data: { position: number }) => setLcQueue(data.position));\n transport.on(\"queue-update\", (data: { position: number }) => setLcQueue(data.position));\n transport.on(\"accepted\", (data: { operatorName: string }) => setLcOperator(data.operatorName));\n transport.on(\"message\", (data: LiveChatMessage) =>\n setLcMessages((prev) => [...prev, data])\n );\n transport.on(\"ended\", () => setLcState(\"ended\"));\n lcTransportRef.current = transport;\n await transport.connect();\n await transport.requestHandoff({\n visitorName,\n visitorEmail,\n aiChatHistory: [],\n });\n callbacksRef.current?.onLiveChatRequested?.();\n } catch (err) {\n callbacksRef.current?.onError?.(err as Error);\n setLcState(\"ai\");\n }\n },\n [enableLiveChat, chatServiceUrl, apiEndpoint, apiKey, safeProjectId, sessionId]\n );\n\n const liveChat = useMemo<LiveChatReturn>(\n () => ({\n state: lcState,\n messages: lcMessages,\n operatorName: lcOperator,\n queuePosition: lcQueue,\n showIdentityForm: lcShowIdentity,\n initiate: lcInitiate,\n send: (content: string) => {\n if (!content.trim()) return;\n lcTransportRef.current?.sendMessage?.(content);\n setLcMessages((prev) => [\n ...prev,\n {\n id: Date.now(),\n content,\n senderType: \"visitor\",\n timestamp: new Date().toISOString(),\n },\n ]);\n },\n end: () => lcTransportRef.current?.endChat?.(),\n cancel: () => lcResetState(),\n submitRating: (rating, comment) =>\n lcTransportRef.current?.submitRating?.(rating, comment),\n returnToAI: () => lcResetState(),\n requestManualHandoff: () => setLcShowIdentity(true),\n setShowIdentityForm: setLcShowIdentity,\n }),\n [lcState, lcMessages, lcOperator, lcQueue, lcShowIdentity, lcInitiate, lcResetState]\n );\n\n return {\n messages: messages as unknown as ChatMessage[],\n status,\n error: error as Error | undefined,\n sessionId,\n sendMessage,\n stopGeneration,\n newConversation,\n clearMessages,\n activeTools,\n liveChat,\n chatRef,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/SlotsContext.tsx","../src/providers/ChatContext.tsx"],"names":["createContext","useContext","jsx","useState","useRef","useMemo","DefaultChatTransport","useChat","useEffect","useCallback"],"mappings":"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","file":"chunk-BPV66QNM.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n createContext,\n useContext,\n type ReactNode,\n type ComponentType,\n} from \"react\";\n\n/**\n * All available slot names that can be overridden.\n */\nexport type SlotName =\n | \"header\"\n | \"footer\"\n | \"input\"\n | \"welcomePage\"\n | \"userMessage\"\n | \"assistantMessage\"\n | \"systemMessage\"\n | \"loader\"\n | \"feedback\"\n | \"tools\"\n | \"toolRenderers\"\n | \"liveChatPanel\"\n | \"satisfactionRating\"\n | \"visitorIdentityForm\"\n | \"floatingButton\"\n | \"emptyState\";\n\n/**\n * A slot component receives the default component as a prop alongside its own props.\n */\nexport type SlotComponent<P = Record<string, unknown>> = ComponentType<\n P & { DefaultComponent: ComponentType<P> }\n>;\n\n/**\n * Map of slot name to override component.\n */\nexport type SlotMap = Partial<Record<SlotName, SlotComponent<any>>>;\n\nconst SlotsContext = createContext<SlotMap>({});\n\n/** Props for the SlotsProvider component. */\nexport interface SlotsProviderProps {\n /** Slot overrides map */\n slots?: SlotMap;\n children: ReactNode;\n}\n\n/**\n * Provides slot overrides to descendant components.\n * Wrap your chat tree with this provider and pass a `slots` map\n * to replace built-in UI sections.\n */\nexport function SlotsProvider({ slots = {}, children }: SlotsProviderProps) {\n return (\n <SlotsContext.Provider value={slots}>{children}</SlotsContext.Provider>\n );\n}\n\n/**\n * Returns the full SlotMap from context.\n */\nexport function useSlots(): SlotMap {\n return useContext(SlotsContext);\n}\n\n/**\n * Returns the override component for the given slot name, or undefined if none is set.\n */\nexport function useSlot<P = Record<string, unknown>>(\n name: SlotName\n): SlotComponent<P> | undefined {\n const slots = useContext(SlotsContext);\n return slots[name] as SlotComponent<P> | undefined;\n}\n\n/**\n * Renders a slot: if an override exists, renders it with `{...props, DefaultComponent}`.\n * Otherwise renders the DefaultComponent with the given props.\n *\n * The generic `P` is NOT constrained to `Record<string, unknown>` so concrete\n * component prop types (e.g. `ChatHeaderProps`) flow through at call sites\n * without `as never` casts. Internal spreads are cast through\n * `Record<string, unknown>` — safe because JSX spread accepts any record.\n *\n * @param name - The slot name\n * @param props - Props to pass to the component\n * @param DefaultComponent - The built-in fallback component\n */\nexport function renderSlot<P>(\n name: SlotName,\n props: P,\n DefaultComponent: ComponentType<P>,\n slots: SlotMap\n): React.ReactElement {\n const spreadProps = props as unknown as Record<string, unknown>;\n const Override = slots[name] as\n | ComponentType<Record<string, unknown> & { DefaultComponent: ComponentType<P> }>\n | undefined;\n if (Override) {\n return <Override {...spreadProps} DefaultComponent={DefaultComponent} />;\n }\n const Default = DefaultComponent as ComponentType<Record<string, unknown>>;\n return <Default {...spreadProps} />;\n}\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n type ReactNode,\n} from \"react\";\nimport type {\n ChatConfig,\n ChatMessage,\n ChatEventCallbacks,\n} from \"../core/types\";\nimport { useChat } from \"@ai-sdk/react\";\nimport { DefaultChatTransport } from \"ai\";\n\ntype ChatStatus = \"idle\" | \"streaming\" | \"error\";\n\ninterface ActiveTool {\n toolName: string;\n state: \"partial-call\" | \"call\" | \"output-available\";\n args: Record<string, unknown>;\n result?: unknown;\n renderMode: string;\n}\n\nconst SESSION_KEY_PREFIX = \"aigentyc-session-\";\nconst MESSAGE_KEY_PREFIX = \"aigentyc-messages-\";\n\nfunction getOrCreateSessionId(projectId: string): string {\n if (typeof window === \"undefined\") return crypto.randomUUID();\n const key = SESSION_KEY_PREFIX + projectId;\n try {\n const stored = sessionStorage.getItem(key);\n if (stored) return stored;\n const id = crypto.randomUUID();\n sessionStorage.setItem(key, id);\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nfunction persistMessages(projectId: string, messages: unknown[]): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(MESSAGE_KEY_PREFIX + projectId, JSON.stringify(messages));\n } catch {\n // Quota or unavailable\n }\n}\n\nfunction loadPersistedMessages(projectId: string): ChatMessage[] {\n if (typeof window === \"undefined\") return [];\n try {\n const raw = localStorage.getItem(MESSAGE_KEY_PREFIX + projectId);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction clearPersistedMessages(projectId: string): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.removeItem(MESSAGE_KEY_PREFIX + projectId);\n } catch {\n // ignore\n }\n}\n\nexport interface ChatContextValue {\n messages: ChatMessage[];\n status: ChatStatus;\n error: Error | undefined;\n sessionId: string;\n config: ChatConfig;\n activeTools: ActiveTool[];\n sendMessage: (content: string) => void;\n stopGeneration: () => void;\n newConversation: () => void;\n clearMessages: () => void;\n callbacks?: ChatEventCallbacks;\n}\n\nexport const ChatContext = createContext<ChatContextValue | null>(null);\n\nexport interface ChatContextProviderProps {\n config: ChatConfig;\n callbacks?: ChatEventCallbacks;\n children: ReactNode;\n}\n\n/**\n * Internal provider that manages chat state via @ai-sdk/react `useChat`.\n * Handles message persistence and session management.\n */\nexport function ChatContextProvider({\n config,\n callbacks,\n children,\n}: ChatContextProviderProps) {\n const projectId = config.projectId || \"default\";\n const [sessionId, setSessionId] = useState(() => getOrCreateSessionId(projectId));\n const callbacksRef = useRef(callbacks);\n callbacksRef.current = callbacks;\n\n const initialMessages = useMemo(\n () => loadPersistedMessages(projectId),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const transport = useMemo(\n () =>\n new DefaultChatTransport({\n api: `${config.apiEndpoint || \"\"}/api/kb/chat`,\n headers: config.apiKey ? { Authorization: `Bearer ${config.apiKey}` } : undefined,\n body: { projectId: config.projectId, sessionId },\n }),\n [config.apiEndpoint, config.apiKey, config.projectId, sessionId]\n );\n\n const {\n messages,\n sendMessage: sdkSendMessage,\n status: sdkStatus,\n error,\n stop,\n setMessages,\n } = useChat({\n id: sessionId,\n messages: initialMessages as never,\n transport,\n onFinish: (message) => {\n callbacksRef.current?.onMessageReceived?.(message as unknown as ChatMessage);\n },\n onError: (err) => {\n callbacksRef.current?.onError?.(err);\n },\n });\n\n const status: ChatStatus = error\n ? \"error\"\n : sdkStatus === \"streaming\" || sdkStatus === \"submitted\"\n ? \"streaming\"\n : \"idle\";\n\n useEffect(() => {\n persistMessages(projectId, messages);\n }, [messages, projectId]);\n\n const activeTools = useMemo<ActiveTool[]>(() => {\n if (messages.length === 0) return [];\n const last = messages[messages.length - 1] as { role: string; parts?: unknown[] };\n if (last.role !== \"assistant\" || !Array.isArray(last.parts)) return [];\n return (last.parts as Array<Record<string, unknown>>)\n .filter((p) => typeof p.type === \"string\" && (p.type as string).startsWith(\"tool-\"))\n .map((p) => ({\n toolName: (p.toolName as string) || (p.type as string).replace(\"tool-\", \"\"),\n state: (p.state as ActiveTool[\"state\"]) || \"output-available\",\n args: (p.args as Record<string, unknown>) || {},\n result: p.result,\n renderMode: (p.renderMode as string) || \"inline\",\n }));\n }, [messages]);\n\n const sendMessage = useCallback(\n (content: string) => {\n if (!content.trim()) return;\n callbacksRef.current?.onMessageSent?.({\n id: crypto.randomUUID(),\n role: \"user\",\n content,\n } as ChatMessage);\n sdkSendMessage({ text: content });\n },\n [sdkSendMessage]\n );\n\n const stopGeneration = useCallback(() => stop(), [stop]);\n\n const newConversation = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(projectId);\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(SESSION_KEY_PREFIX + projectId);\n } catch {\n // ignore\n }\n }\n setSessionId(getOrCreateSessionId(projectId));\n }, [projectId, setMessages]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(projectId);\n }, [projectId, setMessages]);\n\n const value = useMemo<ChatContextValue>(\n () => ({\n messages: messages as unknown as ChatMessage[],\n status,\n error: error as Error | undefined,\n sessionId,\n config,\n activeTools,\n sendMessage,\n stopGeneration,\n newConversation,\n clearMessages,\n callbacks: callbacksRef.current,\n }),\n [\n messages,\n status,\n error,\n sessionId,\n config,\n activeTools,\n sendMessage,\n stopGeneration,\n newConversation,\n clearMessages,\n ]\n );\n\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>;\n}\n\n/**\n * Returns the chat context. Must be used within a `ChatContextProvider`.\n */\nexport function useChatContext(): ChatContextValue {\n const ctx = useContext(ChatContext);\n if (!ctx) {\n throw new Error(\n \"useChatContext must be used within a ChatProvider or ChatContextProvider\"\n );\n }\n return ctx;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/SlotsContext.tsx","../src/providers/ChatContext.tsx"],"names":["createContext","jsx","useContext"],"mappings":"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","file":"chunk-FPQ3UCCJ.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n createContext,\n useContext,\n type ReactNode,\n type ComponentType,\n} from \"react\";\n\n/**\n * All available slot names that can be overridden.\n */\nexport type SlotName =\n | \"header\"\n | \"footer\"\n | \"input\"\n | \"welcomePage\"\n | \"userMessage\"\n | \"assistantMessage\"\n | \"systemMessage\"\n | \"loader\"\n | \"feedback\"\n | \"tools\"\n | \"toolRenderers\"\n | \"liveChatPanel\"\n | \"satisfactionRating\"\n | \"visitorIdentityForm\"\n | \"floatingButton\"\n | \"emptyState\";\n\n/**\n * A slot component receives the default component as a prop alongside its own props.\n */\nexport type SlotComponent<P = Record<string, unknown>> = ComponentType<\n P & { DefaultComponent: ComponentType<P> }\n>;\n\n/**\n * Map of slot name to override component.\n */\nexport type SlotMap = Partial<Record<SlotName, SlotComponent<any>>>;\n\nconst SlotsContext = createContext<SlotMap>({});\n\n/** Props for the SlotsProvider component. */\nexport interface SlotsProviderProps {\n /** Slot overrides map */\n slots?: SlotMap;\n children: ReactNode;\n}\n\n/**\n * Provides slot overrides to descendant components.\n * Wrap your chat tree with this provider and pass a `slots` map\n * to replace built-in UI sections.\n */\nexport function SlotsProvider({ slots = {}, children }: SlotsProviderProps) {\n return (\n <SlotsContext.Provider value={slots}>{children}</SlotsContext.Provider>\n );\n}\n\n/**\n * Returns the full SlotMap from context.\n */\nexport function useSlots(): SlotMap {\n return useContext(SlotsContext);\n}\n\n/**\n * Returns the override component for the given slot name, or undefined if none is set.\n */\nexport function useSlot<P = Record<string, unknown>>(\n name: SlotName\n): SlotComponent<P> | undefined {\n const slots = useContext(SlotsContext);\n return slots[name] as SlotComponent<P> | undefined;\n}\n\n/**\n * Renders a slot: if an override exists, renders it with `{...props, DefaultComponent}`.\n * Otherwise renders the DefaultComponent with the given props.\n *\n * The generic `P` is NOT constrained to `Record<string, unknown>` so concrete\n * component prop types (e.g. `ChatHeaderProps`) flow through at call sites\n * without `as never` casts. Internal spreads are cast through\n * `Record<string, unknown>` — safe because JSX spread accepts any record.\n *\n * @param name - The slot name\n * @param props - Props to pass to the component\n * @param DefaultComponent - The built-in fallback component\n */\nexport function renderSlot<P>(\n name: SlotName,\n props: P,\n DefaultComponent: ComponentType<P>,\n slots: SlotMap\n): React.ReactElement {\n const spreadProps = props as unknown as Record<string, unknown>;\n const Override = slots[name] as\n | ComponentType<Record<string, unknown> & { DefaultComponent: ComponentType<P> }>\n | undefined;\n if (Override) {\n return <Override {...spreadProps} DefaultComponent={DefaultComponent} />;\n }\n const Default = DefaultComponent as ComponentType<Record<string, unknown>>;\n return <Default {...spreadProps} />;\n}\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n type ReactNode,\n} from \"react\";\nimport type {\n ChatConfig,\n ChatMessage,\n ChatEventCallbacks,\n} from \"../core/types\";\nimport { useChat } from \"@ai-sdk/react\";\nimport { DefaultChatTransport } from \"ai\";\n\ntype ChatStatus = \"idle\" | \"streaming\" | \"error\";\n\ninterface ActiveTool {\n toolName: string;\n state: \"partial-call\" | \"call\" | \"output-available\";\n args: Record<string, unknown>;\n result?: unknown;\n renderMode: string;\n}\n\nconst SESSION_KEY_PREFIX = \"aigentyc-session-\";\nconst MESSAGE_KEY_PREFIX = \"aigentyc-messages-\";\n\nfunction getOrCreateSessionId(projectId: string): string {\n if (typeof window === \"undefined\") return crypto.randomUUID();\n const key = SESSION_KEY_PREFIX + projectId;\n try {\n const stored = sessionStorage.getItem(key);\n if (stored) return stored;\n const id = crypto.randomUUID();\n sessionStorage.setItem(key, id);\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nfunction persistMessages(projectId: string, messages: unknown[]): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(MESSAGE_KEY_PREFIX + projectId, JSON.stringify(messages));\n } catch {\n // Quota or unavailable\n }\n}\n\nfunction loadPersistedMessages(projectId: string): ChatMessage[] {\n if (typeof window === \"undefined\") return [];\n try {\n const raw = localStorage.getItem(MESSAGE_KEY_PREFIX + projectId);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction clearPersistedMessages(projectId: string): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.removeItem(MESSAGE_KEY_PREFIX + projectId);\n } catch {\n // ignore\n }\n}\n\nexport interface ChatContextValue {\n messages: ChatMessage[];\n status: ChatStatus;\n error: Error | undefined;\n sessionId: string;\n config: ChatConfig;\n activeTools: ActiveTool[];\n sendMessage: (content: string) => void;\n stopGeneration: () => void;\n newConversation: () => void;\n clearMessages: () => void;\n callbacks?: ChatEventCallbacks;\n}\n\nexport const ChatContext = createContext<ChatContextValue | null>(null);\n\nexport interface ChatContextProviderProps {\n config: ChatConfig;\n callbacks?: ChatEventCallbacks;\n children: ReactNode;\n}\n\n/**\n * Internal provider that manages chat state via @ai-sdk/react `useChat`.\n * Handles message persistence and session management.\n */\nexport function ChatContextProvider({\n config,\n callbacks,\n children,\n}: ChatContextProviderProps) {\n const projectId = config.projectId || \"default\";\n const [sessionId, setSessionId] = useState(() => getOrCreateSessionId(projectId));\n const callbacksRef = useRef(callbacks);\n callbacksRef.current = callbacks;\n\n const initialMessages = useMemo(\n () => loadPersistedMessages(projectId),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const transport = useMemo(\n () =>\n new DefaultChatTransport({\n api: `${config.apiEndpoint || \"\"}/api/kb/chat`,\n headers: config.apiKey ? { Authorization: `Bearer ${config.apiKey}` } : undefined,\n body: { projectId: config.projectId, sessionId },\n }),\n [config.apiEndpoint, config.apiKey, config.projectId, sessionId]\n );\n\n const {\n messages,\n sendMessage: sdkSendMessage,\n status: sdkStatus,\n error,\n stop,\n setMessages,\n } = useChat({\n id: sessionId,\n messages: initialMessages as never,\n transport,\n onFinish: (message) => {\n callbacksRef.current?.onMessageReceived?.(message as unknown as ChatMessage);\n },\n onError: (err) => {\n callbacksRef.current?.onError?.(err);\n },\n });\n\n const status: ChatStatus = error\n ? \"error\"\n : sdkStatus === \"streaming\" || sdkStatus === \"submitted\"\n ? \"streaming\"\n : \"idle\";\n\n useEffect(() => {\n persistMessages(projectId, messages);\n }, [messages, projectId]);\n\n const activeTools = useMemo<ActiveTool[]>(() => {\n if (messages.length === 0) return [];\n const last = messages[messages.length - 1] as { role: string; parts?: unknown[] };\n if (last.role !== \"assistant\" || !Array.isArray(last.parts)) return [];\n return (last.parts as Array<Record<string, unknown>>)\n .filter((p) => typeof p.type === \"string\" && (p.type as string).startsWith(\"tool-\"))\n .map((p) => ({\n toolName: (p.toolName as string) || (p.type as string).replace(\"tool-\", \"\"),\n state: (p.state as ActiveTool[\"state\"]) || \"output-available\",\n args: (p.args as Record<string, unknown>) || {},\n result: p.result,\n renderMode: (p.renderMode as string) || \"inline\",\n }));\n }, [messages]);\n\n const sendMessage = useCallback(\n (content: string) => {\n if (!content.trim()) return;\n callbacksRef.current?.onMessageSent?.({\n id: crypto.randomUUID(),\n role: \"user\",\n content,\n } as ChatMessage);\n sdkSendMessage({ text: content });\n },\n [sdkSendMessage]\n );\n\n const stopGeneration = useCallback(() => stop(), [stop]);\n\n const newConversation = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(projectId);\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(SESSION_KEY_PREFIX + projectId);\n } catch {\n // ignore\n }\n }\n setSessionId(getOrCreateSessionId(projectId));\n }, [projectId, setMessages]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(projectId);\n }, [projectId, setMessages]);\n\n const value = useMemo<ChatContextValue>(\n () => ({\n messages: messages as unknown as ChatMessage[],\n status,\n error: error as Error | undefined,\n sessionId,\n config,\n activeTools,\n sendMessage,\n stopGeneration,\n newConversation,\n clearMessages,\n callbacks: callbacksRef.current,\n }),\n [\n messages,\n status,\n error,\n sessionId,\n config,\n activeTools,\n sendMessage,\n stopGeneration,\n newConversation,\n clearMessages,\n ]\n );\n\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>;\n}\n\n/**\n * Returns the chat context. Must be used within a `ChatContextProvider`.\n */\nexport function useChatContext(): ChatContextValue {\n const ctx = useContext(ChatContext);\n if (!ctx) {\n throw new Error(\n \"useChatContext must be used within a ChatProvider or ChatContextProvider\"\n );\n }\n return ctx;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/json-render/catalog.ts","../src/json-render/registry.tsx","../src/json-render/JsonRenderResult.tsx"],"names":["z","defineCatalog","schema","shadcnComponentDefinitions","defineRegistry","jsx","shadcnComponents","VisualizationRenderer","useMemo","useRef","useCallback","jsxs","JSONUIProvider","Renderer","useStateValue","Fragment","useValidation","useEffect"],"mappings":"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","file":"chunk-J2H6MLQF.cjs","sourcesContent":["/**\n * json-render catalog for the widget.\n * Uses @json-render/shadcn standard component definitions.\n */\n\nimport { defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/react/schema\";\nimport { shadcnComponentDefinitions } from \"@json-render/shadcn/catalog\";\nimport { z } from \"zod\";\n\n// ── Chart prop schemas ──────────────────────────────────────\nconst seriesSchema = z.object({\n dataKey: z.string(),\n label: z.string(),\n color: z.string().nullable().optional(),\n type: z.enum([\"line\", \"bar\", \"area\"]).nullable().optional(),\n});\n\nconst chartConfigSchema = z.object({\n xAxis: z.string().nullable().optional(),\n series: z.array(seriesSchema),\n showGrid: z.boolean().nullable().optional(),\n showLegend: z.boolean().nullable().optional(),\n stacked: z.boolean().nullable().optional(),\n valueFormatter: z\n .enum([\"currency\", \"percent\", \"number\", \"compact\"])\n .nullable()\n .optional(),\n});\n\nconst chartBaseProps = {\n title: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n data: z.array(z.record(z.string(), z.unknown())),\n config: chartConfigSchema,\n height: z.number().nullable().optional(),\n};\n\nexport const catalog = defineCatalog(schema, {\n components: {\n // ── Layout ──────────────────────────────────────────────\n Card: shadcnComponentDefinitions.Card,\n Stack: shadcnComponentDefinitions.Stack,\n Grid: shadcnComponentDefinitions.Grid,\n Separator: shadcnComponentDefinitions.Separator,\n Tabs: shadcnComponentDefinitions.Tabs,\n Accordion: shadcnComponentDefinitions.Accordion,\n Collapsible: shadcnComponentDefinitions.Collapsible,\n Dialog: shadcnComponentDefinitions.Dialog,\n Drawer: shadcnComponentDefinitions.Drawer,\n Carousel: shadcnComponentDefinitions.Carousel,\n\n // ── Typography ──────────────────────────────────────────\n Heading: shadcnComponentDefinitions.Heading,\n Text: shadcnComponentDefinitions.Text,\n Badge: shadcnComponentDefinitions.Badge,\n Link: shadcnComponentDefinitions.Link,\n Alert: shadcnComponentDefinitions.Alert,\n\n // ── Media ───────────────────────────────────────────────\n Image: shadcnComponentDefinitions.Image,\n Avatar: shadcnComponentDefinitions.Avatar,\n\n // ── Data ────────────────────────────────────────────────\n Table: shadcnComponentDefinitions.Table,\n\n // ── Charts & Visualization ────────────────────────────\n LineChart: {\n props: z.object(chartBaseProps),\n description: \"Line chart for trends over time. Provide data array + config.xAxis + config.series.\",\n example: {\n title: \"Monthly Sales\",\n data: [{ month: \"Jan\", sales: 100 }, { month: \"Feb\", sales: 150 }],\n config: { xAxis: \"month\", series: [{ dataKey: \"sales\", label: \"Sales\" }] },\n },\n },\n BarChart: {\n props: z.object(chartBaseProps),\n description: \"Bar chart for comparing categories. Provide data array + config.xAxis + config.series.\",\n example: {\n title: \"Product Comparison\",\n data: [{ product: \"A\", revenue: 500 }, { product: \"B\", revenue: 300 }],\n config: { xAxis: \"product\", series: [{ dataKey: \"revenue\", label: \"Revenue\" }] },\n },\n },\n PieChart: {\n props: z.object({\n title: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n data: z.array(z.record(z.string(), z.unknown())),\n dataKey: z.string(),\n nameKey: z.string().nullable().optional(),\n height: z.number().nullable().optional(),\n }),\n description: \"Pie chart for proportional breakdown. Each data item needs a name and a value field.\",\n example: {\n title: \"Market Share\",\n data: [{ name: \"Product A\", value: 60 }, { name: \"Product B\", value: 40 }],\n dataKey: \"value\",\n nameKey: \"name\",\n },\n },\n AreaChart: {\n props: z.object(chartBaseProps),\n description: \"Area chart for cumulative values over time with gradient fills.\",\n example: {\n title: \"Traffic Volume\",\n data: [{ day: \"Mon\", visits: 200 }, { day: \"Tue\", visits: 350 }],\n config: { xAxis: \"day\", series: [{ dataKey: \"visits\", label: \"Visits\" }] },\n },\n },\n MetricCards: {\n props: z.object({\n title: z.string().nullable().optional(),\n metrics: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n unit: z.string().nullable().optional(),\n trend: z.string().nullable().optional(),\n trendDirection: z.enum([\"up\", \"down\", \"neutral\"]).nullable().optional(),\n description: z.string().nullable().optional(),\n }),\n ),\n }),\n description: \"KPI metric cards grid with big numbers and optional trend indicators.\",\n example: {\n metrics: [\n { label: \"Revenue\", value: \"$1.2M\", trend: \"+12%\", trendDirection: \"up\" },\n { label: \"Users\", value: \"45K\", trend: \"-3%\", trendDirection: \"down\" },\n ],\n },\n },\n ComparisonTable: {\n props: z.object({\n title: z.string().nullable().optional(),\n items: z.array(\n z.object({\n name: z.string(),\n highlight: z.boolean().nullable().optional(),\n features: z.record(z.string(), z.union([z.string(), z.boolean(), z.number()])),\n }),\n ),\n fields: z.array(\n z.object({\n key: z.string(),\n label: z.string(),\n type: z.enum([\"text\", \"boolean\", \"rating\"]).nullable().optional(),\n }),\n ),\n }),\n description: \"Side-by-side comparison table. Items are columns, fields are rows.\",\n example: {\n title: \"Plan Comparison\",\n items: [\n { name: \"Basic\", features: { price: \"$9/mo\", storage: \"10GB\", support: true } },\n { name: \"Pro\", highlight: true, features: { price: \"$29/mo\", storage: \"100GB\", support: true } },\n ],\n fields: [\n { key: \"price\", label: \"Price\", type: \"text\" },\n { key: \"storage\", label: \"Storage\", type: \"text\" },\n { key: \"support\", label: \"Support\", type: \"boolean\" },\n ],\n },\n },\n Timeline: {\n props: z.object({\n title: z.string().nullable().optional(),\n events: z.array(\n z.object({\n date: z.string().nullable().optional(),\n title: z.string(),\n description: z.string().nullable().optional(),\n status: z.enum([\"completed\", \"current\", \"upcoming\"]).nullable().optional(),\n }),\n ),\n }),\n description: \"Vertical timeline for chronological events or process steps.\",\n example: {\n events: [\n { title: \"Order Placed\", date: \"Jan 1\", status: \"completed\" },\n { title: \"Shipped\", date: \"Jan 3\", status: \"current\" },\n { title: \"Delivered\", status: \"upcoming\" },\n ],\n },\n },\n ProgressBars: {\n props: z.object({\n title: z.string().nullable().optional(),\n goals: z.array(\n z.object({\n label: z.string(),\n current: z.number(),\n target: z.number(),\n unit: z.string().nullable().optional(),\n }),\n ),\n }),\n description: \"Progress bars for goal tracking with current/target values.\",\n example: {\n goals: [\n { label: \"Revenue\", current: 75000, target: 100000, unit: \"$\" },\n { label: \"Users\", current: 800, target: 1000 },\n ],\n },\n },\n\n // ── Form ────────────────────────────────────────────────\n Input: shadcnComponentDefinitions.Input,\n Textarea: shadcnComponentDefinitions.Textarea,\n Select: shadcnComponentDefinitions.Select,\n Checkbox: shadcnComponentDefinitions.Checkbox,\n Radio: shadcnComponentDefinitions.Radio,\n Switch: shadcnComponentDefinitions.Switch,\n Slider: shadcnComponentDefinitions.Slider,\n Button: shadcnComponentDefinitions.Button,\n ButtonGroup: shadcnComponentDefinitions.ButtonGroup,\n Toggle: shadcnComponentDefinitions.Toggle,\n ToggleGroup: shadcnComponentDefinitions.ToggleGroup,\n DropdownMenu: shadcnComponentDefinitions.DropdownMenu,\n\n // ── Feedback ────────────────────────────────────────────\n Progress: shadcnComponentDefinitions.Progress,\n Spinner: shadcnComponentDefinitions.Spinner,\n Skeleton: shadcnComponentDefinitions.Skeleton,\n Tooltip: shadcnComponentDefinitions.Tooltip,\n Popover: shadcnComponentDefinitions.Popover,\n\n // ── Navigation ──────────────────────────────────────────\n Pagination: shadcnComponentDefinitions.Pagination,\n },\n\n actions: {\n navigate_url: {\n params: z.object({\n url: z.string(),\n target: z.enum([\"_self\", \"_blank\"]).default(\"_blank\"),\n }),\n description: \"Open a URL in a new tab or the current tab.\",\n },\n send_message: {\n params: z.object({\n message: z.string(),\n }),\n description: \"Send a follow-up chat message on behalf of the user.\",\n },\n call_api: {\n params: z.object({\n endpoint: z.string(),\n method: z.enum([\"GET\", \"POST\", \"PUT\", \"DELETE\"]).default(\"POST\"),\n body: z.record(z.string(), z.unknown()).optional(),\n }),\n description: \"Make a proxied API call through the platform backend.\",\n },\n },\n});\n\nexport type PlatformCatalog = typeof catalog;\nexport type PlatformSpec = typeof catalog._specType;\n","\"use client\";\n\n/**\n * json-render registry for the widget.\n * Uses @json-render/shadcn standard component implementations.\n * Includes custom chart & visualization components.\n */\n\nimport { defineRegistry } from \"@json-render/react\";\nimport { shadcnComponents } from \"@json-render/shadcn\";\nimport { VisualizationRenderer } from \"../tools/VisualizationRenderer\";\nimport type { VisualizationSpec } from \"../tools/VisualizationRenderer\";\nimport { catalog } from \"./catalog\";\n\nexport const { registry, handlers: createActionHandlers } = defineRegistry(\n catalog,\n {\n components: {\n // ── Layout ──────────────────────────────────────────────\n Card: (p) => <div className=\"w-full [&>div]:border-0 [&>div]:shadow-none\">{shadcnComponents.Card(p)}</div>,\n Stack: shadcnComponents.Stack,\n Grid: shadcnComponents.Grid,\n Separator: shadcnComponents.Separator,\n Tabs: shadcnComponents.Tabs,\n Accordion: shadcnComponents.Accordion,\n Collapsible: shadcnComponents.Collapsible,\n Dialog: shadcnComponents.Dialog,\n Drawer: shadcnComponents.Drawer,\n Carousel: shadcnComponents.Carousel,\n\n // ── Typography ──────────────────────────────────────────\n Heading: shadcnComponents.Heading,\n Text: shadcnComponents.Text,\n Badge: shadcnComponents.Badge,\n Link: shadcnComponents.Link,\n Alert: shadcnComponents.Alert,\n\n // ── Media ───────────────────────────────────────────────\n Image: shadcnComponents.Image,\n Avatar: shadcnComponents.Avatar,\n\n // ── Data ────────────────────────────────────────────────\n Table: shadcnComponents.Table,\n\n // ── Charts & Visualization ────────────────────────────\n LineChart: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"line_chart\",\n title: props.title ?? undefined,\n description: props.description ?? undefined,\n data: props.data as VisualizationSpec[\"data\"],\n config: {\n xAxis: props.config?.xAxis ?? undefined,\n series: props.config?.series?.map((s) => ({\n dataKey: s.dataKey,\n label: s.label,\n color: s.color ?? undefined,\n })),\n showGrid: props.config?.showGrid ?? undefined,\n showLegend: props.config?.showLegend ?? undefined,\n stacked: props.config?.stacked ?? undefined,\n valueFormatter: props.config?.valueFormatter ?? undefined,\n },\n }}\n />\n ),\n BarChart: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"bar_chart\",\n title: props.title ?? undefined,\n description: props.description ?? undefined,\n data: props.data as VisualizationSpec[\"data\"],\n config: {\n xAxis: props.config?.xAxis ?? undefined,\n series: props.config?.series?.map((s) => ({\n dataKey: s.dataKey,\n label: s.label,\n color: s.color ?? undefined,\n })),\n showGrid: props.config?.showGrid ?? undefined,\n showLegend: props.config?.showLegend ?? undefined,\n stacked: props.config?.stacked ?? undefined,\n valueFormatter: props.config?.valueFormatter ?? undefined,\n },\n }}\n />\n ),\n PieChart: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"pie_chart\",\n title: props.title ?? undefined,\n description: props.description ?? undefined,\n data: props.data as VisualizationSpec[\"data\"],\n config: {\n series: [{ dataKey: props.dataKey, label: props.dataKey }],\n },\n }}\n />\n ),\n AreaChart: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"area_chart\",\n title: props.title ?? undefined,\n description: props.description ?? undefined,\n data: props.data as VisualizationSpec[\"data\"],\n config: {\n xAxis: props.config?.xAxis ?? undefined,\n series: props.config?.series?.map((s) => ({\n dataKey: s.dataKey,\n label: s.label,\n color: s.color ?? undefined,\n })),\n showGrid: props.config?.showGrid ?? undefined,\n showLegend: props.config?.showLegend ?? undefined,\n stacked: props.config?.stacked ?? undefined,\n valueFormatter: props.config?.valueFormatter ?? undefined,\n },\n }}\n />\n ),\n MetricCards: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"metric_cards\",\n title: props.title ?? undefined,\n metrics: props.metrics?.map((m) => ({\n label: m.label,\n value: m.value,\n unit: m.unit ?? undefined,\n trend: m.trend ?? undefined,\n trendDirection: m.trendDirection ?? undefined,\n description: m.description ?? undefined,\n })),\n }}\n />\n ),\n ComparisonTable: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"comparison\",\n title: props.title ?? undefined,\n items: props.items?.map((item) => ({\n name: item.name,\n highlight: item.highlight ?? undefined,\n features: item.features as Record<string, string | boolean | number>,\n })),\n comparisonFields: props.fields?.map((f) => ({\n key: f.key,\n label: f.label,\n type: f.type ?? undefined,\n })),\n }}\n />\n ),\n Timeline: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"timeline\",\n title: props.title ?? undefined,\n events: props.events?.map((e) => ({\n date: e.date ?? undefined,\n title: e.title,\n description: e.description ?? undefined,\n status: e.status ?? undefined,\n })),\n }}\n />\n ),\n ProgressBars: ({ props }) => (\n <VisualizationRenderer\n spec={{\n type: \"progress\",\n title: props.title ?? undefined,\n goals: props.goals?.map((g) => ({\n label: g.label,\n current: g.current,\n target: g.target,\n unit: g.unit ?? undefined,\n })),\n }}\n />\n ),\n\n // ── Form (wrapped with w-full for proper layout) ────────\n Input: (p) => <div className=\"w-full\">{shadcnComponents.Input(p)}</div>,\n Textarea: (p) => <div className=\"w-full\">{shadcnComponents.Textarea(p)}</div>,\n Select: (p) => <div className=\"w-full\">{shadcnComponents.Select(p)}</div>,\n Checkbox: shadcnComponents.Checkbox,\n Radio: shadcnComponents.Radio,\n Switch: shadcnComponents.Switch,\n Slider: shadcnComponents.Slider,\n Button: shadcnComponents.Button,\n ButtonGroup: shadcnComponents.ButtonGroup,\n Toggle: shadcnComponents.Toggle,\n ToggleGroup: shadcnComponents.ToggleGroup,\n DropdownMenu: shadcnComponents.DropdownMenu,\n\n // ── Feedback ────────────────────────────────────────────\n Progress: shadcnComponents.Progress,\n Spinner: shadcnComponents.Spinner,\n Skeleton: shadcnComponents.Skeleton,\n Tooltip: shadcnComponents.Tooltip,\n Popover: shadcnComponents.Popover,\n\n // ── Navigation ──────────────────────────────────────────\n Pagination: shadcnComponents.Pagination,\n },\n\n actions: {\n navigate_url: async (params) => {\n if (params?.url) {\n window.open(params.url, params.target ?? \"_blank\");\n }\n },\n send_message: async (params) => {\n console.log(\"[json-render] send_message action:\", params?.message);\n },\n call_api: async (params) => {\n const p = params as Record<string, unknown>;\n const url = (p?.endpoint || p?.url) as string | undefined;\n if (!url) {\n console.warn(\"[json-render] call_api: missing endpoint/url\");\n return;\n }\n const method = ((params?.method as string) || \"POST\").toUpperCase();\n try {\n const res = await fetch(url, {\n method,\n headers: { \"Content-Type\": \"application/json\" },\n ...(method !== \"GET\" && params?.body\n ? { body: JSON.stringify(params.body) }\n : {}),\n });\n const data = await res.json().catch(() => null);\n console.log(\"[json-render] call_api response:\", res.status, data);\n return data;\n } catch (err) {\n console.error(\"[json-render] call_api error:\", err);\n }\n },\n },\n },\n);\n","\"use client\";\n\n/**\n * JsonRenderResult — wrapper component for rendering json-render specs\n * inside tool results (both frontend dashboard and widget).\n */\n\nimport type { Spec } from \"@json-render/core\";\nimport {\n JSONUIProvider,\n Renderer,\n useStateValue,\n useValidation,\n} from \"@json-render/react\";\nimport { useMemo, useRef, useCallback, useEffect } from \"react\";\nimport { registry } from \"./registry\";\n\n/** Normalize a spec to the { root: string, elements: {...} } format. */\nfunction normalizeSpec(raw: Record<string, unknown>): Spec {\n if (typeof raw.root === \"string\" && raw.elements) {\n return raw as unknown as Spec;\n }\n const elements: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(raw)) {\n if (\n value &&\n typeof value === \"object\" &&\n \"type\" in (value as Record<string, unknown>)\n ) {\n elements[key] = value;\n }\n }\n return { root: \"root\", elements } as unknown as Spec;\n}\n\n/** Extract the `state` field from a spec and flatten into state paths. */\nfunction extractSpecState(\n raw: Record<string, unknown>,\n): Record<string, unknown> {\n const state = raw.state as Record<string, unknown> | undefined;\n if (!state || typeof state !== \"object\") return {};\n\n const result: Record<string, unknown> = {};\n function walk(obj: Record<string, unknown>, prefix: string) {\n for (const [key, value] of Object.entries(obj)) {\n const path = `${prefix}/${key}`;\n result[path] = value;\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n walk(value as Record<string, unknown>, path);\n }\n }\n }\n walk(state, \"\");\n return result;\n}\n\n/** Deeply resolve $state expressions in a value tree. */\nfunction deepResolve(\n value: unknown,\n stateMap: Record<string, unknown>,\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === \"object\" && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>;\n if (Object.keys(obj).length === 1 && typeof obj.$state === \"string\") {\n return stateMap[obj.$state];\n }\n const resolved: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(obj)) {\n resolved[key] = deepResolve(val, stateMap);\n }\n return resolved;\n }\n if (Array.isArray(value)) {\n return value.map((item) => deepResolve(item, stateMap));\n }\n return value;\n}\n\ninterface FormConfig {\n successMessage?: string;\n errorMessage?: string;\n hideFormAfter?: boolean;\n}\n\ninterface JsonRenderResultProps {\n spec: Spec;\n data: unknown;\n onSendMessage?: (message: string) => void;\n className?: string;\n conversationMessages?: Array<{ role: string; content: string }>;\n /** API key for authenticated requests (form submissions etc.) */\n apiKey?: string;\n}\n\nexport function JsonRenderResult({\n spec: rawSpec,\n data,\n onSendMessage,\n className,\n conversationMessages,\n apiKey,\n}: JsonRenderResultProps) {\n const rawSpecObj = rawSpec as unknown as Record<string, unknown>;\n const spec = useMemo(() => normalizeSpec(rawSpecObj), [rawSpecObj]);\n\n // Extract _formConfig from spec (set by the Form Settings panel)\n const formConfig = useMemo(\n () => (rawSpecObj._formConfig as FormConfig) || null,\n [rawSpecObj],\n );\n\n const initialState = useMemo(() => {\n const specState = extractSpecState(rawSpecObj);\n return {\n \"/data\": data,\n ...(conversationMessages\n ? { \"/conversationMessages\": conversationMessages }\n : {}),\n ...specState,\n };\n }, [data, rawSpecObj, conversationMessages]);\n\n // Ref for state tracking (updated via onStateChange)\n const stateRef = useRef<Record<string, unknown>>(initialState);\n const validateRef = useRef<(() => boolean) | null>(null);\n\n const handleStateChange = useCallback(\n (changes: Array<{ path: string; value: unknown }>) => {\n for (const { path, value } of changes) {\n stateRef.current[path] = value;\n }\n },\n [],\n );\n\n const handlers = useMemo(\n () => ({\n navigate_url: async (params: Record<string, unknown>) => {\n if (params?.url) {\n window.open(\n params.url as string,\n (params.target as string) ?? \"_blank\",\n );\n }\n },\n\n send_message: async (params: Record<string, unknown>) => {\n if (\n onSendMessage &&\n params?.message &&\n typeof params.message === \"string\"\n ) {\n onSendMessage(params.message);\n }\n },\n\n call_api: async (params: Record<string, unknown>) => {\n if (validateRef.current) {\n const isValid = validateRef.current();\n if (!isValid) {\n throw new Error(\"Validation failed\");\n }\n }\n\n const resolved = deepResolve(\n params,\n stateRef.current,\n ) as Record<string, unknown>;\n\n const url = (resolved?.endpoint || resolved?.url) as\n | string\n | undefined;\n if (!url) {\n throw new Error(\"Missing endpoint/url in call_api params\");\n }\n const method = (\n (resolved?.method as string) || \"POST\"\n ).toUpperCase();\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (apiKey) {\n headers.Authorization = `Bearer ${apiKey}`;\n }\n\n const res = await fetch(url, {\n method,\n headers,\n credentials: \"include\",\n ...(method !== \"GET\" && resolved?.body\n ? { body: JSON.stringify(resolved.body) }\n : {}),\n });\n\n if (!res.ok) {\n const errBody = await res.text().catch(() => \"\");\n throw new Error(\n errBody || `Request failed with status ${res.status}`,\n );\n }\n\n const responseData = await res.json().catch(() => null);\n return responseData;\n },\n }),\n [onSendMessage, apiKey],\n );\n\n return (\n <div className={className}>\n <JSONUIProvider\n registry={registry}\n initialState={initialState}\n handlers={handlers}\n onStateChange={handleStateChange}\n >\n <ValidationBridge validateRef={validateRef} />\n {formConfig ? (\n <FormFeedbackWrapper formConfig={formConfig}>\n <Renderer spec={spec} registry={registry} />\n </FormFeedbackWrapper>\n ) : (\n <Renderer spec={spec} registry={registry} />\n )}\n </JSONUIProvider>\n </div>\n );\n}\n\n/** Reads /formSubmitted and /formError from state and shows feedback UI.\n * Optionally hides form children after success. */\nfunction FormFeedbackWrapper({\n formConfig,\n children,\n}: {\n formConfig: FormConfig;\n children: React.ReactNode;\n}) {\n const formSubmitted = useStateValue(\"/formSubmitted\");\n const formError = useStateValue(\"/formError\");\n\n // Only show feedback when state has been explicitly set to truthy values\n const isSubmitted = formSubmitted === true;\n const hasError = !!formError && formError !== \"\" && formError !== false;\n\n if (isSubmitted && formConfig.hideFormAfter) {\n return (\n <div\n className=\"rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-950/30\"\n role=\"alert\"\n >\n <p className=\"text-sm font-medium text-green-800 dark:text-green-200\">\n {formConfig.successMessage || \"Submitted successfully!\"}\n </p>\n </div>\n );\n }\n\n return (\n <>\n {isSubmitted && formConfig.successMessage && (\n <div\n className=\"rounded-lg border border-green-200 bg-green-50 p-3 mb-3 dark:border-green-800 dark:bg-green-950/30\"\n role=\"alert\"\n >\n <p className=\"text-sm font-medium text-green-800 dark:text-green-200\">\n {formConfig.successMessage}\n </p>\n </div>\n )}\n {hasError && formConfig.errorMessage && (\n <div\n className=\"rounded-lg border border-red-200 bg-red-50 p-3 mb-3 dark:border-red-800 dark:bg-red-950/30\"\n role=\"alert\"\n >\n <p className=\"text-sm font-medium text-red-800 dark:text-red-200\">\n {formConfig.errorMessage}\n </p>\n </div>\n )}\n {children}\n </>\n );\n}\n\n/** Bridges the validation context to the parent's ref. */\nfunction ValidationBridge({\n validateRef,\n}: {\n validateRef: React.RefObject<(() => boolean) | null>;\n}) {\n const validation = useValidation();\n\n useEffect(() => {\n if (validation?.validateAll) {\n validateRef.current = () => validation.validateAll();\n }\n return () => {\n validateRef.current = null;\n };\n }, [validation, validateRef]);\n\n return null;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-aigentyc-chat.ts"],"names":["transport"],"mappings":"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","file":"chunk-M4YRNNGB.js","sourcesContent":["\"use client\";\n\nimport {\n useState,\n useCallback,\n useRef,\n useMemo,\n useEffect,\n type RefObject,\n} from \"react\";\nimport type {\n ChatProviderProps,\n ChatMessage,\n ChatEventCallbacks,\n LiveChatState,\n LiveChatMessage,\n} from \"../core/types\";\n\ntype ChatStatus = \"idle\" | \"streaming\" | \"error\";\n\ninterface ActiveTool {\n toolName: string;\n state: \"partial-call\" | \"call\" | \"output-available\";\n args: Record<string, unknown>;\n result?: unknown;\n renderMode: string;\n}\n// NOTE: @ai-sdk/react and ai are optional peer dependencies.\nimport { useChat } from \"@ai-sdk/react\";\nimport { DefaultChatTransport } from \"ai\";\nimport { LiveChatTransport } from \"../core/live-chat-transport\";\n\nconst SESSION_KEY_PREFIX = \"aigentyc-session-\";\nconst MESSAGE_KEY_PREFIX = \"aigentyc-messages-\";\n\nfunction getOrCreateSessionId(projectId: string): string {\n if (typeof window === \"undefined\") return crypto.randomUUID();\n const key = SESSION_KEY_PREFIX + projectId;\n try {\n const stored = sessionStorage.getItem(key);\n if (stored) return stored;\n const id = crypto.randomUUID();\n sessionStorage.setItem(key, id);\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nfunction loadPersistedMessages(projectId: string): ChatMessage[] {\n if (typeof window === \"undefined\") return [];\n try {\n const raw = localStorage.getItem(MESSAGE_KEY_PREFIX + projectId);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nfunction persistMessages(projectId: string, messages: unknown[]): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.setItem(MESSAGE_KEY_PREFIX + projectId, JSON.stringify(messages));\n } catch {\n // Ignore.\n }\n}\n\nfunction clearPersistedMessages(projectId: string): void {\n if (typeof window === \"undefined\") return;\n try {\n localStorage.removeItem(MESSAGE_KEY_PREFIX + projectId);\n } catch {\n // Ignore.\n }\n}\n\n/** Options for the headless `useAigentycChat` hook (same shape as ChatProviderProps). */\nexport type UseAigentycChatOptions = Omit<ChatProviderProps, \"children\" | \"slots\" | \"theme\">;\n\n/** Live chat sub-object returned by the hook. */\nexport interface LiveChatReturn {\n state: LiveChatState;\n messages: LiveChatMessage[];\n operatorName: string;\n queuePosition: number;\n showIdentityForm: boolean;\n initiate: (visitorName?: string, visitorEmail?: string) => Promise<void>;\n send: (content: string) => void;\n end: () => void;\n cancel: () => void;\n submitRating: (rating: \"positive\" | \"negative\", comment?: string) => void;\n returnToAI: () => void;\n requestManualHandoff: () => void;\n setShowIdentityForm: (show: boolean) => void;\n}\n\n/** Return value of `useAigentycChat`. */\nexport interface UseAigentycChatReturn {\n messages: ChatMessage[];\n status: ChatStatus;\n error: Error | undefined;\n sessionId: string;\n sendMessage: (content: string) => void;\n stopGeneration: () => void;\n newConversation: () => void;\n clearMessages: () => void;\n activeTools: ActiveTool[];\n liveChat: LiveChatReturn;\n chatRef: RefObject<HTMLDivElement | null>;\n}\n\nconst CALLBACK_KEYS: (keyof ChatEventCallbacks)[] = [\n \"onReady\",\n \"onSessionStart\",\n \"onSessionRestore\",\n \"onMessageSent\",\n \"onMessageReceived\",\n \"onStreamStart\",\n \"onStreamEnd\",\n \"onToolCall\",\n \"onToolResult\",\n \"onToolAction\",\n \"onLiveChatRequested\",\n \"onLiveChatConnected\",\n \"onLiveChatEnded\",\n \"onError\",\n \"onNewConversation\",\n \"onStopGeneration\",\n \"onClearMessages\",\n \"onInteraction\",\n];\n\nfunction pickCallbacks(opts: Record<string, unknown>): ChatEventCallbacks {\n const out: Record<string, unknown> = {};\n for (const key of CALLBACK_KEYS) {\n if (opts[key] !== undefined) out[key] = opts[key];\n }\n return out as ChatEventCallbacks;\n}\n\n/**\n * Standalone headless hook for Aigentyc Chat. No provider needed.\n *\n * Creates its own transport, session, and persistence internally. Use this\n * when you want full control over the UI but still want all SDK features\n * (chat, tools, live chat, persistence).\n */\nexport function useAigentycChat(options: UseAigentycChatOptions): UseAigentycChatReturn {\n const {\n projectId,\n apiEndpoint,\n apiKey,\n enableLiveChat = false,\n chatServiceUrl,\n persistMessages: shouldPersist = true,\n } = options;\n\n const callbacks = pickCallbacks(options as unknown as Record<string, unknown>);\n const callbacksRef = useRef(callbacks);\n callbacksRef.current = callbacks;\n\n const safeProjectId = projectId || \"default\";\n const [sessionId, setSessionId] = useState(() => getOrCreateSessionId(safeProjectId));\n const chatRef = useRef<HTMLDivElement | null>(null);\n\n const initialMessages = useMemo(\n () => (shouldPersist ? loadPersistedMessages(safeProjectId) : []),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const transport = useMemo(\n () =>\n new DefaultChatTransport({\n api: `${apiEndpoint || \"\"}/api/kb/chat`,\n headers: apiKey ? { Authorization: `Bearer ${apiKey}` } : undefined,\n body: { projectId: safeProjectId, sessionId },\n }),\n [apiEndpoint, apiKey, safeProjectId, sessionId]\n );\n\n const {\n messages,\n sendMessage: sdkSendMessage,\n status: sdkStatus,\n error,\n stop,\n setMessages,\n } = useChat({\n id: sessionId,\n messages: initialMessages as never,\n transport,\n onFinish: (message) => {\n callbacksRef.current?.onMessageReceived?.(message as unknown as ChatMessage);\n },\n onError: (err) => {\n callbacksRef.current?.onError?.(err);\n },\n });\n\n const status: ChatStatus = error\n ? \"error\"\n : sdkStatus === \"streaming\" || sdkStatus === \"submitted\"\n ? \"streaming\"\n : \"idle\";\n\n // Persist messages\n useEffect(() => {\n if (shouldPersist) persistMessages(safeProjectId, messages);\n }, [messages, safeProjectId, shouldPersist]);\n\n // Derive active tools from the latest assistant message\n const activeTools = useMemo<ActiveTool[]>(() => {\n if (messages.length === 0) return [];\n const last = messages[messages.length - 1] as { role: string; parts?: unknown[] };\n if (last.role !== \"assistant\" || !Array.isArray(last.parts)) return [];\n return (last.parts as Array<Record<string, unknown>>)\n .filter((p) => typeof p.type === \"string\" && (p.type as string).startsWith(\"tool-\"))\n .map((p) => ({\n toolName: (p.toolName as string) || (p.type as string).replace(\"tool-\", \"\"),\n state: (p.state as ActiveTool[\"state\"]) || \"output-available\",\n args: (p.args as Record<string, unknown>) || {},\n result: p.result,\n renderMode: (p.renderMode as string) || \"inline\",\n }));\n }, [messages]);\n\n const sendMessage = useCallback(\n (content: string) => {\n if (!content.trim()) return;\n callbacksRef.current?.onMessageSent?.({\n id: crypto.randomUUID(),\n role: \"user\",\n content,\n } as ChatMessage);\n sdkSendMessage({ text: content });\n },\n [sdkSendMessage]\n );\n\n const stopGeneration = useCallback(() => {\n stop();\n callbacksRef.current?.onStopGeneration?.();\n }, [stop]);\n\n const newConversation = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(safeProjectId);\n if (typeof window !== \"undefined\") {\n try {\n sessionStorage.removeItem(SESSION_KEY_PREFIX + safeProjectId);\n } catch {\n // Ignore.\n }\n }\n const nextSessionId = getOrCreateSessionId(safeProjectId);\n setSessionId(nextSessionId);\n callbacksRef.current?.onNewConversation?.(nextSessionId);\n }, [safeProjectId, setMessages]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n clearPersistedMessages(safeProjectId);\n callbacksRef.current?.onClearMessages?.();\n }, [safeProjectId, setMessages]);\n\n // --- Live Chat (self-contained) ---\n const [lcState, setLcState] = useState<LiveChatState>(\"ai\");\n const [lcMessages, setLcMessages] = useState<LiveChatMessage[]>([]);\n const [lcOperator, setLcOperator] = useState(\"\");\n const [lcQueue, setLcQueue] = useState(0);\n const [lcShowIdentity, setLcShowIdentity] = useState(false);\n const lcTransportRef = useRef<LiveChatTransport | null>(null);\n\n const lcResetState = useCallback(() => {\n lcTransportRef.current?.disconnect?.();\n lcTransportRef.current = null;\n setLcState(\"ai\");\n setLcMessages([]);\n setLcOperator(\"\");\n setLcQueue(0);\n setLcShowIdentity(false);\n }, []);\n\n const lcInitiate = useCallback(\n async (visitorName?: string, visitorEmail?: string) => {\n if (!enableLiveChat || lcTransportRef.current) return;\n const url = chatServiceUrl ?? apiEndpoint;\n if (!url || !apiKey) return;\n try {\n const transport = new LiveChatTransport({\n chatServiceUrl: url,\n apiKey,\n projectId: safeProjectId,\n visitorSessionId: sessionId,\n });\n transport.on(\"state-change\", (s: LiveChatState) => setLcState(s));\n transport.on(\"queued\", (data: { position: number }) => setLcQueue(data.position));\n transport.on(\"queue-update\", (data: { position: number }) => setLcQueue(data.position));\n transport.on(\"accepted\", (data: { operatorName: string }) => setLcOperator(data.operatorName));\n transport.on(\"message\", (data: LiveChatMessage) =>\n setLcMessages((prev) => [...prev, data])\n );\n transport.on(\"ended\", () => setLcState(\"ended\"));\n lcTransportRef.current = transport;\n await transport.connect();\n await transport.requestHandoff({\n visitorName,\n visitorEmail,\n aiChatHistory: [],\n });\n callbacksRef.current?.onLiveChatRequested?.();\n } catch (err) {\n callbacksRef.current?.onError?.(err as Error);\n setLcState(\"ai\");\n }\n },\n [enableLiveChat, chatServiceUrl, apiEndpoint, apiKey, safeProjectId, sessionId]\n );\n\n const liveChat = useMemo<LiveChatReturn>(\n () => ({\n state: lcState,\n messages: lcMessages,\n operatorName: lcOperator,\n queuePosition: lcQueue,\n showIdentityForm: lcShowIdentity,\n initiate: lcInitiate,\n send: (content: string) => {\n if (!content.trim()) return;\n lcTransportRef.current?.sendMessage?.(content);\n setLcMessages((prev) => [\n ...prev,\n {\n id: Date.now(),\n content,\n senderType: \"visitor\",\n timestamp: new Date().toISOString(),\n },\n ]);\n },\n end: () => lcTransportRef.current?.endChat?.(),\n cancel: () => lcResetState(),\n submitRating: (rating, comment) =>\n lcTransportRef.current?.submitRating?.(rating, comment),\n returnToAI: () => lcResetState(),\n requestManualHandoff: () => setLcShowIdentity(true),\n setShowIdentityForm: setLcShowIdentity,\n }),\n [lcState, lcMessages, lcOperator, lcQueue, lcShowIdentity, lcInitiate, lcResetState]\n );\n\n return {\n messages: messages as unknown as ChatMessage[],\n status,\n error: error as Error | undefined,\n sessionId,\n sendMessage,\n stopGeneration,\n newConversation,\n clearMessages,\n activeTools,\n liveChat,\n chatRef,\n };\n}\n"]}