@assistant-ui/core 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -2
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/duplicate-detection.d.ts +5 -0
- package/dist/internal/duplicate-detection.d.ts.map +1 -0
- package/dist/internal/duplicate-detection.js +11 -0
- package/dist/internal/duplicate-detection.js.map +1 -0
- package/dist/react/AssistantProvider.d.ts.map +1 -1
- package/dist/react/AssistantProvider.js.map +1 -1
- package/dist/react/index.d.ts +3 -2
- package/dist/react/index.js +2 -2
- package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +25 -21
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +6 -7
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +2 -1
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +9 -4
- package/dist/react/primitives/message/MessageParts.js.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
- package/dist/react/providers/TextMessagePartProvider.js +3 -0
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +3 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts +1 -1
- package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
- package/dist/react/runtimes/external-message-converter.js +7 -3
- package/dist/react/runtimes/external-message-converter.js.map +1 -1
- package/dist/react/types/MessagePartComponentTypes.d.ts +8 -0
- package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
- package/dist/react/utils/groupParts.d.ts +40 -12
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/groupParts.js +51 -9
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
- package/dist/runtime/api/attachment-runtime.js.map +1 -1
- package/dist/runtime/api/message-part-runtime.d.ts +8 -0
- package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-part-runtime.js +13 -0
- package/dist/runtime/api/message-part-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +2 -1
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +2 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +15 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtime/utils/thread-message-like.d.ts +10 -0
- 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/external-store/external-store-adapter.d.ts +33 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +27 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js +98 -3
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +2 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +3 -0
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +3 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/empty-thread-core.js +3 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +168 -0
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -0
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +449 -0
- package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -0
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +3 -0
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.js +1 -0
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
- package/dist/store/scopes/part.d.ts +7 -0
- package/dist/store/scopes/part.d.ts.map +1 -1
- package/dist/subscribable/subscribable.d.ts.map +1 -1
- package/dist/subscribable/subscribable.js.map +1 -1
- package/dist/types/message.d.ts +6 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js.map +1 -1
- package/package.json +4 -4
- package/src/adapters/index.ts +1 -4
- package/src/index.ts +11 -0
- package/src/internal/duplicate-detection.ts +26 -0
- package/src/react/AssistantProvider.tsx +2 -3
- package/src/react/index.ts +2 -6
- package/src/react/primitives/chainOfThought/ChainOfThoughtParts.tsx +1 -2
- package/src/react/primitives/message/MessageAttachments.test.tsx +1 -1
- package/src/react/primitives/message/MessageGroupedParts.tsx +38 -31
- package/src/react/primitives/message/MessageParts.tsx +14 -1
- package/src/react/providers/TextMessagePartProvider.tsx +3 -0
- package/src/react/runtimes/external-message-converter.ts +26 -13
- package/src/react/types/MessagePartComponentTypes.ts +8 -0
- package/src/react/utils/groupParts.ts +67 -22
- package/src/runtime/api/attachment-runtime.ts +1 -2
- package/src/runtime/api/message-part-runtime.ts +26 -0
- package/src/runtime/base/base-thread-runtime-core.ts +4 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +15 -0
- package/src/runtime/internal.ts +1 -4
- package/src/runtime/utils/thread-message-like.ts +7 -0
- package/src/runtimes/external-store/external-store-adapter.ts +37 -0
- package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +1 -3
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +168 -4
- package/src/runtimes/local/local-thread-runtime-core.ts +5 -0
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +4 -0
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +4 -0
- package/src/runtimes/tool-invocations/EDGE_CASES.md +194 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +1054 -0
- package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +783 -0
- package/src/store/clients/thread-message-client.ts +3 -0
- package/src/store/runtime-clients/message-part-runtime-client.ts +2 -0
- package/src/store/scopes/part.ts +4 -0
- package/src/subscribable/subscribable.ts +3 -3
- package/src/tests/OptimisticState-delete-crash.test.ts +2 -0
- package/src/tests/OptimisticState-list-race.test.ts +2 -0
- package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +5 -5
- package/src/tests/auiV0Encode.test.ts +1 -1
- package/src/tests/composer-can-send.test.ts +8 -4
- package/src/tests/duplicate-detection.test.ts +34 -0
- package/src/tests/external-store-thread-list-runtime-core.test.ts +1 -1
- package/src/tests/external-store-thread-runtime-core.test.ts +7 -6
- package/src/tests/groupParts.test.ts +118 -32
- package/src/tests/no-unsafe-process-env.test.ts +1 -0
- package/src/tests/remote-thread-list-isLoading.test.ts +2 -0
- package/src/tests/thread-message-like.test.ts +4 -1
- package/src/types/index.ts +1 -4
- package/src/types/message.ts +7 -0
- package/dist/react/runtimes/useToolInvocations.d.ts +0 -53
- package/dist/react/runtimes/useToolInvocations.d.ts.map +0 -1
- package/dist/react/runtimes/useToolInvocations.js +0 -380
- package/dist/react/runtimes/useToolInvocations.js.map +0 -1
- package/src/react/runtimes/useToolInvocations.ts +0 -694
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadonlyThreadRuntimeCore.d.ts","names":[],"sources":["../../../src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts"],"mappings":";;;;;;cASa,yBAAA,SACH,gBAAA,YACG,iBAAA;EAAA,QAEH,SAAA;EAAA,IAEJ,QAAA,CAAA,YAAQ,aAAA;EAIZ,WAAA,CAAY,QAAA,WAAmB,aAAA;EAM/B,cAAA,CAAe,SAAA;;;;;EAUf,WAAA,CAAY,SAAA;EAMZ,cAAA,CAAA;EAIA,MAAA,CAAA;EAIA,QAAA,CAAA;EAIA,SAAA,CAAA;EAIA,SAAA,CAAA;EAEA,aAAA,CAAA;EAIA,cAAA,CAAA;EAIA,KAAA,CAAA;EAIA,YAAA,CAAA;EAEA,YAAA,CAAA;EAIA,eAAA,CAAA;EAEA,cAAA;EACA,oBAAA,QAA2B,WAAA;EAE3B,SAAA,CAAA;EAIA,WAAA,CAAA;EAIA,cAAA,CAAA;EAIA,eAAA,CAAA;EAIA,mBAAA,CAAA;EAIA,mBAAA,CAAA;EAIA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EA,eAAA,CAAA;EAIA,SAAA,CAAA;EAIA,MAAA;EACA,KAAA;EAEA,YAAA;IAAA;;;;;;;;;;;;;EAeA,UAAA;EACA,cAAA;EACA,SAAA;EAEA,KAAA;EACA,WAAA;EACA,MAAA;EAEA,MAAA,CAAA;EAIA,MAAA,CAAA;;;;;;EASA,KAAA,CAAA;EAIA,WAAA,CAAA,GAAe,WAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"ReadonlyThreadRuntimeCore.d.ts","names":[],"sources":["../../../src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts"],"mappings":";;;;;;cASa,yBAAA,SACH,gBAAA,YACG,iBAAA;EAAA,QAEH,SAAA;EAAA,IAEJ,QAAA,CAAA,YAAQ,aAAA;EAIZ,WAAA,CAAY,QAAA,WAAmB,aAAA;EAM/B,cAAA,CAAe,SAAA;;;;;EAUf,WAAA,CAAY,SAAA;EAMZ,cAAA,CAAA;EAIA,MAAA,CAAA;EAIA,QAAA,CAAA;EAIA,SAAA,CAAA;EAIA,SAAA,CAAA;EAEA,aAAA,CAAA;EAIA,cAAA,CAAA;EAIA,qBAAA,CAAA;EAIA,KAAA,CAAA;EAIA,YAAA,CAAA;EAEA,YAAA,CAAA;EAIA,eAAA,CAAA;EAEA,cAAA;EACA,oBAAA,QAA2B,WAAA;EAE3B,SAAA,CAAA;EAIA,WAAA,CAAA;EAIA,cAAA,CAAA;EAIA,eAAA,CAAA;EAIA,mBAAA,CAAA;EAIA,mBAAA,CAAA;EAIA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EA,eAAA,CAAA;EAIA,SAAA,CAAA;EAIA,MAAA;EACA,KAAA;EAEA,YAAA;IAAA;;;;;;;;;;;;;EAeA,UAAA;EACA,cAAA;EACA,SAAA;EAEA,KAAA;EACA,WAAA;EACA,MAAA;EAEA,MAAA,CAAA;EAIA,MAAA,CAAA;;;;;;EASA,KAAA,CAAA;EAIA,WAAA,CAAA,GAAe,WAAA;AAAA"}
|
|
@@ -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 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 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 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 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,MAAM,wCAAwB,IAAI,MAChC,8EACF;AAEA,IAAa,4BAAb,cACU,iBAEV;CACE,YAA8C,CAAC;CAE/C,IAAI,WAAW;EACb,OAAO,KAAK;CACd;CAEA,YAAY,UAAoC;EAC9C,IAAI,KAAK,cAAc,UAAU;EACjC,KAAK,YAAY;EACjB,KAAK,mBAAmB;CAC1B;CAEA,eAAe,WAAmB;EAChC,MAAM,MAAM,KAAK,UAAU,WAAW,MAAM,EAAE,OAAO,SAAS;EAC9D,IAAI,QAAQ,IAAI,OAAO,KAAA;EACvB,OAAO;GACL,UAAU,KAAK,UAAU,MAAM,IAAI,MAAM;GACzC,SAAS,KAAK,UAAU;GACxB,OAAO;EACT;CACF;CAEA,YAAY,WAAmB;EAE7B,IADY,KAAK,UAAU,WAAW,MAAM,EAAE,OAAO,SAC/C,MAAM,IAAI,OAAO,CAAC;EACxB,OAAO,CAAC,SAAS;CACnB;CAEA,iBAAuB;EACrB,MAAM;CACR;CAEA,SAAe;EACb,MAAM;CACR;CAEA,WAAiB;EACf,MAAM;CACR;CAEA,YAAkB;EAChB,MAAM;CACR;CAEA,YAAkB,CAAC;CAEnB,gBAAsB;EACpB,MAAM;CACR;CAEA,iBAAuB;EACrB,MAAM;CACR;CAEA,QAAc;EACZ,MAAM;CACR;CAEA,eAAqB,CAAC;CAEtB,eAAqB;EACnB,MAAM;CACR;CAEA,kBAAwB,CAAC;CAEzB,uBAAuB;CACvB,mCAAgD,CAAC;CAEjD,YAAkB;EAChB,MAAM;CACR;CAEA,cAAoB;EAClB,MAAM;CACR;CAEA,iBAAuB;EACrB,MAAM;CACR;CAEA,kBAAkB;EAChB,OAAO,CAAC;CACV;CAEA,sBAAsB;EACpB,MAAM;CACR;CAEA,sBAA4B;EAC1B,MAAM;CACR;CAEA,WAAW;EACT,aAAa,CAAC;EACd,kBAAkB;EAElB,MAAM,gBAAgB;GACpB,MAAM;EACR;EAEA,MAAM,mBAAmB;GACvB,MAAM;EACR;EAEA,WAAW;EACX,WAAW;EACX,SAAS;EACT,SAAS;EACT,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,WAAW,CAAC;EAEZ,eAAe;GACb,MAAM;EACR;EAEA,MAAM,QAAQ,CAEd;EAEA,MAAM,mBAAmB,CAEzB;EAEA,OAAO;GACL,MAAM;EACR;EAEA,SAAS,CAET;EAEA,WAAW,KAAA;EAEX,iBAAiB;GACf,MAAM;EACR;EAEA,gBAAgB,CAEhB;EAEA,OAAO,KAAA;EAEP,WAAW;GACT,MAAM;EACR;EAEA,YAAY;GACV,aAAa,CAAC;EAChB;EAEA,cAAc;GACZ,aAAa,CAAC;EAChB;CACF;CAEA,kBAAkB,CAElB;CAEA,YAAkB;EAChB,MAAM;CACR;CAEA,SAAS,KAAA;CACT,QAAQ,KAAA;CAER,eAAe;EACb,gBAAgB;EAChB,uBAAuB;EACvB,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,QAAQ;EACR,WAAW;EACX,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;CACT;CAEA,aAAa;CACb,iBAAiB;CACjB,YAAY;CAEZ,QAAQ;CACR,cAAc,CAAC;CACf,SAAS,KAAA;CAET,SAAe;EACb,MAAM;CACR;CAEA,SAAS;EACP,OAAO,EACL,UAAU,KAAK,UAAU,KAAK,SAAS,SAAS;GAC9C;GACA,UAAU,KAAK,UAAU,MAAM,IAAI,MAAM;EAC3C,EAAE,EACJ;CACF;CAEA,QAAc;EACZ,MAAM;CACR;CAEA,cAA2B;EACzB,aAAa,CAAC;CAChB;AACF"}
|
|
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 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 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 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,MAAM,wCAAwB,IAAI,MAChC,8EACF;AAEA,IAAa,4BAAb,cACU,iBAEV;CACE,YAA8C,CAAC;CAE/C,IAAI,WAAW;EACb,OAAO,KAAK;CACd;CAEA,YAAY,UAAoC;EAC9C,IAAI,KAAK,cAAc,UAAU;EACjC,KAAK,YAAY;EACjB,KAAK,mBAAmB;CAC1B;CAEA,eAAe,WAAmB;EAChC,MAAM,MAAM,KAAK,UAAU,WAAW,MAAM,EAAE,OAAO,SAAS;EAC9D,IAAI,QAAQ,IAAI,OAAO,KAAA;EACvB,OAAO;GACL,UAAU,KAAK,UAAU,MAAM,IAAI,MAAM;GACzC,SAAS,KAAK,UAAU;GACxB,OAAO;EACT;CACF;CAEA,YAAY,WAAmB;EAE7B,IADY,KAAK,UAAU,WAAW,MAAM,EAAE,OAAO,SAC/C,MAAM,IAAI,OAAO,CAAC;EACxB,OAAO,CAAC,SAAS;CACnB;CAEA,iBAAuB;EACrB,MAAM;CACR;CAEA,SAAe;EACb,MAAM;CACR;CAEA,WAAiB;EACf,MAAM;CACR;CAEA,YAAkB;EAChB,MAAM;CACR;CAEA,YAAkB,CAAC;CAEnB,gBAAsB;EACpB,MAAM;CACR;CAEA,iBAAuB;EACrB,MAAM;CACR;CAEA,wBAA8B;EAC5B,MAAM;CACR;CAEA,QAAc;EACZ,MAAM;CACR;CAEA,eAAqB,CAAC;CAEtB,eAAqB;EACnB,MAAM;CACR;CAEA,kBAAwB,CAAC;CAEzB,uBAAuB;CACvB,mCAAgD,CAAC;CAEjD,YAAkB;EAChB,MAAM;CACR;CAEA,cAAoB;EAClB,MAAM;CACR;CAEA,iBAAuB;EACrB,MAAM;CACR;CAEA,kBAAkB;EAChB,OAAO,CAAC;CACV;CAEA,sBAAsB;EACpB,MAAM;CACR;CAEA,sBAA4B;EAC1B,MAAM;CACR;CAEA,WAAW;EACT,aAAa,CAAC;EACd,kBAAkB;EAElB,MAAM,gBAAgB;GACpB,MAAM;EACR;EAEA,MAAM,mBAAmB;GACvB,MAAM;EACR;EAEA,WAAW;EACX,WAAW;EACX,SAAS;EACT,SAAS;EACT,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,WAAW,CAAC;EAEZ,eAAe;GACb,MAAM;EACR;EAEA,MAAM,QAAQ,CAEd;EAEA,MAAM,mBAAmB,CAEzB;EAEA,OAAO;GACL,MAAM;EACR;EAEA,SAAS,CAET;EAEA,WAAW,KAAA;EAEX,iBAAiB;GACf,MAAM;EACR;EAEA,gBAAgB,CAEhB;EAEA,OAAO,KAAA;EAEP,WAAW;GACT,MAAM;EACR;EAEA,YAAY;GACV,aAAa,CAAC;EAChB;EAEA,cAAc;GACZ,aAAa,CAAC;EAChB;CACF;CAEA,kBAAkB,CAElB;CAEA,YAAkB;EAChB,MAAM;CACR;CAEA,SAAS,KAAA;CACT,QAAQ,KAAA;CAER,eAAe;EACb,gBAAgB;EAChB,uBAAuB;EACvB,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,QAAQ;EACR,WAAW;EACX,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;CACT;CAEA,aAAa;CACb,iBAAiB;CACjB,YAAY;CAEZ,QAAQ;CACR,cAAc,CAAC;CACf,SAAS,KAAA;CAET,SAAe;EACb,MAAM;CACR;CAEA,SAAS;EACP,OAAO,EACL,UAAU,KAAK,UAAU,KAAK,SAAS,SAAS;GAC9C;GACA,UAAU,KAAK,UAAU,MAAM,IAAI,MAAM;EAC3C,EAAE,EACJ;CACF;CAEA,QAAc;EACZ,MAAM;CACR;CAEA,cAA2B;EACzB,aAAa,CAAC;CAChB;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty-thread-core.d.ts","names":[],"sources":["../../../src/runtimes/remote-thread-list/empty-thread-core.ts"],"mappings":";;;cAKa,iBAAA,EAAmB,
|
|
1
|
+
{"version":3,"file":"empty-thread-core.d.ts","names":[],"sources":["../../../src/runtimes/remote-thread-list/empty-thread-core.ts"],"mappings":";;;cAKa,iBAAA,EAAmB,iBA0N/B"}
|
|
@@ -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 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 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 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 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,MAAM,qCAAqB,IAAI,MAC7B,mQACF;AACA,MAAa,oBAAuC;CAClD,iBAAiB,CAEjB;CAEA,cAAc;EACZ,OAAO,CAAC;CACV;CAEA,iBAAiB;EACf,MAAM;CACR;CAEA,SAAS;EACP,MAAM;CACR;CAEA,WAAW;EACT,MAAM;CACR;CAEA,YAAY;EACV,MAAM;CACR;CAEA,YAAY;EACV,MAAM;CACR;CAEA,gBAAgB;EACd,MAAM;CACR;CAEA,iBAAiB;EACf,MAAM;CACR;CAEA,QAAQ;EACN,MAAM;CACR;CAEA,eAAe;EACb,MAAM;CACR;CAEA,eAAe;EACb,MAAM;CACR;CAEA,kBAAkB;EAChB,MAAM;CACR;CAEA,sBAAsB;CACtB,kCAAkC,CAAC;CAEnC,YAAY;EACV,MAAM;CACR;CAEA,cAAc;EACZ,MAAM;CACR;CAEA,iBAAiB;EACf,MAAM;CACR;CAEA,kBAAkB;EAChB,OAAO,CAAC;CACV;CAEA,sBAAsB;EACpB,MAAM;CACR;CAEA,sBAAsB;EACpB,MAAM;CACR;CAEA,UAAU;EACR,aAAa,CAAC;EACd,kBAAkB;EAElB,MAAM,gBAAgB;GACpB,MAAM;EACR;EAEA,MAAM,mBAAmB;GACvB,MAAM;EACR;EAEA,WAAW;EAEX,WAAW;EACX,SAAS;EACT,SAAS;EAET,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,WAAW,CAAC;EAEZ,eAAe;GACb,MAAM;EACR;EAEA,MAAM,QAAQ,CAEd;EAEA,MAAM,mBAAmB,CAEzB;EAEA,OAAO;GACL,MAAM;EACR;EAEA,SAAS,CAET;EAEA,WAAW,KAAA;EAEX,iBAAiB;GACf,MAAM;EACR;EAEA,gBAAgB,CAEhB;EAEA,OAAO,KAAA;EAEP,WAAW;GACT,MAAM;EACR;EAEA,YAAY;GACV,aAAa,CAAC;EAChB;EAEA,cAAc;GACZ,aAAa,CAAC;EAChB;CACF;CAEA,kBAAkB,CAElB;CAEA,YAAY;EACV,MAAM;CACR;CAEA,QAAQ,KAAA;CACR,OAAO,KAAA;CAEP,cAAc;EACZ,gBAAgB;EAChB,uBAAuB;EACvB,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,QAAQ;EACR,WAAW;EACX,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;CACT;CAEA,YAAY;CACZ,gBAAgB;CAChB,WAAW;CAEX,UAAU,CAAC;CAEX,OAAO;CAEP,aAAa,CAAC;CAEd,QAAQ,KAAA;CAER,YAAY;EACV,aAAa,CAAC;CAChB;CAEA,SAAS;EACP,MAAM;CACR;CAEA,SAAS;EACP,OAAO,EAAE,UAAU,CAAC,EAAE;CACxB;CAEA,QAAQ;EACN,MAAM;CACR;CAEA,cAAc;EACZ,aAAa,CAAC;CAChB;AACF"}
|
|
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 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 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 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,MAAM,qCAAqB,IAAI,MAC7B,mQACF;AACA,MAAa,oBAAuC;CAClD,iBAAiB,CAEjB;CAEA,cAAc;EACZ,OAAO,CAAC;CACV;CAEA,iBAAiB;EACf,MAAM;CACR;CAEA,SAAS;EACP,MAAM;CACR;CAEA,WAAW;EACT,MAAM;CACR;CAEA,YAAY;EACV,MAAM;CACR;CAEA,YAAY;EACV,MAAM;CACR;CAEA,gBAAgB;EACd,MAAM;CACR;CAEA,iBAAiB;EACf,MAAM;CACR;CAEA,wBAAwB;EACtB,MAAM;CACR;CAEA,QAAQ;EACN,MAAM;CACR;CAEA,eAAe;EACb,MAAM;CACR;CAEA,eAAe;EACb,MAAM;CACR;CAEA,kBAAkB;EAChB,MAAM;CACR;CAEA,sBAAsB;CACtB,kCAAkC,CAAC;CAEnC,YAAY;EACV,MAAM;CACR;CAEA,cAAc;EACZ,MAAM;CACR;CAEA,iBAAiB;EACf,MAAM;CACR;CAEA,kBAAkB;EAChB,OAAO,CAAC;CACV;CAEA,sBAAsB;EACpB,MAAM;CACR;CAEA,sBAAsB;EACpB,MAAM;CACR;CAEA,UAAU;EACR,aAAa,CAAC;EACd,kBAAkB;EAElB,MAAM,gBAAgB;GACpB,MAAM;EACR;EAEA,MAAM,mBAAmB;GACvB,MAAM;EACR;EAEA,WAAW;EAEX,WAAW;EACX,SAAS;EACT,SAAS;EAET,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,MAAM;EAEN,UAAU;GACR,MAAM;EACR;EAEA,WAAW,CAAC;EAEZ,eAAe;GACb,MAAM;EACR;EAEA,MAAM,QAAQ,CAEd;EAEA,MAAM,mBAAmB,CAEzB;EAEA,OAAO;GACL,MAAM;EACR;EAEA,SAAS,CAET;EAEA,WAAW,KAAA;EAEX,iBAAiB;GACf,MAAM;EACR;EAEA,gBAAgB,CAEhB;EAEA,OAAO,KAAA;EAEP,WAAW;GACT,MAAM;EACR;EAEA,YAAY;GACV,aAAa,CAAC;EAChB;EAEA,cAAc;GACZ,aAAa,CAAC;EAChB;CACF;CAEA,kBAAkB,CAElB;CAEA,YAAY;EACV,MAAM;CACR;CAEA,QAAQ,KAAA;CACR,OAAO,KAAA;CAEP,cAAc;EACZ,gBAAgB;EAChB,uBAAuB;EACvB,MAAM;EACN,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,QAAQ;EACR,WAAW;EACX,OAAO;EACP,aAAa;EACb,UAAU;EACV,OAAO;CACT;CAEA,YAAY;CACZ,gBAAgB;CAChB,WAAW;CAEX,UAAU,CAAC;CAEX,OAAO;CAEP,aAAa,CAAC;CAEd,QAAQ,KAAA;CAER,YAAY;EACV,aAAa,CAAC;CAChB;CAEA,SAAS;EACP,MAAM;CACR;CAEA,SAAS;EACP,OAAO,EAAE,UAAU,CAAC,EAAE;CACxB;CAEA,QAAQ;EACN,MAAM;CACR;CAEA,cAAc;EACZ,aAAa,CAAC;CAChB;AACF"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { ThreadMessage } from "../../types/message.js";
|
|
2
|
+
import { Tool, ToolModelContentPart } from "assistant-stream";
|
|
3
|
+
import { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
4
|
+
|
|
5
|
+
//#region src/runtimes/tool-invocations/ToolInvocationTracker.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Streaming execution state for a frontend tool.
|
|
8
|
+
*/
|
|
9
|
+
type ToolExecutionStatus = {
|
|
10
|
+
type: "executing";
|
|
11
|
+
} | {
|
|
12
|
+
type: "interrupt";
|
|
13
|
+
payload: {
|
|
14
|
+
type: "human";
|
|
15
|
+
payload: unknown;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
type AddToolResultCommand = {
|
|
19
|
+
readonly type: "add-tool-result";
|
|
20
|
+
readonly toolCallId: string;
|
|
21
|
+
readonly toolName: string;
|
|
22
|
+
readonly result: ReadonlyJSONValue;
|
|
23
|
+
readonly isError: boolean;
|
|
24
|
+
readonly artifact?: ReadonlyJSONValue;
|
|
25
|
+
readonly modelContent?: readonly ToolModelContentPart[];
|
|
26
|
+
};
|
|
27
|
+
type ToolInvocationTrackerSnapshot = {
|
|
28
|
+
readonly messages: readonly ThreadMessage[]; /** Whether the producing runtime is currently streaming new output. */
|
|
29
|
+
readonly isRunning: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Whether the producing runtime is still loading historical state.
|
|
32
|
+
* When `true`, every snapshot is treated as historical (no `streamCall` /
|
|
33
|
+
* `execute` fires). When `false`, processing resumes as live.
|
|
34
|
+
*/
|
|
35
|
+
readonly isLoading?: boolean;
|
|
36
|
+
};
|
|
37
|
+
type ToolInvocationTrackerCallbacks = {
|
|
38
|
+
/**
|
|
39
|
+
* Invoked when a client-side `execute()` returns a result and the runtime
|
|
40
|
+
* needs to feed it back into the conversation.
|
|
41
|
+
*/
|
|
42
|
+
onResult: (command: AddToolResultCommand) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Invoked whenever the per-tool-call status map changes (executing /
|
|
45
|
+
* interrupt / cleared). The callback receives a fresh map; mutating the
|
|
46
|
+
* argument is not supported.
|
|
47
|
+
*/
|
|
48
|
+
onStatusesChange: (statuses: ReadonlyMap<string, ToolExecutionStatus>) => void;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Plain-class port of the former `useToolInvocations` React hook. Owns the
|
|
52
|
+
* assistant-stream pipeline that drives client-side `streamCall` / `execute`
|
|
53
|
+
* for tool-call parts surfaced by a thread runtime, plus the per-tool-call
|
|
54
|
+
* status map that consumers render against.
|
|
55
|
+
*
|
|
56
|
+
* **Contract**: `streamCall` (and `execute`) fires exactly once per logical
|
|
57
|
+
* `toolCallId`. Args mutations after first completion, result replacement,
|
|
58
|
+
* and result clearing are *not* surfaced through additional `streamCall`
|
|
59
|
+
* invocations — by design — so hosts cannot observe spurious re-fires of
|
|
60
|
+
* side effects. The follow-up `reader.events()` API will expose those
|
|
61
|
+
* post-completion transitions to consumers that opt in.
|
|
62
|
+
*
|
|
63
|
+
* State-transition safety: every public method that observes runtime state
|
|
64
|
+
* (`setState`, `reset`, `abort`, `resume`) wraps its work in try/catch and
|
|
65
|
+
* logs to `console.error` rather than throwing. The tracker is built into
|
|
66
|
+
* the hot message-processing path, so a malformed snapshot must never crash
|
|
67
|
+
* the host runtime. See ./EDGE_CASES.md for the known non-trivial state
|
|
68
|
+
* transitions and what each does today.
|
|
69
|
+
*/
|
|
70
|
+
declare class ToolInvocationTracker {
|
|
71
|
+
private readonly _getTools;
|
|
72
|
+
private readonly _callbacks;
|
|
73
|
+
private readonly _entries;
|
|
74
|
+
/**
|
|
75
|
+
* Tool call ids whose `execute` should be short-circuited in the wrapper.
|
|
76
|
+
* Populated when an entry is created with a result already attached
|
|
77
|
+
* (history reload, mid-run resume, etc.) — `execute` is suppressed so
|
|
78
|
+
* client-side side effects don't double-run. Membership outlives the
|
|
79
|
+
* entry: `reset()` deliberately does *not* clear this so post-abort
|
|
80
|
+
* cancellation `result` chunks for pre-resolved entries can still be
|
|
81
|
+
* recognized and dropped. Growth is bounded by the number of pre-resolved
|
|
82
|
+
* tool calls observed in the session.
|
|
83
|
+
*/
|
|
84
|
+
private readonly _skipExecuteStreamIds;
|
|
85
|
+
private readonly _humanInput;
|
|
86
|
+
/** In-flight `execute` invocations keyed by tool call id. */
|
|
87
|
+
private readonly _executing;
|
|
88
|
+
private readonly _settledResolvers;
|
|
89
|
+
private _statuses;
|
|
90
|
+
private _ac;
|
|
91
|
+
private _pendingRestore;
|
|
92
|
+
/** Cached last snapshot, used to skip processing on identical re-renders. */
|
|
93
|
+
private _lastSnapshot;
|
|
94
|
+
private _isRunning;
|
|
95
|
+
private _controller;
|
|
96
|
+
/**
|
|
97
|
+
* Set when the assistant-stream pipeline has died (errored out via
|
|
98
|
+
* `.pipeTo(...).catch(...)`). The next `setState` re-initializes the
|
|
99
|
+
* pipeline and demotes all active entries to restored so they survive
|
|
100
|
+
* across the restart without re-firing `streamCall` (preserves the
|
|
101
|
+
* "exactly once" contract). Capped at a single auto-restart per session
|
|
102
|
+
* — repeated failures keep the tracker dead with a more visible error.
|
|
103
|
+
*/
|
|
104
|
+
private _pipelineDead;
|
|
105
|
+
private _pipelineRestartUsed;
|
|
106
|
+
constructor(getTools: () => Record<string, Tool> | undefined, callbacks: ToolInvocationTrackerCallbacks);
|
|
107
|
+
/**
|
|
108
|
+
* Build the assistant-stream pipeline. Called once from the constructor
|
|
109
|
+
* and at most once again if `_pipelineDead` is set (see F.4 in
|
|
110
|
+
* EDGE_CASES.md).
|
|
111
|
+
*/
|
|
112
|
+
private _initPipeline;
|
|
113
|
+
/**
|
|
114
|
+
* Feed the next observed snapshot into the tracker. Called from the host
|
|
115
|
+
* runtime whenever its message list / running state changes.
|
|
116
|
+
*/
|
|
117
|
+
setState(snapshot: ToolInvocationTrackerSnapshot): void;
|
|
118
|
+
/**
|
|
119
|
+
* Reset the tracker so the next observed snapshot is treated as historical.
|
|
120
|
+
* Clears entries and aborts any in-flight executions. Used by callers like
|
|
121
|
+
* `importExternalState` to mark a freshly loaded state as restored.
|
|
122
|
+
*/
|
|
123
|
+
reset(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Abort any in-flight `execute()` invocations. Resolves once all of them
|
|
126
|
+
* have settled (or immediately if none are running).
|
|
127
|
+
*/
|
|
128
|
+
abort(): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Resolve a pending human-input request for the given tool call. Returns
|
|
131
|
+
* `true` if a pending request was resumed, `false` if the tracker has no
|
|
132
|
+
* outstanding request for that id (the caller should fall back to its own
|
|
133
|
+
* dispatch path).
|
|
134
|
+
*/
|
|
135
|
+
resume(toolCallId: string, payload: unknown): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Returns the current tool execution status map. The returned `Map` is
|
|
138
|
+
* the tracker's internal store — do not mutate it. Treat the reference
|
|
139
|
+
* as a snapshot that may be replaced wholesale on the next status
|
|
140
|
+
* transition.
|
|
141
|
+
*/
|
|
142
|
+
getStatuses(): ReadonlyMap<string, ToolExecutionStatus>;
|
|
143
|
+
private _getWrappedTools;
|
|
144
|
+
private _onHumanInput;
|
|
145
|
+
private _onExecutionStart;
|
|
146
|
+
private _onExecutionEnd;
|
|
147
|
+
private _handleResultChunk;
|
|
148
|
+
private _invokeOnResult;
|
|
149
|
+
private _invokeOnStatusesChange;
|
|
150
|
+
private _setStatus;
|
|
151
|
+
private _deleteStatus;
|
|
152
|
+
private _hasExecutableTool;
|
|
153
|
+
private _shouldCloseArgsStream;
|
|
154
|
+
private _startActiveEntry;
|
|
155
|
+
/**
|
|
156
|
+
* Demote every active entry back to the restored phase. Used by the
|
|
157
|
+
* pipeline-restart path so that, after a fresh pipeline is built, the
|
|
158
|
+
* next observed snapshot does not re-fire `streamCall` for tool calls
|
|
159
|
+
* that already fired pre-death. Args / hasResult tracking is preserved
|
|
160
|
+
* so signature comparisons still work.
|
|
161
|
+
*/
|
|
162
|
+
private _demoteEntriesToRestored;
|
|
163
|
+
private _processArgsText;
|
|
164
|
+
private _processMessages;
|
|
165
|
+
}
|
|
166
|
+
//#endregion
|
|
167
|
+
export { AddToolResultCommand, ToolExecutionStatus, ToolInvocationTracker, ToolInvocationTrackerCallbacks, ToolInvocationTrackerSnapshot };
|
|
168
|
+
//# sourceMappingURL=ToolInvocationTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolInvocationTracker.d.ts","names":[],"sources":["../../../src/runtimes/tool-invocations/ToolInvocationTracker.ts"],"mappings":";;;;;;;AAoBA;KAAY,mBAAA;EACN,IAAA;AAAA;EAEA,IAAA;EACA,OAAA;IAAW,IAAA;IAAe,OAAA;EAAA;AAAA;AAAA,KAGpB,oBAAA;EAAA,SACD,IAAA;EAAA,SACA,UAAA;EAAA,SACA,QAAA;EAAA,SACA,MAAA,EAAQ,iBAAA;EAAA,SACR,OAAA;EAAA,SACA,QAAA,GAAW,iBAAA;EAAA,SACX,YAAA,YAAwB,oBAAA;AAAA;AAAA,KAGvB,6BAAA;EAAA,SACD,QAAA,WAAmB,aAAa,IARhC;EAAA,SAUA,SAAA;EATQ;;;;;EAAA,SAeR,SAAA;AAAA;AAAA,KAGC,8BAAA;EAZA;;;;EAiBV,QAAA,GAAW,OAAA,EAAS,oBAAA;EAhBQ;;;;AAQV;EAclB,gBAAA,GACE,QAAA,EAAU,WAAA,SAAoB,mBAAA;AAAA;;;;;;;;;;;;;;;AAAoB;AAiEtD;;;;;cAAa,qBAAA;EAAA,iBACM,SAAA;EAAA,iBACA,UAAA;EAAA,iBAEA,QAAA;EAqPK;;;;;;;;;;EAAA,iBA1OL,qBAAA;EAAA,iBACA,WAAA;EAcT;EAAA,iBANS,UAAA;EAAA,iBACA,iBAAA;EAAA,QAET,SAAA;EAAA,QAEA,GAAA;EAAA,QACA,eAAA;;UAGA,aAAA;EAAA,QACA,UAAA;EAAA,QAEA,WAAA;EAeK;;;;;;;;EAAA,QALL,aAAA;EAAA,QACA,oBAAA;cAGN,QAAA,QAAgB,MAAA,SAAe,IAAA,eAC/B,SAAA,EAAW,8BAAA;EAkLqB;;;;;EAAA,QArK1B,aAAA;EAoPA;;;;EArMD,QAAA,CAAS,QAAA,EAAU,6BAAA;EA2RlB;;;;;EAxND,KAAA,CAAA;EAuSC;;;AAwGgB;EA7XjB,KAAA,CAAA,GAAS,OAAA;;;;;;;EAiCT,MAAA,CAAO,UAAA,UAAoB,OAAA;;;;;;;EAoB3B,WAAA,CAAA,GAAe,WAAA,SAAoB,mBAAA;EAAA,QAMlC,gBAAA;EAAA,QA8BA,aAAA;EAAA,QAuBA,iBAAA;EAAA,QAOA,eAAA;EAAA,QAkBA,kBAAA;EAAA,QAqCA,eAAA;EAAA,QAWA,uBAAA;EAAA,QAaA,UAAA;EAAA,QAOA,aAAA;EAAA,QAUA,kBAAA;EAAA,QAKA,sBAAA;EAAA,QAgBA,iBAAA;;;;;;;;UA8BA,wBAAA;EAAA,QAWA,gBAAA;EAAA,QAwGA,gBAAA;AAAA"}
|