@assistant-ui/core 0.2.14 → 0.2.15
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.js.map +1 -1
- package/dist/adapters/directive-formatter.js.map +1 -1
- package/dist/adapters/speech.js.map +1 -1
- package/dist/adapters/voice.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/duplicate-detection.js.map +1 -1
- package/dist/internal.d.ts +2 -1
- package/dist/internal.js +2 -1
- package/dist/model-context/frame/host.js.map +1 -1
- package/dist/model-context/frame/provider.js.map +1 -1
- package/dist/model-context/frame/types.js.map +1 -1
- package/dist/model-context/registry.js.map +1 -1
- package/dist/model-context/tool.js.map +1 -1
- package/dist/model-context/types.d.ts +1 -0
- package/dist/model-context/types.d.ts.map +1 -1
- package/dist/model-context/types.js.map +1 -1
- package/dist/react/AssistantProvider.js +1 -0
- package/dist/react/AssistantProvider.js.map +1 -1
- package/dist/react/AssistantRuntimeProvider.js +18 -6
- package/dist/react/AssistantRuntimeProvider.js.map +1 -1
- package/dist/react/RuntimeAdapter.js +26 -7
- package/dist/react/RuntimeAdapter.js.map +1 -1
- package/dist/react/adapters/LocalStorageThreadListAdapter.js +29 -7
- package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
- package/dist/react/adapters/TitleGenerationAdapter.js.map +1 -1
- package/dist/react/client/DataRenderers.js +54 -35
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/Interactables.js +67 -67
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +118 -55
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/client/interactable-model-context.js.map +1 -1
- package/dist/react/model-context/define-mcp-toolkit.js.map +1 -1
- package/dist/react/model-context/define-toolkit.js.map +1 -1
- package/dist/react/model-context/external-tool.js.map +1 -1
- package/dist/react/model-context/human-tool.js.map +1 -1
- package/dist/react/model-context/makeAssistantDataUI.js.map +1 -1
- package/dist/react/model-context/makeAssistantTool.js.map +1 -1
- package/dist/react/model-context/makeAssistantToolUI.js.map +1 -1
- package/dist/react/model-context/provider-tool.js.map +1 -1
- package/dist/react/model-context/stub-tool.js.map +1 -1
- package/dist/react/model-context/toolbox.js.map +1 -1
- package/dist/react/model-context/useAssistantContext.js.map +1 -1
- package/dist/react/model-context/useAssistantDataUI.js +27 -8
- package/dist/react/model-context/useAssistantDataUI.js.map +1 -1
- package/dist/react/model-context/useAssistantInstructions.js +33 -10
- package/dist/react/model-context/useAssistantInstructions.js.map +1 -1
- package/dist/react/model-context/useAssistantInteractable.js.map +1 -1
- package/dist/react/model-context/useAssistantTool.js +59 -17
- package/dist/react/model-context/useAssistantTool.js.map +1 -1
- package/dist/react/model-context/useAssistantToolUI.js +30 -9
- package/dist/react/model-context/useAssistantToolUI.js.map +1 -1
- package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
- package/dist/react/model-context/useInlineRender.js +35 -8
- package/dist/react/model-context/useInlineRender.js.map +1 -1
- package/dist/react/model-context/useInteractableState.js +65 -19
- package/dist/react/model-context/useInteractableState.js.map +1 -1
- package/dist/react/model-context/useToolArgsStatus.js +42 -14
- package/dist/react/model-context/useToolArgsStatus.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarCopy.js +59 -22
- package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarEdit.js +25 -7
- package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarFeedback.js +49 -13
- package/dist/react/primitive-hooks/useActionBarFeedback.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarReload.js +25 -7
- package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarSpeak.js +28 -9
- package/dist/react/primitive-hooks/useActionBarSpeak.js.map +1 -1
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.js +25 -7
- package/dist/react/primitive-hooks/useActionBarStopSpeaking.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerNext.js +27 -11
- package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js +27 -11
- package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerAddAttachment.js +24 -8
- package/dist/react/primitive-hooks/useComposerAddAttachment.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerCancel.js +25 -7
- package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerDictate.js +25 -7
- package/dist/react/primitive-hooks/useComposerDictate.js.map +1 -1
- package/dist/react/primitive-hooks/useComposerSend.js +25 -7
- package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerCancel.js +18 -4
- package/dist/react/primitive-hooks/useEditComposerCancel.js.map +1 -1
- package/dist/react/primitive-hooks/useEditComposerSend.js +25 -7
- package/dist/react/primitive-hooks/useEditComposerSend.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageBranching.js +41 -9
- package/dist/react/primitive-hooks/useMessageBranching.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageError.js +4 -1
- package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
- package/dist/react/primitive-hooks/useMessageReload.js +25 -7
- package/dist/react/primitive-hooks/useMessageReload.js.map +1 -1
- package/dist/react/primitive-hooks/useSuggestionTrigger.js +31 -13
- package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.js +4 -1
- package/dist/react/primitive-hooks/useThreadIsEmpty.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.js +4 -1
- package/dist/react/primitive-hooks/useThreadIsRunning.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemArchive.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemArchive.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemDelete.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemDelete.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemTrigger.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemTrigger.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.js +18 -4
- package/dist/react/primitive-hooks/useThreadListItemUnarchive.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListLoadMore.js +25 -7
- package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadListNew.js +18 -4
- package/dist/react/primitive-hooks/useThreadListNew.js.map +1 -1
- package/dist/react/primitive-hooks/useThreadMessages.js +4 -1
- package/dist/react/primitive-hooks/useThreadMessages.js.map +1 -1
- package/dist/react/primitive-hooks/useVoice.js +63 -13
- package/dist/react/primitive-hooks/useVoice.js.map +1 -1
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +42 -7
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
- package/dist/react/primitives/composer/ComposerAttachments.js +67 -16
- package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
- package/dist/react/primitives/composer/ComposerIf.js +30 -9
- package/dist/react/primitives/composer/ComposerIf.js.map +1 -1
- package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
- package/dist/react/primitives/generativeUI/GenerativeUI.js +55 -13
- package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
- package/dist/react/primitives/message/MessageAttachments.js +68 -16
- package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +3 -3
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +649 -181
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/primitives/message/MessageQuote.js +18 -2
- package/dist/react/primitives/message/MessageQuote.js.map +1 -1
- package/dist/react/primitives/messagePart/MessagePartInProgress.js +6 -2
- package/dist/react/primitives/messagePart/MessagePartInProgress.js.map +1 -1
- package/dist/react/primitives/part/PartMessages.js +46 -14
- package/dist/react/primitives/part/PartMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadMessages.js +67 -10
- package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
- package/dist/react/primitives/thread/ThreadSuggestions.js +50 -10
- package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
- package/dist/react/primitives/threadList/ThreadListItems.js +55 -14
- package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.js +15 -2
- package/dist/react/primitives/threadListItem/ThreadListItemTitle.js.map +1 -1
- package/dist/react/providers/AttachmentByIndexProvider.js +57 -12
- package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -1
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.js +33 -11
- package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +29 -6
- package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
- package/dist/react/providers/MessageByIndexProvider.js +49 -19
- package/dist/react/providers/MessageByIndexProvider.js.map +1 -1
- package/dist/react/providers/PartByIndexProvider.js +29 -6
- package/dist/react/providers/PartByIndexProvider.js.map +1 -1
- package/dist/react/providers/QueueItemByIndexProvider.js +29 -6
- package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -1
- package/dist/react/providers/ReadonlyThreadProvider.js +83 -28
- package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
- package/dist/react/providers/SuggestionByIndexProvider.js +29 -6
- package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.js +73 -25
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
- package/dist/react/providers/ThreadListItemByIndexProvider.js +30 -6
- package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -1
- package/dist/react/providers/ThreadListItemRuntimeProvider.js +28 -5
- package/dist/react/providers/ThreadListItemRuntimeProvider.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +19 -4
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/RuntimeAdapterProvider.js +27 -10
- package/dist/react/runtimes/RuntimeAdapterProvider.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +10 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +17 -17
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/runtimes/createMessageConverter.js.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +67 -30
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreRuntime.js +44 -10
- package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
- package/dist/react/runtimes/useExternalStoreSharedOptions.js +17 -12
- package/dist/react/runtimes/useExternalStoreSharedOptions.js.map +1 -1
- package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
- package/dist/react/runtimes/useRemoteThreadListRuntime.js +34 -6
- package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +5 -6
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/utils/getMessageQuote.js.map +1 -1
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/runtime/api/assistant-runtime.js.map +1 -1
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/composer-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +3 -9
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +3 -6
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-assistant-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +2 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/queue/message-queue.js.map +1 -1
- package/dist/runtime/utils/auto-status.js.map +1 -1
- package/dist/runtime/utils/external-store-message.js.map +1 -1
- package/dist/runtime/utils/message-repository.js.map +1 -1
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +15 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.js +35 -0
- package/dist/runtime/utils/resolveToolApprovalResponse.js.map +1 -0
- package/dist/runtime/utils/thread-message-like.d.ts +5 -1
- 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/runtimes/assistant-transport/utils.js.map +1 -1
- package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-shared-options.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/thread-message-converter.js.map +1 -1
- package/dist/runtimes/local/local-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -0
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +9 -7
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.js +1 -1
- package/dist/runtimes/local/should-continue.js.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/in-memory.js.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
- package/dist/store/clients/chain-of-thought-client.js +37 -19
- package/dist/store/clients/chain-of-thought-client.js.map +1 -1
- package/dist/store/clients/model-context-client.js +64 -14
- package/dist/store/clients/model-context-client.js.map +1 -1
- package/dist/store/clients/no-op-composer-client.js +94 -53
- package/dist/store/clients/no-op-composer-client.js.map +1 -1
- package/dist/store/clients/runtime-adapter.js.map +1 -1
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +59 -21
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +176 -69
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.js +29 -6
- package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +188 -68
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/liveRef.d.ts +7 -0
- package/dist/store/runtime-clients/liveRef.d.ts.map +1 -0
- package/dist/store/runtime-clients/liveRef.js +8 -0
- package/dist/store/runtime-clients/liveRef.js.map +1 -0
- package/dist/store/runtime-clients/message-part-runtime-client.js +47 -8
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +214 -52
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +69 -25
- 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 +137 -34
- 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 +192 -71
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/useSubscribable.js +2 -9
- package/dist/store/runtime-clients/useSubscribable.js.map +1 -1
- package/dist/store/scopes/part.d.ts +5 -6
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/store/scopes/queue-item.js.map +1 -1
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
- package/dist/types/message.d.ts +38 -5
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/dist/utils/composite-context-provider.js.map +1 -1
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/json/is-json-equal.js.map +1 -1
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/package.json +6 -6
- package/src/index.ts +4 -0
- package/src/internal.ts +1 -0
- package/src/model-context/types.ts +1 -0
- package/src/react/AssistantProvider.tsx +7 -0
- package/src/react/client/Tools.ts +3 -5
- package/src/react/runtimes/external-message-converter.ts +3 -1
- package/src/react/types/MessagePartComponentTypes.ts +5 -5
- package/src/runtime/api/message-part-runtime.ts +14 -11
- package/src/runtime/interfaces/thread-runtime-core.ts +2 -0
- package/src/runtime/utils/resolveToolApprovalResponse.test.ts +91 -0
- package/src/runtime/utils/resolveToolApprovalResponse.ts +55 -0
- package/src/runtime/utils/thread-message-like.ts +10 -1
- package/src/runtimes/local/local-thread-runtime-core.test.ts +61 -2
- package/src/runtimes/local/local-thread-runtime-core.ts +17 -8
- package/src/runtimes/local/should-continue.ts +2 -1
- package/src/store/clients/suggestions.ts +3 -5
- package/src/store/clients/thread-message-client.ts +13 -14
- package/src/store/runtime-clients/composer-runtime-client.ts +18 -21
- package/src/store/runtime-clients/liveRef.ts +5 -0
- package/src/store/runtime-clients/message-runtime-client.ts +16 -21
- package/src/store/runtime-clients/thread-list-runtime-client.ts +3 -5
- package/src/store/runtime-clients/thread-runtime-client.ts +9 -10
- package/src/store/runtime-clients/useSubscribable.ts +2 -10
- package/src/store/scopes/part.ts +5 -2
- package/src/types/message.ts +45 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-store-thread-runtime-core.js","names":[],"sources":["../../../src/runtimes/external-store/external-store-thread-runtime-core.ts"],"sourcesContent":["import type { AppendMessage, ThreadMessage } from \"../../types/message\";\nimport type {\n AddToolResultOptions,\n ResumeRunConfig,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n StartRunConfig,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\n\nimport type { ExternalStoreAdapter } from \"./external-store-adapter\";\nimport {\n getExternalStoreMessages,\n bindExternalStoreMessage,\n} from \"../../runtime/utils/external-store-message\";\nimport { ThreadMessageConverter } from \"./thread-message-converter\";\nimport { getAutoStatus, isAutoStatus } from \"../../runtime/utils/auto-status\";\nimport {\n fromThreadMessageLike,\n type ThreadMessageLike,\n} from \"../../runtime/utils/thread-message-like\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport type {\n RuntimeCapabilities,\n ThreadRuntimeCore,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseThreadRuntimeCore } from \"../../runtime/base/base-thread-runtime-core\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../../runtime/utils/message-repository\";\nimport { generateId } from \"../../utils/id\";\nimport { ToolInvocationTracker } from \"../tool-invocations/ToolInvocationTracker\";\nimport { EMPTY_QUEUE_ITEMS } from \"../../store/scopes/queue-item\";\n\nconst EMPTY_ARRAY: readonly ThreadSuggestion[] = Object.freeze([]);\n\nconst shallowEqual = (a: object, b: object): boolean => {\n const aKeys = Object.keys(a);\n if (aKeys.length !== Object.keys(b).length) return false;\n for (const key of aKeys) {\n if ((a as any)[key] !== (b as any)[key]) return false;\n }\n return true;\n};\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: readonly ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n private _capabilities: RuntimeCapabilities = {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n };\n\n public get capabilities() {\n return this._capabilities;\n }\n\n private _messages!: readonly ThreadMessage[];\n public isDisabled!: boolean;\n public isSendDisabled!: boolean;\n public get isLoading() {\n return this._store.isLoading ?? false;\n }\n // Unlike `isLoading`: pass `undefined` through to preserve the `getThreadState` fallback.\n public get isRunning(): boolean | undefined {\n return this._store.isRunning;\n }\n\n protected override _getBaseMessages(): readonly ThreadMessage[] {\n return this._messages;\n }\n\n public override get state() {\n return this._store.state ?? super.state;\n }\n\n public get adapters() {\n return this._store.adapters;\n }\n\n public suggestions: readonly ThreadSuggestion[] = [];\n public extras: unknown = undefined;\n\n private _converter = new ThreadMessageConverter();\n\n private _store!: ExternalStoreAdapter<any>;\n\n /**\n * Client-side tool-invocations pipeline. Constructed lazily on first\n * snapshot — only when `adapter.unstable_enableToolInvocations === true`.\n */\n private _toolInvocations: ToolInvocationTracker | null = null;\n\n public override beginEdit(messageId: string) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing.\");\n\n super.beginEdit(messageId);\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n store: ExternalStoreAdapter<any>,\n ) {\n super(contextProvider);\n this.__internal_setAdapter(store);\n }\n\n public __internal_setAdapter(store: ExternalStoreAdapter<any>) {\n if (this._store === store) return;\n\n const isRunning = store.isRunning ?? false;\n this.isDisabled = store.isDisabled ?? false;\n this.isSendDisabled = store.isSendDisabled ?? false;\n\n const oldStore = this._store as ExternalStoreAdapter<any> | undefined;\n this._store = store;\n if (this.extras !== store.extras) {\n this.extras = store.extras;\n }\n\n const newSuggestions = store.suggestions ?? EMPTY_ARRAY;\n if (!shallowEqual(this.suggestions, newSuggestions)) {\n this.suggestions = newSuggestions;\n }\n\n const newCapabilities: RuntimeCapabilities = {\n switchToBranch: this._store.setMessages !== undefined,\n switchBranchDuringRun: false,\n edit: this._store.onEdit !== undefined,\n delete:\n this._store.onDelete !== undefined ||\n this._store.setMessages !== undefined,\n reload: this._store.onReload !== undefined,\n cancel: this._store.onCancel !== undefined,\n speech: this._store.adapters?.speech !== undefined,\n dictation: this._store.adapters?.dictation !== undefined,\n voice: this._store.adapters?.voice !== undefined,\n unstable_copy: this._store.unstable_capabilities?.copy !== false,\n attachments: !!this._store.adapters?.attachments,\n feedback: !!this._store.adapters?.feedback,\n queue: this._store.queue !== undefined,\n };\n if (!shallowEqual(this._capabilities, newCapabilities)) {\n this._capabilities = newCapabilities;\n }\n\n let messages: readonly ThreadMessage[];\n\n if (store.messageRepository) {\n // Handle messageRepository\n if (\n oldStore &&\n oldStore.isRunning === store.isRunning &&\n oldStore.messageRepository === store.messageRepository\n ) {\n this._notifySubscribers();\n return;\n }\n\n this.repository.clear();\n this.repository.import(store.messageRepository);\n\n messages = this.repository.getMessages();\n } else if (store.messages) {\n // Handle messages array\n\n if (oldStore) {\n // flush the converter cache when the convertMessage prop changes\n if (oldStore.convertMessage !== store.convertMessage) {\n this._converter = new ThreadMessageConverter();\n } else if (\n oldStore.isRunning === store.isRunning &&\n oldStore.messages === store.messages\n ) {\n this._notifySubscribers();\n // no conversion update\n return;\n }\n }\n\n messages = !store.convertMessage\n ? store.messages\n : this._converter.convertMessages(store.messages, (cache, m, idx) => {\n if (!store.convertMessage) return m;\n\n const isLast = idx === (store.messages?.length ?? 0) - 1;\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n false,\n false,\n undefined,\n );\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n )\n return cache;\n\n const messageLike = store.convertMessage(m, idx);\n const newMessage = fromThreadMessageLike(\n messageLike,\n idx.toString(),\n autoStatus,\n );\n bindExternalStoreMessage(newMessage, m);\n return newMessage;\n });\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]!;\n const parent = messages[i - 1];\n this.repository.addOrUpdateMessage(parent?.id ?? null, message);\n }\n } else {\n throw new Error(\n \"ExternalStoreAdapter must provide either 'messages' or 'messageRepository'\",\n );\n }\n\n // Common logic for both paths\n if (messages.length > 0) this.ensureInitialized();\n\n if ((oldStore?.isRunning ?? false) !== (store.isRunning ?? false)) {\n if (store.isRunning) {\n this._notifyEventSubscribers(\"runStart\", {});\n } else {\n this._notifyEventSubscribers(\"runEnd\", {});\n }\n }\n\n // Append an optimistic placeholder while running but before a trailing\n // assistant message exists. resetHead evicts off-branch optimistic messages\n // (prior placeholders, mid-run id-swap siblings); export() never persists them.\n let optimisticId: string | null = null;\n if (hasUpcomingMessage(isRunning, messages)) {\n optimisticId = generateId();\n this.repository.addOrUpdateMessage(\n messages.at(-1)?.id ?? null,\n fromThreadMessageLike(\n { role: \"assistant\", content: [], metadata: { isOptimistic: true } },\n optimisticId,\n { type: \"running\" },\n ),\n );\n }\n\n this.repository.resetHead(optimisticId ?? messages.at(-1)?.id ?? null);\n\n this._messages = this.repository.getMessages();\n\n this._driveToolInvocations();\n\n this._notifySubscribers();\n }\n\n /**\n * Feed the current message snapshot into the tool-invocations tracker.\n * Opt-in via `adapter.unstable_enableToolInvocations: true`. The tracker\n * itself is fail-silent — see ToolInvocationTracker for the\n * state-transition contract.\n */\n private _driveToolInvocations(): void {\n if (!this._store.unstable_enableToolInvocations) {\n // Adapter did not opt in (default). If a tracker was previously\n // constructed (e.g. the adapter just toggled the flag off via a\n // dynamic swap), drop it so subsequent snapshots are no-ops.\n if (this._toolInvocations) {\n this._toolInvocations.reset();\n this._toolInvocations = null;\n this._store.setToolStatuses?.({});\n }\n return;\n }\n\n if (!this._toolInvocations) {\n this._toolInvocations = new ToolInvocationTracker(\n () => this.getModelContext().tools,\n {\n onResult: (command) => {\n try {\n const messageId = this._findMessageIdForToolCall(\n command.toolCallId,\n );\n if (messageId === undefined) {\n // The tool call no longer exists in the snapshot (e.g.\n // rolled back). Drop the result.\n return;\n }\n this._store.onAddToolResult?.({\n messageId,\n toolCallId: command.toolCallId,\n toolName: command.toolName,\n result: command.result,\n isError: command.isError,\n ...(command.artifact !== undefined && {\n artifact: command.artifact,\n }),\n ...(command.modelContent !== undefined && {\n modelContent: command.modelContent,\n }),\n });\n } catch (err) {\n console.error(\n \"[ExternalStoreThreadRuntimeCore] onAddToolResult dispatch failed\",\n err,\n );\n }\n },\n onStatusesChange: (statuses) => {\n this._store.setToolStatuses?.(Object.fromEntries(statuses));\n },\n },\n );\n }\n\n this._toolInvocations.setState({\n messages: this._messages,\n isRunning: this._store.isRunning ?? false,\n ...(this._store.isLoading !== undefined && {\n isLoading: this._store.isLoading,\n }),\n });\n }\n\n /**\n * Lookup table from `toolCallId` to the owning assistant message's `id`,\n * rebuilt lazily when `_messages` changes (see `_messagesForToolCallIndex`).\n */\n private _toolCallToMessageId = new Map<string, string>();\n private _messagesForToolCallIndex: readonly ThreadMessage[] | null = null;\n\n /**\n * Look up the assistant message that owns a tool-call part. Lazily builds\n * (and caches) a `toolCallId → messageId` map keyed off the current\n * `_messages` reference, so onResult dispatches stay O(1) instead of\n * walking the full thread on every result.\n */\n private _findMessageIdForToolCall(toolCallId: string): string | undefined {\n if (this._messagesForToolCallIndex !== this._messages) {\n this._toolCallToMessageId.clear();\n const visit = (messages: readonly ThreadMessage[]): void => {\n for (const message of messages) {\n if (!Array.isArray(message.content)) continue;\n for (const part of message.content) {\n if (!part || part.type !== \"tool-call\") continue;\n this._toolCallToMessageId.set(part.toolCallId, message.id);\n if (part.messages) visit(part.messages);\n }\n }\n };\n visit(this._messages);\n this._messagesForToolCallIndex = this._messages;\n }\n return this._toolCallToMessageId.get(toolCallId);\n }\n\n public override switchToBranch(branchId: string): void {\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n // Silently ignore branch switches while running\n if (this._store.isRunning) {\n return;\n }\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n const isEdit = message.parentId !== (this.messages.at(-1)?.id ?? null);\n\n // Buffering does not start a run, so the tool-abort below must wait until\n // the queue flushes. By then the prior run (and its tools) has settled.\n if (!isEdit && this._store.queue) {\n this._store.queue.enqueue(message, { steer: message.steer ?? false });\n return;\n }\n\n // Auto-abort in-flight client-side tool executions when a new run is\n // about to start. Without this, a tool that finishes after the new turn\n // begins would feed a stale result into `onAddToolResult`, racing with\n // the new turn the user just initiated. `startRun` defaults to true for\n // user messages — matches the satellites' historical opt-in cancel\n // behavior, which is now built in.\n if (message.startRun ?? message.role === \"user\") {\n await this._toolInvocations?.abort();\n }\n\n if (isEdit) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n this._store.queue?.clear(\"edit\");\n await this._store.onEdit(message);\n } else {\n await this._store.onNew(message);\n }\n }\n\n public async deleteMessage(messageId: string): Promise<void> {\n if (this._store.onDelete) {\n await this._store.onDelete(messageId);\n return;\n }\n\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support deleting messages.\");\n\n if (this._store.isRunning) {\n await this._toolInvocations?.abort();\n }\n\n const messages = this.repository.getMessages();\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) throw new Error(\"Message not found.\");\n\n this.updateMessages(messages.filter((message) => message.id !== messageId));\n }\n\n public getQueueItems() {\n // The composer reads this during base-thread construction, before the\n // constructor assigns `_store`, so guard against the unset field.\n return this._store?.queue?.items ?? EMPTY_QUEUE_ITEMS;\n }\n\n public steerQueueItem(queueItemId: string) {\n this._store?.queue?.steer(queueItemId);\n }\n\n public removeQueueItem(queueItemId: string) {\n this._store?.queue?.remove(queueItemId);\n }\n\n public async startRun(config: StartRunConfig): Promise<void> {\n if (!this._store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n this._store.queue?.clear(\"reload\");\n\n // Auto-abort in-flight client-side tool executions when a run reloads;\n // any results that land afterward would target a turn that no longer\n // exists. See `append` above for full rationale.\n await this._toolInvocations?.abort();\n\n await this._store.onReload(config.parentId, config);\n }\n\n public async resumeRun(config: ResumeRunConfig): Promise<void> {\n if (!this._store.onResume)\n throw new Error(\"Runtime does not support resuming runs.\");\n\n await this._store.onResume(config);\n }\n\n public exportExternalState(): any {\n if (!this._store.onExportExternalState)\n throw new Error(\"Runtime does not support exporting external states.\");\n\n return this._store.onExportExternalState();\n }\n\n public importExternalState(state: any): void {\n if (!this._store.onLoadExternalState)\n throw new Error(\"Runtime does not support importing external states.\");\n\n // Re-arm the tracker so the next adapter snapshot (containing the\n // imported state) is treated as historical — no streamCall/execute\n // fires for the loaded tool calls. The adapter is expected to update\n // its messages in response to onLoadExternalState; that update flows\n // back here via __internal_setAdapter. We only clear adapter-side\n // tool statuses when the tracker is the source of truth — otherwise\n // we'd wipe statuses the adapter is managing on its own.\n if (this._toolInvocations) {\n this._toolInvocations.reset();\n this._store.setToolStatuses?.({});\n }\n\n this._store.onLoadExternalState(state);\n }\n\n public cancelRun(): void {\n if (!this._store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this._store.queue?.clear(\"cancel-run\");\n\n // Abort any in-flight client-side tool executions. Fire-and-forget —\n // the abort resolves once executions settle, but we don't gate the\n // cancel on it.\n void this._toolInvocations?.abort();\n\n this._store.onCancel();\n\n // Drop an empty optimistic head (placeholder or pre-stream message); a\n // partially-streamed one is kept and re-supplied by the store on resync.\n const head = this.repository.getMessages().at(-1);\n if (head && head.metadata.isOptimistic && head.content.length === 0) {\n this.repository.deleteMessage(head.id);\n }\n\n let messages = this.repository.getMessages();\n const previousMessage = messages[messages.length - 1];\n if (\n previousMessage?.role === \"user\" &&\n previousMessage.id === messages.at(-1)?.id // ensure the previous message is a leaf node\n ) {\n this.repository.deleteMessage(previousMessage.id);\n if (!this.composer.text.trim()) {\n this.composer.setText(getThreadMessageText(previousMessage));\n }\n\n messages = this.repository.getMessages();\n } else {\n this._notifySubscribers();\n }\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public addToolResult(options: AddToolResultOptions) {\n if (!this._store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this._store.onAddToolResult?.(options);\n }\n\n public resumeToolCall(options: ResumeToolCallOptions) {\n // Tracker owns its own human-input handlers — let it resume in-process\n // tool calls without round-tripping through the adapter. Falls back to\n // the adapter's onResumeToolCall (if any) for tool calls the tracker\n // doesn't know about.\n const handled =\n this._toolInvocations?.resume(options.toolCallId, options.payload) ??\n false;\n if (handled) return;\n\n if (this._store.onResumeToolCall) {\n this._store.onResumeToolCall(options);\n return;\n }\n\n throw new Error(\n `Tool call ${options.toolCallId} is not waiting for resume.`,\n );\n }\n\n public respondToToolApproval(options: RespondToToolApprovalOptions) {\n if (!this._store.onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n this._store.onRespondToToolApproval(options);\n }\n\n public override reset(initialMessages?: readonly ThreadMessageLike[]) {\n const repo = new MessageRepository();\n repo.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n this.updateMessages(repo.getMessages());\n }\n\n public override import(data: ExportedMessageRepository) {\n super.import(data);\n\n if (this._store.onImport) {\n this._store.onImport(this.repository.getMessages());\n }\n }\n\n private updateMessages = (messages: readonly ThreadMessage[]) => {\n const hasConverter = this._store.convertMessage !== undefined;\n if (hasConverter) {\n this._store.setMessages?.(messages.flatMap(getExternalStoreMessages));\n } else {\n // TODO mark this as readonly in v0.12.0\n this._store.setMessages?.(messages as ThreadMessage[]);\n }\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"external-store-thread-runtime-core.js","names":["AppendMessage","ThreadMessage","AddToolResultOptions","ResumeRunConfig","ResumeToolCallOptions","RespondToToolApprovalOptions","StartRunConfig","ThreadSuggestion","ExternalStoreAdapter","getExternalStoreMessages","bindExternalStoreMessage","ThreadMessageConverter","getAutoStatus","isAutoStatus","fromThreadMessageLike","ThreadMessageLike","getThreadMessageText","RuntimeCapabilities","ThreadRuntimeCore","BaseThreadRuntimeCore","ModelContextProvider","ExportedMessageRepository","MessageRepository","generateId","ToolInvocationTracker","EMPTY_QUEUE_ITEMS","EMPTY_ARRAY","Object","freeze","shallowEqual","a","b","aKeys","keys","length","key","hasUpcomingMessage","isRunning","messages","role","ExternalStoreThreadRuntimeCore","_capabilities","switchToBranch","switchBranchDuringRun","edit","delete","reload","cancel","unstable_copy","speech","dictation","voice","attachments","feedback","queue","capabilities","_messages","isDisabled","isSendDisabled","isLoading","_store","_getBaseMessages","state","adapters","suggestions","extras","undefined","_converter","_toolInvocations","beginEdit","messageId","onEdit","Error","constructor","contextProvider","store","__internal_setAdapter","oldStore","newSuggestions","newCapabilities","setMessages","onDelete","onReload","onCancel","unstable_capabilities","copy","messageRepository","_notifySubscribers","repository","clear","import","getMessages","convertMessage","convertMessages","cache","m","idx","isLast","autoStatus","status","messageLike","newMessage","toString","i","message","parent","addOrUpdateMessage","id","ensureInitialized","_notifyEventSubscribers","optimisticId","at","content","metadata","isOptimistic","type","resetHead","_driveToolInvocations","unstable_enableToolInvocations","reset","setToolStatuses","getModelContext","tools","onResult","command","_findMessageIdForToolCall","toolCallId","onAddToolResult","toolName","result","isError","artifact","modelContent","err","console","error","onStatusesChange","statuses","fromEntries","setState","_toolCallToMessageId","Map","_messagesForToolCallIndex","visit","Array","isArray","part","set","get","branchId","updateMessages","append","Promise","isEdit","parentId","enqueue","steer","startRun","abort","onNew","deleteMessage","messageIndex","findIndex","filter","getQueueItems","items","steerQueueItem","queueItemId","removeQueueItem","remove","config","resumeRun","onResume","exportExternalState","onExportExternalState","importExternalState","onLoadExternalState","cancelRun","head","previousMessage","composer","text","trim","setText","setTimeout","addToolResult","options","resumeToolCall","handled","resume","payload","onResumeToolCall","respondToToolApproval","onRespondToToolApproval","initialMessages","repo","fromArray","data","onImport","hasConverter","flatMap"],"sources":["../../../src/runtimes/external-store/external-store-thread-runtime-core.ts"],"sourcesContent":["import type { AppendMessage, ThreadMessage } from \"../../types/message\";\nimport type {\n AddToolResultOptions,\n ResumeRunConfig,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n StartRunConfig,\n ThreadSuggestion,\n} from \"../../runtime/interfaces/thread-runtime-core\";\n\nimport type { ExternalStoreAdapter } from \"./external-store-adapter\";\nimport {\n getExternalStoreMessages,\n bindExternalStoreMessage,\n} from \"../../runtime/utils/external-store-message\";\nimport { ThreadMessageConverter } from \"./thread-message-converter\";\nimport { getAutoStatus, isAutoStatus } from \"../../runtime/utils/auto-status\";\nimport {\n fromThreadMessageLike,\n type ThreadMessageLike,\n} from \"../../runtime/utils/thread-message-like\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport type {\n RuntimeCapabilities,\n ThreadRuntimeCore,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseThreadRuntimeCore } from \"../../runtime/base/base-thread-runtime-core\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../../runtime/utils/message-repository\";\nimport { generateId } from \"../../utils/id\";\nimport { ToolInvocationTracker } from \"../tool-invocations/ToolInvocationTracker\";\nimport { EMPTY_QUEUE_ITEMS } from \"../../store/scopes/queue-item\";\n\nconst EMPTY_ARRAY: readonly ThreadSuggestion[] = Object.freeze([]);\n\nconst shallowEqual = (a: object, b: object): boolean => {\n const aKeys = Object.keys(a);\n if (aKeys.length !== Object.keys(b).length) return false;\n for (const key of aKeys) {\n if ((a as any)[key] !== (b as any)[key]) return false;\n }\n return true;\n};\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: readonly ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n private _capabilities: RuntimeCapabilities = {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n };\n\n public get capabilities() {\n return this._capabilities;\n }\n\n private _messages!: readonly ThreadMessage[];\n public isDisabled!: boolean;\n public isSendDisabled!: boolean;\n public get isLoading() {\n return this._store.isLoading ?? false;\n }\n // Unlike `isLoading`: pass `undefined` through to preserve the `getThreadState` fallback.\n public get isRunning(): boolean | undefined {\n return this._store.isRunning;\n }\n\n protected override _getBaseMessages(): readonly ThreadMessage[] {\n return this._messages;\n }\n\n public override get state() {\n return this._store.state ?? super.state;\n }\n\n public get adapters() {\n return this._store.adapters;\n }\n\n public suggestions: readonly ThreadSuggestion[] = [];\n public extras: unknown = undefined;\n\n private _converter = new ThreadMessageConverter();\n\n private _store!: ExternalStoreAdapter<any>;\n\n /**\n * Client-side tool-invocations pipeline. Constructed lazily on first\n * snapshot — only when `adapter.unstable_enableToolInvocations === true`.\n */\n private _toolInvocations: ToolInvocationTracker | null = null;\n\n public override beginEdit(messageId: string) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing.\");\n\n super.beginEdit(messageId);\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n store: ExternalStoreAdapter<any>,\n ) {\n super(contextProvider);\n this.__internal_setAdapter(store);\n }\n\n public __internal_setAdapter(store: ExternalStoreAdapter<any>) {\n if (this._store === store) return;\n\n const isRunning = store.isRunning ?? false;\n this.isDisabled = store.isDisabled ?? false;\n this.isSendDisabled = store.isSendDisabled ?? false;\n\n const oldStore = this._store as ExternalStoreAdapter<any> | undefined;\n this._store = store;\n if (this.extras !== store.extras) {\n this.extras = store.extras;\n }\n\n const newSuggestions = store.suggestions ?? EMPTY_ARRAY;\n if (!shallowEqual(this.suggestions, newSuggestions)) {\n this.suggestions = newSuggestions;\n }\n\n const newCapabilities: RuntimeCapabilities = {\n switchToBranch: this._store.setMessages !== undefined,\n switchBranchDuringRun: false,\n edit: this._store.onEdit !== undefined,\n delete:\n this._store.onDelete !== undefined ||\n this._store.setMessages !== undefined,\n reload: this._store.onReload !== undefined,\n cancel: this._store.onCancel !== undefined,\n speech: this._store.adapters?.speech !== undefined,\n dictation: this._store.adapters?.dictation !== undefined,\n voice: this._store.adapters?.voice !== undefined,\n unstable_copy: this._store.unstable_capabilities?.copy !== false,\n attachments: !!this._store.adapters?.attachments,\n feedback: !!this._store.adapters?.feedback,\n queue: this._store.queue !== undefined,\n };\n if (!shallowEqual(this._capabilities, newCapabilities)) {\n this._capabilities = newCapabilities;\n }\n\n let messages: readonly ThreadMessage[];\n\n if (store.messageRepository) {\n // Handle messageRepository\n if (\n oldStore &&\n oldStore.isRunning === store.isRunning &&\n oldStore.messageRepository === store.messageRepository\n ) {\n this._notifySubscribers();\n return;\n }\n\n this.repository.clear();\n this.repository.import(store.messageRepository);\n\n messages = this.repository.getMessages();\n } else if (store.messages) {\n // Handle messages array\n\n if (oldStore) {\n // flush the converter cache when the convertMessage prop changes\n if (oldStore.convertMessage !== store.convertMessage) {\n this._converter = new ThreadMessageConverter();\n } else if (\n oldStore.isRunning === store.isRunning &&\n oldStore.messages === store.messages\n ) {\n this._notifySubscribers();\n // no conversion update\n return;\n }\n }\n\n messages = !store.convertMessage\n ? store.messages\n : this._converter.convertMessages(store.messages, (cache, m, idx) => {\n if (!store.convertMessage) return m;\n\n const isLast = idx === (store.messages?.length ?? 0) - 1;\n const autoStatus = getAutoStatus(\n isLast,\n isRunning,\n false,\n false,\n undefined,\n );\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n )\n return cache;\n\n const messageLike = store.convertMessage(m, idx);\n const newMessage = fromThreadMessageLike(\n messageLike,\n idx.toString(),\n autoStatus,\n );\n bindExternalStoreMessage(newMessage, m);\n return newMessage;\n });\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]!;\n const parent = messages[i - 1];\n this.repository.addOrUpdateMessage(parent?.id ?? null, message);\n }\n } else {\n throw new Error(\n \"ExternalStoreAdapter must provide either 'messages' or 'messageRepository'\",\n );\n }\n\n // Common logic for both paths\n if (messages.length > 0) this.ensureInitialized();\n\n if ((oldStore?.isRunning ?? false) !== (store.isRunning ?? false)) {\n if (store.isRunning) {\n this._notifyEventSubscribers(\"runStart\", {});\n } else {\n this._notifyEventSubscribers(\"runEnd\", {});\n }\n }\n\n // Append an optimistic placeholder while running but before a trailing\n // assistant message exists. resetHead evicts off-branch optimistic messages\n // (prior placeholders, mid-run id-swap siblings); export() never persists them.\n let optimisticId: string | null = null;\n if (hasUpcomingMessage(isRunning, messages)) {\n optimisticId = generateId();\n this.repository.addOrUpdateMessage(\n messages.at(-1)?.id ?? null,\n fromThreadMessageLike(\n { role: \"assistant\", content: [], metadata: { isOptimistic: true } },\n optimisticId,\n { type: \"running\" },\n ),\n );\n }\n\n this.repository.resetHead(optimisticId ?? messages.at(-1)?.id ?? null);\n\n this._messages = this.repository.getMessages();\n\n this._driveToolInvocations();\n\n this._notifySubscribers();\n }\n\n /**\n * Feed the current message snapshot into the tool-invocations tracker.\n * Opt-in via `adapter.unstable_enableToolInvocations: true`. The tracker\n * itself is fail-silent — see ToolInvocationTracker for the\n * state-transition contract.\n */\n private _driveToolInvocations(): void {\n if (!this._store.unstable_enableToolInvocations) {\n // Adapter did not opt in (default). If a tracker was previously\n // constructed (e.g. the adapter just toggled the flag off via a\n // dynamic swap), drop it so subsequent snapshots are no-ops.\n if (this._toolInvocations) {\n this._toolInvocations.reset();\n this._toolInvocations = null;\n this._store.setToolStatuses?.({});\n }\n return;\n }\n\n if (!this._toolInvocations) {\n this._toolInvocations = new ToolInvocationTracker(\n () => this.getModelContext().tools,\n {\n onResult: (command) => {\n try {\n const messageId = this._findMessageIdForToolCall(\n command.toolCallId,\n );\n if (messageId === undefined) {\n // The tool call no longer exists in the snapshot (e.g.\n // rolled back). Drop the result.\n return;\n }\n this._store.onAddToolResult?.({\n messageId,\n toolCallId: command.toolCallId,\n toolName: command.toolName,\n result: command.result,\n isError: command.isError,\n ...(command.artifact !== undefined && {\n artifact: command.artifact,\n }),\n ...(command.modelContent !== undefined && {\n modelContent: command.modelContent,\n }),\n });\n } catch (err) {\n console.error(\n \"[ExternalStoreThreadRuntimeCore] onAddToolResult dispatch failed\",\n err,\n );\n }\n },\n onStatusesChange: (statuses) => {\n this._store.setToolStatuses?.(Object.fromEntries(statuses));\n },\n },\n );\n }\n\n this._toolInvocations.setState({\n messages: this._messages,\n isRunning: this._store.isRunning ?? false,\n ...(this._store.isLoading !== undefined && {\n isLoading: this._store.isLoading,\n }),\n });\n }\n\n /**\n * Lookup table from `toolCallId` to the owning assistant message's `id`,\n * rebuilt lazily when `_messages` changes (see `_messagesForToolCallIndex`).\n */\n private _toolCallToMessageId = new Map<string, string>();\n private _messagesForToolCallIndex: readonly ThreadMessage[] | null = null;\n\n /**\n * Look up the assistant message that owns a tool-call part. Lazily builds\n * (and caches) a `toolCallId → messageId` map keyed off the current\n * `_messages` reference, so onResult dispatches stay O(1) instead of\n * walking the full thread on every result.\n */\n private _findMessageIdForToolCall(toolCallId: string): string | undefined {\n if (this._messagesForToolCallIndex !== this._messages) {\n this._toolCallToMessageId.clear();\n const visit = (messages: readonly ThreadMessage[]): void => {\n for (const message of messages) {\n if (!Array.isArray(message.content)) continue;\n for (const part of message.content) {\n if (!part || part.type !== \"tool-call\") continue;\n this._toolCallToMessageId.set(part.toolCallId, message.id);\n if (part.messages) visit(part.messages);\n }\n }\n };\n visit(this._messages);\n this._messagesForToolCallIndex = this._messages;\n }\n return this._toolCallToMessageId.get(toolCallId);\n }\n\n public override switchToBranch(branchId: string): void {\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n // Silently ignore branch switches while running\n if (this._store.isRunning) {\n return;\n }\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n const isEdit = message.parentId !== (this.messages.at(-1)?.id ?? null);\n\n // Buffering does not start a run, so the tool-abort below must wait until\n // the queue flushes. By then the prior run (and its tools) has settled.\n if (!isEdit && this._store.queue) {\n this._store.queue.enqueue(message, { steer: message.steer ?? false });\n return;\n }\n\n // Auto-abort in-flight client-side tool executions when a new run is\n // about to start. Without this, a tool that finishes after the new turn\n // begins would feed a stale result into `onAddToolResult`, racing with\n // the new turn the user just initiated. `startRun` defaults to true for\n // user messages — matches the satellites' historical opt-in cancel\n // behavior, which is now built in.\n if (message.startRun ?? message.role === \"user\") {\n await this._toolInvocations?.abort();\n }\n\n if (isEdit) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n this._store.queue?.clear(\"edit\");\n await this._store.onEdit(message);\n } else {\n await this._store.onNew(message);\n }\n }\n\n public async deleteMessage(messageId: string): Promise<void> {\n if (this._store.onDelete) {\n await this._store.onDelete(messageId);\n return;\n }\n\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support deleting messages.\");\n\n if (this._store.isRunning) {\n await this._toolInvocations?.abort();\n }\n\n const messages = this.repository.getMessages();\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) throw new Error(\"Message not found.\");\n\n this.updateMessages(messages.filter((message) => message.id !== messageId));\n }\n\n public getQueueItems() {\n // The composer reads this during base-thread construction, before the\n // constructor assigns `_store`, so guard against the unset field.\n return this._store?.queue?.items ?? EMPTY_QUEUE_ITEMS;\n }\n\n public steerQueueItem(queueItemId: string) {\n this._store?.queue?.steer(queueItemId);\n }\n\n public removeQueueItem(queueItemId: string) {\n this._store?.queue?.remove(queueItemId);\n }\n\n public async startRun(config: StartRunConfig): Promise<void> {\n if (!this._store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n this._store.queue?.clear(\"reload\");\n\n // Auto-abort in-flight client-side tool executions when a run reloads;\n // any results that land afterward would target a turn that no longer\n // exists. See `append` above for full rationale.\n await this._toolInvocations?.abort();\n\n await this._store.onReload(config.parentId, config);\n }\n\n public async resumeRun(config: ResumeRunConfig): Promise<void> {\n if (!this._store.onResume)\n throw new Error(\"Runtime does not support resuming runs.\");\n\n await this._store.onResume(config);\n }\n\n public exportExternalState(): any {\n if (!this._store.onExportExternalState)\n throw new Error(\"Runtime does not support exporting external states.\");\n\n return this._store.onExportExternalState();\n }\n\n public importExternalState(state: any): void {\n if (!this._store.onLoadExternalState)\n throw new Error(\"Runtime does not support importing external states.\");\n\n // Re-arm the tracker so the next adapter snapshot (containing the\n // imported state) is treated as historical — no streamCall/execute\n // fires for the loaded tool calls. The adapter is expected to update\n // its messages in response to onLoadExternalState; that update flows\n // back here via __internal_setAdapter. We only clear adapter-side\n // tool statuses when the tracker is the source of truth — otherwise\n // we'd wipe statuses the adapter is managing on its own.\n if (this._toolInvocations) {\n this._toolInvocations.reset();\n this._store.setToolStatuses?.({});\n }\n\n this._store.onLoadExternalState(state);\n }\n\n public cancelRun(): void {\n if (!this._store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this._store.queue?.clear(\"cancel-run\");\n\n // Abort any in-flight client-side tool executions. Fire-and-forget —\n // the abort resolves once executions settle, but we don't gate the\n // cancel on it.\n void this._toolInvocations?.abort();\n\n this._store.onCancel();\n\n // Drop an empty optimistic head (placeholder or pre-stream message); a\n // partially-streamed one is kept and re-supplied by the store on resync.\n const head = this.repository.getMessages().at(-1);\n if (head && head.metadata.isOptimistic && head.content.length === 0) {\n this.repository.deleteMessage(head.id);\n }\n\n let messages = this.repository.getMessages();\n const previousMessage = messages[messages.length - 1];\n if (\n previousMessage?.role === \"user\" &&\n previousMessage.id === messages.at(-1)?.id // ensure the previous message is a leaf node\n ) {\n this.repository.deleteMessage(previousMessage.id);\n if (!this.composer.text.trim()) {\n this.composer.setText(getThreadMessageText(previousMessage));\n }\n\n messages = this.repository.getMessages();\n } else {\n this._notifySubscribers();\n }\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public addToolResult(options: AddToolResultOptions) {\n if (!this._store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this._store.onAddToolResult?.(options);\n }\n\n public resumeToolCall(options: ResumeToolCallOptions) {\n // Tracker owns its own human-input handlers — let it resume in-process\n // tool calls without round-tripping through the adapter. Falls back to\n // the adapter's onResumeToolCall (if any) for tool calls the tracker\n // doesn't know about.\n const handled =\n this._toolInvocations?.resume(options.toolCallId, options.payload) ??\n false;\n if (handled) return;\n\n if (this._store.onResumeToolCall) {\n this._store.onResumeToolCall(options);\n return;\n }\n\n throw new Error(\n `Tool call ${options.toolCallId} is not waiting for resume.`,\n );\n }\n\n public respondToToolApproval(options: RespondToToolApprovalOptions) {\n if (!this._store.onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n this._store.onRespondToToolApproval(options);\n }\n\n public override reset(initialMessages?: readonly ThreadMessageLike[]) {\n const repo = new MessageRepository();\n repo.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n this.updateMessages(repo.getMessages());\n }\n\n public override import(data: ExportedMessageRepository) {\n super.import(data);\n\n if (this._store.onImport) {\n this._store.onImport(this.repository.getMessages());\n }\n }\n\n private updateMessages = (messages: readonly ThreadMessage[]) => {\n const hasConverter = this._store.convertMessage !== undefined;\n if (hasConverter) {\n this._store.setMessages?.(messages.flatMap(getExternalStoreMessages));\n } else {\n // TODO mark this as readonly in v0.12.0\n this._store.setMessages?.(messages as ThreadMessage[]);\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-message-converter.js","names":[],"sources":["../../../src/runtimes/external-store/thread-message-converter.ts"],"sourcesContent":["import type { ThreadMessage } from \"../../types/message\";\n\nexport type ConverterCallback<TIn> = (\n cache: ThreadMessage | undefined,\n message: TIn,\n idx: number,\n) => ThreadMessage;\n\nexport class ThreadMessageConverter {\n private readonly cache = new WeakMap<WeakKey, ThreadMessage>();\n\n convertMessages<TIn extends WeakKey>(\n messages: readonly TIn[],\n converter: ConverterCallback<TIn>,\n ): ThreadMessage[] {\n return messages.map((m, idx) => {\n const cached = this.cache.get(m);\n const newMessage = converter(cached, m, idx);\n this.cache.set(m, newMessage);\n return newMessage;\n });\n }\n}\n"],"mappings":";AAQA,
|
|
1
|
+
{"version":3,"file":"thread-message-converter.js","names":["ThreadMessage","ConverterCallback","cache","message","TIn","idx","ThreadMessageConverter","WeakMap","WeakKey","convertMessages","messages","converter","map","m","cached","get","newMessage","set"],"sources":["../../../src/runtimes/external-store/thread-message-converter.ts"],"sourcesContent":["import type { ThreadMessage } from \"../../types/message\";\n\nexport type ConverterCallback<TIn> = (\n cache: ThreadMessage | undefined,\n message: TIn,\n idx: number,\n) => ThreadMessage;\n\nexport class ThreadMessageConverter {\n private readonly cache = new WeakMap<WeakKey, ThreadMessage>();\n\n convertMessages<TIn extends WeakKey>(\n messages: readonly TIn[],\n converter: ConverterCallback<TIn>,\n ): ThreadMessage[] {\n return messages.map((m, idx) => {\n const cached = this.cache.get(m);\n const newMessage = converter(cached, m, idx);\n this.cache.set(m, newMessage);\n return newMessage;\n });\n }\n}\n"],"mappings":";AAQA,IAAaM,yBAAb,MAAoC;CAClC,wBAAyB,IAAIC,QAAgC;CAE7DE,gBACEC,UACAC,WACiB;EACjB,OAAOD,SAASE,KAAKC,GAAGR,QAAQ;GAE9B,MAAMW,aAAaL,UADJ,KAAKT,MAAMa,IAAIF,CACDC,GAAQD,GAAGR,GAAG;GAC3C,KAAKH,MAAMe,IAAIJ,GAAGG,UAAU;GAC5B,OAAOA;EACT,CAAC;CACH;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-runtime-core.js","names":[],"sources":["../../../src/runtimes/local/local-runtime-core.ts"],"sourcesContent":["import { BaseAssistantRuntimeCore } from \"../../runtime/base/base-assistant-runtime-core\";\nimport { LocalThreadRuntimeCore } from \"./local-thread-runtime-core\";\nimport type { LocalRuntimeOptionsBase } from \"./local-runtime-options\";\nimport { LocalThreadListRuntimeCore } from \"./local-thread-list-runtime-core\";\nimport { ExportedMessageRepository } from \"../../runtime/utils/message-repository\";\nimport type { ThreadMessageLike } from \"../../runtime/utils/thread-message-like\";\n\nexport class LocalRuntimeCore extends BaseAssistantRuntimeCore {\n public readonly threads;\n public readonly Provider = undefined;\n\n private _options: LocalRuntimeOptionsBase;\n\n constructor(\n options: LocalRuntimeOptionsBase,\n initialMessages: readonly ThreadMessageLike[] | undefined,\n ) {\n super();\n\n this._options = options;\n\n this.threads = new LocalThreadListRuntimeCore(() => {\n return new LocalThreadRuntimeCore(this._contextProvider, this._options);\n });\n\n if (initialMessages) {\n this.threads\n .getMainThreadRuntimeCore()\n .import(ExportedMessageRepository.fromArray(initialMessages));\n }\n }\n}\n"],"mappings":";;;;;AAOA,
|
|
1
|
+
{"version":3,"file":"local-runtime-core.js","names":["BaseAssistantRuntimeCore","LocalThreadRuntimeCore","LocalRuntimeOptionsBase","LocalThreadListRuntimeCore","ExportedMessageRepository","ThreadMessageLike","LocalRuntimeCore","threads","Provider","undefined","_options","constructor","options","initialMessages","_contextProvider","getMainThreadRuntimeCore","import","fromArray"],"sources":["../../../src/runtimes/local/local-runtime-core.ts"],"sourcesContent":["import { BaseAssistantRuntimeCore } from \"../../runtime/base/base-assistant-runtime-core\";\nimport { LocalThreadRuntimeCore } from \"./local-thread-runtime-core\";\nimport type { LocalRuntimeOptionsBase } from \"./local-runtime-options\";\nimport { LocalThreadListRuntimeCore } from \"./local-thread-list-runtime-core\";\nimport { ExportedMessageRepository } from \"../../runtime/utils/message-repository\";\nimport type { ThreadMessageLike } from \"../../runtime/utils/thread-message-like\";\n\nexport class LocalRuntimeCore extends BaseAssistantRuntimeCore {\n public readonly threads;\n public readonly Provider = undefined;\n\n private _options: LocalRuntimeOptionsBase;\n\n constructor(\n options: LocalRuntimeOptionsBase,\n initialMessages: readonly ThreadMessageLike[] | undefined,\n ) {\n super();\n\n this._options = options;\n\n this.threads = new LocalThreadListRuntimeCore(() => {\n return new LocalThreadRuntimeCore(this._contextProvider, this._options);\n });\n\n if (initialMessages) {\n this.threads\n .getMainThreadRuntimeCore()\n .import(ExportedMessageRepository.fromArray(initialMessages));\n }\n }\n}\n"],"mappings":";;;;;AAOA,IAAaM,mBAAb,cAAsCN,yBAAyB;CAC7D;CACA,WAA2BS,KAAAA;CAE3B;CAEAE,YACEC,SACAC,iBACA;EACA,MAAM;EAEN,KAAKH,WAAWE;EAEhB,KAAKL,UAAU,IAAIJ,iCAAiC;GAClD,OAAO,IAAIF,uBAAuB,KAAKa,kBAAkB,KAAKJ,QAAQ;EACxE,CAAC;EAED,IAAIG,iBACF,KAAKN,QACFQ,yBAAyB,CAAC,CAC1BC,OAAOZ,0BAA0Ba,UAAUJ,eAAe,CAAC;CAElE;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-thread-list-runtime-core.js","names":[],"sources":["../../../src/runtimes/local/local-thread-list-runtime-core.ts"],"sourcesContent":["import type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport type { LocalThreadRuntimeCore } from \"./local-thread-runtime-core\";\n\nexport type LocalThreadFactory = () => LocalThreadRuntimeCore;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nconst DEFAULT_THREAD_ID = \"__DEFAULT_ID__\";\nconst DEFAULT_THREAD_DATA = Object.freeze({\n [DEFAULT_THREAD_ID]: {\n id: DEFAULT_THREAD_ID,\n remoteId: undefined,\n externalId: undefined,\n status: \"regular\" as const,\n title: undefined,\n },\n});\nexport class LocalThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _mainThread: LocalThreadRuntimeCore;\n constructor(_threadFactory: LocalThreadFactory) {\n super();\n\n this._mainThread = _threadFactory();\n }\n\n public get isLoading() {\n return false;\n }\n\n public getMainThreadRuntimeCore() {\n return this._mainThread;\n }\n\n public get newThreadId(): string | undefined {\n return undefined;\n }\n\n public get threadIds(): readonly string[] {\n return EMPTY_ARRAY;\n }\n\n public get archivedThreadIds(): readonly string[] {\n return EMPTY_ARRAY;\n }\n\n public get mainThreadId(): string {\n return DEFAULT_THREAD_ID;\n }\n\n public get threadItems() {\n return DEFAULT_THREAD_DATA;\n }\n\n public getThreadRuntimeCore(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public getLoadThreadsPromise(): Promise<void> {\n return Promise.resolve();\n }\n\n public getItemById(threadId: string) {\n if (threadId === this.mainThreadId) {\n return {\n status: \"regular\" as const,\n id: this.mainThreadId,\n remoteId: this.mainThreadId,\n externalId: undefined,\n title: undefined,\n isMain: true,\n };\n }\n throw new Error(\"Method not implemented\");\n }\n\n public async switchToThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public switchToNewThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public rename(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public archive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public detach(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public unarchive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public delete(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public initialize(\n threadId: string,\n ): Promise<{ remoteId: string; externalId: string | undefined }> {\n return Promise.resolve({ remoteId: threadId, externalId: undefined });\n }\n\n public generateTitle(): never {\n throw new Error(\"Method not implemented.\");\n }\n}\n"],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"local-thread-list-runtime-core.js","names":["ThreadListRuntimeCore","BaseSubscribable","LocalThreadRuntimeCore","LocalThreadFactory","EMPTY_ARRAY","Object","freeze","DEFAULT_THREAD_ID","DEFAULT_THREAD_DATA","id","remoteId","undefined","externalId","status","const","title","LocalThreadListRuntimeCore","_mainThread","constructor","_threadFactory","isLoading","getMainThreadRuntimeCore","newThreadId","threadIds","archivedThreadIds","mainThreadId","threadItems","getThreadRuntimeCore","Error","getLoadThreadsPromise","Promise","resolve","getItemById","threadId","isMain","switchToThread","switchToNewThread","rename","archive","detach","unarchive","delete","initialize","generateTitle"],"sources":["../../../src/runtimes/local/local-thread-list-runtime-core.ts"],"sourcesContent":["import type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport type { LocalThreadRuntimeCore } from \"./local-thread-runtime-core\";\n\nexport type LocalThreadFactory = () => LocalThreadRuntimeCore;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nconst DEFAULT_THREAD_ID = \"__DEFAULT_ID__\";\nconst DEFAULT_THREAD_DATA = Object.freeze({\n [DEFAULT_THREAD_ID]: {\n id: DEFAULT_THREAD_ID,\n remoteId: undefined,\n externalId: undefined,\n status: \"regular\" as const,\n title: undefined,\n },\n});\nexport class LocalThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _mainThread: LocalThreadRuntimeCore;\n constructor(_threadFactory: LocalThreadFactory) {\n super();\n\n this._mainThread = _threadFactory();\n }\n\n public get isLoading() {\n return false;\n }\n\n public getMainThreadRuntimeCore() {\n return this._mainThread;\n }\n\n public get newThreadId(): string | undefined {\n return undefined;\n }\n\n public get threadIds(): readonly string[] {\n return EMPTY_ARRAY;\n }\n\n public get archivedThreadIds(): readonly string[] {\n return EMPTY_ARRAY;\n }\n\n public get mainThreadId(): string {\n return DEFAULT_THREAD_ID;\n }\n\n public get threadItems() {\n return DEFAULT_THREAD_DATA;\n }\n\n public getThreadRuntimeCore(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public getLoadThreadsPromise(): Promise<void> {\n return Promise.resolve();\n }\n\n public getItemById(threadId: string) {\n if (threadId === this.mainThreadId) {\n return {\n status: \"regular\" as const,\n id: this.mainThreadId,\n remoteId: this.mainThreadId,\n externalId: undefined,\n title: undefined,\n isMain: true,\n };\n }\n throw new Error(\"Method not implemented\");\n }\n\n public async switchToThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public switchToNewThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public rename(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public archive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public detach(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public unarchive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public delete(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public initialize(\n threadId: string,\n ): Promise<{ remoteId: string; externalId: string | undefined }> {\n return Promise.resolve({ remoteId: threadId, externalId: undefined });\n }\n\n public generateTitle(): never {\n throw new Error(\"Method not implemented.\");\n }\n}\n"],"mappings":";;AAMA,MAAMI,cAAcC,OAAOC,OAAO,CAAA,CAAE;AACpC,MAAMC,oBAAoB;AAC1B,MAAMC,sBAAsBH,OAAOC,OAAO,GACvCC,oBAAoB;CACnBE,IAAIF;CACJG,UAAUC,KAAAA;CACVC,YAAYD,KAAAA;CACZE,QAAQ;CACRE,OAAOJ,KAAAA;AACT,EACF,CAAC;AACD,IAAaK,6BAAb,cACUf,iBAEV;CACE;CACAiB,YAAYC,gBAAoC;EAC9C,MAAM;EAEN,KAAKF,cAAcE,eAAe;CACpC;CAEA,IAAWC,YAAY;EACrB,OAAO;CACT;CAEA,2BAAkC;EAChC,OAAO,KAAKH;CACd;CAEA,IAAWK,cAAkC,CAE7C;CAEA,IAAWC,YAA+B;EACxC,OAAOnB;CACT;CAEA,IAAWoB,oBAAuC;EAChD,OAAOpB;CACT;CAEA,IAAWqB,eAAuB;EAChC,OAAOlB;CACT;CAEA,IAAWmB,cAAc;EACvB,OAAOlB;CACT;CAEA,uBAAqC;EACnC,MAAM,IAAIoB,MAAM,yBAAyB;CAC3C;CAEA,wBAA8C;EAC5C,OAAOE,QAAQC,QAAQ;CACzB;CAEA,YAAmBE,UAAkB;EACnC,IAAIA,aAAa,KAAKR,cACpB,OAAO;GACLZ,QAAQ;GACRJ,IAAI,KAAKgB;GACTf,UAAU,KAAKe;GACfb,YAAYD,KAAAA;GACZI,OAAOJ,KAAAA;GACPuB,QAAQ;EACV;EAEF,MAAM,IAAIN,MAAM,wBAAwB;CAC1C;CAEA,MAAaO,iBAAgC;EAC3C,MAAM,IAAIP,MAAM,yBAAyB;CAC3C;CAEA,oBAA0C;EACxC,MAAM,IAAIA,MAAM,yBAAyB;CAC3C;CAEA,SAA+B;EAC7B,MAAM,IAAIA,MAAM,yBAAyB;CAC3C;CAEA,UAAgC;EAC9B,MAAM,IAAIA,MAAM,yBAAyB;CAC3C;CAEA,SAA+B;EAC7B,MAAM,IAAIA,MAAM,yBAAyB;CAC3C;CAEA,YAAkC;EAChC,MAAM,IAAIA,MAAM,yBAAyB;CAC3C;CAEA,SAA+B;EAC7B,MAAM,IAAIA,MAAM,yBAAyB;CAC3C;CAEA,WACEK,UAC+D;EAC/D,OAAOH,QAAQC,QAAQ;GAAErB,UAAUuB;GAAUrB,YAAYD,KAAAA;EAAU,CAAC;CACtE;CAEA,gBAA8B;EAC5B,MAAM,IAAIiB,MAAM,yBAAyB;CAC3C;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-thread-runtime-core.d.ts","names":[],"sources":["../../../src/runtimes/local/local-thread-runtime-core.ts"],"mappings":";;;;;;;;;;;;;;cA2Ca,sBAAA,SACH,qBAAA,YACG,iBAAA;EAAA,SAEK,YAAA;;;;;;;;;;;;;;;UAgBR,eAAA;EAAA,QAEA,MAAA;EAAA,QACA,iBAAA;EAAA,SAEQ,UAAA;EAAA,SACA,cAAA;EAAA,QAER,UAAA;EAAA,IACG,SAAA;EAAA,QAIH,YAAA;EAAA,QACA,sBAAA;EAAA,IACG,WAAA,aAAwB,gBAAA;EAAA,IAIxB,QAAA;;;;;;;;;;cAKT,eAAA,EAAiB,oBAAA,EACjB,OAAA,EAAS,uBAAA;EAAA,QAMH,QAAA;EAAA,QAEA,cAAA;EAAA,QAEA,YAAA;EAED,yBAAA,CAA0B,WAAA;EAAA,QAIzB,qBAAA;EAED,kCAAA,CACL,UAAA,QAAkB,OAAA;EAAA,IAKT,MAAA;EAIJ,qBAAA,CAAsB,OAAA,EAAS,uBAAA;EAAA,QAuE9B,YAAA;EACD,eAAA,IAAe,OAAA;EAuCT,MAAA,CAAO,OAAA,EAAS,aAAA,GAAgB,OAAA;EAWtC,aAAA,aAA0B,cAAA;EAM1B,cAAA,CAAe,WAAA;EAIf,eAAA,CAAgB,WAAA;EAAA,QAIT,UAAA;EAgCD,aAAA,CAAc,SAAA,WAAoB,OAAA;EAmBxC,SAAA;IAAY,MAAA;IAAA,GAAW;EAAA,GAAe,eAAA,GAAkB,OAAA;EAMxD,mBAAA;EAIA,mBAAA;EAIM,QAAA;IACT,QAAA;IAAU;EAAA,GAAa,cAAA,EACzB,WAAA,GAAc,gBAAA,UACb,OAAA;EAAA,QAuBW,QAAA;EAAA,QA2DA,gBAAA;EAgLP,MAAA;EAOA,SAAA;EAOA,aAAA;IACL,SAAA;IACA,UAAA;IACA,MAAA;IACA,OAAA;IACA;EAAA,GACC,oBAAA;EA2CI,cAAA,CAAe,QAAA,EAAU,qBAAA;EAMzB,qBAAA;IACL,UAAA;IACA,QAAA;IACA;EAAA,GACC,4BAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"local-thread-runtime-core.d.ts","names":[],"sources":["../../../src/runtimes/local/local-thread-runtime-core.ts"],"mappings":";;;;;;;;;;;;;;cA2Ca,sBAAA,SACH,qBAAA,YACG,iBAAA;EAAA,SAEK,YAAA;;;;;;;;;;;;;;;UAgBR,eAAA;EAAA,QAEA,MAAA;EAAA,QACA,iBAAA;EAAA,SAEQ,UAAA;EAAA,SACA,cAAA;EAAA,QAER,UAAA;EAAA,IACG,SAAA;EAAA,QAIH,YAAA;EAAA,QACA,sBAAA;EAAA,IACG,WAAA,aAAwB,gBAAA;EAAA,IAIxB,QAAA;;;;;;;;;;cAKT,eAAA,EAAiB,oBAAA,EACjB,OAAA,EAAS,uBAAA;EAAA,QAMH,QAAA;EAAA,QAEA,cAAA;EAAA,QAEA,YAAA;EAED,yBAAA,CAA0B,WAAA;EAAA,QAIzB,qBAAA;EAED,kCAAA,CACL,UAAA,QAAkB,OAAA;EAAA,IAKT,MAAA;EAIJ,qBAAA,CAAsB,OAAA,EAAS,uBAAA;EAAA,QAuE9B,YAAA;EACD,eAAA,IAAe,OAAA;EAuCT,MAAA,CAAO,OAAA,EAAS,aAAA,GAAgB,OAAA;EAWtC,aAAA,aAA0B,cAAA;EAM1B,cAAA,CAAe,WAAA;EAIf,eAAA,CAAgB,WAAA;EAAA,QAIT,UAAA;EAgCD,aAAA,CAAc,SAAA,WAAoB,OAAA;EAmBxC,SAAA;IAAY,MAAA;IAAA,GAAW;EAAA,GAAe,eAAA,GAAkB,OAAA;EAMxD,mBAAA;EAIA,mBAAA;EAIM,QAAA;IACT,QAAA;IAAU;EAAA,GAAa,cAAA,EACzB,WAAA,GAAc,gBAAA,UACb,OAAA;EAAA,QAuBW,QAAA;EAAA,QA2DA,gBAAA;EAgLP,MAAA;EAOA,SAAA;EAOA,aAAA;IACL,SAAA;IACA,UAAA;IACA,MAAA;IACA,OAAA;IACA;EAAA,GACC,oBAAA;EA2CI,cAAA,CAAe,QAAA,EAAU,qBAAA;EAMzB,qBAAA;IACL,UAAA;IACA,QAAA;IACA,QAAA;IACA;EAAA,GACC,4BAAA;AAAA"}
|
|
@@ -408,19 +408,22 @@ var LocalThreadRuntimeCore = class extends BaseThreadRuntimeCore {
|
|
|
408
408
|
resumeToolCall(_options) {
|
|
409
409
|
throw new Error("Local runtime does not support resuming tool calls. For human-in-the-loop tools, list the tool in unstable_humanToolNames and complete the call with addToolResult.");
|
|
410
410
|
}
|
|
411
|
-
respondToToolApproval({ approvalId, approved, reason }) {
|
|
411
|
+
respondToToolApproval({ approvalId, approved, optionId, reason }) {
|
|
412
412
|
let message = this.repository.getMessages().findLast((m) => m.role === "assistant" && m.content.some((c) => c.type === "tool-call" && c.approval?.id === approvalId));
|
|
413
413
|
if (!message) throw new Error("Tried to respond to a non-existing tool approval");
|
|
414
414
|
if (this.abortController !== null) throw new Error("Tried to respond to a tool approval while a run is in progress");
|
|
415
415
|
if (message.status?.type !== "requires-action") throw new Error("Tried to respond to a tool approval on a message whose status is not requires-action");
|
|
416
|
-
|
|
416
|
+
const target = message.content.find((c) => c.type === "tool-call" && c.approval?.id === approvalId);
|
|
417
|
+
if (target?.type !== "tool-call" || !target.approval) throw new Error("Tried to respond to a non-existing tool approval");
|
|
418
|
+
if (target.approval.resolution !== void 0) throw new Error("Tried to respond to a tool approval that was cancelled or expired");
|
|
419
|
+
if (target.approval.approved !== void 0) throw new Error("Tried to respond to an already decided tool approval");
|
|
420
|
+
const targetApproval = target.approval;
|
|
417
421
|
const newContent = message.content.map((c) => {
|
|
418
|
-
if (c
|
|
419
|
-
if (c.approval.approved !== void 0) return c;
|
|
420
|
-
recorded = true;
|
|
422
|
+
if (c !== target) return c;
|
|
421
423
|
const approval = {
|
|
422
|
-
...
|
|
424
|
+
...targetApproval,
|
|
423
425
|
approved,
|
|
426
|
+
...optionId != null && { optionId },
|
|
424
427
|
...reason != null && { reason }
|
|
425
428
|
};
|
|
426
429
|
if (approved) return {
|
|
@@ -434,7 +437,6 @@ var LocalThreadRuntimeCore = class extends BaseThreadRuntimeCore {
|
|
|
434
437
|
isError: true
|
|
435
438
|
};
|
|
436
439
|
});
|
|
437
|
-
if (!recorded) throw new Error("Tried to respond to an already decided tool approval");
|
|
438
440
|
message = {
|
|
439
441
|
...message,
|
|
440
442
|
content: newContent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-thread-runtime-core.js","names":[],"sources":["../../../src/runtimes/local/local-thread-runtime-core.ts"],"sourcesContent":["import { fromThreadMessageLike } from \"../../runtime/utils/thread-message-like\";\nimport { generateId } from \"../../utils/id\";\nimport type {\n ChatModelAdapter,\n ChatModelRunResult,\n} from \"../../runtime/utils/chat-model-adapter\";\nimport { shouldContinue } from \"./should-continue\";\nimport type { LocalRuntimeOptionsBase } from \"./local-runtime-options\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n ThreadRuntimeCore,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseThreadRuntimeCore } from \"../../runtime/base/base-thread-runtime-core\";\nimport type {\n AppendMessage,\n ThreadAssistantMessage,\n} from \"../../types/message\";\nimport type { RunConfig } from \"../../types/message\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport {\n createMessageQueue,\n type MessageQueueController,\n} from \"../../runtime/queue/message-queue\";\nimport {\n EMPTY_QUEUE_ITEMS,\n type QueueItemState,\n} from \"../../store/scopes/queue-item\";\n\nclass AbortError extends Error {\n override name = \"AbortError\";\n detach: boolean;\n\n constructor(detach: boolean, message?: string) {\n super(message);\n this.detach = detach;\n }\n}\n\nexport class LocalThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n public readonly capabilities = {\n switchToBranch: true,\n switchBranchDuringRun: true,\n edit: true,\n delete: false,\n reload: true,\n cancel: true,\n unstable_copy: true,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n };\n\n private abortController: AbortController | null = null;\n\n private _queue: MessageQueueController | null = null;\n private _queueRunInFlight = false;\n\n public readonly isDisabled = false;\n public readonly isSendDisabled = false;\n\n private _isLoading = false;\n public get isLoading() {\n return this._isLoading;\n }\n\n private _suggestions: readonly ThreadSuggestion[] = [];\n private _suggestionsController: AbortController | null = null;\n public get suggestions(): readonly ThreadSuggestion[] {\n return this._suggestions;\n }\n\n public get adapters() {\n return this._options.adapters;\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n options: LocalRuntimeOptionsBase,\n ) {\n super(contextProvider);\n this.__internal_setOptions(options);\n }\n\n private _options!: LocalRuntimeOptionsBase;\n\n private _lastRunConfig: RunConfig = {};\n\n private _getThreadId?: () => string | undefined;\n\n public __internal_setGetThreadId(getThreadId: () => string | undefined) {\n this._getThreadId = getThreadId;\n }\n\n private _getInitializePromise?: () => Promise<unknown> | undefined;\n\n public __internal_setGetInitializePromise(\n getPromise: () => Promise<unknown> | undefined,\n ) {\n this._getInitializePromise = getPromise;\n }\n\n public get extras() {\n return undefined;\n }\n\n public __internal_setOptions(options: LocalRuntimeOptionsBase) {\n if (this._options === options) return;\n\n this._options = options;\n\n let hasUpdates = false;\n\n const canSpeak = options.adapters?.speech !== undefined;\n if (this.capabilities.speech !== canSpeak) {\n this.capabilities.speech = canSpeak;\n hasUpdates = true;\n }\n\n const canDictate = options.adapters?.dictation !== undefined;\n if (this.capabilities.dictation !== canDictate) {\n this.capabilities.dictation = canDictate;\n hasUpdates = true;\n }\n\n const canVoice = options.adapters?.voice !== undefined;\n if (this.capabilities.voice !== canVoice) {\n this.capabilities.voice = canVoice;\n hasUpdates = true;\n }\n\n const canAttach = options.adapters?.attachments !== undefined;\n if (this.capabilities.attachments !== canAttach) {\n this.capabilities.attachments = canAttach;\n hasUpdates = true;\n }\n\n const canFeedback = options.adapters?.feedback !== undefined;\n if (this.capabilities.feedback !== canFeedback) {\n this.capabilities.feedback = canFeedback;\n hasUpdates = true;\n }\n\n const canDelete = options.adapters?.history?.delete !== undefined;\n if (this.capabilities.delete !== canDelete) {\n this.capabilities.delete = canDelete;\n hasUpdates = true;\n }\n\n const canQueue = options.unstable_enableMessageQueue === true;\n if (canQueue && !this._queue) {\n this._queue = createMessageQueue({\n run: (message) => {\n // release the queue when the dispatch settles, even if it rejects\n // before reaching startRun's finally, so a failure can't deadlock it\n this._queueRunInFlight = true;\n void this._runAppend(message)\n .finally(() => {\n this._queueRunInFlight = false;\n this._queue?.notifyIdle();\n })\n .catch(() => {});\n },\n });\n this._queue.subscribe(() => this._notifySubscribers());\n } else if (!canQueue && this._queue) {\n this._queue.adapter.clear(\"cancel-run\");\n this._queue = null;\n }\n if (this.capabilities.queue !== canQueue) {\n this.capabilities.queue = canQueue;\n hasUpdates = true;\n }\n\n if (hasUpdates) this._notifySubscribers();\n }\n\n private _loadPromise: Promise<void> | undefined;\n public __internal_load() {\n if (this._loadPromise) return this._loadPromise;\n\n const promise = this.adapters.history?.load() ?? Promise.resolve(null);\n\n this._isLoading = true;\n this._notifySubscribers();\n\n this._loadPromise = promise\n .then((repo) => {\n if (!repo) return;\n this.repository.import(repo);\n if (repo.messages.length > 0) {\n this.ensureInitialized();\n }\n this._notifySubscribers();\n\n const resume = this.adapters.history?.resume?.bind(\n this.adapters.history,\n );\n if (repo.unstable_resume && resume) {\n this.startRun(\n {\n parentId: this.repository.headId,\n sourceId: this.repository.headId,\n runConfig: this._lastRunConfig,\n },\n resume,\n ).catch(() => {});\n }\n })\n .finally(() => {\n this._isLoading = false;\n this._notifySubscribers();\n });\n\n return this._loadPromise;\n }\n\n public async append(message: AppendMessage): Promise<void> {\n const isTail = message.parentId === (this.messages.at(-1)?.id ?? null);\n const willRun = message.startRun ?? message.role === \"user\";\n if (this._queue && willRun && isTail) {\n this._queue.adapter.enqueue(message, { steer: message.steer ?? false });\n return;\n }\n if (this._queue && !isTail) this._queue.adapter.clear(\"edit\");\n return this._runAppend(message);\n }\n\n public getQueueItems(): readonly QueueItemState[] {\n // Reads can arrive during base-thread construction, before the queue field\n // is assigned, so guard against the unset field.\n return this._queue?.adapter.items ?? EMPTY_QUEUE_ITEMS;\n }\n\n public steerQueueItem(queueItemId: string): void {\n this._queue?.adapter.steer(queueItemId);\n }\n\n public removeQueueItem(queueItemId: string): void {\n this._queue?.adapter.remove(queueItemId);\n }\n\n private async _runAppend(message: AppendMessage): Promise<void> {\n this.ensureInitialized();\n\n const initPromise = this._getInitializePromise?.();\n if (initPromise) {\n await initPromise;\n }\n\n const newMessage = fromThreadMessageLike(message, generateId(), {\n type: \"complete\",\n reason: \"unknown\",\n });\n this.repository.addOrUpdateMessage(message.parentId, newMessage);\n this._options.adapters.history?.append({\n parentId: message.parentId,\n message: newMessage,\n ...(message.runConfig !== undefined && { runConfig: message.runConfig }),\n });\n\n const startRun = message.startRun ?? message.role === \"user\";\n if (startRun) {\n await this.startRun({\n parentId: newMessage.id,\n sourceId: message.sourceId,\n runConfig: message.runConfig ?? {},\n });\n } else {\n this.repository.resetHead(newMessage.id);\n this._notifySubscribers();\n }\n }\n\n public async deleteMessage(messageId: string): Promise<void> {\n const adapter = this._options.adapters.history;\n if (!adapter?.delete)\n throw new Error(\"Runtime does not support deleting messages.\");\n\n const messages = this.repository.getMessages();\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) throw new Error(\"Message not found.\");\n\n const message = messages[messageIndex]!;\n const parentId = messages[messageIndex - 1]?.id ?? null;\n const items = [{ parentId, message }];\n\n await adapter.delete(items);\n\n this.repository.deleteMessage(messageId);\n this._notifySubscribers();\n }\n\n public resumeRun({ stream, ...startConfig }: ResumeRunConfig): Promise<void> {\n if (!stream)\n throw new Error(\"You must pass a stream parameter to resume runs.\");\n return this.startRun(startConfig, stream);\n }\n\n public exportExternalState(): any {\n throw new Error(\"Runtime does not support exporting external states.\");\n }\n\n public importExternalState(): void {\n throw new Error(\"Runtime does not support importing external states.\");\n }\n\n public async startRun(\n { parentId, runConfig }: StartRunConfig,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this.ensureInitialized();\n\n // add assistant message\n const id = generateId();\n const message: ThreadAssistantMessage = {\n id,\n role: \"assistant\",\n status: { type: \"running\" },\n content: [],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n custom: {},\n },\n createdAt: new Date(),\n };\n\n return this._runLoop(parentId, message, runConfig, runCallback);\n }\n\n private async _runLoop(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this._notifyEventSubscribers(\"runStart\", {});\n\n try {\n // mark busy for runs not started through the queue (regenerate, resume)\n this._queue?.notifyBusy();\n this._suggestions = [];\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n this._notifySubscribers();\n\n do {\n message = await this.performRoundtrip(\n parentId,\n message,\n runConfig,\n runCallback,\n );\n runCallback = undefined;\n } while (shouldContinue(message, this._options.unstable_humanToolNames));\n } finally {\n this._notifyEventSubscribers(\"runEnd\", {});\n // queue-driven runs release from the driver settle handler; a direct\n // run (regenerate, resume) releases here\n if (!this._queueRunInFlight) {\n queueMicrotask(() => this._queue?.notifyIdle());\n }\n }\n\n this._suggestionsController = new AbortController();\n const signal = this._suggestionsController.signal;\n if (\n this.adapters.suggestion &&\n message.status?.type !== \"requires-action\"\n ) {\n const promiseOrGenerator = this.adapters.suggestion?.generate({\n messages: this.messages,\n });\n\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n if (signal.aborted) break;\n this._suggestions = r;\n this._notifySubscribers();\n }\n } else {\n const result = await promiseOrGenerator;\n if (signal.aborted) return;\n this._suggestions = result;\n this._notifySubscribers();\n }\n }\n }\n\n private async performRoundtrip(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n runCallback?: ChatModelAdapter[\"run\"],\n ) {\n const messages = parentId ? this.repository.getMessages(parentId) : [];\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n const initialContent = message.content;\n const initialAnnotations = message.metadata?.unstable_annotations;\n const initialData = message.metadata?.unstable_data;\n const initialSteps = message.metadata?.steps;\n const initialCustom = message.metadata?.custom;\n const updateMessage = (m: Partial<ChatModelRunResult>) => {\n const newSteps = m.metadata?.steps;\n const steps = newSteps\n ? [...(initialSteps ?? []), ...newSteps]\n : undefined;\n\n const newAnnotations = m.metadata?.unstable_annotations;\n const newData = m.metadata?.unstable_data;\n const annotations = newAnnotations\n ? [...(initialAnnotations ?? []), ...newAnnotations]\n : undefined;\n const data = newData ? [...(initialData ?? []), ...newData] : undefined;\n\n message = {\n ...message,\n ...(m.content\n ? { content: [...initialContent, ...(m.content ?? [])] }\n : undefined),\n status: m.status ?? message.status,\n ...(m.metadata\n ? {\n metadata: {\n ...message.metadata,\n ...(m.metadata.unstable_state\n ? { unstable_state: m.metadata.unstable_state }\n : undefined),\n ...(annotations\n ? { unstable_annotations: annotations }\n : undefined),\n ...(data ? { unstable_data: data } : undefined),\n ...(steps ? { steps } : undefined),\n ...(m.metadata?.timing\n ? { timing: m.metadata.timing }\n : undefined),\n ...(m.metadata?.custom\n ? {\n custom: {\n ...(initialCustom ?? {}),\n ...m.metadata.custom,\n },\n }\n : undefined),\n },\n }\n : undefined),\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n };\n\n const maxSteps = this._options.maxSteps ?? 2;\n\n const steps = message.metadata?.steps?.length ?? 0;\n if (steps >= maxSteps) {\n // reached max tool steps\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"tool-calls\",\n },\n });\n return message;\n } else {\n updateMessage({\n status: {\n type: \"running\",\n },\n });\n\n // Switch to the new message branch right after adding it for the first time\n this.repository.resetHead(message.id);\n this._notifySubscribers();\n }\n\n try {\n this._lastRunConfig = runConfig ?? {};\n const context = this.getModelContext();\n\n runCallback =\n runCallback ??\n this.adapters.chatModel.run.bind(this.adapters.chatModel);\n\n const abortSignal = this.abortController.signal;\n const threadId = this._getThreadId?.();\n const promiseOrGenerator = runCallback({\n messages,\n runConfig: this._lastRunConfig,\n abortSignal,\n context,\n unstable_assistantMessageId: message.id,\n unstable_threadId: threadId,\n unstable_parentId: parentId,\n unstable_getMessage() {\n return message;\n },\n });\n\n // handle async iterator for streaming results\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n if (abortSignal.aborted) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n break;\n }\n\n updateMessage(r);\n }\n } else {\n updateMessage(await promiseOrGenerator);\n }\n\n if (message.status.type === \"running\") {\n updateMessage({\n status: { type: \"complete\", reason: \"unknown\" },\n });\n }\n } catch (e) {\n // TODO this should be handled by the run result stream\n if (e instanceof AbortError) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else if (e instanceof Error && e.name === \"AbortError\") {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else {\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"error\",\n error:\n e instanceof Error\n ? e.message\n : `[${typeof e}] ${new String(e).toString()}`,\n },\n });\n\n throw e;\n }\n } finally {\n this.abortController = null;\n\n if (\n message.status.type === \"complete\" ||\n message.status.type === \"incomplete\"\n ) {\n await this._options.adapters.history?.append({\n parentId,\n message: message,\n runConfig: this._lastRunConfig,\n });\n }\n }\n return message;\n }\n\n public detach() {\n this._queue?.adapter.clear(\"cancel-run\");\n const error = new AbortError(true);\n this.abortController?.abort(error);\n this.abortController = null;\n }\n\n public cancelRun() {\n this._queue?.adapter.clear(\"cancel-run\");\n const error = new AbortError(false);\n this.abortController?.abort(error);\n this.abortController = null;\n }\n\n public addToolResult({\n messageId,\n toolCallId,\n result,\n isError,\n artifact,\n }: AddToolResultOptions) {\n const messageData = this.repository.getMessage(messageId);\n const { parentId } = messageData;\n let { message } = messageData;\n\n if (message.role !== \"assistant\")\n throw new Error(\"Tried to add tool result to non-assistant message\");\n\n let added = false;\n let found = false;\n const newContent = message.content.map((c) => {\n if (c.type !== \"tool-call\") return c;\n if (c.toolCallId !== toolCallId) return c;\n found = true;\n if (!c.result) added = true;\n return {\n ...c,\n result,\n artifact,\n isError,\n };\n });\n\n if (!found)\n throw new Error(\"Tried to add tool result to non-existing tool call\");\n\n message = {\n ...message,\n content: newContent,\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n // a result may arrive mid-run or on a non-head message; the resume\n // intentionally aborts any in-flight run, unlike respondToToolApproval\n if (\n added &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n }\n }\n\n public resumeToolCall(_options: ResumeToolCallOptions) {\n throw new Error(\n \"Local runtime does not support resuming tool calls. For human-in-the-loop tools, list the tool in unstable_humanToolNames and complete the call with addToolResult.\",\n );\n }\n\n public respondToToolApproval({\n approvalId,\n approved,\n reason,\n }: RespondToToolApprovalOptions) {\n let message = this.repository\n .getMessages()\n .findLast(\n (m): m is ThreadAssistantMessage =>\n m.role === \"assistant\" &&\n m.content.some(\n (c) => c.type === \"tool-call\" && c.approval?.id === approvalId,\n ),\n );\n\n if (!message)\n throw new Error(\"Tried to respond to a non-existing tool approval\");\n\n if (this.abortController !== null)\n throw new Error(\n \"Tried to respond to a tool approval while a run is in progress\",\n );\n\n if (message.status?.type !== \"requires-action\")\n throw new Error(\n \"Tried to respond to a tool approval on a message whose status is not requires-action\",\n );\n\n let recorded = false;\n const newContent = message.content.map((c) => {\n if (c.type !== \"tool-call\" || c.approval?.id !== approvalId) return c;\n if (c.approval.approved !== undefined) return c;\n recorded = true;\n const approval = {\n ...c.approval,\n approved,\n ...(reason != null && { reason }),\n };\n if (approved) return { ...c, approval };\n return {\n ...c,\n approval,\n result: { error: reason || \"Tool approval denied\" },\n isError: true,\n };\n });\n\n if (!recorded)\n throw new Error(\"Tried to respond to an already decided tool approval\");\n\n message = { ...message, content: newContent };\n const { parentId } = this.repository.getMessage(message.id);\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n if (\n this.repository.headId === message.id &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-thread-runtime-core.js","names":["fromThreadMessageLike","generateId","ChatModelAdapter","ChatModelRunResult","shouldContinue","LocalRuntimeOptionsBase","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","ThreadRuntimeCore","StartRunConfig","ResumeRunConfig","BaseThreadRuntimeCore","AppendMessage","ThreadAssistantMessage","RunConfig","ModelContextProvider","createMessageQueue","MessageQueueController","EMPTY_QUEUE_ITEMS","QueueItemState","AbortError","Error","name","detach","constructor","message","LocalThreadRuntimeCore","capabilities","switchToBranch","switchBranchDuringRun","edit","delete","reload","cancel","unstable_copy","speech","dictation","voice","attachments","feedback","queue","abortController","AbortController","_queue","_queueRunInFlight","isDisabled","isSendDisabled","_isLoading","isLoading","_suggestions","_suggestionsController","suggestions","adapters","_options","contextProvider","options","__internal_setOptions","_lastRunConfig","_getThreadId","__internal_setGetThreadId","getThreadId","_getInitializePromise","Promise","__internal_setGetInitializePromise","getPromise","extras","undefined","hasUpdates","canSpeak","canDictate","canVoice","canAttach","canFeedback","canDelete","history","canQueue","unstable_enableMessageQueue","run","_runAppend","finally","notifyIdle","catch","subscribe","_notifySubscribers","adapter","clear","_loadPromise","__internal_load","promise","load","resolve","then","repo","repository","import","messages","length","ensureInitialized","resume","bind","unstable_resume","startRun","parentId","headId","sourceId","runConfig","append","isTail","at","id","willRun","role","enqueue","steer","getQueueItems","items","steerQueueItem","queueItemId","removeQueueItem","remove","initPromise","newMessage","type","reason","addOrUpdateMessage","resetHead","deleteMessage","messageId","getMessages","messageIndex","findIndex","m","resumeRun","stream","startConfig","exportExternalState","importExternalState","runCallback","status","content","metadata","unstable_state","state","unstable_annotations","unstable_data","steps","custom","createdAt","Date","_runLoop","_notifyEventSubscribers","notifyBusy","abort","performRoundtrip","unstable_humanToolNames","queueMicrotask","signal","suggestion","promiseOrGenerator","generate","Symbol","asyncIterator","r","aborted","result","initialContent","initialAnnotations","initialData","initialSteps","initialCustom","updateMessage","Partial","newSteps","newAnnotations","newData","annotations","data","timing","maxSteps","context","getModelContext","chatModel","abortSignal","threadId","unstable_assistantMessageId","unstable_threadId","unstable_parentId","unstable_getMessage","e","error","String","toString","cancelRun","addToolResult","toolCallId","isError","artifact","messageData","getMessage","added","found","newContent","map","c","resumeToolCall","respondToToolApproval","approvalId","approved","optionId","findLast","some","approval","target","find","resolution","targetApproval"],"sources":["../../../src/runtimes/local/local-thread-runtime-core.ts"],"sourcesContent":["import { fromThreadMessageLike } from \"../../runtime/utils/thread-message-like\";\nimport { generateId } from \"../../utils/id\";\nimport type {\n ChatModelAdapter,\n ChatModelRunResult,\n} from \"../../runtime/utils/chat-model-adapter\";\nimport { shouldContinue } from \"./should-continue\";\nimport type { LocalRuntimeOptionsBase } from \"./local-runtime-options\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n ThreadRuntimeCore,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseThreadRuntimeCore } from \"../../runtime/base/base-thread-runtime-core\";\nimport type {\n AppendMessage,\n ThreadAssistantMessage,\n} from \"../../types/message\";\nimport type { RunConfig } from \"../../types/message\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport {\n createMessageQueue,\n type MessageQueueController,\n} from \"../../runtime/queue/message-queue\";\nimport {\n EMPTY_QUEUE_ITEMS,\n type QueueItemState,\n} from \"../../store/scopes/queue-item\";\n\nclass AbortError extends Error {\n override name = \"AbortError\";\n detach: boolean;\n\n constructor(detach: boolean, message?: string) {\n super(message);\n this.detach = detach;\n }\n}\n\nexport class LocalThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n public readonly capabilities = {\n switchToBranch: true,\n switchBranchDuringRun: true,\n edit: true,\n delete: false,\n reload: true,\n cancel: true,\n unstable_copy: true,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n };\n\n private abortController: AbortController | null = null;\n\n private _queue: MessageQueueController | null = null;\n private _queueRunInFlight = false;\n\n public readonly isDisabled = false;\n public readonly isSendDisabled = false;\n\n private _isLoading = false;\n public get isLoading() {\n return this._isLoading;\n }\n\n private _suggestions: readonly ThreadSuggestion[] = [];\n private _suggestionsController: AbortController | null = null;\n public get suggestions(): readonly ThreadSuggestion[] {\n return this._suggestions;\n }\n\n public get adapters() {\n return this._options.adapters;\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n options: LocalRuntimeOptionsBase,\n ) {\n super(contextProvider);\n this.__internal_setOptions(options);\n }\n\n private _options!: LocalRuntimeOptionsBase;\n\n private _lastRunConfig: RunConfig = {};\n\n private _getThreadId?: () => string | undefined;\n\n public __internal_setGetThreadId(getThreadId: () => string | undefined) {\n this._getThreadId = getThreadId;\n }\n\n private _getInitializePromise?: () => Promise<unknown> | undefined;\n\n public __internal_setGetInitializePromise(\n getPromise: () => Promise<unknown> | undefined,\n ) {\n this._getInitializePromise = getPromise;\n }\n\n public get extras() {\n return undefined;\n }\n\n public __internal_setOptions(options: LocalRuntimeOptionsBase) {\n if (this._options === options) return;\n\n this._options = options;\n\n let hasUpdates = false;\n\n const canSpeak = options.adapters?.speech !== undefined;\n if (this.capabilities.speech !== canSpeak) {\n this.capabilities.speech = canSpeak;\n hasUpdates = true;\n }\n\n const canDictate = options.adapters?.dictation !== undefined;\n if (this.capabilities.dictation !== canDictate) {\n this.capabilities.dictation = canDictate;\n hasUpdates = true;\n }\n\n const canVoice = options.adapters?.voice !== undefined;\n if (this.capabilities.voice !== canVoice) {\n this.capabilities.voice = canVoice;\n hasUpdates = true;\n }\n\n const canAttach = options.adapters?.attachments !== undefined;\n if (this.capabilities.attachments !== canAttach) {\n this.capabilities.attachments = canAttach;\n hasUpdates = true;\n }\n\n const canFeedback = options.adapters?.feedback !== undefined;\n if (this.capabilities.feedback !== canFeedback) {\n this.capabilities.feedback = canFeedback;\n hasUpdates = true;\n }\n\n const canDelete = options.adapters?.history?.delete !== undefined;\n if (this.capabilities.delete !== canDelete) {\n this.capabilities.delete = canDelete;\n hasUpdates = true;\n }\n\n const canQueue = options.unstable_enableMessageQueue === true;\n if (canQueue && !this._queue) {\n this._queue = createMessageQueue({\n run: (message) => {\n // release the queue when the dispatch settles, even if it rejects\n // before reaching startRun's finally, so a failure can't deadlock it\n this._queueRunInFlight = true;\n void this._runAppend(message)\n .finally(() => {\n this._queueRunInFlight = false;\n this._queue?.notifyIdle();\n })\n .catch(() => {});\n },\n });\n this._queue.subscribe(() => this._notifySubscribers());\n } else if (!canQueue && this._queue) {\n this._queue.adapter.clear(\"cancel-run\");\n this._queue = null;\n }\n if (this.capabilities.queue !== canQueue) {\n this.capabilities.queue = canQueue;\n hasUpdates = true;\n }\n\n if (hasUpdates) this._notifySubscribers();\n }\n\n private _loadPromise: Promise<void> | undefined;\n public __internal_load() {\n if (this._loadPromise) return this._loadPromise;\n\n const promise = this.adapters.history?.load() ?? Promise.resolve(null);\n\n this._isLoading = true;\n this._notifySubscribers();\n\n this._loadPromise = promise\n .then((repo) => {\n if (!repo) return;\n this.repository.import(repo);\n if (repo.messages.length > 0) {\n this.ensureInitialized();\n }\n this._notifySubscribers();\n\n const resume = this.adapters.history?.resume?.bind(\n this.adapters.history,\n );\n if (repo.unstable_resume && resume) {\n this.startRun(\n {\n parentId: this.repository.headId,\n sourceId: this.repository.headId,\n runConfig: this._lastRunConfig,\n },\n resume,\n ).catch(() => {});\n }\n })\n .finally(() => {\n this._isLoading = false;\n this._notifySubscribers();\n });\n\n return this._loadPromise;\n }\n\n public async append(message: AppendMessage): Promise<void> {\n const isTail = message.parentId === (this.messages.at(-1)?.id ?? null);\n const willRun = message.startRun ?? message.role === \"user\";\n if (this._queue && willRun && isTail) {\n this._queue.adapter.enqueue(message, { steer: message.steer ?? false });\n return;\n }\n if (this._queue && !isTail) this._queue.adapter.clear(\"edit\");\n return this._runAppend(message);\n }\n\n public getQueueItems(): readonly QueueItemState[] {\n // Reads can arrive during base-thread construction, before the queue field\n // is assigned, so guard against the unset field.\n return this._queue?.adapter.items ?? EMPTY_QUEUE_ITEMS;\n }\n\n public steerQueueItem(queueItemId: string): void {\n this._queue?.adapter.steer(queueItemId);\n }\n\n public removeQueueItem(queueItemId: string): void {\n this._queue?.adapter.remove(queueItemId);\n }\n\n private async _runAppend(message: AppendMessage): Promise<void> {\n this.ensureInitialized();\n\n const initPromise = this._getInitializePromise?.();\n if (initPromise) {\n await initPromise;\n }\n\n const newMessage = fromThreadMessageLike(message, generateId(), {\n type: \"complete\",\n reason: \"unknown\",\n });\n this.repository.addOrUpdateMessage(message.parentId, newMessage);\n this._options.adapters.history?.append({\n parentId: message.parentId,\n message: newMessage,\n ...(message.runConfig !== undefined && { runConfig: message.runConfig }),\n });\n\n const startRun = message.startRun ?? message.role === \"user\";\n if (startRun) {\n await this.startRun({\n parentId: newMessage.id,\n sourceId: message.sourceId,\n runConfig: message.runConfig ?? {},\n });\n } else {\n this.repository.resetHead(newMessage.id);\n this._notifySubscribers();\n }\n }\n\n public async deleteMessage(messageId: string): Promise<void> {\n const adapter = this._options.adapters.history;\n if (!adapter?.delete)\n throw new Error(\"Runtime does not support deleting messages.\");\n\n const messages = this.repository.getMessages();\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) throw new Error(\"Message not found.\");\n\n const message = messages[messageIndex]!;\n const parentId = messages[messageIndex - 1]?.id ?? null;\n const items = [{ parentId, message }];\n\n await adapter.delete(items);\n\n this.repository.deleteMessage(messageId);\n this._notifySubscribers();\n }\n\n public resumeRun({ stream, ...startConfig }: ResumeRunConfig): Promise<void> {\n if (!stream)\n throw new Error(\"You must pass a stream parameter to resume runs.\");\n return this.startRun(startConfig, stream);\n }\n\n public exportExternalState(): any {\n throw new Error(\"Runtime does not support exporting external states.\");\n }\n\n public importExternalState(): void {\n throw new Error(\"Runtime does not support importing external states.\");\n }\n\n public async startRun(\n { parentId, runConfig }: StartRunConfig,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this.ensureInitialized();\n\n // add assistant message\n const id = generateId();\n const message: ThreadAssistantMessage = {\n id,\n role: \"assistant\",\n status: { type: \"running\" },\n content: [],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n custom: {},\n },\n createdAt: new Date(),\n };\n\n return this._runLoop(parentId, message, runConfig, runCallback);\n }\n\n private async _runLoop(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n runCallback?: ChatModelAdapter[\"run\"],\n ): Promise<void> {\n this._notifyEventSubscribers(\"runStart\", {});\n\n try {\n // mark busy for runs not started through the queue (regenerate, resume)\n this._queue?.notifyBusy();\n this._suggestions = [];\n this._suggestionsController?.abort();\n this._suggestionsController = null;\n this._notifySubscribers();\n\n do {\n message = await this.performRoundtrip(\n parentId,\n message,\n runConfig,\n runCallback,\n );\n runCallback = undefined;\n } while (shouldContinue(message, this._options.unstable_humanToolNames));\n } finally {\n this._notifyEventSubscribers(\"runEnd\", {});\n // queue-driven runs release from the driver settle handler; a direct\n // run (regenerate, resume) releases here\n if (!this._queueRunInFlight) {\n queueMicrotask(() => this._queue?.notifyIdle());\n }\n }\n\n this._suggestionsController = new AbortController();\n const signal = this._suggestionsController.signal;\n if (\n this.adapters.suggestion &&\n message.status?.type !== \"requires-action\"\n ) {\n const promiseOrGenerator = this.adapters.suggestion?.generate({\n messages: this.messages,\n });\n\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n if (signal.aborted) break;\n this._suggestions = r;\n this._notifySubscribers();\n }\n } else {\n const result = await promiseOrGenerator;\n if (signal.aborted) return;\n this._suggestions = result;\n this._notifySubscribers();\n }\n }\n }\n\n private async performRoundtrip(\n parentId: string | null,\n message: ThreadAssistantMessage,\n runConfig: RunConfig | undefined,\n runCallback?: ChatModelAdapter[\"run\"],\n ) {\n const messages = parentId ? this.repository.getMessages(parentId) : [];\n\n // abort existing run\n this.abortController?.abort();\n this.abortController = new AbortController();\n\n const initialContent = message.content;\n const initialAnnotations = message.metadata?.unstable_annotations;\n const initialData = message.metadata?.unstable_data;\n const initialSteps = message.metadata?.steps;\n const initialCustom = message.metadata?.custom;\n const updateMessage = (m: Partial<ChatModelRunResult>) => {\n const newSteps = m.metadata?.steps;\n const steps = newSteps\n ? [...(initialSteps ?? []), ...newSteps]\n : undefined;\n\n const newAnnotations = m.metadata?.unstable_annotations;\n const newData = m.metadata?.unstable_data;\n const annotations = newAnnotations\n ? [...(initialAnnotations ?? []), ...newAnnotations]\n : undefined;\n const data = newData ? [...(initialData ?? []), ...newData] : undefined;\n\n message = {\n ...message,\n ...(m.content\n ? { content: [...initialContent, ...(m.content ?? [])] }\n : undefined),\n status: m.status ?? message.status,\n ...(m.metadata\n ? {\n metadata: {\n ...message.metadata,\n ...(m.metadata.unstable_state\n ? { unstable_state: m.metadata.unstable_state }\n : undefined),\n ...(annotations\n ? { unstable_annotations: annotations }\n : undefined),\n ...(data ? { unstable_data: data } : undefined),\n ...(steps ? { steps } : undefined),\n ...(m.metadata?.timing\n ? { timing: m.metadata.timing }\n : undefined),\n ...(m.metadata?.custom\n ? {\n custom: {\n ...(initialCustom ?? {}),\n ...m.metadata.custom,\n },\n }\n : undefined),\n },\n }\n : undefined),\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n };\n\n const maxSteps = this._options.maxSteps ?? 2;\n\n const steps = message.metadata?.steps?.length ?? 0;\n if (steps >= maxSteps) {\n // reached max tool steps\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"tool-calls\",\n },\n });\n return message;\n } else {\n updateMessage({\n status: {\n type: \"running\",\n },\n });\n\n // Switch to the new message branch right after adding it for the first time\n this.repository.resetHead(message.id);\n this._notifySubscribers();\n }\n\n try {\n this._lastRunConfig = runConfig ?? {};\n const context = this.getModelContext();\n\n runCallback =\n runCallback ??\n this.adapters.chatModel.run.bind(this.adapters.chatModel);\n\n const abortSignal = this.abortController.signal;\n const threadId = this._getThreadId?.();\n const promiseOrGenerator = runCallback({\n messages,\n runConfig: this._lastRunConfig,\n abortSignal,\n context,\n unstable_assistantMessageId: message.id,\n unstable_threadId: threadId,\n unstable_parentId: parentId,\n unstable_getMessage() {\n return message;\n },\n });\n\n // handle async iterator for streaming results\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n if (abortSignal.aborted) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n break;\n }\n\n updateMessage(r);\n }\n } else {\n updateMessage(await promiseOrGenerator);\n }\n\n if (message.status.type === \"running\") {\n updateMessage({\n status: { type: \"complete\", reason: \"unknown\" },\n });\n }\n } catch (e) {\n // TODO this should be handled by the run result stream\n if (e instanceof AbortError) {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else if (e instanceof Error && e.name === \"AbortError\") {\n updateMessage({\n status: { type: \"incomplete\", reason: \"cancelled\" },\n });\n } else {\n updateMessage({\n status: {\n type: \"incomplete\",\n reason: \"error\",\n error:\n e instanceof Error\n ? e.message\n : `[${typeof e}] ${new String(e).toString()}`,\n },\n });\n\n throw e;\n }\n } finally {\n this.abortController = null;\n\n if (\n message.status.type === \"complete\" ||\n message.status.type === \"incomplete\"\n ) {\n await this._options.adapters.history?.append({\n parentId,\n message: message,\n runConfig: this._lastRunConfig,\n });\n }\n }\n return message;\n }\n\n public detach() {\n this._queue?.adapter.clear(\"cancel-run\");\n const error = new AbortError(true);\n this.abortController?.abort(error);\n this.abortController = null;\n }\n\n public cancelRun() {\n this._queue?.adapter.clear(\"cancel-run\");\n const error = new AbortError(false);\n this.abortController?.abort(error);\n this.abortController = null;\n }\n\n public addToolResult({\n messageId,\n toolCallId,\n result,\n isError,\n artifact,\n }: AddToolResultOptions) {\n const messageData = this.repository.getMessage(messageId);\n const { parentId } = messageData;\n let { message } = messageData;\n\n if (message.role !== \"assistant\")\n throw new Error(\"Tried to add tool result to non-assistant message\");\n\n let added = false;\n let found = false;\n const newContent = message.content.map((c) => {\n if (c.type !== \"tool-call\") return c;\n if (c.toolCallId !== toolCallId) return c;\n found = true;\n if (!c.result) added = true;\n return {\n ...c,\n result,\n artifact,\n isError,\n };\n });\n\n if (!found)\n throw new Error(\"Tried to add tool result to non-existing tool call\");\n\n message = {\n ...message,\n content: newContent,\n };\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n // a result may arrive mid-run or on a non-head message; the resume\n // intentionally aborts any in-flight run, unlike respondToToolApproval\n if (\n added &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n }\n }\n\n public resumeToolCall(_options: ResumeToolCallOptions) {\n throw new Error(\n \"Local runtime does not support resuming tool calls. For human-in-the-loop tools, list the tool in unstable_humanToolNames and complete the call with addToolResult.\",\n );\n }\n\n public respondToToolApproval({\n approvalId,\n approved,\n optionId,\n reason,\n }: RespondToToolApprovalOptions) {\n let message = this.repository\n .getMessages()\n .findLast(\n (m): m is ThreadAssistantMessage =>\n m.role === \"assistant\" &&\n m.content.some(\n (c) => c.type === \"tool-call\" && c.approval?.id === approvalId,\n ),\n );\n\n if (!message)\n throw new Error(\"Tried to respond to a non-existing tool approval\");\n\n if (this.abortController !== null)\n throw new Error(\n \"Tried to respond to a tool approval while a run is in progress\",\n );\n\n if (message.status?.type !== \"requires-action\")\n throw new Error(\n \"Tried to respond to a tool approval on a message whose status is not requires-action\",\n );\n\n const target = message.content.find(\n (c) => c.type === \"tool-call\" && c.approval?.id === approvalId,\n );\n if (target?.type !== \"tool-call\" || !target.approval)\n throw new Error(\"Tried to respond to a non-existing tool approval\");\n if (target.approval.resolution !== undefined)\n throw new Error(\n \"Tried to respond to a tool approval that was cancelled or expired\",\n );\n if (target.approval.approved !== undefined)\n throw new Error(\"Tried to respond to an already decided tool approval\");\n\n const targetApproval = target.approval;\n const newContent = message.content.map((c) => {\n if (c !== target) return c;\n const approval = {\n ...targetApproval,\n approved,\n ...(optionId != null && { optionId }),\n ...(reason != null && { reason }),\n };\n if (approved) return { ...c, approval };\n return {\n ...c,\n approval,\n result: { error: reason || \"Tool approval denied\" },\n isError: true,\n };\n });\n\n message = { ...message, content: newContent };\n const { parentId } = this.repository.getMessage(message.id);\n this.repository.addOrUpdateMessage(parentId, message);\n this._notifySubscribers();\n\n if (\n this.repository.headId === message.id &&\n shouldContinue(message, this._options.unstable_humanToolNames)\n ) {\n this._runLoop(parentId, message, this._lastRunConfig).catch(() => {});\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
//#region src/runtimes/local/should-continue.ts
|
|
2
2
|
const shouldContinue = (result, humanToolNames) => {
|
|
3
3
|
if (result.status?.type !== "requires-action" || result.status.reason !== "tool-calls") return false;
|
|
4
|
-
if (result.content.some((c) => c.type === "tool-call" && c.result === void 0 && c.approval !== void 0 && c.approval.approved === void 0)) return false;
|
|
4
|
+
if (result.content.some((c) => c.type === "tool-call" && c.result === void 0 && c.approval !== void 0 && c.approval.approved === void 0 && c.approval.resolution === void 0)) return false;
|
|
5
5
|
if (humanToolNames === void 0) return result.content.every((c) => c.type !== "tool-call" || !!c.result || c.approval !== void 0);
|
|
6
6
|
return result.content.every((c) => c.type !== "tool-call" || !!c.result || c.approval !== void 0 || !humanToolNames.includes(c.toolName));
|
|
7
7
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"should-continue.js","names":[],"sources":["../../../src/runtimes/local/should-continue.ts"],"sourcesContent":["import type { ThreadAssistantMessage } from \"../../types/message\";\n\nexport const shouldContinue = (\n result: ThreadAssistantMessage,\n humanToolNames: string[] | undefined,\n) => {\n if (\n result.status?.type !== \"requires-action\" ||\n result.status.reason !== \"tool-calls\"\n )\n return false;\n\n const hasPendingApproval = result.content.some(\n (c) =>\n c.type === \"tool-call\" &&\n c.result === undefined &&\n c.approval !== undefined &&\n c.approval.approved === undefined,\n );\n if (hasPendingApproval) return false;\n\n // TODO legacy behavior -- make specifying human tool names required\n if (humanToolNames === undefined) {\n return result.content.every(\n (c) => c.type !== \"tool-call\" || !!c.result || c.approval !== undefined,\n );\n }\n\n return result.content.every(\n (c) =>\n c.type !== \"tool-call\" ||\n !!c.result ||\n c.approval !== undefined ||\n !humanToolNames.includes(c.toolName),\n );\n};\n"],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"should-continue.js","names":["ThreadAssistantMessage","shouldContinue","result","humanToolNames","status","type","reason","hasPendingApproval","content","some","c","undefined","approval","approved","resolution","every","includes","toolName"],"sources":["../../../src/runtimes/local/should-continue.ts"],"sourcesContent":["import type { ThreadAssistantMessage } from \"../../types/message\";\n\nexport const shouldContinue = (\n result: ThreadAssistantMessage,\n humanToolNames: string[] | undefined,\n) => {\n if (\n result.status?.type !== \"requires-action\" ||\n result.status.reason !== \"tool-calls\"\n )\n return false;\n\n const hasPendingApproval = result.content.some(\n (c) =>\n c.type === \"tool-call\" &&\n c.result === undefined &&\n c.approval !== undefined &&\n c.approval.approved === undefined &&\n c.approval.resolution === undefined,\n );\n if (hasPendingApproval) return false;\n\n // TODO legacy behavior -- make specifying human tool names required\n if (humanToolNames === undefined) {\n return result.content.every(\n (c) => c.type !== \"tool-call\" || !!c.result || c.approval !== undefined,\n );\n }\n\n return result.content.every(\n (c) =>\n c.type !== \"tool-call\" ||\n !!c.result ||\n c.approval !== undefined ||\n !humanToolNames.includes(c.toolName),\n );\n};\n"],"mappings":";AAEA,MAAaC,kBACXC,QACAC,mBACG;CACH,IACED,OAAOE,QAAQC,SAAS,qBACxBH,OAAOE,OAAOE,WAAW,cAEzB,OAAO;CAUT,IAR2BJ,OAAOM,QAAQC,MACvCC,MACCA,EAAEL,SAAS,eACXK,EAAER,WAAWS,KAAAA,KACbD,EAAEE,aAAaD,KAAAA,KACfD,EAAEE,SAASC,aAAaF,KAAAA,KACxBD,EAAEE,SAASE,eAAeH,KAAAA,CAE1BJ,GAAoB,OAAO;CAG/B,IAAIJ,mBAAmBQ,KAAAA,GACrB,OAAOT,OAAOM,QAAQO,OACnBL,MAAMA,EAAEL,SAAS,eAAe,CAAC,CAACK,EAAER,UAAUQ,EAAEE,aAAaD,KAAAA,CAChE;CAGF,OAAOT,OAAOM,QAAQO,OACnBL,MACCA,EAAEL,SAAS,eACX,CAAC,CAACK,EAAER,UACJQ,EAAEE,aAAaD,KAAAA,KACf,CAACR,eAAea,SAASN,EAAEO,QAAQ,CACvC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadonlyThreadRuntimeCore.js","names":[],"sources":["../../../src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\n\nconst READONLY_THREAD_ERROR = new Error(\n \"This is a readonly thread. You cannot perform mutations on readonly threads.\",\n);\n\nexport class ReadonlyThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _messages: readonly ThreadMessage[] = [];\n\n get messages() {\n return this._messages;\n }\n\n setMessages(messages: readonly ThreadMessage[]) {\n if (this._messages === messages) return;\n this._messages = messages;\n this._notifySubscribers();\n }\n\n getMessageById(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return undefined;\n return {\n parentId: this._messages[idx - 1]?.id ?? null,\n message: this._messages[idx]!,\n index: idx,\n };\n }\n\n getBranches(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return [];\n return [messageId];\n }\n\n switchToBranch(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n append(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n deleteMessage(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n startRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n cancelRun(): void {}\n\n addToolResult(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeToolCall(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n respondToToolApproval(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speak(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n stopSpeaking(): void {}\n\n connectVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n disconnectVoice(): void {}\n\n getVoiceVolume = () => 0;\n subscribeVoiceVolume = (): Unsubscribe => () => {};\n\n muteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unmuteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n submitFeedback(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n getModelContext() {\n return {};\n }\n\n exportExternalState() {\n throw READONLY_THREAD_ERROR;\n }\n\n importExternalState(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n composer = {\n attachments: [] as never[],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n isEditing: false as const,\n canCancel: false,\n canSend: false,\n isEmpty: true,\n text: \"\",\n\n setText() {\n throw READONLY_THREAD_ERROR;\n },\n\n role: \"user\" as const,\n\n setRole() {\n throw READONLY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw READONLY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw READONLY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n steerQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw READONLY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw READONLY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n };\n\n getEditComposer() {\n return undefined;\n }\n\n beginEdit(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speech = undefined;\n voice = undefined;\n\n capabilities = {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n } as const;\n\n isDisabled = false;\n isSendDisabled = false;\n isLoading = false;\n\n state = null;\n suggestions = [] as never[];\n extras = undefined;\n\n import(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n export() {\n return {\n messages: this._messages.map((message, idx) => ({\n message,\n parentId: this._messages[idx - 1]?.id ?? null,\n })),\n };\n }\n\n reset(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unstable_on(): Unsubscribe {\n return () => {};\n }\n}\n"],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"ReadonlyThreadRuntimeCore.js","names":["Unsubscribe","ThreadMessage","ThreadRuntimeCore","BaseSubscribable","READONLY_THREAD_ERROR","Error","ReadonlyThreadRuntimeCore","_messages","messages","setMessages","_notifySubscribers","getMessageById","messageId","idx","findIndex","m","id","undefined","parentId","message","index","getBranches","switchToBranch","append","deleteMessage","startRun","resumeRun","cancelRun","addToolResult","resumeToolCall","respondToToolApproval","speak","stopSpeaking","connectVoice","disconnectVoice","getVoiceVolume","subscribeVoiceVolume","muteVoice","unmuteVoice","submitFeedback","getModelContext","exportExternalState","importExternalState","composer","attachments","attachmentAccept","addAttachment","removeAttachment","isEditing","const","canCancel","canSend","isEmpty","text","setText","role","setRole","runConfig","setRunConfig","reset","clearAttachments","send","cancel","queue","steerQueueItem","removeQueueItem","dictation","startDictation","stopDictation","quote","setQuote","subscribe","unstable_on","getEditComposer","beginEdit","speech","voice","capabilities","switchBranchDuringRun","edit","delete","reload","unstable_copy","feedback","isDisabled","isSendDisabled","isLoading","state","suggestions","extras","import","export","map"],"sources":["../../../src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\n\nconst READONLY_THREAD_ERROR = new Error(\n \"This is a readonly thread. You cannot perform mutations on readonly threads.\",\n);\n\nexport class ReadonlyThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _messages: readonly ThreadMessage[] = [];\n\n get messages() {\n return this._messages;\n }\n\n setMessages(messages: readonly ThreadMessage[]) {\n if (this._messages === messages) return;\n this._messages = messages;\n this._notifySubscribers();\n }\n\n getMessageById(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return undefined;\n return {\n parentId: this._messages[idx - 1]?.id ?? null,\n message: this._messages[idx]!,\n index: idx,\n };\n }\n\n getBranches(messageId: string) {\n const idx = this._messages.findIndex((m) => m.id === messageId);\n if (idx === -1) return [];\n return [messageId];\n }\n\n switchToBranch(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n append(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n deleteMessage(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n startRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeRun(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n cancelRun(): void {}\n\n addToolResult(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n resumeToolCall(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n respondToToolApproval(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speak(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n stopSpeaking(): void {}\n\n connectVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n disconnectVoice(): void {}\n\n getVoiceVolume = () => 0;\n subscribeVoiceVolume = (): Unsubscribe => () => {};\n\n muteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unmuteVoice(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n submitFeedback(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n getModelContext() {\n return {};\n }\n\n exportExternalState() {\n throw READONLY_THREAD_ERROR;\n }\n\n importExternalState(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n composer = {\n attachments: [] as never[],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw READONLY_THREAD_ERROR;\n },\n\n isEditing: false as const,\n canCancel: false,\n canSend: false,\n isEmpty: true,\n text: \"\",\n\n setText() {\n throw READONLY_THREAD_ERROR;\n },\n\n role: \"user\" as const,\n\n setRole() {\n throw READONLY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw READONLY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw READONLY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n steerQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw READONLY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw READONLY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n };\n\n getEditComposer() {\n return undefined;\n }\n\n beginEdit(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n speech = undefined;\n voice = undefined;\n\n capabilities = {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n } as const;\n\n isDisabled = false;\n isSendDisabled = false;\n isLoading = false;\n\n state = null;\n suggestions = [] as never[];\n extras = undefined;\n\n import(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n export() {\n return {\n messages: this._messages.map((message, idx) => ({\n message,\n parentId: this._messages[idx - 1]?.id ?? null,\n })),\n };\n }\n\n reset(): void {\n throw READONLY_THREAD_ERROR;\n }\n\n unstable_on(): Unsubscribe {\n return () => {};\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.js","names":[],"sources":["../../../../src/runtimes/remote-thread-list/adapter/in-memory.ts"],"sourcesContent":["import type { AssistantStream, AssistantStreamChunk } from \"assistant-stream\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n RemoteThreadListResponse,\n RemoteThreadMetadata,\n} from \"../types\";\n\nexport class InMemoryThreadListAdapter implements RemoteThreadListAdapter {\n list(): Promise<RemoteThreadListResponse> {\n return Promise.resolve({\n threads: [],\n });\n }\n\n rename(): Promise<void> {\n return Promise.resolve();\n }\n\n updateCustom(): Promise<void> {\n return Promise.resolve();\n }\n\n archive(): Promise<void> {\n return Promise.resolve();\n }\n\n unarchive(): Promise<void> {\n return Promise.resolve();\n }\n\n delete(): Promise<void> {\n return Promise.resolve();\n }\n\n initialize(threadId: string): Promise<RemoteThreadInitializeResponse> {\n return Promise.resolve({ remoteId: threadId, externalId: undefined });\n }\n\n generateTitle(): Promise<AssistantStream> {\n return Promise.resolve(new ReadableStream<AssistantStreamChunk>());\n }\n\n fetch(_threadId: string): Promise<RemoteThreadMetadata> {\n return Promise.reject(new Error(\"Thread not found\"));\n }\n}\n"],"mappings":";AAQA,
|
|
1
|
+
{"version":3,"file":"in-memory.js","names":["AssistantStream","AssistantStreamChunk","RemoteThreadInitializeResponse","RemoteThreadListAdapter","RemoteThreadListResponse","RemoteThreadMetadata","InMemoryThreadListAdapter","list","Promise","resolve","threads","rename","updateCustom","archive","unarchive","delete","initialize","threadId","remoteId","externalId","undefined","generateTitle","ReadableStream","fetch","_threadId","reject","Error"],"sources":["../../../../src/runtimes/remote-thread-list/adapter/in-memory.ts"],"sourcesContent":["import type { AssistantStream, AssistantStreamChunk } from \"assistant-stream\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n RemoteThreadListResponse,\n RemoteThreadMetadata,\n} from \"../types\";\n\nexport class InMemoryThreadListAdapter implements RemoteThreadListAdapter {\n list(): Promise<RemoteThreadListResponse> {\n return Promise.resolve({\n threads: [],\n });\n }\n\n rename(): Promise<void> {\n return Promise.resolve();\n }\n\n updateCustom(): Promise<void> {\n return Promise.resolve();\n }\n\n archive(): Promise<void> {\n return Promise.resolve();\n }\n\n unarchive(): Promise<void> {\n return Promise.resolve();\n }\n\n delete(): Promise<void> {\n return Promise.resolve();\n }\n\n initialize(threadId: string): Promise<RemoteThreadInitializeResponse> {\n return Promise.resolve({ remoteId: threadId, externalId: undefined });\n }\n\n generateTitle(): Promise<AssistantStream> {\n return Promise.resolve(new ReadableStream<AssistantStreamChunk>());\n }\n\n fetch(_threadId: string): Promise<RemoteThreadMetadata> {\n return Promise.reject(new Error(\"Thread not found\"));\n }\n}\n"],"mappings":";AAQA,IAAaM,4BAAb,MAA0E;CACxEC,OAA0C;EACxC,OAAOC,QAAQC,QAAQ,EACrBC,SAAS,CAAA,EACX,CAAC;CACH;CAEAC,SAAwB;EACtB,OAAOH,QAAQC,QAAQ;CACzB;CAEAG,eAA8B;EAC5B,OAAOJ,QAAQC,QAAQ;CACzB;CAEAI,UAAyB;EACvB,OAAOL,QAAQC,QAAQ;CACzB;CAEAK,YAA2B;EACzB,OAAON,QAAQC,QAAQ;CACzB;CAEAM,SAAwB;EACtB,OAAOP,QAAQC,QAAQ;CACzB;CAEAO,WAAWC,UAA2D;EACpE,OAAOT,QAAQC,QAAQ;GAAES,UAAUD;GAAUE,YAAYC,KAAAA;EAAU,CAAC;CACtE;CAEAC,gBAA0C;EACxC,OAAOb,QAAQC,QAAQ,IAAIa,eAAqC,CAAC;CACnE;CAEAC,MAAMC,WAAkD;EACtD,OAAOhB,QAAQiB,uBAAO,IAAIC,MAAM,kBAAkB,CAAC;CACrD;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty-thread-core.js","names":[],"sources":["../../../src/runtimes/remote-thread-list/empty-thread-core.ts"],"sourcesContent":["import type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\n\nconst EMPTY_THREAD_ERROR = new Error(\n \"This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead.\",\n);\nexport const EMPTY_THREAD_CORE: ThreadRuntimeCore = {\n getMessageById() {\n return undefined;\n },\n\n getBranches() {\n return [];\n },\n\n switchToBranch() {\n throw EMPTY_THREAD_ERROR;\n },\n\n append() {\n throw EMPTY_THREAD_ERROR;\n },\n\n deleteMessage() {\n throw EMPTY_THREAD_ERROR;\n },\n\n startRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancelRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n addToolResult() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeToolCall() {\n throw EMPTY_THREAD_ERROR;\n },\n\n respondToToolApproval() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speak() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopSpeaking() {\n throw EMPTY_THREAD_ERROR;\n },\n\n connectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n disconnectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n\n muteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unmuteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n submitFeedback() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getModelContext() {\n return {};\n },\n\n exportExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n importExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n composer: {\n attachments: [],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n isEditing: true,\n\n canCancel: false,\n canSend: false,\n isEmpty: true,\n\n text: \"\",\n\n setText() {\n throw EMPTY_THREAD_ERROR;\n },\n\n role: \"user\",\n\n setRole() {\n throw EMPTY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n steerQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw EMPTY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n },\n\n getEditComposer() {\n return undefined;\n },\n\n beginEdit() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speech: undefined,\n voice: undefined,\n\n capabilities: {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n },\n\n isDisabled: false,\n isSendDisabled: false,\n isLoading: true,\n\n messages: [],\n\n state: null,\n\n suggestions: [],\n\n extras: undefined,\n\n subscribe() {\n return () => {};\n },\n\n import() {\n throw EMPTY_THREAD_ERROR;\n },\n\n export() {\n return { messages: [] };\n },\n\n reset() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unstable_on() {\n return () => {};\n },\n};\n"],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"empty-thread-core.js","names":["ThreadRuntimeCore","EMPTY_THREAD_ERROR","Error","EMPTY_THREAD_CORE","getMessageById","undefined","getBranches","switchToBranch","append","deleteMessage","startRun","resumeRun","cancelRun","addToolResult","resumeToolCall","respondToToolApproval","speak","stopSpeaking","connectVoice","disconnectVoice","getVoiceVolume","subscribeVoiceVolume","muteVoice","unmuteVoice","submitFeedback","getModelContext","exportExternalState","importExternalState","composer","attachments","attachmentAccept","addAttachment","removeAttachment","isEditing","canCancel","canSend","isEmpty","text","setText","role","setRole","runConfig","setRunConfig","reset","clearAttachments","send","cancel","queue","steerQueueItem","removeQueueItem","dictation","startDictation","stopDictation","quote","setQuote","subscribe","unstable_on","getEditComposer","beginEdit","speech","voice","capabilities","switchBranchDuringRun","edit","delete","reload","unstable_copy","feedback","isDisabled","isSendDisabled","isLoading","messages","state","suggestions","extras","import","export"],"sources":["../../../src/runtimes/remote-thread-list/empty-thread-core.ts"],"sourcesContent":["import type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\n\nconst EMPTY_THREAD_ERROR = new Error(\n \"This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead.\",\n);\nexport const EMPTY_THREAD_CORE: ThreadRuntimeCore = {\n getMessageById() {\n return undefined;\n },\n\n getBranches() {\n return [];\n },\n\n switchToBranch() {\n throw EMPTY_THREAD_ERROR;\n },\n\n append() {\n throw EMPTY_THREAD_ERROR;\n },\n\n deleteMessage() {\n throw EMPTY_THREAD_ERROR;\n },\n\n startRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancelRun() {\n throw EMPTY_THREAD_ERROR;\n },\n\n addToolResult() {\n throw EMPTY_THREAD_ERROR;\n },\n\n resumeToolCall() {\n throw EMPTY_THREAD_ERROR;\n },\n\n respondToToolApproval() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speak() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopSpeaking() {\n throw EMPTY_THREAD_ERROR;\n },\n\n connectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n disconnectVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n\n muteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unmuteVoice() {\n throw EMPTY_THREAD_ERROR;\n },\n\n submitFeedback() {\n throw EMPTY_THREAD_ERROR;\n },\n\n getModelContext() {\n return {};\n },\n\n exportExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n importExternalState() {\n throw EMPTY_THREAD_ERROR;\n },\n\n composer: {\n attachments: [],\n attachmentAccept: \"*\",\n\n async addAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async removeAttachment() {\n throw EMPTY_THREAD_ERROR;\n },\n\n isEditing: true,\n\n canCancel: false,\n canSend: false,\n isEmpty: true,\n\n text: \"\",\n\n setText() {\n throw EMPTY_THREAD_ERROR;\n },\n\n role: \"user\",\n\n setRole() {\n throw EMPTY_THREAD_ERROR;\n },\n\n runConfig: {},\n\n setRunConfig() {\n throw EMPTY_THREAD_ERROR;\n },\n\n async reset() {\n // noop\n },\n\n async clearAttachments() {\n // noop\n },\n\n send() {\n throw EMPTY_THREAD_ERROR;\n },\n\n cancel() {\n // noop\n },\n\n queue: [] as never[],\n steerQueueItem() {},\n removeQueueItem() {},\n\n dictation: undefined,\n\n startDictation() {\n throw EMPTY_THREAD_ERROR;\n },\n\n stopDictation() {\n // noop\n },\n\n quote: undefined,\n\n setQuote() {\n throw EMPTY_THREAD_ERROR;\n },\n\n subscribe() {\n return () => {};\n },\n\n unstable_on() {\n return () => {};\n },\n },\n\n getEditComposer() {\n return undefined;\n },\n\n beginEdit() {\n throw EMPTY_THREAD_ERROR;\n },\n\n speech: undefined,\n voice: undefined,\n\n capabilities: {\n switchToBranch: false,\n switchBranchDuringRun: false,\n edit: false,\n delete: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n dictation: false,\n voice: false,\n attachments: false,\n feedback: false,\n queue: false,\n },\n\n isDisabled: false,\n isSendDisabled: false,\n isLoading: true,\n\n messages: [],\n\n state: null,\n\n suggestions: [],\n\n extras: undefined,\n\n subscribe() {\n return () => {};\n },\n\n import() {\n throw EMPTY_THREAD_ERROR;\n },\n\n export() {\n return { messages: [] };\n },\n\n reset() {\n throw EMPTY_THREAD_ERROR;\n },\n\n unstable_on() {\n return () => {};\n },\n};\n"],"mappings":";AAEA,MAAMC,qCAAqB,IAAIC,MAC7B,mQACF;AACA,MAAaC,oBAAuC;CAClDC,iBAAiB,CAEjB;CAEAE,cAAc;EACZ,OAAO,CAAA;CACT;CAEAC,iBAAiB;EACf,MAAMN;CACR;CAEAO,SAAS;EACP,MAAMP;CACR;CAEAQ,gBAAgB;EACd,MAAMR;CACR;CAEAS,WAAW;EACT,MAAMT;CACR;CAEAU,YAAY;EACV,MAAMV;CACR;CAEAW,YAAY;EACV,MAAMX;CACR;CAEAY,gBAAgB;EACd,MAAMZ;CACR;CAEAa,iBAAiB;EACf,MAAMb;CACR;CAEAc,wBAAwB;EACtB,MAAMd;CACR;CAEAe,QAAQ;EACN,MAAMf;CACR;CAEAgB,eAAe;EACb,MAAMhB;CACR;CAEAiB,eAAe;EACb,MAAMjB;CACR;CAEAkB,kBAAkB;EAChB,MAAMlB;CACR;CAEAmB,sBAAsB;CACtBC,kCAAkC,CAAC;CAEnCC,YAAY;EACV,MAAMrB;CACR;CAEAsB,cAAc;EACZ,MAAMtB;CACR;CAEAuB,iBAAiB;EACf,MAAMvB;CACR;CAEAwB,kBAAkB;EAChB,OAAO,CAAC;CACV;CAEAC,sBAAsB;EACpB,MAAMzB;CACR;CAEA0B,sBAAsB;EACpB,MAAM1B;CACR;CAEA2B,UAAU;EACRC,aAAa,CAAA;EACbC,kBAAkB;EAElB,MAAMC,gBAAgB;GACpB,MAAM9B;EACR;EAEA,MAAM+B,mBAAmB;GACvB,MAAM/B;EACR;EAEAgC,WAAW;EAEXC,WAAW;EACXC,SAAS;EACTC,SAAS;EAETC,MAAM;EAENC,UAAU;GACR,MAAMrC;EACR;EAEAsC,MAAM;EAENC,UAAU;GACR,MAAMvC;EACR;EAEAwC,WAAW,CAAC;EAEZC,eAAe;GACb,MAAMzC;EACR;EAEA,MAAM0C,QAAQ,CACZ;EAGF,MAAMC,mBAAmB,CACvB;EAGFC,OAAO;GACL,MAAM5C;EACR;EAEA6C,SAAS,CACP;EAGFC,OAAO,CAAA;EACPC,iBAAiB,CAAC;EAClBC,kBAAkB,CAAC;EAEnBC,WAAW7C,KAAAA;EAEX8C,iBAAiB;GACf,MAAMlD;EACR;EAEAmD,gBAAgB,CACd;EAGFC,OAAOhD,KAAAA;EAEPiD,WAAW;GACT,MAAMrD;EACR;EAEAsD,YAAY;GACV,aAAa,CAAC;EAChB;EAEAC,cAAc;GACZ,aAAa,CAAC;EAChB;CACF;CAEAC,kBAAkB,CAElB;CAEAC,YAAY;EACV,MAAMzD;CACR;CAEA0D,QAAQtD,KAAAA;CACRuD,OAAOvD,KAAAA;CAEPwD,cAAc;EACZtD,gBAAgB;EAChBuD,uBAAuB;EACvBC,MAAM;EACNC,QAAQ;EACRC,QAAQ;EACRnB,QAAQ;EACRoB,eAAe;EACfP,QAAQ;EACRT,WAAW;EACXU,OAAO;EACP/B,aAAa;EACbsC,UAAU;EACVpB,OAAO;CACT;CAEAqB,YAAY;CACZC,gBAAgB;CAChBC,WAAW;CAEXC,UAAU,CAAA;CAEVC,OAAO;CAEPC,aAAa,CAAA;CAEbC,QAAQrE,KAAAA;CAERkD,YAAY;EACV,aAAa,CAAC;CAChB;CAEAoB,SAAS;EACP,MAAM1E;CACR;CAEA2E,SAAS;EACP,OAAO,EAAEL,UAAU,CAAA,EAAG;CACxB;CAEA5B,QAAQ;EACN,MAAM1C;CACR;CAEAuD,cAAc;EACZ,aAAa,CAAC;CAChB;AACF"}
|