@assistant-ui/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/attachment.d.ts +36 -0
- package/dist/adapters/attachment.d.ts.map +1 -0
- package/dist/adapters/attachment.js +148 -0
- package/dist/adapters/attachment.js.map +1 -0
- package/dist/adapters/feedback.d.ts +10 -0
- package/dist/adapters/feedback.d.ts.map +1 -0
- package/dist/adapters/feedback.js +2 -0
- package/dist/adapters/feedback.js.map +1 -0
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/speech.d.ts +76 -0
- package/dist/adapters/speech.d.ts.map +1 -0
- package/dist/adapters/speech.js +179 -0
- package/dist/adapters/speech.js.map +1 -0
- package/dist/adapters/suggestion.d.ts +10 -0
- package/dist/adapters/suggestion.d.ts.map +1 -0
- package/dist/adapters/suggestion.js +2 -0
- package/dist/adapters/suggestion.js.map +1 -0
- package/dist/adapters/thread-history.d.ts +43 -0
- package/dist/adapters/thread-history.d.ts.map +1 -0
- package/dist/adapters/thread-history.js +2 -0
- package/dist/adapters/thread-history.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +5 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +7 -0
- package/dist/internal.js.map +1 -0
- package/dist/model-context/frame/host.d.ts +21 -0
- package/dist/model-context/frame/host.d.ts.map +1 -0
- package/dist/model-context/frame/host.js +141 -0
- package/dist/model-context/frame/host.js.map +1 -0
- package/dist/model-context/frame/index.d.ts +5 -0
- package/dist/model-context/frame/index.d.ts.map +1 -0
- package/dist/model-context/frame/index.js +4 -0
- package/dist/model-context/frame/index.js.map +1 -0
- package/dist/model-context/frame/provider.d.ts +18 -0
- package/dist/model-context/frame/provider.d.ts.map +1 -0
- package/dist/model-context/frame/provider.js +133 -0
- package/dist/model-context/frame/provider.js.map +1 -0
- package/dist/model-context/frame/types.d.ts +29 -0
- package/dist/model-context/frame/types.d.ts.map +1 -0
- package/dist/model-context/frame/types.js +2 -0
- package/dist/model-context/frame/types.js.map +1 -0
- package/dist/model-context/index.d.ts +8 -0
- package/dist/model-context/index.d.ts.map +1 -0
- package/dist/model-context/index.js +9 -0
- package/dist/model-context/index.js.map +1 -0
- package/dist/model-context/registry-handles.d.ts +13 -0
- package/dist/model-context/registry-handles.d.ts.map +1 -0
- package/dist/model-context/registry-handles.js +2 -0
- package/dist/model-context/registry-handles.js.map +1 -0
- package/dist/model-context/registry.d.ts +17 -0
- package/dist/model-context/registry.d.ts.map +1 -0
- package/dist/model-context/registry.js +108 -0
- package/dist/model-context/registry.js.map +1 -0
- package/dist/model-context/tool.d.ts +3 -0
- package/dist/model-context/tool.d.ts.map +1 -0
- package/dist/model-context/tool.js +5 -0
- package/dist/model-context/tool.js.map +1 -0
- package/dist/model-context/types.d.ts +37 -0
- package/dist/model-context/types.d.ts.map +1 -0
- package/dist/model-context/types.js +43 -0
- package/dist/model-context/types.js.map +1 -0
- package/dist/runtime/api/assistant-runtime.d.ts +64 -0
- package/dist/runtime/api/assistant-runtime.d.ts.map +1 -0
- package/dist/runtime/api/assistant-runtime.js +46 -0
- package/dist/runtime/api/assistant-runtime.js.map +1 -0
- package/dist/runtime/api/attachment-runtime.d.ts +63 -0
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -0
- package/dist/runtime/api/attachment-runtime.js +56 -0
- package/dist/runtime/api/attachment-runtime.js.map +1 -0
- package/dist/runtime/api/bindings.d.ts +31 -0
- package/dist/runtime/api/bindings.d.ts.map +1 -0
- package/dist/runtime/api/bindings.js +2 -0
- package/dist/runtime/api/bindings.js.map +1 -0
- package/dist/runtime/api/composer-runtime.d.ts +181 -0
- package/dist/runtime/api/composer-runtime.d.ts.map +1 -0
- package/dist/runtime/api/composer-runtime.js +247 -0
- package/dist/runtime/api/composer-runtime.js.map +1 -0
- package/dist/runtime/api/message-part-runtime.d.ts +31 -0
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -0
- package/dist/runtime/api/message-part-runtime.js +67 -0
- package/dist/runtime/api/message-part-runtime.js.map +1 -0
- package/dist/runtime/api/message-runtime.d.ts +91 -0
- package/dist/runtime/api/message-runtime.d.ts.map +1 -0
- package/dist/runtime/api/message-runtime.js +199 -0
- package/dist/runtime/api/message-runtime.js.map +1 -0
- package/dist/runtime/api/paths.d.ts +64 -0
- package/dist/runtime/api/paths.d.ts.map +1 -0
- package/dist/runtime/api/paths.js +2 -0
- package/dist/runtime/api/paths.js.map +1 -0
- package/dist/runtime/api/thread-list-item-runtime.d.ts +50 -0
- package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -0
- package/dist/runtime/api/thread-list-item-runtime.js +85 -0
- package/dist/runtime/api/thread-list-item-runtime.js.map +1 -0
- package/dist/runtime/api/thread-list-runtime.d.ts +44 -0
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -0
- package/dist/runtime/api/thread-list-runtime.js +136 -0
- package/dist/runtime/api/thread-list-runtime.js.map +1 -0
- package/dist/runtime/api/thread-runtime.d.ts +272 -0
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -0
- package/dist/runtime/api/thread-runtime.js +240 -0
- package/dist/runtime/api/thread-runtime.js.map +1 -0
- package/dist/runtime/base/base-assistant-runtime-core.d.ts +12 -0
- package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -0
- package/dist/runtime/base/base-assistant-runtime-core.js +11 -0
- package/dist/runtime/base/base-assistant-runtime-core.js.map +1 -0
- package/dist/runtime/base/base-composer-runtime-core.d.ts +55 -0
- package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -0
- package/dist/runtime/base/base-composer-runtime-core.js +320 -0
- package/dist/runtime/base/base-composer-runtime-core.js.map +1 -0
- package/dist/runtime/base/base-thread-runtime-core.d.ts +67 -0
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -0
- package/dist/runtime/base/base-thread-runtime-core.js +157 -0
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -0
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +28 -0
- package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -0
- package/dist/runtime/base/default-edit-composer-runtime-core.js +49 -0
- package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -0
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +24 -0
- package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -0
- package/dist/runtime/base/default-thread-composer-runtime-core.js +41 -0
- package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -0
- package/dist/runtime/index.d.ts +20 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts +10 -0
- package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -0
- package/dist/runtime/interfaces/assistant-runtime-core.js +2 -0
- package/dist/runtime/interfaces/assistant-runtime-core.js.map +1 -0
- package/dist/runtime/interfaces/composer-runtime-core.d.ts +38 -0
- package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -0
- package/dist/runtime/interfaces/composer-runtime-core.js +2 -0
- package/dist/runtime/interfaces/composer-runtime-core.js.map +1 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +37 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.js +2 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.js.map +1 -0
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +97 -0
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -0
- package/dist/runtime/interfaces/thread-runtime-core.js +2 -0
- package/dist/runtime/interfaces/thread-runtime-core.js.map +1 -0
- package/dist/runtime/internal.d.ts +23 -0
- package/dist/runtime/internal.d.ts.map +1 -0
- package/dist/runtime/internal.js +25 -0
- package/dist/runtime/internal.js.map +1 -0
- package/dist/runtime/utils/auto-status.d.ts +5 -0
- package/dist/runtime/utils/auto-status.d.ts.map +1 -0
- package/dist/runtime/utils/auto-status.js +32 -0
- package/dist/runtime/utils/auto-status.js.map +1 -0
- package/dist/runtime/utils/chat-model-adapter.d.ts +40 -0
- package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -0
- package/dist/runtime/utils/chat-model-adapter.js +2 -0
- package/dist/runtime/utils/chat-model-adapter.js.map +1 -0
- package/dist/runtime/utils/external-store-message.d.ts +10 -0
- package/dist/runtime/utils/external-store-message.d.ts.map +1 -0
- package/dist/runtime/utils/external-store-message.js +22 -0
- package/dist/runtime/utils/external-store-message.js.map +1 -0
- package/dist/runtime/utils/message-repository.d.ts +43 -0
- package/dist/runtime/utils/message-repository.d.ts.map +1 -0
- package/dist/runtime/utils/message-repository.js +257 -0
- package/dist/runtime/utils/message-repository.js.map +1 -0
- package/dist/runtime/utils/thread-message-like.d.ts +34 -0
- package/dist/runtime/utils/thread-message-like.d.ts.map +1 -0
- package/dist/runtime/utils/thread-message-like.js +129 -0
- package/dist/runtime/utils/thread-message-like.js.map +1 -0
- package/dist/runtimes/assistant-transport/utils.d.ts +11 -0
- package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -0
- package/dist/runtimes/assistant-transport/utils.js +20 -0
- package/dist/runtimes/assistant-transport/utils.js.map +1 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts +81 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -0
- package/dist/runtimes/external-store/external-store-adapter.js +2 -0
- package/dist/runtimes/external-store/external-store-adapter.js.map +1 -0
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts +9 -0
- package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -0
- package/dist/runtimes/external-store/external-store-runtime-core.js +19 -0
- package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -0
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +42 -0
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -0
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +174 -0
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +47 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +260 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -0
- package/dist/runtimes/external-store/index.d.ts +8 -0
- package/dist/runtimes/external-store/index.d.ts.map +1 -0
- package/dist/runtimes/external-store/index.js +5 -0
- package/dist/runtimes/external-store/index.js.map +1 -0
- package/dist/runtimes/external-store/thread-message-converter.d.ts +7 -0
- package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -0
- package/dist/runtimes/external-store/thread-message-converter.js +12 -0
- package/dist/runtimes/external-store/thread-message-converter.js.map +1 -0
- package/dist/runtimes/index.d.ts +6 -0
- package/dist/runtimes/index.d.ts.map +1 -0
- package/dist/runtimes/index.js +4 -0
- package/dist/runtimes/index.js.map +1 -0
- package/dist/runtimes/internal.d.ts +18 -0
- package/dist/runtimes/internal.d.ts.map +1 -0
- package/dist/runtimes/internal.js +15 -0
- package/dist/runtimes/internal.js.map +1 -0
- package/dist/runtimes/local/index.d.ts +7 -0
- package/dist/runtimes/local/index.d.ts.map +1 -0
- package/dist/runtimes/local/index.js +5 -0
- package/dist/runtimes/local/index.js.map +1 -0
- package/dist/runtimes/local/local-runtime-core.d.ts +11 -0
- package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -0
- package/dist/runtimes/local/local-runtime-core.js +22 -0
- package/dist/runtimes/local/local-runtime-core.js.map +1 -0
- package/dist/runtimes/local/local-runtime-options.d.ts +23 -0
- package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -0
- package/dist/runtimes/local/local-runtime-options.js +2 -0
- package/dist/runtimes/local/local-runtime-options.js.map +1 -0
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +46 -0
- package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -0
- package/dist/runtimes/local/local-thread-list-runtime-core.js +87 -0
- package/dist/runtimes/local/local-thread-list-runtime-core.js.map +1 -0
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +59 -0
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -0
- package/dist/runtimes/local/local-thread-runtime-core.js +423 -0
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -0
- package/dist/runtimes/local/should-continue.d.ts +3 -0
- package/dist/runtimes/local/should-continue.d.ts.map +1 -0
- package/dist/runtimes/local/should-continue.js +14 -0
- package/dist/runtimes/local/should-continue.js.map +1 -0
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +13 -0
- package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/adapter/in-memory.js +29 -0
- package/dist/runtimes/remote-thread-list/adapter/in-memory.js.map +1 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +3 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.js +146 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -0
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +23 -0
- package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/optimistic-state.js +57 -0
- package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +37 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +62 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts +38 -0
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -0
- package/dist/runtimes/remote-thread-list/types.js +2 -0
- package/dist/runtimes/remote-thread-list/types.js.map +1 -0
- package/dist/store/clients/chain-of-thought-client.d.ts +15 -0
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -0
- package/dist/store/clients/chain-of-thought-client.js +18 -0
- package/dist/store/clients/chain-of-thought-client.js.map +1 -0
- package/dist/store/clients/index.d.ts +6 -0
- package/dist/store/clients/index.d.ts.map +1 -0
- package/dist/store/clients/index.js +6 -0
- package/dist/store/clients/index.js.map +1 -0
- package/dist/store/clients/model-context-client.d.ts +3 -0
- package/dist/store/clients/model-context-client.d.ts.map +1 -0
- package/dist/store/clients/model-context-client.js +14 -0
- package/dist/store/clients/model-context-client.js.map +1 -0
- package/dist/store/clients/no-op-composer-client.d.ts +7 -0
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -0
- package/dist/store/clients/no-op-composer-client.js +61 -0
- package/dist/store/clients/no-op-composer-client.js.map +1 -0
- package/dist/store/clients/suggestions.d.ts +11 -0
- package/dist/store/clients/suggestions.d.ts.map +1 -0
- package/dist/store/clients/suggestions.js +37 -0
- package/dist/store/clients/suggestions.js.map +1 -0
- package/dist/store/clients/thread-message-client.d.ts +11 -0
- package/dist/store/clients/thread-message-client.d.ts.map +1 -0
- package/dist/store/clients/thread-message-client.js +112 -0
- package/dist/store/clients/thread-message-client.js.map +1 -0
- package/dist/store/index.d.ts +14 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +14 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/internal.d.ts +11 -0
- package/dist/store/internal.d.ts.map +1 -0
- package/dist/store/internal.js +12 -0
- package/dist/store/internal.js.map +1 -0
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +8 -0
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -0
- package/dist/store/runtime-clients/attachment-runtime-client.js +11 -0
- package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -0
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +13 -0
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -0
- package/dist/store/runtime-clients/composer-runtime-client.js +83 -0
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -0
- package/dist/store/runtime-clients/index.d.ts +8 -0
- package/dist/store/runtime-clients/index.d.ts.map +1 -0
- package/dist/store/runtime-clients/index.js +8 -0
- package/dist/store/runtime-clients/index.js.map +1 -0
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +8 -0
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -0
- package/dist/store/runtime-clients/message-part-runtime-client.js +12 -0
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -0
- package/dist/store/runtime-clients/message-runtime-client.d.ts +11 -0
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -0
- package/dist/store/runtime-clients/message-runtime-client.js +78 -0
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -0
- package/dist/store/runtime-clients/tap-subscribable.d.ts +3 -0
- package/dist/store/runtime-clients/tap-subscribable.d.ts.map +1 -0
- package/dist/store/runtime-clients/tap-subscribable.js +12 -0
- package/dist/store/runtime-clients/tap-subscribable.js.map +1 -0
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +8 -0
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -0
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +41 -0
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -0
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +10 -0
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -0
- package/dist/store/runtime-clients/thread-list-runtime-client.js +54 -0
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -0
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +8 -0
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -0
- package/dist/store/runtime-clients/thread-runtime-client.js +91 -0
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -0
- package/dist/store/scopes/attachment.d.ts +23 -0
- package/dist/store/scopes/attachment.d.ts.map +1 -0
- package/dist/store/scopes/attachment.js +2 -0
- package/dist/store/scopes/attachment.js.map +1 -0
- package/dist/store/scopes/chain-of-thought.d.ts +39 -0
- package/dist/store/scopes/chain-of-thought.d.ts.map +1 -0
- package/dist/store/scopes/chain-of-thought.js +2 -0
- package/dist/store/scopes/chain-of-thought.js.map +1 -0
- package/dist/store/scopes/composer.d.ts +75 -0
- package/dist/store/scopes/composer.d.ts.map +1 -0
- package/dist/store/scopes/composer.js +2 -0
- package/dist/store/scopes/composer.js.map +1 -0
- package/dist/store/scopes/index.d.ts +12 -0
- package/dist/store/scopes/index.d.ts.map +1 -0
- package/dist/store/scopes/index.js +2 -0
- package/dist/store/scopes/index.js.map +1 -0
- package/dist/store/scopes/message.d.ts +86 -0
- package/dist/store/scopes/message.d.ts.map +1 -0
- package/dist/store/scopes/message.js +2 -0
- package/dist/store/scopes/message.js.map +1 -0
- package/dist/store/scopes/model-context.d.ts +11 -0
- package/dist/store/scopes/model-context.d.ts.map +1 -0
- package/dist/store/scopes/model-context.js +2 -0
- package/dist/store/scopes/model-context.js.map +1 -0
- package/dist/store/scopes/part.d.ts +44 -0
- package/dist/store/scopes/part.d.ts.map +1 -0
- package/dist/store/scopes/part.js +2 -0
- package/dist/store/scopes/part.js.map +1 -0
- package/dist/store/scopes/suggestion.d.ts +19 -0
- package/dist/store/scopes/suggestion.d.ts.map +1 -0
- package/dist/store/scopes/suggestion.js +2 -0
- package/dist/store/scopes/suggestion.js.map +1 -0
- package/dist/store/scopes/suggestions.d.ts +19 -0
- package/dist/store/scopes/suggestions.d.ts.map +1 -0
- package/dist/store/scopes/suggestions.js +2 -0
- package/dist/store/scopes/suggestions.js.map +1 -0
- package/dist/store/scopes/thread-list-item.d.ts +50 -0
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -0
- package/dist/store/scopes/thread-list-item.js +2 -0
- package/dist/store/scopes/thread-list-item.js.map +1 -0
- package/dist/store/scopes/thread.d.ts +135 -0
- package/dist/store/scopes/thread.d.ts.map +1 -0
- package/dist/store/scopes/thread.js +2 -0
- package/dist/store/scopes/thread.js.map +1 -0
- package/dist/store/scopes/threads.d.ts +29 -0
- package/dist/store/scopes/threads.d.ts.map +1 -0
- package/dist/store/scopes/threads.js +2 -0
- package/dist/store/scopes/threads.js.map +1 -0
- package/dist/store/types/client.d.ts +137 -0
- package/dist/store/types/client.d.ts.map +1 -0
- package/dist/store/types/client.js +2 -0
- package/dist/store/types/client.js.map +1 -0
- package/dist/store/types/events.d.ts +33 -0
- package/dist/store/types/events.d.ts.map +1 -0
- package/dist/store/types/events.js +8 -0
- package/dist/store/types/events.js.map +1 -0
- package/dist/store/types/index.d.ts +3 -0
- package/dist/store/types/index.d.ts.map +1 -0
- package/dist/store/types/index.js +2 -0
- package/dist/store/types/index.js.map +1 -0
- package/dist/store/utils/attach-transform-scopes.d.ts +11 -0
- package/dist/store/utils/attach-transform-scopes.d.ts.map +1 -0
- package/dist/store/utils/attach-transform-scopes.js +12 -0
- package/dist/store/utils/attach-transform-scopes.js.map +1 -0
- package/dist/store/utils/base-proxy-handler.d.ts +23 -0
- package/dist/store/utils/base-proxy-handler.d.ts.map +1 -0
- package/dist/store/utils/base-proxy-handler.js +46 -0
- package/dist/store/utils/base-proxy-handler.js.map +1 -0
- package/dist/store/utils/derived.d.ts +34 -0
- package/dist/store/utils/derived.d.ts.map +1 -0
- package/dist/store/utils/derived.js +24 -0
- package/dist/store/utils/derived.js.map +1 -0
- package/dist/store/utils/index.d.ts +7 -0
- package/dist/store/utils/index.d.ts.map +1 -0
- package/dist/store/utils/index.js +7 -0
- package/dist/store/utils/index.js.map +1 -0
- package/dist/store/utils/notification-manager.d.ts +11 -0
- package/dist/store/utils/notification-manager.d.ts.map +1 -0
- package/dist/store/utils/notification-manager.js +84 -0
- package/dist/store/utils/notification-manager.js.map +1 -0
- package/dist/store/utils/proxied-assistant-state.d.ts +8 -0
- package/dist/store/utils/proxied-assistant-state.d.ts.map +1 -0
- package/dist/store/utils/proxied-assistant-state.js +33 -0
- package/dist/store/utils/proxied-assistant-state.js.map +1 -0
- package/dist/store/utils/split-clients.d.ts +10 -0
- package/dist/store/utils/split-clients.d.ts.map +1 -0
- package/dist/store/utils/split-clients.js +53 -0
- package/dist/store/utils/split-clients.js.map +1 -0
- package/dist/store/utils/tap-assistant-context.d.ts +19 -0
- package/dist/store/utils/tap-assistant-context.d.ts.map +1 -0
- package/dist/store/utils/tap-assistant-context.js +23 -0
- package/dist/store/utils/tap-assistant-context.js.map +1 -0
- package/dist/store/utils/tap-client-list.d.ts +28 -0
- package/dist/store/utils/tap-client-list.d.ts.map +1 -0
- package/dist/store/utils/tap-client-list.js +68 -0
- package/dist/store/utils/tap-client-list.js.map +1 -0
- package/dist/store/utils/tap-client-lookup.d.ts +15 -0
- package/dist/store/utils/tap-client-lookup.d.ts.map +1 -0
- package/dist/store/utils/tap-client-lookup.js +42 -0
- package/dist/store/utils/tap-client-lookup.js.map +1 -0
- package/dist/store/utils/tap-client-resource.d.ts +13 -0
- package/dist/store/utils/tap-client-resource.d.ts.map +1 -0
- package/dist/store/utils/tap-client-resource.js +114 -0
- package/dist/store/utils/tap-client-resource.js.map +1 -0
- package/dist/store/utils/tap-client-stack-context.d.ts +23 -0
- package/dist/store/utils/tap-client-stack-context.d.ts.map +1 -0
- package/dist/store/utils/tap-client-stack-context.js +28 -0
- package/dist/store/utils/tap-client-stack-context.js.map +1 -0
- package/dist/store/utils/wrapper-resource.d.ts +3 -0
- package/dist/store/utils/wrapper-resource.d.ts.map +1 -0
- package/dist/store/utils/wrapper-resource.js +11 -0
- package/dist/store/utils/wrapper-resource.js.map +1 -0
- package/dist/subscribable/index.d.ts +3 -0
- package/dist/subscribable/index.d.ts.map +1 -0
- package/dist/subscribable/index.js +8 -0
- package/dist/subscribable/index.js.map +1 -0
- package/dist/subscribable/subscribable.d.ts +68 -0
- package/dist/subscribable/subscribable.d.ts.map +1 -0
- package/dist/subscribable/subscribable.js +237 -0
- package/dist/subscribable/subscribable.js.map +1 -0
- package/dist/types/attachment.d.ts +35 -0
- package/dist/types/attachment.d.ts.map +1 -0
- package/dist/types/attachment.js +2 -0
- package/dist/types/attachment.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/message.d.ts +179 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +2 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/quote.d.ts +5 -0
- package/dist/types/quote.d.ts.map +1 -0
- package/dist/types/quote.js +2 -0
- package/dist/types/quote.js.map +1 -0
- package/dist/types/unsubscribe.d.ts +2 -0
- package/dist/types/unsubscribe.d.ts.map +1 -0
- package/dist/types/unsubscribe.js +2 -0
- package/dist/types/unsubscribe.js.map +1 -0
- package/dist/utils/composite-context-provider.d.ts +10 -0
- package/dist/utils/composite-context-provider.d.ts.map +1 -0
- package/dist/utils/composite-context-provider.js +29 -0
- package/dist/utils/composite-context-provider.js.map +1 -0
- package/dist/utils/id.d.ts +6 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +9 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/text.d.ts +3 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +5 -0
- package/dist/utils/text.js.map +1 -0
- package/package.json +85 -0
- package/src/adapters/attachment.ts +209 -0
- package/src/adapters/feedback.ts +10 -0
- package/src/adapters/index.ts +30 -0
- package/src/adapters/speech.ts +338 -0
- package/src/adapters/suggestion.ts +14 -0
- package/src/adapters/thread-history.ts +72 -0
- package/src/index.ts +7 -0
- package/src/internal.ts +7 -0
- package/src/model-context/frame/host.ts +195 -0
- package/src/model-context/frame/index.ts +10 -0
- package/src/model-context/frame/provider.ts +193 -0
- package/src/model-context/frame/types.ts +40 -0
- package/src/model-context/index.ts +35 -0
- package/src/model-context/registry-handles.ts +18 -0
- package/src/model-context/registry.ts +159 -0
- package/src/model-context/tool.ts +9 -0
- package/src/model-context/types.ts +104 -0
- package/src/runtime/api/assistant-runtime.ts +115 -0
- package/src/runtime/api/attachment-runtime.ts +119 -0
- package/src/runtime/api/bindings.ts +49 -0
- package/src/runtime/api/composer-runtime.ts +505 -0
- package/src/runtime/api/message-part-runtime.ts +108 -0
- package/src/runtime/api/message-runtime.ts +335 -0
- package/src/runtime/api/paths.ts +61 -0
- package/src/runtime/api/thread-list-item-runtime.ts +145 -0
- package/src/runtime/api/thread-list-runtime.ts +227 -0
- package/src/runtime/api/thread-runtime.ts +568 -0
- package/src/runtime/base/base-assistant-runtime-core.ts +20 -0
- package/src/runtime/base/base-composer-runtime-core.ts +418 -0
- package/src/runtime/base/base-thread-runtime-core.ts +234 -0
- package/src/runtime/base/default-edit-composer-runtime-core.ts +71 -0
- package/src/runtime/base/default-thread-composer-runtime-core.ts +65 -0
- package/src/runtime/index.ts +108 -0
- package/src/runtime/interfaces/assistant-runtime-core.ts +12 -0
- package/src/runtime/interfaces/composer-runtime-core.ts +64 -0
- package/src/runtime/interfaces/thread-list-runtime-core.ts +49 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +142 -0
- package/src/runtime/internal.ts +64 -0
- package/src/runtime/utils/auto-status.ts +67 -0
- package/src/runtime/utils/chat-model-adapter.ts +66 -0
- package/src/runtime/utils/external-store-message.ts +37 -0
- package/src/runtime/utils/message-repository.ts +390 -0
- package/src/runtime/utils/thread-message-like.ts +225 -0
- package/src/runtimes/assistant-transport/utils.ts +37 -0
- package/src/runtimes/external-store/external-store-adapter.ts +111 -0
- package/src/runtimes/external-store/external-store-runtime-core.ts +26 -0
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +235 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +368 -0
- package/src/runtimes/external-store/index.ts +15 -0
- package/src/runtimes/external-store/thread-message-converter.ts +23 -0
- package/src/runtimes/index.ts +28 -0
- package/src/runtimes/internal.ts +36 -0
- package/src/runtimes/local/index.ts +6 -0
- package/src/runtimes/local/local-runtime-core.ts +32 -0
- package/src/runtimes/local/local-runtime-options.ts +27 -0
- package/src/runtimes/local/local-thread-list-runtime-core.ts +116 -0
- package/src/runtimes/local/local-thread-runtime-core.ts +534 -0
- package/src/runtimes/local/should-continue.ts +26 -0
- package/src/runtimes/remote-thread-list/adapter/in-memory.ts +43 -0
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +200 -0
- package/src/runtimes/remote-thread-list/optimistic-state.ts +89 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +123 -0
- package/src/runtimes/remote-thread-list/types.ts +48 -0
- package/src/store/clients/chain-of-thought-client.ts +40 -0
- package/src/store/clients/index.ts +8 -0
- package/src/store/clients/model-context-client.ts +20 -0
- package/src/store/clients/no-op-composer-client.ts +66 -0
- package/src/store/clients/suggestions.ts +69 -0
- package/src/store/clients/thread-message-client.ts +170 -0
- package/src/store/index.ts +44 -0
- package/src/store/internal.ts +32 -0
- package/src/store/runtime-clients/attachment-runtime-client.ts +16 -0
- package/src/store/runtime-clients/composer-runtime-client.ts +131 -0
- package/src/store/runtime-clients/index.ts +7 -0
- package/src/store/runtime-clients/message-part-runtime-client.ts +17 -0
- package/src/store/runtime-clients/message-runtime-client.ts +141 -0
- package/src/store/runtime-clients/tap-subscribable.ts +16 -0
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +53 -0
- package/src/store/runtime-clients/thread-list-runtime-client.ts +86 -0
- package/src/store/runtime-clients/thread-runtime-client.ts +141 -0
- package/src/store/scopes/attachment.ts +20 -0
- package/src/store/scopes/chain-of-thought.ts +38 -0
- package/src/store/scopes/composer.ts +80 -0
- package/src/store/scopes/index.ts +68 -0
- package/src/store/scopes/message.ts +75 -0
- package/src/store/scopes/model-context.ts +13 -0
- package/src/store/scopes/part.ts +47 -0
- package/src/store/scopes/suggestion.ts +19 -0
- package/src/store/scopes/suggestions.ts +20 -0
- package/src/store/scopes/thread-list-item.ts +44 -0
- package/src/store/scopes/thread.ts +135 -0
- package/src/store/scopes/threads.ts +34 -0
- package/src/store/types/client.ts +203 -0
- package/src/store/types/events.ts +77 -0
- package/src/store/types/index.ts +23 -0
- package/src/store/utils/attach-transform-scopes.ts +38 -0
- package/src/store/utils/base-proxy-handler.ts +50 -0
- package/src/store/utils/derived.ts +46 -0
- package/src/store/utils/index.ts +28 -0
- package/src/store/utils/notification-manager.ts +114 -0
- package/src/store/utils/proxied-assistant-state.ts +55 -0
- package/src/store/utils/split-clients.ts +82 -0
- package/src/store/utils/tap-assistant-context.ts +58 -0
- package/src/store/utils/tap-client-list.ts +121 -0
- package/src/store/utils/tap-client-lookup.ts +79 -0
- package/src/store/utils/tap-client-resource.ts +187 -0
- package/src/store/utils/tap-client-stack-context.ts +51 -0
- package/src/store/utils/wrapper-resource.ts +17 -0
- package/src/subscribable/index.ts +21 -0
- package/src/subscribable/subscribable.ts +317 -0
- package/src/tests/BaseSubscribable.test.ts +54 -0
- package/src/tests/MessageRepository.test.ts +607 -0
- package/src/tests/OptimisticState-delete-crash.test.ts +206 -0
- package/src/types/attachment.ts +45 -0
- package/src/types/index.ts +39 -0
- package/src/types/message.ts +248 -0
- package/src/types/quote.ts +4 -0
- package/src/types/unsubscribe.ts +1 -0
- package/src/utils/composite-context-provider.ts +36 -0
- package/src/utils/id.ts +14 -0
- package/src/utils/index.ts +14 -0
- package/src/utils/text.ts +11 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
import { OptimisticState } from "../runtimes/remote-thread-list/optimistic-state";
|
|
3
|
+
import {
|
|
4
|
+
type RemoteThreadState,
|
|
5
|
+
createThreadMappingId,
|
|
6
|
+
updateStatusReducer,
|
|
7
|
+
getThreadData,
|
|
8
|
+
} from "../runtimes/remote-thread-list/remote-thread-state";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* This test reproduces the crash from issue #3346:
|
|
12
|
+
* "Entry not available in the store" when deleting the active thread.
|
|
13
|
+
*
|
|
14
|
+
* Root cause: optimisticUpdate's `optimistic` callback runs synchronously
|
|
15
|
+
* and removes the thread from threadData, but mainThreadId still points to
|
|
16
|
+
* the deleted thread. Subscribers that fire during _notifySubscribers() see
|
|
17
|
+
* this inconsistent state and crash.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const createThreadState = (
|
|
21
|
+
threadId: string,
|
|
22
|
+
status: "regular" | "archived" = "regular",
|
|
23
|
+
): RemoteThreadState => {
|
|
24
|
+
const mappingId = createThreadMappingId(threadId);
|
|
25
|
+
return {
|
|
26
|
+
isLoading: false,
|
|
27
|
+
newThreadId: undefined,
|
|
28
|
+
threadIds: status === "regular" ? [threadId] : [],
|
|
29
|
+
archivedThreadIds: status === "archived" ? [threadId] : [],
|
|
30
|
+
threadIdMap: { [threadId]: mappingId },
|
|
31
|
+
threadData: {
|
|
32
|
+
[mappingId]: {
|
|
33
|
+
id: threadId,
|
|
34
|
+
remoteId: threadId,
|
|
35
|
+
externalId: undefined,
|
|
36
|
+
status,
|
|
37
|
+
title: undefined,
|
|
38
|
+
initializeTask: Promise.resolve({
|
|
39
|
+
remoteId: threadId,
|
|
40
|
+
externalId: undefined,
|
|
41
|
+
}),
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
describe("OptimisticState delete crash (#3346)", () => {
|
|
48
|
+
it("optimistic callback runs synchronously before execute completes", async () => {
|
|
49
|
+
const state = new OptimisticState(createThreadState("thread-1"));
|
|
50
|
+
const events: string[] = [];
|
|
51
|
+
|
|
52
|
+
state.subscribe(() => {
|
|
53
|
+
events.push("subscriber-notified");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const executeStarted = vi.fn();
|
|
57
|
+
const executeCompleted = vi.fn();
|
|
58
|
+
|
|
59
|
+
const promise = state.optimisticUpdate({
|
|
60
|
+
execute: async () => {
|
|
61
|
+
executeStarted();
|
|
62
|
+
// simulate async work like _ensureThreadIsNotMain
|
|
63
|
+
await Promise.resolve();
|
|
64
|
+
executeCompleted();
|
|
65
|
+
},
|
|
66
|
+
optimistic: (s) => {
|
|
67
|
+
events.push("optimistic-ran");
|
|
68
|
+
return updateStatusReducer(s, "thread-1", "deleted");
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// After calling optimisticUpdate but before awaiting:
|
|
73
|
+
// - optimistic callback has already run (synchronous)
|
|
74
|
+
// - execute has started but not completed (async)
|
|
75
|
+
expect(events).toEqual(["optimistic-ran", "subscriber-notified"]);
|
|
76
|
+
expect(executeStarted).toHaveBeenCalled();
|
|
77
|
+
expect(executeCompleted).not.toHaveBeenCalled();
|
|
78
|
+
|
|
79
|
+
// Thread data is already gone from the optimistic value
|
|
80
|
+
expect(getThreadData(state.value, "thread-1")).toBeUndefined();
|
|
81
|
+
|
|
82
|
+
await promise;
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("BUG SCENARIO: subscriber sees deleted thread data while mainThreadId still references it", async () => {
|
|
86
|
+
const state = new OptimisticState(createThreadState("thread-1"));
|
|
87
|
+
|
|
88
|
+
// Simulate what happens in the real code:
|
|
89
|
+
// mainThreadId is external state that _ensureThreadIsNotMain would update
|
|
90
|
+
let mainThreadId = "thread-1";
|
|
91
|
+
let subscriberSawInconsistentState = false;
|
|
92
|
+
|
|
93
|
+
state.subscribe(() => {
|
|
94
|
+
// This fires synchronously during optimisticUpdate.
|
|
95
|
+
// In the real code, React components would re-render here and try to
|
|
96
|
+
// access the main thread's data.
|
|
97
|
+
const threadData = getThreadData(state.value, mainThreadId);
|
|
98
|
+
if (threadData === undefined && mainThreadId === "thread-1") {
|
|
99
|
+
// mainThreadId points to a deleted thread — this is the crash condition
|
|
100
|
+
subscriberSawInconsistentState = true;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// OLD CODE: _ensureThreadIsNotMain inside execute
|
|
105
|
+
// The optimistic callback deletes thread data BEFORE execute can update mainThreadId
|
|
106
|
+
const promise = state.optimisticUpdate({
|
|
107
|
+
execute: async () => {
|
|
108
|
+
// In old code, _ensureThreadIsNotMain was here.
|
|
109
|
+
// It would switch mainThreadId, but this runs AFTER optimistic callback
|
|
110
|
+
await Promise.resolve();
|
|
111
|
+
mainThreadId = "thread-2"; // too late — subscriber already fired
|
|
112
|
+
},
|
|
113
|
+
optimistic: (s) => {
|
|
114
|
+
return updateStatusReducer(s, "thread-1", "deleted");
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// The subscriber saw inconsistent state — mainThreadId points to deleted thread
|
|
119
|
+
expect(subscriberSawInconsistentState).toBe(true);
|
|
120
|
+
|
|
121
|
+
await promise;
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it("FIX: switching mainThreadId before optimisticUpdate prevents inconsistency", async () => {
|
|
125
|
+
const state = new OptimisticState(createThreadState("thread-1"));
|
|
126
|
+
|
|
127
|
+
let mainThreadId = "thread-1";
|
|
128
|
+
let subscriberSawInconsistentState = false;
|
|
129
|
+
|
|
130
|
+
state.subscribe(() => {
|
|
131
|
+
const threadData = getThreadData(state.value, mainThreadId);
|
|
132
|
+
if (threadData === undefined) {
|
|
133
|
+
subscriberSawInconsistentState = true;
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// FIX: _ensureThreadIsNotMain runs BEFORE optimisticUpdate.
|
|
138
|
+
// switchToNewThread() both creates the new thread in state AND updates mainThreadId.
|
|
139
|
+
const newThreadId = "thread-2";
|
|
140
|
+
const mappingId = createThreadMappingId(newThreadId);
|
|
141
|
+
const currentState = state.value;
|
|
142
|
+
state.update({
|
|
143
|
+
...currentState,
|
|
144
|
+
newThreadId: newThreadId,
|
|
145
|
+
threadIdMap: {
|
|
146
|
+
...currentState.threadIdMap,
|
|
147
|
+
[newThreadId]: mappingId,
|
|
148
|
+
},
|
|
149
|
+
threadData: {
|
|
150
|
+
...currentState.threadData,
|
|
151
|
+
[mappingId]: {
|
|
152
|
+
status: "new" as const,
|
|
153
|
+
id: newThreadId,
|
|
154
|
+
remoteId: undefined,
|
|
155
|
+
externalId: undefined,
|
|
156
|
+
title: undefined,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
mainThreadId = newThreadId;
|
|
161
|
+
|
|
162
|
+
// Reset flag — the state.update above triggered the subscriber
|
|
163
|
+
subscriberSawInconsistentState = false;
|
|
164
|
+
|
|
165
|
+
const promise = state.optimisticUpdate({
|
|
166
|
+
execute: async () => {
|
|
167
|
+
// _ensureThreadIsNotMain no longer here
|
|
168
|
+
return undefined;
|
|
169
|
+
},
|
|
170
|
+
optimistic: (s) => {
|
|
171
|
+
return updateStatusReducer(s, "thread-1", "deleted");
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
// mainThreadId was already switched to thread-2 which exists in state
|
|
176
|
+
// — subscriber sees consistent state, no crash
|
|
177
|
+
expect(subscriberSawInconsistentState).toBe(false);
|
|
178
|
+
|
|
179
|
+
await promise;
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it("archive does NOT remove threadData (no crash even without fix)", async () => {
|
|
183
|
+
const state = new OptimisticState(createThreadState("thread-1"));
|
|
184
|
+
|
|
185
|
+
let threadDataMissingDuringNotify = false;
|
|
186
|
+
|
|
187
|
+
state.subscribe(() => {
|
|
188
|
+
const threadData = getThreadData(state.value, "thread-1");
|
|
189
|
+
if (threadData === undefined) {
|
|
190
|
+
threadDataMissingDuringNotify = true;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
await state.optimisticUpdate({
|
|
195
|
+
execute: async () => undefined,
|
|
196
|
+
optimistic: (s) => {
|
|
197
|
+
return updateStatusReducer(s, "thread-1", "archived");
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
// Archive keeps threadData — no SKIP_UPDATE, no crash
|
|
202
|
+
expect(threadDataMissingDuringNotify).toBe(false);
|
|
203
|
+
expect(getThreadData(state.value, "thread-1")).toBeDefined();
|
|
204
|
+
expect(getThreadData(state.value, "thread-1")?.status).toBe("archived");
|
|
205
|
+
});
|
|
206
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ThreadUserMessagePart } from "./message";
|
|
2
|
+
|
|
3
|
+
export type PendingAttachmentStatus =
|
|
4
|
+
| {
|
|
5
|
+
type: "running";
|
|
6
|
+
reason: "uploading";
|
|
7
|
+
progress: number;
|
|
8
|
+
}
|
|
9
|
+
| {
|
|
10
|
+
type: "requires-action";
|
|
11
|
+
reason: "composer-send";
|
|
12
|
+
}
|
|
13
|
+
| {
|
|
14
|
+
type: "incomplete";
|
|
15
|
+
reason: "error" | "upload-paused";
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type CompleteAttachmentStatus = {
|
|
19
|
+
type: "complete";
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export type AttachmentStatus =
|
|
23
|
+
| PendingAttachmentStatus
|
|
24
|
+
| CompleteAttachmentStatus;
|
|
25
|
+
|
|
26
|
+
type BaseAttachment = {
|
|
27
|
+
id: string;
|
|
28
|
+
type: "image" | "document" | "file";
|
|
29
|
+
name: string;
|
|
30
|
+
contentType: string;
|
|
31
|
+
file?: File;
|
|
32
|
+
content?: ThreadUserMessagePart[];
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export type PendingAttachment = BaseAttachment & {
|
|
36
|
+
status: PendingAttachmentStatus;
|
|
37
|
+
file: File;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type CompleteAttachment = BaseAttachment & {
|
|
41
|
+
status: CompleteAttachmentStatus;
|
|
42
|
+
content: ThreadUserMessagePart[];
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type Attachment = PendingAttachment | CompleteAttachment;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
// Message parts
|
|
3
|
+
TextMessagePart,
|
|
4
|
+
ReasoningMessagePart,
|
|
5
|
+
SourceMessagePart,
|
|
6
|
+
ImageMessagePart,
|
|
7
|
+
FileMessagePart,
|
|
8
|
+
DataMessagePart,
|
|
9
|
+
Unstable_AudioMessagePart,
|
|
10
|
+
ToolCallMessagePart,
|
|
11
|
+
ThreadUserMessagePart,
|
|
12
|
+
ThreadAssistantMessagePart,
|
|
13
|
+
// Message status
|
|
14
|
+
MessagePartStatus,
|
|
15
|
+
ToolCallMessagePartStatus,
|
|
16
|
+
MessageStatus,
|
|
17
|
+
// Thread messages
|
|
18
|
+
MessageTiming,
|
|
19
|
+
ThreadStep,
|
|
20
|
+
ThreadSystemMessage,
|
|
21
|
+
ThreadUserMessage,
|
|
22
|
+
ThreadAssistantMessage,
|
|
23
|
+
ThreadMessage,
|
|
24
|
+
MessageRole,
|
|
25
|
+
// Config
|
|
26
|
+
RunConfig,
|
|
27
|
+
AppendMessage,
|
|
28
|
+
} from "./message";
|
|
29
|
+
|
|
30
|
+
export type {
|
|
31
|
+
Attachment,
|
|
32
|
+
PendingAttachment,
|
|
33
|
+
CompleteAttachment,
|
|
34
|
+
AttachmentStatus,
|
|
35
|
+
} from "./attachment";
|
|
36
|
+
|
|
37
|
+
export type { Unsubscribe } from "./unsubscribe";
|
|
38
|
+
|
|
39
|
+
export type { QuoteInfo } from "./quote";
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ReadonlyJSONObject,
|
|
3
|
+
ReadonlyJSONValue,
|
|
4
|
+
} from "assistant-stream/utils";
|
|
5
|
+
import type { CompleteAttachment } from "./attachment";
|
|
6
|
+
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// Message Parts
|
|
9
|
+
// =============================================================================
|
|
10
|
+
|
|
11
|
+
export type TextMessagePart = {
|
|
12
|
+
readonly type: "text";
|
|
13
|
+
readonly text: string;
|
|
14
|
+
readonly parentId?: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type ReasoningMessagePart = {
|
|
18
|
+
readonly type: "reasoning";
|
|
19
|
+
readonly text: string;
|
|
20
|
+
readonly parentId?: string;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type SourceMessagePart = {
|
|
24
|
+
readonly type: "source";
|
|
25
|
+
readonly sourceType: "url";
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly url: string;
|
|
28
|
+
readonly title?: string;
|
|
29
|
+
readonly parentId?: string;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type ImageMessagePart = {
|
|
33
|
+
readonly type: "image";
|
|
34
|
+
readonly image: string;
|
|
35
|
+
readonly filename?: string;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export type FileMessagePart = {
|
|
39
|
+
readonly type: "file";
|
|
40
|
+
readonly filename?: string;
|
|
41
|
+
readonly data: string;
|
|
42
|
+
readonly mimeType: string;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type Unstable_AudioMessagePart = {
|
|
46
|
+
readonly type: "audio";
|
|
47
|
+
readonly audio: {
|
|
48
|
+
readonly data: string;
|
|
49
|
+
readonly format: "mp3" | "wav";
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export type DataMessagePart<T = any> = {
|
|
54
|
+
readonly type: "data";
|
|
55
|
+
readonly name: string;
|
|
56
|
+
readonly data: T;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export type ToolCallMessagePart<
|
|
60
|
+
TArgs = ReadonlyJSONObject,
|
|
61
|
+
TResult = unknown,
|
|
62
|
+
> = {
|
|
63
|
+
readonly type: "tool-call";
|
|
64
|
+
readonly toolCallId: string;
|
|
65
|
+
readonly toolName: string;
|
|
66
|
+
readonly args: TArgs;
|
|
67
|
+
readonly result?: TResult | undefined;
|
|
68
|
+
readonly isError?: boolean | undefined;
|
|
69
|
+
readonly argsText: string;
|
|
70
|
+
readonly artifact?: unknown;
|
|
71
|
+
readonly interrupt?: { type: "human"; payload: unknown };
|
|
72
|
+
readonly parentId?: string;
|
|
73
|
+
readonly messages?: readonly ThreadMessage[];
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export type ThreadUserMessagePart =
|
|
77
|
+
| TextMessagePart
|
|
78
|
+
| ImageMessagePart
|
|
79
|
+
| FileMessagePart
|
|
80
|
+
| DataMessagePart
|
|
81
|
+
| Unstable_AudioMessagePart;
|
|
82
|
+
|
|
83
|
+
export type ThreadAssistantMessagePart =
|
|
84
|
+
| TextMessagePart
|
|
85
|
+
| ReasoningMessagePart
|
|
86
|
+
| ToolCallMessagePart
|
|
87
|
+
| SourceMessagePart
|
|
88
|
+
| FileMessagePart
|
|
89
|
+
| ImageMessagePart
|
|
90
|
+
| DataMessagePart;
|
|
91
|
+
|
|
92
|
+
// =============================================================================
|
|
93
|
+
// Message Status
|
|
94
|
+
// =============================================================================
|
|
95
|
+
|
|
96
|
+
export type MessagePartStatus =
|
|
97
|
+
| {
|
|
98
|
+
readonly type: "running";
|
|
99
|
+
}
|
|
100
|
+
| {
|
|
101
|
+
readonly type: "complete";
|
|
102
|
+
}
|
|
103
|
+
| {
|
|
104
|
+
readonly type: "incomplete";
|
|
105
|
+
readonly reason:
|
|
106
|
+
| "cancelled"
|
|
107
|
+
| "length"
|
|
108
|
+
| "content-filter"
|
|
109
|
+
| "other"
|
|
110
|
+
| "error";
|
|
111
|
+
readonly error?: unknown;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export type ToolCallMessagePartStatus =
|
|
115
|
+
| {
|
|
116
|
+
readonly type: "requires-action";
|
|
117
|
+
readonly reason: "interrupt";
|
|
118
|
+
}
|
|
119
|
+
| MessagePartStatus;
|
|
120
|
+
|
|
121
|
+
export type MessageStatus =
|
|
122
|
+
| {
|
|
123
|
+
readonly type: "running";
|
|
124
|
+
}
|
|
125
|
+
| {
|
|
126
|
+
readonly type: "requires-action";
|
|
127
|
+
readonly reason: "tool-calls" | "interrupt";
|
|
128
|
+
}
|
|
129
|
+
| {
|
|
130
|
+
readonly type: "complete";
|
|
131
|
+
readonly reason: "stop" | "unknown";
|
|
132
|
+
}
|
|
133
|
+
| {
|
|
134
|
+
readonly type: "incomplete";
|
|
135
|
+
readonly reason:
|
|
136
|
+
| "cancelled"
|
|
137
|
+
| "tool-calls"
|
|
138
|
+
| "length"
|
|
139
|
+
| "content-filter"
|
|
140
|
+
| "other"
|
|
141
|
+
| "error";
|
|
142
|
+
readonly error?: ReadonlyJSONValue;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
// =============================================================================
|
|
146
|
+
// Thread Messages
|
|
147
|
+
// =============================================================================
|
|
148
|
+
|
|
149
|
+
export type MessageTiming = {
|
|
150
|
+
readonly streamStartTime: number;
|
|
151
|
+
readonly firstTokenTime?: number;
|
|
152
|
+
readonly totalStreamTime?: number;
|
|
153
|
+
readonly tokenCount?: number;
|
|
154
|
+
readonly tokensPerSecond?: number;
|
|
155
|
+
readonly totalChunks: number;
|
|
156
|
+
readonly toolCallCount: number;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
export type ThreadStep = {
|
|
160
|
+
readonly messageId?: string;
|
|
161
|
+
readonly usage?:
|
|
162
|
+
| {
|
|
163
|
+
readonly inputTokens: number;
|
|
164
|
+
readonly outputTokens: number;
|
|
165
|
+
}
|
|
166
|
+
| undefined;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
type MessageCommonProps = {
|
|
170
|
+
readonly id: string;
|
|
171
|
+
readonly createdAt: Date;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export type ThreadSystemMessage = MessageCommonProps & {
|
|
175
|
+
readonly role: "system";
|
|
176
|
+
readonly content: readonly [TextMessagePart];
|
|
177
|
+
readonly metadata: {
|
|
178
|
+
readonly unstable_state?: undefined;
|
|
179
|
+
readonly unstable_annotations?: undefined;
|
|
180
|
+
readonly unstable_data?: undefined;
|
|
181
|
+
readonly steps?: undefined;
|
|
182
|
+
readonly submittedFeedback?: undefined;
|
|
183
|
+
readonly timing?: undefined;
|
|
184
|
+
readonly custom: Record<string, unknown>;
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
export type ThreadUserMessage = MessageCommonProps & {
|
|
189
|
+
readonly role: "user";
|
|
190
|
+
readonly content: readonly ThreadUserMessagePart[];
|
|
191
|
+
readonly attachments: readonly CompleteAttachment[];
|
|
192
|
+
readonly metadata: {
|
|
193
|
+
readonly unstable_state?: undefined;
|
|
194
|
+
readonly unstable_annotations?: undefined;
|
|
195
|
+
readonly unstable_data?: undefined;
|
|
196
|
+
readonly steps?: undefined;
|
|
197
|
+
readonly submittedFeedback?: undefined;
|
|
198
|
+
readonly timing?: undefined;
|
|
199
|
+
readonly custom: Record<string, unknown>;
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
export type ThreadAssistantMessage = MessageCommonProps & {
|
|
204
|
+
readonly role: "assistant";
|
|
205
|
+
readonly content: readonly ThreadAssistantMessagePart[];
|
|
206
|
+
readonly status: MessageStatus;
|
|
207
|
+
readonly metadata: {
|
|
208
|
+
readonly unstable_state: ReadonlyJSONValue;
|
|
209
|
+
readonly unstable_annotations: readonly ReadonlyJSONValue[];
|
|
210
|
+
readonly unstable_data: readonly ReadonlyJSONValue[];
|
|
211
|
+
readonly steps: readonly ThreadStep[];
|
|
212
|
+
readonly submittedFeedback?: { readonly type: "positive" | "negative" };
|
|
213
|
+
readonly timing?: MessageTiming;
|
|
214
|
+
readonly custom: Record<string, unknown>;
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
type BaseThreadMessage = {
|
|
219
|
+
readonly status?: ThreadAssistantMessage["status"];
|
|
220
|
+
readonly metadata: {
|
|
221
|
+
readonly unstable_state?: ReadonlyJSONValue;
|
|
222
|
+
readonly unstable_annotations?: readonly ReadonlyJSONValue[];
|
|
223
|
+
readonly unstable_data?: readonly ReadonlyJSONValue[];
|
|
224
|
+
readonly steps?: readonly ThreadStep[];
|
|
225
|
+
readonly submittedFeedback?: { readonly type: "positive" | "negative" };
|
|
226
|
+
readonly timing?: MessageTiming;
|
|
227
|
+
readonly custom: Record<string, unknown>;
|
|
228
|
+
};
|
|
229
|
+
readonly attachments?: ThreadUserMessage["attachments"];
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export type ThreadMessage = BaseThreadMessage &
|
|
233
|
+
(ThreadSystemMessage | ThreadUserMessage | ThreadAssistantMessage);
|
|
234
|
+
|
|
235
|
+
export type MessageRole = ThreadMessage["role"];
|
|
236
|
+
|
|
237
|
+
export type RunConfig = {
|
|
238
|
+
readonly custom?: Record<string, unknown>;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
export type AppendMessage = Omit<ThreadMessage, "id"> & {
|
|
242
|
+
parentId: string | null;
|
|
243
|
+
|
|
244
|
+
/** The ID of the message that was edited or undefined. */
|
|
245
|
+
sourceId: string | null;
|
|
246
|
+
runConfig: RunConfig | undefined;
|
|
247
|
+
startRun?: boolean | undefined;
|
|
248
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Unsubscribe = () => void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ModelContextProvider,
|
|
3
|
+
mergeModelContexts,
|
|
4
|
+
} from "../model-context";
|
|
5
|
+
|
|
6
|
+
export class CompositeContextProvider implements ModelContextProvider {
|
|
7
|
+
private _providers = new Set<ModelContextProvider>();
|
|
8
|
+
|
|
9
|
+
getModelContext() {
|
|
10
|
+
return mergeModelContexts(this._providers);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
registerModelContextProvider(provider: ModelContextProvider) {
|
|
14
|
+
this._providers.add(provider);
|
|
15
|
+
const unsubscribe = provider.subscribe?.(() => {
|
|
16
|
+
this.notifySubscribers();
|
|
17
|
+
});
|
|
18
|
+
this.notifySubscribers();
|
|
19
|
+
return () => {
|
|
20
|
+
this._providers.delete(provider);
|
|
21
|
+
unsubscribe?.();
|
|
22
|
+
this.notifySubscribers();
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private _subscribers = new Set<() => void>();
|
|
27
|
+
|
|
28
|
+
notifySubscribers() {
|
|
29
|
+
for (const callback of this._subscribers) callback();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
subscribe(callback: () => void) {
|
|
33
|
+
this._subscribers.add(callback);
|
|
34
|
+
return () => this._subscribers.delete(callback);
|
|
35
|
+
}
|
|
36
|
+
}
|
package/src/utils/id.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { customAlphabet } from "nanoid/non-secure";
|
|
2
|
+
|
|
3
|
+
export const generateId = customAlphabet(
|
|
4
|
+
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
|
|
5
|
+
7,
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
const optimisticPrefix = "__optimistic__";
|
|
9
|
+
export const generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
|
|
10
|
+
export const isOptimisticId = (id: string) => id.startsWith(optimisticPrefix);
|
|
11
|
+
|
|
12
|
+
const errorPrefix = "__error__";
|
|
13
|
+
export const generateErrorMessageId = () => `${errorPrefix}${generateId()}`;
|
|
14
|
+
export const isErrorMessageId = (id: string) => id.startsWith(errorPrefix);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ID generation
|
|
2
|
+
export {
|
|
3
|
+
generateId,
|
|
4
|
+
generateOptimisticId,
|
|
5
|
+
isOptimisticId,
|
|
6
|
+
generateErrorMessageId,
|
|
7
|
+
isErrorMessageId,
|
|
8
|
+
} from "./id";
|
|
9
|
+
|
|
10
|
+
// Message utilities
|
|
11
|
+
export { getThreadMessageText } from "./text";
|
|
12
|
+
|
|
13
|
+
// Composite context provider
|
|
14
|
+
export { CompositeContextProvider } from "./composite-context-provider";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AppendMessage, TextMessagePart, ThreadMessage } from "../types";
|
|
2
|
+
|
|
3
|
+
export const getThreadMessageText = (
|
|
4
|
+
message: ThreadMessage | AppendMessage,
|
|
5
|
+
) => {
|
|
6
|
+
const textParts = message.content.filter(
|
|
7
|
+
(part) => part.type === "text",
|
|
8
|
+
) as TextMessagePart[];
|
|
9
|
+
|
|
10
|
+
return textParts.map((part) => part.text).join("\n\n");
|
|
11
|
+
};
|