@assistant-ui/core 0.1.7 → 0.1.9

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.
Files changed (152) hide show
  1. package/dist/adapters/attachment.d.ts +4 -0
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +1 -1
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/index.d.ts +10 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +4 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/adapters/mention.d.ts +24 -0
  10. package/dist/adapters/mention.d.ts.map +1 -0
  11. package/dist/adapters/mention.js +42 -0
  12. package/dist/adapters/mention.js.map +1 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/react/RuntimeAdapter.js +5 -6
  18. package/dist/react/RuntimeAdapter.js.map +1 -1
  19. package/dist/react/client/Interactables.d.ts +3 -0
  20. package/dist/react/client/Interactables.d.ts.map +1 -0
  21. package/dist/react/client/Interactables.js +173 -0
  22. package/dist/react/client/Interactables.js.map +1 -0
  23. package/dist/react/client/Tools.js +5 -6
  24. package/dist/react/client/Tools.js.map +1 -1
  25. package/dist/react/index.d.ts +6 -0
  26. package/dist/react/index.d.ts.map +1 -1
  27. package/dist/react/index.js +5 -0
  28. package/dist/react/index.js.map +1 -1
  29. package/dist/react/model-context/makeInteractable.d.ts +10 -0
  30. package/dist/react/model-context/makeInteractable.d.ts.map +1 -0
  31. package/dist/react/model-context/makeInteractable.js +10 -0
  32. package/dist/react/model-context/makeInteractable.js.map +1 -0
  33. package/dist/react/model-context/useInteractable.d.ts +16 -0
  34. package/dist/react/model-context/useInteractable.d.ts.map +1 -0
  35. package/dist/react/model-context/useInteractable.js +36 -0
  36. package/dist/react/model-context/useInteractable.js.map +1 -0
  37. package/dist/react/primitive-hooks/useComposerSend.d.ts +2 -1
  38. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  39. package/dist/react/primitive-hooks/useComposerSend.js +5 -3
  40. package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
  41. package/dist/react/primitives/composer/ComposerQueue.d.ts +31 -0
  42. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -0
  43. package/dist/react/primitives/composer/ComposerQueue.js +30 -0
  44. package/dist/react/primitives/composer/ComposerQueue.js.map +1 -0
  45. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  46. package/dist/react/primitives/message/MessageParts.js +2 -0
  47. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  48. package/dist/react/providers/QueueItemByIndexProvider.d.ts +6 -0
  49. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -0
  50. package/dist/react/providers/QueueItemByIndexProvider.js +13 -0
  51. package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -0
  52. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  53. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +1 -0
  54. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  55. package/dist/react/types/scopes/interactables.d.ts +39 -0
  56. package/dist/react/types/scopes/interactables.d.ts.map +1 -0
  57. package/dist/react/types/scopes/interactables.js +2 -0
  58. package/dist/react/types/scopes/interactables.js.map +1 -0
  59. package/dist/react/types/store-augmentation.d.ts +2 -0
  60. package/dist/react/types/store-augmentation.d.ts.map +1 -1
  61. package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -1
  62. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  63. package/dist/runtime/base/base-composer-runtime-core.js +33 -8
  64. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  65. package/dist/runtime/interfaces/composer-runtime-core.d.ts +1 -1
  66. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  67. package/dist/runtime/interfaces/thread-runtime-core.d.ts +1 -0
  68. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  69. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  70. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +2 -0
  71. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  72. package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -0
  73. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  74. package/dist/runtimes/local/local-thread-runtime-core.js +1 -0
  75. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  76. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -0
  77. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  78. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +1 -0
  79. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  80. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  81. package/dist/runtimes/remote-thread-list/empty-thread-core.js +1 -0
  82. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  83. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +9 -0
  84. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  85. package/dist/runtimes/remote-thread-list/optimistic-state.js +20 -0
  86. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  87. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  88. package/dist/store/clients/no-op-composer-client.js +4 -0
  89. package/dist/store/clients/no-op-composer-client.js.map +1 -1
  90. package/dist/store/clients/runtime-adapter.d.ts +1 -1
  91. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  92. package/dist/store/clients/runtime-adapter.js +19 -26
  93. package/dist/store/clients/runtime-adapter.js.map +1 -1
  94. package/dist/store/index.d.ts +2 -1
  95. package/dist/store/index.d.ts.map +1 -1
  96. package/dist/store/index.js.map +1 -1
  97. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  98. package/dist/store/runtime-clients/composer-runtime-client.js +16 -5
  99. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  100. package/dist/store/scope-registration.d.ts +2 -0
  101. package/dist/store/scope-registration.d.ts.map +1 -1
  102. package/dist/store/scopes/composer.d.ts +25 -1
  103. package/dist/store/scopes/composer.d.ts.map +1 -1
  104. package/dist/store/scopes/queue-item.d.ts +20 -0
  105. package/dist/store/scopes/queue-item.d.ts.map +1 -0
  106. package/dist/store/scopes/queue-item.js +2 -0
  107. package/dist/store/scopes/queue-item.js.map +1 -0
  108. package/dist/types/index.d.ts +6 -0
  109. package/dist/types/index.d.ts.map +1 -0
  110. package/dist/types/index.js +2 -0
  111. package/dist/types/index.js.map +1 -0
  112. package/dist/types/mention.d.ts +32 -0
  113. package/dist/types/mention.d.ts.map +1 -0
  114. package/dist/types/mention.js +2 -0
  115. package/dist/types/mention.js.map +1 -0
  116. package/package.json +11 -11
  117. package/src/adapters/attachment.ts +1 -1
  118. package/src/adapters/index.ts +34 -0
  119. package/src/adapters/mention.ts +77 -0
  120. package/src/index.ts +11 -0
  121. package/src/react/RuntimeAdapter.ts +5 -7
  122. package/src/react/client/Interactables.ts +233 -0
  123. package/src/react/client/Tools.ts +5 -6
  124. package/src/react/index.ts +24 -0
  125. package/src/react/model-context/makeInteractable.ts +21 -0
  126. package/src/react/model-context/useInteractable.ts +73 -0
  127. package/src/react/primitive-hooks/useComposerSend.ts +11 -4
  128. package/src/react/primitives/composer/ComposerQueue.tsx +58 -0
  129. package/src/react/primitives/message/MessageParts.tsx +2 -0
  130. package/src/react/providers/QueueItemByIndexProvider.tsx +21 -0
  131. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +1 -0
  132. package/src/react/types/scopes/interactables.ts +44 -0
  133. package/src/react/types/store-augmentation.ts +2 -0
  134. package/src/runtime/base/base-composer-runtime-core.ts +45 -9
  135. package/src/runtime/interfaces/composer-runtime-core.ts +4 -1
  136. package/src/runtime/interfaces/thread-runtime-core.ts +1 -0
  137. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +2 -0
  138. package/src/runtimes/local/local-thread-runtime-core.ts +1 -0
  139. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +1 -0
  140. package/src/runtimes/remote-thread-list/empty-thread-core.ts +1 -0
  141. package/src/runtimes/remote-thread-list/optimistic-state.ts +27 -0
  142. package/src/store/clients/no-op-composer-client.ts +4 -0
  143. package/src/store/clients/runtime-adapter.ts +20 -31
  144. package/src/store/index.ts +7 -0
  145. package/src/store/runtime-clients/composer-runtime-client.ts +22 -7
  146. package/src/store/scope-registration.ts +2 -0
  147. package/src/store/scopes/composer.ts +26 -1
  148. package/src/store/scopes/queue-item.ts +20 -0
  149. package/src/tests/OptimisticState-list-race.test.ts +256 -0
  150. package/src/tests/mention-formatter.test.ts +112 -0
  151. package/src/types/index.ts +47 -0
  152. package/src/types/mention.ts +50 -0
@@ -0,0 +1,112 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { unstable_defaultDirectiveFormatter } from "../adapters/mention";
3
+
4
+ describe("unstable_defaultDirectiveFormatter", () => {
5
+ describe("serialize", () => {
6
+ it("serializes with id === label (no name attr)", () => {
7
+ expect(
8
+ unstable_defaultDirectiveFormatter.serialize({
9
+ id: "weather",
10
+ type: "tool",
11
+ label: "weather",
12
+ }),
13
+ ).toBe(":tool[weather]");
14
+ });
15
+
16
+ it("serializes with id !== label (includes name attr)", () => {
17
+ expect(
18
+ unstable_defaultDirectiveFormatter.serialize({
19
+ id: "get_weather",
20
+ type: "tool",
21
+ label: "Weather",
22
+ }),
23
+ ).toBe(":tool[Weather]{name=get_weather}");
24
+ });
25
+ });
26
+
27
+ describe("parse", () => {
28
+ it("parses plain text", () => {
29
+ expect(unstable_defaultDirectiveFormatter.parse("hello world")).toEqual([
30
+ { kind: "text", text: "hello world" },
31
+ ]);
32
+ });
33
+
34
+ it("parses a single directive without name attr", () => {
35
+ expect(
36
+ unstable_defaultDirectiveFormatter.parse("use :tool[weather] please"),
37
+ ).toEqual([
38
+ { kind: "text", text: "use " },
39
+ { kind: "mention", type: "tool", label: "weather", id: "weather" },
40
+ { kind: "text", text: " please" },
41
+ ]);
42
+ });
43
+
44
+ it("parses a directive with name attr", () => {
45
+ expect(
46
+ unstable_defaultDirectiveFormatter.parse(
47
+ ":tool[Weather]{name=get_weather}",
48
+ ),
49
+ ).toEqual([
50
+ {
51
+ kind: "mention",
52
+ type: "tool",
53
+ label: "Weather",
54
+ id: "get_weather",
55
+ },
56
+ ]);
57
+ });
58
+
59
+ it("parses multiple directives in text", () => {
60
+ const result = unstable_defaultDirectiveFormatter.parse(
61
+ ":tool[a] and :tool[b]{name=bb}",
62
+ );
63
+ expect(result).toHaveLength(3);
64
+ expect(result[0]).toEqual({
65
+ kind: "mention",
66
+ type: "tool",
67
+ label: "a",
68
+ id: "a",
69
+ });
70
+ expect(result[1]).toEqual({ kind: "text", text: " and " });
71
+ expect(result[2]).toEqual({
72
+ kind: "mention",
73
+ type: "tool",
74
+ label: "b",
75
+ id: "bb",
76
+ });
77
+ });
78
+
79
+ it("parses hyphenated types", () => {
80
+ expect(
81
+ unstable_defaultDirectiveFormatter.parse(
82
+ ":data-source[My DB]{name=db_1}",
83
+ ),
84
+ ).toEqual([
85
+ {
86
+ kind: "mention",
87
+ type: "data-source",
88
+ label: "My DB",
89
+ id: "db_1",
90
+ },
91
+ ]);
92
+ });
93
+
94
+ it("roundtrips serialize → parse", () => {
95
+ const item = {
96
+ id: "get_weather",
97
+ type: "tool",
98
+ label: "Weather",
99
+ };
100
+ const serialized = unstable_defaultDirectiveFormatter.serialize(item);
101
+ const parsed = unstable_defaultDirectiveFormatter.parse(serialized);
102
+ expect(parsed).toEqual([
103
+ {
104
+ kind: "mention",
105
+ type: "tool",
106
+ label: "Weather",
107
+ id: "get_weather",
108
+ },
109
+ ]);
110
+ });
111
+ });
112
+ });
@@ -0,0 +1,47 @@
1
+ export type {
2
+ // Message parts
3
+ TextMessagePart,
4
+ ReasoningMessagePart,
5
+ SourceMessagePart,
6
+ ImageMessagePart,
7
+ FileMessagePart,
8
+ DataMessagePart,
9
+ Unstable_AudioMessagePart,
10
+ ToolCallMessagePart,
11
+ ThreadUserMessagePart,
12
+ ThreadAssistantMessagePart,
13
+ // Message status
14
+ MessagePartStatus,
15
+ ToolCallMessagePartStatus,
16
+ MessageStatus,
17
+ // Thread messages
18
+ MessageTiming,
19
+ ThreadStep,
20
+ ThreadSystemMessage,
21
+ ThreadUserMessage,
22
+ ThreadAssistantMessage,
23
+ ThreadMessage,
24
+ MessageRole,
25
+ // Config
26
+ RunConfig,
27
+ AppendMessage,
28
+ } from "./message";
29
+
30
+ export type {
31
+ Attachment,
32
+ PendingAttachment,
33
+ CompleteAttachment,
34
+ AttachmentStatus,
35
+ CreateAttachment,
36
+ } from "./attachment";
37
+
38
+ export type { Unsubscribe } from "./unsubscribe";
39
+
40
+ export type { QuoteInfo } from "./quote";
41
+
42
+ export type {
43
+ Unstable_MentionItem,
44
+ Unstable_MentionCategory,
45
+ Unstable_DirectiveSegment,
46
+ Unstable_DirectiveFormatter,
47
+ } from "./mention";
@@ -0,0 +1,50 @@
1
+ import type { ReadonlyJSONObject } from "assistant-stream/utils";
2
+
3
+ // =============================================================================
4
+ // Mention Item (user-facing definition for items that can be @-mentioned)
5
+ // =============================================================================
6
+
7
+ export type Unstable_MentionItem = {
8
+ readonly id: string;
9
+ readonly type: string;
10
+ readonly label: string;
11
+ readonly icon?: string | undefined;
12
+ readonly description?: string | undefined;
13
+ readonly metadata?: ReadonlyJSONObject | undefined;
14
+ };
15
+
16
+ // =============================================================================
17
+ // Mention Category (for hierarchical navigation)
18
+ // =============================================================================
19
+
20
+ export type Unstable_MentionCategory = {
21
+ readonly id: string;
22
+ readonly label: string;
23
+ readonly icon?: string | undefined;
24
+ };
25
+
26
+ // =============================================================================
27
+ // Directive Segment (parsed representation of mention directives in text)
28
+ // =============================================================================
29
+
30
+ /** Parsed segment from directive text */
31
+ export type Unstable_DirectiveSegment =
32
+ | { readonly kind: "text"; readonly text: string }
33
+ | {
34
+ readonly kind: "mention";
35
+ readonly type: string;
36
+ readonly label: string;
37
+ readonly id: string;
38
+ };
39
+
40
+ // =============================================================================
41
+ // Directive Formatter (configurable serialization/parsing for mentions)
42
+ // =============================================================================
43
+
44
+ /** Configurable formatter for mention directive serialization/parsing */
45
+ export type Unstable_DirectiveFormatter = {
46
+ /** Serialize a mention item to directive text */
47
+ serialize(item: Unstable_MentionItem): string;
48
+ /** Parse text into alternating text and mention segments */
49
+ parse(text: string): readonly Unstable_DirectiveSegment[];
50
+ };