@assistant-ui/core 0.2.12 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/thread-history.d.ts +3 -1
- package/dist/adapters/thread-history.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js.map +1 -1
- package/dist/react/AssistantProvider.js +6 -1
- package/dist/react/AssistantProvider.js.map +1 -1
- package/dist/react/RuntimeAdapter.d.ts +1 -1
- package/dist/react/RuntimeAdapter.d.ts.map +1 -1
- package/dist/react/RuntimeAdapter.js +16 -6
- package/dist/react/RuntimeAdapter.js.map +1 -1
- package/dist/react/client/DataRenderers.d.ts +1 -8
- package/dist/react/client/DataRenderers.d.ts.map +1 -1
- package/dist/react/client/DataRenderers.js +3 -2
- package/dist/react/client/DataRenderers.js.map +1 -1
- package/dist/react/client/Interactables.d.ts +1 -1
- package/dist/react/client/Interactables.d.ts.map +1 -1
- package/dist/react/client/Interactables.js +4 -3
- package/dist/react/client/Interactables.js.map +1 -1
- package/dist/react/client/Tools.d.ts +2 -13
- package/dist/react/client/Tools.d.ts.map +1 -1
- package/dist/react/client/Tools.js +4 -3
- package/dist/react/client/Tools.js.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.d.ts +3 -2
- package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageGroupedParts.js +4 -4
- package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
- package/dist/react/primitives/message/MessageParts.d.ts +28 -1
- package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
- package/dist/react/primitives/message/MessageParts.js +43 -9
- 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 -2
- package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +2 -0
- package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +2 -0
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +1 -0
- package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +6 -0
- package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +2 -0
- package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
- package/dist/react/utils/groupParts.d.ts +13 -1
- package/dist/react/utils/groupParts.d.ts.map +1 -1
- package/dist/react/utils/groupParts.js +17 -5
- package/dist/react/utils/groupParts.js.map +1 -1
- package/dist/runtime/api/bindings.d.ts +1 -0
- package/dist/runtime/api/bindings.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.d.ts +2 -0
- package/dist/runtime/api/message-runtime.d.ts.map +1 -1
- package/dist/runtime/api/message-runtime.js +5 -0
- package/dist/runtime/api/message-runtime.js.map +1 -1
- package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-list-runtime.js +1 -0
- package/dist/runtime/api/thread-list-runtime.js.map +1 -1
- package/dist/runtime/api/thread-runtime.d.ts +3 -0
- package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
- package/dist/runtime/api/thread-runtime.js +4 -0
- package/dist/runtime/api/thread-runtime.js.map +1 -1
- package/dist/runtime/base/base-thread-runtime-core.d.ts +1 -0
- 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/branch/external-thread-branch-adapter.d.ts +30 -0
- package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -0
- package/dist/runtime/branch/external-thread-branch-adapter.js +0 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +1 -0
- package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
- package/dist/runtime/interfaces/thread-runtime-core.d.ts +2 -0
- package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-adapter.d.ts +1 -0
- package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
- package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +1 -0
- 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 +13 -0
- package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/local-runtime-options.d.ts +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts +8 -1
- package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
- package/dist/runtimes/local/local-thread-runtime-core.js +63 -5
- package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
- package/dist/runtimes/local/should-continue.js +4 -2
- package/dist/runtimes/local/should-continue.js.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +2 -0
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +4 -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 +4 -0
- package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +1 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -0
- package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
- package/dist/runtimes/remote-thread-list/types.d.ts +1 -0
- package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
- package/dist/store/clients/chain-of-thought-client.d.ts +2 -7
- package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
- package/dist/store/clients/chain-of-thought-client.js +3 -2
- package/dist/store/clients/chain-of-thought-client.js.map +1 -1
- package/dist/store/clients/model-context-client.d.ts +1 -1
- package/dist/store/clients/model-context-client.d.ts.map +1 -1
- package/dist/store/clients/model-context-client.js +3 -2
- package/dist/store/clients/model-context-client.js.map +1 -1
- package/dist/store/clients/no-op-composer-client.d.ts +2 -4
- package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
- package/dist/store/clients/no-op-composer-client.js +3 -2
- package/dist/store/clients/no-op-composer-client.js.map +1 -1
- package/dist/store/clients/runtime-adapter.d.ts +1 -3
- package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
- package/dist/store/clients/runtime-adapter.js +2 -15
- package/dist/store/clients/runtime-adapter.js.map +1 -1
- package/dist/store/clients/suggestions.d.ts +1 -4
- package/dist/store/clients/suggestions.d.ts.map +1 -1
- package/dist/store/clients/suggestions.js +6 -4
- package/dist/store/clients/suggestions.js.map +1 -1
- package/dist/store/clients/thread-message-client.d.ts +1 -1
- package/dist/store/clients/thread-message-client.d.ts.map +1 -1
- package/dist/store/clients/thread-message-client.js +14 -10
- package/dist/store/clients/thread-message-client.js.map +1 -1
- package/dist/store/internal.d.ts +2 -2
- package/dist/store/internal.js +2 -2
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/attachment-runtime-client.js +3 -2
- package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.d.ts +2 -10
- package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/composer-runtime-client.js +9 -6
- package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-part-runtime-client.js +3 -2
- package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.d.ts +2 -7
- package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/message-runtime-client.js +10 -6
- package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js +3 -2
- package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +2 -5
- package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-list-runtime-client.js +6 -4
- package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.d.ts +2 -4
- package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
- package/dist/store/runtime-clients/thread-runtime-client.js +7 -4
- package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
- package/dist/store/scopes/message.d.ts +1 -0
- package/dist/store/scopes/message.d.ts.map +1 -1
- package/dist/store/scopes/thread-list-item.d.ts +1 -0
- package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
- package/dist/store/scopes/thread.d.ts +1 -0
- package/dist/store/scopes/thread.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/adapters/thread-history.ts +2 -0
- package/src/index.ts +1 -0
- package/src/react/AssistantProvider.tsx +3 -1
- package/src/react/RuntimeAdapter.ts +25 -8
- package/src/react/client/DataRenderers.ts +42 -45
- package/src/react/client/Interactables.ts +261 -261
- package/src/react/client/Tools.ts +6 -4
- package/src/react/primitives/message/MessageGroupedParts.tsx +19 -7
- package/src/react/primitives/message/MessageParts.tsx +64 -13
- package/src/react/providers/TextMessagePartProvider.tsx +5 -3
- package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +1 -0
- package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +11 -0
- package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +6 -0
- package/src/react/utils/groupParts.ts +27 -0
- package/src/runtime/api/bindings.ts +1 -0
- package/src/runtime/api/message-runtime.ts +7 -0
- package/src/runtime/api/thread-list-runtime.ts +1 -0
- package/src/runtime/api/thread-runtime.ts +7 -0
- package/src/runtime/base/base-thread-runtime-core.ts +1 -0
- package/src/runtime/branch/external-thread-branch-adapter.ts +26 -0
- package/src/runtime/interfaces/thread-list-runtime-core.ts +1 -0
- package/src/runtime/interfaces/thread-runtime-core.ts +2 -0
- package/src/runtimes/external-store/external-store-adapter.ts +1 -0
- package/src/runtimes/external-store/external-store-thread-runtime-core.ts +24 -0
- package/src/runtimes/local/local-runtime-options.ts +1 -1
- package/src/runtimes/local/local-thread-runtime-core.test.ts +311 -0
- package/src/runtimes/local/local-thread-runtime-core.ts +104 -7
- package/src/runtimes/local/should-continue.ts +23 -13
- package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +5 -0
- package/src/runtimes/remote-thread-list/empty-thread-core.ts +5 -0
- package/src/runtimes/remote-thread-list/remote-thread-state.ts +2 -0
- package/src/runtimes/remote-thread-list/types.ts +1 -0
- package/src/store/clients/chain-of-thought-client.ts +5 -3
- package/src/store/clients/model-context-client.test.ts +5 -4
- package/src/store/clients/model-context-client.ts +21 -21
- package/src/store/clients/no-op-composer-client.ts +5 -3
- package/src/store/clients/runtime-adapter.ts +0 -24
- package/src/store/clients/suggestions.ts +9 -18
- package/src/store/clients/thread-message-client.ts +29 -26
- package/src/store/internal.ts +1 -4
- package/src/store/runtime-clients/attachment-runtime-client.ts +14 -14
- package/src/store/runtime-clients/composer-runtime-client.ts +30 -24
- package/src/store/runtime-clients/message-part-runtime-client.ts +5 -3
- package/src/store/runtime-clients/message-runtime-client.ts +26 -19
- package/src/store/runtime-clients/thread-list-item-runtime-client.ts +5 -3
- package/src/store/runtime-clients/thread-list-runtime-client.ts +10 -6
- package/src/store/runtime-clients/thread-runtime-client.ts +11 -6
- package/src/store/scopes/message.ts +1 -0
- package/src/store/scopes/thread-list-item.ts +1 -0
- package/src/store/scopes/thread.ts +1 -0
- package/src/tests/external-store-thread-runtime-core.test.ts +57 -0
- package/src/tests/groupMessageParts.test.ts +84 -0
- package/src/tests/groupParts.test.ts +55 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { groupMessageParts } from "../react/primitives/message/MessageParts";
|
|
3
|
+
|
|
4
|
+
describe("groupMessageParts idKey", () => {
|
|
5
|
+
it("leaves idKey undefined when partIds is not provided", () => {
|
|
6
|
+
const ranges = groupMessageParts(["tool-call", "tool-call"], false);
|
|
7
|
+
expect(ranges).toEqual([{ type: "toolGroup", startIndex: 0, endIndex: 1 }]);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it("derives a tool group's idKey from its first part", () => {
|
|
11
|
+
const ranges = groupMessageParts(
|
|
12
|
+
["text", "tool-call", "tool-call"],
|
|
13
|
+
false,
|
|
14
|
+
[undefined, "t1", "t2"],
|
|
15
|
+
);
|
|
16
|
+
expect(ranges).toEqual([
|
|
17
|
+
{ type: "single", index: 0 },
|
|
18
|
+
{ type: "toolGroup", startIndex: 1, endIndex: 2, idKey: "id:t1" },
|
|
19
|
+
]);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("keeps a group's idKey stable when the group shifts to a new index", () => {
|
|
23
|
+
const live = groupMessageParts(["text", "tool-call", "tool-call"], false, [
|
|
24
|
+
undefined,
|
|
25
|
+
"t1",
|
|
26
|
+
"t2",
|
|
27
|
+
]);
|
|
28
|
+
const settled = groupMessageParts(
|
|
29
|
+
["reasoning", "text", "tool-call", "tool-call"],
|
|
30
|
+
false,
|
|
31
|
+
[undefined, undefined, "t1", "t2"],
|
|
32
|
+
);
|
|
33
|
+
const liveGroup = live.find((r) => r.type === "toolGroup")!;
|
|
34
|
+
const settledGroup = settled.find((r) => r.type === "toolGroup")!;
|
|
35
|
+
expect(liveGroup.idKey).toBe("id:t1");
|
|
36
|
+
expect(settledGroup.idKey).toBe("id:t1");
|
|
37
|
+
expect(settledGroup).toMatchObject({ startIndex: 2, endIndex: 3 });
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("demotes a duplicate id in a later range to undefined", () => {
|
|
41
|
+
const ranges = groupMessageParts(
|
|
42
|
+
["tool-call", "text", "tool-call"],
|
|
43
|
+
false,
|
|
44
|
+
["t1", undefined, "t1"],
|
|
45
|
+
);
|
|
46
|
+
const groups = ranges.filter((r) => r.type === "toolGroup");
|
|
47
|
+
expect(groups.map((r) => r.idKey)).toEqual(["id:t1", undefined]);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("does not assign an idKey to reasoning groups", () => {
|
|
51
|
+
const ranges = groupMessageParts(["reasoning", "reasoning"], false, [
|
|
52
|
+
undefined,
|
|
53
|
+
undefined,
|
|
54
|
+
]);
|
|
55
|
+
expect(ranges).toEqual([
|
|
56
|
+
{ type: "reasoningGroup", startIndex: 0, endIndex: 1 },
|
|
57
|
+
]);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("keeps a chain-of-thought group structural when it opens with reasoning", () => {
|
|
61
|
+
const ranges = groupMessageParts(["reasoning", "tool-call"], true, [
|
|
62
|
+
undefined,
|
|
63
|
+
"t1",
|
|
64
|
+
]);
|
|
65
|
+
expect(ranges).toEqual([
|
|
66
|
+
{ type: "chainOfThoughtGroup", startIndex: 0, endIndex: 1 },
|
|
67
|
+
]);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("derives a chain-of-thought group's idKey when it opens with a tool call", () => {
|
|
71
|
+
const ranges = groupMessageParts(["tool-call", "reasoning"], true, [
|
|
72
|
+
"t1",
|
|
73
|
+
undefined,
|
|
74
|
+
]);
|
|
75
|
+
expect(ranges).toEqual([
|
|
76
|
+
{
|
|
77
|
+
type: "chainOfThoughtGroup",
|
|
78
|
+
startIndex: 0,
|
|
79
|
+
endIndex: 1,
|
|
80
|
+
idKey: "id:t1",
|
|
81
|
+
},
|
|
82
|
+
]);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
@@ -268,3 +268,58 @@ describe("groupPartByType", () => {
|
|
|
268
268
|
expect(keyA).not.toBe(keyB);
|
|
269
269
|
});
|
|
270
270
|
});
|
|
271
|
+
|
|
272
|
+
describe("buildGroupTree idKey", () => {
|
|
273
|
+
const ids = (values: readonly (string | undefined)[]) => values;
|
|
274
|
+
|
|
275
|
+
it("leaves idKey undefined when partIds is not provided", () => {
|
|
276
|
+
const tree = buildGroupTree(asPaths([["a"], ["a"]]));
|
|
277
|
+
const group = tree[0]!;
|
|
278
|
+
expect(group.idKey).toBeUndefined();
|
|
279
|
+
if (group.type === "group") {
|
|
280
|
+
expect(group.children.every((c) => c.idKey === undefined)).toBe(true);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
it("derives group idKey from the first part of the group", () => {
|
|
285
|
+
const tree = buildGroupTree(asPaths([["a"], ["a"]]), ids(["t1", "t2"]));
|
|
286
|
+
const group = tree[0]!;
|
|
287
|
+
expect(group.idKey).toBe("id:t1");
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
it("keeps group idKey undefined when the first part has no id", () => {
|
|
291
|
+
const tree = buildGroupTree(
|
|
292
|
+
asPaths([["a"], ["a"]]),
|
|
293
|
+
ids([undefined, "t2"]),
|
|
294
|
+
);
|
|
295
|
+
expect(tree[0]!.idKey).toBeUndefined();
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
it("assigns leaf idKeys and lets a group and its first leaf share an id across levels", () => {
|
|
299
|
+
const tree = buildGroupTree(asPaths([["a"], ["a"]]), ids(["t1", "t2"]));
|
|
300
|
+
const group = tree[0]!;
|
|
301
|
+
if (group.type !== "group") throw new Error("expected group");
|
|
302
|
+
expect(group.idKey).toBe("id:t1");
|
|
303
|
+
expect(group.children.map((c) => c.idKey)).toEqual(["id:t1", "id:t2"]);
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
it("demotes duplicate ids among siblings to undefined", () => {
|
|
307
|
+
const tree = buildGroupTree(asPaths([[], [], []]), ids(["t1", "t1", "t2"]));
|
|
308
|
+
expect(tree.map((n) => n.idKey)).toEqual(["id:t1", undefined, "id:t2"]);
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
it("keeps a group's idKey stable when parts reorder across rebuilds", () => {
|
|
312
|
+
const live = buildGroupTree(
|
|
313
|
+
asPaths([[], ["a"], [], ["a"]]),
|
|
314
|
+
ids([undefined, "t1", undefined, "t2"]),
|
|
315
|
+
);
|
|
316
|
+
const settled = buildGroupTree(
|
|
317
|
+
asPaths([[], [], ["a"], ["a"]]),
|
|
318
|
+
ids([undefined, undefined, "t1", "t2"]),
|
|
319
|
+
);
|
|
320
|
+
const liveFirstGroup = live.find((n) => n.type === "group")!;
|
|
321
|
+
const settledGroup = settled.find((n) => n.type === "group")!;
|
|
322
|
+
expect(liveFirstGroup.idKey).toBe("id:t1");
|
|
323
|
+
expect(settledGroup.idKey).toBe("id:t1");
|
|
324
|
+
});
|
|
325
|
+
});
|