@assistant-ui/core 0.3.17 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts.map +1 -1
- package/dist/adapters/attachment.js +5 -4
- package/dist/adapters/attachment.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -2
- package/dist/internal.js +3 -2
- package/dist/model-context/frame/host.d.ts.map +1 -1
- package/dist/model-context/frame/host.js +10 -4
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.d.ts +2 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +30 -7
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
- package/dist/model-context/interactable-composer-metadata.js +16 -9
- package/dist/model-context/interactable-composer-metadata.js.map +1 -1
- package/dist/model-context/registry.d.ts.map +1 -1
- package/dist/model-context/registry.js +3 -5
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js +5 -4
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/react/client/InMemoryThreadList.js +62 -56
- package/dist/react/client/InMemoryThreadList.js.map +1 -1
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +24 -27
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +1 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +151 -141
- package/dist/react/client/RemoteThreadList.js.map +1 -1
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +18 -16
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/interactables-legacy/Interactables.js +242 -121
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +11 -9
- package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
- package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
- package/dist/react/model-context/makeAssistantTool.js +1 -1
- package/dist/react/model-context/makeAssistantTool.js.map +1 -1
- package/dist/react/model-context/useAssistantTool.d.ts +2 -2
- package/dist/react/model-context/useAssistantTool.js +1 -1
- package/dist/react/model-context/useAssistantTool.js.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.js +2 -1
- package/dist/react/model-context/useToolArgsStatus.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +16 -8
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +5 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +103 -103
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -0
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +13 -11
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +4 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +401 -34
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +2 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +75 -46
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +63 -23
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.d.ts +7 -3
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js +2 -2
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +3 -0
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +18 -14
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +4 -0
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +1 -1
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js +16 -12
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +6 -5
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +12 -5
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +1 -1
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/message-repository.d.ts +1 -0
- package/dist/runtime/utils/message-repository.d.ts.map +1 -1
- package/dist/runtime/utils/message-repository.js +15 -6
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/thread-message-like.js +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +21 -27
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/internal.d.ts +2 -2
- package/dist/runtimes/internal.js +2 -2
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +18 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +130 -42
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/title-generation.d.ts +49 -0
- package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title-generation.js +197 -0
- package/dist/runtimes/remote-thread-list/title-generation.js.map +1 -0
- package/dist/runtimes/remote-thread-list/title.d.ts +3 -1
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/title.js +9 -1
- package/dist/runtimes/remote-thread-list/title.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +10 -0
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +19 -3
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.js +2 -1
- package/dist/store/clients/model-context-client.js.map +1 -1
- package/dist/store/clients/single-thread-list.d.ts.map +1 -1
- package/dist/store/clients/single-thread-list.js +1 -0
- package/dist/store/clients/single-thread-list.js.map +1 -1
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +5 -4
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -0
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +97 -61
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -0
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +221 -144
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +54 -52
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +193 -121
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/scopes/composer.d.ts +10 -2
- package/dist/store/scopes/composer.d.ts.map +1 -1
- package/dist/store/scopes/message.d.ts +30 -1
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +2 -2
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +8 -0
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/dist/store/scopes/threads.d.ts +1 -0
- package/dist/store/scopes/threads.d.ts.map +1 -1
- package/dist/types/attachment.d.ts +2 -1
- package/dist/types/attachment.d.ts.map +1 -1
- package/dist/types/attachment.js +2 -1
- package/dist/types/attachment.js.map +1 -1
- package/dist/utils/abortable-iterable.d.ts +19 -0
- package/dist/utils/abortable-iterable.d.ts.map +1 -0
- package/dist/utils/abortable-iterable.js +72 -0
- package/dist/utils/abortable-iterable.js.map +1 -0
- package/dist/utils/composite-context-provider.d.ts.map +1 -1
- package/dist/utils/composite-context-provider.js +20 -2
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/record.d.ts +11 -0
- package/dist/utils/record.d.ts.map +1 -0
- package/dist/utils/record.js +12 -0
- package/dist/utils/record.js.map +1 -0
- package/package.json +10 -10
- package/src/adapters/attachment.test.ts +50 -1
- package/src/adapters/attachment.ts +7 -4
- package/src/index.ts +1 -0
- package/src/internal.ts +4 -0
- package/src/model-context/frame/host.test.ts +24 -0
- package/src/model-context/frame/host.ts +10 -4
- package/src/model-context/frame/provider.test.ts +71 -0
- package/src/model-context/frame/provider.ts +37 -7
- package/src/model-context/interactable-composer-metadata.test.ts +28 -0
- package/src/model-context/interactable-composer-metadata.ts +9 -3
- package/src/model-context/registry.test.ts +12 -0
- package/src/model-context/registry.ts +3 -2
- package/src/model-context/types.test.ts +25 -0
- package/src/model-context/types.ts +9 -4
- package/src/react/RuntimeAdapter.test.ts +34 -0
- package/src/react/client/InMemoryThreadList.ts +1 -0
- package/src/react/client/Interactables.test.ts +28 -0
- package/src/react/client/Interactables.ts +15 -13
- package/src/react/client/RemoteThreadList.background.test.ts +148 -6
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +42 -1
- package/src/react/client/RemoteThreadList.test.ts +345 -3
- package/src/react/client/RemoteThreadList.ts +166 -110
- package/src/react/client/Tools.ts +22 -11
- package/src/react/interactables-legacy/Interactables.ts +16 -16
- package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +9 -10
- package/src/react/model-context/makeAssistantTool.ts +2 -2
- package/src/react/model-context/useAssistantTool.ts +2 -2
- package/src/react/model-context/useToolArgsStatus.test.tsx +30 -0
- package/src/react/model-context/useToolArgsStatus.ts +2 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.destroy.test.tsx +172 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +33 -0
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +7 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +28 -5
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.load-error.test.ts +132 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +105 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +136 -111
- package/src/react/runtimes/RemoteThreadResource.test.ts +9 -0
- package/src/react/runtimes/RemoteThreadResource.ts +19 -12
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +483 -6
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +504 -68
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +15 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +1 -0
- package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +41 -0
- package/src/react/runtimes/useExternalStoreRuntime.ts +10 -4
- package/src/react/runtimes/useLocalRuntime.test.tsx +20 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.load-error.test.tsx +108 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +33 -0
- package/src/runtime/api/message-runtime.test.ts +75 -0
- package/src/runtime/api/thread-list-item-runtime.ts +10 -3
- package/src/runtime/api/thread-list-runtime.ts +21 -11
- package/src/runtime/api/thread-runtime.test.ts +78 -0
- package/src/runtime/api/thread-runtime.ts +8 -1
- package/src/runtime/base/base-composer-runtime-core.ts +36 -8
- package/src/runtime/base/base-thread-runtime-core.test.ts +55 -1
- package/src/runtime/base/base-thread-runtime-core.ts +6 -4
- package/src/runtime/interfaces/composer-runtime-core.ts +10 -5
- package/src/runtime/interfaces/thread-list-runtime-core.ts +5 -1
- package/src/runtime/utils/external-message-conversion.test.ts +68 -0
- package/src/runtime/utils/external-message-conversion.ts +1 -1
- package/src/runtime/utils/message-repository.ts +29 -17
- package/src/runtime/utils/thread-message-like.ts +1 -1
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +18 -13
- package/src/runtimes/internal.ts +1 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +128 -2
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +182 -42
- package/src/runtimes/remote-thread-list/title-generation.test.ts +602 -0
- package/src/runtimes/remote-thread-list/title-generation.ts +329 -0
- package/src/runtimes/remote-thread-list/title.test.ts +62 -0
- package/src/runtimes/remote-thread-list/title.ts +13 -0
- package/src/runtimes/remote-thread-list/types.ts +10 -0
- package/src/store/clients/external-thread.ts +48 -3
- package/src/store/clients/model-context-client.ts +5 -1
- package/src/store/clients/single-thread-list.ts +1 -0
- package/src/store/clients/suggestions.test.ts +40 -0
- package/src/store/clients/suggestions.ts +13 -10
- package/src/store/runtime-clients/composer-runtime-client.ts +42 -9
- package/src/store/runtime-clients/message-runtime-client.ts +54 -6
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +4 -2
- package/src/store/runtime-clients/thread-list-runtime-client.ts +1 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +58 -10
- package/src/store/scopes/composer.ts +16 -4
- package/src/store/scopes/message.ts +14 -0
- package/src/store/scopes/thread-list-item.ts +5 -2
- package/src/store/scopes/thread.ts +4 -0
- package/src/store/scopes/threads.ts +1 -0
- package/src/tests/MessageRepository.test.ts +116 -0
- package/src/tests/OptimisticState-list-race.test.ts +1 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-initialize-adapter-change.test.ts +38 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +47 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-title-race.test.ts +89 -0
- package/src/tests/attachment-adapters.test.ts +14 -0
- package/src/tests/base-composer-runtime-core.test.ts +39 -0
- package/src/tests/external-store-thread-list-runtime-core.test.ts +83 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +27 -18
- package/src/tests/external-thread-attachments.test.tsx +139 -0
- package/src/tests/external-thread-parity.test.tsx +23 -0
- package/src/tests/remote-thread-list-isLoading.test.ts +1 -0
- package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
- package/src/tests/thread-switch-events.test.tsx +78 -0
- package/src/tests/tools-scope-migration.test.tsx +28 -0
- package/src/types/attachment.ts +4 -0
- package/src/utils/abortable-iterable.test.ts +213 -0
- package/src/utils/abortable-iterable.ts +93 -0
- package/src/utils/composite-context-provider.test.ts +25 -0
- package/src/utils/composite-context-provider.ts +23 -2
- package/src/utils/record.test.ts +48 -0
- package/src/utils/record.ts +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-runtime-client.js","names":["Unsubscribe","ThreadRuntimeEventType","ThreadRuntime","useMemo","useEffect","RefObject","useResource","resource","withKey","liveRef","ClientOutput","useAssistantEmit","useClientLookup","useClientResource","ComposerClient","MessageClient","ThreadSuggestions","useSubscribable","ThreadState","useMessageClientById","t0","$","_c","runtime","id","threadIdRef","t1","getMessageById","messageRuntime","t2","MessageClientById","useThreadClient","runtimeState","emit","unsubscribers","threadEvents","event","unsubscribe","unstable_on","threadId","getState","push","unsub","t3","t4","composer","t5","suggestions","t6","messages","t7","m","map","state","length","isLoading","t8","capabilities","extras","isDisabled","isRunning","speech","voice","isEmpty","t9","t10","methods","t11","t12","selector","get","key","t13","t14","append","cancelRun","connectVoice","deleteMessage","disconnectVoice","export","getModelContext","getVoiceVolume","import","importExternalState","muteVoice","reset","resumeRun","startRun","stopSpeaking","subscribeVoiceVolume","unmuteVoice","message","__internal_getRuntime","ThreadClient"],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntime } from \"../../runtime/api/thread-runtime\";\nimport { useMemo, useEffect, type RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport { liveRef } from \"./liveRef\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n useAssistantEmit,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store/client\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { ThreadSuggestions } from \"../clients/suggestions\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst useMessageClientById = ({\n runtime,\n id,\n threadIdRef,\n}: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: RefObject<string>;\n}) => {\n const messageRuntime = useMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return useResource(MessageClient({ runtime: messageRuntime, threadIdRef }));\n};\n\nconst MessageClientById = resource(useMessageClientById);\n\nconst useThreadClient = ({\n runtime,\n}: {\n runtime: ThreadRuntime;\n}): ClientOutput<\"thread\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n const threadEvents: ThreadRuntimeEventType[] = [\n \"runStart\",\n \"runEnd\",\n \"initialize\",\n \"modelContextUpdate\",\n ];\n\n for (const event of threadEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n const threadId = runtime.getState()?.threadId || \"unknown\";\n emit(`thread.${event}`, {\n threadId,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n const threadIdRef = useMemo(\n () => liveRef(() => runtime.getState()!.threadId),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const suggestions = useClientResource(\n ThreadSuggestions(runtimeState.suggestions),\n );\n const messages = useClientLookup(\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef }), [\n runtime,\n m.id,\n threadIdRef,\n ]),\n ),\n );\n\n const state = useMemo<ThreadState>(() => {\n return {\n isEmpty: messages.state.length === 0 && !runtimeState.isLoading,\n isDisabled: runtimeState.isDisabled,\n isLoading: runtimeState.isLoading,\n isRunning: runtimeState.isRunning,\n capabilities: runtimeState.capabilities,\n state: runtimeState.state,\n suggestions: runtimeState.suggestions,\n extras: runtimeState.extras,\n speech: runtimeState.speech,\n voice: runtimeState.voice,\n\n composer: composer.state,\n messages: messages.state,\n };\n }, [runtimeState, messages, composer.state]);\n\n return {\n getState: () => state,\n composer: () => composer.methods,\n suggestions: () => suggestions.methods,\n append: runtime.append,\n deleteMessage: runtime.deleteMessage,\n startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\n importExternalState: runtime.importExternalState,\n cancelRun: runtime.cancelRun,\n getModelContext: runtime.getModelContext,\n export: runtime.export,\n import: runtime.import,\n reset: runtime.reset,\n stopSpeaking: runtime.stopSpeaking,\n connectVoice: runtime.connectVoice,\n disconnectVoice: runtime.disconnectVoice,\n getVoiceVolume: runtime.getVoiceVolume,\n subscribeVoiceVolume: runtime.subscribeVoiceVolume,\n muteVoice: runtime.muteVoice,\n unmuteVoice: runtime.unmuteVoice,\n message: (selector) => {\n if (\"id\" in selector) {\n return messages.get({ key: selector.id });\n } else {\n return messages.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadClient = resource(useThreadClient);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"thread-runtime-client.js","names":["Unsubscribe","ThreadRuntimeEventType","CreateAppendMessage","ThreadRuntime","useMemo","useEffect","useCallback","RefObject","useResource","resource","withKey","liveRef","ClientOutput","useAssistantEmit","useClientLookup","useClientResource","ComposerClient","MessageClient","ThreadSuggestions","useSubscribable","ThreadState","useMessageClientById","t0","$","_c","runtime","id","threadIdRef","threadId","t1","getMessageById","messageRuntime","t2","MessageClientById","useThreadClient","runtimeState","emit","unsubscribers","threadEvents","event","unsubscribe","unstable_on","getState","push","unsub","t3","t4","event_0","emitThreadEvent","t5","text","suggestions","some","suggestion","prompt","isSuggestion","t6","composer","t7","t8","messages","t9","m","map","state","length","isLoading","t10","capabilities","extras","isDisabled","isRunning","speech","voice","isEmpty","t11","t12","methods","t13","t14","message","appended","content","type","role","text_0","_temp","join","chars","attachments","undefined","append","t15","cancelRun","t16","connectVoice","t17","selector","get","key","t18","t19","deleteMessage","disconnectVoice","export","getModelContext","getVoiceVolume","import","importExternalState","muteVoice","reset","resumeRun","startRun","stopSpeaking","subscribeVoiceVolume","unmuteVoice","__internal_getRuntime","ThreadClient","part"],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type {\n CreateAppendMessage,\n ThreadRuntime,\n} from \"../../runtime/api/thread-runtime\";\nimport { useMemo, useEffect, useCallback, type RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport { liveRef } from \"./liveRef\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n useAssistantEmit,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store/client\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { ThreadSuggestions } from \"../clients/suggestions\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst useMessageClientById = ({\n runtime,\n id,\n threadIdRef,\n threadId,\n}: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: RefObject<string>;\n threadId: string;\n}) => {\n const messageRuntime = useMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return useResource(\n MessageClient({ runtime: messageRuntime, threadIdRef, threadId }),\n );\n};\n\nconst MessageClientById = resource(useMessageClientById);\n\nconst useThreadClient = ({\n runtime,\n}: {\n runtime: ThreadRuntime;\n}): ClientOutput<\"thread\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n const threadEvents: ThreadRuntimeEventType[] = [\n \"runStart\",\n \"runEnd\",\n \"initialize\",\n \"modelContextUpdate\",\n ];\n\n for (const event of threadEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n const threadId = runtime.getState()?.threadId || \"unknown\";\n emit(`thread.${event}`, {\n threadId,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n const threadIdRef = useMemo(\n () => liveRef(() => runtime.getState()!.threadId),\n [runtime],\n );\n const emitThreadEvent = (\n event: \"thread.cancelRun\" | \"thread.voiceStarted\",\n ) => {\n emit(event, { threadId: runtime.getState()!.threadId });\n };\n const isSuggestion = useCallback(\n (text: string) =>\n runtime\n .getState()!\n .suggestions.some((suggestion) => suggestion.prompt === text),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n isSuggestion,\n }),\n );\n const suggestions = useClientResource(\n ThreadSuggestions(runtimeState.suggestions),\n );\n const messages = useClientLookup(\n runtimeState.messages.map((m) =>\n withKey(\n m.id,\n MessageClientById({\n runtime,\n id: m.id,\n threadIdRef,\n threadId: runtimeState.threadId,\n }),\n [runtime, m.id, threadIdRef, runtimeState.threadId],\n ),\n ),\n );\n\n const state = useMemo<ThreadState>(() => {\n return {\n isEmpty: messages.state.length === 0 && !runtimeState.isLoading,\n isDisabled: runtimeState.isDisabled,\n isLoading: runtimeState.isLoading,\n isRunning: runtimeState.isRunning,\n capabilities: runtimeState.capabilities,\n state: runtimeState.state,\n suggestions: runtimeState.suggestions,\n extras: runtimeState.extras,\n speech: runtimeState.speech,\n voice: runtimeState.voice,\n\n composer: composer.state,\n messages: messages.state,\n };\n }, [runtimeState, messages, composer.state]);\n\n return {\n getState: () => state,\n composer: () => composer.methods,\n suggestions: () => suggestions.methods,\n append: (message) => {\n const appended: Exclude<CreateAppendMessage, string> =\n typeof message === \"string\"\n ? { content: [{ type: \"text\", text: message }] }\n : message;\n if ((appended.role ?? \"user\") === \"user\") {\n const text = appended.content\n .map((part) => (part.type === \"text\" ? part.text : \"\"))\n .join(\"\");\n emit(\"composer.send\", {\n threadId: runtime.getState()!.threadId,\n chars: text.length,\n attachments: appended.attachments?.length ?? 0,\n ...(isSuggestion(text) ? { suggestion: true } : undefined),\n });\n }\n runtime.append(message);\n },\n deleteMessage: runtime.deleteMessage,\n startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\n importExternalState: runtime.importExternalState,\n cancelRun: () => {\n if (runtimeState.isRunning) emitThreadEvent(\"thread.cancelRun\");\n runtime.cancelRun();\n },\n getModelContext: runtime.getModelContext,\n export: runtime.export,\n import: runtime.import,\n reset: runtime.reset,\n stopSpeaking: runtime.stopSpeaking,\n connectVoice: () => {\n runtime.connectVoice();\n emitThreadEvent(\"thread.voiceStarted\");\n },\n disconnectVoice: runtime.disconnectVoice,\n getVoiceVolume: runtime.getVoiceVolume,\n subscribeVoiceVolume: runtime.subscribeVoiceVolume,\n muteVoice: runtime.muteVoice,\n unmuteVoice: runtime.unmuteVoice,\n message: (selector) => {\n if (\"id\" in selector) {\n return messages.get({ key: selector.id });\n } else {\n return messages.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadClient = resource(useThreadClient);\n"],"mappings":"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"}
|
|
@@ -101,12 +101,15 @@ type ComposerMeta = {
|
|
|
101
101
|
};
|
|
102
102
|
type ComposerEvents = {
|
|
103
103
|
/**
|
|
104
|
-
* The user sent
|
|
105
|
-
* came from an edit composer.
|
|
104
|
+
* The user sent a message, from the composer or through `thread.append`.
|
|
105
|
+
* `messageId` is set when the send came from an edit composer.
|
|
106
106
|
*/
|
|
107
107
|
"composer.send": {
|
|
108
108
|
threadId: string;
|
|
109
109
|
messageId?: string;
|
|
110
|
+
chars: number;
|
|
111
|
+
attachments: number;
|
|
112
|
+
suggestion?: boolean;
|
|
110
113
|
};
|
|
111
114
|
/**
|
|
112
115
|
* An attachment was added to the composer. `messageId` is set when the
|
|
@@ -115,6 +118,7 @@ type ComposerEvents = {
|
|
|
115
118
|
"composer.attachmentAdd": {
|
|
116
119
|
threadId: string;
|
|
117
120
|
messageId?: string;
|
|
121
|
+
contentType?: string;
|
|
118
122
|
};
|
|
119
123
|
"composer.attachmentAddError": {
|
|
120
124
|
threadId: string;
|
|
@@ -122,6 +126,10 @@ type ComposerEvents = {
|
|
|
122
126
|
attachmentId?: string;
|
|
123
127
|
reason: AttachmentAddErrorReason;
|
|
124
128
|
message: string;
|
|
129
|
+
contentType?: string;
|
|
130
|
+
};
|
|
131
|
+
"composer.cancel": {
|
|
132
|
+
threadId: string;
|
|
125
133
|
};
|
|
126
134
|
};
|
|
127
135
|
type ComposerClientSchema = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer.d.ts","names":[],"sources":["../../../src/store/scopes/composer.ts"],"mappings":";;;;;;;;;KAaY,sBAAsB;;;;;;;EAOhC;;KAGU;WACD;WACA,MAAM;WACN,sBAAsB;WACtB,WAAW;WACX;;;;;;WAMA;;;;;;;;;WASA;WACA;WACA;WACA;;;;;WAMA,WAAW;;;;;WAMX,OAAO;;;;;WAMP,gBAAgB;;KAGf;EACV,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM;EACd,aAAa,WAAW;EACxB,cAAc,kBAAkB,OAAO,mBAAmB;EAC1D,oBAAoB;EACpB,WAAW;IAAY;;IAAoB;MAAe;EAC1D,SAAS;EACT,KAAK,OAAO;EACZ;EACA;;;;;EAMA;;;;EAKA;;;;EAKA,SAAS,OAAO;;;;EAKhB,UAAU;IAAY;;IAAoB;MAAe;EAEzD,0BAA0B;;KAGhB;EACV;EACA,OAAO;;KAGG;;;;;EAKV;
|
|
1
|
+
{"version":3,"file":"composer.d.ts","names":[],"sources":["../../../src/store/scopes/composer.ts"],"mappings":";;;;;;;;;KAaY,sBAAsB;;;;;;;EAOhC;;KAGU;WACD;WACA,MAAM;WACN,sBAAsB;WACtB,WAAW;WACX;;;;;;WAMA;;;;;;;;;WASA;WACA;WACA;WACA;;;;;WAMA,WAAW;;;;;WAMX,OAAO;;;;;WAMP,gBAAgB;;KAGf;EACV,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM;EACd,aAAa,WAAW;EACxB,cAAc,kBAAkB,OAAO,mBAAmB;EAC1D,oBAAoB;EACpB,WAAW;IAAY;;IAAoB;MAAe;EAC1D,SAAS;EACT,KAAK,OAAO;EACZ;EACA;;;;;EAMA;;;;EAKA;;;;EAKA,SAAS,OAAO;;;;EAKhB,UAAU;IAAY;;IAAoB;MAAe;EAEzD,0BAA0B;;KAGhB;EACV;EACA,OAAO;;KAGG;;;;;EAKV;IACE;IACA;IACA;IACA;IACA;;;;;;EAMF;IACE;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA,QAAQ;IACR;IACA;;EAEF;IAAqB;;;KAGX;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}
|
|
@@ -80,10 +80,39 @@ type MessageMeta = {
|
|
|
80
80
|
index: number;
|
|
81
81
|
};
|
|
82
82
|
};
|
|
83
|
+
type MessageEvents = {
|
|
84
|
+
/** The user asked for this assistant message to be generated again. */
|
|
85
|
+
"message.reload": {
|
|
86
|
+
threadId: string;
|
|
87
|
+
messageId: string;
|
|
88
|
+
};
|
|
89
|
+
/** The user moved to another branch at this message. */
|
|
90
|
+
"message.branchSwitched": {
|
|
91
|
+
threadId: string;
|
|
92
|
+
messageId: string;
|
|
93
|
+
};
|
|
94
|
+
/** The user copied this message. */
|
|
95
|
+
"message.copied": {
|
|
96
|
+
threadId: string;
|
|
97
|
+
messageId: string;
|
|
98
|
+
};
|
|
99
|
+
/** Speech synthesis started for this message. */
|
|
100
|
+
"message.speak": {
|
|
101
|
+
threadId: string;
|
|
102
|
+
messageId: string;
|
|
103
|
+
};
|
|
104
|
+
/** This message entered an error status. */
|
|
105
|
+
"message.error": {
|
|
106
|
+
threadId: string;
|
|
107
|
+
messageId: string;
|
|
108
|
+
reason: "error";
|
|
109
|
+
};
|
|
110
|
+
};
|
|
83
111
|
type MessageClientSchema = {
|
|
84
112
|
methods: MessageMethods;
|
|
85
113
|
meta: MessageMeta;
|
|
114
|
+
events: MessageEvents;
|
|
86
115
|
};
|
|
87
116
|
//#endregion
|
|
88
|
-
export { MessageClientSchema, MessageMeta, MessageMethods, MessageState };
|
|
117
|
+
export { MessageClientSchema, MessageEvents, MessageMeta, MessageMethods, MessageState };
|
|
89
118
|
//# sourceMappingURL=message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","names":[],"sources":["../../../src/store/scopes/message.ts"],"mappings":";;;;;;;KAQY,eAAe;WAChB;WACA;WACA;WACA;;;;;;;;;;;;;;;;;WAiBA,QAAQ;WACR,UAAU;WACV,gBAAgB;WAChB;WACA;;WAEA;;KAGC;;;;EAIV,YAAY;EACZ,YAAY;EACZ,iBAAiB;EACjB,OAAO;IAAW,YAAY;;;EAE9B;;EAEA;EACA,eAAe;IAAY;;EAC3B,eAAe;IACb;IACA;;EAEF;EACA,KAAK;IAAY;;IAAoB;MAAuB;EAC5D,WAAW;IAAY;;IAAoB;MAAe;EAC1D,YAAY;EACZ,cAAc;EACd,0BAA0B;;KAGhB;EACV;EACA;IAAS;IAAY;;IAAiB;IAAe;;;KAG3C;EACV,SAAS;EACT,MAAM"}
|
|
1
|
+
{"version":3,"file":"message.d.ts","names":[],"sources":["../../../src/store/scopes/message.ts"],"mappings":";;;;;;;KAQY,eAAe;WAChB;WACA;WACA;WACA;;;;;;;;;;;;;;;;;WAiBA,QAAQ;WACR,UAAU;WACV,gBAAgB;WAChB;WACA;;WAEA;;KAGC;;;;EAIV,YAAY;EACZ,YAAY;EACZ,iBAAiB;EACjB,OAAO;IAAW,YAAY;;;EAE9B;;EAEA;EACA,eAAe;IAAY;;EAC3B,eAAe;IACb;IACA;;EAEF;EACA,KAAK;IAAY;;IAAoB;MAAuB;EAC5D,WAAW;IAAY;;IAAoB;MAAe;EAC1D,YAAY;EACZ,cAAc;EACd,0BAA0B;;KAGhB;EACV;EACA;IAAS;IAAY;;IAAiB;IAAe;;;KAG3C;;EAEV;IAAoB;IAAkB;;;EAEtC;IAA4B;IAAkB;;;EAE9C;IAAoB;IAAkB;;;EAEtC;IAAmB;IAAkB;;;EAErC;IAAmB;IAAkB;IAAmB;;;KAG9C;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ThreadListItemStatus } from "../../runtime/interfaces/thread-list-runtime-core.js";
|
|
2
|
-
import { ThreadListItemRuntime } from "../../runtime/api/thread-list-item-runtime.js";
|
|
2
|
+
import { ThreadListItemGenerateTitleOptions, ThreadListItemRuntime } from "../../runtime/api/thread-list-item-runtime.js";
|
|
3
3
|
//#region src/store/scopes/thread-list-item.d.ts
|
|
4
4
|
type ThreadListItemState = {
|
|
5
5
|
readonly id: string;
|
|
@@ -27,7 +27,7 @@ type ThreadListItemMethods = {
|
|
|
27
27
|
archive(): void;
|
|
28
28
|
unarchive(): void;
|
|
29
29
|
delete(): void;
|
|
30
|
-
generateTitle(): void;
|
|
30
|
+
generateTitle(options?: ThreadListItemGenerateTitleOptions): void;
|
|
31
31
|
initialize(): Promise<{
|
|
32
32
|
remoteId: string;
|
|
33
33
|
externalId: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-list-item.d.ts","names":[],"sources":["../../../src/store/scopes/thread-list-item.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"thread-list-item.d.ts","names":[],"sources":["../../../src/store/scopes/thread-list-item.ts"],"mappings":";;;KAMY;WACD;WACA;WACA;WACA;WACA,gBAAgB;WAChB,QAAQ;WACR,SAAS;;;;;;;WAOT;;KAGC;EACV,YAAY;EACZ,SAAS;IAAY;;EACrB,OAAO;EACP,aAAa,QAAQ;EACrB;EACA;EACA;EACA,cAAc,UAAU;EACxB,cAAc;IAAU;IAAkB;;EAC1C;EACA,0BAA0B;;KAGhB;EACV;EACA;IACM;;IACA;IAAY;;IACZ;IAAe;IAAe;;;KAG1B;;;;;;;EAOV;IAA+B;;;;;;;EAM/B;IAAiC;;;KAGvB;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}
|
|
@@ -152,6 +152,14 @@ type ThreadEvents = {
|
|
|
152
152
|
"thread.runEnd": {
|
|
153
153
|
threadId: string;
|
|
154
154
|
};
|
|
155
|
+
/** The user stopped the run in progress on this thread. */
|
|
156
|
+
"thread.cancelRun": {
|
|
157
|
+
threadId: string;
|
|
158
|
+
};
|
|
159
|
+
/** The user started a voice session on this thread. */
|
|
160
|
+
"thread.voiceStarted": {
|
|
161
|
+
threadId: string;
|
|
162
|
+
};
|
|
155
163
|
/**
|
|
156
164
|
* The thread transitioned from new to initialized. Fires before the first
|
|
157
165
|
* message is added, so read thread state via `useAuiState` rather than
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.d.ts","names":[],"sources":["../../../src/store/scopes/thread.ts"],"mappings":";;;;;;;;;;;KAqBY;;;;WAID;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA,cAAc;;;;WAId,mBAAmB;;;;;WAKnB,OAAO;;;;WAIP,sBAAsB;;;;WAItB;;WAEA,QAAQ;WACR,OAAO;WACP,UAAU;;KAGT;;;;EAIV,YAAY;;;;EAIZ,YAAY;;;;EAIZ,eAAe;;;;;;;;;;;;;;;;;EAiBf,OAAO,SAAS;EAChB,cAAc,2BAA2B;;;;;EAKzC,SAAS,QAAQ;;;;;EAKjB,UAAU,QAAQ;EAClB;;;;;;;;;;;;EAYA,2BAA2B;EAC3B,mBAAmB;EACnB,UAAU;EACV,OAAO,YAAY;;;;;EAKnB,MAAM,2BAA2B;EACjC,oBAAoB;EACpB,QAAQ;IAAY;;IAAiB;MAAkB;;EAEvD;EACA;EACA;EACA;EACA,qBAAqB,uBAAuB;EAC5C;EACA;EACA,0BAA0B;;KAGhB;EACV;EACA;IAAS;;;KAGC;;;;;EAKV;IAAqB;;;;;;;EAMrB;IAAmB;;;;;;;
|
|
1
|
+
{"version":3,"file":"thread.d.ts","names":[],"sources":["../../../src/store/scopes/thread.ts"],"mappings":";;;;;;;;;;;KAqBY;;;;WAID;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA,cAAc;;;;WAId,mBAAmB;;;;;WAKnB,OAAO;;;;WAIP,sBAAsB;;;;WAItB;;WAEA,QAAQ;WACR,OAAO;WACP,UAAU;;KAGT;;;;EAIV,YAAY;;;;EAIZ,YAAY;;;;EAIZ,eAAe;;;;;;;;;;;;;;;;;EAiBf,OAAO,SAAS;EAChB,cAAc,2BAA2B;;;;;EAKzC,SAAS,QAAQ;;;;;EAKjB,UAAU,QAAQ;EAClB;;;;;;;;;;;;EAYA,2BAA2B;EAC3B,mBAAmB;EACnB,UAAU;EACV,OAAO,YAAY;;;;;EAKnB,MAAM,2BAA2B;EACjC,oBAAoB;EACpB,QAAQ;IAAY;;IAAiB;MAAkB;;EAEvD;EACA;EACA;EACA;EACA,qBAAqB,uBAAuB;EAC5C;EACA;EACA,0BAA0B;;KAGhB;EACV;EACA;IAAS;;;KAGC;;;;;EAKV;IAAqB;;;;;;;EAMrB;IAAmB;;;EAEnB;IAAsB;;;EAEtB;IAAyB;;;;;;;EAMzB;IAAuB;;;;;;EAKvB;IAA+B;;;KAGrB;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.d.ts","names":[],"sources":["../../../src/store/scopes/threads.ts"],"mappings":";;;;KAOY;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB;WACtB,MAAM;;KAGL;EACV,YAAY;EACZ,eAAe,kBAAkB;IAAY;;EAC7C;EACA,KACE;IAEM;;IACA;IAAe;MACpB;EACH,OAAO,mBAAmB;EAC1B,yBAAyB;EACzB,UAAU;EACV,oBAAoB;EACpB,YAAY;EACZ,mCAAmC;;KAGzB;;;;;;;;;;EAUV;IAA8B;IAAkB;;;KAGtC;EACV,SAAS;EACT,QAAQ"}
|
|
1
|
+
{"version":3,"file":"threads.d.ts","names":[],"sources":["../../../src/store/scopes/threads.ts"],"mappings":";;;;KAOY;WACD;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB;WACtB,MAAM;;KAGL;EACV,YAAY;EACZ,eAAe,kBAAkB;IAAY;;EAC7C;EACA,KACE;IAEM;;IACA;IAAe;MACpB;EACH,OAAO,mBAAmB;EAC1B,yBAAyB;EACzB,UAAU;EACV,oBAAoB;EACpB,YAAY;EACZ,mCAAmC;;KAGzB;;;;;;;;;;EAUV;IAA8B;IAAkB;;;KAGtC;EACV,SAAS;EACT,QAAQ"}
|
|
@@ -41,6 +41,7 @@ type CreateAttachment = {
|
|
|
41
41
|
content: ThreadUserMessagePart[];
|
|
42
42
|
};
|
|
43
43
|
declare const isCreateAttachment: (attachment: File | CreateAttachment) => attachment is CreateAttachment;
|
|
44
|
+
declare const isAttachmentComplete: (attachment: Attachment) => attachment is CompleteAttachment;
|
|
44
45
|
//#endregion
|
|
45
|
-
export { Attachment, AttachmentStatus, CompleteAttachment, CompleteAttachmentStatus, CreateAttachment, PendingAttachment, PendingAttachmentStatus, isCreateAttachment };
|
|
46
|
+
export { Attachment, AttachmentStatus, CompleteAttachment, CompleteAttachmentStatus, CreateAttachment, PendingAttachment, PendingAttachmentStatus, isAttachmentComplete, isCreateAttachment };
|
|
46
47
|
//# sourceMappingURL=attachment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.d.ts","names":[],"sources":["../../src/types/attachment.ts"],"mappings":";;KAEY;EAEN;EACA;EACA;;EAGA;EACA;;EAGA;EACA;EACA;;KAGM;EACV;;KAGU,mBACR,0BACA;KAEC;EACH;EACA;EACA;EACA;EACA,OAAO;EACP,UAAU;;KAGA,oBAAoB;EAC9B,QAAQ;EACR,MAAM;;KAGI,qBAAqB;EAC/B,QAAQ;EACR,SAAS;;KAGC,aAAa,oBAAoB;KAEjC;EACV;EACA;EACA;EACA;EACA,SAAS;;cAGE,qBACX,YAAY,OAAO,qBAClB,cAAc"}
|
|
1
|
+
{"version":3,"file":"attachment.d.ts","names":[],"sources":["../../src/types/attachment.ts"],"mappings":";;KAEY;EAEN;EACA;EACA;;EAGA;EACA;;EAGA;EACA;EACA;;KAGM;EACV;;KAGU,mBACR,0BACA;KAEC;EACH;EACA;EACA;EACA;EACA,OAAO;EACP,UAAU;;KAGA,oBAAoB;EAC9B,QAAQ;EACR,MAAM;;KAGI,qBAAqB;EAC/B,QAAQ;EACR,SAAS;;KAGC,aAAa,oBAAoB;KAEjC;EACV;EACA;EACA;EACA;EACA,SAAS;;cAGE,qBACX,YAAY,OAAO,qBAClB,cAAc;cAGJ,uBACX,YAAY,eACX,cAAc"}
|
package/dist/types/attachment.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
//#region src/types/attachment.ts
|
|
2
2
|
const isCreateAttachment = (attachment) => "content" in attachment && !("lastModified" in attachment);
|
|
3
|
+
const isAttachmentComplete = (attachment) => attachment.status.type === "complete";
|
|
3
4
|
//#endregion
|
|
4
|
-
export { isCreateAttachment };
|
|
5
|
+
export { isAttachmentComplete, isCreateAttachment };
|
|
5
6
|
|
|
6
7
|
//# sourceMappingURL=attachment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.js","names":["ThreadUserMessagePart","PendingAttachmentStatus","type","reason","progress","message","CompleteAttachmentStatus","AttachmentStatus","BaseAttachment","id","name","contentType","file","File","content","PendingAttachment","status","CompleteAttachment","Attachment","CreateAttachment","isCreateAttachment","attachment"],"sources":["../../src/types/attachment.ts"],"sourcesContent":["import type { ThreadUserMessagePart } from \"./message\";\n\nexport type PendingAttachmentStatus =\n | {\n type: \"running\";\n reason: \"uploading\";\n progress: number;\n }\n | {\n type: \"requires-action\";\n reason: \"composer-send\";\n }\n | {\n type: \"incomplete\";\n reason: \"error\" | \"upload-paused\";\n message?: string;\n };\n\nexport type CompleteAttachmentStatus = {\n type: \"complete\";\n};\n\nexport type AttachmentStatus =\n | PendingAttachmentStatus\n | CompleteAttachmentStatus;\n\ntype BaseAttachment = {\n id: string;\n type: \"image\" | \"document\" | \"file\" | (string & {});\n name: string;\n contentType?: string | undefined;\n file?: File;\n content?: ThreadUserMessagePart[];\n};\n\nexport type PendingAttachment = BaseAttachment & {\n status: PendingAttachmentStatus;\n file: File;\n};\n\nexport type CompleteAttachment = BaseAttachment & {\n status: CompleteAttachmentStatus;\n content: ThreadUserMessagePart[];\n};\n\nexport type Attachment = PendingAttachment | CompleteAttachment;\n\nexport type CreateAttachment = {\n id?: string;\n type?: \"image\" | \"document\" | \"file\" | (string & {});\n name: string;\n contentType?: string;\n content: ThreadUserMessagePart[];\n};\n\nexport const isCreateAttachment = (\n attachment: File | CreateAttachment,\n): attachment is CreateAttachment =>\n \"content\" in attachment && !(\"lastModified\" in attachment);\n"],"mappings":";AAuDA,MAAaoB,sBACXC,eAEA,aAAaA,cAAc,EAAE,kBAAkBA"}
|
|
1
|
+
{"version":3,"file":"attachment.js","names":["ThreadUserMessagePart","PendingAttachmentStatus","type","reason","progress","message","CompleteAttachmentStatus","AttachmentStatus","BaseAttachment","id","name","contentType","file","File","content","PendingAttachment","status","CompleteAttachment","Attachment","CreateAttachment","isCreateAttachment","attachment","isAttachmentComplete"],"sources":["../../src/types/attachment.ts"],"sourcesContent":["import type { ThreadUserMessagePart } from \"./message\";\n\nexport type PendingAttachmentStatus =\n | {\n type: \"running\";\n reason: \"uploading\";\n progress: number;\n }\n | {\n type: \"requires-action\";\n reason: \"composer-send\";\n }\n | {\n type: \"incomplete\";\n reason: \"error\" | \"upload-paused\";\n message?: string;\n };\n\nexport type CompleteAttachmentStatus = {\n type: \"complete\";\n};\n\nexport type AttachmentStatus =\n | PendingAttachmentStatus\n | CompleteAttachmentStatus;\n\ntype BaseAttachment = {\n id: string;\n type: \"image\" | \"document\" | \"file\" | (string & {});\n name: string;\n contentType?: string | undefined;\n file?: File;\n content?: ThreadUserMessagePart[];\n};\n\nexport type PendingAttachment = BaseAttachment & {\n status: PendingAttachmentStatus;\n file: File;\n};\n\nexport type CompleteAttachment = BaseAttachment & {\n status: CompleteAttachmentStatus;\n content: ThreadUserMessagePart[];\n};\n\nexport type Attachment = PendingAttachment | CompleteAttachment;\n\nexport type CreateAttachment = {\n id?: string;\n type?: \"image\" | \"document\" | \"file\" | (string & {});\n name: string;\n contentType?: string;\n content: ThreadUserMessagePart[];\n};\n\nexport const isCreateAttachment = (\n attachment: File | CreateAttachment,\n): attachment is CreateAttachment =>\n \"content\" in attachment && !(\"lastModified\" in attachment);\n\nexport const isAttachmentComplete = (\n attachment: Attachment,\n): attachment is CompleteAttachment => attachment.status.type === \"complete\";\n"],"mappings":";AAuDA,MAAaoB,sBACXC,eAEA,aAAaA,cAAc,EAAE,kBAAkBA;AAEjD,MAAaC,wBACXD,eACqCA,WAAWL,OAAOd,SAAS"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/utils/abortable-iterable.d.ts
|
|
2
|
+
declare const openAbortableIterable: <T>(source: AsyncIterable<T> | Promise<AsyncIterable<T>>, signal: AbortSignal) => Promise<AsyncIterable<T> | undefined>;
|
|
3
|
+
/**
|
|
4
|
+
* Presents a stream as exhausted once the signal aborts, so a consumer stops
|
|
5
|
+
* waiting on it.
|
|
6
|
+
*
|
|
7
|
+
* A caller's stream is free to ignore the abort signal it is handed. One that
|
|
8
|
+
* also stops yielding, because it is awaiting its own work, leaves `for await`
|
|
9
|
+
* parked on `next()` with nothing left to wake it: the run never settles and
|
|
10
|
+
* whatever is serialized behind it never starts. Reporting the stream as
|
|
11
|
+
* exhausted ends the loop at cancellation instead.
|
|
12
|
+
*
|
|
13
|
+
* The source is finalized on the way out, but never awaited, since a stream
|
|
14
|
+
* that is already parked would not settle that either.
|
|
15
|
+
*/
|
|
16
|
+
declare const abortableIterable: <T>(source: AsyncIterable<T>, signal: AbortSignal) => AsyncIterable<T>;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { abortableIterable, openAbortableIterable };
|
|
19
|
+
//# sourceMappingURL=abortable-iterable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable-iterable.d.ts","names":[],"sources":["../../src/utils/abortable-iterable.ts"],"mappings":";cASa,wBAA+B,GAC1C,QAAQ,cAAc,KAAK,QAAQ,cAAc,KACjD,QAAQ,gBACP,QAAQ,cAAc;;;;;;;;;;;;;;cAwBZ,oBAAqB,GAChC,QAAQ,cAAc,IACtB,QAAQ,gBACP,cAAc"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
//#region src/utils/abortable-iterable.ts
|
|
2
|
+
const done = () => ({
|
|
3
|
+
done: true,
|
|
4
|
+
value: void 0
|
|
5
|
+
});
|
|
6
|
+
/** Resolves at cancellation, so an await on a stream can stop being the only way out. */
|
|
7
|
+
const whenAborted = (signal) => new Promise((resolve) => {
|
|
8
|
+
if (signal.aborted) return resolve(void 0);
|
|
9
|
+
signal.addEventListener("abort", () => resolve(void 0), { once: true });
|
|
10
|
+
});
|
|
11
|
+
const openAbortableIterable = async (source, signal) => {
|
|
12
|
+
const opened = Promise.resolve(source);
|
|
13
|
+
const iterable = await Promise.race([opened, whenAborted(signal)]);
|
|
14
|
+
if (!iterable) opened.then((late) => late[Symbol.asyncIterator]().return?.(void 0)).catch(() => {});
|
|
15
|
+
return iterable;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Presents a stream as exhausted once the signal aborts, so a consumer stops
|
|
19
|
+
* waiting on it.
|
|
20
|
+
*
|
|
21
|
+
* A caller's stream is free to ignore the abort signal it is handed. One that
|
|
22
|
+
* also stops yielding, because it is awaiting its own work, leaves `for await`
|
|
23
|
+
* parked on `next()` with nothing left to wake it: the run never settles and
|
|
24
|
+
* whatever is serialized behind it never starts. Reporting the stream as
|
|
25
|
+
* exhausted ends the loop at cancellation instead.
|
|
26
|
+
*
|
|
27
|
+
* The source is finalized on the way out, but never awaited, since a stream
|
|
28
|
+
* that is already parked would not settle that either.
|
|
29
|
+
*/
|
|
30
|
+
const abortableIterable = (source, signal) => ({ [Symbol.asyncIterator]: () => {
|
|
31
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
32
|
+
const finalize = () => {
|
|
33
|
+
try {
|
|
34
|
+
iterator.return?.(void 0)?.catch(() => {});
|
|
35
|
+
} catch {}
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
[Symbol.asyncIterator]() {
|
|
39
|
+
return this;
|
|
40
|
+
},
|
|
41
|
+
next: () => {
|
|
42
|
+
if (signal.aborted) {
|
|
43
|
+
finalize();
|
|
44
|
+
return Promise.resolve(done());
|
|
45
|
+
}
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
const onAbort = () => {
|
|
48
|
+
finalize();
|
|
49
|
+
resolve(done());
|
|
50
|
+
};
|
|
51
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
52
|
+
const release = () => signal.removeEventListener("abort", onAbort);
|
|
53
|
+
iterator.next().then((result) => {
|
|
54
|
+
release();
|
|
55
|
+
resolve(result);
|
|
56
|
+
}, (error) => {
|
|
57
|
+
release();
|
|
58
|
+
finalize();
|
|
59
|
+
reject(error);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
return: async () => {
|
|
64
|
+
finalize();
|
|
65
|
+
return done();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
} });
|
|
69
|
+
//#endregion
|
|
70
|
+
export { abortableIterable, openAbortableIterable };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=abortable-iterable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortable-iterable.js","names":["done","IteratorResult","T","value","undefined","whenAborted","signal","AbortSignal","Promise","resolve","aborted","addEventListener","once","openAbortableIterable","source","AsyncIterable","opened","iterable","race","then","late","Symbol","asyncIterator","return","catch","abortableIterable","iterator","finalize","next","reject","onAbort","release","removeEventListener","result","error"],"sources":["../../src/utils/abortable-iterable.ts"],"sourcesContent":["const done = <T>(): IteratorResult<T> => ({ done: true, value: undefined });\n\n/** Resolves at cancellation, so an await on a stream can stop being the only way out. */\nconst whenAborted = (signal: AbortSignal): Promise<undefined> =>\n new Promise((resolve) => {\n if (signal.aborted) return resolve(undefined);\n signal.addEventListener(\"abort\", () => resolve(undefined), { once: true });\n });\n\nexport const openAbortableIterable = async <T>(\n source: AsyncIterable<T> | Promise<AsyncIterable<T>>,\n signal: AbortSignal,\n): Promise<AsyncIterable<T> | undefined> => {\n const opened = Promise.resolve(source);\n const iterable = await Promise.race([opened, whenAborted(signal)]);\n if (!iterable) {\n void opened\n .then((late) => late[Symbol.asyncIterator]().return?.(undefined))\n .catch(() => {});\n }\n return iterable;\n};\n\n/**\n * Presents a stream as exhausted once the signal aborts, so a consumer stops\n * waiting on it.\n *\n * A caller's stream is free to ignore the abort signal it is handed. One that\n * also stops yielding, because it is awaiting its own work, leaves `for await`\n * parked on `next()` with nothing left to wake it: the run never settles and\n * whatever is serialized behind it never starts. Reporting the stream as\n * exhausted ends the loop at cancellation instead.\n *\n * The source is finalized on the way out, but never awaited, since a stream\n * that is already parked would not settle that either.\n */\nexport const abortableIterable = <T>(\n source: AsyncIterable<T>,\n signal: AbortSignal,\n): AsyncIterable<T> => ({\n [Symbol.asyncIterator]: () => {\n const iterator = source[Symbol.asyncIterator]();\n const finalize = () => {\n try {\n iterator.return?.(undefined)?.catch(() => {});\n } catch {\n // a source that throws on finalize has nothing left to clean up\n }\n };\n\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next: () => {\n if (signal.aborted) {\n finalize();\n return Promise.resolve(done<T>());\n }\n\n return new Promise<IteratorResult<T>>((resolve, reject) => {\n // Registered per chunk and released as soon as the chunk settles, so\n // a long stream does not accumulate one reaction per chunk.\n const onAbort = () => {\n finalize();\n resolve(done<T>());\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n const release = () => signal.removeEventListener(\"abort\", onAbort);\n\n iterator.next().then(\n (result) => {\n release();\n resolve(result);\n },\n (error: unknown) => {\n release();\n finalize();\n reject(error);\n },\n );\n });\n },\n // The consumer breaks out of the loop to stop a cancelled run, so this is\n // reached on the same path as an abort and finalizes the same way: a\n // source whose own cleanup parks must not stall the break either.\n return: async () => {\n finalize();\n return done<T>();\n },\n };\n },\n});\n"],"mappings":";AAAA,MAAMA,cAAoC;CAAEA,MAAM;CAAMG,OAAOC,KAAAA;AAAU;;AAGzE,MAAMC,eAAeC,WACnB,IAAIE,SAASC,YAAY;CACvB,IAAIH,OAAOI,SAAS,OAAOD,QAAQL,KAAAA,CAAS;CAC5CE,OAAOK,iBAAiB,eAAeF,QAAQL,KAAAA,CAAS,GAAG,EAAEQ,MAAM,KAAK,CAAC;AAC3E,CAAC;AAEH,MAAaC,wBAAwB,OACnCC,QACAR,WAC0C;CAC1C,MAAMU,SAASR,QAAQC,QAAQK,MAAM;CACrC,MAAMG,WAAW,MAAMT,QAAQU,KAAK,CAACF,QAAQX,YAAYC,MAAM,CAAC,CAAC;CACjE,IAAI,CAACW,UACH,OACGE,MAAMC,SAASA,KAAKC,OAAOC,cAAc,CAAC,CAAC,CAACC,SAASnB,KAAAA,CAAS,CAAC,CAAC,CAChEoB,YAAY,CAAC,CAAC;CAEnB,OAAOP;AACT;;;;;;;;;;;;;;AAeA,MAAaQ,qBACXX,QACAR,YACsB,GACrBe,OAAOC,sBAAsB;CAC5B,MAAMI,WAAWZ,OAAOO,OAAOC,cAAc,CAAC;CAC9C,MAAMK,iBAAiB;EACrB,IAAI;GACFD,SAASH,SAASnB,KAAAA,CAAS,CAAC,EAAEoB,YAAY,CAAC,CAAC;EAC9C,QAAQ,CACN;CAEJ;CAEA,OAAO;EACL,CAACH,OAAOC,iBAAiB;GACvB,OAAO;EACT;EACAM,YAAY;GACV,IAAItB,OAAOI,SAAS;IAClBiB,SAAS;IACT,OAAOnB,QAAQC,QAAQT,KAAQ,CAAC;GAClC;GAEA,OAAO,IAAIQ,SAA4BC,SAASoB,WAAW;IAGzD,MAAMC,gBAAgB;KACpBH,SAAS;KACTlB,QAAQT,KAAQ,CAAC;IACnB;IACAM,OAAOK,iBAAiB,SAASmB,SAAS,EAAElB,MAAM,KAAK,CAAC;IACxD,MAAMmB,gBAAgBzB,OAAO0B,oBAAoB,SAASF,OAAO;IAEjEJ,SAASE,KAAK,CAAC,CAACT,MACbc,WAAW;KACVF,QAAQ;KACRtB,QAAQwB,MAAM;IAChB,IACCC,UAAmB;KAClBH,QAAQ;KACRJ,SAAS;KACTE,OAAOK,KAAK;IACd,CACF;GACF,CAAC;EACH;EAIAX,QAAQ,YAAY;GAClBI,SAAS;GACT,OAAO3B,KAAQ;EACjB;CACF;AACF,EACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite-context-provider.d.ts","names":[],"sources":["../../src/utils/composite-context-provider.ts"],"mappings":";;;cAOa,oCAAoC;UACvC;UACA;EAER,mBAJW;EAQX,6BAA6B,UAAU;
|
|
1
|
+
{"version":3,"file":"composite-context-provider.d.ts","names":[],"sources":["../../src/utils/composite-context-provider.ts"],"mappings":";;;cAOa,oCAAoC;UACvC;UACA;EAER,mBAJW;EAQX,6BAA6B,UAAU;UAiD/B;EAER;EAIA,UAAU"}
|
|
@@ -26,11 +26,29 @@ var CompositeContextProvider = class {
|
|
|
26
26
|
}
|
|
27
27
|
this._providerUnsubscribes.set(id, unsubscribe);
|
|
28
28
|
this.notifySubscribers();
|
|
29
|
+
let released = false;
|
|
29
30
|
return () => {
|
|
31
|
+
if (released) return;
|
|
32
|
+
released = true;
|
|
30
33
|
this._providers.delete(id);
|
|
31
|
-
this._providerUnsubscribes.get(id)
|
|
34
|
+
const unsubscribe = this._providerUnsubscribes.get(id);
|
|
32
35
|
this._providerUnsubscribes.delete(id);
|
|
33
|
-
|
|
36
|
+
let cleanupFailed = false;
|
|
37
|
+
let cleanupError;
|
|
38
|
+
const runCleanup = (cleanup) => {
|
|
39
|
+
try {
|
|
40
|
+
cleanup();
|
|
41
|
+
} catch (error) {
|
|
42
|
+
if (cleanupFailed) console.error(error);
|
|
43
|
+
else {
|
|
44
|
+
cleanupFailed = true;
|
|
45
|
+
cleanupError = error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
if (unsubscribe) runCleanup(unsubscribe);
|
|
50
|
+
runCleanup(() => this.notifySubscribers());
|
|
51
|
+
if (cleanupFailed) throw cleanupError;
|
|
34
52
|
};
|
|
35
53
|
}
|
|
36
54
|
_subscribers = /* @__PURE__ */ new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composite-context-provider.js","names":["ModelContextProvider","mergeModelContexts","notifySubscribers","notifyStateSubscribers","Unsubscribe","CompositeContextProvider","_providers","Map","_providerUnsubscribes","getModelContext","Set","values","registerModelContextProvider","provider","id","Symbol","set","unsubscribe","subscribe","error","delete","notifyError","console","get","_subscribers","callback","add"],"sources":["../../src/utils/composite-context-provider.ts"],"sourcesContent":["import {\n type ModelContextProvider,\n mergeModelContexts,\n} from \"../model-context/types\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../subscribable/subscribable\";\nimport type { Unsubscribe } from \"../types/unsubscribe\";\n\nexport class CompositeContextProvider implements ModelContextProvider {\n private _providers = new Map<symbol, ModelContextProvider>();\n private _providerUnsubscribes = new Map<symbol, Unsubscribe | undefined>();\n\n getModelContext() {\n return mergeModelContexts(new Set(this._providers.values()));\n }\n\n registerModelContextProvider(provider: ModelContextProvider) {\n const id = Symbol();\n this._providers.set(id, provider);\n let unsubscribe: Unsubscribe | undefined;\n try {\n unsubscribe = provider.subscribe?.(() => {\n this.notifySubscribers();\n });\n } catch (error) {\n this._providers.delete(id);\n try {\n this.notifySubscribers();\n } catch (notifyError) {\n console.error(notifyError);\n }\n throw error;\n }\n this._providerUnsubscribes.set(id, unsubscribe);\n this.notifySubscribers();\n return () => {\n this._providers.delete(id);\n const unsubscribe = this._providerUnsubscribes.get(id);\n
|
|
1
|
+
{"version":3,"file":"composite-context-provider.js","names":["ModelContextProvider","mergeModelContexts","notifySubscribers","notifyStateSubscribers","Unsubscribe","CompositeContextProvider","_providers","Map","_providerUnsubscribes","getModelContext","Set","values","registerModelContextProvider","provider","id","Symbol","set","unsubscribe","subscribe","error","delete","notifyError","console","released","get","cleanupFailed","cleanupError","runCleanup","cleanup","_subscribers","callback","add"],"sources":["../../src/utils/composite-context-provider.ts"],"sourcesContent":["import {\n type ModelContextProvider,\n mergeModelContexts,\n} from \"../model-context/types\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../subscribable/subscribable\";\nimport type { Unsubscribe } from \"../types/unsubscribe\";\n\nexport class CompositeContextProvider implements ModelContextProvider {\n private _providers = new Map<symbol, ModelContextProvider>();\n private _providerUnsubscribes = new Map<symbol, Unsubscribe | undefined>();\n\n getModelContext() {\n return mergeModelContexts(new Set(this._providers.values()));\n }\n\n registerModelContextProvider(provider: ModelContextProvider) {\n const id = Symbol();\n this._providers.set(id, provider);\n let unsubscribe: Unsubscribe | undefined;\n try {\n unsubscribe = provider.subscribe?.(() => {\n this.notifySubscribers();\n });\n } catch (error) {\n this._providers.delete(id);\n try {\n this.notifySubscribers();\n } catch (notifyError) {\n console.error(notifyError);\n }\n throw error;\n }\n this._providerUnsubscribes.set(id, unsubscribe);\n this.notifySubscribers();\n let released = false;\n return () => {\n if (released) return;\n released = true;\n this._providers.delete(id);\n const unsubscribe = this._providerUnsubscribes.get(id);\n this._providerUnsubscribes.delete(id);\n\n let cleanupFailed = false;\n let cleanupError: unknown;\n const runCleanup = (cleanup: () => void) => {\n try {\n cleanup();\n } catch (error) {\n if (cleanupFailed) {\n console.error(error);\n } else {\n cleanupFailed = true;\n cleanupError = error;\n }\n }\n };\n\n if (unsubscribe) runCleanup(unsubscribe);\n runCleanup(() => this.notifySubscribers());\n\n if (cleanupFailed) throw cleanupError;\n };\n }\n\n private _subscribers = new Set<() => void>();\n\n notifySubscribers() {\n notifyStateSubscribers(this._subscribers);\n }\n\n subscribe(callback: () => void) {\n this._subscribers.add(callback);\n return () => {\n this._subscribers.delete(callback);\n };\n }\n}\n"],"mappings":";;;AAOA,IAAaK,2BAAb,MAAsE;CACpE,6BAAqB,IAAIE,IAAkC;CAC3D,wCAAgC,IAAIA,IAAqC;CAEzEE,kBAAkB;EAChB,OAAOR,mBAAmB,IAAIS,IAAI,KAAKJ,WAAWK,OAAO,CAAC,CAAC;CAC7D;CAEAC,6BAA6BC,UAAgC;EAC3D,MAAMC,KAAKC,OAAO;EAClB,KAAKT,WAAWU,IAAIF,IAAID,QAAQ;EAChC,IAAII;EACJ,IAAI;GACFA,cAAcJ,SAASK,kBAAkB;IACvC,KAAKhB,kBAAkB;GACzB,CAAC;EACH,SAASiB,OAAO;GACd,KAAKb,WAAWc,OAAON,EAAE;GACzB,IAAI;IACF,KAAKZ,kBAAkB;GACzB,SAASmB,aAAa;IACpBC,QAAQH,MAAME,WAAW;GAC3B;GACA,MAAMF;EACR;EACA,KAAKX,sBAAsBQ,IAAIF,IAAIG,WAAW;EAC9C,KAAKf,kBAAkB;EACvB,IAAIqB,WAAW;EACf,aAAa;GACX,IAAIA,UAAU;GACdA,WAAW;GACX,KAAKjB,WAAWc,OAAON,EAAE;GACzB,MAAMG,cAAc,KAAKT,sBAAsBgB,IAAIV,EAAE;GACrD,KAAKN,sBAAsBY,OAAON,EAAE;GAEpC,IAAIW,gBAAgB;GACpB,IAAIC;GACJ,MAAMC,cAAcC,YAAwB;IAC1C,IAAI;KACFA,QAAQ;IACV,SAAST,OAAO;KACd,IAAIM,eACFH,QAAQH,MAAMA,KAAK;UACd;MACLM,gBAAgB;MAChBC,eAAeP;KACjB;IACF;GACF;GAEA,IAAIF,aAAaU,WAAWV,WAAW;GACvCU,iBAAiB,KAAKzB,kBAAkB,CAAC;GAEzC,IAAIuB,eAAe,MAAMC;EAC3B;CACF;CAEA,+BAAuB,IAAIhB,IAAgB;CAE3CR,oBAAoB;EAClBC,kBAAuB,KAAK0B,YAAY;CAC1C;CAEAX,UAAUY,UAAsB;EAC9B,KAAKD,aAAaE,IAAID,QAAQ;EAC9B,aAAa;GACX,KAAKD,aAAaT,OAAOU,QAAQ;EACnC;CACF;AACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/utils/record.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Builds a dictionary with no prototype from the own entries of its arguments.
|
|
4
|
+
* Bracket assignment on a plain object routes a `__proto__` key through the
|
|
5
|
+
* `Object.prototype` setter instead of defining an own property, so a record
|
|
6
|
+
* assigned into by a key the app does not control is built this way.
|
|
7
|
+
*/
|
|
8
|
+
declare const nullProtoRecord: <T>(base?: Readonly<Record<string, T>>, ...rest: readonly (Readonly<Record<string, NoInfer<T>>> | undefined)[]) => Record<string, T>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { nullProtoRecord };
|
|
11
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","names":[],"sources":["../../src/utils/record.ts"],"mappings":";;;;;;;cAMa,kBAAmB,GAC9B,OAAO,SAAS,eAAe,QAC5B,gBAAgB,SAAS,eAAe,QAAQ,wBAClD,eAAe"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/utils/record.ts
|
|
2
|
+
/**
|
|
3
|
+
* Builds a dictionary with no prototype from the own entries of its arguments.
|
|
4
|
+
* Bracket assignment on a plain object routes a `__proto__` key through the
|
|
5
|
+
* `Object.prototype` setter instead of defining an own property, so a record
|
|
6
|
+
* assigned into by a key the app does not control is built this way.
|
|
7
|
+
*/
|
|
8
|
+
const nullProtoRecord = (base, ...rest) => Object.assign(Object.create(null), base, ...rest);
|
|
9
|
+
//#endregion
|
|
10
|
+
export { nullProtoRecord };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","names":["nullProtoRecord","base","Readonly","Record","T","rest","NoInfer","Object","assign","create"],"sources":["../../src/utils/record.ts"],"sourcesContent":["/**\n * Builds a dictionary with no prototype from the own entries of its arguments.\n * Bracket assignment on a plain object routes a `__proto__` key through the\n * `Object.prototype` setter instead of defining an own property, so a record\n * assigned into by a key the app does not control is built this way.\n */\nexport const nullProtoRecord = <T>(\n base?: Readonly<Record<string, T>>,\n ...rest: readonly (Readonly<Record<string, NoInfer<T>>> | undefined)[]\n): Record<string, T> =>\n Object.assign(Object.create(null) as Record<string, T>, base, ...rest);\n"],"mappings":";;;;;;;AAMA,MAAaA,mBACXC,MACA,GAAGI,SAEHE,OAAOC,OAAOD,OAAOE,OAAO,IAAI,GAAwBR,MAAM,GAAGI,IAAI"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.18",
|
|
4
4
|
"description": "Framework-agnostic core runtime for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"assistant",
|
|
@@ -59,18 +59,18 @@
|
|
|
59
59
|
],
|
|
60
60
|
"sideEffects": false,
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"assistant-stream": "^0.3.
|
|
62
|
+
"assistant-stream": "^0.3.42",
|
|
63
63
|
"nanoid": "^6.0.1"
|
|
64
64
|
},
|
|
65
65
|
"optionalDevDependencies": {
|
|
66
66
|
"@assistant-ui/x-generative-compiler": ">=0.0.3"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
|
-
"@assistant-ui/store": "^0.3.
|
|
70
|
-
"@assistant-ui/tap": "^0.9.
|
|
69
|
+
"@assistant-ui/store": "^0.3.13",
|
|
70
|
+
"@assistant-ui/tap": "^0.9.17",
|
|
71
71
|
"@types/react": "*",
|
|
72
72
|
"react": "^18 || ^19",
|
|
73
|
-
"assistant-cloud": "^0.
|
|
73
|
+
"assistant-cloud": "^0.2.0"
|
|
74
74
|
},
|
|
75
75
|
"peerDependenciesMeta": {
|
|
76
76
|
"@types/react": {
|
|
@@ -84,13 +84,13 @@
|
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
|
-
"@assistant-ui/store": "0.3.
|
|
88
|
-
"@assistant-ui/tap": "0.9.
|
|
89
|
-
"@assistant-ui/vite": "0.0.
|
|
90
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
87
|
+
"@assistant-ui/store": "0.3.13",
|
|
88
|
+
"@assistant-ui/tap": "0.9.17",
|
|
89
|
+
"@assistant-ui/vite": "0.0.17",
|
|
90
|
+
"@assistant-ui/x-buildutils": "0.0.26",
|
|
91
91
|
"@testing-library/react": "^16.3.3",
|
|
92
92
|
"@types/react": "^19.2.18",
|
|
93
|
-
"assistant-cloud": "0.
|
|
93
|
+
"assistant-cloud": "0.2.0",
|
|
94
94
|
"jsdom": "^30.0.1",
|
|
95
95
|
"react": "^19.2.8",
|
|
96
96
|
"react-dom": "^19.2.8",
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { afterEach, describe, expect, it } from "vitest";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
type AttachmentAdapter,
|
|
4
|
+
CompositeAttachmentAdapter,
|
|
5
|
+
getFileDataURL,
|
|
6
|
+
SimpleImageAttachmentAdapter,
|
|
7
|
+
} from "./attachment";
|
|
3
8
|
|
|
4
9
|
const originalFileReader = globalThis.FileReader;
|
|
5
10
|
const originalBuffer = globalThis.Buffer;
|
|
@@ -105,3 +110,47 @@ describe("SimpleImageAttachmentAdapter", () => {
|
|
|
105
110
|
);
|
|
106
111
|
});
|
|
107
112
|
});
|
|
113
|
+
|
|
114
|
+
describe("CompositeAttachmentAdapter", () => {
|
|
115
|
+
it.each(["pending", "complete"])(
|
|
116
|
+
"removes a %s attachment through its matching adapter",
|
|
117
|
+
async (status) => {
|
|
118
|
+
const removed: string[] = [];
|
|
119
|
+
const imageAdapter = {
|
|
120
|
+
accept: "image/*",
|
|
121
|
+
async add({ file }) {
|
|
122
|
+
return {
|
|
123
|
+
id: "image-1",
|
|
124
|
+
type: "image",
|
|
125
|
+
name: file.name,
|
|
126
|
+
file,
|
|
127
|
+
status: { type: "requires-action", reason: "composer-send" },
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
async send(attachment) {
|
|
131
|
+
return {
|
|
132
|
+
id: attachment.id,
|
|
133
|
+
type: attachment.type,
|
|
134
|
+
name: attachment.name,
|
|
135
|
+
contentType: attachment.file.type,
|
|
136
|
+
status: { type: "complete" },
|
|
137
|
+
content: [],
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
async remove(attachment) {
|
|
141
|
+
removed.push(attachment.id);
|
|
142
|
+
},
|
|
143
|
+
} satisfies AttachmentAdapter;
|
|
144
|
+
const composite = new CompositeAttachmentAdapter([imageAdapter]);
|
|
145
|
+
const pending = await imageAdapter.add({
|
|
146
|
+
file: new File(["image bytes"], "photo.png", { type: "image/png" }),
|
|
147
|
+
});
|
|
148
|
+
const attachment =
|
|
149
|
+
status === "pending" ? pending : await composite.send(pending);
|
|
150
|
+
|
|
151
|
+
await composite.remove(attachment);
|
|
152
|
+
|
|
153
|
+
expect(removed).toEqual(["image-1"]);
|
|
154
|
+
},
|
|
155
|
+
);
|
|
156
|
+
});
|
|
@@ -142,11 +142,11 @@ export function fileMatchesAccept(
|
|
|
142
142
|
.split(",")
|
|
143
143
|
.map((type) => type.trim().toLowerCase());
|
|
144
144
|
|
|
145
|
-
const
|
|
145
|
+
const fileName = file.name.toLowerCase();
|
|
146
146
|
const fileMimeType = file.type.split(";", 1)[0]!.trim().toLowerCase();
|
|
147
147
|
|
|
148
148
|
for (const type of allowedTypes) {
|
|
149
|
-
if (type.startsWith(".") && type
|
|
149
|
+
if (type.startsWith(".") && fileName.endsWith(type)) {
|
|
150
150
|
return true;
|
|
151
151
|
}
|
|
152
152
|
|
|
@@ -170,7 +170,10 @@ export function attachmentsEqual(
|
|
|
170
170
|
b: readonly CompleteAttachment[],
|
|
171
171
|
): boolean {
|
|
172
172
|
if (a.length !== b.length) return false;
|
|
173
|
-
|
|
173
|
+
for (let i = 0; i < a.length; i++) {
|
|
174
|
+
if (a[i]?.id !== b[i]?.id) return false;
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
174
177
|
}
|
|
175
178
|
|
|
176
179
|
export function partToCompleteAttachment(
|
|
@@ -276,7 +279,7 @@ export class CompositeAttachmentAdapter implements AttachmentAdapter {
|
|
|
276
279
|
for (const adapter of adapters) {
|
|
277
280
|
if (
|
|
278
281
|
fileMatchesAccept(
|
|
279
|
-
{
|
|
282
|
+
attachment.file ?? {
|
|
280
283
|
name: attachment.name,
|
|
281
284
|
type: attachment.contentType ?? "",
|
|
282
285
|
},
|
package/src/index.ts
CHANGED