@waniwani/sdk 0.0.12 → 0.0.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waniwani/sdk",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "description": "WaniWani SDK - MCP event tracking, widget framework, and tools",
5
5
  "type": "module",
6
6
  "exports": {
@@ -24,14 +24,18 @@
24
24
  "import": "./dist/chat/server/index.js",
25
25
  "types": "./dist/chat/server/index.d.ts"
26
26
  },
27
- "./chat/styles.css": "./dist/chat/styles.css"
27
+ "./chat/styles.css": "./dist/chat/styles.css",
28
+ "./next-js": {
29
+ "import": "./dist/chat/next-js/index.js",
30
+ "types": "./dist/chat/next-js/index.d.ts"
31
+ }
28
32
  },
29
33
  "files": [
30
34
  "dist"
31
35
  ],
32
36
  "scripts": {
33
37
  "build": "rm -rf dist && bun run typecheck && bun run lint && tsup && bun run build:chat-css",
34
- "build:chat-css": "tailwindcss -i src/chat/tailwind.css -o dist/chat/styles.css --minify",
38
+ "build:chat-css": "tailwindcss -i src/chat/web/tailwind.css -o dist/chat/styles.css --minify",
35
39
  "dev": "tsx --watch src/index.ts",
36
40
  "typecheck": "tsc --noEmit",
37
41
  "lint": "biome check .",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mcp/hooks/@types.ts"],"sourcesContent":["/**\n * Source: https://github.com/openai/openai-apps-sdk-examples/tree/main/src\n */\n\nexport type OpenAIGlobals<\n\tToolInput = UnknownObject,\n\tToolOutput = UnknownObject,\n\tToolResponseMetadata = UnknownObject,\n\tWidgetState = UnknownObject,\n> = {\n\t// visuals\n\ttheme: Theme;\n\n\tuserAgent: UserAgent;\n\tlocale: string;\n\n\t// layout\n\tmaxHeight: number;\n\tdisplayMode: DisplayMode;\n\tsafeArea: SafeArea;\n\n\t// state\n\ttoolInput: ToolInput;\n\ttoolOutput: ToolOutput | null;\n\ttoolResponseMetadata: ToolResponseMetadata | null;\n\twidgetState: WidgetState | null;\n\tsetWidgetState: (state: WidgetState) => Promise<void>;\n};\n\ntype API = {\n\tcallTool: CallTool;\n\tsendFollowUpMessage: (args: { prompt: string }) => Promise<void>;\n\topenExternal(payload: { href: string }): void;\n\n\t// Layout controls\n\trequestDisplayMode: RequestDisplayMode;\n};\n\nexport type UnknownObject = Record<string, unknown>;\n\nexport type Theme = \"light\" | \"dark\";\n\nexport type SafeAreaInsets = {\n\ttop: number;\n\tbottom: number;\n\tleft: number;\n\tright: number;\n};\n\nexport type SafeArea = {\n\tinsets: SafeAreaInsets;\n};\n\nexport type DeviceType = \"mobile\" | \"tablet\" | \"desktop\" | \"unknown\";\n\nexport type UserAgent = {\n\tdevice: { type: DeviceType };\n\tcapabilities: {\n\t\thover: boolean;\n\t\ttouch: boolean;\n\t};\n};\n\n/** Display mode */\nexport type DisplayMode = \"pip\" | \"inline\" | \"fullscreen\";\nexport type RequestDisplayMode = (args: { mode: DisplayMode }) => Promise<{\n\t/**\n\t * The granted display mode. The host may reject the request.\n\t * For mobile, PiP is always coerced to fullscreen.\n\t */\n\tmode: DisplayMode;\n}>;\n\nexport type CallToolResponse = {\n\tresult: string;\n};\n\n/** Calling APIs */\nexport type CallTool = (\n\tname: string,\n\targs: Record<string, unknown>,\n) => Promise<CallToolResponse>;\n\n/** Extra events */\nexport const SET_GLOBALS_EVENT_TYPE = \"openai:set_globals\";\nexport class SetGlobalsEvent extends CustomEvent<{\n\tglobals: Partial<OpenAIGlobals>;\n}> {\n\tconstructor(detail: { globals: Partial<OpenAIGlobals> }) {\n\t\tsuper(SET_GLOBALS_EVENT_TYPE, { detail });\n\t}\n}\n\n/**\n * Global oai object injected by the web sandbox for communicating with chatgpt host page.\n */\ndeclare global {\n\tinterface Window {\n\t\topenai: API & OpenAIGlobals;\n\t\tinnerBaseUrl: string;\n\t}\n\n\tinterface WindowEventMap {\n\t\t[SET_GLOBALS_EVENT_TYPE]: SetGlobalsEvent;\n\t}\n}\n"],"mappings":";AAoFO,IAAMA,EAAyB,qBACzBC,EAAN,cAA8B,WAElC,CACF,YAAYC,EAA6C,CACxD,MAAMF,EAAwB,CAAE,OAAAE,CAAO,CAAC,CACzC,CACD","names":["SET_GLOBALS_EVENT_TYPE","SetGlobalsEvent","detail"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mcp/widgets/@utils/platform.ts"],"sourcesContent":["/**\n * Widget platform types\n */\nexport type WidgetPlatform = \"openai\" | \"mcp-apps\";\n\n/**\n * Detects which platform the widget is running on.\n *\n * OpenAI injects a global `window.openai` object.\n * MCP Apps runs in a sandboxed iframe and uses postMessage.\n */\nexport function detectPlatform(): WidgetPlatform {\n\tif (typeof window !== \"undefined\" && \"openai\" in window) {\n\t\treturn \"openai\";\n\t}\n\treturn \"mcp-apps\";\n}\n\n/**\n * Check if running on OpenAI platform\n */\nexport function isOpenAI(): boolean {\n\treturn detectPlatform() === \"openai\";\n}\n\n/**\n * Check if running on MCP Apps platform\n */\nexport function isMCPApps(): boolean {\n\treturn detectPlatform() === \"mcp-apps\";\n}\n"],"mappings":";AAWO,SAASA,GAAiC,CAChD,OAAI,OAAO,OAAW,KAAe,WAAY,OACzC,SAED,UACR,CAKO,SAASC,GAAoB,CACnC,OAAOD,EAAe,IAAM,QAC7B,CAKO,SAASE,GAAqB,CACpC,OAAOF,EAAe,IAAM,UAC7B","names":["detectPlatform","isOpenAI","isMCPApps"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mcp/widgets/@utils/mcp-apps-client.ts"],"sourcesContent":["import type { McpUiHostContext } from \"@modelcontextprotocol/ext-apps\";\nimport { App, PostMessageTransport } from \"@modelcontextprotocol/ext-apps\";\nimport type {\n\tDisplayMode,\n\tSafeArea,\n\tTheme,\n\tUnknownObject,\n} from \"../../hooks/@types\";\nimport type {\n\tToolCallResult,\n\tToolResult,\n\tUnifiedWidgetClient,\n} from \"./widget-client\";\n\n/**\n * MCP Apps widget client implementation.\n * Uses the @modelcontextprotocol/ext-apps App class for communication.\n */\nexport class MCPAppsWidgetClient implements UnifiedWidgetClient {\n\tprivate app: App;\n\tprivate toolResultCallback: ((result: ToolResult) => void) | null = null;\n\tprivate themeChangeCallback: ((theme: Theme) => void) | null = null;\n\tprivate displayModeChangeCallback: ((mode: DisplayMode) => void) | null =\n\t\tnull;\n\tprivate hostContext: McpUiHostContext | undefined;\n\tprivate latestToolResult: ToolResult | null = null;\n\n\tconstructor() {\n\t\tthis.app = new App(\n\t\t\t{ name: \"WaniWani Widget\", version: \"1.0.0\" },\n\t\t\t{}, // capabilities\n\t\t\t{ autoResize: true },\n\t\t);\n\n\t\t// Set up notification handlers\n\t\tthis.app.ontoolresult = (params) => {\n\t\t\tconst result: ToolResult = {\n\t\t\t\tcontent: params.content,\n\t\t\t\tstructuredContent: params.structuredContent as\n\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t| undefined,\n\t\t\t};\n\t\t\tthis.latestToolResult = result;\n\t\t\tthis.toolResultCallback?.(result);\n\t\t};\n\n\t\tthis.app.onhostcontextchanged = (params) => {\n\t\t\tthis.hostContext = { ...this.hostContext, ...params };\n\t\t\tif (params.theme) {\n\t\t\t\tthis.themeChangeCallback?.(params.theme as Theme);\n\t\t\t}\n\t\t\tif (params.displayMode) {\n\t\t\t\tthis.displayModeChangeCallback?.(params.displayMode as DisplayMode);\n\t\t\t}\n\t\t};\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tawait this.app.connect(\n\t\t\tnew PostMessageTransport(window.parent, window.parent),\n\t\t);\n\t\tthis.hostContext = this.app.getHostContext();\n\t}\n\n\tgetToolOutput<T = Record<string, unknown>>(): T | null {\n\t\t// In MCP Apps, tool output comes through ontoolresult notification\n\t\t// Return the latest cached result\n\t\tif (this.latestToolResult?.structuredContent) {\n\t\t\treturn this.latestToolResult.structuredContent as T;\n\t\t}\n\t\treturn null;\n\t}\n\n\tonToolResult(callback: (result: ToolResult) => void): () => void {\n\t\tthis.toolResultCallback = callback;\n\t\treturn () => {\n\t\t\tthis.toolResultCallback = null;\n\t\t};\n\t}\n\n\tasync callTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<ToolCallResult> {\n\t\tconst result = await this.app.callServerTool({\n\t\t\tname,\n\t\t\targuments: args,\n\t\t});\n\t\treturn {\n\t\t\tcontent: result.content,\n\t\t\tstructuredContent: result.structuredContent as\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| undefined,\n\t\t};\n\t}\n\n\topenExternal(url: string): void {\n\t\tthis.app.sendOpenLink({ url }).catch((err: unknown) => {\n\t\t\tconsole.error(\"Failed to open link:\", err);\n\t\t});\n\t}\n\n\tsendFollowUp(prompt: string): void {\n\t\tthis.app\n\t\t\t.sendMessage({\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: [{ type: \"text\", text: prompt }],\n\t\t\t})\n\t\t\t.catch((err: unknown) => {\n\t\t\t\tconsole.error(\"Failed to send follow-up message:\", err);\n\t\t\t});\n\t}\n\n\tgetTheme(): Theme {\n\t\treturn (this.hostContext?.theme as Theme) ?? \"light\";\n\t}\n\n\tonThemeChange(callback: (theme: Theme) => void): () => void {\n\t\tthis.themeChangeCallback = callback;\n\t\treturn () => {\n\t\t\tthis.themeChangeCallback = null;\n\t\t};\n\t}\n\n\tgetLocale(): string {\n\t\treturn (this.hostContext?.locale as string | undefined) ?? \"en\";\n\t}\n\n\tgetDisplayMode(): DisplayMode {\n\t\treturn (this.hostContext?.displayMode as DisplayMode) ?? \"inline\";\n\t}\n\n\tasync requestDisplayMode(mode: DisplayMode): Promise<DisplayMode> {\n\t\tconst result = await this.app.requestDisplayMode({ mode });\n\t\treturn result.mode as DisplayMode;\n\t}\n\n\tonDisplayModeChange(callback: (mode: DisplayMode) => void): () => void {\n\t\tthis.displayModeChangeCallback = callback;\n\t\treturn () => {\n\t\t\tthis.displayModeChangeCallback = null;\n\t\t};\n\t}\n\n\t// OPENAI specific methods\n\tgetSafeArea(): SafeArea | null {\n\t\treturn null;\n\t}\n\n\t// MCP Apps specific methods\n\tonSafeAreaChange(): () => void {\n\t\treturn () => {};\n\t}\n\n\t// OPENAI specific methods\n\tgetMaxHeight(): number | null {\n\t\treturn null;\n\t}\n\n\t// MCP Apps specific methods\n\tonMaxHeightChange(): () => void {\n\t\treturn () => {};\n\t}\n\n\t// MCP Apps specific methods\n\tgetToolResponseMetadata(): UnknownObject | null {\n\t\treturn null;\n\t}\n\n\t// MCP Apps specific methods\n\tonToolResponseMetadataChange(): () => void {\n\t\treturn () => {};\n\t}\n\n\t// MCP Apps specific methods\n\tgetWidgetState(): UnknownObject | null {\n\t\treturn null;\n\t}\n\n\t// MCP Apps specific methods\n\tonWidgetStateChange(): () => void {\n\t\treturn () => {};\n\t}\n}\n"],"mappings":";AACA,OAAS,OAAAA,EAAK,wBAAAC,MAA4B,iCAiBnC,IAAMC,EAAN,KAAyD,CACvD,IACA,mBAA4D,KAC5D,oBAAuD,KACvD,0BACP,KACO,YACA,iBAAsC,KAE9C,aAAc,CACb,KAAK,IAAM,IAAIF,EACd,CAAE,KAAM,kBAAmB,QAAS,OAAQ,EAC5C,CAAC,EACD,CAAE,WAAY,EAAK,CACpB,EAGA,KAAK,IAAI,aAAgBG,GAAW,CACnC,IAAMC,EAAqB,CAC1B,QAASD,EAAO,QAChB,kBAAmBA,EAAO,iBAG3B,EACA,KAAK,iBAAmBC,EACxB,KAAK,qBAAqBA,CAAM,CACjC,EAEA,KAAK,IAAI,qBAAwBD,GAAW,CAC3C,KAAK,YAAc,CAAE,GAAG,KAAK,YAAa,GAAGA,CAAO,EAChDA,EAAO,OACV,KAAK,sBAAsBA,EAAO,KAAc,EAE7CA,EAAO,aACV,KAAK,4BAA4BA,EAAO,WAA0B,CAEpE,CACD,CAEA,MAAM,SAAyB,CAC9B,MAAM,KAAK,IAAI,QACd,IAAIF,EAAqB,OAAO,OAAQ,OAAO,MAAM,CACtD,EACA,KAAK,YAAc,KAAK,IAAI,eAAe,CAC5C,CAEA,eAAuD,CAGtD,OAAI,KAAK,kBAAkB,kBACnB,KAAK,iBAAiB,kBAEvB,IACR,CAEA,aAAaI,EAAoD,CAChE,YAAK,mBAAqBA,EACnB,IAAM,CACZ,KAAK,mBAAqB,IAC3B,CACD,CAEA,MAAM,SACLC,EACAC,EAC0B,CAC1B,IAAMH,EAAS,MAAM,KAAK,IAAI,eAAe,CAC5C,KAAAE,EACA,UAAWC,CACZ,CAAC,EACD,MAAO,CACN,QAASH,EAAO,QAChB,kBAAmBA,EAAO,iBAG3B,CACD,CAEA,aAAaI,EAAmB,CAC/B,KAAK,IAAI,aAAa,CAAE,IAAAA,CAAI,CAAC,EAAE,MAAOC,GAAiB,CACtD,QAAQ,MAAM,uBAAwBA,CAAG,CAC1C,CAAC,CACF,CAEA,aAAaC,EAAsB,CAClC,KAAK,IACH,YAAY,CACZ,KAAM,OACN,QAAS,CAAC,CAAE,KAAM,OAAQ,KAAMA,CAAO,CAAC,CACzC,CAAC,EACA,MAAOD,GAAiB,CACxB,QAAQ,MAAM,oCAAqCA,CAAG,CACvD,CAAC,CACH,CAEA,UAAkB,CACjB,OAAQ,KAAK,aAAa,OAAmB,OAC9C,CAEA,cAAcJ,EAA8C,CAC3D,YAAK,oBAAsBA,EACpB,IAAM,CACZ,KAAK,oBAAsB,IAC5B,CACD,CAEA,WAAoB,CACnB,OAAQ,KAAK,aAAa,QAAiC,IAC5D,CAEA,gBAA8B,CAC7B,OAAQ,KAAK,aAAa,aAA+B,QAC1D,CAEA,MAAM,mBAAmBM,EAAyC,CAEjE,OADe,MAAM,KAAK,IAAI,mBAAmB,CAAE,KAAAA,CAAK,CAAC,GAC3C,IACf,CAEA,oBAAoBN,EAAmD,CACtE,YAAK,0BAA4BA,EAC1B,IAAM,CACZ,KAAK,0BAA4B,IAClC,CACD,CAGA,aAA+B,CAC9B,OAAO,IACR,CAGA,kBAA+B,CAC9B,MAAO,IAAM,CAAC,CACf,CAGA,cAA8B,CAC7B,OAAO,IACR,CAGA,mBAAgC,CAC/B,MAAO,IAAM,CAAC,CACf,CAGA,yBAAgD,CAC/C,OAAO,IACR,CAGA,8BAA2C,CAC1C,MAAO,IAAM,CAAC,CACf,CAGA,gBAAuC,CACtC,OAAO,IACR,CAGA,qBAAkC,CACjC,MAAO,IAAM,CAAC,CACf,CACD","names":["App","PostMessageTransport","MCPAppsWidgetClient","params","result","callback","name","args","url","err","prompt","mode"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mcp/widgets/@utils/openai-client.ts"],"sourcesContent":["import type {\n\tDisplayMode,\n\tSafeArea,\n\tTheme,\n\tUnknownObject,\n} from \"../../hooks/@types\";\nimport {\n\tSET_GLOBALS_EVENT_TYPE,\n\ttype SetGlobalsEvent,\n} from \"../../hooks/@types\";\nimport type {\n\tToolCallResult,\n\tToolResult,\n\tUnifiedWidgetClient,\n} from \"./widget-client\";\n\ntype GlobalsKey = keyof SetGlobalsEvent[\"detail\"][\"globals\"];\n\n/**\n * OpenAI widget client implementation.\n * Uses window.openai global object injected by ChatGPT.\n */\nexport class OpenAIWidgetClient implements UnifiedWidgetClient {\n\tprivate getGlobal<T>(\n\t\tkey: keyof NonNullable<typeof window.openai>,\n\t\tfallback: T,\n\t): T {\n\t\tif (typeof window === \"undefined\") return fallback;\n\t\treturn (window.openai?.[key] as T) ?? fallback;\n\t}\n\n\tprivate onGlobalChange<\n\t\tK extends GlobalsKey,\n\t\tT = SetGlobalsEvent[\"detail\"][\"globals\"][K],\n\t>(\n\t\tkey: K,\n\t\tcallback: (value: T) => void,\n\t\ttransform?: (value: SetGlobalsEvent[\"detail\"][\"globals\"][K]) => T,\n\t): () => void {\n\t\tif (typeof window === \"undefined\") return () => {};\n\n\t\tconst handler = (event: SetGlobalsEvent) => {\n\t\t\tconst value = event.detail.globals[key];\n\t\t\tif (value !== undefined) {\n\t\t\t\tcallback(transform ? transform(value) : (value as T));\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(SET_GLOBALS_EVENT_TYPE, handler, { passive: true });\n\t\treturn () => window.removeEventListener(SET_GLOBALS_EVENT_TYPE, handler);\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (typeof window === \"undefined\" || !(\"openai\" in window)) {\n\t\t\tthrow new Error(\"OpenAI global not found. Are you running in ChatGPT?\");\n\t\t}\n\t}\n\n\tgetToolOutput<T = Record<string, unknown>>(): T | null {\n\t\treturn this.getGlobal<T | null>(\"toolOutput\", null);\n\t}\n\n\tonToolResult(callback: (result: ToolResult) => void): () => void {\n\t\treturn this.onGlobalChange(\"toolOutput\", callback, (v) => ({\n\t\t\tstructuredContent: v ?? {},\n\t\t}));\n\t}\n\n\tasync callTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<ToolCallResult> {\n\t\tif (typeof window === \"undefined\" || !window.openai?.callTool) {\n\t\t\tthrow new Error(\"OpenAI callTool not available\");\n\t\t}\n\t\tconst response = await window.openai.callTool(name, args);\n\t\treturn { content: [{ type: \"text\", text: response.result }] };\n\t}\n\n\topenExternal(url: string): void {\n\t\tif (typeof window !== \"undefined\" && window.openai?.openExternal) {\n\t\t\twindow.openai.openExternal({ href: url });\n\t\t}\n\t}\n\n\tsendFollowUp(prompt: string): void {\n\t\tif (typeof window !== \"undefined\" && window.openai?.sendFollowUpMessage) {\n\t\t\twindow.openai.sendFollowUpMessage({ prompt });\n\t\t}\n\t}\n\n\tgetTheme(): Theme {\n\t\treturn this.getGlobal(\"theme\", \"light\" as Theme);\n\t}\n\n\tonThemeChange(callback: (theme: Theme) => void): () => void {\n\t\treturn this.onGlobalChange(\"theme\", callback);\n\t}\n\n\tgetLocale(): string {\n\t\treturn this.getGlobal(\"locale\", \"en\");\n\t}\n\n\tgetDisplayMode(): DisplayMode {\n\t\treturn this.getGlobal(\"displayMode\", \"inline\" as DisplayMode);\n\t}\n\n\tasync requestDisplayMode(mode: DisplayMode): Promise<DisplayMode> {\n\t\tif (typeof window === \"undefined\" || !window.openai?.requestDisplayMode) {\n\t\t\treturn \"inline\";\n\t\t}\n\t\tconst result = await window.openai.requestDisplayMode({ mode });\n\t\treturn result.mode;\n\t}\n\n\tonDisplayModeChange(callback: (mode: DisplayMode) => void): () => void {\n\t\treturn this.onGlobalChange(\"displayMode\", callback);\n\t}\n\n\tgetSafeArea(): SafeArea | null {\n\t\treturn this.getGlobal(\"safeArea\", null);\n\t}\n\n\tonSafeAreaChange(callback: (safeArea: SafeArea | null) => void): () => void {\n\t\treturn this.onGlobalChange(\"safeArea\", callback, (v) => v ?? null);\n\t}\n\n\tgetMaxHeight(): number | null {\n\t\treturn this.getGlobal(\"maxHeight\", null);\n\t}\n\n\tonMaxHeightChange(callback: (maxHeight: number | null) => void): () => void {\n\t\treturn this.onGlobalChange(\"maxHeight\", callback, (v) => v ?? null);\n\t}\n\n\tgetToolResponseMetadata(): UnknownObject | null {\n\t\treturn this.getGlobal(\"toolResponseMetadata\", null);\n\t}\n\n\tonToolResponseMetadataChange(\n\t\tcallback: (metadata: UnknownObject | null) => void,\n\t): () => void {\n\t\treturn this.onGlobalChange(\n\t\t\t\"toolResponseMetadata\",\n\t\t\tcallback,\n\t\t\t(v) => v ?? null,\n\t\t);\n\t}\n\n\tgetWidgetState(): UnknownObject | null {\n\t\treturn this.getGlobal<UnknownObject | null>(\"widgetState\", null);\n\t}\n\n\tonWidgetStateChange(\n\t\tcallback: (state: UnknownObject | null) => void,\n\t): () => void {\n\t\treturn this.onGlobalChange(\"widgetState\", callback, (v) => v ?? null);\n\t}\n}\n"],"mappings":";wCAsBO,IAAMA,EAAN,KAAwD,CACtD,UACPC,EACAC,EACI,CACJ,OAAI,OAAO,OAAW,IAAoBA,EAClC,OAAO,SAASD,CAAG,GAAWC,CACvC,CAEQ,eAIPD,EACAE,EACAC,EACa,CACb,GAAI,OAAO,OAAW,IAAa,MAAO,IAAM,CAAC,EAEjD,IAAMC,EAAWC,GAA2B,CAC3C,IAAMC,EAAQD,EAAM,OAAO,QAAQL,CAAG,EAClCM,IAAU,QACbJ,EAASC,EAAYA,EAAUG,CAAK,EAAKA,CAAW,CAEtD,EAEA,cAAO,iBAAiBC,EAAwBH,EAAS,CAAE,QAAS,EAAK,CAAC,EACnE,IAAM,OAAO,oBAAoBG,EAAwBH,CAAO,CACxE,CAEA,MAAM,SAAyB,CAC9B,GAAI,OAAO,OAAW,KAAe,EAAE,WAAY,QAClD,MAAM,IAAI,MAAM,sDAAsD,CAExE,CAEA,eAAuD,CACtD,OAAO,KAAK,UAAoB,aAAc,IAAI,CACnD,CAEA,aAAaF,EAAoD,CAChE,OAAO,KAAK,eAAe,aAAcA,EAAWM,IAAO,CAC1D,kBAAmBA,GAAK,CAAC,CAC1B,EAAE,CACH,CAEA,MAAM,SACLC,EACAC,EAC0B,CAC1B,GAAI,OAAO,OAAW,KAAe,CAAC,OAAO,QAAQ,SACpD,MAAM,IAAI,MAAM,+BAA+B,EAGhD,MAAO,CAAE,QAAS,CAAC,CAAE,KAAM,OAAQ,MADlB,MAAM,OAAO,OAAO,SAASD,EAAMC,CAAI,GACN,MAAO,CAAC,CAAE,CAC7D,CAEA,aAAaC,EAAmB,CAC3B,OAAO,OAAW,KAAe,OAAO,QAAQ,cACnD,OAAO,OAAO,aAAa,CAAE,KAAMA,CAAI,CAAC,CAE1C,CAEA,aAAaC,EAAsB,CAC9B,OAAO,OAAW,KAAe,OAAO,QAAQ,qBACnD,OAAO,OAAO,oBAAoB,CAAE,OAAAA,CAAO,CAAC,CAE9C,CAEA,UAAkB,CACjB,OAAO,KAAK,UAAU,QAAS,OAAgB,CAChD,CAEA,cAAcV,EAA8C,CAC3D,OAAO,KAAK,eAAe,QAASA,CAAQ,CAC7C,CAEA,WAAoB,CACnB,OAAO,KAAK,UAAU,SAAU,IAAI,CACrC,CAEA,gBAA8B,CAC7B,OAAO,KAAK,UAAU,cAAe,QAAuB,CAC7D,CAEA,MAAM,mBAAmBW,EAAyC,CACjE,OAAI,OAAO,OAAW,KAAe,CAAC,OAAO,QAAQ,mBAC7C,UAEO,MAAM,OAAO,OAAO,mBAAmB,CAAE,KAAAA,CAAK,CAAC,GAChD,IACf,CAEA,oBAAoBX,EAAmD,CACtE,OAAO,KAAK,eAAe,cAAeA,CAAQ,CACnD,CAEA,aAA+B,CAC9B,OAAO,KAAK,UAAU,WAAY,IAAI,CACvC,CAEA,iBAAiBA,EAA2D,CAC3E,OAAO,KAAK,eAAe,WAAYA,EAAWM,GAAMA,GAAK,IAAI,CAClE,CAEA,cAA8B,CAC7B,OAAO,KAAK,UAAU,YAAa,IAAI,CACxC,CAEA,kBAAkBN,EAA0D,CAC3E,OAAO,KAAK,eAAe,YAAaA,EAAWM,GAAMA,GAAK,IAAI,CACnE,CAEA,yBAAgD,CAC/C,OAAO,KAAK,UAAU,uBAAwB,IAAI,CACnD,CAEA,6BACCN,EACa,CACb,OAAO,KAAK,eACX,uBACAA,EACCM,GAAMA,GAAK,IACb,CACD,CAEA,gBAAuC,CACtC,OAAO,KAAK,UAAgC,cAAe,IAAI,CAChE,CAEA,oBACCN,EACa,CACb,OAAO,KAAK,eAAe,cAAeA,EAAWM,GAAMA,GAAK,IAAI,CACrE,CACD","names":["OpenAIWidgetClient","key","fallback","callback","transform","handler","event","value","SET_GLOBALS_EVENT_TYPE","v","name","args","url","prompt","mode"]}
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a,b,c}from"./chunk-SCDEAZN4.js";export{a as detectPlatform,c as isMCPApps,b as isOpenAI};
3
- //# sourceMappingURL=platform-4QZXTYT5.js.map