@assistant-ui/react-ai-sdk 0.10.3 → 0.10.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/frontendTools.d.ts +11 -0
  2. package/dist/frontendTools.d.ts.map +1 -0
  3. package/dist/frontendTools.js +15 -0
  4. package/dist/frontendTools.js.map +1 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/rsc/VercelRSCAdapter.d.ts +1 -2
  10. package/dist/rsc/VercelRSCAdapter.d.ts.map +1 -1
  11. package/dist/rsc/VercelRSCAdapter.js +0 -1
  12. package/dist/rsc/index.d.ts +0 -1
  13. package/dist/rsc/index.d.ts.map +1 -1
  14. package/dist/rsc/index.js +0 -2
  15. package/dist/rsc/index.js.map +1 -1
  16. package/dist/ui/getVercelAIMessages.d.ts.map +1 -1
  17. package/dist/ui/getVercelAIMessages.js +2 -2
  18. package/dist/ui/getVercelAIMessages.js.map +1 -1
  19. package/dist/ui/use-assistant/useVercelUseAssistantRuntime.d.ts.map +1 -1
  20. package/dist/ui/use-assistant/useVercelUseAssistantRuntime.js +2 -0
  21. package/dist/ui/use-assistant/useVercelUseAssistantRuntime.js.map +1 -1
  22. package/dist/ui/use-chat/useVercelUseChatRuntime.d.ts.map +1 -1
  23. package/dist/ui/use-chat/useVercelUseChatRuntime.js +2 -0
  24. package/dist/ui/use-chat/useVercelUseChatRuntime.js.map +1 -1
  25. package/dist/ui/utils/convertMessage.d.ts.map +1 -1
  26. package/dist/ui/utils/convertMessage.js +3 -1
  27. package/dist/ui/utils/convertMessage.js.map +1 -1
  28. package/dist/ui/utils/useInputSync.d.ts.map +1 -1
  29. package/dist/ui/utils/useInputSync.js +2 -0
  30. package/dist/ui/utils/useInputSync.js.map +1 -1
  31. package/package.json +7 -6
  32. package/src/frontendTools.ts +15 -0
  33. package/src/index.ts +1 -0
  34. package/src/rsc/VercelRSCAdapter.tsx +1 -3
  35. package/src/rsc/index.ts +0 -1
  36. package/src/ui/getVercelAIMessages.tsx +2 -2
  37. package/src/ui/use-assistant/useVercelUseAssistantRuntime.tsx +2 -0
  38. package/src/ui/use-chat/useVercelUseChatRuntime.tsx +2 -0
  39. package/src/ui/utils/convertMessage.ts +9 -7
  40. package/src/ui/utils/useInputSync.tsx +2 -0
  41. package/dist/rsc/getVercelRSCMessage.d.ts +0 -7
  42. package/dist/rsc/getVercelRSCMessage.d.ts.map +0 -1
  43. package/dist/rsc/getVercelRSCMessage.js +0 -11
  44. package/dist/rsc/getVercelRSCMessage.js.map +0 -1
  45. package/src/rsc/getVercelRSCMessage.tsx +0 -12
@@ -0,0 +1,11 @@
1
+ import type { JSONSchema7 } from "json-schema";
2
+ export declare const frontendTools: (tools: Record<string, {
3
+ description?: string;
4
+ parameters: JSONSchema7;
5
+ }>) => {
6
+ [k: string]: {
7
+ parameters: import("ai").Schema<unknown>;
8
+ description?: string;
9
+ };
10
+ };
11
+ //# sourceMappingURL=frontendTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontendTools.d.ts","sourceRoot":"","sources":["../src/frontendTools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAAC;;;;;CAUvE,CAAC"}
@@ -0,0 +1,15 @@
1
+ // src/frontendTools.ts
2
+ import { jsonSchema } from "@ai-sdk/ui-utils";
3
+ var frontendTools = (tools) => Object.fromEntries(
4
+ Object.entries(tools).map(([name, tool]) => [
5
+ name,
6
+ {
7
+ ...tool.description ? { description: tool.description } : void 0,
8
+ parameters: jsonSchema(tool.parameters)
9
+ }
10
+ ])
11
+ );
12
+ export {
13
+ frontendTools
14
+ };
15
+ //# sourceMappingURL=frontendTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/frontendTools.ts"],"sourcesContent":["import { jsonSchema } from \"@ai-sdk/ui-utils\";\nimport type { JSONSchema7 } from \"json-schema\";\n\nexport const frontendTools = (\n tools: Record<string, { description?: string; parameters: JSONSchema7 }>,\n) =>\n Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: jsonSchema(tool.parameters),\n },\n ]),\n );\n"],"mappings":";AAAA,SAAS,kBAAkB;AAGpB,IAAM,gBAAgB,CAC3B,UAEA,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AAAA,IAC1C;AAAA,IACA;AAAA,MACE,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI;AAAA,MAC3D,YAAY,WAAW,KAAK,UAAU;AAAA,IACxC;AAAA,EACF,CAAC;AACH;","names":[]}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from "./rsc";
2
2
  export * from "./ui";
3
3
  export * from "./useChatRuntime";
4
4
  export { toLanguageModelMessages, toLanguageModelTools, fromLanguageModelMessages, fromLanguageModelTools, useDangerousInBrowserRuntime, } from "@assistant-ui/react-edge";
5
+ export { frontendTools } from "./frontendTools";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,MAAM,CAAC;AACrB,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,MAAM,CAAC;AACrB,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -9,9 +9,11 @@ import {
9
9
  fromLanguageModelTools,
10
10
  useDangerousInBrowserRuntime
11
11
  } from "@assistant-ui/react-edge";
12
+ import { frontendTools } from "./frontendTools.js";
12
13
  export {
13
14
  fromLanguageModelMessages,
14
15
  fromLanguageModelTools,
16
+ frontendTools,
15
17
  toLanguageModelMessages,
16
18
  toLanguageModelTools,
17
19
  useDangerousInBrowserRuntime
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./rsc\";\nexport * from \"./ui\";\nexport * from \"./useChatRuntime\";\n\nexport {\n toLanguageModelMessages,\n toLanguageModelTools,\n fromLanguageModelMessages,\n fromLanguageModelTools,\n useDangerousInBrowserRuntime,\n} from \"@assistant-ui/react-edge\";\n"],"mappings":";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AAEd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./rsc\";\nexport * from \"./ui\";\nexport * from \"./useChatRuntime\";\n\nexport {\n toLanguageModelMessages,\n toLanguageModelTools,\n fromLanguageModelMessages,\n fromLanguageModelTools,\n useDangerousInBrowserRuntime,\n} from \"@assistant-ui/react-edge\";\nexport { frontendTools } from \"./frontendTools\";\n"],"mappings":";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AAEd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,qBAAqB;","names":[]}
@@ -1,6 +1,5 @@
1
- import type { AppendMessage } from "@assistant-ui/react";
1
+ import type { AppendMessage, ExternalStoreAdapter } from "@assistant-ui/react";
2
2
  import type { VercelRSCMessage } from "./VercelRSCMessage";
3
- import { ExternalStoreAdapter } from "@assistant-ui/react";
4
3
  type RSCMessageConverter<T> = {
5
4
  convertMessage: (message: T) => VercelRSCMessage;
6
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VercelRSCAdapter.d.ts","sourceRoot":"","sources":["../../src/rsc/VercelRSCAdapter.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,KAAK,mBAAmB,CAAC,CAAC,IAAI;IAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,gBAAgB,CAAC;CAClD,CAAC;AAEF,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,CAAC,EAAE,CAAC;IAEd,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,gBAAgB,CAAC,GAAG,SAAS,CAAC;IAEhE,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,gBAAgB,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAC1E,CAAC,CAAC,SAAS,gBAAgB,GAAG,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"VercelRSCAdapter.d.ts","sourceRoot":"","sources":["../../src/rsc/VercelRSCAdapter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,KAAK,mBAAmB,CAAC,CAAC,IAAI;IAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,gBAAgB,CAAC;CAClD,CAAC;AAEF,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,CAAC,EAAE,CAAC;IAEd,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,gBAAgB,CAAC,GAAG,SAAS,CAAC;IAEhE,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,gBAAgB,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAC1E,CAAC,CAAC,SAAS,gBAAgB,GAAG,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,2 +1 @@
1
- "use client";
2
1
  //# sourceMappingURL=VercelRSCAdapter.js.map
@@ -1,5 +1,4 @@
1
1
  export { useVercelRSCRuntime } from "./useVercelRSCRuntime";
2
- export { getVercelRSCMessage } from "./getVercelRSCMessage";
3
2
  export type { VercelRSCAdapter } from "./VercelRSCAdapter";
4
3
  export type { VercelRSCMessage } from "./VercelRSCMessage";
5
4
  export { RSCDisplay } from "./RSCDisplay";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rsc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rsc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
package/dist/rsc/index.js CHANGED
@@ -1,10 +1,8 @@
1
1
  // src/rsc/index.ts
2
2
  import { useVercelRSCRuntime } from "./useVercelRSCRuntime.js";
3
- import { getVercelRSCMessage } from "./getVercelRSCMessage.js";
4
3
  import { RSCDisplay } from "./RSCDisplay.js";
5
4
  export {
6
5
  RSCDisplay,
7
- getVercelRSCMessage,
8
6
  useVercelRSCRuntime
9
7
  };
10
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rsc/index.ts"],"sourcesContent":["export { useVercelRSCRuntime } from \"./useVercelRSCRuntime\";\nexport { getVercelRSCMessage } from \"./getVercelRSCMessage\";\nexport type { VercelRSCAdapter } from \"./VercelRSCAdapter\";\nexport type { VercelRSCMessage } from \"./VercelRSCMessage\";\nexport { RSCDisplay } from \"./RSCDisplay\";\n"],"mappings":";AAAA,SAAS,2BAA2B;AACpC,SAAS,2BAA2B;AAGpC,SAAS,kBAAkB;","names":[]}
1
+ {"version":3,"sources":["../../src/rsc/index.ts"],"sourcesContent":["export { useVercelRSCRuntime } from \"./useVercelRSCRuntime\";\nexport type { VercelRSCAdapter } from \"./VercelRSCAdapter\";\nexport type { VercelRSCMessage } from \"./VercelRSCMessage\";\nexport { RSCDisplay } from \"./RSCDisplay\";\n"],"mappings":";AAAA,SAAS,2BAA2B;AAGpC,SAAS,kBAAkB;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"getVercelAIMessages.d.ts","sourceRoot":"","sources":["../../src/ui/getVercelAIMessages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,mBAAmB,GAAI,SAAS,aAAa,KACb,OAAO,EACnD,CAAC"}
1
+ {"version":3,"file":"getVercelAIMessages.d.ts","sourceRoot":"","sources":["../../src/ui/getVercelAIMessages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,mBAAmB,GAAI,SAAS,aAAa,KACZ,OAAO,EACpD,CAAC"}
@@ -1,9 +1,9 @@
1
1
  // src/ui/getVercelAIMessages.tsx
2
2
  import {
3
- getExternalStoreMessage
3
+ getExternalStoreMessages
4
4
  } from "@assistant-ui/react";
5
5
  var getVercelAIMessages = (message) => {
6
- return getExternalStoreMessage(message);
6
+ return getExternalStoreMessages(message);
7
7
  };
8
8
  export {
9
9
  getVercelAIMessages
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/getVercelAIMessages.tsx"],"sourcesContent":["import {\n getExternalStoreMessage,\n type ThreadMessage,\n} from \"@assistant-ui/react\";\nimport type { Message } from \"@ai-sdk/ui-utils\";\n\nexport const getVercelAIMessages = (message: ThreadMessage) => {\n return getExternalStoreMessage(message) as Message[];\n};\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAEK;AAGA,IAAM,sBAAsB,CAAC,YAA2B;AAC7D,SAAO,wBAAwB,OAAO;AACxC;","names":[]}
1
+ {"version":3,"sources":["../../src/ui/getVercelAIMessages.tsx"],"sourcesContent":["import {\n getExternalStoreMessages,\n type ThreadMessage,\n} from \"@assistant-ui/react\";\nimport type { Message } from \"@ai-sdk/ui-utils\";\n\nexport const getVercelAIMessages = (message: ThreadMessage) => {\n return getExternalStoreMessages(message) as Message[];\n};\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAEK;AAGA,IAAM,sBAAsB,CAAC,YAA2B;AAC7D,SAAO,yBAAyB,OAAO;AACzC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useVercelUseAssistantRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-assistant/useVercelUseAssistantRuntime.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EACL,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,GAClE,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,kBAAkB,UAAU,CAAC,OAAO,YAAY,CAAC,EACjD,UAAS,oBAAyB,mDAyCnC,CAAC"}
1
+ {"version":3,"file":"useVercelUseAssistantRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-assistant/useVercelUseAssistantRuntime.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EACL,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,GAClE,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,kBAAkB,UAAU,CAAC,OAAO,YAAY,CAAC,EACjD,UAAS,oBAAyB,mDAyCnC,CAAC"}
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  // src/ui/use-assistant/useVercelUseAssistantRuntime.tsx
2
4
  import { useExternalStoreRuntime } from "@assistant-ui/react";
3
5
  import { useInputSync } from "../utils/useInputSync.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/use-assistant/useVercelUseAssistantRuntime.tsx"],"sourcesContent":["import type { useAssistant } from \"@ai-sdk/react\";\nimport { useExternalStoreRuntime } from \"@assistant-ui/react\";\nimport { useInputSync } from \"../utils/useInputSync\";\nimport { toCreateMessage } from \"../utils/toCreateMessage\";\nimport { vercelAttachmentAdapter } from \"../utils/vercelAttachmentAdapter\";\nimport { ExternalStoreAdapter } from \"@assistant-ui/react\";\nimport { AISDKMessageConverter } from \"../utils/convertMessage\";\n\nexport type VercelUseChatAdapter = {\n adapters?:\n | Omit<NonNullable<ExternalStoreAdapter[\"adapters\"]>, \"attachments\">\n | undefined;\n};\n\nexport const useVercelUseAssistantRuntime = (\n assistantHelpers: ReturnType<typeof useAssistant>,\n adapter: VercelUseChatAdapter = {},\n) => {\n const messages = AISDKMessageConverter.useThreadMessages({\n messages: assistantHelpers.messages,\n isRunning: assistantHelpers.status === \"in_progress\",\n });\n\n const runtime = useExternalStoreRuntime({\n isRunning: assistantHelpers.status === \"in_progress\",\n messages,\n onCancel: async () => assistantHelpers.stop(),\n onNew: async (message) => {\n await assistantHelpers.append(await toCreateMessage(message));\n },\n adapters: {\n attachments: vercelAttachmentAdapter,\n ...adapter.adapters,\n threadList: new Proxy(adapter.adapters?.threadList ?? {}, {\n get(target, prop, receiver) {\n if (prop === \"onSwitchToNewThread\") {\n return () => {\n assistantHelpers.messages = [];\n assistantHelpers.input = \"\";\n assistantHelpers.setMessages([]);\n assistantHelpers.setInput(\"\");\n\n if (typeof target.onSwitchToNewThread === \"function\") {\n return target.onSwitchToNewThread.call(target);\n }\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n }),\n },\n });\n\n useInputSync(assistantHelpers, runtime);\n\n return runtime;\n};\n"],"mappings":";AACA,SAAS,+BAA+B;AACxC,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAChC,SAAS,+BAA+B;AAExC,SAAS,6BAA6B;AAQ/B,IAAM,+BAA+B,CAC1C,kBACA,UAAgC,CAAC,MAC9B;AACH,QAAM,WAAW,sBAAsB,kBAAkB;AAAA,IACvD,UAAU,iBAAiB;AAAA,IAC3B,WAAW,iBAAiB,WAAW;AAAA,EACzC,CAAC;AAED,QAAM,UAAU,wBAAwB;AAAA,IACtC,WAAW,iBAAiB,WAAW;AAAA,IACvC;AAAA,IACA,UAAU,YAAY,iBAAiB,KAAK;AAAA,IAC5C,OAAO,OAAO,YAAY;AACxB,YAAM,iBAAiB,OAAO,MAAM,gBAAgB,OAAO,CAAC;AAAA,IAC9D;AAAA,IACA,UAAU;AAAA,MACR,aAAa;AAAA,MACb,GAAG,QAAQ;AAAA,MACX,YAAY,IAAI,MAAM,QAAQ,UAAU,cAAc,CAAC,GAAG;AAAA,QACxD,IAAI,QAAQ,MAAM,UAAU;AAC1B,cAAI,SAAS,uBAAuB;AAClC,mBAAO,MAAM;AACX,+BAAiB,WAAW,CAAC;AAC7B,+BAAiB,QAAQ;AACzB,+BAAiB,YAAY,CAAC,CAAC;AAC/B,+BAAiB,SAAS,EAAE;AAE5B,kBAAI,OAAO,OAAO,wBAAwB,YAAY;AACpD,uBAAO,OAAO,oBAAoB,KAAK,MAAM;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,QAC3C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,eAAa,kBAAkB,OAAO;AAEtC,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/use-assistant/useVercelUseAssistantRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport type { useAssistant } from \"@ai-sdk/react\";\nimport { useExternalStoreRuntime } from \"@assistant-ui/react\";\nimport { useInputSync } from \"../utils/useInputSync\";\nimport { toCreateMessage } from \"../utils/toCreateMessage\";\nimport { vercelAttachmentAdapter } from \"../utils/vercelAttachmentAdapter\";\nimport { ExternalStoreAdapter } from \"@assistant-ui/react\";\nimport { AISDKMessageConverter } from \"../utils/convertMessage\";\n\nexport type VercelUseChatAdapter = {\n adapters?:\n | Omit<NonNullable<ExternalStoreAdapter[\"adapters\"]>, \"attachments\">\n | undefined;\n};\n\nexport const useVercelUseAssistantRuntime = (\n assistantHelpers: ReturnType<typeof useAssistant>,\n adapter: VercelUseChatAdapter = {},\n) => {\n const messages = AISDKMessageConverter.useThreadMessages({\n messages: assistantHelpers.messages,\n isRunning: assistantHelpers.status === \"in_progress\",\n });\n\n const runtime = useExternalStoreRuntime({\n isRunning: assistantHelpers.status === \"in_progress\",\n messages,\n onCancel: async () => assistantHelpers.stop(),\n onNew: async (message) => {\n await assistantHelpers.append(await toCreateMessage(message));\n },\n adapters: {\n attachments: vercelAttachmentAdapter,\n ...adapter.adapters,\n threadList: new Proxy(adapter.adapters?.threadList ?? {}, {\n get(target, prop, receiver) {\n if (prop === \"onSwitchToNewThread\") {\n return () => {\n assistantHelpers.messages = [];\n assistantHelpers.input = \"\";\n assistantHelpers.setMessages([]);\n assistantHelpers.setInput(\"\");\n\n if (typeof target.onSwitchToNewThread === \"function\") {\n return target.onSwitchToNewThread.call(target);\n }\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n }),\n },\n });\n\n useInputSync(assistantHelpers, runtime);\n\n return runtime;\n};\n"],"mappings":";;;AAGA,SAAS,+BAA+B;AACxC,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAChC,SAAS,+BAA+B;AAExC,SAAS,6BAA6B;AAQ/B,IAAM,+BAA+B,CAC1C,kBACA,UAAgC,CAAC,MAC9B;AACH,QAAM,WAAW,sBAAsB,kBAAkB;AAAA,IACvD,UAAU,iBAAiB;AAAA,IAC3B,WAAW,iBAAiB,WAAW;AAAA,EACzC,CAAC;AAED,QAAM,UAAU,wBAAwB;AAAA,IACtC,WAAW,iBAAiB,WAAW;AAAA,IACvC;AAAA,IACA,UAAU,YAAY,iBAAiB,KAAK;AAAA,IAC5C,OAAO,OAAO,YAAY;AACxB,YAAM,iBAAiB,OAAO,MAAM,gBAAgB,OAAO,CAAC;AAAA,IAC9D;AAAA,IACA,UAAU;AAAA,MACR,aAAa;AAAA,MACb,GAAG,QAAQ;AAAA,MACX,YAAY,IAAI,MAAM,QAAQ,UAAU,cAAc,CAAC,GAAG;AAAA,QACxD,IAAI,QAAQ,MAAM,UAAU;AAC1B,cAAI,SAAS,uBAAuB;AAClC,mBAAO,MAAM;AACX,+BAAiB,WAAW,CAAC;AAC7B,+BAAiB,QAAQ;AACzB,+BAAiB,YAAY,CAAC,CAAC;AAC/B,+BAAiB,SAAS,EAAE;AAE5B,kBAAI,OAAO,OAAO,wBAAwB,YAAY;AACpD,uBAAO,OAAO,oBAAoB,KAAK,MAAM;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,QAC3C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,eAAa,kBAAkB,OAAO;AAEtC,SAAO;AACT;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useVercelUseChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useVercelUseChatRuntime.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAO7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAK3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EACL,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,GAClE,SAAS,CAAC;IACd,qBAAqB,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,EACvC,UAAS,oBAAyB,mDAqEnC,CAAC"}
1
+ {"version":3,"file":"useVercelUseChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useVercelUseChatRuntime.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAO7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAK3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,EACL,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,GAClE,SAAS,CAAC;IACd,qBAAqB,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,EACvC,UAAS,oBAAyB,mDAqEnC,CAAC"}
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  // src/ui/use-chat/useVercelUseChatRuntime.tsx
2
4
  import { useExternalStoreRuntime } from "@assistant-ui/react";
3
5
  import { useInputSync } from "../utils/useInputSync.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/use-chat/useVercelUseChatRuntime.tsx"],"sourcesContent":["import type { useChat } from \"@ai-sdk/react\";\nimport { useExternalStoreRuntime } from \"@assistant-ui/react\";\nimport { useInputSync } from \"../utils/useInputSync\";\nimport { sliceMessagesUntil } from \"../utils/sliceMessagesUntil\";\nimport { toCreateMessage } from \"../utils/toCreateMessage\";\nimport { vercelAttachmentAdapter } from \"../utils/vercelAttachmentAdapter\";\nimport { getVercelAIMessages } from \"../getVercelAIMessages\";\nimport { ExternalStoreAdapter } from \"@assistant-ui/react\";\nimport { useState } from \"react\";\nimport { generateId } from \"@ai-sdk/ui-utils\";\nimport { AISDKMessageConverter } from \"../utils/convertMessage\";\n\nexport type VercelUseChatAdapter = {\n adapters?:\n | Omit<NonNullable<ExternalStoreAdapter[\"adapters\"]>, \"attachments\">\n | undefined;\n unstable_joinStrategy?: \"concat-content\" | \"none\";\n};\n\nexport const useVercelUseChatRuntime = (\n chatHelpers: ReturnType<typeof useChat>,\n adapter: VercelUseChatAdapter = {},\n) => {\n const messages = AISDKMessageConverter.useThreadMessages({\n isRunning:\n chatHelpers.status === \"submitted\" || chatHelpers.status == \"streaming\",\n messages: chatHelpers.messages,\n joinStrategy: adapter.unstable_joinStrategy,\n });\n\n const [threadId, setThreadId] = useState<string>(generateId());\n\n const runtime = useExternalStoreRuntime({\n isRunning: chatHelpers.isLoading,\n messages,\n setMessages: (messages) =>\n chatHelpers.setMessages(messages.map(getVercelAIMessages).flat()),\n onCancel: async () => chatHelpers.stop(),\n onNew: async (message) => {\n await chatHelpers.append(await toCreateMessage(message));\n },\n onEdit: async (message) => {\n const newMessages = sliceMessagesUntil(\n chatHelpers.messages,\n message.parentId,\n );\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.append(await toCreateMessage(message));\n },\n onReload: async (parentId: string | null) => {\n const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.reload();\n },\n onAddToolResult: ({ toolCallId, result }) => {\n chatHelpers.addToolResult({ toolCallId, result });\n },\n adapters: {\n attachments: vercelAttachmentAdapter,\n ...adapter.adapters,\n threadList: new Proxy(adapter.adapters?.threadList ?? {}, {\n get(target, prop, receiver) {\n if (prop === \"threadId\") {\n return target.threadId ?? threadId;\n }\n if (prop === \"onSwitchToNewThread\") {\n return () => {\n chatHelpers.messages = [];\n chatHelpers.input = \"\";\n chatHelpers.setMessages([]);\n chatHelpers.setInput(\"\");\n setThreadId(generateId());\n\n if (typeof target.onSwitchToNewThread === \"function\") {\n return target.onSwitchToNewThread.call(target);\n }\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n }),\n },\n });\n\n useInputSync(chatHelpers, runtime);\n\n return runtime;\n};\n"],"mappings":";AACA,SAAS,+BAA+B;AACxC,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAChC,SAAS,+BAA+B;AACxC,SAAS,2BAA2B;AAEpC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,6BAA6B;AAS/B,IAAM,0BAA0B,CACrC,aACA,UAAgC,CAAC,MAC9B;AACH,QAAM,WAAW,sBAAsB,kBAAkB;AAAA,IACvD,WACE,YAAY,WAAW,eAAe,YAAY,UAAU;AAAA,IAC9D,UAAU,YAAY;AAAA,IACtB,cAAc,QAAQ;AAAA,EACxB,CAAC;AAED,QAAM,CAAC,UAAU,WAAW,IAAI,SAAiB,WAAW,CAAC;AAE7D,QAAM,UAAU,wBAAwB;AAAA,IACtC,WAAW,YAAY;AAAA,IACvB;AAAA,IACA,aAAa,CAACA,cACZ,YAAY,YAAYA,UAAS,IAAI,mBAAmB,EAAE,KAAK,CAAC;AAAA,IAClE,UAAU,YAAY,YAAY,KAAK;AAAA,IACvC,OAAO,OAAO,YAAY;AACxB,YAAM,YAAY,OAAO,MAAM,gBAAgB,OAAO,CAAC;AAAA,IACzD;AAAA,IACA,QAAQ,OAAO,YAAY;AACzB,YAAM,cAAc;AAAA,QAClB,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AACA,kBAAY,YAAY,WAAW;AAEnC,YAAM,YAAY,OAAO,MAAM,gBAAgB,OAAO,CAAC;AAAA,IACzD;AAAA,IACA,UAAU,OAAO,aAA4B;AAC3C,YAAM,cAAc,mBAAmB,YAAY,UAAU,QAAQ;AACrE,kBAAY,YAAY,WAAW;AAEnC,YAAM,YAAY,OAAO;AAAA,IAC3B;AAAA,IACA,iBAAiB,CAAC,EAAE,YAAY,OAAO,MAAM;AAC3C,kBAAY,cAAc,EAAE,YAAY,OAAO,CAAC;AAAA,IAClD;AAAA,IACA,UAAU;AAAA,MACR,aAAa;AAAA,MACb,GAAG,QAAQ;AAAA,MACX,YAAY,IAAI,MAAM,QAAQ,UAAU,cAAc,CAAC,GAAG;AAAA,QACxD,IAAI,QAAQ,MAAM,UAAU;AAC1B,cAAI,SAAS,YAAY;AACvB,mBAAO,OAAO,YAAY;AAAA,UAC5B;AACA,cAAI,SAAS,uBAAuB;AAClC,mBAAO,MAAM;AACX,0BAAY,WAAW,CAAC;AACxB,0BAAY,QAAQ;AACpB,0BAAY,YAAY,CAAC,CAAC;AAC1B,0BAAY,SAAS,EAAE;AACvB,0BAAY,WAAW,CAAC;AAExB,kBAAI,OAAO,OAAO,wBAAwB,YAAY;AACpD,uBAAO,OAAO,oBAAoB,KAAK,MAAM;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,QAC3C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,eAAa,aAAa,OAAO;AAEjC,SAAO;AACT;","names":["messages"]}
1
+ {"version":3,"sources":["../../../src/ui/use-chat/useVercelUseChatRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport type { useChat } from \"@ai-sdk/react\";\nimport { useExternalStoreRuntime } from \"@assistant-ui/react\";\nimport { useInputSync } from \"../utils/useInputSync\";\nimport { sliceMessagesUntil } from \"../utils/sliceMessagesUntil\";\nimport { toCreateMessage } from \"../utils/toCreateMessage\";\nimport { vercelAttachmentAdapter } from \"../utils/vercelAttachmentAdapter\";\nimport { getVercelAIMessages } from \"../getVercelAIMessages\";\nimport { ExternalStoreAdapter } from \"@assistant-ui/react\";\nimport { useState } from \"react\";\nimport { generateId } from \"@ai-sdk/ui-utils\";\nimport { AISDKMessageConverter } from \"../utils/convertMessage\";\n\nexport type VercelUseChatAdapter = {\n adapters?:\n | Omit<NonNullable<ExternalStoreAdapter[\"adapters\"]>, \"attachments\">\n | undefined;\n unstable_joinStrategy?: \"concat-content\" | \"none\";\n};\n\nexport const useVercelUseChatRuntime = (\n chatHelpers: ReturnType<typeof useChat>,\n adapter: VercelUseChatAdapter = {},\n) => {\n const messages = AISDKMessageConverter.useThreadMessages({\n isRunning:\n chatHelpers.status === \"submitted\" || chatHelpers.status == \"streaming\",\n messages: chatHelpers.messages,\n joinStrategy: adapter.unstable_joinStrategy,\n });\n\n const [threadId, setThreadId] = useState<string>(generateId());\n\n const runtime = useExternalStoreRuntime({\n isRunning: chatHelpers.isLoading,\n messages,\n setMessages: (messages) =>\n chatHelpers.setMessages(messages.map(getVercelAIMessages).flat()),\n onCancel: async () => chatHelpers.stop(),\n onNew: async (message) => {\n await chatHelpers.append(await toCreateMessage(message));\n },\n onEdit: async (message) => {\n const newMessages = sliceMessagesUntil(\n chatHelpers.messages,\n message.parentId,\n );\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.append(await toCreateMessage(message));\n },\n onReload: async (parentId: string | null) => {\n const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.reload();\n },\n onAddToolResult: ({ toolCallId, result }) => {\n chatHelpers.addToolResult({ toolCallId, result });\n },\n adapters: {\n attachments: vercelAttachmentAdapter,\n ...adapter.adapters,\n threadList: new Proxy(adapter.adapters?.threadList ?? {}, {\n get(target, prop, receiver) {\n if (prop === \"threadId\") {\n return target.threadId ?? threadId;\n }\n if (prop === \"onSwitchToNewThread\") {\n return () => {\n chatHelpers.messages = [];\n chatHelpers.input = \"\";\n chatHelpers.setMessages([]);\n chatHelpers.setInput(\"\");\n setThreadId(generateId());\n\n if (typeof target.onSwitchToNewThread === \"function\") {\n return target.onSwitchToNewThread.call(target);\n }\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n }),\n },\n });\n\n useInputSync(chatHelpers, runtime);\n\n return runtime;\n};\n"],"mappings":";;;AAGA,SAAS,+BAA+B;AACxC,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAChC,SAAS,+BAA+B;AACxC,SAAS,2BAA2B;AAEpC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,6BAA6B;AAS/B,IAAM,0BAA0B,CACrC,aACA,UAAgC,CAAC,MAC9B;AACH,QAAM,WAAW,sBAAsB,kBAAkB;AAAA,IACvD,WACE,YAAY,WAAW,eAAe,YAAY,UAAU;AAAA,IAC9D,UAAU,YAAY;AAAA,IACtB,cAAc,QAAQ;AAAA,EACxB,CAAC;AAED,QAAM,CAAC,UAAU,WAAW,IAAI,SAAiB,WAAW,CAAC;AAE7D,QAAM,UAAU,wBAAwB;AAAA,IACtC,WAAW,YAAY;AAAA,IACvB;AAAA,IACA,aAAa,CAACA,cACZ,YAAY,YAAYA,UAAS,IAAI,mBAAmB,EAAE,KAAK,CAAC;AAAA,IAClE,UAAU,YAAY,YAAY,KAAK;AAAA,IACvC,OAAO,OAAO,YAAY;AACxB,YAAM,YAAY,OAAO,MAAM,gBAAgB,OAAO,CAAC;AAAA,IACzD;AAAA,IACA,QAAQ,OAAO,YAAY;AACzB,YAAM,cAAc;AAAA,QAClB,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AACA,kBAAY,YAAY,WAAW;AAEnC,YAAM,YAAY,OAAO,MAAM,gBAAgB,OAAO,CAAC;AAAA,IACzD;AAAA,IACA,UAAU,OAAO,aAA4B;AAC3C,YAAM,cAAc,mBAAmB,YAAY,UAAU,QAAQ;AACrE,kBAAY,YAAY,WAAW;AAEnC,YAAM,YAAY,OAAO;AAAA,IAC3B;AAAA,IACA,iBAAiB,CAAC,EAAE,YAAY,OAAO,MAAM;AAC3C,kBAAY,cAAc,EAAE,YAAY,OAAO,CAAC;AAAA,IAClD;AAAA,IACA,UAAU;AAAA,MACR,aAAa;AAAA,MACb,GAAG,QAAQ;AAAA,MACX,YAAY,IAAI,MAAM,QAAQ,UAAU,cAAc,CAAC,GAAG;AAAA,QACxD,IAAI,QAAQ,MAAM,UAAU;AAC1B,cAAI,SAAS,YAAY;AACvB,mBAAO,OAAO,YAAY;AAAA,UAC5B;AACA,cAAI,SAAS,uBAAuB;AAClC,mBAAO,MAAM;AACX,0BAAY,WAAW,CAAC;AACxB,0BAAY,QAAQ;AACpB,0BAAY,YAAY,CAAC,CAAC;AAC1B,0BAAY,SAAS,EAAE;AACvB,0BAAY,WAAW,CAAC;AAExB,kBAAI,OAAO,OAAO,wBAAwB,YAAY;AACpD,uBAAO,OAAO,oBAAoB,KAAK,MAAM;AAAA,cAC/C;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAAA,QAC3C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,eAAa,aAAa,OAAO;AAEjC,SAAO;AACT;","names":["messages"]}
@@ -1 +1 @@
1
- {"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAS3C,eAAO,MAAM,qBAAqB;;;;;;;0HAI1B,sDACI;yHAGF,sDAAqB;;;CA4I9B,CAAC"}
1
+ {"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAW3C,eAAO,MAAM,qBAAqB;;;;;;;0HAUS,sDACrC;yHAGU,sDAAa;;;CAsI5B,CAAC"}
@@ -1,5 +1,7 @@
1
1
  // src/ui/utils/convertMessage.ts
2
- import { unstable_createMessageConverter } from "@assistant-ui/react";
2
+ import {
3
+ unstable_createMessageConverter
4
+ } from "@assistant-ui/react";
3
5
  var AISDKMessageConverter = unstable_createMessageConverter(
4
6
  (message) => {
5
7
  switch (message.role) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/utils/convertMessage.ts"],"sourcesContent":["import { Message } from \"@ai-sdk/ui-utils\";\nimport { unstable_createMessageConverter } from \"@assistant-ui/react\";\nimport { SourceContentPart } from \"@assistant-ui/react\";\nimport { FileContentPart } from \"@assistant-ui/react\";\nimport { ReasoningContentPart } from \"@assistant-ui/react\";\nimport { ToolCallContentPart } from \"@assistant-ui/react\";\nimport { TextContentPart } from \"@assistant-ui/react\";\nimport { CompleteAttachment } from \"@assistant-ui/react\";\n\nexport const AISDKMessageConverter = unstable_createMessageConverter(\n (message: Message) => {\n switch (message.role) {\n case \"user\":\n return {\n role: \"user\",\n id: message.id,\n createdAt: message.createdAt,\n content: message.content,\n\n attachments: message.experimental_attachments?.map(\n (attachment, idx) =>\n ({\n id: idx.toString(),\n type: \"file\",\n name: attachment.name ?? attachment.url,\n content: [],\n contentType: attachment.contentType ?? \"unknown/unknown\",\n status: { type: \"complete\" },\n }) satisfies CompleteAttachment,\n ),\n };\n\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n createdAt: message.createdAt,\n content: message.content,\n };\n\n case \"assistant\":\n return {\n role: \"assistant\",\n id: message.id,\n createdAt: message.createdAt,\n content:\n message.parts\n ?.filter((p) => p.type !== \"step-start\")\n .map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return {\n type: \"text\",\n text: part.text,\n } satisfies TextContentPart;\n case \"tool-invocation\":\n return {\n type: \"tool-call\",\n toolName: part.toolInvocation.toolName,\n toolCallId: part.toolInvocation.toolCallId,\n argsText: JSON.stringify(part.toolInvocation.args),\n args: part.toolInvocation.args,\n result:\n part.toolInvocation.state === \"result\" &&\n part.toolInvocation.result,\n } satisfies ToolCallContentPart;\n case \"reasoning\":\n return {\n type: \"reasoning\",\n text: part.reasoning,\n } satisfies ReasoningContentPart;\n\n case \"source\":\n return {\n type: \"source\",\n ...part.source,\n } satisfies SourceContentPart;\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n } satisfies FileContentPart;\n\n default: {\n const _unsupported: never = type;\n throw new Error(\n `You have a message with an unsupported part type. The type ${_unsupported} is not supported.`,\n );\n }\n }\n }) ??\n (message.content\n ? [\n {\n type: \"text\",\n text: message.content,\n } satisfies TextContentPart,\n ]\n : []),\n metadata: {\n unstable_annotations: message.annotations,\n unstable_data: Array.isArray(message.data)\n ? message.data\n : message.data\n ? [message.data]\n : undefined,\n },\n };\n\n case \"data\": {\n type MaybeSupportedDataMessage =\n | { type?: \"unsafe_other\" }\n | ToolCallContentPart\n | {\n type: \"tool-result\";\n toolCallId: string;\n result: any;\n };\n\n if (\n !message.data ||\n !(typeof message.data === \"object\") ||\n Array.isArray(message.data)\n )\n return [];\n\n const data = message.data as MaybeSupportedDataMessage;\n\n if (data.type === \"tool-call\") {\n return {\n role: \"assistant\",\n id: message.id,\n createdAt: message.createdAt,\n content: [data],\n };\n } else if (data.type === \"tool-result\") {\n return {\n role: \"tool\",\n id: message.id,\n toolCallId: data.toolCallId,\n result: data.result,\n };\n }\n return [];\n }\n\n default:\n // TODO handle tool and function messages\n const _unsupported: \"function\" | \"tool\" = message.role;\n throw new Error(\n `You have a message with an unsupported role. The role ${_unsupported} is not supported.`,\n );\n }\n },\n);\n"],"mappings":";AACA,SAAS,uCAAuC;AAQzC,IAAM,wBAAwB;AAAA,EACnC,CAAC,YAAqB;AACpB,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,WAAW,QAAQ;AAAA,UACnB,SAAS,QAAQ;AAAA,UAEjB,aAAa,QAAQ,0BAA0B;AAAA,YAC7C,CAAC,YAAY,SACV;AAAA,cACC,IAAI,IAAI,SAAS;AAAA,cACjB,MAAM;AAAA,cACN,MAAM,WAAW,QAAQ,WAAW;AAAA,cACpC,SAAS,CAAC;AAAA,cACV,aAAa,WAAW,eAAe;AAAA,cACvC,QAAQ,EAAE,MAAM,WAAW;AAAA,YAC7B;AAAA,UACJ;AAAA,QACF;AAAA,MAEF,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,WAAW,QAAQ;AAAA,UACnB,SAAS,QAAQ;AAAA,QACnB;AAAA,MAEF,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,WAAW,QAAQ;AAAA,UACnB,SACE,QAAQ,OACJ,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY,EACtC,IAAI,CAAC,SAAS;AACb,kBAAM,OAAO,KAAK;AAClB,oBAAQ,MAAM;AAAA,cACZ,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,gBACb;AAAA,cACF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,UAAU,KAAK,eAAe;AAAA,kBAC9B,YAAY,KAAK,eAAe;AAAA,kBAChC,UAAU,KAAK,UAAU,KAAK,eAAe,IAAI;AAAA,kBACjD,MAAM,KAAK,eAAe;AAAA,kBAC1B,QACE,KAAK,eAAe,UAAU,YAC9B,KAAK,eAAe;AAAA,gBACxB;AAAA,cACF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,gBACb;AAAA,cAEF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,GAAG,KAAK;AAAA,gBACV;AAAA,cAEF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,kBACX,UAAU,KAAK;AAAA,gBACjB;AAAA,cAEF,SAAS;AACP,sBAAMA,gBAAsB;AAC5B,sBAAM,IAAI;AAAA,kBACR,8DAA8DA,aAAY;AAAA,gBAC5E;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC,MACF,QAAQ,UACL;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,QAAQ;AAAA,YAChB;AAAA,UACF,IACA,CAAC;AAAA,UACP,UAAU;AAAA,YACR,sBAAsB,QAAQ;AAAA,YAC9B,eAAe,MAAM,QAAQ,QAAQ,IAAI,IACrC,QAAQ,OACR,QAAQ,OACN,CAAC,QAAQ,IAAI,IACb;AAAA,UACR;AAAA,QACF;AAAA,MAEF,KAAK,QAAQ;AAUX,YACE,CAAC,QAAQ,QACT,EAAE,OAAO,QAAQ,SAAS,aAC1B,MAAM,QAAQ,QAAQ,IAAI;AAE1B,iBAAO,CAAC;AAEV,cAAM,OAAO,QAAQ;AAErB,YAAI,KAAK,SAAS,aAAa;AAC7B,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,IAAI,QAAQ;AAAA,YACZ,WAAW,QAAQ;AAAA,YACnB,SAAS,CAAC,IAAI;AAAA,UAChB;AAAA,QACF,WAAW,KAAK,SAAS,eAAe;AACtC,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,IAAI,QAAQ;AAAA,YACZ,YAAY,KAAK;AAAA,YACjB,QAAQ,KAAK;AAAA,UACf;AAAA,QACF;AACA,eAAO,CAAC;AAAA,MACV;AAAA,MAEA;AAEE,cAAM,eAAoC,QAAQ;AAClD,cAAM,IAAI;AAAA,UACR,yDAAyD,YAAY;AAAA,QACvE;AAAA,IACJ;AAAA,EACF;AACF;","names":["_unsupported"]}
1
+ {"version":3,"sources":["../../../src/ui/utils/convertMessage.ts"],"sourcesContent":["import { Message } from \"@ai-sdk/ui-utils\";\nimport {\n unstable_createMessageConverter,\n type ReasoningContentPart,\n type ToolCallContentPart,\n type TextContentPart,\n type CompleteAttachment,\n type SourceContentPart,\n type FileContentPart,\n} from \"@assistant-ui/react\";\n\nexport const AISDKMessageConverter = unstable_createMessageConverter(\n (message: Message) => {\n switch (message.role) {\n case \"user\":\n return {\n role: \"user\",\n id: message.id,\n createdAt: message.createdAt,\n content: message.content,\n\n attachments: message.experimental_attachments?.map(\n (attachment, idx) =>\n ({\n id: idx.toString(),\n type: \"file\",\n name: attachment.name ?? attachment.url,\n content: [],\n contentType: attachment.contentType ?? \"unknown/unknown\",\n status: { type: \"complete\" },\n }) satisfies CompleteAttachment,\n ),\n };\n\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n createdAt: message.createdAt,\n content: message.content,\n };\n\n case \"assistant\":\n return {\n role: \"assistant\",\n id: message.id,\n createdAt: message.createdAt,\n content:\n message.parts\n ?.filter((p) => p.type !== \"step-start\")\n .map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return {\n type: \"text\",\n text: part.text,\n } satisfies TextContentPart;\n case \"tool-invocation\":\n return {\n type: \"tool-call\",\n toolName: part.toolInvocation.toolName,\n toolCallId: part.toolInvocation.toolCallId,\n argsText: JSON.stringify(part.toolInvocation.args),\n args: part.toolInvocation.args,\n result:\n part.toolInvocation.state === \"result\" &&\n part.toolInvocation.result,\n } satisfies ToolCallContentPart;\n case \"reasoning\":\n return {\n type: \"reasoning\",\n text: part.reasoning,\n } satisfies ReasoningContentPart;\n\n case \"source\":\n return {\n type: \"source\",\n ...part.source,\n } satisfies SourceContentPart;\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n } satisfies FileContentPart;\n\n default: {\n const _unsupported: never = type;\n throw new Error(\n `You have a message with an unsupported part type. The type ${_unsupported} is not supported.`,\n );\n }\n }\n }) ??\n (message.content\n ? [\n {\n type: \"text\",\n text: message.content,\n } satisfies TextContentPart,\n ]\n : []),\n metadata: {\n unstable_annotations: message.annotations,\n unstable_data: Array.isArray(message.data)\n ? message.data\n : message.data\n ? [message.data]\n : undefined,\n },\n };\n\n case \"data\": {\n type MaybeSupportedDataMessage =\n | { type?: \"unsafe_other\" }\n | ToolCallContentPart\n | {\n type: \"tool-result\";\n toolCallId: string;\n result: any;\n };\n\n if (\n !message.data ||\n !(typeof message.data === \"object\") ||\n Array.isArray(message.data)\n )\n return [];\n\n const data = message.data as MaybeSupportedDataMessage;\n\n if (data.type === \"tool-call\") {\n return {\n role: \"assistant\",\n id: message.id,\n createdAt: message.createdAt,\n content: [data],\n };\n } else if (data.type === \"tool-result\") {\n return {\n role: \"tool\",\n id: message.id,\n toolCallId: data.toolCallId,\n result: data.result,\n };\n }\n return [];\n }\n\n default:\n // TODO handle tool and function messages\n const _unsupported: \"function\" | \"tool\" = message.role;\n throw new Error(\n `You have a message with an unsupported role. The role ${_unsupported} is not supported.`,\n );\n }\n },\n);\n"],"mappings":";AACA;AAAA,EACE;AAAA,OAOK;AAEA,IAAM,wBAAwB;AAAA,EACnC,CAAC,YAAqB;AACpB,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,WAAW,QAAQ;AAAA,UACnB,SAAS,QAAQ;AAAA,UAEjB,aAAa,QAAQ,0BAA0B;AAAA,YAC7C,CAAC,YAAY,SACV;AAAA,cACC,IAAI,IAAI,SAAS;AAAA,cACjB,MAAM;AAAA,cACN,MAAM,WAAW,QAAQ,WAAW;AAAA,cACpC,SAAS,CAAC;AAAA,cACV,aAAa,WAAW,eAAe;AAAA,cACvC,QAAQ,EAAE,MAAM,WAAW;AAAA,YAC7B;AAAA,UACJ;AAAA,QACF;AAAA,MAEF,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,WAAW,QAAQ;AAAA,UACnB,SAAS,QAAQ;AAAA,QACnB;AAAA,MAEF,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,WAAW,QAAQ;AAAA,UACnB,SACE,QAAQ,OACJ,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY,EACtC,IAAI,CAAC,SAAS;AACb,kBAAM,OAAO,KAAK;AAClB,oBAAQ,MAAM;AAAA,cACZ,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,gBACb;AAAA,cACF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,UAAU,KAAK,eAAe;AAAA,kBAC9B,YAAY,KAAK,eAAe;AAAA,kBAChC,UAAU,KAAK,UAAU,KAAK,eAAe,IAAI;AAAA,kBACjD,MAAM,KAAK,eAAe;AAAA,kBAC1B,QACE,KAAK,eAAe,UAAU,YAC9B,KAAK,eAAe;AAAA,gBACxB;AAAA,cACF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,gBACb;AAAA,cAEF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,GAAG,KAAK;AAAA,gBACV;AAAA,cAEF,KAAK;AACH,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,kBACX,UAAU,KAAK;AAAA,gBACjB;AAAA,cAEF,SAAS;AACP,sBAAMA,gBAAsB;AAC5B,sBAAM,IAAI;AAAA,kBACR,8DAA8DA,aAAY;AAAA,gBAC5E;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC,MACF,QAAQ,UACL;AAAA,YACE;AAAA,cACE,MAAM;AAAA,cACN,MAAM,QAAQ;AAAA,YAChB;AAAA,UACF,IACA,CAAC;AAAA,UACP,UAAU;AAAA,YACR,sBAAsB,QAAQ;AAAA,YAC9B,eAAe,MAAM,QAAQ,QAAQ,IAAI,IACrC,QAAQ,OACR,QAAQ,OACN,CAAC,QAAQ,IAAI,IACb;AAAA,UACR;AAAA,QACF;AAAA,MAEF,KAAK,QAAQ;AAUX,YACE,CAAC,QAAQ,QACT,EAAE,OAAO,QAAQ,SAAS,aAC1B,MAAM,QAAQ,QAAQ,IAAI;AAE1B,iBAAO,CAAC;AAEV,cAAM,OAAO,QAAQ;AAErB,YAAI,KAAK,SAAS,aAAa;AAC7B,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,IAAI,QAAQ;AAAA,YACZ,WAAW,QAAQ;AAAA,YACnB,SAAS,CAAC,IAAI;AAAA,UAChB;AAAA,QACF,WAAW,KAAK,SAAS,eAAe;AACtC,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,IAAI,QAAQ;AAAA,YACZ,YAAY,KAAK;AAAA,YACjB,QAAQ,KAAK;AAAA,UACf;AAAA,QACF;AACA,eAAO,CAAC;AAAA,MACV;AAAA,MAEA;AAEE,cAAM,eAAoC,QAAQ;AAClD,cAAM,IAAI;AAAA,UACR,yDAAyD,YAAY;AAAA,QACvE;AAAA,IACJ;AAAA,EACF;AACF;","names":["_unsupported"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useInputSync.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/useInputSync.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,KAAK,aAAa,GACd,UAAU,CAAC,OAAO,OAAO,CAAC,GAC1B,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAEpC,eAAO,MAAM,YAAY,GACvB,qBAAqB,aAAa,EAClC,SAAS,gBAAgB,SAa1B,CAAC"}
1
+ {"version":3,"file":"useInputSync.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/useInputSync.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,KAAK,aAAa,GACd,UAAU,CAAC,OAAO,OAAO,CAAC,GAC1B,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAEpC,eAAO,MAAM,YAAY,GACvB,qBAAqB,aAAa,EAClC,SAAS,gBAAgB,SAa1B,CAAC"}
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  // src/ui/utils/useInputSync.tsx
2
4
  import { useEffect } from "react";
3
5
  var useInputSync = ({ setInput, input }, runtime) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/utils/useInputSync.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useAssistant, useChat } from \"@ai-sdk/react\";\nimport { AssistantRuntime } from \"@assistant-ui/react\";\n\ntype VercelHelpers =\n | ReturnType<typeof useChat>\n | ReturnType<typeof useAssistant>;\n\nexport const useInputSync = (\n { setInput, input }: VercelHelpers,\n runtime: AssistantRuntime,\n) => {\n // sync input from vercel to assistant-ui\n useEffect(() => {\n runtime.thread.composer.setText(input);\n }, [runtime, input]);\n\n // sync input from assistant-ui to vercel\n useEffect(() => {\n return runtime.thread.composer.subscribe(() => {\n setInput(runtime.thread.composer.getState().text);\n });\n }, [runtime, setInput]);\n};\n"],"mappings":";AAAA,SAAS,iBAAiB;AAQnB,IAAM,eAAe,CAC1B,EAAE,UAAU,MAAM,GAClB,YACG;AAEH,YAAU,MAAM;AACd,YAAQ,OAAO,SAAS,QAAQ,KAAK;AAAA,EACvC,GAAG,CAAC,SAAS,KAAK,CAAC;AAGnB,YAAU,MAAM;AACd,WAAO,QAAQ,OAAO,SAAS,UAAU,MAAM;AAC7C,eAAS,QAAQ,OAAO,SAAS,SAAS,EAAE,IAAI;AAAA,IAClD,CAAC;AAAA,EACH,GAAG,CAAC,SAAS,QAAQ,CAAC;AACxB;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/utils/useInputSync.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistant, useChat } from \"@ai-sdk/react\";\nimport { AssistantRuntime } from \"@assistant-ui/react\";\n\ntype VercelHelpers =\n | ReturnType<typeof useChat>\n | ReturnType<typeof useAssistant>;\n\nexport const useInputSync = (\n { setInput, input }: VercelHelpers,\n runtime: AssistantRuntime,\n) => {\n // sync input from vercel to assistant-ui\n useEffect(() => {\n runtime.thread.composer.setText(input);\n }, [runtime, input]);\n\n // sync input from assistant-ui to vercel\n useEffect(() => {\n return runtime.thread.composer.subscribe(() => {\n setInput(runtime.thread.composer.getState().text);\n });\n }, [runtime, setInput]);\n};\n"],"mappings":";;;AAEA,SAAS,iBAAiB;AAQnB,IAAM,eAAe,CAC1B,EAAE,UAAU,MAAM,GAClB,YACG;AAEH,YAAU,MAAM;AACd,YAAQ,OAAO,SAAS,QAAQ,KAAK;AAAA,EACvC,GAAG,CAAC,SAAS,KAAK,CAAC;AAGnB,YAAU,MAAM;AACd,WAAO,QAAQ,OAAO,SAAS,UAAU,MAAM;AAC7C,eAAS,QAAQ,OAAO,SAAS,SAAS,EAAE,IAAI;AAAA,IAClD,CAAC;AAAA,EACH,GAAG,CAAC,SAAS,QAAQ,CAAC;AACxB;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react-ai-sdk",
3
- "version": "0.10.3",
3
+ "version": "0.10.6",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -21,12 +21,13 @@
21
21
  "@ai-sdk/react": "*",
22
22
  "@ai-sdk/ui-utils": "*",
23
23
  "@radix-ui/react-use-callback-ref": "^1.1.1",
24
+ "@types/json-schema": "^7.0.15",
24
25
  "zod": "^3.24.3",
25
26
  "zustand": "^5.0.3",
26
- "@assistant-ui/react-edge": "0.2.2"
27
+ "@assistant-ui/react-edge": "0.2.5"
27
28
  },
28
29
  "peerDependencies": {
29
- "@assistant-ui/react": "^0.10.2",
30
+ "@assistant-ui/react": "^0.10.5",
30
31
  "@types/react": "*",
31
32
  "react": "^18 || ^19 || ^19.0.0-rc"
32
33
  },
@@ -42,8 +43,7 @@
42
43
  "eslint-config-next": "15.3.1",
43
44
  "react": "^19.1.0",
44
45
  "tsx": "^4.19.3",
45
- "@assistant-ui/tsbuildutils": "0.0.1",
46
- "@assistant-ui/tsconfig": "0.0.0"
46
+ "@assistant-ui/x-buildutils": "0.0.1"
47
47
  },
48
48
  "publishConfig": {
49
49
  "access": "public",
@@ -57,6 +57,7 @@
57
57
  "url": "https://github.com/assistant-ui/assistant-ui/issues"
58
58
  },
59
59
  "scripts": {
60
- "build": "tsx scripts/build.mts"
60
+ "build": "tsx scripts/build.mts",
61
+ "lint": "eslint ."
61
62
  }
62
63
  }
@@ -0,0 +1,15 @@
1
+ import { jsonSchema } from "@ai-sdk/ui-utils";
2
+ import type { JSONSchema7 } from "json-schema";
3
+
4
+ export const frontendTools = (
5
+ tools: Record<string, { description?: string; parameters: JSONSchema7 }>,
6
+ ) =>
7
+ Object.fromEntries(
8
+ Object.entries(tools).map(([name, tool]) => [
9
+ name,
10
+ {
11
+ ...(tool.description ? { description: tool.description } : undefined),
12
+ parameters: jsonSchema(tool.parameters),
13
+ },
14
+ ]),
15
+ );
package/src/index.ts CHANGED
@@ -9,3 +9,4 @@ export {
9
9
  fromLanguageModelTools,
10
10
  useDangerousInBrowserRuntime,
11
11
  } from "@assistant-ui/react-edge";
12
+ export { frontendTools } from "./frontendTools";
@@ -1,7 +1,5 @@
1
- "use client";
2
- import type { AppendMessage } from "@assistant-ui/react";
1
+ import type { AppendMessage, ExternalStoreAdapter } from "@assistant-ui/react";
3
2
  import type { VercelRSCMessage } from "./VercelRSCMessage";
4
- import { ExternalStoreAdapter } from "@assistant-ui/react";
5
3
 
6
4
  type RSCMessageConverter<T> = {
7
5
  convertMessage: (message: T) => VercelRSCMessage;
package/src/rsc/index.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export { useVercelRSCRuntime } from "./useVercelRSCRuntime";
2
- export { getVercelRSCMessage } from "./getVercelRSCMessage";
3
2
  export type { VercelRSCAdapter } from "./VercelRSCAdapter";
4
3
  export type { VercelRSCMessage } from "./VercelRSCMessage";
5
4
  export { RSCDisplay } from "./RSCDisplay";
@@ -1,9 +1,9 @@
1
1
  import {
2
- getExternalStoreMessage,
2
+ getExternalStoreMessages,
3
3
  type ThreadMessage,
4
4
  } from "@assistant-ui/react";
5
5
  import type { Message } from "@ai-sdk/ui-utils";
6
6
 
7
7
  export const getVercelAIMessages = (message: ThreadMessage) => {
8
- return getExternalStoreMessage(message) as Message[];
8
+ return getExternalStoreMessages(message) as Message[];
9
9
  };
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import type { useAssistant } from "@ai-sdk/react";
2
4
  import { useExternalStoreRuntime } from "@assistant-ui/react";
3
5
  import { useInputSync } from "../utils/useInputSync";
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import type { useChat } from "@ai-sdk/react";
2
4
  import { useExternalStoreRuntime } from "@assistant-ui/react";
3
5
  import { useInputSync } from "../utils/useInputSync";
@@ -1,11 +1,13 @@
1
1
  import { Message } from "@ai-sdk/ui-utils";
2
- import { unstable_createMessageConverter } from "@assistant-ui/react";
3
- import { SourceContentPart } from "@assistant-ui/react";
4
- import { FileContentPart } from "@assistant-ui/react";
5
- import { ReasoningContentPart } from "@assistant-ui/react";
6
- import { ToolCallContentPart } from "@assistant-ui/react";
7
- import { TextContentPart } from "@assistant-ui/react";
8
- import { CompleteAttachment } from "@assistant-ui/react";
2
+ import {
3
+ unstable_createMessageConverter,
4
+ type ReasoningContentPart,
5
+ type ToolCallContentPart,
6
+ type TextContentPart,
7
+ type CompleteAttachment,
8
+ type SourceContentPart,
9
+ type FileContentPart,
10
+ } from "@assistant-ui/react";
9
11
 
10
12
  export const AISDKMessageConverter = unstable_createMessageConverter(
11
13
  (message: Message) => {
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import { useEffect } from "react";
2
4
  import { useAssistant, useChat } from "@ai-sdk/react";
3
5
  import { AssistantRuntime } from "@assistant-ui/react";
@@ -1,7 +0,0 @@
1
- import { type ThreadMessage } from "@assistant-ui/react";
2
- /**
3
- * @deprecated Use `getExternalStoreMessage` instead. This method was specific to Vercel RSC
4
- * implementation and has been replaced by a more generic external store message handler.
5
- */
6
- export declare const getVercelRSCMessage: (message: ThreadMessage) => unknown;
7
- //# sourceMappingURL=getVercelRSCMessage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getVercelRSCMessage.d.ts","sourceRoot":"","sources":["../../src/rsc/getVercelRSCMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,aAAa,YAEzD,CAAC"}
@@ -1,11 +0,0 @@
1
- // src/rsc/getVercelRSCMessage.tsx
2
- import {
3
- getExternalStoreMessage
4
- } from "@assistant-ui/react";
5
- var getVercelRSCMessage = (message) => {
6
- return getExternalStoreMessage(message);
7
- };
8
- export {
9
- getVercelRSCMessage
10
- };
11
- //# sourceMappingURL=getVercelRSCMessage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/rsc/getVercelRSCMessage.tsx"],"sourcesContent":["import {\n getExternalStoreMessage,\n type ThreadMessage,\n} from \"@assistant-ui/react\";\n\n/**\n * @deprecated Use `getExternalStoreMessage` instead. This method was specific to Vercel RSC\n * implementation and has been replaced by a more generic external store message handler.\n */\nexport const getVercelRSCMessage = (message: ThreadMessage) => {\n return getExternalStoreMessage(message);\n};\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAEK;AAMA,IAAM,sBAAsB,CAAC,YAA2B;AAC7D,SAAO,wBAAwB,OAAO;AACxC;","names":[]}
@@ -1,12 +0,0 @@
1
- import {
2
- getExternalStoreMessage,
3
- type ThreadMessage,
4
- } from "@assistant-ui/react";
5
-
6
- /**
7
- * @deprecated Use `getExternalStoreMessage` instead. This method was specific to Vercel RSC
8
- * implementation and has been replaced by a more generic external store message handler.
9
- */
10
- export const getVercelRSCMessage = (message: ThreadMessage) => {
11
- return getExternalStoreMessage(message);
12
- };