@assistant-ui/core 0.3.16 → 0.3.17
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/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -1
- package/dist/internal.js +2 -1
- package/dist/model-context/frame/provider.d.ts +3 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -1
- package/dist/model-context/frame/provider.js +71 -21
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/tool-call-text.d.ts +26 -0
- package/dist/model-context/tool-call-text.d.ts.map +1 -0
- package/dist/model-context/tool-call-text.js +18 -0
- package/dist/model-context/tool-call-text.js.map +1 -0
- package/dist/react/RuntimeAdapter.js +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/client/AdaptedRemoteThread.js +1 -1
- package/dist/react/client/InMemoryThreadList.js +1 -1
- package/dist/react/client/Interactables.js +1 -1
- package/dist/react/client/RemoteThreadList.d.ts +15 -0
- package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
- package/dist/react/client/RemoteThreadList.js +240 -138
- 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 +6 -2
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/index.d.ts +2 -1
- package/dist/react/index.js +2 -1
- package/dist/react/interactables-legacy/Interactables.js +4 -4
- package/dist/react/interactables-legacy/Interactables.js.map +1 -1
- package/dist/react/model-context/toolbox.d.ts +2 -14
- package/dist/react/model-context/toolbox.d.ts.map +1 -1
- package/dist/react/model-context/toolbox.js +1 -13
- package/dist/react/model-context/toolbox.js.map +1 -1
- package/dist/react/model-context/useAssistantContext.js +37 -7
- package/dist/react/model-context/useAssistantContext.js.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js +31 -5
- package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
- package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
- package/dist/react/model-context/useInlineRender.js +10 -36
- package/dist/react/model-context/useInlineRender.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.js +2 -8
- package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.js +2 -4
- package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +4 -3
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js +4 -3
- package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +7 -6
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +2 -2
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +3 -3
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +5 -4
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +6 -4
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +44 -22
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +6 -5
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +79 -62
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -6
- package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadResource.js +3 -3
- package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
- package/dist/react/runtimes/assistant-transport/useLatestRef.js +2 -2
- package/dist/react/runtimes/assistant-transport/useLatestRef.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +23 -18
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts +5 -1
- package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +29 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +159 -0
- package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -9
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +16 -153
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +1 -1
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +14 -6
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +7 -3
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/types/scopes/tools.d.ts +2 -0
- package/dist/react/types/scopes/tools.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +2 -2
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +1 -1
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts +9 -1
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +5 -0
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +2 -2
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js +2 -2
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +14 -2
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +15 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.d.ts +1 -1
- package/dist/runtime/utils/auto-status.d.ts.map +1 -1
- package/dist/runtime/utils/auto-status.js +6 -2
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/external-message-conversion.d.ts +3 -2
- package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
- package/dist/runtime/utils/external-message-conversion.js +4 -3
- package/dist/runtime/utils/external-message-conversion.js.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +6 -3
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.js +12 -3
- package/dist/runtime/utils/resolveToolApprovalResponse.js.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +2 -10
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.js.map +1 -1
- package/dist/runtime/utils/tool-call-tree.d.ts +39 -0
- package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -0
- package/dist/runtime/utils/tool-call-tree.js +85 -0
- package/dist/runtime/utils/tool-call-tree.js.map +1 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts +29 -2
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +2 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +34 -28
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +3 -1
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +1 -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 +30 -13
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/title.d.ts +9 -0
- package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/title.js +6 -0
- package/dist/runtimes/remote-thread-list/title.js.map +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts +6 -5
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +31 -8
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +97 -60
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/external-thread.d.ts +1 -1
- package/dist/store/clients/external-thread.d.ts.map +1 -1
- package/dist/store/clients/external-thread.js +11 -4
- package/dist/store/clients/external-thread.js.map +1 -1
- package/dist/store/clients/single-thread-list.js +1 -1
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +18 -6
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.js +1 -1
- package/dist/store/clients/thread-selection-events.js +1 -1
- package/dist/store/index.d.ts +2 -1
- package/dist/store/index.js +2 -1
- package/dist/store/internal.d.ts +2 -2
- package/dist/store/internal.js +2 -2
- package/dist/store/primitive-predicates.d.ts +4 -1
- package/dist/store/primitive-predicates.d.ts.map +1 -1
- package/dist/store/primitive-predicates.js +9 -1
- package/dist/store/primitive-predicates.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +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 +124 -105
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts +3 -1
- package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.js +1 -1
- package/dist/store/runtime-clients/useSubscribable.js.map +1 -1
- package/dist/store/scopes/part.d.ts +6 -3
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts +8 -1
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js +24 -16
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/types/message.d.ts +40 -1
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js +7 -1
- package/dist/types/message.js.map +1 -1
- package/package.json +12 -17
- package/src/index.ts +6 -1
- package/src/internal.ts +8 -0
- package/src/model-context/frame/provider.test.ts +217 -1
- package/src/model-context/frame/provider.ts +111 -23
- package/src/model-context/tool-call-text.test.ts +67 -0
- package/src/model-context/tool-call-text.ts +67 -0
- package/src/react/AssistantRuntimeProvider.test.tsx +66 -2
- package/src/react/adapters/LocalStorageThreadListAdapter.tsx +1 -3
- package/src/react/client/RemoteThreadList.background.test.ts +384 -0
- package/src/react/client/RemoteThreadList.concurrent.test.tsx +274 -0
- package/src/react/client/RemoteThreadList.test.ts +273 -1
- package/src/react/client/RemoteThreadList.ts +293 -83
- package/src/react/client/Tools.ts +7 -1
- package/src/react/index.ts +4 -0
- package/src/react/model-context/modelContextHooks.test.tsx +131 -0
- package/src/react/model-context/toolbox.test.ts +9 -9
- package/src/react/model-context/toolbox.ts +9 -36
- package/src/react/model-context/useAssistantContext.ts +4 -2
- package/src/react/model-context/useAuiToolOverrides.ts +4 -2
- package/src/react/model-context/useInlineRender.test.tsx +48 -0
- package/src/react/model-context/useInlineRender.ts +14 -10
- package/src/react/primitive-hooks/useMessageError.ts +2 -19
- package/src/react/primitive-hooks/useThreadListLoadMore.ts +2 -3
- package/src/react/primitives/composer/ComposerAttachments.test.tsx +76 -0
- package/src/react/primitives/composer/ComposerAttachments.tsx +9 -4
- package/src/react/primitives/composer/ComposerQueue.test.tsx +72 -0
- package/src/react/primitives/composer/ComposerQueue.tsx +7 -4
- package/src/react/primitives/message/MessageAttachments.test.tsx +107 -37
- package/src/react/primitives/message/MessageAttachments.tsx +10 -7
- package/src/react/primitives/message/MessageGroupedParts.tsx +2 -2
- package/src/react/primitives/message/MessageParts.tsx +3 -3
- package/src/react/primitives/threadList/ThreadListItems.test.tsx +99 -0
- package/src/react/primitives/threadList/ThreadListItems.tsx +8 -5
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +94 -1
- package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +72 -31
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +169 -0
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +114 -68
- package/src/react/runtimes/RemoteThreadResource.ts +1 -4
- package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +51 -2
- package/src/react/runtimes/assistant-transport/useLatestRef.ts +2 -2
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +45 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +65 -1
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +42 -35
- package/src/react/runtimes/cloud/auiV0.ts +5 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +88 -0
- package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +236 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +90 -1
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +33 -238
- package/src/react/runtimes/external-message-converter.ts +1 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +216 -0
- package/src/react/runtimes/useRemoteThreadListRuntime.ts +24 -6
- package/src/react/types/MessagePartComponentTypes.ts +7 -3
- package/src/react/types/scopes/tools.ts +2 -0
- package/src/runtime/api/message-part-runtime.ts +3 -3
- package/src/runtime/api/thread-list-runtime.ts +25 -1
- package/src/runtime/base/base-thread-runtime-core.test.ts +94 -3
- package/src/runtime/base/base-thread-runtime-core.ts +10 -4
- package/src/runtime/interfaces/thread-list-runtime-core.ts +20 -1
- package/src/runtime/interfaces/thread-runtime-core.ts +17 -1
- package/src/runtime/utils/auto-status.test.ts +57 -0
- package/src/runtime/utils/auto-status.ts +13 -1
- package/src/runtime/utils/external-message-conversion.test.ts +97 -0
- package/src/runtime/utils/external-message-conversion.ts +17 -1
- package/src/runtime/utils/resolveToolApprovalResponse.test.ts +73 -0
- package/src/runtime/utils/resolveToolApprovalResponse.ts +27 -6
- package/src/runtime/utils/thread-message-like.ts +2 -10
- package/src/runtime/utils/tool-call-tree.test.ts +191 -0
- package/src/runtime/utils/tool-call-tree.ts +97 -0
- package/src/runtimes/external-store/external-store-adapter.ts +38 -2
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +56 -33
- package/src/runtimes/inert/InertThreadRuntimeCore.ts +1 -1
- package/src/runtimes/local/local-thread-runtime-core.test.ts +29 -3
- package/src/runtimes/local/local-thread-runtime-core.ts +5 -1
- package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +112 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +55 -16
- package/src/runtimes/remote-thread-list/title.ts +3 -0
- package/src/runtimes/remote-thread-list/types.ts +6 -5
- package/src/runtimes/tool-invocations/EDGE_CASES.md +110 -5
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +750 -136
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +144 -91
- package/src/store/clients/external-thread.ts +14 -8
- package/src/store/clients/suggestions.test.ts +155 -1
- package/src/store/clients/suggestions.ts +42 -34
- package/src/store/index.ts +4 -0
- package/src/store/internal.ts +2 -0
- package/src/store/primitive-predicates.ts +35 -0
- package/src/store/runtime-clients/thread-list-runtime-client.ts +16 -2
- package/src/store/runtime-clients/useSubscribable.ts +8 -2
- package/src/store/scopes/part.ts +6 -3
- package/src/subscribable/subscribable.test.ts +50 -0
- package/src/subscribable/subscribable.ts +33 -21
- package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +111 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +78 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-reload.test.ts +52 -0
- package/src/tests/external-store-optimistic-id.test.ts +79 -0
- package/src/tests/external-store-repository-instance.test.ts +166 -0
- package/src/tests/external-store-thread-runtime-core-adapter.test.ts +22 -16
- package/src/tests/external-thread-attachments.test.tsx +85 -1
- package/src/tests/remote-thread-list-adapter-switch.test.ts +66 -1
- package/src/tests/thread-switch-events.test.tsx +397 -2
- package/src/types/message.ts +50 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interactables.js","names":["useState","useEffect","useCallback","useRef","useMemo","resource","useAssistantClientRef","ClientOutput","attachTransformScopes","useAssistantScopeEffect","InteractablesState","InteractableRegistration","InteractableStateSchema","InteractablePersistedState","InteractablePersistenceAdapter","toJSONSchema","toPartialJSONSchema","ModelContext","buildInteractableModelContext","notifySubscribers","notifyStateSubscribers","useInteractablePersistenceQueue","useInteractables","state","setState","definitions","persistence","clientRef","stateRef","setStateAndRef","updater","prev","next","current","subscribersRef","Set","partialSchemaCacheRef","Map","detachedStateRef","adapterRef","undefined","exportState","result","id","def","Object","entries","name","updatePersistenceStatus","flushIfPending","schedulePersistence","flush","snapshot","importState","saved","entry","set","changed","setPersistenceAdapter","adapter","setDefState","existing","setDefSelected","selected","provider","getModelContext","defs","subscribe","callback","add","delete","modelContext","register","jsonSchema","stateSchema","e","console","warn","detached","get","description","initialState","_","rest","__","restPersistence","getState","setSelected","Interactables","scopes","parent","source"],"sources":["../../../src/react/interactables-legacy/Interactables.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantClientRef,\n type ClientOutput,\n attachTransformScopes,\n} from \"@assistant-ui/store\";\nimport { useAssistantScopeEffect } from \"@assistant-ui/store/client\";\nimport type {\n InteractablesState,\n InteractableRegistration,\n InteractableStateSchema,\n InteractablePersistedState,\n InteractablePersistenceAdapter,\n} from \"./scopes\";\nimport { toJSONSchema, toPartialJSONSchema } from \"assistant-stream\";\nimport { ModelContext } from \"../../store\";\nimport { buildInteractableModelContext } from \"./interactable-model-context\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../../subscribable/subscribable\";\nimport { useInteractablePersistenceQueue } from \"../interactables-shared/useInteractablePersistenceQueue\";\n\nconst useInteractables = (): ClientOutput<\"interactables\"> => {\n const [state, setState] = useState<InteractablesState>(() => ({\n definitions: {},\n persistence: {},\n }));\n\n const clientRef = useAssistantClientRef();\n\n const stateRef = useRef(state);\n\n const setStateAndRef = useCallback(\n (updater: (prev: InteractablesState) => InteractablesState) => {\n const next = updater(stateRef.current);\n stateRef.current = next;\n setState(next);\n },\n [],\n );\n\n const subscribersRef = useRef(new Set<() => void>());\n const partialSchemaCacheRef = useRef(\n new Map<string, InteractableStateSchema>(),\n );\n const detachedStateRef = useRef(new Map<string, unknown>());\n\n const adapterRef = useRef<InteractablePersistenceAdapter | undefined>(\n undefined,\n );\n\n const exportState = useCallback((): InteractablePersistedState => {\n const result: InteractablePersistedState = {};\n for (const [id, def] of Object.entries(stateRef.current.definitions)) {\n result[id] = { name: def.name, state: def.state };\n }\n return result;\n }, []);\n\n const updatePersistenceStatus = useCallback(\n (\n updater: (\n prev: InteractablesState[\"persistence\"],\n ) => InteractablesState[\"persistence\"],\n ) => {\n setStateAndRef((prev) => {\n const persistence = updater(prev.persistence);\n return persistence === prev.persistence\n ? prev\n : { ...prev, persistence };\n });\n },\n [setStateAndRef],\n );\n\n const { flushIfPending, schedulePersistence, flush } =\n useInteractablePersistenceQueue({\n adapterRef,\n snapshot: exportState,\n updatePersistenceStatus,\n });\n\n const importState = useCallback(\n (saved: InteractablePersistedState) => {\n for (const [id, entry] of Object.entries(saved)) {\n detachedStateRef.current.set(id, entry.state);\n }\n setStateAndRef((prev) => {\n let changed = false;\n const definitions = { ...prev.definitions };\n for (const [id, entry] of Object.entries(saved)) {\n if (definitions[id]) {\n definitions[id] = { ...definitions[id], state: entry.state };\n changed = true;\n }\n }\n return changed ? { ...prev, definitions } : prev;\n });\n },\n [setStateAndRef],\n );\n\n const setPersistenceAdapter = useCallback(\n (adapter: InteractablePersistenceAdapter | undefined) => {\n if (adapterRef.current !== adapter) flushIfPending();\n adapterRef.current = adapter;\n },\n [flushIfPending],\n );\n\n const setDefState = useCallback(\n (id: string, updater: (prev: unknown) => unknown) => {\n setStateAndRef((prev) => {\n const existing = prev.definitions[id];\n if (!existing) return prev;\n return {\n ...prev,\n definitions: {\n ...prev.definitions,\n [id]: { ...existing, state: updater(existing.state) },\n },\n };\n });\n if (stateRef.current.definitions[id]) schedulePersistence(id);\n },\n [schedulePersistence, setStateAndRef],\n );\n\n const setDefSelected = useCallback(\n (id: string, selected: boolean) => {\n setStateAndRef((prev) => {\n const existing = prev.definitions[id];\n if (!existing) return prev;\n return {\n ...prev,\n definitions: {\n ...prev.definitions,\n [id]: { ...existing, selected },\n },\n };\n });\n },\n [setStateAndRef],\n );\n\n const provider = useMemo(\n () => ({\n getModelContext: () => {\n const defs = stateRef.current.definitions;\n return (\n buildInteractableModelContext(\n defs,\n partialSchemaCacheRef.current,\n setDefState,\n ) ?? {}\n );\n },\n subscribe: (callback: () => void) => {\n subscribersRef.current.add(callback);\n return () => {\n subscribersRef.current.delete(callback);\n };\n },\n }),\n [setDefState],\n );\n\n useEffect(() => {\n notifyStateSubscribers(subscribersRef.current);\n }, [state]);\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => clientRef.current!.modelContext().register(provider),\n [provider],\n );\n\n const register = useCallback(\n (def: InteractableRegistration) => {\n try {\n const jsonSchema = toJSONSchema(def.stateSchema);\n partialSchemaCacheRef.current.set(\n def.id,\n toPartialJSONSchema(jsonSchema),\n );\n } catch (e) {\n console.warn(\n `[Interactables] Failed to create partial schema for \"${def.name}\". The update tool will require all fields.`,\n e,\n );\n }\n\n const detached = detachedStateRef.current.get(def.id);\n detachedStateRef.current.delete(def.id);\n\n setStateAndRef((prev) => ({\n ...prev,\n definitions: {\n ...prev.definitions,\n [def.id]: {\n id: def.id,\n name: def.name,\n description: def.description,\n stateSchema: def.stateSchema,\n state:\n prev.definitions[def.id]?.state ?? detached ?? def.initialState,\n selected: def.selected,\n },\n },\n }));\n\n return () => {\n flushIfPending();\n setStateAndRef((prev) => {\n const existing = prev.definitions[def.id];\n if (existing) {\n detachedStateRef.current.set(def.id, existing.state);\n }\n partialSchemaCacheRef.current.delete(def.id);\n const { [def.id]: _, ...rest } = prev.definitions;\n const { [def.id]: __, ...restPersistence } = prev.persistence;\n return { ...prev, definitions: rest, persistence: restPersistence };\n });\n };\n },\n [flushIfPending, setStateAndRef],\n );\n\n return {\n getState: () => state,\n register,\n setState: setDefState,\n setSelected: setDefSelected,\n exportState,\n importState,\n setPersistenceAdapter,\n flush,\n };\n};\n\n/**\n * @deprecated Since 2026-06-14 — migrate to the Unstable / Experimental API.\n * Scheduled for removal on/after 2026-09-14. See\n * {@link https://www.assistant-ui.com/docs/tools/interactables#migrating-from-the-previous-api | Interactables migration guide}.\n */\nexport const Interactables = resource(useInteractables);\n\nattachTransformScopes(useInteractables, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Interactables.js","names":["useState","useEffect","useCallback","useRef","useMemo","resource","useAssistantClientRef","ClientOutput","attachTransformScopes","useAssistantScopeEffect","InteractablesState","InteractableRegistration","InteractableStateSchema","InteractablePersistedState","InteractablePersistenceAdapter","toJSONSchema","toPartialJSONSchema","ModelContext","buildInteractableModelContext","notifySubscribers","notifyStateSubscribers","useInteractablePersistenceQueue","useInteractables","state","setState","definitions","persistence","clientRef","stateRef","setStateAndRef","updater","prev","next","current","subscribersRef","Set","partialSchemaCacheRef","Map","detachedStateRef","adapterRef","undefined","exportState","result","id","def","Object","entries","name","updatePersistenceStatus","flushIfPending","schedulePersistence","flush","snapshot","importState","saved","entry","set","changed","setPersistenceAdapter","adapter","setDefState","existing","setDefSelected","selected","provider","getModelContext","defs","subscribe","callback","add","delete","modelContext","register","jsonSchema","stateSchema","e","console","warn","detached","get","description","initialState","_","rest","__","restPersistence","getState","setSelected","Interactables","scopes","parent","source"],"sources":["../../../src/react/interactables-legacy/Interactables.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantClientRef,\n type ClientOutput,\n attachTransformScopes,\n} from \"@assistant-ui/store\";\nimport { useAssistantScopeEffect } from \"@assistant-ui/store/client\";\nimport type {\n InteractablesState,\n InteractableRegistration,\n InteractableStateSchema,\n InteractablePersistedState,\n InteractablePersistenceAdapter,\n} from \"./scopes\";\nimport { toJSONSchema, toPartialJSONSchema } from \"assistant-stream\";\nimport { ModelContext } from \"../../store\";\nimport { buildInteractableModelContext } from \"./interactable-model-context\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../../subscribable/subscribable\";\nimport { useInteractablePersistenceQueue } from \"../interactables-shared/useInteractablePersistenceQueue\";\n\nconst useInteractables = (): ClientOutput<\"interactables\"> => {\n const [state, setState] = useState<InteractablesState>(() => ({\n definitions: {},\n persistence: {},\n }));\n\n const clientRef = useAssistantClientRef();\n\n const stateRef = useRef(state);\n\n const setStateAndRef = useCallback(\n (updater: (prev: InteractablesState) => InteractablesState) => {\n const next = updater(stateRef.current);\n stateRef.current = next;\n setState(next);\n },\n [],\n );\n\n const subscribersRef = useRef(new Set<() => void>());\n const partialSchemaCacheRef = useRef(\n new Map<string, InteractableStateSchema>(),\n );\n const detachedStateRef = useRef(new Map<string, unknown>());\n\n const adapterRef = useRef<InteractablePersistenceAdapter | undefined>(\n undefined,\n );\n\n const exportState = useCallback((): InteractablePersistedState => {\n const result: InteractablePersistedState = {};\n for (const [id, def] of Object.entries(stateRef.current.definitions)) {\n result[id] = { name: def.name, state: def.state };\n }\n return result;\n }, []);\n\n const updatePersistenceStatus = useCallback(\n (\n updater: (\n prev: InteractablesState[\"persistence\"],\n ) => InteractablesState[\"persistence\"],\n ) => {\n setStateAndRef((prev) => {\n const persistence = updater(prev.persistence);\n return persistence === prev.persistence\n ? prev\n : { ...prev, persistence };\n });\n },\n [setStateAndRef],\n );\n\n const { flushIfPending, schedulePersistence, flush } =\n useInteractablePersistenceQueue({\n adapterRef,\n snapshot: exportState,\n updatePersistenceStatus,\n });\n\n const importState = useCallback(\n (saved: InteractablePersistedState) => {\n for (const [id, entry] of Object.entries(saved)) {\n detachedStateRef.current.set(id, entry.state);\n }\n setStateAndRef((prev) => {\n let changed = false;\n const definitions = { ...prev.definitions };\n for (const [id, entry] of Object.entries(saved)) {\n if (definitions[id]) {\n definitions[id] = { ...definitions[id], state: entry.state };\n changed = true;\n }\n }\n return changed ? { ...prev, definitions } : prev;\n });\n },\n [setStateAndRef],\n );\n\n const setPersistenceAdapter = useCallback(\n (adapter: InteractablePersistenceAdapter | undefined) => {\n if (adapterRef.current !== adapter) flushIfPending();\n adapterRef.current = adapter;\n },\n [flushIfPending],\n );\n\n const setDefState = useCallback(\n (id: string, updater: (prev: unknown) => unknown) => {\n setStateAndRef((prev) => {\n const existing = prev.definitions[id];\n if (!existing) return prev;\n return {\n ...prev,\n definitions: {\n ...prev.definitions,\n [id]: { ...existing, state: updater(existing.state) },\n },\n };\n });\n if (stateRef.current.definitions[id]) schedulePersistence(id);\n },\n [schedulePersistence, setStateAndRef],\n );\n\n const setDefSelected = useCallback(\n (id: string, selected: boolean) => {\n setStateAndRef((prev) => {\n const existing = prev.definitions[id];\n if (!existing) return prev;\n return {\n ...prev,\n definitions: {\n ...prev.definitions,\n [id]: { ...existing, selected },\n },\n };\n });\n },\n [setStateAndRef],\n );\n\n const provider = useMemo(\n () => ({\n getModelContext: () => {\n const defs = stateRef.current.definitions;\n return (\n buildInteractableModelContext(\n defs,\n partialSchemaCacheRef.current,\n setDefState,\n ) ?? {}\n );\n },\n subscribe: (callback: () => void) => {\n subscribersRef.current.add(callback);\n return () => {\n subscribersRef.current.delete(callback);\n };\n },\n }),\n [setDefState],\n );\n\n useEffect(() => {\n notifyStateSubscribers(subscribersRef.current);\n }, [state]);\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => clientRef.current!.modelContext().register(provider),\n [provider],\n );\n\n const register = useCallback(\n (def: InteractableRegistration) => {\n try {\n const jsonSchema = toJSONSchema(def.stateSchema);\n partialSchemaCacheRef.current.set(\n def.id,\n toPartialJSONSchema(jsonSchema),\n );\n } catch (e) {\n console.warn(\n `[Interactables] Failed to create partial schema for \"${def.name}\". The update tool will require all fields.`,\n e,\n );\n }\n\n const detached = detachedStateRef.current.get(def.id);\n detachedStateRef.current.delete(def.id);\n\n setStateAndRef((prev) => ({\n ...prev,\n definitions: {\n ...prev.definitions,\n [def.id]: {\n id: def.id,\n name: def.name,\n description: def.description,\n stateSchema: def.stateSchema,\n state:\n prev.definitions[def.id]?.state ?? detached ?? def.initialState,\n selected: def.selected,\n },\n },\n }));\n\n return () => {\n flushIfPending();\n setStateAndRef((prev) => {\n const existing = prev.definitions[def.id];\n if (existing) {\n detachedStateRef.current.set(def.id, existing.state);\n }\n partialSchemaCacheRef.current.delete(def.id);\n const { [def.id]: _, ...rest } = prev.definitions;\n const { [def.id]: __, ...restPersistence } = prev.persistence;\n return { ...prev, definitions: rest, persistence: restPersistence };\n });\n };\n },\n [flushIfPending, setStateAndRef],\n );\n\n return {\n getState: () => state,\n register,\n setState: setDefState,\n setSelected: setDefSelected,\n exportState,\n importState,\n setPersistenceAdapter,\n flush,\n };\n};\n\n/**\n * @deprecated Since 2026-06-14 — migrate to the Unstable / Experimental API.\n * Scheduled for removal on/after 2026-09-14. See\n * {@link https://www.assistant-ui.com/docs/tools/interactables#migrating-from-the-previous-api | Interactables migration guide}.\n */\nexport const Interactables = resource(useInteractables);\n\nattachTransformScopes(useInteractables, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { ToolCallText as ToolCallText$1 } from "../../model-context/tool-call-text.js";
|
|
1
2
|
import { ToolCallMessagePartComponent, ToolCallMessagePartProps } from "../types/MessagePartComponentTypes.js";
|
|
2
3
|
import { Tool, ToolCallReader, ToolDeclaration, ToolModelOutputFunction } from "assistant-stream";
|
|
3
4
|
import { ReactNode } from "react";
|
|
4
5
|
//#region src/react/model-context/toolbox.d.ts
|
|
6
|
+
type ToolCallText<TArgs extends Record<string, unknown>, TResult> = ToolCallText$1<TArgs, TResult, ReactNode>;
|
|
5
7
|
/**
|
|
6
8
|
* Resolves whether a tool's UI should be presented standalone (outside the
|
|
7
9
|
* chain-of-thought grouping), applying the type-based defaults.
|
|
@@ -31,20 +33,6 @@ type ToolParameters<TArgs extends Record<string, unknown>> = ToolDeclaration<TAr
|
|
|
31
33
|
type ToolExecuteContext = Parameters<NonNullable<ToolDeclaration["execute"]>>[1];
|
|
32
34
|
type ToolExecute<TArgs extends Record<string, unknown>, TResult> = (args: TArgs, context: ToolExecuteContext) => TResult | Promise<TResult>;
|
|
33
35
|
type ToolStreamCall<TArgs extends Record<string, unknown>, TResult> = (reader: ToolCallReader<TArgs, TResult>, context: ToolExecuteContext) => void;
|
|
34
|
-
type ToolCallRunningText<TArgs extends Record<string, unknown>> = ReactNode | ((options: {
|
|
35
|
-
args: TArgs;
|
|
36
|
-
}) => ReactNode);
|
|
37
|
-
type ToolCallCompleteText<TArgs extends Record<string, unknown>, TResult> = ReactNode | ((options: {
|
|
38
|
-
args: TArgs;
|
|
39
|
-
result: TResult | undefined;
|
|
40
|
-
}) => ReactNode);
|
|
41
|
-
type ToolCallText<TArgs extends Record<string, unknown>, TResult> = {
|
|
42
|
-
running: ToolCallRunningText<TArgs>;
|
|
43
|
-
complete?: ToolCallCompleteText<TArgs, TResult> | undefined;
|
|
44
|
-
} | {
|
|
45
|
-
running?: ToolCallRunningText<TArgs> | undefined;
|
|
46
|
-
complete: ToolCallCompleteText<TArgs, TResult>;
|
|
47
|
-
};
|
|
48
36
|
declare const makeToolCallTextComponent: <TArgs extends Record<string, unknown>, TResult>(text: ToolCallText<TArgs, TResult>) => ((part: ToolCallMessagePartProps<TArgs, TResult>) => ReactNode);
|
|
49
37
|
/**
|
|
50
38
|
* Tool definition accepted by the React tool registry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbox.d.ts","names":[],"sources":["../../../src/react/model-context/toolbox.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"toolbox.d.ts","names":[],"sources":["../../../src/react/model-context/toolbox.ts"],"mappings":";;;;;KAgBY,aACV,cAAc,yBACd,WACE,eAAoB,OAAO,SAAS;;;;;;;;;;cAW3B,0BACX,MAAM,KAAK;KAMR,WAAW,GAAG,cAAc,yBAAyB,WAAW;EACnE;IAEE,KACG;EAAY;;EAEH,QAAQ,6BAA6B,OAAO;;EAE5C,SAAS,6BAA6B,OAAO;EAC7C,YAAY,aAAa,OAAO;;EAEpC,QAAQ,6BAA6B,OAAO;KACpD;EACE,SAAS,6BAA6B,OAAO;EAC7C,aAAa,aAAa,OAAO;;KAGlC,eAAe,cAAc,2BAChC,gBAAgB;KAGb,qBAAqB,WACxB,YAAY;KAGT,YAAY,cAAc,yBAAyB,YACtD,MAAM,OACN,SAAS,uBACN,UAAU,QAAQ;KAElB,eAAe,cAAc,yBAAyB,YACzD,QAAQ,eAAe,OAAO,UAC9B,SAAS;cAGE,4BACX,cAAc,yBACd,SAEA,MAAM,aAAa,OAAO,eACvB,MAAM,yBAAyB,OAAO,aAAa;;;;;;;;;KAc5C,eACV,cAAc,0BAA0B,yBACxC,qBACE,WAAW,KAAK,OAAO,UAAU,OAAO;;;;;;;;;;;;;;;;;;;KAoBhC,UAAU,eAAe;;;;;;;;;;KAWhC,sBACH,GACA,mBAAmB,GACnB,4BACoB,EAAE,QAGpB,QAAQ,EAAE,qCACL,KAAK,0BACL,KAAK,QAAQ,2BACf,KAAK,OAAO;KAEd,iCACH;EAAY;GACZ,cAAc,yBACd,WACE,KACF;EAOA;6BAC2B,IACvB,sBAAsB,cAAc,YAAY,QAAQ,QAAQ,iDAErC,IAC3B,sBACE,oBAEA,wBAAwB,QAAQ,QAAQ,QAAQ,yEAGA,IAClD,sBACE,4CAGE,eACA,SAAS,uBACN,QAAQ,WAAW,QAAQ,QAAQ,mBAG9C,sBAAsB,iBAAiB,eAAe;KAInD,uBACH,cAAc,yBACd,WACE,WACF,gBAAgB,OAAO,wBAAuB,KAC1C;EAAY;IACV,iCAAiC,GAAG,OAAO,0BAGjD,OACA;;;;;;;;;;KAYU,uBACV,cAAc,0BAA0B,yBACxC,qBACE,uBAAuB,OAAO,WAAW;KAEjC,qCACV,cAAc,0BAA0B,yBACxC,qBACE,uBAAuB,OAAO;EAChC,YAAY,YAAY,eAAe;;;;;;;KAQ7B,kBACV,uBACG,WAAW,cAAc,6BACxB,qBACJ,yBAAyB,WAAW,8BACjC,WAAW,2BAGb,WAAW,cAAc,uBACxB,YAAY,IACZ,cAAc;;KAKN;;EAEV,SAAS"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveToolCallText } from "../../model-context/tool-call-text.js";
|
|
1
2
|
//#region src/react/model-context/toolbox.ts
|
|
2
3
|
/**
|
|
3
4
|
* Resolves whether a tool's UI should be presented standalone (outside the
|
|
@@ -12,19 +13,6 @@ const isStandaloneToolDisplay = (tool) => {
|
|
|
12
13
|
if (tool.display !== void 0) return tool.display === "standalone";
|
|
13
14
|
return tool.type === "human";
|
|
14
15
|
};
|
|
15
|
-
const resolveToolCallText = (text, part) => {
|
|
16
|
-
if (!(part.status?.type === "running" || part.status?.type === "requires-action")) {
|
|
17
|
-
const value = text.complete;
|
|
18
|
-
if (typeof value !== "function") return value ?? null;
|
|
19
|
-
return value({
|
|
20
|
-
args: part.args,
|
|
21
|
-
result: part.result
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
const value = text.running;
|
|
25
|
-
if (typeof value !== "function") return value ?? null;
|
|
26
|
-
return value({ args: part.args });
|
|
27
|
-
};
|
|
28
16
|
const makeToolCallTextComponent = (text) => {
|
|
29
17
|
return function ToolCallTextComponent(part) {
|
|
30
18
|
return resolveToolCallText(text, part);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbox.js","names":["Tool","ToolCallReader","ToolDeclaration","ToolModelOutputFunction","ReactNode","ToolCallMessagePartComponent","ToolCallMessagePartProps","isStandaloneToolDisplay","tool","Pick","display","undefined","type","WithRender","Record","T","render","TArgs","TResult","renderText","ToolCallText","ToolParameters","ToolExecuteContext","Parameters","NonNullable","ToolExecute","args","context","Promise","ToolStreamCall","reader","ToolCallRunningText","options","ToolCallCompleteText","result","running","complete","resolveToolCallText","text","part","isRunning","status","value","makeToolCallTextComponent","ToolCallTextComponent","ToolDefinition","Toolkit","OverrideOptionalField","TKey","Exclude","TValue","OverrideToolDeclarationCallbacks","streamCall","Omit","NoInfer","ToolkitDefinitionInput","ToolkitDefinitionEntry","ToolkitDefinitionEntryWithParameters","parameters","ToolkitDefinition","TArgsByName","K","TResultByName","ToolsConfig","toolkit"],"sources":["../../../src/react/model-context/toolbox.ts"],"sourcesContent":["import type {\n Tool,\n ToolCallReader,\n ToolDeclaration,\n ToolModelOutputFunction,\n} from \"assistant-stream\";\nimport type { ReactNode } from \"react\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"../types/MessagePartComponentTypes\";\n\n/**\n * Resolves whether a tool's UI should be presented standalone (outside the\n * chain-of-thought grouping), applying the type-based defaults.\n *\n * An explicit `display` wins. Otherwise `human` tools default to standalone\n * (they prompt the user), and every other tool defaults to inline (a trace of\n * what the model is doing). MCP-app tool calls are detected separately from\n * the part itself and are not resolved here.\n */\nexport const isStandaloneToolDisplay = (\n tool: Pick<Tool<any, any>, \"type\" | \"display\">,\n): boolean => {\n if (tool.display !== undefined) return tool.display === \"standalone\";\n return tool.type === \"human\";\n};\n\ntype WithRender<T, TArgs extends Record<string, unknown>, TResult> = T extends {\n type: \"frontend\" | \"human\";\n}\n ? T &\n (T extends { type: \"frontend\" }\n ?\n | { render: ToolCallMessagePartComponent<TArgs, TResult> }\n | {\n render?: ToolCallMessagePartComponent<TArgs, TResult>;\n renderText: ToolCallText<TArgs, TResult>;\n }\n : { render: ToolCallMessagePartComponent<TArgs, TResult> })\n : T & {\n render?: ToolCallMessagePartComponent<TArgs, TResult> | undefined;\n renderText?: ToolCallText<TArgs, TResult> | undefined;\n };\n\ntype ToolParameters<TArgs extends Record<string, unknown>> =\n ToolDeclaration<TArgs>[\"parameters\"];\n\n// ToolExecutionContext is not re-exported from assistant-stream's public entry.\ntype ToolExecuteContext = Parameters<\n NonNullable<ToolDeclaration[\"execute\"]>\n>[1];\n\ntype ToolExecute<TArgs extends Record<string, unknown>, TResult> = (\n args: TArgs,\n context: ToolExecuteContext,\n) => TResult | Promise<TResult>;\n\ntype ToolStreamCall<TArgs extends Record<string, unknown>, TResult> = (\n reader: ToolCallReader<TArgs, TResult>,\n context: ToolExecuteContext,\n) => void;\n\ntype ToolCallRunningText<TArgs extends Record<string, unknown>> =\n | ReactNode\n | ((options: { args: TArgs }) => ReactNode);\n\ntype ToolCallCompleteText<TArgs extends Record<string, unknown>, TResult> =\n | ReactNode\n | ((options: { args: TArgs; result: TResult | undefined }) => ReactNode);\n\nexport type ToolCallText<TArgs extends Record<string, unknown>, TResult> =\n | {\n running: ToolCallRunningText<TArgs>;\n complete?: ToolCallCompleteText<TArgs, TResult> | undefined;\n }\n | {\n running?: ToolCallRunningText<TArgs> | undefined;\n complete: ToolCallCompleteText<TArgs, TResult>;\n };\n\nconst resolveToolCallText = <TArgs extends Record<string, unknown>, TResult>(\n text: ToolCallText<TArgs, TResult>,\n part: ToolCallMessagePartProps<TArgs, TResult>,\n): ReactNode => {\n const isRunning =\n part.status?.type === \"running\" || part.status?.type === \"requires-action\";\n\n if (!isRunning) {\n const value = text.complete;\n if (typeof value !== \"function\") return value ?? null;\n return value({ args: part.args, result: part.result });\n }\n\n const value = text.running;\n if (typeof value !== \"function\") return value ?? null;\n return value({ args: part.args });\n};\n\nexport const makeToolCallTextComponent = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n text: ToolCallText<TArgs, TResult>,\n): ((part: ToolCallMessagePartProps<TArgs, TResult>) => ReactNode) => {\n return function ToolCallTextComponent(part) {\n return resolveToolCallText(text, part);\n };\n};\n\n/**\n * Tool definition accepted by the React tool registry.\n *\n * Extends the core tool contract with tool-call display options. Human tools\n * rely on `render` to collect input from the user. Frontend tools execute in\n * the browser and require either `render` or `renderText` for their progress\n * and result. Backend tools execute server-side and may omit a renderer.\n */\nexport type ToolDefinition<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = WithRender<Tool<TArgs, TResult>, TArgs, TResult>;\n\n/**\n * Named collection of tools exposed to the assistant model.\n *\n * Keys are the tool names the model receives and uses in tool calls.\n *\n * @example\n * ```tsx\n * const toolkit = defineToolkit({\n * get_weather: {\n * type: \"frontend\",\n * description: \"Get the weather for a city.\",\n * parameters: weatherSchema,\n * execute: async ({ city }: { city: string }) => fetchWeather(city),\n * render: WeatherToolUI,\n * },\n * });\n * ```\n */\nexport type Toolkit = Record<string, ToolDefinition<any, any>>;\n\n/**\n * A tool as authored, before the build splits it: like {@link ToolDefinition}\n * but it may declare `description`, `parameters`, and a server-side `execute`\n * alongside its `render`. The `type` field is **not** authored — the\n * `\"use generative\"` compiler infers it (`execute: humanTool()` → human;\n * `execute: providerTool(...)` → provider; `execute` with a `\"use client\"`\n * directive → frontend; otherwise backend) and writes it back — so declaring it\n * here is a type error.\n */\ntype OverrideOptionalField<\n T,\n TKey extends keyof T,\n TValue,\n> = undefined extends T[TKey]\n ? // Preserve `?: undefined` fields (for variants that explicitly disallow a\n // callback) instead of widening them to accept the override value.\n Exclude<T[TKey], undefined> extends never\n ? { [K in TKey]?: undefined }\n : { [K in TKey]?: TValue | undefined }\n : { [K in TKey]: TValue };\n\ntype OverrideToolDeclarationCallbacks<\n T extends { streamCall?: unknown },\n TArgs extends Record<string, unknown>,\n TResult,\n> = Omit<\n T,\n | \"type\"\n | \"execute\"\n | \"toModelOutput\"\n | \"experimental_onSchemaValidationError\"\n | \"streamCall\"\n> & {\n type?: never;\n} & (\"execute\" extends keyof T\n ? OverrideOptionalField<T, \"execute\", ToolExecute<NoInfer<TArgs>, TResult>>\n : {}) &\n (\"toModelOutput\" extends keyof T\n ? OverrideOptionalField<\n T,\n \"toModelOutput\",\n ToolModelOutputFunction<NoInfer<TArgs>, NoInfer<TResult>>\n >\n : {}) &\n (\"experimental_onSchemaValidationError\" extends keyof T\n ? OverrideOptionalField<\n T,\n \"experimental_onSchemaValidationError\",\n (\n args: unknown,\n context: ToolExecuteContext,\n ) => NoInfer<TResult> | Promise<NoInfer<TResult>>\n >\n : {}) &\n OverrideOptionalField<T, \"streamCall\", ToolStreamCall<TArgs, unknown>>;\n\n// Keep the authored shape tied to ToolDeclaration's union variants while\n// overriding callback fields to avoid inference pollution.\ntype ToolkitDefinitionInput<\n TArgs extends Record<string, unknown>,\n TResult,\n> = WithRender<\n ToolDeclaration<TArgs, TResult> extends infer T\n ? T extends { streamCall?: unknown }\n ? OverrideToolDeclarationCallbacks<T, TArgs, TResult>\n : never\n : never,\n TArgs,\n TResult\n>;\n\n/**\n * A single entry in a {@link ToolkitDefinition}.\n *\n * Either authored inline (whose `type` the compiler infers) or an already-formed\n * {@link ToolDefinition} produced by a factory whose own build splits it across\n * targets — e.g. `new JSONGenerativeUI({ library }).present()`. The factory case\n * carries a `type`, so it can only match the {@link ToolDefinition} arm of this\n * union.\n */\nexport type ToolkitDefinitionEntry<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = ToolkitDefinitionInput<TArgs, TResult> | ToolDefinition<any, any>;\n\nexport type ToolkitDefinitionEntryWithParameters<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = ToolkitDefinitionInput<TArgs, TResult> & {\n parameters: NonNullable<ToolParameters<TArgs>>;\n};\n\n/**\n * The permissive, authoring-time counterpart to {@link Toolkit} — the input to\n * {@link defineToolkit}. Backend entries may carry their server `execute` here;\n * the canonical {@link Toolkit} keeps those fields `undefined`.\n */\nexport type ToolkitDefinition<\n TArgsByName extends {\n [K in keyof TArgsByName]: Record<string, unknown>;\n } = Record<string, any>,\n TResultByName extends { [K in keyof TArgsByName]: unknown } = {\n [K in keyof TArgsByName]: any;\n },\n> = {\n [K in keyof TArgsByName]: ToolkitDefinitionEntry<\n TArgsByName[K],\n TResultByName[K]\n >;\n};\n\n/** Configuration for the {@link Tools} resource. */\nexport type ToolsConfig = {\n /** Tools to register with model context and, when provided, message renderers. */\n toolkit: Toolkit;\n};\n"],"mappings":";;;;;;;;;;AAqBA,MAAaO,2BACXC,SACY;CACZ,IAAIA,KAAKE,YAAYC,KAAAA,GAAW,OAAOH,KAAKE,YAAY;CACxD,OAAOF,KAAKI,SAAS;AACvB;AAuDA,MAAMyB,uBACJC,MACAC,SACc;CAId,IAAI,EAFFA,KAAKE,QAAQ7B,SAAS,aAAa2B,KAAKE,QAAQ7B,SAAS,oBAE3C;EACd,MAAM8B,QAAQJ,KAAKF;EACnB,IAAI,OAAOM,UAAU,YAAY,OAAOA,SAAS;EACjD,OAAOA,MAAM;GAAEhB,MAAMa,KAAKb;GAAMQ,QAAQK,KAAKL;EAAO,CAAC;CACvD;CAEA,MAAMQ,QAAQJ,KAAKH;CACnB,IAAI,OAAOO,UAAU,YAAY,OAAOA,SAAS;CACjD,OAAOA,MAAM,EAAEhB,MAAMa,KAAKb,KAAK,CAAC;AAClC;AAEA,MAAaiB,6BAIXL,SACoE;CACpE,OAAO,SAASM,sBAAsBL,MAAM;EAC1C,OAAOF,oBAAoBC,MAAMC,IAAI;CACvC;AACF"}
|
|
1
|
+
{"version":3,"file":"toolbox.js","names":["Tool","ToolCallReader","ToolDeclaration","ToolModelOutputFunction","ReactNode","ToolCallMessagePartComponent","ToolCallMessagePartProps","resolveToolCallText","ToolCallText","NeutralToolCallText","Record","TArgs","TResult","isStandaloneToolDisplay","tool","Pick","display","undefined","type","WithRender","T","render","renderText","ToolParameters","ToolExecuteContext","Parameters","NonNullable","ToolExecute","args","context","Promise","ToolStreamCall","reader","makeToolCallTextComponent","text","part","ToolCallTextComponent","ToolDefinition","Toolkit","OverrideOptionalField","TKey","Exclude","TValue","OverrideToolDeclarationCallbacks","streamCall","Omit","NoInfer","ToolkitDefinitionInput","ToolkitDefinitionEntry","ToolkitDefinitionEntryWithParameters","parameters","ToolkitDefinition","TArgsByName","K","TResultByName","ToolsConfig","toolkit"],"sources":["../../../src/react/model-context/toolbox.ts"],"sourcesContent":["import type {\n Tool,\n ToolCallReader,\n ToolDeclaration,\n ToolModelOutputFunction,\n} from \"assistant-stream\";\nimport type { ReactNode } from \"react\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"../types/MessagePartComponentTypes\";\nimport {\n resolveToolCallText,\n type ToolCallText as NeutralToolCallText,\n} from \"../../model-context/tool-call-text\";\n\nexport type ToolCallText<\n TArgs extends Record<string, unknown>,\n TResult,\n> = NeutralToolCallText<TArgs, TResult, ReactNode>;\n\n/**\n * Resolves whether a tool's UI should be presented standalone (outside the\n * chain-of-thought grouping), applying the type-based defaults.\n *\n * An explicit `display` wins. Otherwise `human` tools default to standalone\n * (they prompt the user), and every other tool defaults to inline (a trace of\n * what the model is doing). MCP-app tool calls are detected separately from\n * the part itself and are not resolved here.\n */\nexport const isStandaloneToolDisplay = (\n tool: Pick<Tool<any, any>, \"type\" | \"display\">,\n): boolean => {\n if (tool.display !== undefined) return tool.display === \"standalone\";\n return tool.type === \"human\";\n};\n\ntype WithRender<T, TArgs extends Record<string, unknown>, TResult> = T extends {\n type: \"frontend\" | \"human\";\n}\n ? T &\n (T extends { type: \"frontend\" }\n ?\n | { render: ToolCallMessagePartComponent<TArgs, TResult> }\n | {\n render?: ToolCallMessagePartComponent<TArgs, TResult>;\n renderText: ToolCallText<TArgs, TResult>;\n }\n : { render: ToolCallMessagePartComponent<TArgs, TResult> })\n : T & {\n render?: ToolCallMessagePartComponent<TArgs, TResult> | undefined;\n renderText?: ToolCallText<TArgs, TResult> | undefined;\n };\n\ntype ToolParameters<TArgs extends Record<string, unknown>> =\n ToolDeclaration<TArgs>[\"parameters\"];\n\n// ToolExecutionContext is not re-exported from assistant-stream's public entry.\ntype ToolExecuteContext = Parameters<\n NonNullable<ToolDeclaration[\"execute\"]>\n>[1];\n\ntype ToolExecute<TArgs extends Record<string, unknown>, TResult> = (\n args: TArgs,\n context: ToolExecuteContext,\n) => TResult | Promise<TResult>;\n\ntype ToolStreamCall<TArgs extends Record<string, unknown>, TResult> = (\n reader: ToolCallReader<TArgs, TResult>,\n context: ToolExecuteContext,\n) => void;\n\nexport const makeToolCallTextComponent = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n text: ToolCallText<TArgs, TResult>,\n): ((part: ToolCallMessagePartProps<TArgs, TResult>) => ReactNode) => {\n return function ToolCallTextComponent(part) {\n return resolveToolCallText(text, part);\n };\n};\n\n/**\n * Tool definition accepted by the React tool registry.\n *\n * Extends the core tool contract with tool-call display options. Human tools\n * rely on `render` to collect input from the user. Frontend tools execute in\n * the browser and require either `render` or `renderText` for their progress\n * and result. Backend tools execute server-side and may omit a renderer.\n */\nexport type ToolDefinition<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = WithRender<Tool<TArgs, TResult>, TArgs, TResult>;\n\n/**\n * Named collection of tools exposed to the assistant model.\n *\n * Keys are the tool names the model receives and uses in tool calls.\n *\n * @example\n * ```tsx\n * const toolkit = defineToolkit({\n * get_weather: {\n * type: \"frontend\",\n * description: \"Get the weather for a city.\",\n * parameters: weatherSchema,\n * execute: async ({ city }: { city: string }) => fetchWeather(city),\n * render: WeatherToolUI,\n * },\n * });\n * ```\n */\nexport type Toolkit = Record<string, ToolDefinition<any, any>>;\n\n/**\n * A tool as authored, before the build splits it: like {@link ToolDefinition}\n * but it may declare `description`, `parameters`, and a server-side `execute`\n * alongside its `render`. The `type` field is **not** authored — the\n * `\"use generative\"` compiler infers it (`execute: humanTool()` → human;\n * `execute: providerTool(...)` → provider; `execute` with a `\"use client\"`\n * directive → frontend; otherwise backend) and writes it back — so declaring it\n * here is a type error.\n */\ntype OverrideOptionalField<\n T,\n TKey extends keyof T,\n TValue,\n> = undefined extends T[TKey]\n ? // Preserve `?: undefined` fields (for variants that explicitly disallow a\n // callback) instead of widening them to accept the override value.\n Exclude<T[TKey], undefined> extends never\n ? { [K in TKey]?: undefined }\n : { [K in TKey]?: TValue | undefined }\n : { [K in TKey]: TValue };\n\ntype OverrideToolDeclarationCallbacks<\n T extends { streamCall?: unknown },\n TArgs extends Record<string, unknown>,\n TResult,\n> = Omit<\n T,\n | \"type\"\n | \"execute\"\n | \"toModelOutput\"\n | \"experimental_onSchemaValidationError\"\n | \"streamCall\"\n> & {\n type?: never;\n} & (\"execute\" extends keyof T\n ? OverrideOptionalField<T, \"execute\", ToolExecute<NoInfer<TArgs>, TResult>>\n : {}) &\n (\"toModelOutput\" extends keyof T\n ? OverrideOptionalField<\n T,\n \"toModelOutput\",\n ToolModelOutputFunction<NoInfer<TArgs>, NoInfer<TResult>>\n >\n : {}) &\n (\"experimental_onSchemaValidationError\" extends keyof T\n ? OverrideOptionalField<\n T,\n \"experimental_onSchemaValidationError\",\n (\n args: unknown,\n context: ToolExecuteContext,\n ) => NoInfer<TResult> | Promise<NoInfer<TResult>>\n >\n : {}) &\n OverrideOptionalField<T, \"streamCall\", ToolStreamCall<TArgs, unknown>>;\n\n// Keep the authored shape tied to ToolDeclaration's union variants while\n// overriding callback fields to avoid inference pollution.\ntype ToolkitDefinitionInput<\n TArgs extends Record<string, unknown>,\n TResult,\n> = WithRender<\n ToolDeclaration<TArgs, TResult> extends infer T\n ? T extends { streamCall?: unknown }\n ? OverrideToolDeclarationCallbacks<T, TArgs, TResult>\n : never\n : never,\n TArgs,\n TResult\n>;\n\n/**\n * A single entry in a {@link ToolkitDefinition}.\n *\n * Either authored inline (whose `type` the compiler infers) or an already-formed\n * {@link ToolDefinition} produced by a factory whose own build splits it across\n * targets — e.g. `new JSONGenerativeUI({ library }).present()`. The factory case\n * carries a `type`, so it can only match the {@link ToolDefinition} arm of this\n * union.\n */\nexport type ToolkitDefinitionEntry<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = ToolkitDefinitionInput<TArgs, TResult> | ToolDefinition<any, any>;\n\nexport type ToolkitDefinitionEntryWithParameters<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = ToolkitDefinitionInput<TArgs, TResult> & {\n parameters: NonNullable<ToolParameters<TArgs>>;\n};\n\n/**\n * The permissive, authoring-time counterpart to {@link Toolkit} — the input to\n * {@link defineToolkit}. Backend entries may carry their server `execute` here;\n * the canonical {@link Toolkit} keeps those fields `undefined`.\n */\nexport type ToolkitDefinition<\n TArgsByName extends {\n [K in keyof TArgsByName]: Record<string, unknown>;\n } = Record<string, any>,\n TResultByName extends { [K in keyof TArgsByName]: unknown } = {\n [K in keyof TArgsByName]: any;\n },\n> = {\n [K in keyof TArgsByName]: ToolkitDefinitionEntry<\n TArgsByName[K],\n TResultByName[K]\n >;\n};\n\n/** Configuration for the {@link Tools} resource. */\nexport type ToolsConfig = {\n /** Tools to register with model context and, when provided, message renderers. */\n toolkit: Toolkit;\n};\n"],"mappings":";;;;;;;;;;;AA8BA,MAAaa,2BACXC,SACY;CACZ,IAAIA,KAAKE,YAAYC,KAAAA,GAAW,OAAOH,KAAKE,YAAY;CACxD,OAAOF,KAAKI,SAAS;AACvB;AAqCA,MAAae,6BAIXC,SACoE;CACpE,OAAO,SAASE,sBAAsBD,MAAM;EAC1C,OAAO5B,oBAAoB2B,MAAMC,IAAI;CACvC;AACF"}
|
|
@@ -1,15 +1,45 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
2
|
+
import { useEffect, useInsertionEffect, useRef } from "@assistant-ui/tap/react-shim";
|
|
2
3
|
import { useAui } from "@assistant-ui/store";
|
|
3
4
|
//#region src/react/model-context/useAssistantContext.ts
|
|
4
5
|
const useAssistantContext = (config) => {
|
|
5
|
-
const
|
|
6
|
+
const $ = c(7);
|
|
7
|
+
const { getContext, disabled: t0 } = config;
|
|
8
|
+
const disabled = t0 === void 0 ? false : t0;
|
|
6
9
|
const aui = useAui();
|
|
7
10
|
const getContextRef = useRef(getContext);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
let t1;
|
|
12
|
+
let t2;
|
|
13
|
+
if ($[0] !== getContext) {
|
|
14
|
+
t1 = () => {
|
|
15
|
+
getContextRef.current = getContext;
|
|
16
|
+
};
|
|
17
|
+
t2 = [getContext];
|
|
18
|
+
$[0] = getContext;
|
|
19
|
+
$[1] = t1;
|
|
20
|
+
$[2] = t2;
|
|
21
|
+
} else {
|
|
22
|
+
t1 = $[1];
|
|
23
|
+
t2 = $[2];
|
|
24
|
+
}
|
|
25
|
+
useInsertionEffect(t1, t2);
|
|
26
|
+
let t3;
|
|
27
|
+
let t4;
|
|
28
|
+
if ($[3] !== aui || $[4] !== disabled) {
|
|
29
|
+
t3 = () => {
|
|
30
|
+
if (disabled) return;
|
|
31
|
+
return aui.modelContext.register({ getModelContext: () => ({ system: getContextRef.current() }) });
|
|
32
|
+
};
|
|
33
|
+
t4 = [aui, disabled];
|
|
34
|
+
$[3] = aui;
|
|
35
|
+
$[4] = disabled;
|
|
36
|
+
$[5] = t3;
|
|
37
|
+
$[6] = t4;
|
|
38
|
+
} else {
|
|
39
|
+
t3 = $[5];
|
|
40
|
+
t4 = $[6];
|
|
41
|
+
}
|
|
42
|
+
useEffect(t3, t4);
|
|
13
43
|
};
|
|
14
44
|
//#endregion
|
|
15
45
|
export { useAssistantContext };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAssistantContext.js","names":["useEffect","useRef","useAui","AssistantContextConfig","useAssistantContext","config","getContext","disabled","aui","getContextRef","current","modelContext","register","getModelContext","system"],"sources":["../../../src/react/model-context/useAssistantContext.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { AssistantContextConfig } from \"../..\";\n\nexport type { AssistantContextConfig };\n\nexport const useAssistantContext = (config: AssistantContextConfig) => {\n const { getContext, disabled = false } = config;\n const aui = useAui();\n const getContextRef = useRef(getContext);\n getContextRef.current = getContext;\n\n useEffect(() => {\n if (disabled) return;\n\n return aui.modelContext.register({\n getModelContext: () => ({\n system: getContextRef.current(),\n }),\n });\n }, [aui, disabled]);\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAssistantContext.js","names":["useEffect","useInsertionEffect","useRef","useAui","AssistantContextConfig","useAssistantContext","config","$","_c","getContext","disabled","t0","undefined","aui","getContextRef","t1","t2","current","t3","t4","modelContext","register","getModelContext","system"],"sources":["../../../src/react/model-context/useAssistantContext.ts"],"sourcesContent":["import { useEffect, useInsertionEffect, useRef } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { AssistantContextConfig } from \"../..\";\n\nexport type { AssistantContextConfig };\n\nexport const useAssistantContext = (config: AssistantContextConfig) => {\n const { getContext, disabled = false } = config;\n const aui = useAui();\n const getContextRef = useRef(getContext);\n useInsertionEffect(() => {\n getContextRef.current = getContext;\n }, [getContext]);\n\n useEffect(() => {\n if (disabled) return;\n\n return aui.modelContext.register({\n getModelContext: () => ({\n system: getContextRef.current(),\n }),\n });\n }, [aui, disabled]);\n};\n"],"mappings":";;;;AAMA,MAAaK,uBAAsBC,WAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACjC,MAAA,EAAAC,YAAAC,UAAAC,OAAyCL;CAArB,MAAAI,WAAAC,OAAAC,KAAAA,IAAA,QAAAD;CACpB,MAAAE,MAAYV,OAAO;CACnB,MAAAW,gBAAsBZ,OAAOO,UAAU;CAAE,IAAAM;CAAA,IAAAC;CAAA,IAAAT,EAAA,OAAAE,YAAA;EACtBM,WAAA;GACjBD,cAAaG,UAAWR;EAAH;EACpBO,KAAA,CAACP,UAAU;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAA;EAAAD,KAAAR,EAAA;EAAAS,KAAAT,EAAA;CAAA;CAFfN,mBAAmBc,IAEhBC,EAAY;CAAC,IAAAE;CAAA,IAAAC;CAAA,IAAAZ,EAAA,OAAAM,OAAAN,EAAA,OAAAG,UAAA;EAENQ,WAAA;GACR,IAAIR,UAAQ;GAAS,OAEdG,IAAGO,aAAaC,SAAU,EAAAC,wBACP,EAAAC,QACdT,cAAaG,QAAS,EAChC,GACF,CAAC;EAAC;EACDE,KAAA,CAACN,KAAKH,QAAQ;EAACH,EAAA,KAAAM;EAAAN,EAAA,KAAAG;EAAAH,EAAA,KAAAW;EAAAX,EAAA,KAAAY;CAAA,OAAA;EAAAD,KAAAX,EAAA;EAAAY,KAAAZ,EAAA;CAAA;CARlBP,UAAUkB,IAQPC,EAAe;AAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
2
|
+
import { useEffect, useInsertionEffect, useRef } from "@assistant-ui/tap/react-shim";
|
|
2
3
|
import { useAui } from "@assistant-ui/store";
|
|
3
4
|
//#region src/react/model-context/useAuiToolOverrides.ts
|
|
4
5
|
/**
|
|
@@ -15,15 +16,40 @@ import { useAui } from "@assistant-ui/store";
|
|
|
15
16
|
* @deprecated Experimental, API may change.
|
|
16
17
|
*/
|
|
17
18
|
function useAuiToolOverrides(overrides) {
|
|
19
|
+
const $ = c(7);
|
|
18
20
|
const aui = useAui();
|
|
19
21
|
const overridesRef = useRef(overrides);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
let t0;
|
|
23
|
+
let t1;
|
|
24
|
+
if ($[0] !== overrides) {
|
|
25
|
+
t0 = () => {
|
|
26
|
+
overridesRef.current = overrides;
|
|
27
|
+
};
|
|
28
|
+
t1 = [overrides];
|
|
29
|
+
$[0] = overrides;
|
|
30
|
+
$[1] = t0;
|
|
31
|
+
$[2] = t1;
|
|
32
|
+
} else {
|
|
33
|
+
t0 = $[1];
|
|
34
|
+
t1 = $[2];
|
|
35
|
+
}
|
|
36
|
+
useInsertionEffect(t0, t1);
|
|
37
|
+
let t2;
|
|
38
|
+
if ($[3] !== aui.modelContext) {
|
|
39
|
+
t2 = () => aui.modelContext.register({ getModelContext: () => ({
|
|
23
40
|
priority: 1e3,
|
|
24
41
|
tools: overridesRef.current
|
|
25
42
|
}) });
|
|
26
|
-
|
|
43
|
+
$[3] = aui.modelContext;
|
|
44
|
+
$[4] = t2;
|
|
45
|
+
} else t2 = $[4];
|
|
46
|
+
let t3;
|
|
47
|
+
if ($[5] !== aui) {
|
|
48
|
+
t3 = [aui];
|
|
49
|
+
$[5] = aui;
|
|
50
|
+
$[6] = t3;
|
|
51
|
+
} else t3 = $[6];
|
|
52
|
+
useEffect(t2, t3);
|
|
27
53
|
}
|
|
28
54
|
//#endregion
|
|
29
55
|
export { useAuiToolOverrides };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuiToolOverrides.js","names":["useEffect","useRef","useAui","Tool","AuiToolOverride","Record","Partial","TArgs","TResult","AuiToolOverrides","useAuiToolOverrides","overrides","aui","overridesRef","current","modelContext","register","getModelContext","priority","tools"],"sources":["../../../src/react/model-context/useAuiToolOverrides.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { Tool } from \"assistant-stream\";\n\ntype AuiToolOverride<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = Partial<Tool<TArgs, TResult>>;\n\ntype AuiToolOverrides = Record<string, AuiToolOverride<any, any>>;\n\n/**\n * Overrides toolkit entries for the current assistant scope.\n *\n * This is intended for dynamic local-state tools whose model-facing contract is\n * declared in a `\"use generative\"` toolkit file with `execute: stubTool()`, but\n * whose actual executor must close over React state in the mounted component.\n * Keep the override keys stable after mount; dynamic key addition/removal is not\n * currently observed.\n * Overrides are registered at priority 1000, above toolkit defaults. Only one\n * mounted override provider may define a given tool name at a time.\n *\n * @deprecated Experimental, API may change.\n */\nexport function useAuiToolOverrides(overrides: AuiToolOverrides): void {\n const aui = useAui();\n const overridesRef = useRef(overrides);\n overridesRef.current = overrides;\n\n useEffect(() => {\n return aui.modelContext.register({\n getModelContext: () => ({\n priority: 1000,\n tools: overridesRef.current as Record<string, Tool<any, any>>,\n }),\n });\n }, [aui]);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAuiToolOverrides.js","names":["useEffect","useInsertionEffect","useRef","useAui","Tool","AuiToolOverride","Record","Partial","TArgs","TResult","AuiToolOverrides","useAuiToolOverrides","overrides","$","_c","aui","overridesRef","t0","t1","current","t2","modelContext","register","getModelContext","priority","tools","t3"],"sources":["../../../src/react/model-context/useAuiToolOverrides.ts"],"sourcesContent":["import { useEffect, useInsertionEffect, useRef } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { Tool } from \"assistant-stream\";\n\ntype AuiToolOverride<\n TArgs extends Record<string, unknown> = Record<string, unknown>,\n TResult = unknown,\n> = Partial<Tool<TArgs, TResult>>;\n\ntype AuiToolOverrides = Record<string, AuiToolOverride<any, any>>;\n\n/**\n * Overrides toolkit entries for the current assistant scope.\n *\n * This is intended for dynamic local-state tools whose model-facing contract is\n * declared in a `\"use generative\"` toolkit file with `execute: stubTool()`, but\n * whose actual executor must close over React state in the mounted component.\n * Keep the override keys stable after mount; dynamic key addition/removal is not\n * currently observed.\n * Overrides are registered at priority 1000, above toolkit defaults. Only one\n * mounted override provider may define a given tool name at a time.\n *\n * @deprecated Experimental, API may change.\n */\nexport function useAuiToolOverrides(overrides: AuiToolOverrides): void {\n const aui = useAui();\n const overridesRef = useRef(overrides);\n useInsertionEffect(() => {\n overridesRef.current = overrides;\n }, [overrides]);\n\n useEffect(() => {\n return aui.modelContext.register({\n getModelContext: () => ({\n priority: 1000,\n tools: overridesRef.current as Record<string, Tool<any, any>>,\n }),\n });\n }, [aui]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAwBA,SAAOW,oBAAAC,WAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACL,MAAAC,MAAYZ,OAAO;CACnB,MAAAa,eAAqBd,OAAOU,SAAS;CAAE,IAAAK;CAAA,IAAAC;CAAA,IAAAL,EAAA,OAAAD,WAAA;EACpBK,WAAA;GACjBD,aAAYG,UAAWP;EAAH;EACnBM,KAAA,CAACN,SAAS;EAACC,EAAA,KAAAD;EAAAC,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;CAAA,OAAA;EAAAD,KAAAJ,EAAA;EAAAK,KAAAL,EAAA;CAAA;CAFdZ,mBAAmBgB,IAEhBC,EAAW;CAAC,IAAAE;CAAA,IAAAP,EAAA,OAAAE,IAAAM,cAAA;EAELD,WACDL,IAAGM,aAAaC,SAAU,EAAAC,wBACP;GAAAC,UACZ;GAAIC,OACPT,aAAYG;EACrB,GACF,CAAC;EACFN,EAAA,KAAAE,IAAAM;EAAAR,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,OAAAE,KAAA;EAAEW,KAAA,CAACX,GAAG;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAPRb,UAAUoB,IAOPM,EAAK;AAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInlineRender.d.ts","names":[],"sources":["../../../src/react/model-context/useInlineRender.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"useInlineRender.d.ts","names":[],"sources":["../../../src/react/model-context/useInlineRender.ts"],"mappings":";;;cAKa,kBAAmB,OAAO,SACrC,QAAQ,GAAG,yBAAyB,OAAO,cAC1C,GAAG,yBAAyB,OAAO"}
|
|
@@ -1,41 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { WritableSubscribable } from "../../subscribable/subscribable.js";
|
|
2
|
+
import { useSubscribable } from "../../store/runtime-clients/useSubscribable.js";
|
|
3
|
+
import { useCallback, useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
4
4
|
//#region src/react/model-context/useInlineRender.ts
|
|
5
5
|
const useInlineRender = (toolUI) => {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
const [useToolUIStore] = useState(t0);
|
|
14
|
-
let t1;
|
|
15
|
-
let t2;
|
|
16
|
-
if ($[2] !== toolUI || $[3] !== useToolUIStore) {
|
|
17
|
-
t1 = () => {
|
|
18
|
-
useToolUIStore.setState({ toolUI });
|
|
19
|
-
};
|
|
20
|
-
t2 = [toolUI, useToolUIStore];
|
|
21
|
-
$[2] = toolUI;
|
|
22
|
-
$[3] = useToolUIStore;
|
|
23
|
-
$[4] = t1;
|
|
24
|
-
$[5] = t2;
|
|
25
|
-
} else {
|
|
26
|
-
t1 = $[4];
|
|
27
|
-
t2 = $[5];
|
|
28
|
-
}
|
|
29
|
-
useEffect(t1, t2);
|
|
30
|
-
let t3;
|
|
31
|
-
if ($[6] !== useToolUIStore) {
|
|
32
|
-
t3 = function ToolUI(args) {
|
|
33
|
-
return useToolUIStore().toolUI(args);
|
|
34
|
-
};
|
|
35
|
-
$[6] = useToolUIStore;
|
|
36
|
-
$[7] = t3;
|
|
37
|
-
} else t3 = $[7];
|
|
38
|
-
return t3;
|
|
6
|
+
const [toolUIStore] = useState(() => new WritableSubscribable(toolUI));
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
toolUIStore.setState(toolUI);
|
|
9
|
+
}, [toolUI, toolUIStore]);
|
|
10
|
+
return useCallback(function ToolUI(args) {
|
|
11
|
+
return useSubscribable(toolUIStore)(args);
|
|
12
|
+
}, [toolUIStore]);
|
|
39
13
|
};
|
|
40
14
|
//#endregion
|
|
41
15
|
export { useInlineRender };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInlineRender.js","names":["FC","useCallback","useEffect","useState","ToolCallMessagePartProps","
|
|
1
|
+
{"version":3,"file":"useInlineRender.js","names":["FC","useCallback","useEffect","useState","ToolCallMessagePartProps","WritableSubscribable","useSubscribable","useInlineRender","toolUI","TArgs","TResult","toolUIStore","setState","ToolUI","args","currentToolUI"],"sources":["../../../src/react/model-context/useInlineRender.ts"],"sourcesContent":["import { type FC, useCallback, useEffect, useState } from \"react\";\nimport type { ToolCallMessagePartProps } from \"../types/MessagePartComponentTypes\";\nimport { WritableSubscribable } from \"../../subscribable/subscribable\";\nimport { useSubscribable } from \"../../store/runtime-clients/useSubscribable\";\n\nexport const useInlineRender = <TArgs, TResult>(\n toolUI: FC<ToolCallMessagePartProps<TArgs, TResult>>,\n): FC<ToolCallMessagePartProps<TArgs, TResult>> => {\n const [toolUIStore] = useState(\n () =>\n new WritableSubscribable<FC<ToolCallMessagePartProps<TArgs, TResult>>>(\n toolUI,\n ),\n );\n\n useEffect(() => {\n toolUIStore.setState(toolUI);\n }, [toolUI, toolUIStore]);\n\n return useCallback(\n function ToolUI(args) {\n // Invoked as a plain function so its hooks belong to this component,\n // which keeps its identity while `toolUI` changes underneath.\n const currentToolUI = useSubscribable(toolUIStore);\n return currentToolUI(args);\n },\n [toolUIStore],\n );\n};\n"],"mappings":";;;;AAKA,MAAaO,mBACXC,WACiD;CACjD,MAAM,CAACG,eAAeR,eAElB,IAAIE,qBACFG,MACF,CACJ;CAEAN,gBAAgB;EACdS,YAAYC,SAASJ,MAAM;CAC7B,GAAG,CAACA,QAAQG,WAAW,CAAC;CAExB,OAAOV,YACL,SAASY,OAAOC,MAAM;EAIpB,OADsBR,gBAAgBK,WAC/BI,CAAa,CAACD,IAAI;CAC3B,GACA,CAACH,WAAW,CACd;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageError.d.ts","names":[],"sources":["../../../src/react/primitive-hooks/useMessageError.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"useMessageError.d.ts","names":[],"sources":["../../../src/react/primitive-hooks/useMessageError.ts"],"mappings":";cAGa,oFAAe,sDAAA"}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
+
import { messageErrorText } from "../../store/primitive-predicates.js";
|
|
1
2
|
import { useAuiState } from "@assistant-ui/store";
|
|
2
3
|
//#region src/react/primitive-hooks/useMessageError.ts
|
|
3
4
|
const useMessageError = () => {
|
|
4
|
-
return useAuiState(
|
|
5
|
+
return useAuiState(messageErrorText);
|
|
5
6
|
};
|
|
6
|
-
function _temp(s) {
|
|
7
|
-
if (s.message.status?.type !== "incomplete" || s.message.status.reason !== "error") return;
|
|
8
|
-
const error = s.message.status.error;
|
|
9
|
-
if (typeof error === "string") return error;
|
|
10
|
-
if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") return error.message;
|
|
11
|
-
return error ?? "An error occurred";
|
|
12
|
-
}
|
|
13
7
|
//#endregion
|
|
14
8
|
export { useMessageError };
|
|
15
9
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageError.js","names":["useAuiState","
|
|
1
|
+
{"version":3,"file":"useMessageError.js","names":["useAuiState","messageErrorText","useMessageError"],"sources":["../../../src/react/primitive-hooks/useMessageError.ts"],"sourcesContent":["import { useAuiState } from \"@assistant-ui/store\";\nimport { messageErrorText } from \"../../store/primitive-predicates\";\n\nexport const useMessageError = () => {\n return useAuiState(messageErrorText);\n};\n"],"mappings":";;;AAGA,MAAaE,wBAAkB;CAAA,OACtBF,YAAYC,gBAAgB;AAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThreadListLoadMore.d.ts","names":[],"sources":["../../../src/react/primitive-hooks/useThreadListLoadMore.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"useThreadListLoadMore.d.ts","names":[],"sources":["../../../src/react/primitive-hooks/useThreadListLoadMore.ts"],"mappings":";cAIa;EAAA;EAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { threadListLoadMoreDisabled } from "../../store/primitive-predicates.js";
|
|
1
2
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
2
3
|
import "@assistant-ui/tap/react-shim";
|
|
3
4
|
import { useAui, useAuiState } from "@assistant-ui/store";
|
|
@@ -5,7 +6,7 @@ import { useAui, useAuiState } from "@assistant-ui/store";
|
|
|
5
6
|
const useThreadListLoadMore = () => {
|
|
6
7
|
const $ = c(5);
|
|
7
8
|
const aui = useAui();
|
|
8
|
-
const disabled = useAuiState(
|
|
9
|
+
const disabled = useAuiState(threadListLoadMoreDisabled);
|
|
9
10
|
let t0;
|
|
10
11
|
if ($[0] !== aui) {
|
|
11
12
|
t0 = () => {
|
|
@@ -27,9 +28,6 @@ const useThreadListLoadMore = () => {
|
|
|
27
28
|
} else t1 = $[4];
|
|
28
29
|
return t1;
|
|
29
30
|
};
|
|
30
|
-
function _temp(s) {
|
|
31
|
-
return !s.threads.hasMore || s.threads.isLoading || s.threads.isLoadingMore;
|
|
32
|
-
}
|
|
33
31
|
//#endregion
|
|
34
32
|
export { useThreadListLoadMore };
|
|
35
33
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThreadListLoadMore.js","names":["useCallback","useAui","useAuiState","useThreadListLoadMore","$","_c","aui","disabled","
|
|
1
|
+
{"version":3,"file":"useThreadListLoadMore.js","names":["useCallback","useAui","useAuiState","threadListLoadMoreDisabled","useThreadListLoadMore","$","_c","aui","disabled","t0","threads","loadMore","t1"],"sources":["../../../src/react/primitive-hooks/useThreadListLoadMore.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useAui, useAuiState } from \"@assistant-ui/store\";\nimport { threadListLoadMoreDisabled } from \"../../store/primitive-predicates\";\n\nexport const useThreadListLoadMore = () => {\n const aui = useAui();\n const disabled = useAuiState(threadListLoadMoreDisabled);\n\n const loadMore = useCallback(() => {\n aui.threads.loadMore();\n }, [aui]);\n\n return { loadMore, disabled };\n};\n"],"mappings":";;;;;AAIA,MAAaI,8BAAwB;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACnC,MAAAC,MAAYN,OAAO;CACnB,MAAAO,WAAiBN,YAAYC,0BAA0B;CAAE,IAAAM;CAAA,IAAAJ,EAAA,OAAAE,KAAA;EAE5BE,WAAA;GAC3BF,IAAGG,QAAQC,SAAU;EAAC;EACvBN,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAFD,MAAAM,WAAiBF;CAEP,IAAAG;CAAA,IAAAP,EAAA,OAAAG,YAAAH,EAAA,OAAAM,UAAA;EAEHC,KAAA;GAAAD;GAAAH;EAAqB;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAAtBO;AAAsB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerAttachments.d.ts","names":[],"sources":["../../../../src/react/primitives/composer/ComposerAttachments.tsx"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ComposerAttachments.d.ts","names":[],"sources":["../../../../src/react/primitives/composer/ComposerAttachments.tsx"],"mappings":";;;KAYK;EACH,QAAQ;EACR,WAAW;EACX,OAAO;EACP,aAAa;;kBAGE;OACH;;IAGN,YAAY;IACZ;;;IAIA,WAAW;MAAS,YAAY;UAAiB;IACjD;;;kBAgCS;OACH;IACV;IACA,aAAa;;;;;;cAOJ,oCAAoC,GAAG,mCAAmC;cAoD1E,8BAA8B,GACzC,6BAA6B"}
|
|
@@ -2,6 +2,7 @@ import { ComposerAttachmentByIndexProvider } from "../../providers/AttachmentByI
|
|
|
2
2
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
3
3
|
import { memo, useMemo } from "@assistant-ui/tap/react-shim";
|
|
4
4
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
5
|
+
import { useShallowSelector } from "@assistant-ui/store/internal";
|
|
5
6
|
import { jsx } from "react/jsx-runtime";
|
|
6
7
|
//#region src/react/primitives/composer/ComposerAttachments.tsx
|
|
7
8
|
const getComponent = (components, attachment) => {
|
|
@@ -60,8 +61,8 @@ const ComposerPrimitiveAttachmentByIndex = memo((t0) => {
|
|
|
60
61
|
}, (prev, next) => prev.index === next.index && prev.components?.Image === next.components?.Image && prev.components?.Document === next.components?.Document && prev.components?.File === next.components?.File && prev.components?.Attachment === next.components?.Attachment);
|
|
61
62
|
ComposerPrimitiveAttachmentByIndex.displayName = "ComposerPrimitive.AttachmentByIndex";
|
|
62
63
|
const ComposerPrimitiveAttachmentsInner = ({ children }) => {
|
|
63
|
-
const
|
|
64
|
-
return useMemo(() =>
|
|
64
|
+
const attachmentIds = useAuiState(useShallowSelector((s) => s.composer.attachments.map((attachment) => attachment.id)));
|
|
65
|
+
return useMemo(() => attachmentIds.map((attachmentId, index) => /* @__PURE__ */ jsx(ComposerAttachmentByIndexProvider, {
|
|
65
66
|
index,
|
|
66
67
|
children: /* @__PURE__ */ jsx(RenderChildrenWithAccessor, {
|
|
67
68
|
getItemState: (aui) => aui.composer.attachment({ index }).getState(),
|
|
@@ -69,7 +70,7 @@ const ComposerPrimitiveAttachmentsInner = ({ children }) => {
|
|
|
69
70
|
return getItem();
|
|
70
71
|
} })
|
|
71
72
|
})
|
|
72
|
-
},
|
|
73
|
+
}, attachmentId)), [attachmentIds, children]);
|
|
73
74
|
};
|
|
74
75
|
const ComposerPrimitiveAttachments = (t0) => {
|
|
75
76
|
const $ = c(4);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerAttachments.js","names":["Attachment","ComponentType","FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","ComposerAttachmentByIndexProvider","ComposerAttachmentsComponentConfig","Image","Document","File","ComposerPrimitiveAttachments","Props","components","children","value","attachment","getComponent","type","AttachmentComponent","t0","$","_c","_temp","t1","Component","t2","ComposerPrimitiveAttachmentByIndex","index","prev","next","displayName","ComposerPrimitiveAttachmentsInner","
|
|
1
|
+
{"version":3,"file":"ComposerAttachments.js","names":["Attachment","ComponentType","FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","useShallowSelector","ComposerAttachmentByIndexProvider","ComposerAttachmentsComponentConfig","Image","Document","File","ComposerPrimitiveAttachments","Props","components","children","value","attachment","getComponent","type","AttachmentComponent","t0","$","_c","_temp","t1","Component","t2","ComposerPrimitiveAttachmentByIndex","index","prev","next","displayName","ComposerPrimitiveAttachmentsInner","attachmentIds","s","composer","attachments","map","id","attachmentId","aui","getState","getItem"],"sources":["../../../../src/react/primitives/composer/ComposerAttachments.tsx"],"sourcesContent":["import type { Attachment } from \"../../../types/attachment\";\nimport {\n type ComponentType,\n type FC,\n type ReactNode,\n memo,\n useMemo,\n} from \"react\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { useShallowSelector } from \"@assistant-ui/store/internal\";\nimport { ComposerAttachmentByIndexProvider } from \"../../providers/AttachmentByIndexProvider\";\n\ntype ComposerAttachmentsComponentConfig = {\n Image?: ComponentType | undefined;\n Document?: ComponentType | undefined;\n File?: ComponentType | undefined;\n Attachment?: ComponentType | undefined;\n};\n\nexport namespace ComposerPrimitiveAttachments {\n export type Props =\n | {\n /** @deprecated Use the children render function instead. */\n components: ComposerAttachmentsComponentConfig;\n children?: never;\n }\n | {\n /** Render function called for each attachment. Receives the attachment. */\n children: (value: { attachment: Attachment }) => ReactNode;\n components?: never;\n };\n}\n\nconst getComponent = (\n components: ComposerAttachmentsComponentConfig | undefined,\n attachment: Attachment,\n) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return components?.Image ?? components?.Attachment;\n case \"document\":\n return components?.Document ?? components?.Attachment;\n case \"file\":\n return components?.File ?? components?.Attachment;\n default:\n return components?.Attachment;\n }\n};\n\nconst AttachmentComponent: FC<{\n components: ComposerAttachmentsComponentConfig | undefined;\n}> = ({ components }) => {\n const attachment = useAuiState((s) => s.attachment);\n if (!attachment) return null;\n\n const Component = getComponent(components, attachment);\n if (!Component) return null;\n return <Component />;\n};\n\nexport namespace ComposerPrimitiveAttachmentByIndex {\n export type Props = {\n index: number;\n components?: ComposerAttachmentsComponentConfig;\n };\n}\n\n/**\n * Renders a single attachment at the specified index within the composer.\n */\nexport const ComposerPrimitiveAttachmentByIndex: FC<ComposerPrimitiveAttachmentByIndex.Props> =\n memo(\n ({ index, components }) => {\n return (\n <ComposerAttachmentByIndexProvider index={index}>\n <AttachmentComponent components={components} />\n </ComposerAttachmentByIndexProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index &&\n prev.components?.Image === next.components?.Image &&\n prev.components?.Document === next.components?.Document &&\n prev.components?.File === next.components?.File &&\n prev.components?.Attachment === next.components?.Attachment,\n );\n\nComposerPrimitiveAttachmentByIndex.displayName =\n \"ComposerPrimitive.AttachmentByIndex\";\n\nconst ComposerPrimitiveAttachmentsInner: FC<{\n children: (value: { attachment: Attachment }) => ReactNode;\n}> = ({ children }) => {\n const attachmentIds = useAuiState(\n useShallowSelector((s) =>\n s.composer.attachments.map((attachment) => attachment.id),\n ),\n );\n\n return useMemo(\n () =>\n attachmentIds.map((attachmentId, index) => (\n <ComposerAttachmentByIndexProvider key={attachmentId} index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) =>\n aui.composer.attachment({ index }).getState()\n }\n >\n {(getItem) =>\n children({\n get attachment() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </ComposerAttachmentByIndexProvider>\n )),\n [attachmentIds, children],\n );\n};\n\nexport const ComposerPrimitiveAttachments: FC<\n ComposerPrimitiveAttachments.Props\n> = ({ components, children }) => {\n if (components) {\n return (\n <ComposerPrimitiveAttachmentsInner>\n {({ attachment }) => {\n const Component = getComponent(components, attachment);\n if (!Component) return null;\n return <Component />;\n }}\n </ComposerPrimitiveAttachmentsInner>\n );\n }\n return (\n <ComposerPrimitiveAttachmentsInner>\n {children}\n </ComposerPrimitiveAttachmentsInner>\n );\n};\n\nComposerPrimitiveAttachments.displayName = \"ComposerPrimitive.Attachments\";\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerQueue.d.ts","names":[],"sources":["../../../../src/react/primitives/composer/ComposerQueue.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"ComposerQueue.d.ts","names":[],"sources":["../../../../src/react/primitives/composer/ComposerQueue.tsx"],"mappings":";;;;kBAMiB;OACH;;IAEV,WAAW;MAAS,WAAW;UAAqB;;;;;;;;;;;;;;;;;;cA+C3C,wCAAsB;EA1CvB,WAAC;IAAS,WAAW;QAAqB"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { QueueItemByIndexProvider } from "../../providers/QueueItemByIndexProvider.js";
|
|
2
2
|
import { memo, useMemo } from "@assistant-ui/tap/react-shim";
|
|
3
3
|
import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
|
|
4
|
+
import { useShallowSelector } from "@assistant-ui/store/internal";
|
|
4
5
|
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
//#region src/react/primitives/composer/ComposerQueue.tsx
|
|
6
7
|
const ComposerPrimitiveQueueInner = ({ children }) => {
|
|
7
|
-
const
|
|
8
|
-
return useMemo(() =>
|
|
8
|
+
const queueItemIds = useAuiState(useShallowSelector((s) => s.composer.queue.map((item) => item.id)));
|
|
9
|
+
return useMemo(() => queueItemIds.map((queueItemId, index) => /* @__PURE__ */ jsx(QueueItemByIndexProvider, {
|
|
9
10
|
index,
|
|
10
11
|
children: /* @__PURE__ */ jsx(RenderChildrenWithAccessor, {
|
|
11
12
|
getItemState: (aui) => aui.composer.queueItem({ index }).getState(),
|
|
@@ -13,7 +14,7 @@ const ComposerPrimitiveQueueInner = ({ children }) => {
|
|
|
13
14
|
return getItem();
|
|
14
15
|
} })
|
|
15
16
|
})
|
|
16
|
-
},
|
|
17
|
+
}, queueItemId)), [queueItemIds, children]);
|
|
17
18
|
};
|
|
18
19
|
/**
|
|
19
20
|
* Renders all queue items in the composer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerQueue.js","names":["FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","QueueItemState","QueueItemByIndexProvider","ComposerPrimitiveQueue","Props","children","value","queueItem","ComposerPrimitiveQueueInner","
|
|
1
|
+
{"version":3,"file":"ComposerQueue.js","names":["FC","ReactNode","memo","useMemo","RenderChildrenWithAccessor","useAuiState","useShallowSelector","QueueItemState","QueueItemByIndexProvider","ComposerPrimitiveQueue","Props","children","value","queueItem","ComposerPrimitiveQueueInner","queueItemIds","s","composer","queue","map","item","id","queueItemId","index","aui","getState","getItem","displayName"],"sources":["../../../../src/react/primitives/composer/ComposerQueue.tsx"],"sourcesContent":["import { type FC, type ReactNode, memo, useMemo } from \"react\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { useShallowSelector } from \"@assistant-ui/store/internal\";\nimport type { QueueItemState } from \"../../../store/scopes/queue-item\";\nimport { QueueItemByIndexProvider } from \"../../providers/QueueItemByIndexProvider\";\n\nexport namespace ComposerPrimitiveQueue {\n export type Props = {\n /** Render function called for each queue item. Receives the queue item state. */\n children: (value: { queueItem: QueueItemState }) => ReactNode;\n };\n}\n\nconst ComposerPrimitiveQueueInner: FC<{\n children: (value: { queueItem: QueueItemState }) => ReactNode;\n}> = ({ children }) => {\n const queueItemIds = useAuiState(\n useShallowSelector((s) => s.composer.queue.map((item) => item.id)),\n );\n\n return useMemo(\n () =>\n queueItemIds.map((queueItemId, index) => (\n <QueueItemByIndexProvider key={queueItemId} index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) => aui.composer.queueItem({ index }).getState()}\n >\n {(getItem) =>\n children({\n get queueItem() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </QueueItemByIndexProvider>\n )),\n [queueItemIds, children],\n );\n};\n\n/**\n * Renders all queue items in the composer.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Queue>\n * {({ queueItem }) => (\n * <div>\n * <QueueItemPrimitive.Text />\n * <QueueItemPrimitive.Steer>Run Now</QueueItemPrimitive.Steer>\n * </div>\n * )}\n * </ComposerPrimitive.Queue>\n * ```\n */\nexport const ComposerPrimitiveQueue = memo(ComposerPrimitiveQueueInner);\n\nComposerPrimitiveQueue.displayName = \"ComposerPrimitive.Queue\";\n"],"mappings":";;;;;;AAaA,MAAMc,+BAEA,EAAEH,eAAe;CACrB,MAAMI,eAAeV,YACnBC,oBAAoBU,MAAMA,EAAEC,SAASC,MAAMC,KAAKC,SAASA,KAAKC,EAAE,CAAC,CACnE;CAEA,OAAOlB,cAEHY,aAAaI,KAAKG,aAAaC,UAC7B,oBAAC,0BAAD;EAAmDA;EACjD,UAAA,oBAAC,4BAAD;GACE,eAAeC,QAAQA,IAAIP,SAASJ,UAAU,EAAEU,MAAM,CAAC,CAAC,CAACE,SAAS;GAEhEC,WAAAA,YACAf,SAAS,EACP,IAAIE,YAAY;IACd,OAAOa,QAAQ;GACjB,EACF,CAAC;EAEuB,CAAA;CACJ,GAZKJ,WAYL,CAC3B,GACH,CAACP,cAAcJ,QAAQ,CACzB;AACF;;;;;;;;;;;;;;;;AAiBA,MAAaF,yBAAyBP,KAAKY,2BAA2B;AAEtEL,uBAAuBkB,cAAc"}
|