@assistant-ui/react 0.11.38 → 0.11.41
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/client/AssistantClient.d.ts.map +1 -1
- package/dist/client/AssistantClient.js +14 -30
- package/dist/client/AssistantClient.js.map +1 -1
- package/dist/client/ModelContextClient.d.ts +1 -1
- package/dist/client/NoOpComposerClient.d.ts +1 -1
- package/dist/client/ThreadMessageClient.d.ts +1 -1
- package/dist/client/Tools.d.ts +1 -1
- package/dist/client/Tools.d.ts.map +1 -1
- package/dist/client/Tools.js +29 -18
- package/dist/client/Tools.js.map +1 -1
- package/dist/client/types/Tools.d.ts +6 -1
- package/dist/client/types/Tools.d.ts.map +1 -1
- package/dist/context/react/AssistantApiContext.d.ts +2 -4
- package/dist/context/react/AssistantApiContext.d.ts.map +1 -1
- package/dist/context/react/AssistantApiContext.js +0 -7
- package/dist/context/react/AssistantApiContext.js.map +1 -1
- package/dist/context/react/hooks/useAssistantState.js +2 -2
- package/dist/context/react/hooks/useAssistantState.js.map +1 -1
- package/dist/legacy-runtime/RuntimeAdapter.d.ts +1 -1
- package/dist/legacy-runtime/client/AttachmentRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/client/ComposerRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/client/EventManagerRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/client/MessagePartRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/client/MessageRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/client/ThreadListItemRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/client/ThreadListRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/client/ThreadRuntimeClient.d.ts +1 -1
- package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +8 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +23 -11
- package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts +2 -2
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.js +2 -0
- package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.js +7 -4
- package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts +7 -2
- package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.js +17 -3
- package/dist/legacy-runtime/runtime-cores/utils/MessageRepository.js.map +1 -1
- package/dist/model-context/index.d.ts +1 -1
- package/dist/model-context/index.d.ts.map +1 -1
- package/dist/model-context/index.js +0 -4
- package/dist/model-context/index.js.map +1 -1
- package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
- package/dist/model-context/makeAssistantVisible.js +21 -8
- package/dist/model-context/makeAssistantVisible.js.map +1 -1
- package/dist/model-context/toolbox.d.ts +1 -19
- package/dist/model-context/toolbox.d.ts.map +1 -1
- package/dist/model-context/toolbox.js +0 -13
- package/dist/model-context/toolbox.js.map +1 -1
- package/dist/model-context/useAssistantTool.js +1 -1
- package/dist/model-context/useAssistantTool.js.map +1 -1
- package/dist/model-context/useAssistantToolUI.js +1 -1
- package/dist/model-context/useAssistantToolUI.js.map +1 -1
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +2 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/primitives/message/MessageParts.js +4 -2
- package/dist/primitives/message/MessageParts.js.map +1 -1
- package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
- package/dist/primitives/message/MessagePartsGrouped.js +4 -2
- package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
- package/dist/primitives/messagePart/useMessagePartData.d.ts +3 -0
- package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -0
- package/dist/primitives/messagePart/useMessagePartData.js +23 -0
- package/dist/primitives/messagePart/useMessagePartData.js.map +1 -0
- package/dist/tests/setup.js +14 -14
- package/dist/tests/setup.js.map +1 -1
- package/dist/types/AssistantTypes.d.ts +2 -2
- package/dist/types/AssistantTypes.d.ts.map +1 -1
- package/dist/types/MessagePartTypes.d.ts +6 -1
- package/dist/types/MessagePartTypes.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/tap-store/derived-scopes.d.ts +1 -1
- package/dist/utils/tap-store/derived-scopes.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/client/AssistantClient.ts +14 -33
- package/src/client/Tools.ts +31 -22
- package/src/client/types/Tools.ts +11 -2
- package/src/context/react/AssistantApiContext.tsx +2 -11
- package/src/context/react/hooks/useAssistantState.tsx +2 -2
- package/src/legacy-runtime/cloud/auiV0.ts +1 -1
- package/src/legacy-runtime/runtime-cores/assistant-transport/runManager.ts +2 -2
- package/src/legacy-runtime/runtime-cores/assistant-transport/types.ts +8 -1
- package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.tsx +26 -11
- package/src/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.tsx +10 -1
- package/src/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.tsx +7 -3
- package/src/legacy-runtime/runtime-cores/utils/MessageRepository.tsx +27 -3
- package/src/model-context/index.ts +1 -6
- package/src/model-context/makeAssistantVisible.tsx +23 -12
- package/src/model-context/toolbox.tsx +1 -21
- package/src/model-context/useAssistantTool.tsx +1 -1
- package/src/model-context/useAssistantToolUI.tsx +1 -1
- package/src/primitives/index.ts +1 -0
- package/src/primitives/message/MessageParts.tsx +5 -3
- package/src/primitives/message/MessagePartsGrouped.tsx +5 -3
- package/src/primitives/messagePart/useMessagePartData.tsx +23 -0
- package/src/types/AssistantTypes.ts +2 -0
- package/src/types/MessagePartTypes.ts +8 -1
- package/src/types/index.ts +1 -0
- package/dist/client/ToolUIClient.d.ts +0 -7
- package/dist/client/ToolUIClient.d.ts.map +0 -1
- package/dist/client/ToolUIClient.js +0 -71
- package/dist/client/ToolUIClient.js.map +0 -1
- package/dist/client/ToolUIContext.d.ts +0 -4
- package/dist/client/ToolUIContext.d.ts.map +0 -1
- package/dist/client/ToolUIContext.js +0 -20
- package/dist/client/ToolUIContext.js.map +0 -1
- package/dist/client/types/ToolUI.d.ts +0 -23
- package/dist/client/types/ToolUI.d.ts.map +0 -1
- package/dist/client/types/ToolUI.js +0 -1
- package/dist/client/types/ToolUI.js.map +0 -1
- package/src/client/ToolUIClient.ts +0 -76
- package/src/client/ToolUIContext.ts +0 -22
- package/src/client/types/ToolUI.ts +0 -27
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantClient.d.ts","sourceRoot":"","sources":["../../src/client/AssistantClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAYhF,OAAO,EACL,YAAY,EAIb,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"AssistantClient.d.ts","sourceRoot":"","sources":["../../src/client/AssistantClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAYhF,OAAO,EACL,YAAY,EAIb,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA4H1E,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,eAAe,CAAC;QACvB,KAAK,EAAE,qBAAqB,CAAC;QAC7B,GAAG,EAAE,mBAAmB,CAAC;KAC1B,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,eAAe,CAAC;QAC7B,KAAK,EAAE,iBAAiB,CAAC;QACzB,GAAG,EAAE,eAAe,CAAC;KACtB,CAAC,CAAC;IACH,KAAK,CAAC,EACF,eAAe,CAAC;QACd,KAAK,EAAE,UAAU,CAAC;QAClB,GAAG,EAAE,QAAQ,CAAC;KACf,CAAC,GACF,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,oBAAoB,iBAK7D,CAAC"}
|
|
@@ -19,10 +19,8 @@ import {
|
|
|
19
19
|
useAssistantApiImpl,
|
|
20
20
|
extendApi
|
|
21
21
|
} from "../context/react/AssistantApiContext.js";
|
|
22
|
-
import { ToolUIClient } from "./ToolUIClient.js";
|
|
23
22
|
import { withEventsProvider } from "./EventContext.js";
|
|
24
23
|
import { withModelContextProvider } from "./ModelContext.js";
|
|
25
|
-
import { withToolUIProvider } from "./ToolUIContext.js";
|
|
26
24
|
import { ModelContext as ModelContextResource } from "./ModelContextClient.js";
|
|
27
25
|
var AssistantStore = resource(
|
|
28
26
|
({
|
|
@@ -31,39 +29,30 @@ var AssistantStore = resource(
|
|
|
31
29
|
tools: toolsEl
|
|
32
30
|
}) => {
|
|
33
31
|
const events = tapInlineResource(EventManager());
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
tools: tapResource(toolsEl ?? Tools({}), [toolsEl]),
|
|
48
|
-
threads: tapResource(threadsEl, [threadsEl])
|
|
49
|
-
};
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
);
|
|
32
|
+
const { threads, tools, modelContext } = withEventsProvider(events, () => {
|
|
33
|
+
const modelContextResource = tapResource(
|
|
34
|
+
modelContextEl ?? ModelContextResource(),
|
|
35
|
+
[modelContextEl]
|
|
36
|
+
);
|
|
37
|
+
return withModelContextProvider(modelContextResource.api, () => {
|
|
38
|
+
return {
|
|
39
|
+
modelContext: modelContextResource,
|
|
40
|
+
tools: tapResource(toolsEl ?? Tools({}), [toolsEl]),
|
|
41
|
+
threads: tapResource(threadsEl, [threadsEl])
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
});
|
|
54
45
|
const state = tapMemo(
|
|
55
46
|
() => ({
|
|
56
47
|
threads: threads.state,
|
|
57
|
-
toolUIs: toolUIs.state,
|
|
58
48
|
tools: tools.state,
|
|
59
49
|
modelContext: modelContext.state
|
|
60
50
|
}),
|
|
61
|
-
[threads.state,
|
|
51
|
+
[threads.state, tools.state, modelContext.state]
|
|
62
52
|
);
|
|
63
53
|
return tapApi({
|
|
64
54
|
getState: () => state,
|
|
65
55
|
threads: threads.api,
|
|
66
|
-
toolUIs: toolUIs.api,
|
|
67
56
|
tools: tools.api,
|
|
68
57
|
modelContext: modelContext.api,
|
|
69
58
|
on: events.on
|
|
@@ -80,11 +69,6 @@ var getClientFromStore = (client) => {
|
|
|
80
69
|
query: {},
|
|
81
70
|
get: () => client.getState().api.threads
|
|
82
71
|
}),
|
|
83
|
-
toolUIs: createAssistantApiField({
|
|
84
|
-
source: "root",
|
|
85
|
-
query: {},
|
|
86
|
-
get: () => client.getState().api.toolUIs
|
|
87
|
-
}),
|
|
88
72
|
tools: createAssistantApiField({
|
|
89
73
|
source: "root",
|
|
90
74
|
query: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/AssistantClient.ts"],"sourcesContent":["import {\n tapMemo,\n resource,\n Unsubscribe,\n tapInlineResource,\n ResourceElement,\n tapResource,\n} from \"@assistant-ui/tap\";\nimport { ThreadListClientApi, ThreadListClientState } from \"./types/ThreadList\";\nimport { Tools } from \"../model-context\";\nimport { asStore, Store, tapApi } from \"../utils/tap-store\";\nimport { useResource } from \"@assistant-ui/tap/react\";\nimport { useMemo } from \"react\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n checkEventScope,\n normalizeEventSelector,\n} from \"../types/EventTypes\";\nimport { EventManager } from \"../legacy-runtime/client/EventManagerRuntimeClient\";\nimport {\n AssistantApi,\n createAssistantApiField,\n useAssistantApiImpl,\n extendApi,\n} from \"../context/react/AssistantApiContext\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/client/AssistantClient.ts"],"sourcesContent":["import {\n tapMemo,\n resource,\n Unsubscribe,\n tapInlineResource,\n ResourceElement,\n tapResource,\n} from \"@assistant-ui/tap\";\nimport { ThreadListClientApi, ThreadListClientState } from \"./types/ThreadList\";\nimport { Tools } from \"../model-context\";\nimport { asStore, Store, tapApi } from \"../utils/tap-store\";\nimport { useResource } from \"@assistant-ui/tap/react\";\nimport { useMemo } from \"react\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n checkEventScope,\n normalizeEventSelector,\n} from \"../types/EventTypes\";\nimport { EventManager } from \"../legacy-runtime/client/EventManagerRuntimeClient\";\nimport {\n AssistantApi,\n createAssistantApiField,\n useAssistantApiImpl,\n extendApi,\n} from \"../context/react/AssistantApiContext\";\nimport { withEventsProvider } from \"./EventContext\";\nimport { withModelContextProvider } from \"./ModelContext\";\nimport { ToolsApi, ToolsState } from \"./types/Tools\";\nimport { ModelContextApi, ModelContextState } from \"./types/ModelContext\";\nimport { ModelContext as ModelContextResource } from \"./ModelContextClient\";\n\ntype AssistantClientState = {\n readonly threads: ThreadListClientState;\n readonly tools: ToolsState;\n readonly modelContext: ModelContextState;\n};\n\ntype AssistantClientApi = {\n getState(): AssistantClientState;\n\n readonly threads: ThreadListClientApi;\n readonly tools: ToolsApi;\n readonly modelContext: ModelContextApi;\n\n on<TEvent extends AssistantEvent>(\n event: TEvent,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n};\n\nconst AssistantStore = resource(\n ({\n threads: threadsEl,\n modelContext: modelContextEl,\n tools: toolsEl,\n }: AssistantClientProps) => {\n const events = tapInlineResource(EventManager());\n\n const { threads, tools, modelContext } = withEventsProvider(events, () => {\n const modelContextResource = tapResource(\n modelContextEl ?? ModelContextResource(),\n [modelContextEl],\n );\n\n return withModelContextProvider(modelContextResource.api, () => {\n return {\n modelContext: modelContextResource,\n tools: tapResource(toolsEl ?? Tools({}), [toolsEl]),\n threads: tapResource(threadsEl, [threadsEl]),\n };\n });\n });\n\n const state = tapMemo<AssistantClientState>(\n () => ({\n threads: threads.state,\n tools: tools.state,\n modelContext: modelContext.state,\n }),\n [threads.state, tools.state, modelContext.state],\n );\n\n return tapApi<AssistantClientApi>({\n getState: () => state,\n\n threads: threads.api,\n tools: tools.api,\n modelContext: modelContext.api,\n on: events.on,\n });\n },\n);\n\nconst getClientFromStore = (client: Store<{ api: AssistantClientApi }>) => {\n const getItem = () => {\n return client.getState().api.threads.item(\"main\");\n };\n return {\n threads: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => client.getState().api.threads,\n }),\n tools: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => client.getState().api.tools,\n }),\n modelContext: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => client.getState().api.modelContext,\n }),\n thread: createAssistantApiField({\n source: \"threads\",\n query: { type: \"main\" },\n get: () => client.getState().api.threads.thread(\"main\"),\n }),\n threadListItem: createAssistantApiField({\n source: \"threads\",\n query: { type: \"main\" },\n get: () => getItem(),\n }),\n composer: createAssistantApiField({\n source: \"thread\",\n query: {},\n get: () => client.getState().api.threads.thread(\"main\").composer,\n }),\n on(selector, callback) {\n const { event, scope } = normalizeEventSelector(selector);\n if (scope === \"*\") return client.getState().api.on(event, callback);\n\n if (\n checkEventScope(\"thread\", scope, event) ||\n checkEventScope(\"thread-list-item\", scope, event) ||\n checkEventScope(\"composer\", scope, event)\n ) {\n return client.getState().api.on(event, (e) => {\n if (e.threadId !== getItem().getState().id) return;\n callback(e);\n });\n }\n\n throw new Error(\n `Event scope is not available in this component: ${scope}`,\n );\n },\n subscribe: client.subscribe,\n flushSync: client.flushSync,\n } satisfies Partial<AssistantApi>;\n};\n\nexport type AssistantClientProps = {\n threads: ResourceElement<{\n state: ThreadListClientState;\n api: ThreadListClientApi;\n }>;\n modelContext?: ResourceElement<{\n state: ModelContextState;\n api: ModelContextApi;\n }>;\n tools?:\n | ResourceElement<{\n state: ToolsState;\n api: ToolsApi;\n }>\n | undefined;\n};\n\nexport const useAssistantClient = (props: AssistantClientProps) => {\n const api = useAssistantApiImpl();\n const client = useResource(asStore(AssistantStore(props)));\n const clientApi = useMemo(() => getClientFromStore(client), [client]);\n return useMemo(() => extendApi(api, clientApi), [api, clientApi]);\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ModelContextApi } from "./types/ModelContext";
|
|
2
|
-
export declare const ModelContext: import("@assistant-ui/tap").
|
|
2
|
+
export declare const ModelContext: import("@assistant-ui/tap").Resource<{
|
|
3
3
|
key: string | undefined;
|
|
4
4
|
state: any;
|
|
5
5
|
api: ModelContextApi;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComposerClientApi } from "./types/Composer";
|
|
2
|
-
export declare const NoOpComposerClient: import("@assistant-ui/tap").
|
|
2
|
+
export declare const NoOpComposerClient: import("@assistant-ui/tap").Resource<{
|
|
3
3
|
key: string | undefined;
|
|
4
4
|
state: any;
|
|
5
5
|
api: ComposerClientApi;
|
|
@@ -6,7 +6,7 @@ export type ThreadMessageClientProps = {
|
|
|
6
6
|
branchNumber?: number;
|
|
7
7
|
branchCount?: number;
|
|
8
8
|
};
|
|
9
|
-
export declare const ThreadMessageClient: import("@assistant-ui/tap").
|
|
9
|
+
export declare const ThreadMessageClient: import("@assistant-ui/tap").Resource<{
|
|
10
10
|
key: string | undefined;
|
|
11
11
|
state: any;
|
|
12
12
|
api: MessageClientApi;
|
package/dist/client/Tools.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ToolsApi } from "./types/Tools";
|
|
2
2
|
import { type Toolkit } from "../model-context/toolbox";
|
|
3
|
-
export declare const Tools: import("@assistant-ui/tap").
|
|
3
|
+
export declare const Tools: import("@assistant-ui/tap").Resource<{
|
|
4
4
|
key: string | undefined;
|
|
5
5
|
state: any;
|
|
6
6
|
api: ToolsApi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tools.d.ts","sourceRoot":"","sources":["../../src/client/Tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Tools.d.ts","sourceRoot":"","sources":["../../src/client/Tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,eAAO,MAAM,KAAK;;;;;cAAsC,OAAO;EAqE7D,CAAC"}
|
package/dist/client/Tools.js
CHANGED
|
@@ -2,29 +2,17 @@
|
|
|
2
2
|
import { resource, tapState, tapEffect } from "@assistant-ui/tap";
|
|
3
3
|
import { tapApi } from "../utils/tap-store/index.js";
|
|
4
4
|
import { tapModelContext } from "./ModelContext.js";
|
|
5
|
-
import { tapToolUI } from "./ToolUIContext.js";
|
|
6
|
-
import {
|
|
7
|
-
FallbackSymbol,
|
|
8
|
-
LayoutSymbol
|
|
9
|
-
} from "../model-context/toolbox.js";
|
|
10
5
|
var Tools = resource(({ toolkit }) => {
|
|
11
|
-
const [state] = tapState(() => ({
|
|
6
|
+
const [state, setState] = tapState(() => ({
|
|
7
|
+
tools: {}
|
|
8
|
+
}));
|
|
12
9
|
const modelContext = tapModelContext();
|
|
13
|
-
const toolUI = tapToolUI();
|
|
14
10
|
tapEffect(() => {
|
|
15
11
|
if (!toolkit) return;
|
|
16
12
|
const unsubscribes = [];
|
|
17
|
-
const fallback = toolkit[FallbackSymbol];
|
|
18
|
-
if (fallback?.render) {
|
|
19
|
-
unsubscribes.push(toolUI.setFallbackToolUI(fallback.render));
|
|
20
|
-
}
|
|
21
|
-
const layout = toolkit[LayoutSymbol];
|
|
22
|
-
if (layout?.render) {
|
|
23
|
-
unsubscribes.push(toolUI.setToolUILayout(layout.render));
|
|
24
|
-
}
|
|
25
13
|
for (const [toolName, tool] of Object.entries(toolkit)) {
|
|
26
14
|
if (tool.render) {
|
|
27
|
-
unsubscribes.push(
|
|
15
|
+
unsubscribes.push(setToolUI(toolName, tool.render));
|
|
28
16
|
}
|
|
29
17
|
}
|
|
30
18
|
const toolsWithoutRender = Object.entries(toolkit).reduce(
|
|
@@ -44,9 +32,32 @@ var Tools = resource(({ toolkit }) => {
|
|
|
44
32
|
return () => {
|
|
45
33
|
unsubscribes.forEach((fn) => fn());
|
|
46
34
|
};
|
|
47
|
-
}, [toolkit, modelContext
|
|
35
|
+
}, [toolkit, modelContext]);
|
|
36
|
+
const setToolUI = (toolName, render) => {
|
|
37
|
+
setState((prev) => {
|
|
38
|
+
return {
|
|
39
|
+
...prev,
|
|
40
|
+
tools: {
|
|
41
|
+
...prev.tools,
|
|
42
|
+
[toolName]: [...prev.tools[toolName] ?? [], render]
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
return () => {
|
|
47
|
+
setState((prev) => {
|
|
48
|
+
return {
|
|
49
|
+
...prev,
|
|
50
|
+
tools: {
|
|
51
|
+
...prev.tools,
|
|
52
|
+
[toolName]: prev.tools[toolName]?.filter((r) => r !== render) ?? []
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
};
|
|
48
58
|
return tapApi({
|
|
49
|
-
getState: () => state
|
|
59
|
+
getState: () => state,
|
|
60
|
+
setToolUI
|
|
50
61
|
});
|
|
51
62
|
});
|
|
52
63
|
export {
|
package/dist/client/Tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/Tools.ts"],"sourcesContent":["import { resource, tapState, tapEffect } from \"@assistant-ui/tap\";\nimport { tapApi } from \"../utils/tap-store\";\nimport { tapModelContext } from \"./ModelContext\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/client/Tools.ts"],"sourcesContent":["import { resource, tapState, tapEffect } from \"@assistant-ui/tap\";\nimport { tapApi } from \"../utils/tap-store\";\nimport { tapModelContext } from \"./ModelContext\";\nimport { ToolsState, ToolsApi } from \"./types/Tools\";\nimport type { Tool } from \"assistant-stream\";\nimport { type Toolkit } from \"../model-context/toolbox\";\n\nexport const Tools = resource(({ toolkit }: { toolkit?: Toolkit }) => {\n const [state, setState] = tapState<ToolsState>(() => ({\n tools: {},\n }));\n\n const modelContext = tapModelContext();\n\n tapEffect(() => {\n if (!toolkit) return;\n const unsubscribes: (() => void)[] = [];\n\n // Register tool UIs (exclude symbols)\n for (const [toolName, tool] of Object.entries(toolkit)) {\n if (tool.render) {\n unsubscribes.push(setToolUI(toolName, tool.render));\n }\n }\n\n // Register tools with model context (exclude symbols)\n const toolsWithoutRender = Object.entries(toolkit).reduce(\n (acc, [name, tool]) => {\n const { render, ...rest } = tool;\n acc[name] = rest;\n return acc;\n },\n {} as Record<string, Tool<any, any>>,\n );\n\n const modelContextProvider = {\n getModelContext: () => ({\n tools: toolsWithoutRender,\n }),\n };\n\n unsubscribes.push(modelContext.register(modelContextProvider));\n\n return () => {\n unsubscribes.forEach((fn) => fn());\n };\n }, [toolkit, modelContext]);\n\n const setToolUI = (toolName: string, render: any) => {\n setState((prev) => {\n return {\n ...prev,\n tools: {\n ...prev.tools,\n [toolName]: [...(prev.tools[toolName] ?? []), render],\n },\n };\n });\n\n return () => {\n setState((prev) => {\n return {\n ...prev,\n tools: {\n ...prev.tools,\n [toolName]: prev.tools[toolName]?.filter((r) => r !== render) ?? [],\n },\n };\n });\n };\n };\n\n return tapApi<ToolsApi>({\n getState: () => state,\n setToolUI,\n });\n});\n"],"mappings":";AAAA,SAAS,UAAU,UAAU,iBAAiB;AAC9C,SAAS,cAAc;AACvB,SAAS,uBAAuB;AAKzB,IAAM,QAAQ,SAAS,CAAC,EAAE,QAAQ,MAA6B;AACpE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAqB,OAAO;AAAA,IACpD,OAAO,CAAC;AAAA,EACV,EAAE;AAEF,QAAM,eAAe,gBAAgB;AAErC,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,UAAM,eAA+B,CAAC;AAGtC,eAAW,CAAC,UAAU,IAAI,KAAK,OAAO,QAAQ,OAAO,GAAG;AACtD,UAAI,KAAK,QAAQ;AACf,qBAAa,KAAK,UAAU,UAAU,KAAK,MAAM,CAAC;AAAA,MACpD;AAAA,IACF;AAGA,UAAM,qBAAqB,OAAO,QAAQ,OAAO,EAAE;AAAA,MACjD,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM;AACrB,cAAM,EAAE,QAAQ,GAAG,KAAK,IAAI;AAC5B,YAAI,IAAI,IAAI;AACZ,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AAEA,UAAM,uBAAuB;AAAA,MAC3B,iBAAiB,OAAO;AAAA,QACtB,OAAO;AAAA,MACT;AAAA,IACF;AAEA,iBAAa,KAAK,aAAa,SAAS,oBAAoB,CAAC;AAE7D,WAAO,MAAM;AACX,mBAAa,QAAQ,CAAC,OAAO,GAAG,CAAC;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,SAAS,YAAY,CAAC;AAE1B,QAAM,YAAY,CAAC,UAAkB,WAAgB;AACnD,aAAS,CAAC,SAAS;AACjB,aAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO;AAAA,UACL,GAAG,KAAK;AAAA,UACR,CAAC,QAAQ,GAAG,CAAC,GAAI,KAAK,MAAM,QAAQ,KAAK,CAAC,GAAI,MAAM;AAAA,QACtD;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,eAAS,CAAC,SAAS;AACjB,eAAO;AAAA,UACL,GAAG;AAAA,UACH,OAAO;AAAA,YACL,GAAG,KAAK;AAAA,YACR,CAAC,QAAQ,GAAG,KAAK,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,MAAM,MAAM,KAAK,CAAC;AAAA,UACpE;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,OAAiB;AAAA,IACtB,UAAU,MAAM;AAAA,IAChB;AAAA,EACF,CAAC;AACH,CAAC;","names":[]}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { Unsubscribe } from "@assistant-ui/tap";
|
|
2
|
+
import { ToolCallMessagePartComponent } from "../../types";
|
|
3
|
+
export type ToolsState = {
|
|
4
|
+
tools: Record<string, ToolCallMessagePartComponent[]>;
|
|
5
|
+
};
|
|
2
6
|
export type ToolsApi = {
|
|
3
7
|
getState(): ToolsState;
|
|
8
|
+
setToolUI(toolName: string, render: ToolCallMessagePartComponent): Unsubscribe;
|
|
4
9
|
};
|
|
5
10
|
export type ToolsMeta = {
|
|
6
11
|
source: "root";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tools.d.ts","sourceRoot":"","sources":["../../../src/client/types/Tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Tools.d.ts","sourceRoot":"","sources":["../../../src/client/types/Tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,EAAE,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,IAAI,UAAU,CAAC;IAEvB,SAAS,CACP,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,4BAA4B,GACnC,WAAW,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9B,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { FC, PropsWithChildren } from "react";
|
|
2
|
-
import { ToolUIApi, ToolUIState, ToolUIMeta } from "../../client/types/ToolUI";
|
|
3
2
|
import { MessageClientApi, MessageClientState } from "../../client/types/Message";
|
|
4
3
|
import { ThreadListItemClientApi, ThreadListItemClientState } from "../../client/types/ThreadListItem";
|
|
5
4
|
import { MessagePartClientApi, MessagePartClientState } from "../../client/types/Part";
|
|
@@ -10,12 +9,12 @@ import { Unsubscribe } from "@assistant-ui/tap";
|
|
|
10
9
|
import { AssistantEvent, AssistantEventCallback, AssistantEventSelector } from "../../types/EventTypes";
|
|
11
10
|
import { ThreadListClientApi, ThreadListClientState } from "../../client/types/ThreadList";
|
|
12
11
|
import { AssistantClientProps } from "../../client/AssistantClient";
|
|
13
|
-
import { ToolsApi, ToolsMeta } from "../../client/types/Tools";
|
|
12
|
+
import { ToolsApi, ToolsMeta, ToolsState } from "../../client/types/Tools";
|
|
14
13
|
import { ModelContextApi, ModelContextMeta } from "../../client/types/ModelContext";
|
|
15
14
|
import { DerivedScopesInput } from "../../utils/tap-store/derived-scopes";
|
|
16
15
|
export type AssistantState = {
|
|
17
16
|
readonly threads: ThreadListClientState;
|
|
18
|
-
readonly
|
|
17
|
+
readonly tools: ToolsState;
|
|
19
18
|
readonly threadListItem: ThreadListItemClientState;
|
|
20
19
|
readonly thread: ThreadClientState;
|
|
21
20
|
readonly composer: ComposerClientState;
|
|
@@ -83,7 +82,6 @@ type AttachmentMeta = {
|
|
|
83
82
|
};
|
|
84
83
|
export type AssistantApi = {
|
|
85
84
|
threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;
|
|
86
|
-
toolUIs: AssistantApiField<ToolUIApi, ToolUIMeta>;
|
|
87
85
|
tools: AssistantApiField<ToolsApi, ToolsMeta>;
|
|
88
86
|
modelContext: AssistantApiField<ModelContextApi, ModelContextMeta>;
|
|
89
87
|
threadListItem: AssistantApiField<ThreadListItemClientApi, ThreadListItemMeta>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,EAAE,EACF,iBAAiB,EAIlB,MAAM,OAAO,CAAC;AAGf,OAAO,
|
|
1
|
+
{"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -36,13 +36,6 @@ var AssistantApiContext = createContext({
|
|
|
36
36
|
throw new Error("Threads is only available inside <AssistantProvider />");
|
|
37
37
|
}
|
|
38
38
|
}),
|
|
39
|
-
toolUIs: createAssistantApiField({
|
|
40
|
-
source: null,
|
|
41
|
-
query: {},
|
|
42
|
-
get: () => {
|
|
43
|
-
throw new Error("ToolUIs is only available inside <AssistantProvider />");
|
|
44
|
-
}
|
|
45
|
-
}),
|
|
46
39
|
tools: createAssistantApiField({
|
|
47
40
|
source: null,
|
|
48
41
|
query: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n useEffect,\n} from \"react\";\nimport { useResource } from \"@assistant-ui/tap/react\";\n\nimport { ToolUIApi, ToolUIState, ToolUIMeta } from \"../../client/types/ToolUI\";\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\nimport { ThreadViewportProvider } from \"../providers/ThreadViewportProvider\";\nimport { DevToolsProviderApi } from \"../../devtools/DevToolsHooks\";\nimport {\n AssistantClientProps,\n useAssistantClient,\n} from \"../../client/AssistantClient\";\nimport { ToolsApi, ToolsMeta } from \"../../client/types/Tools\";\nimport {\n ModelContextApi,\n ModelContextMeta,\n} from \"../../client/types/ModelContext\";\nimport {\n DerivedScopes,\n DerivedScopesInput,\n} from \"../../utils/tap-store/derived-scopes\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly toolUIs: ToolUIState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\nexport type AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta =\n | {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n }\n | {\n source: \"root\";\n query: Record<string, never>;\n };\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n toolUIs: AssistantApiField<ToolUIApi, ToolUIMeta>;\n tools: AssistantApiField<ToolsApi, ToolsMeta>;\n modelContext: AssistantApiField<ModelContextApi, ModelContextMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends AssistantEvent>(\n event: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n toolUIs: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"ToolUIs is only available inside <AssistantProvider />\");\n },\n }),\n tools: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Tools is only available inside <AssistantProvider />\");\n },\n }),\n modelContext: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ModelContext is only available inside <AssistantProvider />\",\n );\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n});\n\nexport const useAssistantApiImpl = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\n/**\n * Hook to extend the current AssistantApi with additional derived scope fields and special callbacks.\n * This merges the derived fields with the existing API from context.\n * Fields are automatically memoized based on source and query changes.\n * Special callbacks (on, subscribe, flushSync) use the useEffectEvent pattern to always access latest values.\n *\n * @param scopes - Record of field names to DerivedScope resource elements, plus optional special callbacks\n * @returns The merged AssistantApi\n *\n * @example\n * ```tsx\n * const api = useExtendedAssistantApi({\n * message: DerivedScope({\n * source: \"root\",\n * query: {},\n * get: () => messageApi,\n * }),\n * on: (selector, callback) => {\n * // Custom event filtering logic\n * },\n * });\n * ```\n */\nexport const useExtendedAssistantApi = (\n scopes: DerivedScopesInput,\n): AssistantApi => {\n const baseApi = useAssistantApiImpl();\n const partialApi = useResource(DerivedScopes(scopes));\n return useMemo(() => extendApi(baseApi, partialApi), [baseApi, partialApi]);\n};\n\nconst useExtendedAssistantApiImpl = (\n config: AssistantClientProps,\n): AssistantApi => {\n return useAssistantClient(config);\n};\n\nexport function useAssistantApi(): AssistantApi;\nexport function useAssistantApi(config: AssistantClientProps): AssistantApi;\nexport function useAssistantApi(config?: AssistantClientProps): AssistantApi {\n if (config) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useExtendedAssistantApiImpl(config);\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useAssistantApiImpl();\n }\n}\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nexport const extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<{ api: AssistantApi; devToolsVisible?: boolean }>\n> = ({ api, children, devToolsVisible = true }) => {\n useEffect(() => {\n if (!devToolsVisible || !api.subscribe) return undefined;\n return DevToolsProviderApi.register(api);\n }, [api, devToolsVisible]);\n\n return (\n <AssistantApiContext.Provider value={api}>\n {/* TODO temporarily allow accessing viewport state from outside the viewport */}\n {/* TODO figure out if this behavior should be deprecated, since it is quite hacky */}\n <ThreadViewportProvider>{children}</ThreadViewportProvider>\n </AssistantApiContext.Provider>\n );\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n useEffect,\n} from \"react\";\nimport { useResource } from \"@assistant-ui/tap/react\";\n\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\nimport { ThreadViewportProvider } from \"../providers/ThreadViewportProvider\";\nimport { DevToolsProviderApi } from \"../../devtools/DevToolsHooks\";\nimport {\n AssistantClientProps,\n useAssistantClient,\n} from \"../../client/AssistantClient\";\nimport { ToolsApi, ToolsMeta, ToolsState } from \"../../client/types/Tools\";\nimport {\n ModelContextApi,\n ModelContextMeta,\n} from \"../../client/types/ModelContext\";\nimport {\n DerivedScopes,\n DerivedScopesInput,\n} from \"../../utils/tap-store/derived-scopes\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly tools: ToolsState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\nexport type AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta =\n | {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n }\n | {\n source: \"root\";\n query: Record<string, never>;\n };\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n tools: AssistantApiField<ToolsApi, ToolsMeta>;\n modelContext: AssistantApiField<ModelContextApi, ModelContextMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends AssistantEvent>(\n event: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n tools: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Tools is only available inside <AssistantProvider />\");\n },\n }),\n modelContext: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ModelContext is only available inside <AssistantProvider />\",\n );\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n});\n\nexport const useAssistantApiImpl = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\n/**\n * Hook to extend the current AssistantApi with additional derived scope fields and special callbacks.\n * This merges the derived fields with the existing API from context.\n * Fields are automatically memoized based on source and query changes.\n * Special callbacks (on, subscribe, flushSync) use the useEffectEvent pattern to always access latest values.\n *\n * @param scopes - Record of field names to DerivedScope resource elements, plus optional special callbacks\n * @returns The merged AssistantApi\n *\n * @example\n * ```tsx\n * const api = useExtendedAssistantApi({\n * message: DerivedScope({\n * source: \"root\",\n * query: {},\n * get: () => messageApi,\n * }),\n * on: (selector, callback) => {\n * // Custom event filtering logic\n * },\n * });\n * ```\n */\nexport const useExtendedAssistantApi = (\n scopes: DerivedScopesInput,\n): AssistantApi => {\n const baseApi = useAssistantApiImpl();\n const partialApi = useResource(DerivedScopes(scopes));\n return useMemo(() => extendApi(baseApi, partialApi), [baseApi, partialApi]);\n};\n\nconst useExtendedAssistantApiImpl = (\n config: AssistantClientProps,\n): AssistantApi => {\n return useAssistantClient(config);\n};\n\nexport function useAssistantApi(): AssistantApi;\nexport function useAssistantApi(config: AssistantClientProps): AssistantApi;\nexport function useAssistantApi(config?: AssistantClientProps): AssistantApi {\n if (config) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useExtendedAssistantApiImpl(config);\n } else {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useAssistantApiImpl();\n }\n}\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nexport const extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<{ api: AssistantApi; devToolsVisible?: boolean }>\n> = ({ api, children, devToolsVisible = true }) => {\n useEffect(() => {\n if (!devToolsVisible || !api.subscribe) return undefined;\n return DevToolsProviderApi.register(api);\n }, [api, devToolsVisible]);\n\n return (\n <AssistantApiContext.Provider value={api}>\n {/* TODO temporarily allow accessing viewport state from outside the viewport */}\n {/* TODO figure out if this behavior should be deprecated, since it is quite hacky */}\n <ThreadViewportProvider>{children}</ThreadViewportProvider>\n </AssistantApiContext.Provider>\n );\n};\n"],"mappings":";;;AAEA;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB;AAwB5B;AAAA,EAIE;AAAA,OACK;AAKP,SAAS,8BAA8B;AACvC,SAAS,2BAA2B;AACpC;AAAA,EAEE;AAAA,OACK;AAMP;AAAA,EACE;AAAA,OAEK;AA4SD;AAtNC,IAAM,0BAA0B,CAIrC,WAGmC;AACnC,QAAM,KAAK,OAAO;AAClB,KAAG,SAAS,OAAO;AACnB,KAAG,QAAQ,OAAO;AAClB,SAAO;AACT;AAEA,IAAM,WAAW,MAAM,MAAM;AAAC;AAE9B,IAAM,sBAAsB,cAA4B;AAAA,EACtD,SAAS,wBAAwB;AAAA,IAC/B,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAM;AACT,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAAA,EACF,CAAC;AAAA,EACD,OAAO,wBAAwB;AAAA,IAC7B,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAAA,EACF,CAAC;AAAA,EACD,cAAc,wBAAwB;AAAA,IACpC,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,wBAAwB;AAAA,IACtC,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,QAAQ,wBAAwB;AAAA,IAC9B,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AAAA,EACF,CAAC;AAAA,EACD,UAAU,wBAAwB;AAAA,IAChC,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,SAAS,wBAAwB;AAAA,IAC/B,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,MAAM,wBAAwB;AAAA,IAC5B,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EACD,YAAY,wBAAwB;AAAA,IAClC,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,KAAK,MAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAAA,EAED,WAAW;AAAA,EACX,WAAW;AAAA,EACX,IAAI,CAAC,aAAa;AAChB,UAAM,EAAE,MAAM,IAAI,uBAAuB,QAAQ;AACjD,UAAM,IAAI,MAAM,mDAAmD,KAAK,EAAE;AAAA,EAC5E;AACF,CAAC;AAEM,IAAM,sBAAsB,MAAoB;AACrD,SAAO,WAAW,mBAAmB;AACvC;AAyBO,IAAM,0BAA0B,CACrC,WACiB;AACjB,QAAM,UAAU,oBAAoB;AACpC,QAAM,aAAa,YAAY,cAAc,MAAM,CAAC;AACpD,SAAO,QAAQ,MAAM,UAAU,SAAS,UAAU,GAAG,CAAC,SAAS,UAAU,CAAC;AAC5E;AAEA,IAAM,8BAA8B,CAClC,WACiB;AACjB,SAAO,mBAAmB,MAAM;AAClC;AAIO,SAAS,gBAAgB,QAA6C;AAC3E,MAAI,QAAQ;AAEV,WAAO,4BAA4B,MAAM;AAAA,EAC3C,OAAO;AAEL,WAAO,oBAAoB;AAAA,EAC7B;AACF;AAEA,IAAM,WAAW,CACf,KACA,QACG;AACH,MAAI,QAAQ,SAAU,QAAO;AAC7B,MAAI,QAAQ,SAAU,QAAO;AAE7B,SAAO,IAAI,SAAgB;AACzB,QAAI,GAAG,IAAI;AACX,QAAI,GAAG,IAAI;AAAA,EACb;AACF;AAEA,IAAM,0BAA0B,CAC9B,KACA,QACG;AACH,MAAI,QAAQ,SAAU,QAAO;AAC7B,MAAI,QAAQ,SAAU,QAAO;AAE7B,SAAO,IAAI,SAAgB;AACzB,UAAM,eAAe,IAAI,GAAG,IAAI;AAChC,UAAM,eAAe,IAAI,GAAG,IAAI;AAEhC,WAAO,MAAM;AACX,mBAAa;AACb,mBAAa;AAAA,IACf;AAAA,EACF;AACF;AAEO,IAAM,YAAY,CACvB,KACA,SACiB;AACjB,QAAM,gBAAgB,KAAK;AAC3B,QAAM,gBAAgB,KAAK;AAC3B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,WAAW;AAAA,MACT,IAAI;AAAA,MACJ,iBAAiB;AAAA,IACnB;AAAA,IACA,WAAW,SAAS,IAAI,WAAW,iBAAiB,QAAQ;AAAA,EAC9D;AACF;AAEO,IAAM,oBAET,CAAC,EAAE,KAAK,UAAU,kBAAkB,KAAK,MAAM;AACjD,YAAU,MAAM;AACd,QAAI,CAAC,mBAAmB,CAAC,IAAI,UAAW,QAAO;AAC/C,WAAO,oBAAoB,SAAS,GAAG;AAAA,EACzC,GAAG,CAAC,KAAK,eAAe,CAAC;AAEzB,SACE,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,KAGnC,8BAAC,0BAAwB,UAAS,GACpC;AAEJ;","names":[]}
|
|
@@ -11,8 +11,8 @@ var ProxiedAssistantState = class {
|
|
|
11
11
|
get threads() {
|
|
12
12
|
return this.#api.threads().getState();
|
|
13
13
|
}
|
|
14
|
-
get
|
|
15
|
-
return this.#api.
|
|
14
|
+
get tools() {
|
|
15
|
+
return this.#api.tools().getState();
|
|
16
16
|
}
|
|
17
17
|
get threadListItem() {
|
|
18
18
|
return this.#api.threadListItem().getState();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/context/react/hooks/useAssistantState.tsx"],"sourcesContent":["import { useMemo, useSyncExternalStore, useDebugValue } from \"react\";\nimport {\n AssistantState,\n AssistantApi,\n useAssistantApi,\n} from \"../AssistantApiContext\";\n\nclass ProxiedAssistantState implements AssistantState {\n #api: AssistantApi;\n constructor(api: AssistantApi) {\n this.#api = api;\n }\n\n get threads() {\n return this.#api.threads().getState();\n }\n\n get
|
|
1
|
+
{"version":3,"sources":["../../../../src/context/react/hooks/useAssistantState.tsx"],"sourcesContent":["import { useMemo, useSyncExternalStore, useDebugValue } from \"react\";\nimport {\n AssistantState,\n AssistantApi,\n useAssistantApi,\n} from \"../AssistantApiContext\";\n\nclass ProxiedAssistantState implements AssistantState {\n #api: AssistantApi;\n constructor(api: AssistantApi) {\n this.#api = api;\n }\n\n get threads() {\n return this.#api.threads().getState();\n }\n\n get tools() {\n return this.#api.tools().getState();\n }\n\n get threadListItem() {\n return this.#api.threadListItem().getState();\n }\n\n get thread() {\n return this.#api.thread().getState();\n }\n\n get composer() {\n return this.#api.composer().getState();\n }\n\n get message() {\n return this.#api.message().getState();\n }\n\n get part() {\n return this.#api.part().getState();\n }\n\n get attachment() {\n return this.#api.attachment().getState();\n }\n}\n\nexport const useAssistantState = <T,>(\n selector: (state: AssistantState) => T,\n): T => {\n const api = useAssistantApi();\n const proxiedState = useMemo(() => new ProxiedAssistantState(api), [api]);\n const slice = useSyncExternalStore(\n api.subscribe,\n () => selector(proxiedState),\n () => selector(proxiedState),\n );\n useDebugValue(slice);\n\n if (slice instanceof ProxiedAssistantState)\n throw new Error(\n \"You tried to return the entire AssistantState. This is not supported due to technical limitations.\",\n );\n\n return slice;\n};\n"],"mappings":";AAAA,SAAS,SAAS,sBAAsB,qBAAqB;AAC7D;AAAA,EAGE;AAAA,OACK;AAEP,IAAM,wBAAN,MAAsD;AAAA,EACpD;AAAA,EACA,YAAY,KAAmB;AAC7B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK,KAAK,QAAQ,EAAE,SAAS;AAAA,EACtC;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK,KAAK,MAAM,EAAE,SAAS;AAAA,EACpC;AAAA,EAEA,IAAI,iBAAiB;AACnB,WAAO,KAAK,KAAK,eAAe,EAAE,SAAS;AAAA,EAC7C;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,KAAK,OAAO,EAAE,SAAS;AAAA,EACrC;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,KAAK,KAAK,SAAS,EAAE,SAAS;AAAA,EACvC;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK,KAAK,QAAQ,EAAE,SAAS;AAAA,EACtC;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,KAAK,KAAK,EAAE,SAAS;AAAA,EACnC;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK,KAAK,WAAW,EAAE,SAAS;AAAA,EACzC;AACF;AAEO,IAAM,oBAAoB,CAC/B,aACM;AACN,QAAM,MAAM,gBAAgB;AAC5B,QAAM,eAAe,QAAQ,MAAM,IAAI,sBAAsB,GAAG,GAAG,CAAC,GAAG,CAAC;AACxE,QAAM,QAAQ;AAAA,IACZ,IAAI;AAAA,IACJ,MAAM,SAAS,YAAY;AAAA,IAC3B,MAAM,SAAS,YAAY;AAAA,EAC7B;AACA,gBAAc,KAAK;AAEnB,MAAI,iBAAiB;AACnB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAEF,SAAO;AACT;","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AssistantRuntime } from "./runtime/AssistantRuntime";
|
|
2
|
-
export declare const RuntimeAdapter: import("@assistant-ui/tap").
|
|
2
|
+
export declare const RuntimeAdapter: import("@assistant-ui/tap").Resource<{
|
|
3
3
|
key: string | undefined;
|
|
4
4
|
state: any;
|
|
5
5
|
api: import("../client/types/ThreadList").ThreadListClientApi;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AttachmentClientApi } from "../../client/types/Attachment";
|
|
2
2
|
import { AttachmentRuntime } from "../runtime";
|
|
3
|
-
export declare const AttachmentRuntimeClient: import("@assistant-ui/tap").
|
|
3
|
+
export declare const AttachmentRuntimeClient: import("@assistant-ui/tap").Resource<{
|
|
4
4
|
key: string | undefined;
|
|
5
5
|
state: any;
|
|
6
6
|
api: AttachmentClientApi;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RefObject } from "@assistant-ui/tap";
|
|
2
2
|
import { ComposerRuntime } from "../runtime/ComposerRuntime";
|
|
3
3
|
import { ComposerClientApi } from "../../client/types/Composer";
|
|
4
|
-
export declare const ComposerClient: import("@assistant-ui/tap").
|
|
4
|
+
export declare const ComposerClient: import("@assistant-ui/tap").Resource<{
|
|
5
5
|
key: string | undefined;
|
|
6
6
|
state: any;
|
|
7
7
|
api: ComposerClientApi;
|
|
@@ -4,7 +4,7 @@ export type EventManager = {
|
|
|
4
4
|
on<TEvent extends AssistantEvent>(event: TEvent, callback: AssistantEventCallback<TEvent>): Unsubscribe;
|
|
5
5
|
emit<TEvent extends Exclude<AssistantEvent, "*">>(event: TEvent, payload: AssistantEventMap[TEvent]): void;
|
|
6
6
|
};
|
|
7
|
-
export declare const EventManager: import("@assistant-ui/tap").
|
|
7
|
+
export declare const EventManager: import("@assistant-ui/tap").Resource<{
|
|
8
8
|
on: <TEvent extends AssistantEvent>(event: TEvent, callback: AssistantEventCallback<TEvent>) => () => void;
|
|
9
9
|
emit: <TEvent extends Exclude<AssistantEvent, "*">>(event: TEvent, payload: AssistantEventMap[TEvent]) => void;
|
|
10
10
|
}, undefined>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MessagePartRuntime } from "../runtime/MessagePartRuntime";
|
|
2
2
|
import { MessagePartClientApi } from "../../client/types/Part";
|
|
3
|
-
export declare const MessagePartClient: import("@assistant-ui/tap").
|
|
3
|
+
export declare const MessagePartClient: import("@assistant-ui/tap").Resource<{
|
|
4
4
|
key: string | undefined;
|
|
5
5
|
state: any;
|
|
6
6
|
api: MessagePartClientApi;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MessageRuntime } from "../runtime/MessageRuntime";
|
|
2
2
|
import { RefObject } from "react";
|
|
3
3
|
import { MessageClientApi } from "../../client/types/Message";
|
|
4
|
-
export declare const MessageClient: import("@assistant-ui/tap").
|
|
4
|
+
export declare const MessageClient: import("@assistant-ui/tap").Resource<{
|
|
5
5
|
key: string | undefined;
|
|
6
6
|
state: any;
|
|
7
7
|
api: MessageClientApi;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ThreadListItemRuntime } from "../runtime/ThreadListItemRuntime";
|
|
2
2
|
import { ThreadListItemClientApi } from "../../client/types/ThreadListItem";
|
|
3
|
-
export declare const ThreadListItemClient: import("@assistant-ui/tap").
|
|
3
|
+
export declare const ThreadListItemClient: import("@assistant-ui/tap").Resource<{
|
|
4
4
|
key: string | undefined;
|
|
5
5
|
state: any;
|
|
6
6
|
api: ThreadListItemClientApi;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ThreadListRuntime } from "../runtime/ThreadListRuntime";
|
|
2
2
|
import { ThreadListClientApi } from "../../client/types/ThreadList";
|
|
3
3
|
import type { AssistantRuntime } from "../runtime/AssistantRuntime";
|
|
4
|
-
export declare const ThreadListClient: import("@assistant-ui/tap").
|
|
4
|
+
export declare const ThreadListClient: import("@assistant-ui/tap").Resource<{
|
|
5
5
|
key: string | undefined;
|
|
6
6
|
state: any;
|
|
7
7
|
api: ThreadListClientApi;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ThreadRuntime } from "../runtime/ThreadRuntime";
|
|
2
2
|
import { ThreadClientApi } from "../../client/types/Thread";
|
|
3
|
-
export declare const ThreadClient: import("@assistant-ui/tap").
|
|
3
|
+
export declare const ThreadClient: import("@assistant-ui/tap").Resource<{
|
|
4
4
|
key: string | undefined;
|
|
5
5
|
state: any;
|
|
6
6
|
api: ThreadClientApi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/legacy-runtime/cloud/auiV0.ts"],"sourcesContent":["import { ThreadMessage } from \"../../types\";\nimport { MessageStatus } from \"../../types/AssistantTypes\";\nimport { fromThreadMessageLike } from \"../runtime-cores/external-store/ThreadMessageLike\";\nimport { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../utils/json/is-json\";\nimport { ReadonlyJSONObject, ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { ExportedMessageRepositoryItem } from \"../runtime-cores/utils/MessageRepository\";\n\ntype AuiV0MessageMessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly args: ReadonlyJSONObject;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly argsText: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n };\n\ntype AuiV0Message = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessageMessagePart[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly promptTokens: number;\n readonly completionTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nexport const auiV0Encode = (message: ThreadMessage): AuiV0Message => {\n // TODO attachments are currently intentionally ignored\n // info: ID and createdAt are ignored (we use the server value instead)\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n\n case \"reasoning\": {\n return {\n type: \"reasoning\",\n text: part.text,\n };\n }\n\n case \"source\": {\n return {\n type: \"source\",\n sourceType: part.sourceType,\n id: part.id,\n url: part.url,\n ...(part.title ? { title: part.title } : undefined),\n };\n }\n\n case \"tool-call\": {\n if (!isJSONValue(part.result)) {\n console.warn(\n \"tool-call result is not JSON! \" + JSON.stringify(part),\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? {\n args: part.args,\n }\n : { argsText: part.argsText }),\n ...(part.result\n ? { result: part.result as ReadonlyJSONValue }\n : {}),\n ...(part.isError ? { isError: true } : {}),\n };\n }\n\n default: {\n const unhandledType: \"image\" | \"file\" | \"audio\" = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(message.status\n ? {\n status:\n message.status?.type === \"running\"\n ? {\n type: \"incomplete\",\n reason: \"cancelled\",\n }\n : message.status,\n }\n : undefined),\n };\n};\n\nexport const auiV0Decode = (\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem => {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = fromThreadMessageLike(\n {\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n ...payload,\n },\n cloudMessage.id,\n {\n type: \"complete\",\n reason: \"unknown\",\n },\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n};\n"],"mappings":";AAEA,SAAS,6BAA6B;AAEtC,SAAS,mBAAmB;AAuDrB,IAAM,cAAc,CAAC,YAAyC;AAGnE,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ,QAAQ,IAAI,CAAC,SAAS;AACrC,YAAM,OAAO,KAAK;AAClB,cAAQ,MAAM;AAAA,QACZ,KAAK,QAAQ;AACX,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,IAAI,KAAK;AAAA,YACT,KAAK,KAAK;AAAA,YACV,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI;AAAA,UAC3C;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,cAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,oBAAQ;AAAA,cACN,mCAAmC,KAAK,UAAU,IAAI;AAAA,YACxD;AAAA,UACF;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,UAAU,KAAK;AAAA,YACf,GAAI,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,WACnC;AAAA,cACE,MAAM,KAAK;AAAA,YACb,IACA,EAAE,UAAU,KAAK,SAAS;AAAA,YAC9B,GAAI,KAAK,SACL,EAAE,QAAQ,KAAK,OAA4B,IAC3C,CAAC;AAAA,YACL,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC;AAAA,UAC1C;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,
|
|
1
|
+
{"version":3,"sources":["../../../src/legacy-runtime/cloud/auiV0.ts"],"sourcesContent":["import { ThreadMessage } from \"../../types\";\nimport { MessageStatus } from \"../../types/AssistantTypes\";\nimport { fromThreadMessageLike } from \"../runtime-cores/external-store/ThreadMessageLike\";\nimport { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../utils/json/is-json\";\nimport { ReadonlyJSONObject, ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { ExportedMessageRepositoryItem } from \"../runtime-cores/utils/MessageRepository\";\n\ntype AuiV0MessageMessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly args: ReadonlyJSONObject;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly argsText: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n };\n\ntype AuiV0Message = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessageMessagePart[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly promptTokens: number;\n readonly completionTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nexport const auiV0Encode = (message: ThreadMessage): AuiV0Message => {\n // TODO attachments are currently intentionally ignored\n // info: ID and createdAt are ignored (we use the server value instead)\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n\n case \"reasoning\": {\n return {\n type: \"reasoning\",\n text: part.text,\n };\n }\n\n case \"source\": {\n return {\n type: \"source\",\n sourceType: part.sourceType,\n id: part.id,\n url: part.url,\n ...(part.title ? { title: part.title } : undefined),\n };\n }\n\n case \"tool-call\": {\n if (!isJSONValue(part.result)) {\n console.warn(\n \"tool-call result is not JSON! \" + JSON.stringify(part),\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? {\n args: part.args,\n }\n : { argsText: part.argsText }),\n ...(part.result\n ? { result: part.result as ReadonlyJSONValue }\n : {}),\n ...(part.isError ? { isError: true } : {}),\n };\n }\n\n default: {\n const unhandledType: \"image\" | \"file\" | \"audio\" | \"data\" = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(message.status\n ? {\n status:\n message.status?.type === \"running\"\n ? {\n type: \"incomplete\",\n reason: \"cancelled\",\n }\n : message.status,\n }\n : undefined),\n };\n};\n\nexport const auiV0Decode = (\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem => {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = fromThreadMessageLike(\n {\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n ...payload,\n },\n cloudMessage.id,\n {\n type: \"complete\",\n reason: \"unknown\",\n },\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n};\n"],"mappings":";AAEA,SAAS,6BAA6B;AAEtC,SAAS,mBAAmB;AAuDrB,IAAM,cAAc,CAAC,YAAyC;AAGnE,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ,QAAQ,IAAI,CAAC,SAAS;AACrC,YAAM,OAAO,KAAK;AAClB,cAAQ,MAAM;AAAA,QACZ,KAAK,QAAQ;AACX,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,KAAK;AAAA,UACb;AAAA,QACF;AAAA,QAEA,KAAK,UAAU;AACb,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,IAAI,KAAK;AAAA,YACT,KAAK,KAAK;AAAA,YACV,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI;AAAA,UAC3C;AAAA,QACF;AAAA,QAEA,KAAK,aAAa;AAChB,cAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,oBAAQ;AAAA,cACN,mCAAmC,KAAK,UAAU,IAAI;AAAA,YACxD;AAAA,UACF;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY,KAAK;AAAA,YACjB,UAAU,KAAK;AAAA,YACf,GAAI,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,WACnC;AAAA,cACE,MAAM,KAAK;AAAA,YACb,IACA,EAAE,UAAU,KAAK,SAAS;AAAA,YAC9B,GAAI,KAAK,SACL,EAAE,QAAQ,KAAK,OAA4B,IAC3C,CAAC;AAAA,YACL,GAAI,KAAK,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC;AAAA,UAC1C;AAAA,QACF;AAAA,QAEA,SAAS;AACP,gBAAM,gBAAqD;AAC3D,gBAAM,IAAI;AAAA,YACR,8CAA8C,aAAa;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACD,UAAU,QAAQ;AAAA,IAClB,GAAI,QAAQ,SACR;AAAA,MACE,QACE,QAAQ,QAAQ,SAAS,YACrB;AAAA,QACE,MAAM;AAAA,QACN,QAAQ;AAAA,MACV,IACA,QAAQ;AAAA,IAChB,IACA;AAAA,EACN;AACF;AAEO,IAAM,cAAc,CACzB,iBACkC;AAClC,QAAM,UAAU,aAAa;AAC7B,QAAM,UAAU;AAAA,IACd;AAAA,MACE,IAAI,aAAa;AAAA,MACjB,WAAW,aAAa;AAAA,MACxB,GAAG;AAAA,IACL;AAAA,IACA,aAAa;AAAA,IACb;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU,aAAa;AAAA,IACvB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -7,6 +7,6 @@ export declare function useRunManager(config: {
|
|
|
7
7
|
onRun: (signal: AbortSignal) => Promise<void>;
|
|
8
8
|
onFinish?: (() => void) | undefined;
|
|
9
9
|
onCancel?: (() => void) | undefined;
|
|
10
|
-
onError?: ((error: Error) => void) | undefined;
|
|
10
|
+
onError?: ((error: Error) => void | Promise<void>) | undefined;
|
|
11
11
|
}): RunManager;
|
|
12
12
|
//# sourceMappingURL=runManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runManager.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/runManager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC,CAAC;AAEH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"runManager.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/runManager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC,CAAC;AAEH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CAChE,GAAG,UAAU,CA0Db"}
|