@assistant-ui/react 0.11.45 → 0.11.47

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 (114) hide show
  1. package/dist/augmentations.d.ts.map +1 -1
  2. package/dist/client/ThreadMessageClient.js +2 -2
  3. package/dist/client/ThreadMessageClient.js.map +1 -1
  4. package/dist/client/types/ModelContext.d.ts.map +1 -1
  5. package/dist/context/react/AssistantApiContext.d.ts.map +1 -1
  6. package/dist/context/react/AssistantApiContext.js.map +1 -1
  7. package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +1 -1
  8. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
  9. package/dist/context/react/utils/ensureBinding.js.map +1 -1
  10. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +3 -3
  11. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  12. package/dist/legacy-runtime/AssistantRuntimeProvider.js +3 -6
  13. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  14. package/dist/legacy-runtime/client/MessagePartRuntimeClient.js +1 -1
  15. package/dist/legacy-runtime/client/MessagePartRuntimeClient.js.map +1 -1
  16. package/dist/legacy-runtime/client/MessageRuntimeClient.js +1 -1
  17. package/dist/legacy-runtime/client/MessageRuntimeClient.js.map +1 -1
  18. package/dist/legacy-runtime/cloud/auiV0.js +1 -1
  19. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  20. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  21. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js +2 -1
  22. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js.map +1 -1
  23. package/dist/legacy-runtime/runtime/AssistantRuntime.d.ts.map +1 -1
  24. package/dist/legacy-runtime/runtime/AssistantRuntime.js.map +1 -1
  25. package/dist/legacy-runtime/runtime/ComposerRuntime.js +2 -2
  26. package/dist/legacy-runtime/runtime/ComposerRuntime.js.map +1 -1
  27. package/dist/legacy-runtime/runtime/MessageRuntime.js +3 -3
  28. package/dist/legacy-runtime/runtime/MessageRuntime.js.map +1 -1
  29. package/dist/legacy-runtime/runtime/ThreadListRuntime.js +1 -1
  30. package/dist/legacy-runtime/runtime/ThreadListRuntime.js.map +1 -1
  31. package/dist/legacy-runtime/runtime/ThreadRuntime.js +2 -2
  32. package/dist/legacy-runtime/runtime/ThreadRuntime.js.map +1 -1
  33. package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts +1 -2
  34. package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.d.ts.map +1 -1
  35. package/dist/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.js.map +1 -1
  36. package/dist/legacy-runtime/runtime-cores/adapters/attachment/CompositeAttachmentAdapter.js +2 -2
  37. package/dist/legacy-runtime/runtime-cores/adapters/attachment/CompositeAttachmentAdapter.js.map +1 -1
  38. package/dist/legacy-runtime/runtime-cores/adapters/feedback/index.d.ts +1 -1
  39. package/dist/legacy-runtime/runtime-cores/adapters/feedback/index.d.ts.map +1 -1
  40. package/dist/legacy-runtime/runtime-cores/adapters/suggestion/index.d.ts +1 -1
  41. package/dist/legacy-runtime/runtime-cores/adapters/suggestion/index.d.ts.map +1 -1
  42. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  43. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +2 -1
  44. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  45. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  46. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.js +1 -1
  47. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.js.map +1 -1
  48. package/dist/legacy-runtime/runtime-cores/local/index.d.ts +1 -1
  49. package/dist/legacy-runtime/runtime-cores/local/index.d.ts.map +1 -1
  50. package/dist/legacy-runtime/runtime-cores/local/index.js +2 -3
  51. package/dist/legacy-runtime/runtime-cores/local/index.js.map +1 -1
  52. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts +0 -2
  53. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts.map +1 -1
  54. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.js +3 -3
  55. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.js.map +1 -1
  56. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  57. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.js.map +1 -1
  58. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  59. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  60. package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts +6 -0
  61. package/dist/legacy-runtime/runtime-cores/remote-thread-list/types.d.ts.map +1 -1
  62. package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -1
  63. package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.js +15 -1
  64. package/dist/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.js.map +1 -1
  65. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  66. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  67. package/dist/primitives/message/MessageError.js +1 -2
  68. package/dist/primitives/message/MessageError.js.map +1 -1
  69. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  70. package/dist/primitives/message/MessageParts.js.map +1 -1
  71. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  72. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  73. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
  74. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
  75. package/dist/types/index.d.ts.map +1 -1
  76. package/dist/utils/smooth/useSmooth.js +2 -2
  77. package/dist/utils/smooth/useSmooth.js.map +1 -1
  78. package/package.json +2 -5
  79. package/src/augmentations.ts +0 -2
  80. package/src/client/ThreadMessageClient.tsx +2 -2
  81. package/src/client/types/ModelContext.ts +0 -1
  82. package/src/context/react/AssistantApiContext.tsx +0 -2
  83. package/src/context/react/utils/createStateHookForRuntime.ts +0 -1
  84. package/src/context/react/utils/ensureBinding.ts +1 -1
  85. package/src/legacy-runtime/AssistantRuntimeProvider.tsx +5 -6
  86. package/src/legacy-runtime/client/MessagePartRuntimeClient.ts +1 -1
  87. package/src/legacy-runtime/client/MessageRuntimeClient.ts +1 -1
  88. package/src/legacy-runtime/cloud/auiV0.ts +1 -1
  89. package/src/legacy-runtime/cloud/useCloudThreadListRuntime.tsx +1 -0
  90. package/src/legacy-runtime/runtime/AssistantRuntime.ts +3 -1
  91. package/src/legacy-runtime/runtime/ComposerRuntime.ts +2 -2
  92. package/src/legacy-runtime/runtime/MessageRuntime.ts +3 -3
  93. package/src/legacy-runtime/runtime/ThreadListRuntime.ts +1 -1
  94. package/src/legacy-runtime/runtime/ThreadRuntime.ts +2 -2
  95. package/src/legacy-runtime/runtime-cores/adapters/RuntimeAdapterProvider.tsx +1 -1
  96. package/src/legacy-runtime/runtime-cores/adapters/attachment/CompositeAttachmentAdapter.ts +2 -2
  97. package/src/legacy-runtime/runtime-cores/adapters/feedback/index.ts +1 -1
  98. package/src/legacy-runtime/runtime-cores/adapters/suggestion/index.ts +1 -1
  99. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.tsx +1 -0
  100. package/src/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.tsx +1 -1
  101. package/src/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.tsx +1 -1
  102. package/src/legacy-runtime/runtime-cores/local/index.ts +1 -1
  103. package/src/legacy-runtime/runtime-cores/local/useLocalRuntime.tsx +2 -1
  104. package/src/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.tsx +0 -2
  105. package/src/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +0 -2
  106. package/src/legacy-runtime/runtime-cores/remote-thread-list/types.tsx +7 -0
  107. package/src/legacy-runtime/runtime-cores/remote-thread-list/useRemoteThreadListRuntime.tsx +25 -1
  108. package/src/primitives/actionBar/ActionBarCopy.tsx +3 -1
  109. package/src/primitives/message/MessageError.tsx +1 -1
  110. package/src/primitives/message/MessageParts.tsx +0 -1
  111. package/src/primitives/message/MessagePartsGrouped.tsx +0 -1
  112. package/src/primitives/messagePart/useMessagePartData.tsx +1 -1
  113. package/src/types/index.ts +0 -1
  114. package/src/utils/smooth/useSmooth.tsx +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"augmentations.d.ts","sourceRoot":"","sources":["../src/augmentations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,yBAAiB,SAAS,CAAC;IAEzB,UAAiB,QAAQ;KAAG;IAG5B,UAAiB,aAAa;KAAG;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,MAAM,SAAS,CAAC,aAAa,SAAS,KAAK,GACvE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,SAAS,CAAC,aAAa,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"augmentations.d.ts","sourceRoot":"","sources":["../src/augmentations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,yBAAiB,SAAS,CAAC;IACzB,UAAiB,QAAQ;KAAG;IAE5B,UAAiB,aAAa;KAAG;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,MAAM,SAAS,CAAC,aAAa,SAAS,KAAK,GACvE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,SAAS,CAAC,aAAa,CAAC,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC"}
@@ -29,7 +29,7 @@ var ThreadMessagePartClient = resource(
29
29
  }
30
30
  },
31
31
  {
32
- key: state.type === "tool-call" ? "toolCallId-" + state.toolCallId : void 0
32
+ key: state.type === "tool-call" ? `toolCallId-${state.toolCallId}` : void 0
33
33
  }
34
34
  );
35
35
  }
@@ -98,7 +98,7 @@ var ThreadMessageClient = resource(
98
98
  if ("index" in selector) {
99
99
  return parts.api({ index: selector.index });
100
100
  } else {
101
- return parts.api({ key: "toolCallId-" + selector.toolCallId });
101
+ return parts.api({ key: `toolCallId-${selector.toolCallId}` });
102
102
  }
103
103
  },
104
104
  attachment: (selector) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/ThreadMessageClient.tsx"],"sourcesContent":["\"use client\";\nimport {\n resource,\n tapMemo,\n tapState,\n tapInlineResource,\n} from \"@assistant-ui/tap\";\nimport { AttachmentClientApi } from \"./types/Attachment\";\nimport { MessageClientState, MessageClientApi } from \"./types/Message\";\nimport { MessagePartClientState, MessagePartClientApi } from \"./types/Part\";\nimport { tapLookupResources } from \"./util-hooks/tapLookupResources\";\nimport { tapApi } from \"../utils/tap-store\";\nimport {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n Attachment,\n ThreadMessage,\n} from \"../types\";\nimport { NoOpComposerClient } from \"./NoOpComposerClient\";\n\nconst ThreadMessagePartClient = resource(\n ({ part }: { part: ThreadAssistantMessagePart | ThreadUserMessagePart }) => {\n const state = tapMemo<MessagePartClientState>(() => {\n return {\n ...part,\n status: { type: \"complete\" },\n };\n }, [part]);\n\n return tapApi<MessagePartClientApi>(\n {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key:\n state.type === \"tool-call\"\n ? \"toolCallId-\" + state.toolCallId\n : undefined,\n },\n );\n },\n);\nconst ThreadMessageAttachmentClient = resource(\n ({ attachment }: { attachment: Attachment }) => {\n return tapApi<AttachmentClientApi>(\n {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key: attachment.id,\n },\n );\n },\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n index: number;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\nexport const ThreadMessageClient = resource(\n ({\n message,\n index,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n }: ThreadMessageClientProps) => {\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const parts = tapLookupResources(\n message.content.map((_, idx) =>\n ThreadMessagePartClient({ part: message.content[idx]! }, { key: idx }),\n ),\n );\n\n const attachments = tapLookupResources(\n message.attachments?.map((_, idx) =>\n ThreadMessageAttachmentClient(\n { attachment: message.attachments![idx]! },\n { key: idx },\n ),\n ) ?? [],\n );\n\n const composerState = tapInlineResource(\n NoOpComposerClient({ type: \"edit\" }),\n );\n\n const state = tapMemo<MessageClientState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState.state,\n parentId: null,\n index,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n submittedFeedback: message.metadata.submittedFeedback,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [message, index, isCopiedState, isHoveringState, isLast]);\n\n return tapApi<MessageClientApi>({\n getState: () => state,\n composer: composerState.api,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.api({ index: selector.index });\n } else {\n return parts.api({ key: \"toolCallId-\" + selector.toolCallId });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.api({ key: selector.id });\n } else {\n return attachments.api(selector);\n }\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return message.content\n .map((part) => {\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n return \"\";\n })\n .join(\"\\n\");\n },\n setIsCopied,\n setIsHovering,\n });\n },\n);\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/client/ThreadMessageClient.tsx"],"sourcesContent":["\"use client\";\nimport {\n resource,\n tapMemo,\n tapState,\n tapInlineResource,\n} from \"@assistant-ui/tap\";\nimport { AttachmentClientApi } from \"./types/Attachment\";\nimport { MessageClientState, MessageClientApi } from \"./types/Message\";\nimport { MessagePartClientState, MessagePartClientApi } from \"./types/Part\";\nimport { tapLookupResources } from \"./util-hooks/tapLookupResources\";\nimport { tapApi } from \"../utils/tap-store\";\nimport {\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n Attachment,\n ThreadMessage,\n} from \"../types\";\nimport { NoOpComposerClient } from \"./NoOpComposerClient\";\n\nconst ThreadMessagePartClient = resource(\n ({ part }: { part: ThreadAssistantMessagePart | ThreadUserMessagePart }) => {\n const state = tapMemo<MessagePartClientState>(() => {\n return {\n ...part,\n status: { type: \"complete\" },\n };\n }, [part]);\n\n return tapApi<MessagePartClientApi>(\n {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n resumeToolCall: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key:\n state.type === \"tool-call\"\n ? `toolCallId-${state.toolCallId}`\n : undefined,\n },\n );\n },\n);\nconst ThreadMessageAttachmentClient = resource(\n ({ attachment }: { attachment: Attachment }) => {\n return tapApi<AttachmentClientApi>(\n {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n },\n {\n key: attachment.id,\n },\n );\n },\n);\nexport type ThreadMessageClientProps = {\n message: ThreadMessage;\n index: number;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\nexport const ThreadMessageClient = resource(\n ({\n message,\n index,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n }: ThreadMessageClientProps) => {\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const parts = tapLookupResources(\n message.content.map((_, idx) =>\n ThreadMessagePartClient({ part: message.content[idx]! }, { key: idx }),\n ),\n );\n\n const attachments = tapLookupResources(\n message.attachments?.map((_, idx) =>\n ThreadMessageAttachmentClient(\n { attachment: message.attachments![idx]! },\n { key: idx },\n ),\n ) ?? [],\n );\n\n const composerState = tapInlineResource(\n NoOpComposerClient({ type: \"edit\" }),\n );\n\n const state = tapMemo<MessageClientState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState.state,\n parentId: null,\n index,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n submittedFeedback: message.metadata.submittedFeedback,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [message, index, isCopiedState, isHoveringState, isLast]);\n\n return tapApi<MessageClientApi>({\n getState: () => state,\n composer: composerState.api,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.api({ index: selector.index });\n } else {\n return parts.api({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.api({ key: selector.id });\n } else {\n return attachments.api(selector);\n }\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return message.content\n .map((part) => {\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n return \"\";\n })\n .join(\"\\n\");\n },\n setIsCopied,\n setIsHovering,\n });\n },\n);\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ModelContext.d.ts","sourceRoot":"","sources":["../../../src/client/types/ModelContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAGlF,MAAM,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEnC,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG;IACnD,QAAQ,IAAI,iBAAiB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,WAAW,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9B,CAAC"}
1
+ {"version":3,"file":"ModelContext.d.ts","sourceRoot":"","sources":["../../../src/client/types/ModelContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAElF,MAAM,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEnC,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG;IACnD,QAAQ,IAAI,iBAAiB,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,WAAW,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n useEffect,\n} from \"react\";\nimport { useResource } from \"@assistant-ui/tap/react\";\n\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"../../types\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\nimport { DevToolsProviderApi } from \"../../devtools/DevToolsHooks\";\nimport {\n AssistantClientProps,\n useAssistantClient,\n} from \"../../client/AssistantClient\";\nimport { ToolsApi, ToolsMeta, ToolsState } from \"../../client/types/Tools\";\nimport {\n ModelContextApi,\n ModelContextMeta,\n} from \"../../client/types/ModelContext\";\nimport {\n DerivedScopes,\n DerivedScopesInput,\n} from \"../../utils/tap-store/derived-scopes\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly tools: ToolsState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\nexport type AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta =\n | {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n }\n | {\n source: \"root\";\n query: Record<string, never>;\n };\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n tools: AssistantApiField<ToolsApi, ToolsMeta>;\n modelContext: AssistantApiField<ModelContextApi, ModelContextMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends AssistantEvent>(\n event: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n tools: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Tools is only available inside <AssistantProvider />\");\n },\n }),\n modelContext: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ModelContext is only available inside <AssistantProvider />\",\n );\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n});\n\nexport const useAssistantApiImpl = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\n/**\n * Hook to extend the current AssistantApi with additional derived scope fields and special callbacks.\n * This merges the derived fields with the existing API from context.\n * Fields are automatically memoized based on source and query changes.\n * Special callbacks (on, subscribe, flushSync) use the useEffectEvent pattern to always access latest values.\n *\n * @param scopes - Record of field names to DerivedScope resource elements, plus optional special callbacks\n * @returns The merged AssistantApi\n *\n * @example\n * ```tsx\n * const api = useExtendedAssistantApi({\n * message: DerivedScope({\n * source: \"root\",\n * query: {},\n * get: () => messageApi,\n * }),\n * on: (selector, callback) => {\n * // Custom event filtering logic\n * },\n * });\n * ```\n */\nexport const useExtendedAssistantApi = (\n scopes: DerivedScopesInput,\n): AssistantApi => {\n const baseApi = useAssistantApiImpl();\n const partialApi = useResource(DerivedScopes(scopes));\n return useMemo(() => extendApi(baseApi, partialApi), [baseApi, partialApi]);\n};\n\nconst useExtendedAssistantApiImpl = (\n config: AssistantClientProps,\n): AssistantApi => {\n return useAssistantClient(config);\n};\n\nexport function useAssistantApi(): AssistantApi;\nexport function useAssistantApi(config: AssistantClientProps): AssistantApi;\nexport function useAssistantApi(config?: AssistantClientProps): AssistantApi {\n if (config) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useExtendedAssistantApiImpl(config);\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useAssistantApiImpl();\n }\n}\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nexport const extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<{ api: AssistantApi; devToolsVisible?: boolean }>\n> = ({ api, children, devToolsVisible = true }) => {\n useEffect(() => {\n if (!devToolsVisible || !api.subscribe) return undefined;\n return DevToolsProviderApi.register(api);\n }, [api, devToolsVisible]);\n\n return (\n <AssistantApiContext.Provider value={api}>\n {children}\n </AssistantApiContext.Provider>\n );\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n useEffect,\n} from \"react\";\nimport { useResource } from \"@assistant-ui/tap/react\";\n\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"../../types\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\nimport { DevToolsProviderApi } from \"../../devtools/DevToolsHooks\";\nimport {\n AssistantClientProps,\n useAssistantClient,\n} from \"../../client/AssistantClient\";\nimport { ToolsApi, ToolsMeta, ToolsState } from \"../../client/types/Tools\";\nimport {\n ModelContextApi,\n ModelContextMeta,\n} from \"../../client/types/ModelContext\";\nimport {\n DerivedScopes,\n DerivedScopesInput,\n} from \"../../utils/tap-store/derived-scopes\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly tools: ToolsState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\nexport type AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta =\n | {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n }\n | {\n source: \"root\";\n query: Record<string, never>;\n };\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n tools: AssistantApiField<ToolsApi, ToolsMeta>;\n modelContext: AssistantApiField<ModelContextApi, ModelContextMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends AssistantEvent>(\n event: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n tools: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Tools is only available inside <AssistantProvider />\");\n },\n }),\n modelContext: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ModelContext is only available inside <AssistantProvider />\",\n );\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n});\n\nexport const useAssistantApiImpl = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\n/**\n * Hook to extend the current AssistantApi with additional derived scope fields and special callbacks.\n * This merges the derived fields with the existing API from context.\n * Fields are automatically memoized based on source and query changes.\n * Special callbacks (on, subscribe, flushSync) use the useEffectEvent pattern to always access latest values.\n *\n * @param scopes - Record of field names to DerivedScope resource elements, plus optional special callbacks\n * @returns The merged AssistantApi\n *\n * @example\n * ```tsx\n * const api = useExtendedAssistantApi({\n * message: DerivedScope({\n * source: \"root\",\n * query: {},\n * get: () => messageApi,\n * }),\n * on: (selector, callback) => {\n * // Custom event filtering logic\n * },\n * });\n * ```\n */\nexport const useExtendedAssistantApi = (\n scopes: DerivedScopesInput,\n): AssistantApi => {\n const baseApi = useAssistantApiImpl();\n const partialApi = useResource(DerivedScopes(scopes));\n return useMemo(() => extendApi(baseApi, partialApi), [baseApi, partialApi]);\n};\n\nconst useExtendedAssistantApiImpl = (\n config: AssistantClientProps,\n): AssistantApi => {\n return useAssistantClient(config);\n};\n\nexport function useAssistantApi(): AssistantApi;\nexport function useAssistantApi(config: AssistantClientProps): AssistantApi;\nexport function useAssistantApi(config?: AssistantClientProps): AssistantApi {\n if (config) {\n return useExtendedAssistantApiImpl(config);\n } else {\n return useAssistantApiImpl();\n }\n}\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nexport const extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<{ api: AssistantApi; devToolsVisible?: boolean }>\n> = ({ api, children, devToolsVisible = true }) => {\n useEffect(() => {\n if (!devToolsVisible || !api.subscribe) return undefined;\n return DevToolsProviderApi.register(api);\n }, [api, devToolsVisible]);\n\n return (\n <AssistantApiContext.Provider value={api}>\n {children}\n </AssistantApiContext.Provider>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"createStateHookForRuntime.d.ts","sourceRoot":"","sources":["../../../../src/context/react/utils/createStateHookForRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,yBAAyB,CAAC,MAAM,EAC9C,UAAU,EAAE,CAAC,OAAO,EAAE;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B,KAAK,mBAAmB,CAAC,MAAM,CAAC,GAAG,IAAI;QAGf,MAAM;KAGT,SAAS,YACnB,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,GACrC,SAAS;KAGU,SAAS,YACnB,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,GACnD,SAAS,GAAG,MAAM;cAGU;QAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;KAAE,GAAG,MAAM;cAGzC;QAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChC,GAAG,MAAM,GAAG,IAAI;KAGK,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;QAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;KACxC,GAAG,SAAS;KAGS,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;QAC7B,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;KACtD,GAAG,SAAS,GAAG,MAAM;KAGA,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;KACxC,GAAG,SAAS,GAAG,IAAI;KAGE,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC/B,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;KACtD,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;EA6B9B"}
1
+ {"version":3,"file":"createStateHookForRuntime.d.ts","sourceRoot":"","sources":["../../../../src/context/react/utils/createStateHookForRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,yBAAyB,CAAC,MAAM,EAC9C,UAAU,EAAE,CAAC,OAAO,EAAE;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B,KAAK,mBAAmB,CAAC,MAAM,CAAC,GAAG,IAAI;QAGf,MAAM;KAGT,SAAS,YACnB,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,GACrC,SAAS;KAGU,SAAS,YACnB,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,GACnD,SAAS,GAAG,MAAM;cAGU;QAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;KAAE,GAAG,MAAM;cAGzC;QAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChC,GAAG,MAAM,GAAG,IAAI;KAGK,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;QAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;KACxC,GAAG,SAAS;KAGS,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;QAC7B,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;KACtD,GAAG,SAAS,GAAG,MAAM;KAGA,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;KACxC,GAAG,SAAS,GAAG,IAAI;KAGE,SAAS,WAAW;QACxC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC/B,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;KACtD,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;EA4B9B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/context/react/utils/createStateHookForRuntime.ts"],"sourcesContent":["import {\n SubscribableRuntime,\n useRuntimeStateInternal,\n} from \"./useRuntimeState\";\n\nexport function createStateHookForRuntime<TState>(\n useRuntime: (options: {\n optional: boolean | undefined;\n }) => SubscribableRuntime<TState> | null,\n) {\n // empty\n function useStoreHook(): TState;\n\n // selector\n function useStoreHook<TSelected>(\n selector: (state: TState) => TSelected,\n ): TSelected;\n\n // selector?\n function useStoreHook<TSelected>(\n selector: ((state: TState) => TSelected) | undefined,\n ): TSelected | TState;\n\n // optional=false\n function useStoreHook(options: { optional?: false | undefined }): TState;\n\n // optional?\n function useStoreHook(options: {\n optional?: boolean | undefined;\n }): TState | null;\n\n // optional=false, selector\n function useStoreHook<TSelected>(options: {\n optional?: false | undefined;\n selector: (state: TState) => TSelected;\n }): TSelected;\n\n // optional=false, selector?\n function useStoreHook<TSelected>(options: {\n optional?: false | undefined;\n selector: ((state: TState) => TSelected) | undefined;\n }): TSelected | TState;\n\n // optional?, selector\n function useStoreHook<TSelected>(options: {\n optional?: boolean | undefined;\n selector: (state: TState) => TSelected;\n }): TSelected | null;\n\n // optional?, selector?\n function useStoreHook<TSelected>(options: {\n optional?: boolean | undefined;\n selector: ((state: TState) => TSelected) | undefined;\n }): TSelected | TState | null;\n\n function useStoreHook<TSelected>(\n param?:\n | ((state: TState) => TSelected)\n | {\n optional?: boolean | undefined;\n selector?: ((state: TState) => TSelected) | undefined;\n },\n ): TSelected | TState | null {\n let optional = false;\n let selector: ((state: TState) => TSelected) | undefined;\n\n if (typeof param === \"function\") {\n selector = param;\n } else if (param) {\n optional = !!param.optional;\n selector = param.selector;\n }\n\n const store = useRuntime({ optional });\n if (!store) return null;\n\n // it is ok to call useRuntimeStateInternal conditionally because it will never become null if its available\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useRuntimeStateInternal(store, selector);\n }\n\n return useStoreHook;\n}\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,OACK;AAEA,SAAS,0BACd,YAGA;AA8CA,WAAS,aACP,OAM2B;AAC3B,QAAI,WAAW;AACf,QAAI;AAEJ,QAAI,OAAO,UAAU,YAAY;AAC/B,iBAAW;AAAA,IACb,WAAW,OAAO;AAChB,iBAAW,CAAC,CAAC,MAAM;AACnB,iBAAW,MAAM;AAAA,IACnB;AAEA,UAAM,QAAQ,WAAW,EAAE,SAAS,CAAC;AACrC,QAAI,CAAC,MAAO,QAAO;AAInB,WAAO,wBAAwB,OAAO,QAAQ;AAAA,EAChD;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/context/react/utils/createStateHookForRuntime.ts"],"sourcesContent":["import {\n SubscribableRuntime,\n useRuntimeStateInternal,\n} from \"./useRuntimeState\";\n\nexport function createStateHookForRuntime<TState>(\n useRuntime: (options: {\n optional: boolean | undefined;\n }) => SubscribableRuntime<TState> | null,\n) {\n // empty\n function useStoreHook(): TState;\n\n // selector\n function useStoreHook<TSelected>(\n selector: (state: TState) => TSelected,\n ): TSelected;\n\n // selector?\n function useStoreHook<TSelected>(\n selector: ((state: TState) => TSelected) | undefined,\n ): TSelected | TState;\n\n // optional=false\n function useStoreHook(options: { optional?: false | undefined }): TState;\n\n // optional?\n function useStoreHook(options: {\n optional?: boolean | undefined;\n }): TState | null;\n\n // optional=false, selector\n function useStoreHook<TSelected>(options: {\n optional?: false | undefined;\n selector: (state: TState) => TSelected;\n }): TSelected;\n\n // optional=false, selector?\n function useStoreHook<TSelected>(options: {\n optional?: false | undefined;\n selector: ((state: TState) => TSelected) | undefined;\n }): TSelected | TState;\n\n // optional?, selector\n function useStoreHook<TSelected>(options: {\n optional?: boolean | undefined;\n selector: (state: TState) => TSelected;\n }): TSelected | null;\n\n // optional?, selector?\n function useStoreHook<TSelected>(options: {\n optional?: boolean | undefined;\n selector: ((state: TState) => TSelected) | undefined;\n }): TSelected | TState | null;\n\n function useStoreHook<TSelected>(\n param?:\n | ((state: TState) => TSelected)\n | {\n optional?: boolean | undefined;\n selector?: ((state: TState) => TSelected) | undefined;\n },\n ): TSelected | TState | null {\n let optional = false;\n let selector: ((state: TState) => TSelected) | undefined;\n\n if (typeof param === \"function\") {\n selector = param;\n } else if (param) {\n optional = !!param.optional;\n selector = param.selector;\n }\n\n const store = useRuntime({ optional });\n if (!store) return null;\n\n // it is ok to call useRuntimeStateInternal conditionally because it will never become null if its available\n return useRuntimeStateInternal(store, selector);\n }\n\n return useStoreHook;\n}\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,OACK;AAEA,SAAS,0BACd,YAGA;AA8CA,WAAS,aACP,OAM2B;AAC3B,QAAI,WAAW;AACf,QAAI;AAEJ,QAAI,OAAO,UAAU,YAAY;AAC/B,iBAAW;AAAA,IACb,WAAW,OAAO;AAChB,iBAAW,CAAC,CAAC,MAAM;AACnB,iBAAW,MAAM;AAAA,IACnB;AAEA,UAAM,QAAQ,WAAW,EAAE,SAAS,CAAC;AACrC,QAAI,CAAC,MAAO,QAAO;AAGnB,WAAO,wBAAwB,OAAO,QAAQ;AAAA,EAChD;AAEA,SAAO;AACT;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/context/react/utils/ensureBinding.ts"],"sourcesContent":["type Bindable = {\n __internal_bindMethods?: () => void;\n __isBound?: boolean;\n};\nconst debugVerifyPrototype = (\n runtime: Record<string, unknown>,\n prototype: any,\n) => {\n const unboundMethods = Object.getOwnPropertyNames(prototype).filter(\n (methodStr) => {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodStr);\n const isMethod = descriptor && typeof descriptor.value === \"function\";\n if (!isMethod) return false;\n\n const methodName = methodStr as keyof typeof runtime | \"constructor\";\n return (\n isMethod &&\n !methodName.startsWith(\"_\") &&\n methodName !== \"constructor\" &&\n prototype[methodName] === runtime[methodName]\n );\n },\n );\n\n if (unboundMethods.length > 0) {\n throw new Error(\n \"The following methods are not bound: \" + JSON.stringify(unboundMethods),\n );\n }\n\n const prototypePrototype = Object.getPrototypeOf(prototype);\n if (prototypePrototype && prototypePrototype !== Object.prototype) {\n debugVerifyPrototype(runtime, prototypePrototype);\n }\n};\nexport const ensureBinding = (r: unknown) => {\n const runtime = r as Bindable;\n if (runtime.__isBound) return;\n\n runtime.__internal_bindMethods?.();\n runtime.__isBound = true;\n\n // @ts-expect-error - strip this out in production build\n DEV: debugVerifyPrototype(runtime, Object.getPrototypeOf(runtime));\n};\n"],"mappings":";AAmCO,IAAM,gBAAgB,CAAC,MAAe;AAC3C,QAAM,UAAU;AAChB,MAAI,QAAQ,UAAW;AAEvB,UAAQ,yBAAyB;AACjC,UAAQ,YAAY;AAItB;","names":[]}
1
+ {"version":3,"sources":["../../../../src/context/react/utils/ensureBinding.ts"],"sourcesContent":["type Bindable = {\n __internal_bindMethods?: () => void;\n __isBound?: boolean;\n};\nconst debugVerifyPrototype = (\n runtime: Record<string, unknown>,\n prototype: any,\n) => {\n const unboundMethods = Object.getOwnPropertyNames(prototype).filter(\n (methodStr) => {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodStr);\n const isMethod = descriptor && typeof descriptor.value === \"function\";\n if (!isMethod) return false;\n\n const methodName = methodStr as keyof typeof runtime | \"constructor\";\n return (\n isMethod &&\n !methodName.startsWith(\"_\") &&\n methodName !== \"constructor\" &&\n prototype[methodName] === runtime[methodName]\n );\n },\n );\n\n if (unboundMethods.length > 0) {\n throw new Error(\n `The following methods are not bound: ${JSON.stringify(unboundMethods)}`,\n );\n }\n\n const prototypePrototype = Object.getPrototypeOf(prototype);\n if (prototypePrototype && prototypePrototype !== Object.prototype) {\n debugVerifyPrototype(runtime, prototypePrototype);\n }\n};\nexport const ensureBinding = (r: unknown) => {\n const runtime = r as Bindable;\n if (runtime.__isBound) return;\n\n runtime.__internal_bindMethods?.();\n runtime.__isBound = true;\n\n // @ts-expect-error - strip this out in production build\n DEV: debugVerifyPrototype(runtime, Object.getPrototypeOf(runtime));\n};\n"],"mappings":";AAmCO,IAAM,gBAAgB,CAAC,MAAe;AAC3C,QAAM,UAAU;AAChB,MAAI,QAAQ,UAAW;AAEvB,UAAQ,yBAAyB;AACjC,UAAQ,YAAY;AAItB;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import { FC, PropsWithChildren } from "react";
2
2
  import { AssistantRuntime } from "./runtime/AssistantRuntime";
3
- export declare namespace AssistantProvider {
3
+ export declare namespace AssistantRuntimeProvider {
4
4
  type Props = PropsWithChildren<{
5
5
  /**
6
6
  * The runtime to provide to the rest of your app.
@@ -8,6 +8,6 @@ export declare namespace AssistantProvider {
8
8
  runtime: AssistantRuntime;
9
9
  }>;
10
10
  }
11
- export declare const AssistantRuntimeProviderImpl: FC<AssistantProvider.Props>;
12
- export declare const AssistantRuntimeProvider: import("react").NamedExoticComponent<AssistantProvider.Props>;
11
+ export declare const AssistantRuntimeProviderImpl: FC<AssistantRuntimeProvider.Props>;
12
+ export declare const AssistantRuntimeProvider: import("react").NamedExoticComponent<AssistantRuntimeProvider.Props>;
13
13
  //# sourceMappingURL=AssistantRuntimeProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantRuntimeProvider.d.ts","sourceRoot":"","sources":["../../src/legacy-runtime/AssistantRuntimeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAQ,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAKpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAK9D,yBAAiB,iBAAiB,CAAC;IACjC,KAAY,KAAK,GAAG,iBAAiB,CAAC;QACpC;;WAEG;QACH,OAAO,EAAE,gBAAgB,CAAC;KAC3B,CAAC,CAAC;CACJ;AAMD,eAAO,MAAM,4BAA4B,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAqBpE,CAAC;AAEF,eAAO,MAAM,wBAAwB,+DAAqC,CAAC"}
1
+ {"version":3,"file":"AssistantRuntimeProvider.d.ts","sourceRoot":"","sources":["../../src/legacy-runtime/AssistantRuntimeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAQ,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAKpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAK9D,yBAAiB,wBAAwB,CAAC;IACxC,KAAY,KAAK,GAAG,iBAAiB,CAAC;QACpC;;WAEG;QACH,OAAO,EAAE,gBAAgB,CAAC;KAC3B,CAAC,CAAC;CACJ;AAMD,eAAO,MAAM,4BAA4B,EAAE,EAAE,CAC3C,wBAAwB,CAAC,KAAK,CAmB/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,sEAAqC,CAAC"}
@@ -3,8 +3,8 @@
3
3
  // src/legacy-runtime/AssistantRuntimeProvider.tsx
4
4
  import { memo } from "react";
5
5
  import {
6
- AssistantProvider,
7
- useAssistantApi
6
+ useAssistantApi,
7
+ AssistantProvider
8
8
  } from "../context/react/AssistantApiContext.js";
9
9
  import { RuntimeAdapter } from "./RuntimeAdapter.js";
10
10
  import { ThreadPrimitiveViewportProvider } from "../context/providers/ThreadViewportProvider.js";
@@ -12,10 +12,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
12
12
  var getRenderComponent = (runtime) => {
13
13
  return runtime._core?.RenderComponent;
14
14
  };
15
- var AssistantRuntimeProviderImpl = ({
16
- children,
17
- runtime
18
- }) => {
15
+ var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
19
16
  const api = useAssistantApi({
20
17
  threads: RuntimeAdapter(runtime)
21
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/legacy-runtime/AssistantRuntimeProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { FC, memo, PropsWithChildren } from \"react\";\nimport {\n AssistantProvider,\n useAssistantApi,\n} from \"../context/react/AssistantApiContext\";\nimport { AssistantRuntime } from \"./runtime/AssistantRuntime\";\nimport { AssistantRuntimeCore } from \"./runtime-cores/core/AssistantRuntimeCore\";\nimport { RuntimeAdapter } from \"./RuntimeAdapter\";\nimport { ThreadPrimitiveViewportProvider } from \"../context/providers/ThreadViewportProvider\";\n\nexport namespace AssistantProvider {\n export type Props = PropsWithChildren<{\n /**\n * The runtime to provide to the rest of your app.\n */\n runtime: AssistantRuntime;\n }>;\n}\n\nconst getRenderComponent = (runtime: AssistantRuntime) => {\n return (runtime as { _core?: AssistantRuntimeCore })._core?.RenderComponent;\n};\n\nexport const AssistantRuntimeProviderImpl: FC<AssistantProvider.Props> = ({\n children,\n runtime,\n}) => {\n const api = useAssistantApi({\n threads: RuntimeAdapter(runtime),\n });\n\n const RenderComponent = getRenderComponent(runtime);\n\n return (\n <AssistantProvider api={api}>\n {RenderComponent && <RenderComponent />}\n\n {/* TODO temporarily allow accessing viewport state from outside the viewport */}\n {/* TODO figure out if this behavior should be deprecated, since it is quite hacky */}\n <ThreadPrimitiveViewportProvider>\n {children}\n </ThreadPrimitiveViewportProvider>\n </AssistantProvider>\n );\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n"],"mappings":";;;AAEA,SAAa,YAA+B;AAC5C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,sBAAsB;AAC/B,SAAS,uCAAuC;AA0B5C,SACsB,KADtB;AAfJ,IAAM,qBAAqB,CAAC,YAA8B;AACxD,SAAQ,QAA6C,OAAO;AAC9D;AAEO,IAAM,+BAA4D,CAAC;AAAA,EACxE;AAAA,EACA;AACF,MAAM;AACJ,QAAM,MAAM,gBAAgB;AAAA,IAC1B,SAAS,eAAe,OAAO;AAAA,EACjC,CAAC;AAED,QAAM,kBAAkB,mBAAmB,OAAO;AAElD,SACE,qBAAC,qBAAkB,KAChB;AAAA,uBAAmB,oBAAC,mBAAgB;AAAA,IAIrC,oBAAC,mCACE,UACH;AAAA,KACF;AAEJ;AAEO,IAAM,2BAA2B,KAAK,4BAA4B;","names":[]}
1
+ {"version":3,"sources":["../../src/legacy-runtime/AssistantRuntimeProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { FC, memo, PropsWithChildren } from \"react\";\nimport {\n useAssistantApi,\n AssistantProvider,\n} from \"../context/react/AssistantApiContext\";\nimport { AssistantRuntime } from \"./runtime/AssistantRuntime\";\nimport { AssistantRuntimeCore } from \"./runtime-cores/core/AssistantRuntimeCore\";\nimport { RuntimeAdapter } from \"./RuntimeAdapter\";\nimport { ThreadPrimitiveViewportProvider } from \"../context/providers/ThreadViewportProvider\";\n\nexport namespace AssistantRuntimeProvider {\n export type Props = PropsWithChildren<{\n /**\n * The runtime to provide to the rest of your app.\n */\n runtime: AssistantRuntime;\n }>;\n}\n\nconst getRenderComponent = (runtime: AssistantRuntime) => {\n return (runtime as { _core?: AssistantRuntimeCore })._core?.RenderComponent;\n};\n\nexport const AssistantRuntimeProviderImpl: FC<\n AssistantRuntimeProvider.Props\n> = ({ children, runtime }) => {\n const api = useAssistantApi({\n threads: RuntimeAdapter(runtime),\n });\n\n const RenderComponent = getRenderComponent(runtime);\n\n return (\n <AssistantProvider api={api}>\n {RenderComponent && <RenderComponent />}\n\n {/* TODO temporarily allow accessing viewport state from outside the viewport */}\n {/* TODO figure out if this behavior should be deprecated, since it is quite hacky */}\n <ThreadPrimitiveViewportProvider>\n {children}\n </ThreadPrimitiveViewportProvider>\n </AssistantProvider>\n );\n};\n\nexport const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);\n"],"mappings":";;;AAEA,SAAa,YAA+B;AAC5C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,sBAAsB;AAC/B,SAAS,uCAAuC;AAyB5C,SACsB,KADtB;AAdJ,IAAM,qBAAqB,CAAC,YAA8B;AACxD,SAAQ,QAA6C,OAAO;AAC9D;AAEO,IAAM,+BAET,CAAC,EAAE,UAAU,QAAQ,MAAM;AAC7B,QAAM,MAAM,gBAAgB;AAAA,IAC1B,SAAS,eAAe,OAAO;AAAA,EACjC,CAAC;AAED,QAAM,kBAAkB,mBAAmB,OAAO;AAElD,SACE,qBAAC,qBAAkB,KAChB;AAAA,uBAAmB,oBAAC,mBAAgB;AAAA,IAIrC,oBAAC,mCACE,UACH;AAAA,KACF;AAEJ;AAEO,IAAM,2BAA2B,KAAK,4BAA4B;","names":[]}
@@ -12,7 +12,7 @@ var MessagePartClient = resource(
12
12
  __internal_getRuntime: () => runtime
13
13
  };
14
14
  return tapApi(api, {
15
- key: runtimeState.type === "tool-call" ? "toolCallId-" + runtimeState.toolCallId : void 0
15
+ key: runtimeState.type === "tool-call" ? `toolCallId-${runtimeState.toolCallId}` : void 0
16
16
  });
17
17
  }
18
18
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/client/MessagePartRuntimeClient.ts"],"sourcesContent":["import { resource } from \"@assistant-ui/tap\";\nimport { tapApi } from \"../../utils/tap-store\";\nimport { MessagePartRuntime } from \"../runtime/MessagePartRuntime\";\nimport { tapSubscribable } from \"../util-hooks/tapSubscribable\";\nimport { MessagePartClientApi } from \"../../client/types/Part\";\nexport const MessagePartClient = resource(\n ({ runtime }: { runtime: MessagePartRuntime }) => {\n const runtimeState = tapSubscribable(runtime);\n\n const api: MessagePartClientApi = {\n getState: () => runtimeState,\n\n addToolResult: (result) => runtime.addToolResult(result),\n resumeToolCall: (payload) => runtime.resumeToolCall(payload),\n __internal_getRuntime: () => runtime,\n };\n\n return tapApi<MessagePartClientApi>(api, {\n key:\n runtimeState.type === \"tool-call\"\n ? \"toolCallId-\" + runtimeState.toolCallId\n : undefined,\n });\n },\n);\n"],"mappings":";AAAA,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,SAAS,uBAAuB;AAEzB,IAAM,oBAAoB;AAAA,EAC/B,CAAC,EAAE,QAAQ,MAAuC;AAChD,UAAM,eAAe,gBAAgB,OAAO;AAE5C,UAAM,MAA4B;AAAA,MAChC,UAAU,MAAM;AAAA,MAEhB,eAAe,CAAC,WAAW,QAAQ,cAAc,MAAM;AAAA,MACvD,gBAAgB,CAAC,YAAY,QAAQ,eAAe,OAAO;AAAA,MAC3D,uBAAuB,MAAM;AAAA,IAC/B;AAEA,WAAO,OAA6B,KAAK;AAAA,MACvC,KACE,aAAa,SAAS,cAClB,gBAAgB,aAAa,aAC7B;AAAA,IACR,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/client/MessagePartRuntimeClient.ts"],"sourcesContent":["import { resource } from \"@assistant-ui/tap\";\nimport { tapApi } from \"../../utils/tap-store\";\nimport { MessagePartRuntime } from \"../runtime/MessagePartRuntime\";\nimport { tapSubscribable } from \"../util-hooks/tapSubscribable\";\nimport { MessagePartClientApi } from \"../../client/types/Part\";\nexport const MessagePartClient = resource(\n ({ runtime }: { runtime: MessagePartRuntime }) => {\n const runtimeState = tapSubscribable(runtime);\n\n const api: MessagePartClientApi = {\n getState: () => runtimeState,\n\n addToolResult: (result) => runtime.addToolResult(result),\n resumeToolCall: (payload) => runtime.resumeToolCall(payload),\n __internal_getRuntime: () => runtime,\n };\n\n return tapApi<MessagePartClientApi>(api, {\n key:\n runtimeState.type === \"tool-call\"\n ? `toolCallId-${runtimeState.toolCallId}`\n : undefined,\n });\n },\n);\n"],"mappings":";AAAA,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,SAAS,uBAAuB;AAEzB,IAAM,oBAAoB;AAAA,EAC/B,CAAC,EAAE,QAAQ,MAAuC;AAChD,UAAM,eAAe,gBAAgB,OAAO;AAE5C,UAAM,MAA4B;AAAA,MAChC,UAAU,MAAM;AAAA,MAEhB,eAAe,CAAC,WAAW,QAAQ,cAAc,MAAM;AAAA,MACvD,gBAAgB,CAAC,YAAY,QAAQ,eAAe,OAAO;AAAA,MAC3D,uBAAuB,MAAM;AAAA,IAC/B;AAEA,WAAO,OAA6B,KAAK;AAAA,MACvC,KACE,aAAa,SAAS,cAClB,cAAc,aAAa,UAAU,KACrC;AAAA,IACR,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -93,7 +93,7 @@ var MessageClient = resource(
93
93
  if ("index" in selector) {
94
94
  return parts.api({ index: selector.index });
95
95
  } else {
96
- return parts.api({ key: "toolCallId-" + selector.toolCallId });
96
+ return parts.api({ key: `toolCallId-${selector.toolCallId}` });
97
97
  }
98
98
  },
99
99
  attachment: (selector) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/client/MessageRuntimeClient.ts"],"sourcesContent":["import {\n resource,\n tapInlineResource,\n tapMemo,\n tapState,\n} from \"@assistant-ui/tap\";\nimport { tapApi } from \"../../utils/tap-store\";\nimport { MessageRuntime } from \"../runtime/MessageRuntime\";\nimport { tapSubscribable } from \"../util-hooks/tapSubscribable\";\nimport { ComposerClient } from \"./ComposerRuntimeClient\";\nimport { MessagePartClient } from \"./MessagePartRuntimeClient\";\nimport { tapLookupResources } from \"../../client/util-hooks/tapLookupResources\";\nimport { RefObject } from \"react\";\nimport {\n MessageClientState,\n MessageClientApi,\n} from \"../../client/types/Message\";\nimport { AttachmentRuntimeClient } from \"./AttachmentRuntimeClient\";\n\nconst MessageAttachmentClientByIndex = resource(\n ({ runtime, index }: { runtime: MessageRuntime; index: number }) => {\n const attachmentRuntime = tapMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n return tapInlineResource(\n AttachmentRuntimeClient({ runtime: attachmentRuntime }),\n );\n },\n);\n\nconst MessagePartByIndex = resource(\n ({ runtime, index }: { runtime: MessageRuntime; index: number }) => {\n const partRuntime = tapMemo(\n () => runtime.getMessagePartByIndex(index),\n [runtime, index],\n );\n return tapInlineResource(MessagePartClient({ runtime: partRuntime }));\n },\n);\n\nexport const MessageClient = resource(\n ({\n runtime,\n threadIdRef,\n }: {\n runtime: MessageRuntime;\n threadIdRef: RefObject<string>;\n }) => {\n const runtimeState = tapSubscribable(runtime);\n\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const messageIdRef = tapMemo(\n () => ({\n get current() {\n return runtime.getState().id;\n },\n }),\n [runtime],\n );\n\n const composer = tapInlineResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n messageIdRef,\n }),\n );\n\n const parts = tapLookupResources(\n runtimeState.content.map((_, idx) =>\n MessagePartByIndex({ runtime, index: idx }, { key: idx }),\n ),\n );\n\n const attachments = tapLookupResources(\n runtimeState.attachments?.map((_, idx) =>\n MessageAttachmentClientByIndex({ runtime, index: idx }, { key: idx }),\n ) ?? [],\n );\n\n const state = tapMemo<MessageClientState>(() => {\n return {\n ...(runtimeState as MessageClientState),\n\n parts: parts.state,\n composer: composer.state,\n\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n runtimeState,\n parts.state,\n composer.state,\n isCopiedState,\n isHoveringState,\n ]);\n\n return tapApi<MessageClientApi>(\n {\n getState: () => state,\n\n composer: composer.api,\n\n reload: (config) => runtime.reload(config),\n speak: () => runtime.speak(),\n stopSpeaking: () => runtime.stopSpeaking(),\n submitFeedback: (feedback) => runtime.submitFeedback(feedback),\n switchToBranch: (options) => runtime.switchToBranch(options),\n getCopyText: () => runtime.unstable_getCopyText(),\n\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.api({ index: selector.index });\n } else {\n return parts.api({ key: \"toolCallId-\" + selector.toolCallId });\n }\n },\n\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.api({ key: selector.id });\n } else {\n return attachments.api(selector);\n }\n },\n\n setIsCopied,\n setIsHovering,\n\n __internal_getRuntime: () => runtime,\n },\n {\n key: runtimeState.id,\n },\n );\n },\n);\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AAEvB,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAExC,IAAM,iCAAiC;AAAA,EACrC,CAAC,EAAE,SAAS,MAAM,MAAkD;AAClE,UAAM,oBAAoB;AAAA,MACxB,MAAM,QAAQ,qBAAqB,KAAK;AAAA,MACxC,CAAC,SAAS,KAAK;AAAA,IACjB;AACA,WAAO;AAAA,MACL,wBAAwB,EAAE,SAAS,kBAAkB,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAEA,IAAM,qBAAqB;AAAA,EACzB,CAAC,EAAE,SAAS,MAAM,MAAkD;AAClE,UAAM,cAAc;AAAA,MAClB,MAAM,QAAQ,sBAAsB,KAAK;AAAA,MACzC,CAAC,SAAS,KAAK;AAAA,IACjB;AACA,WAAO,kBAAkB,kBAAkB,EAAE,SAAS,YAAY,CAAC,CAAC;AAAA,EACtE;AACF;AAEO,IAAM,gBAAgB;AAAA,EAC3B,CAAC;AAAA,IACC;AAAA,IACA;AAAA,EACF,MAGM;AACJ,UAAM,eAAe,gBAAgB,OAAO;AAE5C,UAAM,CAAC,eAAe,WAAW,IAAI,SAAS,KAAK;AACnD,UAAM,CAAC,iBAAiB,aAAa,IAAI,SAAS,KAAK;AAEvD,UAAM,eAAe;AAAA,MACnB,OAAO;AAAA,QACL,IAAI,UAAU;AACZ,iBAAO,QAAQ,SAAS,EAAE;AAAA,QAC5B;AAAA,MACF;AAAA,MACA,CAAC,OAAO;AAAA,IACV;AAEA,UAAM,WAAW;AAAA,MACf,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,QAAQ;AAAA,MACZ,aAAa,QAAQ;AAAA,QAAI,CAAC,GAAG,QAC3B,mBAAmB,EAAE,SAAS,OAAO,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,MAC1D;AAAA,IACF;AAEA,UAAM,cAAc;AAAA,MAClB,aAAa,aAAa;AAAA,QAAI,CAAC,GAAG,QAChC,+BAA+B,EAAE,SAAS,OAAO,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,MACtE,KAAK,CAAC;AAAA,IACR;AAEA,UAAM,QAAQ,QAA4B,MAAM;AAC9C,aAAO;AAAA,QACL,GAAI;AAAA,QAEJ,OAAO,MAAM;AAAA,QACb,UAAU,SAAS;AAAA,QAEnB,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF,GAAG;AAAA,MACD;AAAA,MACA,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL;AAAA,QACE,UAAU,MAAM;AAAA,QAEhB,UAAU,SAAS;AAAA,QAEnB,QAAQ,CAAC,WAAW,QAAQ,OAAO,MAAM;AAAA,QACzC,OAAO,MAAM,QAAQ,MAAM;AAAA,QAC3B,cAAc,MAAM,QAAQ,aAAa;AAAA,QACzC,gBAAgB,CAAC,aAAa,QAAQ,eAAe,QAAQ;AAAA,QAC7D,gBAAgB,CAAC,YAAY,QAAQ,eAAe,OAAO;AAAA,QAC3D,aAAa,MAAM,QAAQ,qBAAqB;AAAA,QAEhD,MAAM,CAAC,aAAa;AAClB,cAAI,WAAW,UAAU;AACvB,mBAAO,MAAM,IAAI,EAAE,OAAO,SAAS,MAAM,CAAC;AAAA,UAC5C,OAAO;AACL,mBAAO,MAAM,IAAI,EAAE,KAAK,gBAAgB,SAAS,WAAW,CAAC;AAAA,UAC/D;AAAA,QACF;AAAA,QAEA,YAAY,CAAC,aAAa;AACxB,cAAI,QAAQ,UAAU;AACpB,mBAAO,YAAY,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;AAAA,UAC7C,OAAO;AACL,mBAAO,YAAY,IAAI,QAAQ;AAAA,UACjC;AAAA,QACF;AAAA,QAEA;AAAA,QACA;AAAA,QAEA,uBAAuB,MAAM;AAAA,MAC/B;AAAA,MACA;AAAA,QACE,KAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/client/MessageRuntimeClient.ts"],"sourcesContent":["import {\n resource,\n tapInlineResource,\n tapMemo,\n tapState,\n} from \"@assistant-ui/tap\";\nimport { tapApi } from \"../../utils/tap-store\";\nimport { MessageRuntime } from \"../runtime/MessageRuntime\";\nimport { tapSubscribable } from \"../util-hooks/tapSubscribable\";\nimport { ComposerClient } from \"./ComposerRuntimeClient\";\nimport { MessagePartClient } from \"./MessagePartRuntimeClient\";\nimport { tapLookupResources } from \"../../client/util-hooks/tapLookupResources\";\nimport { RefObject } from \"react\";\nimport {\n MessageClientState,\n MessageClientApi,\n} from \"../../client/types/Message\";\nimport { AttachmentRuntimeClient } from \"./AttachmentRuntimeClient\";\n\nconst MessageAttachmentClientByIndex = resource(\n ({ runtime, index }: { runtime: MessageRuntime; index: number }) => {\n const attachmentRuntime = tapMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n return tapInlineResource(\n AttachmentRuntimeClient({ runtime: attachmentRuntime }),\n );\n },\n);\n\nconst MessagePartByIndex = resource(\n ({ runtime, index }: { runtime: MessageRuntime; index: number }) => {\n const partRuntime = tapMemo(\n () => runtime.getMessagePartByIndex(index),\n [runtime, index],\n );\n return tapInlineResource(MessagePartClient({ runtime: partRuntime }));\n },\n);\n\nexport const MessageClient = resource(\n ({\n runtime,\n threadIdRef,\n }: {\n runtime: MessageRuntime;\n threadIdRef: RefObject<string>;\n }) => {\n const runtimeState = tapSubscribable(runtime);\n\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const messageIdRef = tapMemo(\n () => ({\n get current() {\n return runtime.getState().id;\n },\n }),\n [runtime],\n );\n\n const composer = tapInlineResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n messageIdRef,\n }),\n );\n\n const parts = tapLookupResources(\n runtimeState.content.map((_, idx) =>\n MessagePartByIndex({ runtime, index: idx }, { key: idx }),\n ),\n );\n\n const attachments = tapLookupResources(\n runtimeState.attachments?.map((_, idx) =>\n MessageAttachmentClientByIndex({ runtime, index: idx }, { key: idx }),\n ) ?? [],\n );\n\n const state = tapMemo<MessageClientState>(() => {\n return {\n ...(runtimeState as MessageClientState),\n\n parts: parts.state,\n composer: composer.state,\n\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n runtimeState,\n parts.state,\n composer.state,\n isCopiedState,\n isHoveringState,\n ]);\n\n return tapApi<MessageClientApi>(\n {\n getState: () => state,\n\n composer: composer.api,\n\n reload: (config) => runtime.reload(config),\n speak: () => runtime.speak(),\n stopSpeaking: () => runtime.stopSpeaking(),\n submitFeedback: (feedback) => runtime.submitFeedback(feedback),\n switchToBranch: (options) => runtime.switchToBranch(options),\n getCopyText: () => runtime.unstable_getCopyText(),\n\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.api({ index: selector.index });\n } else {\n return parts.api({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.api({ key: selector.id });\n } else {\n return attachments.api(selector);\n }\n },\n\n setIsCopied,\n setIsHovering,\n\n __internal_getRuntime: () => runtime,\n },\n {\n key: runtimeState.id,\n },\n );\n },\n);\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AAEvB,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAExC,IAAM,iCAAiC;AAAA,EACrC,CAAC,EAAE,SAAS,MAAM,MAAkD;AAClE,UAAM,oBAAoB;AAAA,MACxB,MAAM,QAAQ,qBAAqB,KAAK;AAAA,MACxC,CAAC,SAAS,KAAK;AAAA,IACjB;AACA,WAAO;AAAA,MACL,wBAAwB,EAAE,SAAS,kBAAkB,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAEA,IAAM,qBAAqB;AAAA,EACzB,CAAC,EAAE,SAAS,MAAM,MAAkD;AAClE,UAAM,cAAc;AAAA,MAClB,MAAM,QAAQ,sBAAsB,KAAK;AAAA,MACzC,CAAC,SAAS,KAAK;AAAA,IACjB;AACA,WAAO,kBAAkB,kBAAkB,EAAE,SAAS,YAAY,CAAC,CAAC;AAAA,EACtE;AACF;AAEO,IAAM,gBAAgB;AAAA,EAC3B,CAAC;AAAA,IACC;AAAA,IACA;AAAA,EACF,MAGM;AACJ,UAAM,eAAe,gBAAgB,OAAO;AAE5C,UAAM,CAAC,eAAe,WAAW,IAAI,SAAS,KAAK;AACnD,UAAM,CAAC,iBAAiB,aAAa,IAAI,SAAS,KAAK;AAEvD,UAAM,eAAe;AAAA,MACnB,OAAO;AAAA,QACL,IAAI,UAAU;AACZ,iBAAO,QAAQ,SAAS,EAAE;AAAA,QAC5B;AAAA,MACF;AAAA,MACA,CAAC,OAAO;AAAA,IACV;AAEA,UAAM,WAAW;AAAA,MACf,eAAe;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,QAAQ;AAAA,MACZ,aAAa,QAAQ;AAAA,QAAI,CAAC,GAAG,QAC3B,mBAAmB,EAAE,SAAS,OAAO,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,MAC1D;AAAA,IACF;AAEA,UAAM,cAAc;AAAA,MAClB,aAAa,aAAa;AAAA,QAAI,CAAC,GAAG,QAChC,+BAA+B,EAAE,SAAS,OAAO,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,MACtE,KAAK,CAAC;AAAA,IACR;AAEA,UAAM,QAAQ,QAA4B,MAAM;AAC9C,aAAO;AAAA,QACL,GAAI;AAAA,QAEJ,OAAO,MAAM;AAAA,QACb,UAAU,SAAS;AAAA,QAEnB,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF,GAAG;AAAA,MACD;AAAA,MACA,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL;AAAA,QACE,UAAU,MAAM;AAAA,QAEhB,UAAU,SAAS;AAAA,QAEnB,QAAQ,CAAC,WAAW,QAAQ,OAAO,MAAM;AAAA,QACzC,OAAO,MAAM,QAAQ,MAAM;AAAA,QAC3B,cAAc,MAAM,QAAQ,aAAa;AAAA,QACzC,gBAAgB,CAAC,aAAa,QAAQ,eAAe,QAAQ;AAAA,QAC7D,gBAAgB,CAAC,YAAY,QAAQ,eAAe,OAAO;AAAA,QAC3D,aAAa,MAAM,QAAQ,qBAAqB;AAAA,QAEhD,MAAM,CAAC,aAAa;AAClB,cAAI,WAAW,UAAU;AACvB,mBAAO,MAAM,IAAI,EAAE,OAAO,SAAS,MAAM,CAAC;AAAA,UAC5C,OAAO;AACL,mBAAO,MAAM,IAAI,EAAE,KAAK,cAAc,SAAS,UAAU,GAAG,CAAC;AAAA,UAC/D;AAAA,QACF;AAAA,QAEA,YAAY,CAAC,aAAa;AACxB,cAAI,QAAQ,UAAU;AACpB,mBAAO,YAAY,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;AAAA,UAC7C,OAAO;AACL,mBAAO,YAAY,IAAI,QAAQ;AAAA,UACjC;AAAA,QACF;AAAA,QAEA;AAAA,QACA;AAAA,QAEA,uBAAuB,MAAM;AAAA,MAC/B;AAAA,MACA;AAAA,QACE,KAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -31,7 +31,7 @@ var auiV0Encode = (message) => {
31
31
  case "tool-call": {
32
32
  if (!isJSONValue(part.result)) {
33
33
  console.warn(
34
- "tool-call result is not JSON! " + JSON.stringify(part)
34
+ `tool-call result is not JSON! ${JSON.stringify(part)}`
35
35
  );
36
36
  }
37
37
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/cloud/auiV0.ts"],"sourcesContent":["import { ThreadMessage } from \"../../types\";\nimport { MessageStatus } from \"../../types/AssistantTypes\";\nimport { fromThreadMessageLike } from \"../runtime-cores/external-store/ThreadMessageLike\";\nimport { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../utils/json/is-json\";\nimport { ReadonlyJSONObject, ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { ExportedMessageRepositoryItem } from \"../runtime-cores/utils/MessageRepository\";\n\ntype AuiV0MessageMessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly args: ReadonlyJSONObject;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly argsText: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n };\n\ntype AuiV0Message = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessageMessagePart[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly promptTokens: number;\n readonly completionTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nexport const auiV0Encode = (message: ThreadMessage): AuiV0Message => {\n // TODO attachments are currently intentionally ignored\n // info: ID and createdAt are ignored (we use the server value instead)\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n\n case \"reasoning\": {\n return {\n type: \"reasoning\",\n text: part.text,\n };\n }\n\n case \"source\": {\n return {\n type: \"source\",\n sourceType: part.sourceType,\n id: part.id,\n url: part.url,\n ...(part.title ? { title: part.title } : undefined),\n };\n }\n\n case \"tool-call\": {\n if (!isJSONValue(part.result)) {\n console.warn(\n \"tool-call result is not JSON! \" + JSON.stringify(part),\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? {\n args: part.args,\n }\n : { argsText: part.argsText }),\n ...(part.result\n ? { result: part.result as ReadonlyJSONValue }\n : {}),\n ...(part.isError ? { isError: true } : {}),\n };\n }\n\n default: {\n const unhandledType: \"image\" | \"file\" | \"audio\" | \"data\" = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(message.status\n ? {\n status:\n message.status?.type === \"running\"\n ? {\n type: \"incomplete\",\n reason: \"cancelled\",\n }\n : message.status,\n }\n : undefined),\n };\n};\n\nexport const auiV0Decode = (\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem => {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = fromThreadMessageLike(\n {\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n ...payload,\n },\n cloudMessage.id,\n {\n type: \"complete\",\n reason: \"unknown\",\n },\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n};\n"],"mappings":";AAEA,SAAS,6BAA6B;AAEtC,SAAS,mBAAmB;AAuDrB,IAAM,cAAc,CAAC,YAAyC;AAGnE,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ,QAAQ,IAAI,CAAC,SAAS;AACrC,YAAM,OAAO,KAAK;AAClB,cAAQ,MAAM;AAAA,QACZ,KAAK,QAAQ;AACX,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,IAAI,KAAK;AAAA,YACT,KAAK,KAAK;AAAA,YACV,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI;AAAA,UAC3C;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,cAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,oBAAQ;AAAA,cACN,mCAAmC,KAAK,UAAU,IAAI;AAAA,YACxD;AAAA,UACF;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,UAAU,KAAK;AAAA,YACf,GAAI,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,WACnC;AAAA,cACE,MAAM,KAAK;AAAA,YACb,IACA,EAAE,UAAU,KAAK,SAAS;AAAA,YAC9B,GAAI,KAAK,SACL,EAAE,QAAQ,KAAK,OAA4B,IAC3C,CAAC;AAAA,YACL,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC;AAAA,UAC1C;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,gBAAqD;AAC3D,gBAAM,IAAI;AAAA,YACR,8CAA8C,aAAa;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,UAAU,QAAQ;AAAA,IAClB,GAAI,QAAQ,SACR;AAAA,MACE,QACE,QAAQ,QAAQ,SAAS,YACrB;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,IACA,QAAQ;AAAA,IAChB,IACA;AAAA,EACN;AACF;AAEO,IAAM,cAAc,CACzB,iBACkC;AAClC,QAAM,UAAU,aAAa;AAC7B,QAAM,UAAU;AAAA,IACd;AAAA,MACE,IAAI,aAAa;AAAA,MACjB,WAAW,aAAa;AAAA,MACxB,GAAG;AAAA,IACL;AAAA,IACA,aAAa;AAAA,IACb;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU,aAAa;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/cloud/auiV0.ts"],"sourcesContent":["import { ThreadMessage } from \"../../types\";\nimport { MessageStatus } from \"../../types/AssistantTypes\";\nimport { fromThreadMessageLike } from \"../runtime-cores/external-store/ThreadMessageLike\";\nimport { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../utils/json/is-json\";\nimport { ReadonlyJSONObject, ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { ExportedMessageRepositoryItem } from \"../runtime-cores/utils/MessageRepository\";\n\ntype AuiV0MessageMessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly args: ReadonlyJSONObject;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly argsText: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n };\n\ntype AuiV0Message = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessageMessagePart[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly promptTokens: number;\n readonly completionTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nexport const auiV0Encode = (message: ThreadMessage): AuiV0Message => {\n // TODO attachments are currently intentionally ignored\n // info: ID and createdAt are ignored (we use the server value instead)\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n\n case \"reasoning\": {\n return {\n type: \"reasoning\",\n text: part.text,\n };\n }\n\n case \"source\": {\n return {\n type: \"source\",\n sourceType: part.sourceType,\n id: part.id,\n url: part.url,\n ...(part.title ? { title: part.title } : undefined),\n };\n }\n\n case \"tool-call\": {\n if (!isJSONValue(part.result)) {\n console.warn(\n `tool-call result is not JSON! ${JSON.stringify(part)}`,\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? {\n args: part.args,\n }\n : { argsText: part.argsText }),\n ...(part.result\n ? { result: part.result as ReadonlyJSONValue }\n : {}),\n ...(part.isError ? { isError: true } : {}),\n };\n }\n\n default: {\n const unhandledType: \"image\" | \"file\" | \"audio\" | \"data\" = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(message.status\n ? {\n status:\n message.status?.type === \"running\"\n ? {\n type: \"incomplete\",\n reason: \"cancelled\",\n }\n : message.status,\n }\n : undefined),\n };\n};\n\nexport const auiV0Decode = (\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem => {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = fromThreadMessageLike(\n {\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n ...payload,\n },\n cloudMessage.id,\n {\n type: \"complete\",\n reason: \"unknown\",\n },\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n};\n"],"mappings":";AAEA,SAAS,6BAA6B;AAEtC,SAAS,mBAAmB;AAuDrB,IAAM,cAAc,CAAC,YAAyC;AAGnE,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ,QAAQ,IAAI,CAAC,SAAS;AACrC,YAAM,OAAO,KAAK;AAClB,cAAQ,MAAM;AAAA,QACZ,KAAK,QAAQ;AACX,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,IAAI,KAAK;AAAA,YACT,KAAK,KAAK;AAAA,YACV,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI;AAAA,UAC3C;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,cAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,oBAAQ;AAAA,cACN,iCAAiC,KAAK,UAAU,IAAI,CAAC;AAAA,YACvD;AAAA,UACF;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,UAAU,KAAK;AAAA,YACf,GAAI,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,WACnC;AAAA,cACE,MAAM,KAAK;AAAA,YACb,IACA,EAAE,UAAU,KAAK,SAAS;AAAA,YAC9B,GAAI,KAAK,SACL,EAAE,QAAQ,KAAK,OAA4B,IAC3C,CAAC;AAAA,YACL,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC;AAAA,UAC1C;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,gBAAqD;AAC3D,gBAAM,IAAI;AAAA,YACR,8CAA8C,aAAa;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,UAAU,QAAQ;AAAA,IAClB,GAAI,QAAQ,SACR;AAAA,MACE,QACE,QAAQ,QAAQ,SAAS,YACrB;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,IACA,QAAQ;AAAA,IAChB,IACA;AAAA,EACN;AACF;AAEO,IAAM,cAAc,CACzB,iBACkC;AAClC,QAAM,UAAU,aAAa;AAC7B,QAAM,UAAU;AAAA,IACd;AAAA,MACE,IAAI,aAAa;AAAA,MACjB,WAAW,aAAa;AAAA,MACxB,GAAG;AAAA,IACL;AAAA,IACA,aAAa;AAAA,IACb;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU,aAAa;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useCloudThreadListRuntime.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/cloud/useCloudThreadListRuntime.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9C,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAC;IAEtB,WAAW,EAAE,MAAM,gBAAgB,CAAC;IAEpC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,oCAGvC,sBAAsB,qBAQxB,CAAC"}
1
+ {"version":3,"file":"useCloudThreadListRuntime.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/cloud/useCloudThreadListRuntime.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9C,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAC;IAEtB,WAAW,EAAE,MAAM,gBAAgB,CAAC;IAEpC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,oCAGvC,sBAAsB,qBASxB,CAAC"}
@@ -10,7 +10,8 @@ var useCloudThreadListRuntime = ({
10
10
  const adapter = useCloudThreadListAdapter(adapterOptions);
11
11
  const runtime = useRemoteThreadListRuntime({
12
12
  runtimeHook,
13
- adapter
13
+ adapter,
14
+ allowNesting: true
14
15
  });
15
16
  return runtime;
16
17
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/cloud/useCloudThreadListRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport { AssistantCloud } from \"assistant-cloud\";\nimport { AssistantRuntime } from \"../runtime\";\nimport { useRemoteThreadListRuntime } from \"../runtime-cores/remote-thread-list/useRemoteThreadListRuntime\";\nimport { useCloudThreadListAdapter } from \"../runtime-cores/remote-thread-list/adapter/cloud\";\n\ntype ThreadData = {\n externalId: string;\n};\n\ntype CloudThreadListAdapter = {\n cloud: AssistantCloud;\n\n runtimeHook: () => AssistantRuntime;\n\n create?(): Promise<ThreadData>;\n delete?(threadId: string): Promise<void>;\n};\n\nexport const useCloudThreadListRuntime = ({\n runtimeHook,\n ...adapterOptions\n}: CloudThreadListAdapter) => {\n const adapter = useCloudThreadListAdapter(adapterOptions);\n const runtime = useRemoteThreadListRuntime({\n runtimeHook: runtimeHook,\n adapter,\n });\n\n return runtime;\n};\n"],"mappings":";;;AAIA,SAAS,kCAAkC;AAC3C,SAAS,iCAAiC;AAenC,IAAM,4BAA4B,CAAC;AAAA,EACxC;AAAA,EACA,GAAG;AACL,MAA8B;AAC5B,QAAM,UAAU,0BAA0B,cAAc;AACxD,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/cloud/useCloudThreadListRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport { AssistantCloud } from \"assistant-cloud\";\nimport { AssistantRuntime } from \"../runtime\";\nimport { useRemoteThreadListRuntime } from \"../runtime-cores/remote-thread-list/useRemoteThreadListRuntime\";\nimport { useCloudThreadListAdapter } from \"../runtime-cores/remote-thread-list/adapter/cloud\";\n\ntype ThreadData = {\n externalId: string;\n};\n\ntype CloudThreadListAdapter = {\n cloud: AssistantCloud;\n\n runtimeHook: () => AssistantRuntime;\n\n create?(): Promise<ThreadData>;\n delete?(threadId: string): Promise<void>;\n};\n\nexport const useCloudThreadListRuntime = ({\n runtimeHook,\n ...adapterOptions\n}: CloudThreadListAdapter) => {\n const adapter = useCloudThreadListAdapter(adapterOptions);\n const runtime = useRemoteThreadListRuntime({\n runtimeHook: runtimeHook,\n adapter,\n allowNesting: true,\n });\n\n return runtime;\n};\n"],"mappings":";;;AAIA,SAAS,kCAAkC;AAC3C,SAAS,iCAAiC;AAenC,IAAM,4BAA4B,CAAC;AAAA,EACxC;AAAA,EACA,GAAG;AACL,MAA8B;AAC5B,QAAM,UAAU,0BAA0B,cAAc;AACxD,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EAChB,CAAC;AAED,SAAO;AACT;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantRuntime.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/runtime/AssistantRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAA6B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAEvC;;;;OAIG;IACH,iBAAiB,IAAI,IAAI,CAAC;IAE1B;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC;;;;OAIG;IACH,4BAA4B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAE1E;;OAEG;IACH,2BAA2B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAEzE;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,qBAAa,oBAAqB,YAAW,gBAAgB;IAQxC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPzC,SAAgB,OAAO,wBAAC;IACxB,IAAW,UAAU,0BAEpB;IAED,SAAgB,OAAO,EAAE,aAAa,CAAC;gBAEH,KAAK,EAAE,oBAAoB;IAO/D,SAAS,CAAC,sBAAsB;IAUhC,IAAW,MAAM,kBAEhB;IAEM,iBAAiB;IAIjB,cAAc,CAAC,QAAQ,EAAE,MAAM;IAI/B,4BAA4B,CAAC,QAAQ,EAAE,oBAAoB;IAI3D,2BAA2B,CAAC,QAAQ,EAAE,oBAAoB;IAI1D,KAAK,CAAC,EACX,eAAe,GAChB,GAAE;QAAE,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAA;KAAO;CAKlD"}
1
+ {"version":3,"file":"AssistantRuntime.d.ts","sourceRoot":"","sources":["../../../src/legacy-runtime/runtime/AssistantRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAA6B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAEvC;;;;OAIG;IACH,iBAAiB,IAAI,IAAI,CAAC;IAE1B;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC;;;;OAIG;IACH,4BAA4B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAE1E;;OAEG;IACH,2BAA2B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAEzE;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,qBAAa,oBAAqB,YAAW,gBAAgB;IAQxC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPzC,SAAgB,OAAO,wBAAC;IACxB,IAAW,UAAU,0BAEpB;IAED,SAAgB,OAAO,EAAE,aAAa,CAAC;gBAEH,KAAK,EAAE,oBAAoB;IAO/D,SAAS,CAAC,sBAAsB;IAUhC,IAAW,MAAM,kBAEhB;IAEM,iBAAiB;IAIjB,cAAc,CAAC,QAAQ,EAAE,MAAM;IAI/B,4BAA4B,CAAC,QAAQ,EAAE,oBAAoB;IAI3D,2BAA2B,CAAC,QAAQ,EAAE,oBAAoB;IAI1D,KAAK,CAAC,EACX,eAAe,GAChB,GAAE;QACD,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;KAClC;CAKP"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/runtime/AssistantRuntime.ts"],"sourcesContent":["import { AssistantRuntimeCore } from \"../runtime-cores/core/AssistantRuntimeCore\";\nimport { ModelContextProvider } from \"../../model-context/ModelContextTypes\";\nimport { ThreadRuntime } from \"./ThreadRuntime\";\nimport { Unsubscribe } from \"../../types\";\nimport { ThreadListRuntime, ThreadListRuntimeImpl } from \"./ThreadListRuntime\";\nimport { ExportedMessageRepository, ThreadMessageLike } from \"../runtime-cores\";\n\nexport type AssistantRuntime = {\n /**\n * The threads in this assistant.\n */\n readonly threads: ThreadListRuntime;\n\n /**\n * The currently selected main thread. Equivalent to `threads.main`.\n */\n readonly thread: ThreadRuntime;\n\n /**\n * @deprecated This field was renamed to `threads`.\n */\n readonly threadList: ThreadListRuntime;\n\n /**\n * Switch to a new thread.\n *\n * @deprecated This method was moved to `threads.switchToNewThread`.\n */\n switchToNewThread(): void;\n\n /**\n * Switch to a thread.\n *\n * @param threadId The thread ID to switch to.\n * @deprecated This method was moved to `threads.switchToThread`.\n */\n switchToThread(threadId: string): void;\n\n /**\n * Register a model context provider. Model context providers are configuration such as system message, temperature, etc. that are set in the frontend.\n *\n * @param provider The model context provider to register.\n */\n registerModelContextProvider(provider: ModelContextProvider): Unsubscribe;\n\n /**\n * @deprecated This method was renamed to `registerModelContextProvider`.\n */\n registerModelConfigProvider(provider: ModelContextProvider): Unsubscribe;\n\n /**\n * @deprecated Use `runtime.thread.reset(initialMessages)`.\n */\n reset: unknown; // make it a type error\n};\n\nexport class AssistantRuntimeImpl implements AssistantRuntime {\n public readonly threads;\n public get threadList() {\n return this.threads;\n }\n\n public readonly _thread: ThreadRuntime;\n\n public constructor(private readonly _core: AssistantRuntimeCore) {\n this.threads = new ThreadListRuntimeImpl(_core.threads);\n this._thread = this.threads.main;\n\n this.__internal_bindMethods();\n }\n\n protected __internal_bindMethods() {\n this.switchToNewThread = this.switchToNewThread.bind(this);\n this.switchToThread = this.switchToThread.bind(this);\n this.registerModelContextProvider =\n this.registerModelContextProvider.bind(this);\n this.registerModelConfigProvider =\n this.registerModelConfigProvider.bind(this);\n this.reset = this.reset.bind(this);\n }\n\n public get thread() {\n return this._thread;\n }\n\n public switchToNewThread() {\n return this._core.threads.switchToNewThread();\n }\n\n public switchToThread(threadId: string) {\n return this._core.threads.switchToThread(threadId);\n }\n\n public registerModelContextProvider(provider: ModelContextProvider) {\n return this._core.registerModelContextProvider(provider);\n }\n\n public registerModelConfigProvider(provider: ModelContextProvider) {\n return this.registerModelContextProvider(provider);\n }\n\n public reset({\n initialMessages,\n }: { initialMessages?: ThreadMessageLike[] } = {}) {\n return this._core.threads\n .getMainThreadRuntimeCore()\n .import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n}\n"],"mappings":";AAIA,SAA4B,6BAA6B;AACzD,SAAS,iCAAoD;AAmDtD,IAAM,uBAAN,MAAuD;AAAA,EAQrD,YAA6B,OAA6B;AAA7B;AAClC,SAAK,UAAU,IAAI,sBAAsB,MAAM,OAAO;AACtD,SAAK,UAAU,KAAK,QAAQ;AAE5B,SAAK,uBAAuB;AAAA,EAC9B;AAAA,EAZgB;AAAA,EAChB,IAAW,aAAa;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEgB;AAAA,EASN,yBAAyB;AACjC,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,+BACH,KAAK,6BAA6B,KAAK,IAAI;AAC7C,SAAK,8BACH,KAAK,4BAA4B,KAAK,IAAI;AAC5C,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,EACnC;AAAA,EAEA,IAAW,SAAS;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,oBAAoB;AACzB,WAAO,KAAK,MAAM,QAAQ,kBAAkB;AAAA,EAC9C;AAAA,EAEO,eAAe,UAAkB;AACtC,WAAO,KAAK,MAAM,QAAQ,eAAe,QAAQ;AAAA,EACnD;AAAA,EAEO,6BAA6B,UAAgC;AAClE,WAAO,KAAK,MAAM,6BAA6B,QAAQ;AAAA,EACzD;AAAA,EAEO,4BAA4B,UAAgC;AACjE,WAAO,KAAK,6BAA6B,QAAQ;AAAA,EACnD;AAAA,EAEO,MAAM;AAAA,IACX;AAAA,EACF,IAA+C,CAAC,GAAG;AACjD,WAAO,KAAK,MAAM,QACf,yBAAyB,EACzB,OAAO,0BAA0B,UAAU,mBAAmB,CAAC,CAAC,CAAC;AAAA,EACtE;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/runtime/AssistantRuntime.ts"],"sourcesContent":["import { AssistantRuntimeCore } from \"../runtime-cores/core/AssistantRuntimeCore\";\nimport { ModelContextProvider } from \"../../model-context/ModelContextTypes\";\nimport { ThreadRuntime } from \"./ThreadRuntime\";\nimport { Unsubscribe } from \"../../types\";\nimport { ThreadListRuntime, ThreadListRuntimeImpl } from \"./ThreadListRuntime\";\nimport { ExportedMessageRepository, ThreadMessageLike } from \"../runtime-cores\";\n\nexport type AssistantRuntime = {\n /**\n * The threads in this assistant.\n */\n readonly threads: ThreadListRuntime;\n\n /**\n * The currently selected main thread. Equivalent to `threads.main`.\n */\n readonly thread: ThreadRuntime;\n\n /**\n * @deprecated This field was renamed to `threads`.\n */\n readonly threadList: ThreadListRuntime;\n\n /**\n * Switch to a new thread.\n *\n * @deprecated This method was moved to `threads.switchToNewThread`.\n */\n switchToNewThread(): void;\n\n /**\n * Switch to a thread.\n *\n * @param threadId The thread ID to switch to.\n * @deprecated This method was moved to `threads.switchToThread`.\n */\n switchToThread(threadId: string): void;\n\n /**\n * Register a model context provider. Model context providers are configuration such as system message, temperature, etc. that are set in the frontend.\n *\n * @param provider The model context provider to register.\n */\n registerModelContextProvider(provider: ModelContextProvider): Unsubscribe;\n\n /**\n * @deprecated This method was renamed to `registerModelContextProvider`.\n */\n registerModelConfigProvider(provider: ModelContextProvider): Unsubscribe;\n\n /**\n * @deprecated Use `runtime.thread.reset(initialMessages)`.\n */\n reset: unknown; // make it a type error\n};\n\nexport class AssistantRuntimeImpl implements AssistantRuntime {\n public readonly threads;\n public get threadList() {\n return this.threads;\n }\n\n public readonly _thread: ThreadRuntime;\n\n public constructor(private readonly _core: AssistantRuntimeCore) {\n this.threads = new ThreadListRuntimeImpl(_core.threads);\n this._thread = this.threads.main;\n\n this.__internal_bindMethods();\n }\n\n protected __internal_bindMethods() {\n this.switchToNewThread = this.switchToNewThread.bind(this);\n this.switchToThread = this.switchToThread.bind(this);\n this.registerModelContextProvider =\n this.registerModelContextProvider.bind(this);\n this.registerModelConfigProvider =\n this.registerModelConfigProvider.bind(this);\n this.reset = this.reset.bind(this);\n }\n\n public get thread() {\n return this._thread;\n }\n\n public switchToNewThread() {\n return this._core.threads.switchToNewThread();\n }\n\n public switchToThread(threadId: string) {\n return this._core.threads.switchToThread(threadId);\n }\n\n public registerModelContextProvider(provider: ModelContextProvider) {\n return this._core.registerModelContextProvider(provider);\n }\n\n public registerModelConfigProvider(provider: ModelContextProvider) {\n return this.registerModelContextProvider(provider);\n }\n\n public reset({\n initialMessages,\n }: {\n initialMessages?: ThreadMessageLike[];\n } = {}) {\n return this._core.threads\n .getMainThreadRuntimeCore()\n .import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n}\n"],"mappings":";AAIA,SAA4B,6BAA6B;AACzD,SAAS,iCAAoD;AAmDtD,IAAM,uBAAN,MAAuD;AAAA,EAQrD,YAA6B,OAA6B;AAA7B;AAClC,SAAK,UAAU,IAAI,sBAAsB,MAAM,OAAO;AACtD,SAAK,UAAU,KAAK,QAAQ;AAE5B,SAAK,uBAAuB;AAAA,EAC9B;AAAA,EAZgB;AAAA,EAChB,IAAW,aAAa;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEgB;AAAA,EASN,yBAAyB;AACjC,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AACzD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,+BACH,KAAK,6BAA6B,KAAK,IAAI;AAC7C,SAAK,8BACH,KAAK,4BAA4B,KAAK,IAAI;AAC5C,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,EACnC;AAAA,EAEA,IAAW,SAAS;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,oBAAoB;AACzB,WAAO,KAAK,MAAM,QAAQ,kBAAkB;AAAA,EAC9C;AAAA,EAEO,eAAe,UAAkB;AACtC,WAAO,KAAK,MAAM,QAAQ,eAAe,QAAQ;AAAA,EACnD;AAAA,EAEO,6BAA6B,UAAgC;AAClE,WAAO,KAAK,MAAM,6BAA6B,QAAQ;AAAA,EACzD;AAAA,EAEO,4BAA4B,UAAgC;AACjE,WAAO,KAAK,6BAA6B,QAAQ;AAAA,EACnD;AAAA,EAEO,MAAM;AAAA,IACX;AAAA,EACF,IAEI,CAAC,GAAG;AACN,WAAO,KAAK,MAAM,QACf,yBAAyB,EACzB,OAAO,0BAA0B,UAAU,mBAAmB,CAAC,CAAC,CAAC;AAAA,EACtE;AACF;","names":[]}
@@ -146,7 +146,7 @@ var ThreadComposerRuntimeImpl = class extends ComposerRuntimeImpl {
146
146
  ...this.path,
147
147
  attachmentSource: "thread-composer",
148
148
  attachmentSelector: { type: "index", index: idx },
149
- ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`
149
+ ref: `${this.path.ref}${this.path.ref}.attachments[${idx}]`
150
150
  },
151
151
  getState: () => {
152
152
  const attachments = this.getState().attachments;
@@ -203,7 +203,7 @@ var EditComposerRuntimeImpl = class extends ComposerRuntimeImpl {
203
203
  ...this.path,
204
204
  attachmentSource: "edit-composer",
205
205
  attachmentSelector: { type: "index", index: idx },
206
- ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`
206
+ ref: `${this.path.ref}${this.path.ref}.attachments[${idx}]`
207
207
  },
208
208
  getState: () => {
209
209
  const attachments = this.getState().attachments;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/legacy-runtime/runtime/ComposerRuntime.ts"],"sourcesContent":["import { Attachment, PendingAttachment } from \"../../types/AttachmentTypes\";\nimport {\n ComposerRuntimeCore,\n ComposerRuntimeEventType,\n ThreadComposerRuntimeCore,\n} from \"../runtime-cores/core/ComposerRuntimeCore\";\nimport { Unsubscribe } from \"../../types\";\n\nimport { LazyMemoizeSubject } from \"./subscribable/LazyMemoizeSubject\";\nimport {\n AttachmentRuntime,\n AttachmentState,\n EditComposerAttachmentRuntimeImpl,\n ThreadComposerAttachmentRuntimeImpl,\n} from \"./AttachmentRuntime\";\nimport { ShallowMemoizeSubject } from \"./subscribable/ShallowMemoizeSubject\";\nimport { SKIP_UPDATE } from \"./subscribable/SKIP_UPDATE\";\nimport { ComposerRuntimePath } from \"./RuntimePathTypes\";\nimport { MessageRole, RunConfig } from \"../../types/AssistantTypes\";\nimport { EventSubscriptionSubject } from \"./subscribable/EventSubscriptionSubject\";\nimport type {\n ThreadComposerRuntimeCoreBinding,\n EditComposerRuntimeCoreBinding,\n ComposerRuntimeCoreBinding,\n} from \"./RuntimeBindings\";\n\nexport type {\n ThreadComposerRuntimeCoreBinding,\n EditComposerRuntimeCoreBinding,\n ComposerRuntimeCoreBinding,\n};\n\ntype BaseComposerState = {\n readonly canCancel: boolean;\n readonly isEditing: boolean;\n readonly isEmpty: boolean;\n\n readonly text: string;\n readonly role: MessageRole;\n readonly attachments: readonly Attachment[];\n readonly runConfig: RunConfig;\n\n readonly attachmentAccept: string;\n};\n\nexport type ThreadComposerState = BaseComposerState & {\n readonly type: \"thread\";\n\n readonly attachments: readonly PendingAttachment[];\n};\n\nexport type EditComposerState = BaseComposerState & {\n readonly type: \"edit\";\n};\n\nexport type ComposerState = ThreadComposerState | EditComposerState;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nconst EMPTY_OBJECT = Object.freeze({});\nconst getThreadComposerState = (\n runtime: ThreadComposerRuntimeCore | undefined,\n): ThreadComposerState => {\n return Object.freeze({\n type: \"thread\",\n\n isEditing: runtime?.isEditing ?? false,\n canCancel: runtime?.canCancel ?? false,\n isEmpty: runtime?.isEmpty ?? true,\n\n attachments: runtime?.attachments ?? EMPTY_ARRAY,\n text: runtime?.text ?? \"\",\n role: runtime?.role ?? \"user\",\n runConfig: runtime?.runConfig ?? EMPTY_OBJECT,\n attachmentAccept: runtime?.attachmentAccept ?? \"\",\n\n value: runtime?.text ?? \"\",\n });\n};\n\nconst getEditComposerState = (\n runtime: ComposerRuntimeCore | undefined,\n): EditComposerState => {\n return Object.freeze({\n type: \"edit\",\n\n isEditing: runtime?.isEditing ?? false,\n canCancel: runtime?.canCancel ?? false,\n isEmpty: runtime?.isEmpty ?? true,\n\n text: runtime?.text ?? \"\",\n role: runtime?.role ?? \"user\",\n attachments: runtime?.attachments ?? EMPTY_ARRAY,\n runConfig: runtime?.runConfig ?? EMPTY_OBJECT,\n attachmentAccept: runtime?.attachmentAccept ?? \"\",\n\n value: runtime?.text ?? \"\",\n });\n};\n\nexport type ComposerRuntime = {\n readonly path: ComposerRuntimePath;\n readonly type: \"edit\" | \"thread\";\n\n /**\n * Get the current state of the composer. Includes any data that has been added to the composer.\n */\n getState(): ComposerState;\n\n /**\n * Given a standard js File object, add it to the composer. A composer can have multiple attachments.\n * @param file The file to add to the composer.\n */\n addAttachment(file: File): Promise<void>;\n\n /**\n * Set the text of the composer.\n * @param text The text to set in the composer.\n */\n setText(text: string): void;\n\n /**\n * Set the role of the composer. For instance, if you'd like a specific message to have the 'assistant' role, you can do so here.\n * @param role The role to set in the composer.\n */\n setRole(role: MessageRole): void;\n\n /**\n * Set the run config of the composer. This is used to send custom configuration data to the model.\n * Within your backend, you can access this data using the `runConfig` object.\n * Example:\n * ```ts\n * composerRuntime.setRunConfig({\n * custom: { customField: \"customValue\" }\n * });\n * ```\n * @param runConfig The run config to set in the composer.\n */\n setRunConfig(runConfig: RunConfig): void;\n\n /**\n * Reset the composer. This will clear the entire state of the composer, including all text and attachments.\n */\n reset(): Promise<void>;\n\n /**\n * Clear all attachments from the composer.\n */\n clearAttachments(): Promise<void>;\n\n /**\n * Send a message. This will send whatever text or attachments are in the composer.\n */\n send(): void;\n\n /**\n * Cancel the current run. In edit mode, this will exit edit mode.\n */\n cancel(): void;\n\n /**\n * Listens for changes to the composer state.\n * @param callback The callback to call when the composer state changes.\n */\n subscribe(callback: () => void): Unsubscribe;\n\n /**\n * Get an attachment by index.\n * @param idx The index of the attachment to get.\n */\n getAttachmentByIndex(idx: number): AttachmentRuntime;\n\n /**\n * @deprecated This API is still under active development and might change without notice.\n */\n unstable_on(\n event: ComposerRuntimeEventType,\n callback: () => void,\n ): Unsubscribe;\n};\n\nexport abstract class ComposerRuntimeImpl implements ComposerRuntime {\n public get path() {\n return this._core.path;\n }\n\n public abstract get type(): \"edit\" | \"thread\";\n\n constructor(protected _core: ComposerRuntimeCoreBinding) {}\n\n protected __internal_bindMethods() {\n this.setText = this.setText.bind(this);\n this.setRunConfig = this.setRunConfig.bind(this);\n this.getState = this.getState.bind(this);\n this.subscribe = this.subscribe.bind(this);\n this.addAttachment = this.addAttachment.bind(this);\n this.reset = this.reset.bind(this);\n this.clearAttachments = this.clearAttachments.bind(this);\n this.send = this.send.bind(this);\n this.cancel = this.cancel.bind(this);\n this.setRole = this.setRole.bind(this);\n this.getAttachmentByIndex = this.getAttachmentByIndex.bind(this);\n this.unstable_on = this.unstable_on.bind(this);\n }\n\n public abstract getState(): ComposerState;\n\n public setText(text: string) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.setText(text);\n }\n\n public setRunConfig(runConfig: RunConfig) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.setRunConfig(runConfig);\n }\n\n public addAttachment(file: File) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n return core.addAttachment(file);\n }\n\n public reset() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n return core.reset();\n }\n\n public clearAttachments() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n return core.clearAttachments();\n }\n\n public send() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.send();\n }\n\n public cancel() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.cancel();\n }\n\n public setRole(role: MessageRole) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.setRole(role);\n }\n\n public subscribe(callback: () => void) {\n return this._core.subscribe(callback);\n }\n\n private _eventSubscriptionSubjects = new Map<\n string,\n EventSubscriptionSubject<ComposerRuntimeEventType>\n >();\n\n public unstable_on(\n event: ComposerRuntimeEventType,\n callback: () => void,\n ): Unsubscribe {\n let subject = this._eventSubscriptionSubjects.get(event);\n if (!subject) {\n subject = new EventSubscriptionSubject({\n event: event,\n binding: this._core,\n });\n this._eventSubscriptionSubjects.set(event, subject);\n }\n return subject.subscribe(callback);\n }\n\n public abstract getAttachmentByIndex(idx: number): AttachmentRuntime;\n}\n\nexport type ThreadComposerRuntime = Omit<\n ComposerRuntime,\n \"getState\" | \"getAttachmentByIndex\"\n> & {\n readonly path: ComposerRuntimePath & { composerSource: \"thread\" };\n readonly type: \"thread\";\n getState(): ThreadComposerState;\n\n getAttachmentByIndex(\n idx: number,\n ): AttachmentRuntime & { source: \"thread-composer\" };\n};\n\nexport class ThreadComposerRuntimeImpl\n extends ComposerRuntimeImpl\n implements ThreadComposerRuntime\n{\n public override get path() {\n return this._core.path as ComposerRuntimePath & {\n composerSource: \"thread\";\n };\n }\n\n public get type() {\n return \"thread\" as const;\n }\n\n private _getState;\n\n constructor(core: ThreadComposerRuntimeCoreBinding) {\n const stateBinding = new LazyMemoizeSubject({\n path: core.path,\n getState: () => getThreadComposerState(core.getState()),\n subscribe: (callback) => core.subscribe(callback),\n });\n super({\n path: core.path,\n getState: () => core.getState(),\n subscribe: (callback) => stateBinding.subscribe(callback),\n });\n this._getState = stateBinding.getState.bind(stateBinding);\n\n this.__internal_bindMethods();\n }\n\n public override getState(): ThreadComposerState {\n return this._getState();\n }\n\n public getAttachmentByIndex(idx: number) {\n return new ThreadComposerAttachmentRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ...this.path,\n attachmentSource: \"thread-composer\",\n attachmentSelector: { type: \"index\", index: idx },\n ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`,\n },\n getState: () => {\n const attachments = this.getState().attachments;\n const attachment = attachments[idx];\n if (!attachment) return SKIP_UPDATE;\n\n return {\n ...attachment,\n source: \"thread-composer\",\n } satisfies AttachmentState & { source: \"thread-composer\" };\n },\n subscribe: (callback) => this._core.subscribe(callback),\n }),\n this._core,\n );\n }\n}\n\nexport type EditComposerRuntime = Omit<\n ComposerRuntime,\n \"getState\" | \"getAttachmentByIndex\"\n> & {\n readonly path: ComposerRuntimePath & { composerSource: \"edit\" };\n readonly type: \"edit\";\n\n getState(): EditComposerState;\n beginEdit(): void;\n\n getAttachmentByIndex(\n idx: number,\n ): AttachmentRuntime & { source: \"edit-composer\" };\n};\n\nexport class EditComposerRuntimeImpl\n extends ComposerRuntimeImpl\n implements EditComposerRuntime\n{\n public override get path() {\n return this._core.path as ComposerRuntimePath & { composerSource: \"edit\" };\n }\n\n public get type() {\n return \"edit\" as const;\n }\n\n private _getState;\n constructor(\n core: EditComposerRuntimeCoreBinding,\n private _beginEdit: () => void,\n ) {\n const stateBinding = new LazyMemoizeSubject({\n path: core.path,\n getState: () => getEditComposerState(core.getState()),\n subscribe: (callback) => core.subscribe(callback),\n });\n\n super({\n path: core.path,\n getState: () => core.getState(),\n subscribe: (callback) => stateBinding.subscribe(callback),\n });\n\n this._getState = stateBinding.getState.bind(stateBinding);\n\n this.__internal_bindMethods();\n }\n\n public override __internal_bindMethods() {\n super.__internal_bindMethods();\n this.beginEdit = this.beginEdit.bind(this);\n }\n\n public override getState(): EditComposerState {\n return this._getState();\n }\n\n public beginEdit() {\n this._beginEdit();\n }\n\n public getAttachmentByIndex(idx: number) {\n return new EditComposerAttachmentRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ...this.path,\n attachmentSource: \"edit-composer\",\n attachmentSelector: { type: \"index\", index: idx },\n ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`,\n },\n getState: () => {\n const attachments = this.getState().attachments;\n const attachment = attachments[idx];\n if (!attachment) return SKIP_UPDATE;\n\n return {\n ...attachment,\n source: \"edit-composer\",\n } satisfies AttachmentState & { source: \"edit-composer\" };\n },\n subscribe: (callback) => this._core.subscribe(callback),\n }),\n this._core,\n );\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/legacy-runtime/runtime/ComposerRuntime.ts"],"sourcesContent":["import { Attachment, PendingAttachment } from \"../../types/AttachmentTypes\";\nimport {\n ComposerRuntimeCore,\n ComposerRuntimeEventType,\n ThreadComposerRuntimeCore,\n} from \"../runtime-cores/core/ComposerRuntimeCore\";\nimport { Unsubscribe } from \"../../types\";\n\nimport { LazyMemoizeSubject } from \"./subscribable/LazyMemoizeSubject\";\nimport {\n AttachmentRuntime,\n AttachmentState,\n EditComposerAttachmentRuntimeImpl,\n ThreadComposerAttachmentRuntimeImpl,\n} from \"./AttachmentRuntime\";\nimport { ShallowMemoizeSubject } from \"./subscribable/ShallowMemoizeSubject\";\nimport { SKIP_UPDATE } from \"./subscribable/SKIP_UPDATE\";\nimport { ComposerRuntimePath } from \"./RuntimePathTypes\";\nimport { MessageRole, RunConfig } from \"../../types/AssistantTypes\";\nimport { EventSubscriptionSubject } from \"./subscribable/EventSubscriptionSubject\";\nimport type {\n ThreadComposerRuntimeCoreBinding,\n EditComposerRuntimeCoreBinding,\n ComposerRuntimeCoreBinding,\n} from \"./RuntimeBindings\";\n\nexport type {\n ThreadComposerRuntimeCoreBinding,\n EditComposerRuntimeCoreBinding,\n ComposerRuntimeCoreBinding,\n};\n\ntype BaseComposerState = {\n readonly canCancel: boolean;\n readonly isEditing: boolean;\n readonly isEmpty: boolean;\n\n readonly text: string;\n readonly role: MessageRole;\n readonly attachments: readonly Attachment[];\n readonly runConfig: RunConfig;\n\n readonly attachmentAccept: string;\n};\n\nexport type ThreadComposerState = BaseComposerState & {\n readonly type: \"thread\";\n\n readonly attachments: readonly PendingAttachment[];\n};\n\nexport type EditComposerState = BaseComposerState & {\n readonly type: \"edit\";\n};\n\nexport type ComposerState = ThreadComposerState | EditComposerState;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nconst EMPTY_OBJECT = Object.freeze({});\nconst getThreadComposerState = (\n runtime: ThreadComposerRuntimeCore | undefined,\n): ThreadComposerState => {\n return Object.freeze({\n type: \"thread\",\n\n isEditing: runtime?.isEditing ?? false,\n canCancel: runtime?.canCancel ?? false,\n isEmpty: runtime?.isEmpty ?? true,\n\n attachments: runtime?.attachments ?? EMPTY_ARRAY,\n text: runtime?.text ?? \"\",\n role: runtime?.role ?? \"user\",\n runConfig: runtime?.runConfig ?? EMPTY_OBJECT,\n attachmentAccept: runtime?.attachmentAccept ?? \"\",\n\n value: runtime?.text ?? \"\",\n });\n};\n\nconst getEditComposerState = (\n runtime: ComposerRuntimeCore | undefined,\n): EditComposerState => {\n return Object.freeze({\n type: \"edit\",\n\n isEditing: runtime?.isEditing ?? false,\n canCancel: runtime?.canCancel ?? false,\n isEmpty: runtime?.isEmpty ?? true,\n\n text: runtime?.text ?? \"\",\n role: runtime?.role ?? \"user\",\n attachments: runtime?.attachments ?? EMPTY_ARRAY,\n runConfig: runtime?.runConfig ?? EMPTY_OBJECT,\n attachmentAccept: runtime?.attachmentAccept ?? \"\",\n\n value: runtime?.text ?? \"\",\n });\n};\n\nexport type ComposerRuntime = {\n readonly path: ComposerRuntimePath;\n readonly type: \"edit\" | \"thread\";\n\n /**\n * Get the current state of the composer. Includes any data that has been added to the composer.\n */\n getState(): ComposerState;\n\n /**\n * Given a standard js File object, add it to the composer. A composer can have multiple attachments.\n * @param file The file to add to the composer.\n */\n addAttachment(file: File): Promise<void>;\n\n /**\n * Set the text of the composer.\n * @param text The text to set in the composer.\n */\n setText(text: string): void;\n\n /**\n * Set the role of the composer. For instance, if you'd like a specific message to have the 'assistant' role, you can do so here.\n * @param role The role to set in the composer.\n */\n setRole(role: MessageRole): void;\n\n /**\n * Set the run config of the composer. This is used to send custom configuration data to the model.\n * Within your backend, you can access this data using the `runConfig` object.\n * Example:\n * ```ts\n * composerRuntime.setRunConfig({\n * custom: { customField: \"customValue\" }\n * });\n * ```\n * @param runConfig The run config to set in the composer.\n */\n setRunConfig(runConfig: RunConfig): void;\n\n /**\n * Reset the composer. This will clear the entire state of the composer, including all text and attachments.\n */\n reset(): Promise<void>;\n\n /**\n * Clear all attachments from the composer.\n */\n clearAttachments(): Promise<void>;\n\n /**\n * Send a message. This will send whatever text or attachments are in the composer.\n */\n send(): void;\n\n /**\n * Cancel the current run. In edit mode, this will exit edit mode.\n */\n cancel(): void;\n\n /**\n * Listens for changes to the composer state.\n * @param callback The callback to call when the composer state changes.\n */\n subscribe(callback: () => void): Unsubscribe;\n\n /**\n * Get an attachment by index.\n * @param idx The index of the attachment to get.\n */\n getAttachmentByIndex(idx: number): AttachmentRuntime;\n\n /**\n * @deprecated This API is still under active development and might change without notice.\n */\n unstable_on(\n event: ComposerRuntimeEventType,\n callback: () => void,\n ): Unsubscribe;\n};\n\nexport abstract class ComposerRuntimeImpl implements ComposerRuntime {\n public get path() {\n return this._core.path;\n }\n\n public abstract get type(): \"edit\" | \"thread\";\n\n constructor(protected _core: ComposerRuntimeCoreBinding) {}\n\n protected __internal_bindMethods() {\n this.setText = this.setText.bind(this);\n this.setRunConfig = this.setRunConfig.bind(this);\n this.getState = this.getState.bind(this);\n this.subscribe = this.subscribe.bind(this);\n this.addAttachment = this.addAttachment.bind(this);\n this.reset = this.reset.bind(this);\n this.clearAttachments = this.clearAttachments.bind(this);\n this.send = this.send.bind(this);\n this.cancel = this.cancel.bind(this);\n this.setRole = this.setRole.bind(this);\n this.getAttachmentByIndex = this.getAttachmentByIndex.bind(this);\n this.unstable_on = this.unstable_on.bind(this);\n }\n\n public abstract getState(): ComposerState;\n\n public setText(text: string) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.setText(text);\n }\n\n public setRunConfig(runConfig: RunConfig) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.setRunConfig(runConfig);\n }\n\n public addAttachment(file: File) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n return core.addAttachment(file);\n }\n\n public reset() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n return core.reset();\n }\n\n public clearAttachments() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n return core.clearAttachments();\n }\n\n public send() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.send();\n }\n\n public cancel() {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.cancel();\n }\n\n public setRole(role: MessageRole) {\n const core = this._core.getState();\n if (!core) throw new Error(\"Composer is not available\");\n core.setRole(role);\n }\n\n public subscribe(callback: () => void) {\n return this._core.subscribe(callback);\n }\n\n private _eventSubscriptionSubjects = new Map<\n string,\n EventSubscriptionSubject<ComposerRuntimeEventType>\n >();\n\n public unstable_on(\n event: ComposerRuntimeEventType,\n callback: () => void,\n ): Unsubscribe {\n let subject = this._eventSubscriptionSubjects.get(event);\n if (!subject) {\n subject = new EventSubscriptionSubject({\n event: event,\n binding: this._core,\n });\n this._eventSubscriptionSubjects.set(event, subject);\n }\n return subject.subscribe(callback);\n }\n\n public abstract getAttachmentByIndex(idx: number): AttachmentRuntime;\n}\n\nexport type ThreadComposerRuntime = Omit<\n ComposerRuntime,\n \"getState\" | \"getAttachmentByIndex\"\n> & {\n readonly path: ComposerRuntimePath & { composerSource: \"thread\" };\n readonly type: \"thread\";\n getState(): ThreadComposerState;\n\n getAttachmentByIndex(\n idx: number,\n ): AttachmentRuntime & { source: \"thread-composer\" };\n};\n\nexport class ThreadComposerRuntimeImpl\n extends ComposerRuntimeImpl\n implements ThreadComposerRuntime\n{\n public override get path() {\n return this._core.path as ComposerRuntimePath & {\n composerSource: \"thread\";\n };\n }\n\n public get type() {\n return \"thread\" as const;\n }\n\n private _getState;\n\n constructor(core: ThreadComposerRuntimeCoreBinding) {\n const stateBinding = new LazyMemoizeSubject({\n path: core.path,\n getState: () => getThreadComposerState(core.getState()),\n subscribe: (callback) => core.subscribe(callback),\n });\n super({\n path: core.path,\n getState: () => core.getState(),\n subscribe: (callback) => stateBinding.subscribe(callback),\n });\n this._getState = stateBinding.getState.bind(stateBinding);\n\n this.__internal_bindMethods();\n }\n\n public override getState(): ThreadComposerState {\n return this._getState();\n }\n\n public getAttachmentByIndex(idx: number) {\n return new ThreadComposerAttachmentRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ...this.path,\n attachmentSource: \"thread-composer\",\n attachmentSelector: { type: \"index\", index: idx },\n ref: `${this.path.ref}${this.path.ref}.attachments[${idx}]`,\n },\n getState: () => {\n const attachments = this.getState().attachments;\n const attachment = attachments[idx];\n if (!attachment) return SKIP_UPDATE;\n\n return {\n ...attachment,\n source: \"thread-composer\",\n } satisfies AttachmentState & { source: \"thread-composer\" };\n },\n subscribe: (callback) => this._core.subscribe(callback),\n }),\n this._core,\n );\n }\n}\n\nexport type EditComposerRuntime = Omit<\n ComposerRuntime,\n \"getState\" | \"getAttachmentByIndex\"\n> & {\n readonly path: ComposerRuntimePath & { composerSource: \"edit\" };\n readonly type: \"edit\";\n\n getState(): EditComposerState;\n beginEdit(): void;\n\n getAttachmentByIndex(\n idx: number,\n ): AttachmentRuntime & { source: \"edit-composer\" };\n};\n\nexport class EditComposerRuntimeImpl\n extends ComposerRuntimeImpl\n implements EditComposerRuntime\n{\n public override get path() {\n return this._core.path as ComposerRuntimePath & { composerSource: \"edit\" };\n }\n\n public get type() {\n return \"edit\" as const;\n }\n\n private _getState;\n constructor(\n core: EditComposerRuntimeCoreBinding,\n private _beginEdit: () => void,\n ) {\n const stateBinding = new LazyMemoizeSubject({\n path: core.path,\n getState: () => getEditComposerState(core.getState()),\n subscribe: (callback) => core.subscribe(callback),\n });\n\n super({\n path: core.path,\n getState: () => core.getState(),\n subscribe: (callback) => stateBinding.subscribe(callback),\n });\n\n this._getState = stateBinding.getState.bind(stateBinding);\n\n this.__internal_bindMethods();\n }\n\n public override __internal_bindMethods() {\n super.__internal_bindMethods();\n this.beginEdit = this.beginEdit.bind(this);\n }\n\n public override getState(): EditComposerState {\n return this._getState();\n }\n\n public beginEdit() {\n this._beginEdit();\n }\n\n public getAttachmentByIndex(idx: number) {\n return new EditComposerAttachmentRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ...this.path,\n attachmentSource: \"edit-composer\",\n attachmentSelector: { type: \"index\", index: idx },\n ref: `${this.path.ref}${this.path.ref}.attachments[${idx}]`,\n },\n getState: () => {\n const attachments = this.getState().attachments;\n const attachment = attachments[idx];\n if (!attachment) return SKIP_UPDATE;\n\n return {\n ...attachment,\n source: \"edit-composer\",\n } satisfies AttachmentState & { source: \"edit-composer\" };\n },\n subscribe: (callback) => this._core.subscribe(callback),\n }),\n this._core,\n );\n }\n}\n"],"mappings":"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","names":[]}
@@ -49,7 +49,7 @@ var MessageRuntimeImpl = class {
49
49
  new NestedSubscriptionSubject({
50
50
  path: {
51
51
  ...this.path,
52
- ref: this.path.ref + `${this.path.ref}.composer`,
52
+ ref: `${this.path.ref}${this.path.ref}.composer`,
53
53
  composerSource: "edit"
54
54
  },
55
55
  getState: this._getEditComposerRuntimeCore,
@@ -149,7 +149,7 @@ var MessageRuntimeImpl = class {
149
149
  new ShallowMemoizeSubject({
150
150
  path: {
151
151
  ...this.path,
152
- ref: this.path.ref + `${this.path.ref}.content[${idx}]`,
152
+ ref: `${this.path.ref}${this.path.ref}.content[${idx}]`,
153
153
  messagePartSelector: { type: "index", index: idx }
154
154
  },
155
155
  getState: () => {
@@ -188,7 +188,7 @@ var MessageRuntimeImpl = class {
188
188
  new ShallowMemoizeSubject({
189
189
  path: {
190
190
  ...this.path,
191
- ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`,
191
+ ref: `${this.path.ref}${this.path.ref}.attachments[${idx}]`,
192
192
  attachmentSource: "message",
193
193
  attachmentSelector: { type: "index", index: idx }
194
194
  },