@assistant-ui/mcp-docs-server 0.1.35 → 0.1.36

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 (107) 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 +2 -2
  4. package/.docs/organized/code-examples/with-ai-sdk-v6.md +4 -4
  5. package/.docs/organized/code-examples/with-artifacts.md +4 -4
  6. package/.docs/organized/code-examples/with-assistant-transport.md +70 -54
  7. package/.docs/organized/code-examples/with-browser-extension.md +4 -4
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +40 -89
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +4 -4
  10. package/.docs/organized/code-examples/with-cloud.md +4 -4
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +4 -4
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +6 -6
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +6 -6
  14. package/.docs/organized/code-examples/with-eve.md +343 -0
  15. package/.docs/organized/code-examples/with-expo.md +909 -932
  16. package/.docs/organized/code-examples/with-external-store.md +2 -2
  17. package/.docs/organized/code-examples/with-ffmpeg.md +5 -8
  18. package/.docs/organized/code-examples/with-generative-ui.md +5 -5
  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 +166 -338
  23. package/.docs/organized/code-examples/with-langchain.md +4 -4
  24. package/.docs/organized/code-examples/with-langgraph.md +20 -157
  25. package/.docs/organized/code-examples/with-livekit.md +6 -6
  26. package/.docs/organized/code-examples/with-mcp.md +4 -4
  27. package/.docs/organized/code-examples/with-opencode.md +3 -3
  28. package/.docs/organized/code-examples/with-pi.md +9 -7
  29. package/.docs/organized/code-examples/with-react-hook-form.md +13 -6
  30. package/.docs/organized/code-examples/with-react-ink-web.md +5 -5
  31. package/.docs/organized/code-examples/with-react-ink.md +1 -1
  32. package/.docs/organized/code-examples/with-react-router.md +10 -10
  33. package/.docs/organized/code-examples/with-resumable-stream.md +5 -5
  34. package/.docs/organized/code-examples/with-store.md +1 -1
  35. package/.docs/organized/code-examples/with-tanstack.md +5 -5
  36. package/.docs/organized/code-examples/with-tap-runtime.md +2 -2
  37. package/.docs/organized/code-examples/with-virtualized-thread.md +44 -24
  38. package/.docs/raw/docs/(docs)/cli.mdx +4 -2
  39. package/.docs/raw/docs/(docs)/devtools.mdx +25 -2
  40. package/.docs/raw/docs/(docs)/index.mdx +5 -2
  41. package/.docs/raw/docs/(docs)/installation.mdx +5 -2
  42. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +16 -16
  43. package/.docs/raw/docs/(reference)/api-reference/hooks/composer-triggers.mdx +73 -42
  44. package/.docs/raw/docs/(reference)/api-reference/hooks/model-context.mdx +3 -20
  45. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +234 -166
  46. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +51 -0
  47. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +4 -1
  48. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +70 -38
  49. package/.docs/raw/docs/(reference)/api-reference/primitives/action-bar.mdx +30 -0
  50. package/.docs/raw/docs/(reference)/api-reference/primitives/attachment.mdx +7 -0
  51. package/.docs/raw/docs/(reference)/api-reference/primitives/branch-picker.mdx +26 -0
  52. package/.docs/raw/docs/(reference)/api-reference/primitives/chain-of-thought.mdx +15 -0
  53. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +103 -0
  54. package/.docs/raw/docs/(reference)/api-reference/primitives/message-part.mdx +16 -0
  55. package/.docs/raw/docs/(reference)/api-reference/primitives/message.mdx +56 -0
  56. package/.docs/raw/docs/(reference)/api-reference/primitives/queue-item.mdx +12 -0
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/selection-toolbar.mdx +12 -0
  58. package/.docs/raw/docs/(reference)/api-reference/primitives/suggestion.mdx +14 -0
  59. package/.docs/raw/docs/(reference)/api-reference/primitives/thread.mdx +57 -1
  60. package/.docs/raw/docs/(reference)/api-reference/tools/index.mdx +6 -0
  61. package/.docs/raw/docs/(reference)/api-reference/tools/interactables-legacy.mdx +55 -0
  62. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +151 -0
  63. package/.docs/raw/docs/(reference)/api-reference/tools/rendering.mdx +15 -15
  64. package/.docs/raw/docs/(reference)/api-reference/tools/toolkits.mdx +20 -20
  65. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +25 -9
  66. package/.docs/raw/docs/guides/headless-composer-input.mdx +113 -0
  67. package/.docs/raw/docs/guides/latex.mdx +28 -22
  68. package/.docs/raw/docs/guides/mentions.mdx +32 -7
  69. package/.docs/raw/docs/guides/slash-commands.mdx +3 -6
  70. package/.docs/raw/docs/guides/speech.mdx +5 -7
  71. package/.docs/raw/docs/guides/virtualization.mdx +77 -7
  72. package/.docs/raw/docs/guides/voice.mdx +3 -2
  73. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +4 -12
  74. package/.docs/raw/docs/integrations/auth/better-auth.mdx +7 -10
  75. package/.docs/raw/docs/integrations/auth/clerk.mdx +3 -9
  76. package/.docs/raw/docs/integrations/auth/next-auth.mdx +3 -8
  77. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +8 -5
  78. package/.docs/raw/docs/integrations/index.mdx +5 -12
  79. package/.docs/raw/docs/integrations/observability/helicone.mdx +3 -4
  80. package/.docs/raw/docs/integrations/observability/langfuse.mdx +3 -5
  81. package/.docs/raw/docs/integrations/observability/langsmith.mdx +3 -2
  82. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +4 -3
  83. package/.docs/raw/docs/primitives/composer.mdx +8 -0
  84. package/.docs/raw/docs/primitives/thread.mdx +24 -0
  85. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +21 -0
  86. package/.docs/raw/docs/runtimes/custom/external-store.mdx +54 -0
  87. package/.docs/raw/docs/runtimes/eve/overview.mdx +100 -0
  88. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +143 -0
  89. package/.docs/raw/docs/runtimes/langchain.mdx +386 -18
  90. package/.docs/raw/docs/runtimes/langgraph/quickstart.mdx +1 -1
  91. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-1.mdx +1 -1
  92. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +6 -0
  93. package/.docs/raw/docs/tools/defining-tools.mdx +4 -0
  94. package/.docs/raw/docs/tools/interactables-legacy.mdx +410 -0
  95. package/.docs/raw/docs/tools/interactables.mdx +892 -223
  96. package/.docs/raw/docs/tools/mcp.mdx +4 -4
  97. package/.docs/raw/docs/tools/multi-agent.mdx +5 -0
  98. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +2 -0
  99. package/.docs/raw/docs/ui/file.mdx +1 -1
  100. package/.docs/raw/docs/ui/part-grouping.mdx +38 -0
  101. package/.docs/raw/docs/utilities/react-o11y.mdx +92 -6
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +18 -2
  104. package/dist/index.js.map +1 -1
  105. package/package.json +4 -4
  106. package/src/index.ts +14 -6
  107. package/src/tools/tests/mcp-protocol.test.ts +9 -0
@@ -336,11 +336,11 @@ export default withAui(nextConfig);
336
336
  "@assistant-ui/react-langchain": "workspace:*",
337
337
  "@assistant-ui/react-markdown": "workspace:*",
338
338
  "@assistant-ui/ui": "workspace:*",
339
- "@langchain/langgraph-sdk": "^1.9.22",
340
- "@langchain/react": "^1.0.23",
339
+ "@langchain/langgraph-sdk": "^1.9.23",
340
+ "@langchain/react": "^1.0.24",
341
341
  "class-variance-authority": "^0.7.1",
342
342
  "clsx": "^2.1.1",
343
- "lucide-react": "^1.18.0",
343
+ "lucide-react": "^1.21.0",
344
344
  "next": "^16.2.9",
345
345
  "react": "^19.2.7",
346
346
  "react-dom": "^19.2.7",
@@ -350,7 +350,7 @@ export default withAui(nextConfig);
350
350
  "@assistant-ui/next": "workspace:*",
351
351
  "@assistant-ui/x-buildutils": "workspace:*",
352
352
  "@tailwindcss/postcss": "^4.3.1",
353
- "@types/node": "^25.9.3",
353
+ "@types/node": "^26.0.0",
354
354
  "@types/react": "^19.2.17",
355
355
  "@types/react-dom": "^19.2.3",
356
356
  "postcss": "^8.5.15",
@@ -243,52 +243,29 @@ export default function RootLayout({
243
243
  "use client";
244
244
 
245
245
  import { AssistantRuntimeProvider } from "@assistant-ui/react";
246
- import { useLangGraphRuntime } from "@assistant-ui/react-langgraph";
247
- import {
248
- createThread,
249
- getThreadState,
250
- getCheckpointId,
251
- sendMessage,
252
- } from "@/lib/chatApi";
253
- import type { LangChainMessage } from "@assistant-ui/react-langgraph";
246
+ import { useStreamRuntime } from "@assistant-ui/react-langchain";
247
+ import { Client } from "@langchain/langgraph-sdk";
254
248
 
255
249
  export function MyRuntimeProvider({
256
250
  children,
257
251
  }: Readonly<{
258
252
  children: React.ReactNode;
259
253
  }>) {
260
- const runtime = useLangGraphRuntime({
261
- stream: async function* (messages, { initialize, ...config }) {
262
- const { externalId } = await initialize();
263
- if (!externalId) throw new Error("Thread not found");
264
-
265
- const generator = sendMessage({
266
- threadId: externalId,
267
- messages,
268
- config,
269
- });
270
-
271
- yield* generator;
272
- },
254
+ const apiUrl =
255
+ process.env.NEXT_PUBLIC_LANGGRAPH_API_URL ||
256
+ (typeof window !== "undefined"
257
+ ? new URL("/api", window.location.href).href
258
+ : undefined);
259
+
260
+ const runtime = useStreamRuntime({
261
+ assistantId: process.env.NEXT_PUBLIC_LANGGRAPH_ASSISTANT_ID!,
262
+ apiUrl,
273
263
  create: async () => {
274
- const { thread_id } = await createThread();
264
+ const { thread_id } = await new Client(
265
+ apiUrl ? { apiUrl } : {},
266
+ ).threads.create();
275
267
  return { externalId: thread_id };
276
268
  },
277
- load: async (externalId) => {
278
- const state = await getThreadState(externalId);
279
- return {
280
- messages:
281
- (state.values as { messages?: LangChainMessage[] }).messages ?? [],
282
- interrupts: state.tasks[0]?.interrupts ?? [],
283
- };
284
- },
285
- getCheckpointId,
286
- eventHandlers: {
287
- onMessageChunk: (chunk, metadata) => {
288
- console.log("[messages-tuple] chunk:", chunk);
289
- console.log("[messages-tuple] metadata:", metadata);
290
- },
291
- },
292
269
  });
293
270
 
294
271
  return (
@@ -724,121 +701,6 @@ export const ToolFallback: ToolCallMessagePartComponent = ({
724
701
 
725
702
  ```
726
703
 
727
- ## lib/chatApi.ts
728
-
729
- ```typescript
730
- import { type ThreadState, Client } from "@langchain/langgraph-sdk";
731
- import type {
732
- LangChainMessage,
733
- LangGraphMessagesEvent,
734
- LangGraphSendMessageConfig,
735
- } from "@assistant-ui/react-langgraph";
736
-
737
- const createClient = () => {
738
- const apiUrl =
739
- process.env.NEXT_PUBLIC_LANGGRAPH_API_URL ||
740
- new URL("/api", window.location.href).href;
741
- return new Client({
742
- apiUrl,
743
- });
744
- };
745
-
746
- export const createThread = async () => {
747
- const client = createClient();
748
- return client.threads.create();
749
- };
750
-
751
- export const createAssistant = async (graphId: string) => {
752
- const client = createClient();
753
- return client.assistants.create({ graphId });
754
- };
755
-
756
- export const getThreadState = async (
757
- threadId: string,
758
- ): Promise<ThreadState<Record<string, unknown>>> => {
759
- const client = createClient();
760
- return client.threads.getState(threadId);
761
- };
762
-
763
- const matchesParentMessages = (
764
- stateMessages: LangChainMessage[] | undefined,
765
- parentMessages: LangChainMessage[],
766
- ) => {
767
- if (!stateMessages || stateMessages.length !== parentMessages.length) {
768
- return false;
769
- }
770
-
771
- const hasStableIds =
772
- parentMessages.every((message) => typeof message.id === "string") &&
773
- stateMessages.every((message) => typeof message.id === "string");
774
-
775
- if (!hasStableIds) {
776
- return false;
777
- }
778
-
779
- return parentMessages.every(
780
- (message, index) => message.id === stateMessages[index]?.id,
781
- );
782
- };
783
-
784
- export const getCheckpointId = async (
785
- threadId: string,
786
- parentMessages: LangChainMessage[],
787
- ): Promise<string | null> => {
788
- const client = createClient();
789
- const history = await client.threads.getHistory(threadId);
790
- for (const state of history) {
791
- const stateMessages = (state.values as { messages?: LangChainMessage[] })
792
- .messages;
793
- if (matchesParentMessages(stateMessages, parentMessages)) {
794
- return state.checkpoint.checkpoint_id ?? null;
795
- }
796
- }
797
- return null;
798
- };
799
-
800
- export const updateState = async (
801
- threadId: string,
802
- fields: {
803
- newState: Record<string, unknown>;
804
- asNode?: string;
805
- },
806
- ) => {
807
- const client = createClient();
808
- return client.threads.updateState(threadId, {
809
- values: fields.newState,
810
- asNode: fields.asNode!,
811
- });
812
- };
813
-
814
- export const sendMessage = (params: {
815
- threadId: string;
816
- messages: LangChainMessage[];
817
- config?: LangGraphSendMessageConfig;
818
- }): AsyncGenerator<LangGraphMessagesEvent<LangChainMessage>> => {
819
- const client = createClient();
820
-
821
- const { checkpointId, ...restConfig } = params.config ?? {};
822
-
823
- return client.runs.stream(
824
- params.threadId,
825
- process.env.NEXT_PUBLIC_LANGGRAPH_ASSISTANT_ID!,
826
- {
827
- input: params.messages.length > 0 ? { messages: params.messages } : null,
828
- config: {
829
- configurable: {
830
- model_name: "openai",
831
- },
832
- },
833
- streamMode: ["messages-tuple", "values", "custom"],
834
- ...(checkpointId && { checkpoint_id: checkpointId }),
835
- ...restConfig,
836
- },
837
- ) as AsyncGenerator<LangGraphMessagesEvent<LangChainMessage>>;
838
- };
839
-
840
- ```
841
-
842
704
  ## next.config.ts
843
705
 
844
706
  ```typescript
@@ -875,13 +737,14 @@ export default withAui(nextConfig);
875
737
  },
876
738
  "dependencies": {
877
739
  "@assistant-ui/react": "workspace:*",
878
- "@assistant-ui/react-langgraph": "workspace:*",
740
+ "@assistant-ui/react-langchain": "workspace:*",
879
741
  "@assistant-ui/react-markdown": "workspace:*",
880
742
  "@assistant-ui/ui": "workspace:*",
881
- "@langchain/langgraph-sdk": "^1.9.22",
743
+ "@langchain/langgraph-sdk": "^1.9.23",
744
+ "@langchain/react": "^1.0.24",
882
745
  "class-variance-authority": "^0.7.1",
883
746
  "clsx": "^2.1.1",
884
- "lucide-react": "^1.18.0",
747
+ "lucide-react": "^1.21.0",
885
748
  "next": "^16.2.9",
886
749
  "react": "^19.2.7",
887
750
  "react-dom": "^19.2.7",
@@ -891,7 +754,7 @@ export default withAui(nextConfig);
891
754
  "@assistant-ui/next": "workspace:*",
892
755
  "@assistant-ui/x-buildutils": "workspace:*",
893
756
  "@tailwindcss/postcss": "^4.3.1",
894
- "@types/node": "^25.9.3",
757
+ "@types/node": "^26.0.0",
895
758
  "@types/react": "^19.2.17",
896
759
  "@types/react-dom": "^19.2.3",
897
760
  "postcss": "^8.5.15",
@@ -942,7 +805,7 @@ npm run dev
942
805
 
943
806
  ## Features
944
807
 
945
- - LangGraph agent integration via `@assistant-ui/react-langgraph`
808
+ - LangGraph agent integration via `@assistant-ui/react-langchain`
946
809
  - Thread list for conversation management
947
810
  - Custom tool UI for stock price snapshots
948
811
  - Custom tool UI for stock purchases
@@ -554,19 +554,19 @@ export default withAui(nextConfig);
554
554
  "version": "0.0.0",
555
555
  "type": "module",
556
556
  "dependencies": {
557
- "@ai-sdk/openai": "^3.0.71",
558
- "@ai-sdk/react": "^3.0.206",
557
+ "@ai-sdk/openai": "^3.0.73",
558
+ "@ai-sdk/react": "^3.0.210",
559
559
  "@assistant-ui/react": "workspace:^",
560
560
  "@assistant-ui/react-ai-sdk": "workspace:*",
561
561
  "@assistant-ui/react-markdown": "workspace:^",
562
562
  "@assistant-ui/ui": "workspace:*",
563
563
  "@tailwindcss/postcss": "^4.3.1",
564
- "ai": "^6.0.204",
564
+ "ai": "^6.0.208",
565
565
  "class-variance-authority": "^0.7.1",
566
566
  "clsx": "^2.1.1",
567
567
  "livekit-client": "^2.19.2",
568
- "livekit-server-sdk": "^2.15.4",
569
- "lucide-react": "^1.18.0",
568
+ "livekit-server-sdk": "^2.15.5",
569
+ "lucide-react": "^1.21.0",
570
570
  "motion": "^12.40.0",
571
571
  "next": "^16.2.9",
572
572
  "postcss": "^8.5.15",
@@ -579,7 +579,7 @@ export default withAui(nextConfig);
579
579
  "devDependencies": {
580
580
  "@assistant-ui/next": "workspace:*",
581
581
  "@assistant-ui/x-buildutils": "workspace:*",
582
- "@types/node": "^25.9.3",
582
+ "@types/node": "^26.0.0",
583
583
  "@types/react": "^19.2.17",
584
584
  "@types/react-dom": "^19.2.3",
585
585
  "tw-animate-css": "^1.4.0",
@@ -376,7 +376,7 @@ export default nextConfig;
376
376
  "start:server": "tsx server/server.ts"
377
377
  },
378
378
  "dependencies": {
379
- "@ai-sdk/openai": "^3.0.71",
379
+ "@ai-sdk/openai": "^3.0.73",
380
380
  "@assistant-ui/react": "workspace:*",
381
381
  "@assistant-ui/react-ai-sdk": "workspace:*",
382
382
  "@assistant-ui/react-markdown": "workspace:*",
@@ -385,13 +385,13 @@ export default nextConfig;
385
385
  "@assistant-ui/tap": "workspace:*",
386
386
  "@assistant-ui/ui": "workspace:*",
387
387
  "@modelcontextprotocol/sdk": "^1.29.0",
388
- "ai": "^6.0.204",
388
+ "ai": "^6.0.208",
389
389
  "assistant-stream": "workspace:*",
390
390
  "class-variance-authority": "^0.7.1",
391
391
  "clsx": "^2.1.1",
392
392
  "cors": "^2.8.6",
393
393
  "express": "^5.2.1",
394
- "lucide-react": "^1.18.0",
394
+ "lucide-react": "^1.21.0",
395
395
  "next": "^16.2.9",
396
396
  "react": "^19.2.7",
397
397
  "react-dom": "^19.2.7",
@@ -403,7 +403,7 @@ export default nextConfig;
403
403
  "@tailwindcss/postcss": "^4.3.1",
404
404
  "@types/cors": "^2.8.19",
405
405
  "@types/express": "^5.0.6",
406
- "@types/node": "^25.9.3",
406
+ "@types/node": "^26.0.0",
407
407
  "@types/react": "^19.2.17",
408
408
  "@types/react-dom": "^19.2.3",
409
409
  "concurrently": "^10.0.3",
@@ -1894,10 +1894,10 @@ export default withAui(nextConfig);
1894
1894
  "@assistant-ui/react-markdown": "workspace:*",
1895
1895
  "@assistant-ui/react-opencode": "workspace:*",
1896
1896
  "@assistant-ui/ui": "workspace:*",
1897
- "@pierre/diffs": "^1.2.10",
1897
+ "@pierre/diffs": "^1.2.11",
1898
1898
  "class-variance-authority": "^0.7.1",
1899
1899
  "clsx": "^2.1.1",
1900
- "lucide-react": "^1.18.0",
1900
+ "lucide-react": "^1.21.0",
1901
1901
  "next": "^16.2.9",
1902
1902
  "react": "^19.2.7",
1903
1903
  "react-dom": "^19.2.7",
@@ -1908,7 +1908,7 @@ export default withAui(nextConfig);
1908
1908
  "@assistant-ui/next": "workspace:*",
1909
1909
  "@assistant-ui/x-buildutils": "workspace:*",
1910
1910
  "@tailwindcss/postcss": "^4.3.1",
1911
- "@types/node": "^25.9.3",
1911
+ "@types/node": "^26.0.0",
1912
1912
  "@types/react": "^19.2.17",
1913
1913
  "@types/react-dom": "^19.2.3",
1914
1914
  "postcss": "^8.5.15",
@@ -1930,12 +1930,12 @@ export default withAui(nextConfig);
1930
1930
  "@assistant-ui/react-markdown": "workspace:*",
1931
1931
  "@assistant-ui/react-pi": "workspace:*",
1932
1932
  "@assistant-ui/ui": "workspace:*",
1933
- "@earendil-works/pi-coding-agent": "^0.79.1",
1933
+ "@earendil-works/pi-coding-agent": "^0.79.9",
1934
1934
  "class-variance-authority": "^0.7.1",
1935
1935
  "clsx": "^2.1.1",
1936
- "lucide-react": "^1.18.0",
1936
+ "lucide-react": "^1.21.0",
1937
1937
  "next": "^16.2.9",
1938
- "radix-ui": "^1.5.0",
1938
+ "radix-ui": "^1.6.0",
1939
1939
  "react": "^19.2.7",
1940
1940
  "react-dom": "^19.2.7",
1941
1941
  "tailwind-merge": "^3.6.0"
@@ -1944,7 +1944,7 @@ export default withAui(nextConfig);
1944
1944
  "@assistant-ui/next": "workspace:*",
1945
1945
  "@assistant-ui/x-buildutils": "workspace:*",
1946
1946
  "@tailwindcss/postcss": "^4.3.1",
1947
- "@types/node": "^25.9.3",
1947
+ "@types/node": "^26.0.0",
1948
1948
  "@types/react": "^19.2.17",
1949
1949
  "@types/react-dom": "^19.2.3",
1950
1950
  "postcss": "^8.5.15",
@@ -1968,8 +1968,10 @@ in-process.
1968
1968
  It demonstrates the MVP surface: a thread list, new sessions, a composer with
1969
1969
  steer / follow-up / stop, streaming assistant responses (text + reasoning), tool
1970
1970
  cards with streaming output, the blocking host-UI dialogs (confirm / input /
1971
- select / editor), a model + credential readiness banner, and a context-usage
1972
- indicator. It proves the adapter surface, not a full desktop app shell.
1971
+ select / editor), a model + credential readiness banner, a context-usage
1972
+ indicator, and a read-only workspace browser (`components/workspace-browser.tsx`
1973
+ backed by `/api/pi/fs`) for inspecting the agent's working directory. It proves
1974
+ the adapter surface, not a full desktop app shell.
1973
1975
 
1974
1976
  ## How it fits together
1975
1977
 
@@ -1987,7 +1989,7 @@ the process-singleton supervisor.
1987
1989
 
1988
1990
  ## Model resolution
1989
1991
 
1990
- Resolution mirrors Pi's own `createAgentSession` (PI_MVP_PLAN §5): if you set
1992
+ Resolution mirrors Pi's own `createAgentSession`: if you set
1991
1993
  `PI_PROVIDER` + `PI_MODEL_ID` they win; otherwise the server falls back to Pi's
1992
1994
  configured default (`settings.json`'s `defaultProvider`/`defaultModel`). So if
1993
1995
  you're authenticated with `pi` and have a default model picked, **no env is
@@ -186,7 +186,14 @@ export default function RootLayout({
186
186
  }>) {
187
187
  return (
188
188
  <MyRuntimeProvider>
189
- <html lang="en">
189
+ <html lang="en" suppressHydrationWarning>
190
+ <head>
191
+ <script
192
+ dangerouslySetInnerHTML={{
193
+ __html: `(function(){try{var t=new URLSearchParams(location.search).get("theme");var dark=t?t==="dark":matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.classList.toggle("dark",dark);}catch(e){}})();`,
194
+ }}
195
+ />
196
+ </head>
190
197
  <body
191
198
  className={`${geistSans.variable} ${geistMono.variable} h-dvh font-sans antialiased`}
192
199
  >
@@ -610,27 +617,27 @@ export default withAui(nextConfig);
610
617
  "start": "next start"
611
618
  },
612
619
  "dependencies": {
613
- "@ai-sdk/openai": "^3.0.71",
620
+ "@ai-sdk/openai": "^3.0.73",
614
621
  "@assistant-ui/react": "workspace:*",
615
622
  "@assistant-ui/react-ai-sdk": "workspace:*",
616
623
  "@assistant-ui/react-hook-form": "workspace:*",
617
624
  "@assistant-ui/react-markdown": "workspace:*",
618
625
  "@assistant-ui/ui": "workspace:*",
619
- "ai": "^6.0.204",
626
+ "ai": "^6.0.208",
620
627
  "class-variance-authority": "^0.7.1",
621
628
  "clsx": "^2.1.1",
622
- "lucide-react": "^1.18.0",
629
+ "lucide-react": "^1.21.0",
623
630
  "next": "^16.2.9",
624
631
  "react": "^19.2.7",
625
632
  "react-dom": "^19.2.7",
626
- "react-hook-form": "^7.78.0",
633
+ "react-hook-form": "^7.80.0",
627
634
  "tailwind-merge": "^3.6.0"
628
635
  },
629
636
  "devDependencies": {
630
637
  "@assistant-ui/next": "workspace:*",
631
638
  "@assistant-ui/x-buildutils": "workspace:*",
632
639
  "@tailwindcss/postcss": "^4.3.1",
633
- "@types/node": "^25.9.3",
640
+ "@types/node": "^26.0.0",
634
641
  "@types/react": "^19.2.17",
635
642
  "@types/react-dom": "^19.2.3",
636
643
  "postcss": "^8.5.15",
@@ -555,10 +555,10 @@ export default config;
555
555
  "@assistant-ui/react-ai-sdk": "workspace:*",
556
556
  "@assistant-ui/react-ink": "workspace:*",
557
557
  "@assistant-ui/react-ink-markdown": "workspace:*",
558
- "@wterm/dom": "0.3.0",
559
- "@wterm/react": "0.3.0",
560
- "ai": "^6.0.204",
561
- "ink": "^6.8.0",
558
+ "@wterm/dom": "^0.3.0",
559
+ "@wterm/react": "^0.3.0",
560
+ "ai": "^6.0.208",
561
+ "ink": "^7.1.0",
562
562
  "ink-web": "^0.2.0",
563
563
  "next": "^16.2.9",
564
564
  "react": "^19.2.7",
@@ -567,7 +567,7 @@ export default config;
567
567
  "scheduler": "^0.27.0"
568
568
  },
569
569
  "devDependencies": {
570
- "@types/node": "^25.9.3",
570
+ "@types/node": "^26.0.0",
571
571
  "@types/react": "^19.2.17",
572
572
  "typescript": "^6.0.3"
573
573
  }
@@ -16,7 +16,7 @@
16
16
  "dependencies": {
17
17
  "@assistant-ui/react-ink": "workspace:*",
18
18
  "@assistant-ui/react-ink-markdown": "workspace:*",
19
- "ink": "^7.0.5",
19
+ "ink": "^7.1.0",
20
20
  "react": "^19.2.7"
21
21
  },
22
22
  "devDependencies": {
@@ -773,24 +773,24 @@ export default function Home() {
773
773
  "dependencies": {
774
774
  "@assistant-ui/react": "workspace:*",
775
775
  "@assistant-ui/react-markdown": "workspace:*",
776
- "@react-router/node": "^7.17.0",
777
- "@react-router/serve": "^7.17.0",
776
+ "@react-router/node": "^8.0.1",
777
+ "@react-router/serve": "^8.0.1",
778
778
  "class-variance-authority": "^0.7.1",
779
779
  "clsx": "^2.1.1",
780
780
  "eventsource-parser": "^3.1.0",
781
- "isbot": "^5.1.42",
782
- "lucide-react": "^1.18.0",
783
- "openai": "^6.42.0",
781
+ "isbot": "^5.1.43",
782
+ "lucide-react": "^1.21.0",
783
+ "openai": "^6.44.0",
784
784
  "react": "^19.2.7",
785
785
  "react-dom": "^19.2.7",
786
- "react-router": "^7.17.0",
786
+ "react-router": "^8.0.1",
787
787
  "remark-gfm": "^4.0.1",
788
788
  "tailwind-merge": "^3.6.0"
789
789
  },
790
790
  "devDependencies": {
791
- "@react-router/dev": "^7.17.0",
791
+ "@react-router/dev": "^8.0.1",
792
792
  "@tailwindcss/vite": "^4.3.1",
793
- "@types/node": "^25.9.3",
793
+ "@types/node": "^26.0.0",
794
794
  "@types/react": "^19.2.17",
795
795
  "@types/react-dom": "^19.2.3",
796
796
  "tailwindcss": "^4.3.1",
@@ -821,7 +821,7 @@ export default {
821
821
  ```markdown
822
822
  # React Router Integration
823
823
 
824
- This example demonstrates how to use assistant-ui with React Router (v7) and Vite.
824
+ This example demonstrates how to use assistant-ui with React Router (v8) and Vite.
825
825
 
826
826
  ## Quick Start
827
827
 
@@ -849,7 +849,7 @@ npm run dev
849
849
 
850
850
  ## Features
851
851
 
852
- - React Router v7 integration
852
+ - React Router v8 integration
853
853
  - Vite-based development server
854
854
  - OpenAI streaming chat
855
855
  - Zustand for state management
@@ -514,19 +514,19 @@ export default withAui(nextConfig);
514
514
  "start": "next start"
515
515
  },
516
516
  "dependencies": {
517
- "@ai-sdk/openai": "^3.0.71",
518
- "@ai-sdk/react": "^3.0.206",
517
+ "@ai-sdk/openai": "^3.0.73",
518
+ "@ai-sdk/react": "^3.0.210",
519
519
  "@assistant-ui/react": "workspace:*",
520
520
  "@assistant-ui/react-ai-sdk": "workspace:*",
521
521
  "@assistant-ui/react-markdown": "workspace:*",
522
522
  "@assistant-ui/store": "workspace:*",
523
523
  "@assistant-ui/tap": "workspace:*",
524
524
  "@assistant-ui/ui": "workspace:*",
525
- "ai": "^6.0.204",
525
+ "ai": "^6.0.208",
526
526
  "assistant-stream": "workspace:*",
527
527
  "class-variance-authority": "^0.7.1",
528
528
  "clsx": "^2.1.1",
529
- "lucide-react": "^1.18.0",
529
+ "lucide-react": "^1.21.0",
530
530
  "next": "^16.2.9",
531
531
  "react": "^19.2.7",
532
532
  "react-dom": "^19.2.7",
@@ -538,7 +538,7 @@ export default withAui(nextConfig);
538
538
  "@assistant-ui/next": "workspace:*",
539
539
  "@assistant-ui/x-buildutils": "workspace:*",
540
540
  "@tailwindcss/postcss": "^4.3.1",
541
- "@types/node": "^25.9.3",
541
+ "@types/node": "^26.0.0",
542
542
  "@types/react": "^19.2.17",
543
543
  "@types/react-dom": "^19.2.3",
544
544
  "postcss": "^8.5.15",
@@ -504,7 +504,7 @@ export default withAui(nextConfig);
504
504
  "@assistant-ui/next": "workspace:*",
505
505
  "@assistant-ui/x-buildutils": "workspace:*",
506
506
  "@tailwindcss/postcss": "^4.3.1",
507
- "@types/node": "^25.9.3",
507
+ "@types/node": "^26.0.0",
508
508
  "@types/react": "^19.2.17",
509
509
  "@types/react-dom": "^19.2.3",
510
510
  "postcss": "^8.5.15",
@@ -65,13 +65,13 @@
65
65
  "@assistant-ui/react": "workspace:*",
66
66
  "@assistant-ui/react-markdown": "workspace:*",
67
67
  "@tailwindcss/vite": "^4.3.1",
68
- "@tanstack/react-router": "^1.170.15",
69
- "@tanstack/react-start": "^1.168.25",
68
+ "@tanstack/react-router": "^1.170.16",
69
+ "@tanstack/react-start": "^1.168.26",
70
70
  "class-variance-authority": "^0.7.1",
71
71
  "clsx": "^2.1.1",
72
- "lucide-react": "^1.18.0",
72
+ "lucide-react": "^1.21.0",
73
73
  "nitro": "^3.0.260311-beta",
74
- "openai": "^6.42.0",
74
+ "openai": "^6.44.0",
75
75
  "react": "^19.2.7",
76
76
  "react-dom": "^19.2.7",
77
77
  "remark-gfm": "^4.0.1",
@@ -81,7 +81,7 @@
81
81
  },
82
82
  "devDependencies": {
83
83
  "@assistant-ui/x-buildutils": "workspace:*",
84
- "@types/node": "^25.9.3",
84
+ "@types/node": "^26.0.0",
85
85
  "@types/react": "^19.2.17",
86
86
  "@types/react-dom": "^19.2.3",
87
87
  "@vitejs/plugin-react": "^6.0.2",
@@ -602,7 +602,7 @@ export default withAui(nextConfig);
602
602
  "@assistant-ui/ui": "workspace:*",
603
603
  "class-variance-authority": "^0.7.1",
604
604
  "clsx": "^2.1.1",
605
- "lucide-react": "^1.18.0",
605
+ "lucide-react": "^1.21.0",
606
606
  "next": "^16.2.9",
607
607
  "react": "^19.2.7",
608
608
  "react-dom": "^19.2.7",
@@ -612,7 +612,7 @@ export default withAui(nextConfig);
612
612
  "@assistant-ui/next": "workspace:*",
613
613
  "@assistant-ui/x-buildutils": "workspace:*",
614
614
  "@tailwindcss/postcss": "^4.3.1",
615
- "@types/node": "^25.9.3",
615
+ "@types/node": "^26.0.0",
616
616
  "@types/react": "^19.2.17",
617
617
  "@types/react-dom": "^19.2.3",
618
618
  "postcss": "^8.5.15",