@assistant-ui/react 0.12.19 → 0.12.20

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 (104) hide show
  1. package/README.md +1 -1
  2. package/dist/client/ExternalThread.d.ts +24 -3
  3. package/dist/client/ExternalThread.d.ts.map +1 -1
  4. package/dist/client/ExternalThread.js +106 -27
  5. package/dist/client/ExternalThread.js.map +1 -1
  6. package/dist/client/InMemoryThreadList.js +23 -30
  7. package/dist/client/InMemoryThreadList.js.map +1 -1
  8. package/dist/client/SingleThreadList.d.ts +12 -0
  9. package/dist/client/SingleThreadList.d.ts.map +1 -0
  10. package/dist/client/SingleThreadList.js +68 -0
  11. package/dist/client/SingleThreadList.js.map +1 -0
  12. package/dist/index.d.ts +7 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +5 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  17. package/dist/primitives/composer/ComposerInput.js +37 -7
  18. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  19. package/dist/primitives/composer/ComposerQueue.d.ts +2 -0
  20. package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
  21. package/dist/primitives/composer/ComposerQueue.js +3 -0
  22. package/dist/primitives/composer/ComposerQueue.js.map +1 -0
  23. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  24. package/dist/primitives/composer/ComposerSend.js +3 -1
  25. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  26. package/dist/primitives/composer/mention/ComposerMentionBack.d.ts +21 -0
  27. package/dist/primitives/composer/mention/ComposerMentionBack.d.ts.map +1 -0
  28. package/dist/primitives/composer/mention/ComposerMentionBack.js +28 -0
  29. package/dist/primitives/composer/mention/ComposerMentionBack.js.map +1 -0
  30. package/dist/primitives/composer/mention/ComposerMentionCategories.d.ts +42 -0
  31. package/dist/primitives/composer/mention/ComposerMentionCategories.d.ts.map +1 -0
  32. package/dist/primitives/composer/mention/ComposerMentionCategories.js +32 -0
  33. package/dist/primitives/composer/mention/ComposerMentionCategories.js.map +1 -0
  34. package/dist/primitives/composer/mention/ComposerMentionContext.d.ts +23 -0
  35. package/dist/primitives/composer/mention/ComposerMentionContext.d.ts.map +1 -0
  36. package/dist/primitives/composer/mention/ComposerMentionContext.js +66 -0
  37. package/dist/primitives/composer/mention/ComposerMentionContext.js.map +1 -0
  38. package/dist/primitives/composer/mention/ComposerMentionItems.d.ts +46 -0
  39. package/dist/primitives/composer/mention/ComposerMentionItems.d.ts.map +1 -0
  40. package/dist/primitives/composer/mention/ComposerMentionItems.js +30 -0
  41. package/dist/primitives/composer/mention/ComposerMentionItems.js.map +1 -0
  42. package/dist/primitives/composer/mention/ComposerMentionPopover.d.ts +24 -0
  43. package/dist/primitives/composer/mention/ComposerMentionPopover.d.ts.map +1 -0
  44. package/dist/primitives/composer/mention/ComposerMentionPopover.js +28 -0
  45. package/dist/primitives/composer/mention/ComposerMentionPopover.js.map +1 -0
  46. package/dist/primitives/composer/mention/MentionResource.d.ts +39 -0
  47. package/dist/primitives/composer/mention/MentionResource.d.ts.map +1 -0
  48. package/dist/primitives/composer/mention/MentionResource.js +230 -0
  49. package/dist/primitives/composer/mention/MentionResource.js.map +1 -0
  50. package/dist/primitives/composer/mention/detectMentionTrigger.d.ts +2 -0
  51. package/dist/primitives/composer/mention/detectMentionTrigger.d.ts.map +1 -0
  52. package/dist/primitives/composer/mention/detectMentionTrigger.js +26 -0
  53. package/dist/primitives/composer/mention/detectMentionTrigger.js.map +1 -0
  54. package/dist/primitives/composer/mention/index.d.ts +6 -0
  55. package/dist/primitives/composer/mention/index.d.ts.map +1 -0
  56. package/dist/primitives/composer/mention/index.js +6 -0
  57. package/dist/primitives/composer/mention/index.js.map +1 -0
  58. package/dist/primitives/composer.d.ts +10 -0
  59. package/dist/primitives/composer.d.ts.map +1 -1
  60. package/dist/primitives/composer.js +10 -0
  61. package/dist/primitives/composer.js.map +1 -1
  62. package/dist/primitives/queueItem/QueueItemRemove.d.ts +19 -0
  63. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -0
  64. package/dist/primitives/queueItem/QueueItemRemove.js +21 -0
  65. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -0
  66. package/dist/primitives/queueItem/QueueItemSteer.d.ts +19 -0
  67. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -0
  68. package/dist/primitives/queueItem/QueueItemSteer.js +21 -0
  69. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -0
  70. package/dist/primitives/queueItem/QueueItemText.d.ts +18 -0
  71. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -0
  72. package/dist/primitives/queueItem/QueueItemText.js +19 -0
  73. package/dist/primitives/queueItem/QueueItemText.js.map +1 -0
  74. package/dist/primitives/queueItem.d.ts +4 -0
  75. package/dist/primitives/queueItem.d.ts.map +1 -0
  76. package/dist/primitives/queueItem.js +4 -0
  77. package/dist/primitives/queueItem.js.map +1 -0
  78. package/dist/unstable/useToolMentionAdapter.d.ts +42 -0
  79. package/dist/unstable/useToolMentionAdapter.d.ts.map +1 -0
  80. package/dist/unstable/useToolMentionAdapter.js +65 -0
  81. package/dist/unstable/useToolMentionAdapter.js.map +1 -0
  82. package/package.json +8 -8
  83. package/src/client/ExternalThread.ts +160 -32
  84. package/src/client/InMemoryThreadList.ts +24 -35
  85. package/src/client/SingleThreadList.ts +95 -0
  86. package/src/index.ts +19 -0
  87. package/src/primitives/composer/ComposerInput.tsx +49 -5
  88. package/src/primitives/composer/ComposerQueue.tsx +3 -0
  89. package/src/primitives/composer/ComposerSend.ts +3 -1
  90. package/src/primitives/composer/mention/ComposerMentionBack.tsx +55 -0
  91. package/src/primitives/composer/mention/ComposerMentionCategories.tsx +104 -0
  92. package/src/primitives/composer/mention/ComposerMentionContext.tsx +141 -0
  93. package/src/primitives/composer/mention/ComposerMentionItems.tsx +104 -0
  94. package/src/primitives/composer/mention/ComposerMentionPopover.tsx +52 -0
  95. package/src/primitives/composer/mention/MentionResource.ts +328 -0
  96. package/src/primitives/composer/mention/detectMentionTrigger.test.ts +78 -0
  97. package/src/primitives/composer/mention/detectMentionTrigger.ts +37 -0
  98. package/src/primitives/composer/mention/index.ts +16 -0
  99. package/src/primitives/composer.ts +10 -0
  100. package/src/primitives/queueItem/QueueItemRemove.ts +37 -0
  101. package/src/primitives/queueItem/QueueItemSteer.ts +37 -0
  102. package/src/primitives/queueItem/QueueItemText.tsx +37 -0
  103. package/src/primitives/queueItem.ts +3 -0
  104. package/src/unstable/useToolMentionAdapter.ts +114 -0
@@ -0,0 +1,114 @@
1
+ "use client";
2
+
3
+ import { useMemo } from "react";
4
+ import { useAui } from "@assistant-ui/store";
5
+ import type {
6
+ Unstable_MentionAdapter,
7
+ Unstable_MentionCategory,
8
+ Unstable_MentionItem,
9
+ } from "@assistant-ui/core";
10
+
11
+ export type Unstable_ToolMentionAdapterOptions = {
12
+ /**
13
+ * Explicit list of tools to show in the mention picker.
14
+ * If provided, model context tools are NOT included unless
15
+ * `includeModelContextTools` is true.
16
+ */
17
+ tools?: readonly Unstable_MentionItem[] | undefined;
18
+
19
+ /**
20
+ * Include tools from the model context (registered via useAssistantTool).
21
+ * Defaults to true when `tools` is not provided, false otherwise.
22
+ */
23
+ includeModelContextTools?: boolean | undefined;
24
+
25
+ /**
26
+ * Custom function to format the display label for a tool.
27
+ * Receives the tool name (id) and returns the display label.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * formatLabel: (name) => name.replace(/_/g, " ").replace(/\b\w/g, c => c.toUpperCase())
32
+ * // "get_current_weather" → "Get Current Weather"
33
+ * ```
34
+ */
35
+ formatLabel?: ((toolName: string) => string) | undefined;
36
+
37
+ /** Custom label for the tools category. @default "Tools" */
38
+ categoryLabel?: string | undefined;
39
+ };
40
+
41
+ /**
42
+ * @deprecated This API is still under active development and might change without notice.
43
+ *
44
+ * Creates a MentionAdapter for tools. When a user types `@`, they see
45
+ * available tools and can mention them to hint the LLM to use a specific tool.
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * const mentionAdapter = unstable_useToolMentionAdapter({
50
+ * formatLabel: (name) => name.replaceAll("_", " "),
51
+ * });
52
+ * ```
53
+ */
54
+ export function unstable_useToolMentionAdapter(
55
+ options?: Unstable_ToolMentionAdapterOptions,
56
+ ): Unstable_MentionAdapter {
57
+ const aui = useAui();
58
+ const explicitTools = options?.tools;
59
+ const includeModelContext =
60
+ options?.includeModelContextTools ?? !explicitTools;
61
+ const formatLabel = options?.formatLabel;
62
+ const categoryLabel = options?.categoryLabel;
63
+
64
+ return useMemo<Unstable_MentionAdapter>(() => {
65
+ const getTools = (): Unstable_MentionItem[] => {
66
+ const items: Unstable_MentionItem[] = [];
67
+
68
+ if (explicitTools) {
69
+ items.push(...explicitTools);
70
+ }
71
+
72
+ if (includeModelContext) {
73
+ const context = aui.thread().getModelContext();
74
+ const tools = context.tools;
75
+ if (tools) {
76
+ for (const [name, tool] of Object.entries(tools)) {
77
+ if (!items.some((i) => i.id === name)) {
78
+ items.push({
79
+ id: name,
80
+ type: "tool",
81
+ label: formatLabel ? formatLabel(name) : name,
82
+ description: tool.description ?? undefined,
83
+ });
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ return items;
90
+ };
91
+
92
+ return {
93
+ categories(): Unstable_MentionCategory[] {
94
+ return [
95
+ { id: "tools", label: categoryLabel ?? "Tools", icon: undefined },
96
+ ];
97
+ },
98
+
99
+ categoryItems(_categoryId: string): Unstable_MentionItem[] {
100
+ return getTools();
101
+ },
102
+
103
+ search(query: string): Unstable_MentionItem[] {
104
+ const lower = query.toLowerCase();
105
+ return getTools().filter(
106
+ (item) =>
107
+ item.id.toLowerCase().includes(lower) ||
108
+ item.label.toLowerCase().includes(lower) ||
109
+ item.description?.toLowerCase().includes(lower),
110
+ );
111
+ },
112
+ };
113
+ }, [aui, explicitTools, includeModelContext, formatLabel, categoryLabel]);
114
+ }