@assistant-ui/mcp-docs-server 0.2.1 → 0.2.2

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 (89) hide show
  1. package/.docs/organized/code-examples/waterfall.md +1 -1
  2. package/.docs/organized/code-examples/with-a2a.md +2 -2
  3. package/.docs/organized/code-examples/with-ag-ui.md +3 -3
  4. package/.docs/organized/code-examples/with-ai-sdk-v7.md +5 -5
  5. package/.docs/organized/code-examples/with-artifacts.md +5 -5
  6. package/.docs/organized/code-examples/with-assistant-transport.md +3 -3
  7. package/.docs/organized/code-examples/with-browser-extension.md +4 -4
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +5 -5
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +5 -5
  10. package/.docs/organized/code-examples/with-cloud.md +5 -5
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +6 -6
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +7 -7
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +8 -8
  14. package/.docs/organized/code-examples/with-eve.md +3 -3
  15. package/.docs/organized/code-examples/with-expo.md +13 -19
  16. package/.docs/organized/code-examples/with-external-store.md +3 -3
  17. package/.docs/organized/code-examples/with-ffmpeg.md +5 -5
  18. package/.docs/organized/code-examples/with-generative-ui.md +259 -23
  19. package/.docs/organized/code-examples/with-google-adk.md +2 -2
  20. package/.docs/organized/code-examples/with-heat-graph.md +1 -1
  21. package/.docs/organized/code-examples/with-image-generation.md +4 -4
  22. package/.docs/organized/code-examples/with-interactables.md +5 -5
  23. package/.docs/organized/code-examples/with-langchain.md +7 -7
  24. package/.docs/organized/code-examples/with-langgraph.md +4 -4
  25. package/.docs/organized/code-examples/with-livekit.md +7 -7
  26. package/.docs/organized/code-examples/with-mcp.md +6 -6
  27. package/.docs/organized/code-examples/with-nuxt.md +500 -564
  28. package/.docs/organized/code-examples/with-opencode.md +2 -2
  29. package/.docs/organized/code-examples/with-openui.md +449 -0
  30. package/.docs/organized/code-examples/with-pi.md +2 -2
  31. package/.docs/organized/code-examples/with-react-hook-form.md +7 -7
  32. package/.docs/organized/code-examples/with-react-ink-web.md +4 -4
  33. package/.docs/organized/code-examples/with-react-ink.md +2 -2
  34. package/.docs/organized/code-examples/with-react-router.md +4 -4
  35. package/.docs/organized/code-examples/with-resumable-stream.md +7 -7
  36. package/.docs/organized/code-examples/with-store.md +1 -1
  37. package/.docs/organized/code-examples/with-svelte.md +415 -0
  38. package/.docs/organized/code-examples/with-sveltekit.md +1061 -0
  39. package/.docs/organized/code-examples/with-tanstack.md +5 -5
  40. package/.docs/organized/code-examples/with-tap-runtime.md +2 -2
  41. package/.docs/organized/code-examples/with-virtualized-thread.md +2 -2
  42. package/.docs/organized/code-examples/with-vue.md +1 -1
  43. package/.docs/raw/docs/(docs)/cli.mdx +6 -1
  44. package/.docs/raw/docs/(docs)/installation.mdx +2 -2
  45. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +5 -1
  46. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +9 -2
  47. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +2 -2
  48. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +39 -1
  49. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +29 -4
  50. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +1 -1
  51. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +29 -1
  52. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +1 -1
  53. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +1 -1
  54. package/.docs/raw/docs/cloud/ai-sdk.mdx +2 -2
  55. package/.docs/raw/docs/cloud/index.mdx +1 -1
  56. package/.docs/raw/docs/guides/attachments.mdx +2 -2
  57. package/.docs/raw/docs/guides/context-api.mdx +15 -17
  58. package/.docs/raw/docs/guides/dictation.mdx +1 -1
  59. package/.docs/raw/docs/guides/mentions.mdx +2 -0
  60. package/.docs/raw/docs/guides/suggestions.mdx +6 -3
  61. package/.docs/raw/docs/ink/primitives.mdx +1 -1
  62. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +146 -128
  63. package/.docs/raw/docs/migrations/v0-15.mdx +34 -0
  64. package/.docs/raw/docs/primitives/suggestion.mdx +3 -1
  65. package/.docs/raw/docs/primitives/thread.mdx +1 -1
  66. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +35 -5
  67. package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +118 -0
  68. package/.docs/raw/docs/runtimes/concepts/stability.mdx +2 -1
  69. package/.docs/raw/docs/runtimes/concepts/threads.mdx +68 -28
  70. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +1 -1
  71. package/.docs/raw/docs/runtimes/custom/external-store.mdx +6 -2
  72. package/.docs/raw/docs/runtimes/langchain.mdx +1 -1
  73. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +4 -0
  74. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +8 -1
  75. package/.docs/raw/docs/tools/defining-tools.mdx +19 -0
  76. package/.docs/raw/docs/tools/generative-ui-primitive.mdx +180 -0
  77. package/.docs/raw/docs/tools/generative-ui-slack.mdx +167 -0
  78. package/.docs/raw/docs/tools/generative-ui-teams.mdx +160 -0
  79. package/.docs/raw/docs/tools/generative-ui.mdx +224 -211
  80. package/.docs/raw/docs/tools/index.mdx +2 -1
  81. package/.docs/raw/docs/tools/interactables.mdx +5 -4
  82. package/.docs/raw/docs/tools/openui.mdx +175 -0
  83. package/.docs/raw/docs/tools/tool-ui.mdx +1 -2
  84. package/.docs/raw/docs/tools/user-managed-mcp.mdx +5 -1
  85. package/.docs/raw/docs/ui/attachment.mdx +27 -0
  86. package/.docs/raw/docs/ui/file.mdx +1 -1
  87. package/.docs/raw/docs/ui/image.mdx +1 -1
  88. package/package.json +4 -4
  89. package/.docs/raw/docs/tools/interactables-legacy.mdx +0 -423
@@ -0,0 +1,415 @@
1
+ # Example: with-svelte
2
+
3
+ ## package.json
4
+
5
+ ```json
6
+ {
7
+ "name": "with-svelte",
8
+ "version": "0.0.0",
9
+ "private": true,
10
+ "type": "module",
11
+ "scripts": {
12
+ "dev": "vite dev --port 3000",
13
+ "build": "vite build",
14
+ "serve": "vite preview"
15
+ },
16
+ "dependencies": {
17
+ "@assistant-ui/core": "workspace:*",
18
+ "@assistant-ui/store": "workspace:*",
19
+ "@assistant-ui/svelte": "workspace:*",
20
+ "@assistant-ui/tap": "workspace:*",
21
+ "@lucide/svelte": "^1.31.0",
22
+ "svelte": "^5.56.8"
23
+ },
24
+ "devDependencies": {
25
+ "@sveltejs/vite-plugin-svelte": "^7.3.0",
26
+ "@tailwindcss/vite": "^4.3.3",
27
+ "@types/react": "^19.2.18",
28
+ "tailwindcss": "^4.3.3",
29
+ "typescript": "^7.0.2",
30
+ "vite": "^8.2.1"
31
+ }
32
+ }
33
+
34
+ ```
35
+
36
+ ## src/env.d.ts
37
+
38
+ ```typescript
39
+ declare module "*.svelte" {
40
+ import type { Component } from "svelte";
41
+ const component: Component<Record<string, never>>;
42
+ export default component;
43
+ }
44
+
45
+ ```
46
+
47
+ ## src/main.ts
48
+
49
+ ```typescript
50
+ import { mount } from "svelte";
51
+ import "./styles.css";
52
+ import Root from "./Root.svelte";
53
+
54
+ mount(Root, { target: document.getElementById("app")! });
55
+
56
+ ```
57
+
58
+ ## src/runtime.ts
59
+
60
+ ```typescript
61
+ import type { AppendMessage, ExternalStoreAdapter } from "@assistant-ui/core";
62
+ import {
63
+ AssistantRuntimeImpl,
64
+ ExternalStoreRuntimeCore,
65
+ } from "@assistant-ui/core/internal";
66
+
67
+ export type EchoMessage = {
68
+ id: string;
69
+ role: "user" | "assistant";
70
+ text: string;
71
+ };
72
+
73
+ type EchoThread = {
74
+ id: string;
75
+ title: string;
76
+ messages: EchoMessage[];
77
+ };
78
+
79
+ let nextId = 0;
80
+ const freshId = (prefix: string) => `${prefix}-${nextId++}`;
81
+
82
+ const messageText = (message: AppendMessage) =>
83
+ message.content
84
+ .map((part) => (part.type === "text" ? part.text : ""))
85
+ .join("");
86
+
87
+ const convertEchoMessage = (message: EchoMessage) => ({
88
+ id: message.id,
89
+ role: message.role,
90
+ content: [{ type: "text" as const, text: message.text }],
91
+ });
92
+
93
+ export const createEchoRuntime = () => {
94
+ let threads: EchoThread[] = [
95
+ { id: freshId("thread"), title: "", messages: [] },
96
+ ];
97
+ let currentId = threads[0]!.id;
98
+ let isRunning = false;
99
+ let replyTimer: ReturnType<typeof setTimeout> | undefined;
100
+
101
+ const current = () => threads.find((thread) => thread.id === currentId)!;
102
+ const updateCurrent = (updater: (thread: EchoThread) => EchoThread) => {
103
+ threads = threads.map((thread) =>
104
+ thread.id === currentId ? updater(thread) : thread,
105
+ );
106
+ };
107
+
108
+ const reply = (text: string) => {
109
+ const replyTo = currentId;
110
+ isRunning = true;
111
+ sync();
112
+ replyTimer = setTimeout(() => {
113
+ if (currentId !== replyTo) return;
114
+ updateCurrent((thread) => ({
115
+ ...thread,
116
+ messages: [
117
+ ...thread.messages,
118
+ {
119
+ id: freshId("assistant"),
120
+ role: "assistant",
121
+ text: `Echo: ${text}`,
122
+ },
123
+ ],
124
+ }));
125
+ isRunning = false;
126
+ sync();
127
+ }, 600);
128
+ };
129
+
130
+ const appendUser = (text: string) => {
131
+ updateCurrent((thread) => ({
132
+ ...thread,
133
+ title: thread.title || text.slice(0, 40),
134
+ messages: [
135
+ ...thread.messages,
136
+ { id: freshId("user"), role: "user", text },
137
+ ],
138
+ }));
139
+ };
140
+
141
+ const makeAdapter = (): ExternalStoreAdapter<EchoMessage> => ({
142
+ messages: current().messages,
143
+ isRunning,
144
+ convertMessage: convertEchoMessage,
145
+ setMessages: (next) => {
146
+ updateCurrent((thread) => ({ ...thread, messages: next }));
147
+ sync();
148
+ },
149
+ onNew: async (message) => {
150
+ const text = messageText(message);
151
+ appendUser(text);
152
+ reply(text);
153
+ },
154
+ onEdit: async (message) => {
155
+ const text = messageText(message);
156
+ const parentIndex = message.parentId
157
+ ? current().messages.findIndex(
158
+ (entry) => entry.id === message.parentId,
159
+ ) + 1
160
+ : 0;
161
+ updateCurrent((thread) => ({
162
+ ...thread,
163
+ messages: thread.messages.slice(0, parentIndex),
164
+ }));
165
+ appendUser(text);
166
+ reply(text);
167
+ },
168
+ onReload: async (parentId) => {
169
+ let parentIndex = 0;
170
+ if (parentId) {
171
+ const index = current().messages.findIndex(
172
+ (entry) => entry.id === parentId,
173
+ );
174
+ if (index === -1) return;
175
+ parentIndex = index + 1;
176
+ }
177
+ const sliced = current().messages.slice(0, parentIndex);
178
+ const lastUser = [...sliced]
179
+ .reverse()
180
+ .find((entry) => entry.role === "user");
181
+ updateCurrent((thread) => ({ ...thread, messages: sliced }));
182
+ reply(`${lastUser?.text ?? ""} (again)`);
183
+ },
184
+ onCancel: async () => {
185
+ clearTimeout(replyTimer);
186
+ if (isRunning && current().messages.at(-1)?.role === "user") {
187
+ updateCurrent((thread) => ({
188
+ ...thread,
189
+ messages: thread.messages.slice(0, -1),
190
+ }));
191
+ }
192
+ isRunning = false;
193
+ // cancelRun restores the trailing user message into the composer
194
+ // synchronously after onCancel returns; an eager sync would delete it
195
+ // before that restore reads it.
196
+ queueMicrotask(sync);
197
+ },
198
+ adapters: {
199
+ threadList: {
200
+ threadId: currentId,
201
+ threads: threads.map((thread) => ({
202
+ status: "regular" as const,
203
+ id: thread.id,
204
+ title: thread.title,
205
+ })),
206
+ onSwitchToThread: (threadId) => {
207
+ clearTimeout(replyTimer);
208
+ isRunning = false;
209
+ currentId = threadId;
210
+ sync();
211
+ },
212
+ onSwitchToNewThread: () => {
213
+ clearTimeout(replyTimer);
214
+ isRunning = false;
215
+ const id = freshId("thread");
216
+ threads = [...threads, { id, title: "", messages: [] }];
217
+ currentId = id;
218
+ sync();
219
+ },
220
+ },
221
+ },
222
+ });
223
+
224
+ const core = new ExternalStoreRuntimeCore(makeAdapter());
225
+ const sync = () => core.setAdapter(makeAdapter());
226
+ return new AssistantRuntimeImpl(core);
227
+ };
228
+
229
+ ```
230
+
231
+ ## src/styles.css
232
+
233
+ ```css
234
+ @import "tailwindcss";
235
+
236
+ @custom-variant dark (&:is(.dark *));
237
+
238
+ @theme inline {
239
+ --radius-sm: calc(var(--radius) - 4px);
240
+ --radius-md: calc(var(--radius) - 2px);
241
+ --radius-lg: var(--radius);
242
+ --radius-xl: calc(var(--radius) + 4px);
243
+ --color-background: var(--background);
244
+ --color-foreground: var(--foreground);
245
+ --color-card: var(--card);
246
+ --color-card-foreground: var(--card-foreground);
247
+ --color-popover: var(--popover);
248
+ --color-popover-foreground: var(--popover-foreground);
249
+ --color-primary: var(--primary);
250
+ --color-primary-foreground: var(--primary-foreground);
251
+ --color-secondary: var(--secondary);
252
+ --color-secondary-foreground: var(--secondary-foreground);
253
+ --color-muted: var(--muted);
254
+ --color-muted-foreground: var(--muted-foreground);
255
+ --color-accent: var(--accent);
256
+ --color-accent-foreground: var(--accent-foreground);
257
+ --color-destructive: var(--destructive);
258
+ --color-border: var(--border);
259
+ --color-input: var(--input);
260
+ --color-ring: var(--ring);
261
+ --color-chart-1: var(--chart-1);
262
+ --color-chart-2: var(--chart-2);
263
+ --color-chart-3: var(--chart-3);
264
+ --color-chart-4: var(--chart-4);
265
+ --color-chart-5: var(--chart-5);
266
+ --color-sidebar: var(--sidebar);
267
+ --color-sidebar-foreground: var(--sidebar-foreground);
268
+ --color-sidebar-primary: var(--sidebar-primary);
269
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
270
+ --color-sidebar-accent: var(--sidebar-accent);
271
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
272
+ --color-sidebar-border: var(--sidebar-border);
273
+ --color-sidebar-ring: var(--sidebar-ring);
274
+ }
275
+
276
+ :root {
277
+ --radius: 0.625rem;
278
+ --background: oklch(1 0 0);
279
+ --foreground: oklch(0.141 0.005 285.823);
280
+ --card: oklch(1 0 0);
281
+ --card-foreground: oklch(0.141 0.005 285.823);
282
+ --popover: oklch(1 0 0);
283
+ --popover-foreground: oklch(0.141 0.005 285.823);
284
+ --primary: oklch(0.21 0.006 285.885);
285
+ --primary-foreground: oklch(0.985 0 0);
286
+ --secondary: oklch(0.967 0.001 286.375);
287
+ --secondary-foreground: oklch(0.21 0.006 285.885);
288
+ --muted: oklch(0.967 0.001 286.375);
289
+ --muted-foreground: oklch(0.552 0.016 285.938);
290
+ --accent: oklch(0.967 0.001 286.375);
291
+ --accent-foreground: oklch(0.21 0.006 285.885);
292
+ --destructive: oklch(0.577 0.245 27.325);
293
+ --border: oklch(0.92 0.004 286.32);
294
+ --input: oklch(0.92 0.004 286.32);
295
+ --ring: oklch(0.705 0.015 286.067);
296
+ --chart-1: oklch(0.646 0.222 41.116);
297
+ --chart-2: oklch(0.6 0.118 184.704);
298
+ --chart-3: oklch(0.398 0.07 227.392);
299
+ --chart-4: oklch(0.828 0.189 84.429);
300
+ --chart-5: oklch(0.769 0.188 70.08);
301
+ --sidebar: oklch(0.985 0 0);
302
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
303
+ --sidebar-primary: oklch(0.21 0.006 285.885);
304
+ --sidebar-primary-foreground: oklch(0.985 0 0);
305
+ --sidebar-accent: oklch(0.967 0.001 286.375);
306
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
307
+ --sidebar-border: oklch(0.92 0.004 286.32);
308
+ --sidebar-ring: oklch(0.705 0.015 286.067);
309
+ }
310
+
311
+ .dark {
312
+ --background: oklch(0.141 0.005 285.823);
313
+ --foreground: oklch(0.985 0 0);
314
+ --card: oklch(0.21 0.006 285.885);
315
+ --card-foreground: oklch(0.985 0 0);
316
+ --popover: oklch(0.21 0.006 285.885);
317
+ --popover-foreground: oklch(0.985 0 0);
318
+ --primary: oklch(0.92 0.004 286.32);
319
+ --primary-foreground: oklch(0.21 0.006 285.885);
320
+ --secondary: oklch(0.274 0.006 286.033);
321
+ --secondary-foreground: oklch(0.985 0 0);
322
+ --muted: oklch(0.274 0.006 286.033);
323
+ --muted-foreground: oklch(0.705 0.015 286.067);
324
+ --accent: oklch(0.274 0.006 286.033);
325
+ --accent-foreground: oklch(0.985 0 0);
326
+ --destructive: oklch(0.704 0.191 22.216);
327
+ --border: oklch(1 0 0 / 10%);
328
+ --input: oklch(1 0 0 / 15%);
329
+ --ring: oklch(0.552 0.016 285.938);
330
+ --chart-1: oklch(0.488 0.243 264.376);
331
+ --chart-2: oklch(0.696 0.17 162.48);
332
+ --chart-3: oklch(0.769 0.188 70.08);
333
+ --chart-4: oklch(0.627 0.265 303.9);
334
+ --chart-5: oklch(0.645 0.246 16.439);
335
+ --sidebar: oklch(0.21 0.006 285.885);
336
+ --sidebar-foreground: oklch(0.985 0 0);
337
+ --sidebar-primary: oklch(0.488 0.243 264.376);
338
+ --sidebar-primary-foreground: oklch(0.985 0 0);
339
+ --sidebar-accent: oklch(0.274 0.006 286.033);
340
+ --sidebar-accent-foreground: oklch(0.985 0 0);
341
+ --sidebar-border: oklch(1 0 0 / 10%);
342
+ --sidebar-ring: oklch(0.552 0.016 285.938);
343
+ }
344
+
345
+ @layer base {
346
+ * {
347
+ @apply border-border outline-ring/50;
348
+ }
349
+ body {
350
+ @apply bg-background text-foreground;
351
+ }
352
+ }
353
+
354
+ html,
355
+ body,
356
+ #app {
357
+ height: 100%;
358
+ }
359
+
360
+ ```
361
+
362
+ ## svelte.config.js
363
+
364
+ ```javascript
365
+ import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
366
+
367
+ export default {
368
+ preprocess: vitePreprocess(),
369
+ };
370
+
371
+ ```
372
+
373
+ ## tsconfig.json
374
+
375
+ ```json
376
+ {
377
+ "compilerOptions": {
378
+ "target": "ES2022",
379
+ "module": "ESNext",
380
+ "moduleResolution": "bundler",
381
+ "strict": true,
382
+ "noEmit": true,
383
+ "skipLibCheck": true,
384
+ "types": ["vite/client"]
385
+ },
386
+ "include": ["src", "vite.config.ts"]
387
+ }
388
+
389
+ ```
390
+
391
+ ## vite.config.ts
392
+
393
+ ```typescript
394
+ import { defineConfig } from "vite";
395
+ import { svelte } from "@sveltejs/vite-plugin-svelte";
396
+ import tailwindcss from "@tailwindcss/vite";
397
+
398
+ // The assistant-ui runtime is written against react hook imports but runs on
399
+ // @assistant-ui/tap; aliasing react to the standalone shim resolves it with
400
+ // no React installed.
401
+ export default defineConfig({
402
+ plugins: [svelte(), tailwindcss()],
403
+ resolve: {
404
+ alias: [
405
+ {
406
+ find: /^react\/compiler-runtime$/,
407
+ replacement: "@assistant-ui/tap/standalone-shim/compiler-runtime",
408
+ },
409
+ { find: /^react$/, replacement: "@assistant-ui/tap/standalone-shim" },
410
+ ],
411
+ },
412
+ });
413
+
414
+ ```
415
+