@assistant-ui/mcp-docs-server 0.1.29 → 0.1.30

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 (53) hide show
  1. package/.docs/organized/code-examples/waterfall.md +15 -7
  2. package/.docs/organized/code-examples/with-a2a.md +8 -20
  3. package/.docs/organized/code-examples/with-ag-ui.md +9 -6
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +8 -8
  5. package/.docs/organized/code-examples/with-artifacts.md +10 -8
  6. package/.docs/organized/code-examples/with-assistant-transport.md +9 -10
  7. package/.docs/organized/code-examples/with-chain-of-thought.md +7 -7
  8. package/.docs/organized/code-examples/with-cloud-standalone.md +13 -10
  9. package/.docs/organized/code-examples/with-cloud.md +8 -9
  10. package/.docs/organized/code-examples/with-custom-thread-list.md +8 -8
  11. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +15 -10
  12. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +11 -11
  13. package/.docs/organized/code-examples/with-expo.md +20 -16
  14. package/.docs/organized/code-examples/with-external-store.md +7 -7
  15. package/.docs/organized/code-examples/with-ffmpeg.md +15 -10
  16. package/.docs/organized/code-examples/with-generative-ui.md +7 -7
  17. package/.docs/organized/code-examples/with-google-adk.md +6 -6
  18. package/.docs/organized/code-examples/with-heat-graph.md +5 -5
  19. package/.docs/organized/code-examples/with-interactables.md +8 -23
  20. package/.docs/organized/code-examples/with-langchain.md +437 -0
  21. package/.docs/organized/code-examples/with-langgraph.md +15 -15
  22. package/.docs/organized/code-examples/with-livekit.md +15 -10
  23. package/.docs/organized/code-examples/with-opencode.md +8 -10
  24. package/.docs/organized/code-examples/with-parent-id-grouping.md +8 -8
  25. package/.docs/organized/code-examples/with-react-hook-form.md +219 -147
  26. package/.docs/organized/code-examples/with-react-ink.md +2 -2
  27. package/.docs/organized/code-examples/with-react-router.md +10 -10
  28. package/.docs/organized/code-examples/with-store.md +8 -5
  29. package/.docs/organized/code-examples/with-tanstack.md +8 -8
  30. package/.docs/organized/code-examples/with-tap-runtime.md +9 -5
  31. package/.docs/raw/docs/(docs)/guides/mentions.mdx +248 -109
  32. package/.docs/raw/docs/(docs)/guides/slash-commands.mdx +112 -92
  33. package/.docs/raw/docs/(docs)/rtl.mdx +79 -0
  34. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +149 -40
  35. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +2 -0
  36. package/.docs/raw/docs/(reference)/api-reference/runtimes/thread-list-runtime.mdx +4 -0
  37. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +1 -1
  38. package/.docs/raw/docs/primitives/composer.mdx +94 -62
  39. package/.docs/raw/docs/runtimes/ai-sdk/v6.mdx +57 -0
  40. package/.docs/raw/docs/runtimes/custom/custom-thread-list.mdx +47 -1
  41. package/.docs/raw/docs/runtimes/custom/external-store.mdx +1 -1
  42. package/.docs/raw/docs/runtimes/langchain/comparison.mdx +60 -0
  43. package/.docs/raw/docs/runtimes/langchain/index.mdx +210 -0
  44. package/.docs/raw/docs/runtimes/langgraph/index.mdx +155 -63
  45. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +12 -4
  46. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +199 -0
  47. package/.docs/raw/docs/ui/directive-text.mdx +113 -0
  48. package/.docs/raw/docs/ui/reasoning.mdx +13 -9
  49. package/dist/utils/logger.js +1 -1
  50. package/dist/utils/logger.js.map +1 -1
  51. package/package.json +3 -3
  52. package/src/utils/logger.ts +1 -1
  53. package/.docs/raw/docs/ui/mention.mdx +0 -168
@@ -417,6 +417,7 @@ export function WaterfallRow() {
417
417
  <AuiIf condition={(s) => s.span.hasChildren}>
418
418
  <SpanPrimitive.CollapseToggle className="flex shrink-0 items-center justify-center rounded p-0.5 text-muted-foreground hover:text-foreground">
419
419
  <svg
420
+ aria-hidden="true"
420
421
  className="size-3.5 transition-transform data-[collapsed=true]:[-rotate-90]"
421
422
  viewBox="0 0 16 16"
422
423
  fill="currentColor"
@@ -438,7 +439,7 @@ export function WaterfallRow() {
438
439
  className="group-hover:bg-accent/30"
439
440
  style={{ width: barWidth, height: barHeight }}
440
441
  >
441
- <svg width={barWidth} height={barHeight}>
442
+ <svg aria-hidden="true" width={barWidth} height={barHeight}>
442
443
  <WaterfallBar />
443
444
  </svg>
444
445
  </div>
@@ -515,7 +516,12 @@ function TimeAxisTicks({
515
516
  });
516
517
 
517
518
  return (
518
- <svg width={barWidth} height={28} className="overflow-visible">
519
+ <svg
520
+ aria-hidden="true"
521
+ width={barWidth}
522
+ height={28}
523
+ className="overflow-visible"
524
+ >
519
525
  {ticks.map(({ t, x }) => (
520
526
  <g key={x}>
521
527
  <line
@@ -678,6 +684,8 @@ export function WaterfallTimeline() {
678
684
 
679
685
  {/* Span rows */}
680
686
  <WaterfallLayoutContext.Provider value={layoutValue}>
687
+ {/* biome-ignore lint/a11y/useKeyWithClickEvents: event delegation on span rows */}
688
+ {/* biome-ignore lint/a11y/noStaticElementInteractions: event delegation on span rows */}
681
689
  <div
682
690
  style={{ width: contentWidth }}
683
691
  onClick={(e) => {
@@ -769,19 +777,19 @@ export default nextConfig;
769
777
  "@assistant-ui/react-o11y": "workspace:*",
770
778
  "@assistant-ui/store": "workspace:*",
771
779
  "@assistant-ui/tap": "workspace:*",
772
- "next": "^16.2.3",
780
+ "next": "^16.2.4",
773
781
  "react": "^19.2.5",
774
782
  "react-dom": "^19.2.5"
775
783
  },
776
784
  "devDependencies": {
777
785
  "@assistant-ui/x-buildutils": "workspace:*",
778
- "@tailwindcss/postcss": "^4.2.2",
786
+ "@tailwindcss/postcss": "^4.2.4",
779
787
  "@types/node": "^25.6.0",
780
788
  "@types/react": "^19.2.14",
781
789
  "@types/react-dom": "^19.2.3",
782
- "postcss": "^8.5.9",
783
- "tailwindcss": "^4.2.2",
784
- "typescript": "^6.0.2"
790
+ "postcss": "^8.5.10",
791
+ "tailwindcss": "^4.2.4",
792
+ "typescript": "^6.0.3"
785
793
  }
786
794
  }
787
795
 
@@ -170,7 +170,7 @@ export function MyRuntimeProvider({
170
170
  children,
171
171
  }: Readonly<{ children: ReactNode }>) {
172
172
  const serverUrl =
173
- (process.env["NEXT_PUBLIC_A2A_SERVER_URL"] as string | undefined) ??
173
+ (process.env.NEXT_PUBLIC_A2A_SERVER_URL as string | undefined) ??
174
174
  "http://localhost:9999";
175
175
 
176
176
  const runtime = useA2ARuntime({
@@ -201,8 +201,6 @@ import {
201
201
  } from "@assistant-ui/react-a2a";
202
202
  import { Thread } from "@/components/assistant-ui/thread";
203
203
 
204
- // === State Badge ===
205
-
206
204
  const STATE_CONFIG: Record<
207
205
  string,
208
206
  { label: string; color: string; bg: string }
@@ -274,8 +272,6 @@ function StateBadge({ state }: { state: A2ATaskState }) {
274
272
  );
275
273
  }
276
274
 
277
- // === Task Status Bar ===
278
-
279
275
  function TaskStatusBar() {
280
276
  const task = useA2ATask();
281
277
 
@@ -296,8 +292,6 @@ function TaskStatusBar() {
296
292
  );
297
293
  }
298
294
 
299
- // === Artifact Part Renderer ===
300
-
301
295
  function ArtifactPartView({ part }: { part: A2APart }) {
302
296
  if (part.text !== undefined) {
303
297
  return (
@@ -322,6 +316,7 @@ function ArtifactPartView({ part }: { part: A2APart }) {
322
316
  const isImage = part.mediaType?.startsWith("image/");
323
317
  if (isImage) {
324
318
  return (
319
+ // biome-ignore lint/performance/noImgElement: example component
325
320
  <img
326
321
  src={part.url}
327
322
  alt={part.filename ?? "image"}
@@ -350,6 +345,7 @@ function ArtifactPartView({ part }: { part: A2APart }) {
350
345
  const isImage = part.mediaType?.startsWith("image/");
351
346
  if (isImage) {
352
347
  return (
348
+ // biome-ignore lint/performance/noImgElement: example component
353
349
  <img
354
350
  src={`data:${part.mediaType};base64,${part.raw}`}
355
351
  alt={part.filename ?? "image"}
@@ -377,8 +373,6 @@ function ArtifactPartView({ part }: { part: A2APart }) {
377
373
  return null;
378
374
  }
379
375
 
380
- // === Artifact Panel ===
381
-
382
376
  function ArtifactPanel() {
383
377
  const artifacts = useA2AArtifacts();
384
378
 
@@ -417,8 +411,6 @@ function ArtifactPanel() {
417
411
  );
418
412
  }
419
413
 
420
- // === Agent Card Banner ===
421
-
422
414
  function AgentCardBanner() {
423
415
  const card = useA2AAgentCard();
424
416
 
@@ -449,8 +441,6 @@ function AgentCardBanner() {
449
441
  );
450
442
  }
451
443
 
452
- // === Thread with Suggestions ===
453
-
454
444
  function ThreadWithSuggestions() {
455
445
  const aui = useAui({
456
446
  suggestions: Suggestions([
@@ -488,8 +478,6 @@ function ThreadWithSuggestions() {
488
478
  );
489
479
  }
490
480
 
491
- // === Main ===
492
-
493
481
  export default function Home() {
494
482
  return (
495
483
  <main className="flex h-dvh flex-col">
@@ -569,21 +557,21 @@ export default nextConfig;
569
557
  "class-variance-authority": "^0.7.1",
570
558
  "clsx": "^2.1.1",
571
559
  "lucide-react": "^1.8.0",
572
- "next": "^16.2.3",
560
+ "next": "^16.2.4",
573
561
  "react": "^19.2.5",
574
562
  "react-dom": "^19.2.5",
575
563
  "tailwind-merge": "^3.5.0"
576
564
  },
577
565
  "devDependencies": {
578
566
  "@assistant-ui/x-buildutils": "workspace:*",
579
- "@tailwindcss/postcss": "^4.2.2",
567
+ "@tailwindcss/postcss": "^4.2.4",
580
568
  "@types/node": "^25.6.0",
581
569
  "@types/react": "^19.2.14",
582
570
  "@types/react-dom": "^19.2.3",
583
- "postcss": "^8.5.9",
584
- "tailwindcss": "^4.2.2",
571
+ "postcss": "^8.5.10",
572
+ "tailwindcss": "^4.2.4",
585
573
  "tw-animate-css": "^1.4.0",
586
- "typescript": "^6.0.2"
574
+ "typescript": "^6.0.3"
587
575
  }
588
576
  }
589
577
 
@@ -141,6 +141,8 @@ export const metadata: Metadata = {
141
141
  description: "Generated by create next app",
142
142
  };
143
143
 
144
+ export const dynamic = "force-dynamic";
145
+
144
146
  export default function RootLayout({
145
147
  children,
146
148
  }: Readonly<{
@@ -182,7 +184,7 @@ export function MyRuntimeProvider({
182
184
  children,
183
185
  }: Readonly<{ children: ReactNode }>) {
184
186
  const agentUrl =
185
- (process.env["NEXT_PUBLIC_AGUI_AGENT_URL"] as string | undefined) ??
187
+ (process.env.NEXT_PUBLIC_AGUI_AGENT_URL as string | undefined) ??
186
188
  "http://localhost:8000/agent";
187
189
 
188
190
  // Simple in-memory thread storage
@@ -313,6 +315,7 @@ function NewThreadButton() {
313
315
 
314
316
  return (
315
317
  <button
318
+ type="button"
316
319
  onClick={() => aui.threads().switchToNewThread()}
317
320
  className="absolute top-4 right-4 z-10 flex items-center gap-2 rounded-lg border bg-background px-3 py-2 font-medium text-sm shadow-sm transition-colors hover:bg-accent"
318
321
  >
@@ -421,21 +424,21 @@ export default nextConfig;
421
424
  "class-variance-authority": "^0.7.1",
422
425
  "clsx": "^2.1.1",
423
426
  "lucide-react": "^1.8.0",
424
- "next": "^16.2.3",
427
+ "next": "^16.2.4",
425
428
  "react": "^19.2.5",
426
429
  "react-dom": "^19.2.5",
427
430
  "tailwind-merge": "^3.5.0"
428
431
  },
429
432
  "devDependencies": {
430
433
  "@assistant-ui/x-buildutils": "workspace:*",
431
- "@tailwindcss/postcss": "^4.2.2",
434
+ "@tailwindcss/postcss": "^4.2.4",
432
435
  "@types/node": "^25.6.0",
433
436
  "@types/react": "^19.2.14",
434
437
  "@types/react-dom": "^19.2.3",
435
- "postcss": "^8.5.9",
436
- "tailwindcss": "^4.2.2",
438
+ "postcss": "^8.5.10",
439
+ "tailwindcss": "^4.2.4",
437
440
  "tw-animate-css": "^1.4.0",
438
- "typescript": "^6.0.2"
441
+ "typescript": "^6.0.3"
439
442
  }
440
443
  }
441
444
 
@@ -6,7 +6,7 @@
6
6
  import { openai } from "@ai-sdk/openai";
7
7
  import { frontendTools } from "@assistant-ui/react-ai-sdk";
8
8
  import {
9
- JSONSchema7,
9
+ type JSONSchema7,
10
10
  streamText,
11
11
  convertToModelMessages,
12
12
  type UIMessage,
@@ -315,16 +315,16 @@ export default nextConfig;
315
315
  "start": "next start"
316
316
  },
317
317
  "dependencies": {
318
- "@ai-sdk/openai": "^3.0.52",
318
+ "@ai-sdk/openai": "^3.0.53",
319
319
  "@assistant-ui/react": "workspace:*",
320
320
  "@assistant-ui/react-ai-sdk": "workspace:*",
321
321
  "@assistant-ui/react-markdown": "workspace:*",
322
322
  "@assistant-ui/ui": "workspace:*",
323
- "ai": "^6.0.159",
323
+ "ai": "^6.0.168",
324
324
  "class-variance-authority": "^0.7.1",
325
325
  "clsx": "^2.1.1",
326
326
  "lucide-react": "^1.8.0",
327
- "next": "^16.2.3",
327
+ "next": "^16.2.4",
328
328
  "react": "^19.2.5",
329
329
  "react-dom": "^19.2.5",
330
330
  "tailwind-merge": "^3.5.0",
@@ -332,14 +332,14 @@ export default nextConfig;
332
332
  },
333
333
  "devDependencies": {
334
334
  "@assistant-ui/x-buildutils": "workspace:*",
335
- "@tailwindcss/postcss": "^4.2.2",
335
+ "@tailwindcss/postcss": "^4.2.4",
336
336
  "@types/node": "^25.6.0",
337
337
  "@types/react": "^19.2.14",
338
338
  "@types/react-dom": "^19.2.3",
339
- "postcss": "^8.5.9",
340
- "tailwindcss": "^4.2.2",
339
+ "postcss": "^8.5.10",
340
+ "tailwindcss": "^4.2.4",
341
341
  "tw-animate-css": "^1.4.0",
342
- "typescript": "^6.0.2"
342
+ "typescript": "^6.0.3"
343
343
  }
344
344
  }
345
345
 
@@ -258,7 +258,7 @@ function ArtifactsView() {
258
258
  .at(-1);
259
259
  });
260
260
 
261
- const code = lastToolCall?.args["code"] as string | undefined;
261
+ const code = lastToolCall?.args.code as string | undefined;
262
262
  const isComplete = lastToolCall?.result !== undefined;
263
263
 
264
264
  if (!code) return null;
@@ -268,6 +268,7 @@ function ArtifactsView() {
268
268
  <div className="flex h-full w-full flex-col overflow-hidden rounded-lg border">
269
269
  <div className="flex border-b">
270
270
  <button
271
+ type="button"
271
272
  onClick={() => setTab("source")}
272
273
  className={`inline-flex flex-1 items-center justify-center gap-2 px-4 py-2.5 font-medium text-sm transition-colors ${
273
274
  tab === "source"
@@ -279,6 +280,7 @@ function ArtifactsView() {
279
280
  Source Code
280
281
  </button>
281
282
  <button
283
+ type="button"
282
284
  onClick={() => isComplete && setTab("preview")}
283
285
  disabled={!isComplete}
284
286
  className={`inline-flex flex-1 items-center justify-center gap-2 px-4 py-2.5 font-medium text-sm transition-colors ${
@@ -413,16 +415,16 @@ export default nextConfig;
413
415
  "start": "next start"
414
416
  },
415
417
  "dependencies": {
416
- "@ai-sdk/openai": "^3.0.52",
418
+ "@ai-sdk/openai": "^3.0.53",
417
419
  "@assistant-ui/react": "workspace:*",
418
420
  "@assistant-ui/react-ai-sdk": "workspace:*",
419
421
  "@assistant-ui/react-markdown": "workspace:*",
420
422
  "@assistant-ui/ui": "workspace:*",
421
- "ai": "^6.0.159",
423
+ "ai": "^6.0.168",
422
424
  "class-variance-authority": "^0.7.1",
423
425
  "clsx": "^2.1.1",
424
426
  "lucide-react": "^1.8.0",
425
- "next": "^16.2.3",
427
+ "next": "^16.2.4",
426
428
  "react": "^19.2.5",
427
429
  "react-dom": "^19.2.5",
428
430
  "tailwind-merge": "^3.5.0",
@@ -430,14 +432,14 @@ export default nextConfig;
430
432
  },
431
433
  "devDependencies": {
432
434
  "@assistant-ui/x-buildutils": "workspace:*",
433
- "@tailwindcss/postcss": "^4.2.2",
435
+ "@tailwindcss/postcss": "^4.2.4",
434
436
  "@types/node": "^25.6.0",
435
437
  "@types/react": "^19.2.14",
436
438
  "@types/react-dom": "^19.2.3",
437
- "postcss": "^8.5.9",
438
- "tailwindcss": "^4.2.2",
439
+ "postcss": "^8.5.10",
440
+ "tailwindcss": "^4.2.4",
439
441
  "tw-animate-css": "^1.4.0",
440
- "typescript": "^6.0.2"
442
+ "typescript": "^6.0.3"
441
443
  }
442
444
  }
443
445
 
@@ -170,16 +170,16 @@ export default function RootLayout({
170
170
 
171
171
  import {
172
172
  AssistantRuntimeProvider,
173
- AssistantTransportConnectionMetadata,
173
+ type AssistantTransportConnectionMetadata,
174
174
  makeAssistantTool,
175
175
  unstable_createMessageConverter as createMessageConverter,
176
176
  useAssistantTransportRuntime,
177
177
  } from "@assistant-ui/react";
178
178
  import {
179
179
  convertLangChainMessages,
180
- LangChainMessage,
180
+ type LangChainMessage,
181
181
  } from "@assistant-ui/react-langgraph";
182
- import { ReactNode } from "react";
182
+ import type { ReactNode } from "react";
183
183
  import { z } from "zod";
184
184
 
185
185
  // Frontend tool with execute function
@@ -274,8 +274,7 @@ export function MyRuntimeProvider({ children }: MyRuntimeProviderProps) {
274
274
  initialState: {
275
275
  messages: [],
276
276
  },
277
- api:
278
- process.env["NEXT_PUBLIC_API_URL"] || "http://localhost:8010/assistant",
277
+ api: process.env.NEXT_PUBLIC_API_URL || "http://localhost:8010/assistant",
279
278
  converter,
280
279
  headers: async () => ({
281
280
  "Test-Header": "test-value",
@@ -424,7 +423,7 @@ export default nextConfig;
424
423
  "class-variance-authority": "^0.7.1",
425
424
  "clsx": "^2.1.1",
426
425
  "lucide-react": "^1.8.0",
427
- "next": "^16.2.3",
426
+ "next": "^16.2.4",
428
427
  "react": "^19.2.5",
429
428
  "react-dom": "^19.2.5",
430
429
  "tailwind-merge": "^3.5.0",
@@ -432,14 +431,14 @@ export default nextConfig;
432
431
  },
433
432
  "devDependencies": {
434
433
  "@assistant-ui/x-buildutils": "workspace:*",
435
- "@tailwindcss/postcss": "^4.2.2",
434
+ "@tailwindcss/postcss": "^4.2.4",
436
435
  "@types/node": "^25.6.0",
437
436
  "@types/react": "^19.2.14",
438
437
  "@types/react-dom": "^19.2.3",
439
- "postcss": "^8.5.9",
440
- "tailwindcss": "^4.2.2",
438
+ "postcss": "^8.5.10",
439
+ "tailwindcss": "^4.2.4",
441
440
  "tw-animate-css": "^1.4.0",
442
- "typescript": "^6.0.2"
441
+ "typescript": "^6.0.3"
443
442
  }
444
443
  }
445
444
 
@@ -557,16 +557,16 @@ export default nextConfig;
557
557
  "start": "next start"
558
558
  },
559
559
  "dependencies": {
560
- "@ai-sdk/openai": "^3.0.52",
560
+ "@ai-sdk/openai": "^3.0.53",
561
561
  "@assistant-ui/react": "workspace:*",
562
562
  "@assistant-ui/react-ai-sdk": "workspace:*",
563
563
  "@assistant-ui/react-markdown": "workspace:*",
564
564
  "@assistant-ui/ui": "workspace:*",
565
- "ai": "^6.0.159",
565
+ "ai": "^6.0.168",
566
566
  "class-variance-authority": "^0.7.1",
567
567
  "clsx": "^2.1.1",
568
568
  "lucide-react": "^1.8.0",
569
- "next": "^16.2.3",
569
+ "next": "^16.2.4",
570
570
  "react": "^19.2.5",
571
571
  "react-dom": "^19.2.5",
572
572
  "tailwind-merge": "^3.5.0",
@@ -574,14 +574,14 @@ export default nextConfig;
574
574
  },
575
575
  "devDependencies": {
576
576
  "@assistant-ui/x-buildutils": "workspace:*",
577
- "@tailwindcss/postcss": "^4.2.2",
577
+ "@tailwindcss/postcss": "^4.2.4",
578
578
  "@types/node": "^25.6.0",
579
579
  "@types/react": "^19.2.14",
580
580
  "@types/react-dom": "^19.2.3",
581
- "postcss": "^8.5.9",
582
- "tailwindcss": "^4.2.2",
581
+ "postcss": "^8.5.10",
582
+ "tailwindcss": "^4.2.4",
583
583
  "tw-animate-css": "^1.4.0",
584
- "typescript": "^6.0.2"
584
+ "typescript": "^6.0.3"
585
585
  }
586
586
  }
587
587
 
@@ -472,6 +472,7 @@ export function ThreadList({
472
472
  <div className="flex h-full w-64 shrink-0 flex-col border-r bg-sidebar">
473
473
  <div className="p-3">
474
474
  <button
475
+ type="button"
475
476
  onClick={() => onSelect(null)}
476
477
  className="flex w-full items-center justify-center gap-2 rounded-lg border border-sidebar-border bg-sidebar px-4 py-2 font-medium text-sidebar-foreground text-sm transition-colors hover:bg-sidebar-accent"
477
478
  >
@@ -493,11 +494,12 @@ export function ThreadList({
493
494
  ) : (
494
495
  <div className="space-y-0.5">
495
496
  {threads.map((thread) => (
496
- <div
497
+ <button
498
+ type="button"
497
499
  key={thread.id}
498
500
  onClick={() => onSelect(thread.id)}
499
501
  className={cn(
500
- "group flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm transition-colors",
502
+ "group flex w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors",
501
503
  selectedId === thread.id
502
504
  ? "bg-sidebar-accent text-sidebar-accent-foreground"
503
505
  : "text-sidebar-foreground hover:bg-sidebar-accent/50",
@@ -507,6 +509,7 @@ export function ThreadList({
507
509
  {thread.title || "New conversation"}
508
510
  </span>
509
511
  <button
512
+ type="button"
510
513
  onClick={(e) => {
511
514
  e.stopPropagation();
512
515
  onDelete(thread.id);
@@ -516,7 +519,7 @@ export function ThreadList({
516
519
  >
517
520
  <Trash2 className="size-3.5 text-muted-foreground hover:text-destructive" />
518
521
  </button>
519
- </div>
522
+ </button>
520
523
  ))}
521
524
  </div>
522
525
  )}
@@ -565,27 +568,27 @@ export default nextConfig;
565
568
  "start": "next start"
566
569
  },
567
570
  "dependencies": {
568
- "@ai-sdk/openai": "^3.0.52",
571
+ "@ai-sdk/openai": "^3.0.53",
569
572
  "@assistant-ui/cloud-ai-sdk": "workspace:*",
570
- "ai": "^6.0.159",
573
+ "ai": "^6.0.168",
571
574
  "class-variance-authority": "^0.7.1",
572
575
  "clsx": "^2.1.1",
573
576
  "lucide-react": "^1.8.0",
574
- "next": "^16.2.3",
577
+ "next": "^16.2.4",
575
578
  "react": "^19.2.5",
576
579
  "react-dom": "^19.2.5",
577
580
  "tailwind-merge": "^3.5.0"
578
581
  },
579
582
  "devDependencies": {
580
583
  "@assistant-ui/x-buildutils": "workspace:*",
581
- "@tailwindcss/postcss": "^4.2.2",
584
+ "@tailwindcss/postcss": "^4.2.4",
582
585
  "@types/node": "^25.6.0",
583
586
  "@types/react": "^19.2.14",
584
587
  "@types/react-dom": "^19.2.3",
585
- "postcss": "^8.5.9",
586
- "tailwindcss": "^4.2.2",
588
+ "postcss": "^8.5.10",
589
+ "tailwindcss": "^4.2.4",
587
590
  "tw-animate-css": "^1.4.0",
588
- "typescript": "^6.0.2"
591
+ "typescript": "^6.0.3"
589
592
  }
590
593
  }
591
594
 
@@ -206,7 +206,7 @@ import { AssistantCloud, AssistantRuntimeProvider } from "@assistant-ui/react";
206
206
  import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
207
207
 
208
208
  const cloud = new AssistantCloud({
209
- baseUrl: process.env["NEXT_PUBLIC_ASSISTANT_BASE_URL"]!,
209
+ baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL!,
210
210
  anonymous: true,
211
211
  });
212
212
 
@@ -327,30 +327,30 @@ export default nextConfig;
327
327
  "start": "next start"
328
328
  },
329
329
  "dependencies": {
330
- "@ai-sdk/openai": "^3.0.52",
330
+ "@ai-sdk/openai": "^3.0.53",
331
331
  "@assistant-ui/react": "workspace:*",
332
332
  "@assistant-ui/react-ai-sdk": "workspace:*",
333
333
  "@assistant-ui/react-markdown": "workspace:*",
334
334
  "@assistant-ui/ui": "workspace:*",
335
- "ai": "^6.0.159",
335
+ "ai": "^6.0.168",
336
336
  "class-variance-authority": "^0.7.1",
337
337
  "clsx": "^2.1.1",
338
338
  "lucide-react": "^1.8.0",
339
- "next": "^16.2.3",
339
+ "next": "^16.2.4",
340
340
  "react": "^19.2.5",
341
341
  "react-dom": "^19.2.5",
342
342
  "tailwind-merge": "^3.5.0"
343
343
  },
344
344
  "devDependencies": {
345
345
  "@assistant-ui/x-buildutils": "workspace:*",
346
- "@tailwindcss/postcss": "^4.2.2",
346
+ "@tailwindcss/postcss": "^4.2.4",
347
347
  "@types/node": "^25.6.0",
348
348
  "@types/react": "^19.2.14",
349
349
  "@types/react-dom": "^19.2.3",
350
- "postcss": "^8.5.9",
351
- "tailwindcss": "^4.2.2",
350
+ "postcss": "^8.5.10",
351
+ "tailwindcss": "^4.2.4",
352
352
  "tw-animate-css": "^1.4.0",
353
- "typescript": "^6.0.2"
353
+ "typescript": "^6.0.3"
354
354
  }
355
355
  }
356
356
 
@@ -378,7 +378,6 @@ Create `.env.local`:
378
378
 
379
379
  ```
380
380
  OPENAI_API_KEY=sk-...
381
- JWT_SECRET=your-jwt-secret
382
381
  ASSISTANT_API_KEY=sk-aui-proj-...
383
382
  NEXT_PUBLIC_ASSISTANT_BASE_URL=https://proj-xxxx.assistant-api.com
384
383
  ```
@@ -6,7 +6,7 @@
6
6
  import { openai } from "@ai-sdk/openai";
7
7
  import {
8
8
  streamText,
9
- UIMessage,
9
+ type UIMessage,
10
10
  convertToModelMessages,
11
11
  tool,
12
12
  stepCountIs,
@@ -414,17 +414,17 @@ export default nextConfig;
414
414
  "start": "next start"
415
415
  },
416
416
  "dependencies": {
417
- "@ai-sdk/openai": "^3.0.52",
417
+ "@ai-sdk/openai": "^3.0.53",
418
418
  "@assistant-ui/react": "workspace:*",
419
419
  "@assistant-ui/react-ai-sdk": "workspace:*",
420
420
  "@assistant-ui/react-markdown": "workspace:*",
421
421
  "@assistant-ui/ui": "workspace:*",
422
- "ai": "^6.0.159",
422
+ "ai": "^6.0.168",
423
423
  "assistant-stream": "workspace:*",
424
424
  "class-variance-authority": "^0.7.1",
425
425
  "clsx": "^2.1.1",
426
426
  "lucide-react": "^1.8.0",
427
- "next": "^16.2.3",
427
+ "next": "^16.2.4",
428
428
  "react": "^19.2.5",
429
429
  "react-dom": "^19.2.5",
430
430
  "tailwind-merge": "^3.5.0",
@@ -432,14 +432,14 @@ export default nextConfig;
432
432
  },
433
433
  "devDependencies": {
434
434
  "@assistant-ui/x-buildutils": "workspace:*",
435
- "@tailwindcss/postcss": "^4.2.2",
435
+ "@tailwindcss/postcss": "^4.2.4",
436
436
  "@types/node": "^25.6.0",
437
437
  "@types/react": "^19.2.14",
438
438
  "@types/react-dom": "^19.2.3",
439
- "postcss": "^8.5.9",
440
- "tailwindcss": "^4.2.2",
439
+ "postcss": "^8.5.10",
440
+ "tailwindcss": "^4.2.4",
441
441
  "tw-animate-css": "^1.4.0",
442
- "typescript": "^6.0.2"
442
+ "typescript": "^6.0.3"
443
443
  }
444
444
  }
445
445