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

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 (185) hide show
  1. package/.docs/organized/code-examples/waterfall.md +17 -18
  2. package/.docs/organized/code-examples/with-a2a.md +20 -15
  3. package/.docs/organized/code-examples/with-ag-ui.md +19 -17
  4. package/.docs/organized/code-examples/with-ai-sdk-v7.md +17 -16
  5. package/.docs/organized/code-examples/with-artifacts.md +471 -145
  6. package/.docs/organized/code-examples/with-assistant-transport.md +23 -31
  7. package/.docs/organized/code-examples/with-browser-extension.md +21 -14
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +22 -20
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +13 -14
  10. package/.docs/organized/code-examples/with-cloud.md +22 -17
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +17 -16
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +17 -17
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +21 -19
  14. package/.docs/organized/code-examples/with-eve.md +70 -16
  15. package/.docs/organized/code-examples/with-expo.md +32 -51
  16. package/.docs/organized/code-examples/with-external-store.md +20 -15
  17. package/.docs/organized/code-examples/with-ffmpeg.md +24 -18
  18. package/.docs/organized/code-examples/with-generative-ui.md +20 -21
  19. package/.docs/organized/code-examples/with-google-adk.md +21 -16
  20. package/.docs/organized/code-examples/with-heat-graph.md +10 -11
  21. package/.docs/organized/code-examples/with-image-generation.md +13 -14
  22. package/.docs/organized/code-examples/with-interactables.md +17 -16
  23. package/.docs/organized/code-examples/with-langchain.md +13 -14
  24. package/.docs/organized/code-examples/with-langgraph.md +23 -17
  25. package/.docs/organized/code-examples/with-livekit.md +17 -17
  26. package/.docs/organized/code-examples/with-mcp.md +36 -32
  27. package/.docs/organized/code-examples/with-nuxt.md +2492 -0
  28. package/.docs/organized/code-examples/with-opencode.md +27 -21
  29. package/.docs/organized/code-examples/with-pi.md +69 -67
  30. package/.docs/organized/code-examples/with-react-hook-form.md +18 -17
  31. package/.docs/organized/code-examples/with-react-ink-web.md +10 -11
  32. package/.docs/organized/code-examples/with-react-ink.md +7 -7
  33. package/.docs/organized/code-examples/with-react-router.md +23 -17
  34. package/.docs/organized/code-examples/with-resumable-stream.md +15 -16
  35. package/.docs/organized/code-examples/with-store.md +31 -20
  36. package/.docs/organized/code-examples/with-tanstack.md +22 -16
  37. package/.docs/organized/code-examples/with-tap-runtime.md +19 -19
  38. package/.docs/organized/code-examples/with-virtualized-thread.md +12 -13
  39. package/.docs/organized/code-examples/with-vue.md +408 -0
  40. package/.docs/raw/docs/(docs)/cli.mdx +3 -1
  41. package/.docs/raw/docs/(docs)/devtools.mdx +7 -2
  42. package/.docs/raw/docs/(docs)/index.mdx +9 -76
  43. package/.docs/raw/docs/(docs)/installation.mdx +4 -18
  44. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +24 -4
  45. package/.docs/raw/docs/(reference)/api-reference/generative-ui/a2ui.mdx +40 -0
  46. package/.docs/raw/docs/(reference)/api-reference/generative-ui/index.mdx +3 -0
  47. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +19 -420
  48. package/.docs/raw/docs/(reference)/api-reference/hooks/state.mdx +4 -1
  49. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +8 -0
  50. package/.docs/raw/docs/(reference)/api-reference/integrations/react-ai-sdk.mdx +21 -0
  51. package/.docs/raw/docs/(reference)/api-reference/model-context/context.mdx +1 -9
  52. package/.docs/raw/docs/(reference)/api-reference/primitives/assistant-if.mdx +1 -18
  53. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +24 -1
  54. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +1 -1
  55. package/.docs/raw/docs/cloud/ai-sdk.mdx +2 -2
  56. package/.docs/raw/docs/cloud/langgraph.mdx +1 -1
  57. package/.docs/raw/docs/copilots/model-context.mdx +5 -4
  58. package/.docs/raw/docs/copilots/motivation.mdx +5 -5
  59. package/.docs/raw/docs/guides/attachments.mdx +3 -3
  60. package/.docs/raw/docs/guides/branching.mdx +2 -2
  61. package/.docs/raw/docs/guides/chain-of-thought.mdx +1 -1
  62. package/.docs/raw/docs/guides/context-api.mdx +89 -111
  63. package/.docs/raw/docs/guides/editing.mdx +5 -5
  64. package/.docs/raw/docs/guides/electron.mdx +369 -0
  65. package/.docs/raw/docs/guides/index.mdx +10 -0
  66. package/.docs/raw/docs/guides/quoting.mdx +3 -3
  67. package/.docs/raw/docs/guides/resumable-stream-deployment.mdx +2 -2
  68. package/.docs/raw/docs/guides/resumable-streams.mdx +74 -3
  69. package/.docs/raw/docs/guides/suggestions.mdx +9 -9
  70. package/.docs/raw/docs/ink/hooks.mdx +12 -7
  71. package/.docs/raw/docs/ink/primitives.mdx +18 -10
  72. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +16 -0
  73. package/.docs/raw/docs/integrations/auth/better-auth.mdx +3 -3
  74. package/.docs/raw/docs/integrations/auth/clerk.mdx +3 -3
  75. package/.docs/raw/docs/integrations/auth/next-auth.mdx +4 -4
  76. package/.docs/raw/docs/integrations/frameworks/cloudflare-agents/overview.mdx +1 -1
  77. package/.docs/raw/docs/integrations/frameworks/mastra/full-stack.mdx +2 -2
  78. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  79. package/.docs/raw/docs/integrations/gateways/index.mdx +2 -2
  80. package/.docs/raw/docs/integrations/observability/helicone.mdx +2 -2
  81. package/.docs/raw/docs/integrations/observability/langfuse.mdx +1 -1
  82. package/.docs/raw/docs/integrations/observability/langsmith.mdx +3 -3
  83. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +36 -9
  84. package/.docs/raw/docs/migrations/toolkit-tools.mdx +15 -13
  85. package/.docs/raw/docs/migrations/v0-15.mdx +236 -0
  86. package/.docs/raw/docs/primitives/attachment.mdx +2 -2
  87. package/.docs/raw/docs/primitives/composer.mdx +3 -3
  88. package/.docs/raw/docs/primitives/message.mdx +33 -1
  89. package/.docs/raw/docs/primitives/suggestion.mdx +1 -1
  90. package/.docs/raw/docs/primitives/thread-list.mdx +2 -2
  91. package/.docs/raw/docs/react-native/hooks.mdx +17 -7
  92. package/.docs/raw/docs/react-native/index.mdx +3 -3
  93. package/.docs/raw/docs/react-native/primitives.mdx +41 -7
  94. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +3 -3
  95. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +5 -5
  96. package/.docs/raw/docs/runtimes/ai-sdk/v5-legacy.mdx +5 -5
  97. package/.docs/raw/docs/runtimes/ai-sdk/v6-legacy.mdx +13 -14
  98. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +11 -12
  99. package/.docs/raw/docs/runtimes/concepts/threads.mdx +50 -11
  100. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +20 -2
  101. package/.docs/raw/docs/runtimes/custom/external-store.mdx +31 -2
  102. package/.docs/raw/docs/runtimes/custom/local-runtime.mdx +39 -12
  103. package/.docs/raw/docs/runtimes/eve/overview.mdx +51 -0
  104. package/.docs/raw/docs/runtimes/eve/quickstart.mdx +51 -2
  105. package/.docs/raw/docs/runtimes/google-adk/hooks.mdx +9 -12
  106. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  107. package/.docs/raw/docs/runtimes/langgraph/overview.mdx +1 -1
  108. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +1 -1
  109. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-2.mdx +7 -7
  110. package/.docs/raw/docs/runtimes/langgraph/tutorial/part-3.mdx +4 -4
  111. package/.docs/raw/docs/runtimes/opencode/hooks.mdx +4 -1
  112. package/.docs/raw/docs/runtimes/opencode/overview.mdx +10 -0
  113. package/.docs/raw/docs/tools/a2ui.mdx +107 -0
  114. package/.docs/raw/docs/tools/backend.mdx +2 -2
  115. package/.docs/raw/docs/tools/defining-tools.mdx +9 -7
  116. package/.docs/raw/docs/tools/dynamic-tools.mdx +6 -4
  117. package/.docs/raw/docs/tools/interactables-legacy.mdx +28 -15
  118. package/.docs/raw/docs/tools/interactables.mdx +27 -16
  119. package/.docs/raw/docs/tools/mcp-apps.mdx +96 -8
  120. package/.docs/raw/docs/tools/mcp.mdx +9 -7
  121. package/.docs/raw/docs/tools/tool-ui.mdx +26 -22
  122. package/.docs/raw/docs/tools/user-managed-mcp.mdx +64 -14
  123. package/.docs/raw/docs/ui/file.mdx +6 -1
  124. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +2 -0
  125. package/.docs/raw/docs/ui/mcp-config.mdx +8 -3
  126. package/.docs/raw/docs/ui/model-selector.mdx +9 -9
  127. package/.docs/raw/docs/ui/part-grouping.mdx +1 -5
  128. package/.docs/raw/docs/ui/reasoning.mdx +1 -1
  129. package/.docs/raw/docs/ui/thread.mdx +24 -5
  130. package/.docs/raw/docs/utilities/react-o11y.mdx +7 -9
  131. package/dist/constants.js +2 -2
  132. package/dist/constants.js.map +1 -1
  133. package/dist/index.d.ts +1 -1
  134. package/dist/index.js +2 -2
  135. package/dist/index.js.map +1 -1
  136. package/dist/prepare-docs/code-examples.js.map +1 -1
  137. package/dist/prepare-docs/prepare.d.ts +1 -1
  138. package/dist/prepare-docs/prepare.js.map +1 -1
  139. package/dist/stdio.d.ts +1 -1
  140. package/dist/tools/docs.d.ts +6 -10
  141. package/dist/tools/docs.d.ts.map +1 -1
  142. package/dist/tools/docs.js +6 -4
  143. package/dist/tools/docs.js.map +1 -1
  144. package/dist/tools/examples.d.ts +4 -8
  145. package/dist/tools/examples.d.ts.map +1 -1
  146. package/dist/tools/examples.js +4 -3
  147. package/dist/tools/examples.js.map +1 -1
  148. package/dist/tools/resources.d.ts +1 -1
  149. package/dist/tools/resources.d.ts.map +1 -1
  150. package/dist/tools/resources.js +3 -2
  151. package/dist/tools/resources.js.map +1 -1
  152. package/dist/tools/search.d.ts +4 -10
  153. package/dist/tools/search.d.ts.map +1 -1
  154. package/dist/tools/search.js +2 -2
  155. package/dist/tools/search.js.map +1 -1
  156. package/dist/tools/tests/mcp-test-client.d.ts +15 -0
  157. package/dist/tools/tests/mcp-test-client.d.ts.map +1 -0
  158. package/dist/tools/tests/mcp-test-client.js +68 -0
  159. package/dist/tools/tests/mcp-test-client.js.map +1 -0
  160. package/dist/tools/tests/test-setup.d.ts.map +1 -1
  161. package/dist/tools/tests/test-setup.js +2 -1
  162. package/dist/tools/tests/test-setup.js.map +1 -1
  163. package/dist/tools/xulux-templates.d.ts +9 -23
  164. package/dist/tools/xulux-templates.d.ts.map +1 -1
  165. package/dist/tools/xulux-templates.js +8 -6
  166. package/dist/tools/xulux-templates.js.map +1 -1
  167. package/dist/utils/logger.d.ts.map +1 -1
  168. package/dist/utils/mdx.js +2 -1
  169. package/dist/utils/mdx.js.map +1 -1
  170. package/dist/utils/security.js.map +1 -1
  171. package/dist/xulux/catalog-client.js +1 -1
  172. package/dist/xulux/catalog-client.js.map +1 -1
  173. package/package.json +6 -5
  174. package/src/index.ts +2 -2
  175. package/src/tools/docs.ts +2 -2
  176. package/src/tools/examples.ts +2 -2
  177. package/src/tools/resources.ts +1 -4
  178. package/src/tools/search.ts +2 -2
  179. package/src/tools/tests/completions.test.ts +40 -26
  180. package/src/tools/tests/docs.test.ts +2 -2
  181. package/src/tools/tests/integration.test.ts +3 -4
  182. package/src/tools/tests/mcp-protocol.test.ts +160 -175
  183. package/src/tools/tests/mcp-test-client.ts +111 -0
  184. package/src/tools/tests/resources.test.ts +97 -66
  185. package/src/tools/xulux-templates.ts +4 -4
@@ -188,7 +188,12 @@ export default function RootLayout({
188
188
  ```tsx
189
189
  "use client";
190
190
 
191
- import { AssistantRuntimeProvider, Tools, useAui } from "@assistant-ui/react";
191
+ import {
192
+ AssistantRuntimeProvider,
193
+ AuiConfig,
194
+ Tools,
195
+ useAui,
196
+ } from "@assistant-ui/react";
192
197
  import {
193
198
  SidebarInset,
194
199
  SidebarProvider,
@@ -211,6 +216,12 @@ import { ToolGroup } from "@/components/tools/tool-group";
211
216
  import toolkit from "@/components/tools/toolkit";
212
217
  import { useEffect } from "react";
213
218
 
219
+ const SetFallbackDataUI = () => {
220
+ const aui = useAui();
221
+ useEffect(() => aui.dataRenderers.setFallbackDataUI(OpenCodeDataPart), [aui]);
222
+ return null;
223
+ };
224
+
214
225
  const THREAD_COMPONENTS: ThreadComponents = {
215
226
  ToolFallback: FallbackTool,
216
227
  ToolGroup,
@@ -223,17 +234,13 @@ export default function Home() {
223
234
  process.env.NEXT_PUBLIC_OPENCODE_BASE_URL ?? "http://localhost:4096",
224
235
  });
225
236
 
226
- const aui = useAui({
237
+ const config = AuiConfig({
227
238
  tools: Tools({ toolkit }),
228
239
  });
229
240
 
230
- useEffect(
231
- () => aui.dataRenderers().setFallbackDataUI(OpenCodeDataPart),
232
- [aui],
233
- );
234
-
235
241
  return (
236
- <AssistantRuntimeProvider aui={aui} runtime={runtime}>
242
+ <AssistantRuntimeProvider config={config} runtime={runtime}>
243
+ <SetFallbackDataUI />
237
244
  <SidebarProvider>
238
245
  <div className="flex h-dvh w-full overflow-hidden pr-0.5">
239
246
  <ThreadListSidebar />
@@ -1892,28 +1899,27 @@ export default withAui(nextConfig);
1892
1899
  "@assistant-ui/react-markdown": "workspace:*",
1893
1900
  "@assistant-ui/react-opencode": "workspace:*",
1894
1901
  "@assistant-ui/ui": "workspace:*",
1895
- "@pierre/diffs": "^1.2.12",
1902
+ "@pierre/diffs": "^1.3.5",
1896
1903
  "class-variance-authority": "^0.7.1",
1897
1904
  "clsx": "^2.1.1",
1898
- "lucide-react": "^1.24.0",
1899
- "next": "^16.2.10",
1900
- "react": "^19.2.7",
1901
- "react-dom": "^19.2.7",
1905
+ "lucide-react": "^1.29.0",
1906
+ "next": "^16.3.0",
1907
+ "react": "^19.2.8",
1908
+ "react-dom": "^19.2.8",
1902
1909
  "tailwind-merge": "^3.6.0",
1903
1910
  "zod": "^4.4.3"
1904
1911
  },
1905
1912
  "devDependencies": {
1906
1913
  "@assistant-ui/next": "workspace:*",
1907
1914
  "@assistant-ui/x-buildutils": "workspace:*",
1908
- "@tailwindcss/postcss": "^4.3.2",
1909
- "@types/node": "^26.1.1",
1910
- "@types/react": "^19.2.17",
1911
- "@types/react-dom": "^19.2.3",
1912
- "postcss": "^8.5.19",
1913
- "tailwindcss": "^4.3.2",
1915
+ "@tailwindcss/postcss": "^4.3.3",
1916
+ "@types/node": "^26.1.2",
1917
+ "@types/react": "^19.2.18",
1918
+ "@types/react-dom": "^19.2.4",
1919
+ "postcss": "^8.5.26",
1920
+ "tailwindcss": "^4.3.3",
1914
1921
  "tw-animate-css": "^1.4.0",
1915
- "typescript": "npm:@typescript/typescript6@^6.0.2",
1916
- "typescript-7": "npm:typescript@^7.0.2"
1922
+ "typescript": "^7.0.2"
1917
1923
  }
1918
1924
  }
1919
1925
 
@@ -727,6 +727,7 @@ import { useModelSelectorEfforts } from "@/components/assistant-ui/model-selecto
727
727
  import {
728
728
  Tooltip,
729
729
  TooltipContent,
730
+ TooltipProvider,
730
731
  TooltipTrigger,
731
732
  } from "@/components/ui/radix/tooltip";
732
733
  import { cn } from "@/lib/utils";
@@ -764,54 +765,56 @@ export const ThinkingLevelSlider = ({
764
765
  return (
765
766
  <div className="flex items-center justify-between gap-3 border-t px-3 py-2">
766
767
  <span className="text-muted-foreground text-xs">{label}</span>
767
- <div
768
- role="radiogroup"
769
- aria-label={label}
770
- className="flex items-end"
771
- onKeyDown={(event) => {
772
- if (event.key === "ArrowRight" || event.key === "ArrowUp") {
773
- selectIndex(event, activeIndex + 1);
774
- } else if (event.key === "ArrowLeft" || event.key === "ArrowDown") {
775
- selectIndex(event, activeIndex - 1);
776
- } else if (event.key === "Home") {
777
- selectIndex(event, 0);
778
- } else if (event.key === "End") {
779
- selectIndex(event, lastIndex);
780
- }
781
- }}
782
- >
783
- {efforts.map((option, index) => {
784
- const isActive = index === activeIndex;
785
- return (
786
- <Tooltip key={option.id} disableHoverableContent>
787
- <TooltipTrigger asChild>
788
- <button
789
- type="button"
790
- role="radio"
791
- aria-checked={isActive}
792
- aria-label={option.name}
793
- tabIndex={index === Math.max(activeIndex, 0) ? 0 : -1}
794
- data-state={isActive ? "on" : "off"}
795
- onClick={() => setEffort(option.id)}
796
- className="group focus-visible:ring-ring/50 flex h-6 w-3.5 items-end justify-center rounded-sm outline-none focus-visible:ring-2"
797
- >
798
- <span
799
- className={cn(
800
- "rounded-full transition-all duration-150 ease-out",
801
- isActive
802
- ? "bg-primary h-4.5 w-0.5"
803
- : "bg-muted-foreground/40 group-hover:bg-foreground/70 h-2.5 w-0.5 group-hover:h-4 group-hover:w-[3px] group-focus-visible:h-4 group-focus-visible:w-[3px]",
804
- )}
805
- />
806
- </button>
807
- </TooltipTrigger>
808
- <TooltipContent side="top" sideOffset={2}>
809
- {option.name}
810
- </TooltipContent>
811
- </Tooltip>
812
- );
813
- })}
814
- </div>
768
+ <TooltipProvider>
769
+ <div
770
+ role="radiogroup"
771
+ aria-label={label}
772
+ className="flex items-end"
773
+ onKeyDown={(event) => {
774
+ if (event.key === "ArrowRight" || event.key === "ArrowUp") {
775
+ selectIndex(event, activeIndex + 1);
776
+ } else if (event.key === "ArrowLeft" || event.key === "ArrowDown") {
777
+ selectIndex(event, activeIndex - 1);
778
+ } else if (event.key === "Home") {
779
+ selectIndex(event, 0);
780
+ } else if (event.key === "End") {
781
+ selectIndex(event, lastIndex);
782
+ }
783
+ }}
784
+ >
785
+ {efforts.map((option, index) => {
786
+ const isActive = index === activeIndex;
787
+ return (
788
+ <Tooltip key={option.id} disableHoverableContent>
789
+ <TooltipTrigger asChild>
790
+ <button
791
+ type="button"
792
+ role="radio"
793
+ aria-checked={isActive}
794
+ aria-label={option.name}
795
+ tabIndex={index === Math.max(activeIndex, 0) ? 0 : -1}
796
+ data-state={isActive ? "on" : "off"}
797
+ onClick={() => setEffort(option.id)}
798
+ className="group focus-visible:ring-ring/50 flex h-6 w-3.5 items-end justify-center rounded-sm outline-none focus-visible:ring-2"
799
+ >
800
+ <span
801
+ className={cn(
802
+ "rounded-full transition-all duration-150 ease-out",
803
+ isActive
804
+ ? "bg-primary h-4.5 w-0.5"
805
+ : "bg-muted-foreground/40 group-hover:bg-foreground/70 h-2.5 w-0.5 group-hover:h-4 group-hover:w-[3px] group-focus-visible:h-4 group-focus-visible:w-[3px]",
806
+ )}
807
+ />
808
+ </button>
809
+ </TooltipTrigger>
810
+ <TooltipContent side="top" sideOffset={2}>
811
+ {option.name}
812
+ </TooltipContent>
813
+ </Tooltip>
814
+ );
815
+ })}
816
+ </div>
817
+ </TooltipProvider>
815
818
  <span className="text-foreground min-w-12 text-end text-xs">
816
819
  {efforts[activeIndex]?.name}
817
820
  </span>
@@ -1098,7 +1101,7 @@ const ComposerQueue: FC = () => {
1098
1101
  .then(({ steering, followUp }) => {
1099
1102
  const restored = [...steering, ...followUp].join("\n");
1100
1103
  if (!restored) return;
1101
- const composer = aui.composer();
1104
+ const composer = aui.composer;
1102
1105
  const current = composer.getState().text;
1103
1106
  composer.setText(current ? `${current}\n${restored}` : restored);
1104
1107
  })
@@ -1784,8 +1787,8 @@ export const modelKey = (provider: string, modelId: string): string =>
1784
1787
  * (~/.pi/agent by default); when set, every Pi config source below points at it.
1785
1788
  */
1786
1789
  import {
1787
- AuthStorage,
1788
1790
  ModelRegistry,
1791
+ ModelRuntime,
1789
1792
  SettingsManager,
1790
1793
  } from "@earendil-works/pi-coding-agent";
1791
1794
  import {
@@ -1804,10 +1807,10 @@ const env = (key: string): string | undefined => {
1804
1807
  const workspacePath = env("PI_WORKSPACE_PATH") ?? process.cwd();
1805
1808
  const agentDir = env("PI_CODING_AGENT_DIR");
1806
1809
 
1807
- const authStorage = AuthStorage.create(
1808
- agentDir ? `${agentDir}/auth.json` : undefined,
1810
+ const modelRuntime = await ModelRuntime.create(
1811
+ agentDir ? { authPath: `${agentDir}/auth.json` } : {},
1809
1812
  );
1810
- const modelRegistry = ModelRegistry.create(authStorage);
1813
+ const modelRegistry = new ModelRegistry(modelRuntime);
1811
1814
  const settingsManager = SettingsManager.create(workspacePath, agentDir);
1812
1815
 
1813
1816
  // Env wins; otherwise fall back to Pi's configured default (settings.json).
@@ -1958,28 +1961,27 @@ export default withAui(nextConfig);
1958
1961
  "@assistant-ui/react-markdown": "workspace:*",
1959
1962
  "@assistant-ui/react-pi": "workspace:*",
1960
1963
  "@assistant-ui/ui": "workspace:*",
1961
- "@earendil-works/pi-coding-agent": "^0.80.7",
1964
+ "@earendil-works/pi-coding-agent": "^0.84.1",
1962
1965
  "class-variance-authority": "^0.7.1",
1963
1966
  "clsx": "^2.1.1",
1964
- "lucide-react": "^1.24.0",
1965
- "next": "^16.2.10",
1966
- "radix-ui": "^1.6.2",
1967
- "react": "^19.2.7",
1968
- "react-dom": "^19.2.7",
1967
+ "lucide-react": "^1.29.0",
1968
+ "next": "^16.3.0",
1969
+ "radix-ui": "^1.6.7",
1970
+ "react": "^19.2.8",
1971
+ "react-dom": "^19.2.8",
1969
1972
  "tailwind-merge": "^3.6.0"
1970
1973
  },
1971
1974
  "devDependencies": {
1972
1975
  "@assistant-ui/next": "workspace:*",
1973
1976
  "@assistant-ui/x-buildutils": "workspace:*",
1974
- "@tailwindcss/postcss": "^4.3.2",
1975
- "@types/node": "^26.1.1",
1976
- "@types/react": "^19.2.17",
1977
- "@types/react-dom": "^19.2.3",
1978
- "postcss": "^8.5.19",
1979
- "tailwindcss": "^4.3.2",
1977
+ "@tailwindcss/postcss": "^4.3.3",
1978
+ "@types/node": "^26.1.2",
1979
+ "@types/react": "^19.2.18",
1980
+ "@types/react-dom": "^19.2.4",
1981
+ "postcss": "^8.5.26",
1982
+ "tailwindcss": "^4.3.3",
1980
1983
  "tw-animate-css": "^1.4.0",
1981
- "typescript": "npm:@typescript/typescript6@^6.0.2",
1982
- "typescript-7": "npm:typescript@^7.0.2"
1984
+ "typescript": "^7.0.2"
1983
1985
  }
1984
1986
  }
1985
1987
 
@@ -248,6 +248,7 @@ import {
248
248
  useAssistantInstructions,
249
249
  useAui,
250
250
  AuiProvider,
251
+ AuiConfig,
251
252
  Suggestions,
252
253
  } from "@assistant-ui/react";
253
254
 
@@ -292,7 +293,8 @@ export default function Home() {
292
293
  },
293
294
  });
294
295
 
295
- const aui = useAui({
296
+ const aui = useAui();
297
+ const config = AuiConfig({
296
298
  suggestions: Suggestions([
297
299
  {
298
300
  title: "Fill out the form",
@@ -309,7 +311,7 @@ export default function Home() {
309
311
  });
310
312
 
311
313
  return (
312
- <AuiProvider value={aui}>
314
+ <AuiProvider extends={aui} config={config}>
313
315
  <ResizablePanelGroup orientation="horizontal">
314
316
  <ResizablePanel defaultSize={60} minSize={40} style={panelStyle}>
315
317
  <div className="bg-muted/30 h-full overflow-y-auto">
@@ -615,34 +617,33 @@ export default withAui(nextConfig);
615
617
  "start": "next start"
616
618
  },
617
619
  "dependencies": {
618
- "@ai-sdk/openai": "^4.0.14",
620
+ "@ai-sdk/openai": "^4.0.34",
619
621
  "@assistant-ui/react": "workspace:*",
620
622
  "@assistant-ui/react-ai-sdk": "workspace:*",
621
623
  "@assistant-ui/react-hook-form": "workspace:*",
622
624
  "@assistant-ui/react-markdown": "workspace:*",
623
625
  "@assistant-ui/ui": "workspace:*",
624
- "ai": "^7.0.28",
626
+ "ai": "^7.0.56",
625
627
  "class-variance-authority": "^0.7.1",
626
628
  "clsx": "^2.1.1",
627
- "lucide-react": "^1.24.0",
628
- "next": "^16.2.10",
629
- "react": "^19.2.7",
630
- "react-dom": "^19.2.7",
631
- "react-hook-form": "^7.81.0",
629
+ "lucide-react": "^1.29.0",
630
+ "next": "^16.3.0",
631
+ "react": "^19.2.8",
632
+ "react-dom": "^19.2.8",
633
+ "react-hook-form": "^7.84.0",
632
634
  "tailwind-merge": "^3.6.0"
633
635
  },
634
636
  "devDependencies": {
635
637
  "@assistant-ui/next": "workspace:*",
636
638
  "@assistant-ui/x-buildutils": "workspace:*",
637
- "@tailwindcss/postcss": "^4.3.2",
638
- "@types/node": "^26.1.1",
639
- "@types/react": "^19.2.17",
640
- "@types/react-dom": "^19.2.3",
641
- "postcss": "^8.5.19",
642
- "tailwindcss": "^4.3.2",
639
+ "@tailwindcss/postcss": "^4.3.3",
640
+ "@types/node": "^26.1.2",
641
+ "@types/react": "^19.2.18",
642
+ "@types/react-dom": "^19.2.4",
643
+ "postcss": "^8.5.26",
644
+ "tailwindcss": "^4.3.3",
643
645
  "tw-animate-css": "^1.4.0",
644
- "typescript": "npm:@typescript/typescript6@^6.0.2",
645
- "typescript-7": "npm:typescript@^7.0.2"
646
+ "typescript": "^7.0.2"
646
647
  }
647
648
  }
648
649
 
@@ -554,22 +554,21 @@ export default config;
554
554
  "@assistant-ui/react-ai-sdk": "workspace:*",
555
555
  "@assistant-ui/react-ink": "workspace:*",
556
556
  "@assistant-ui/react-ink-markdown": "workspace:*",
557
- "@wterm/dom": "^0.3.0",
558
- "@wterm/react": "^0.3.0",
559
- "ai": "^7.0.28",
560
- "ink": "^7.1.0",
557
+ "@wterm/dom": "^0.3.2",
558
+ "@wterm/react": "^0.3.2",
559
+ "ai": "^7.0.56",
560
+ "ink": "^7.1.1",
561
561
  "ink-web": "^0.2.0",
562
- "next": "^16.2.10",
563
- "react": "^19.2.7",
564
- "react-dom": "^19.2.7",
562
+ "next": "^16.3.0",
563
+ "react": "^19.2.8",
564
+ "react-dom": "^19.2.8",
565
565
  "react-reconciler": "^0.33.0",
566
566
  "scheduler": "^0.27.0"
567
567
  },
568
568
  "devDependencies": {
569
- "@types/node": "^26.1.1",
570
- "@types/react": "^19.2.17",
571
- "typescript": "npm:@typescript/typescript6@^6.0.2",
572
- "typescript-7": "npm:typescript@^7.0.2"
569
+ "@types/node": "^26.1.2",
570
+ "@types/react": "^19.2.18",
571
+ "typescript": "^7.0.2"
573
572
  }
574
573
  }
575
574
 
@@ -16,13 +16,13 @@
16
16
  "dependencies": {
17
17
  "@assistant-ui/react-ink": "workspace:*",
18
18
  "@assistant-ui/react-ink-markdown": "workspace:*",
19
- "ink": "^7.1.0",
20
- "react": "^19.2.7"
19
+ "ink": "^7.1.1",
20
+ "react": "^19.2.8"
21
21
  },
22
22
  "devDependencies": {
23
- "@types/react": "^19.2.17",
23
+ "@types/react": "^19.2.18",
24
24
  "esbuild": "^0.28.1",
25
- "tsx": "^4.23.1",
25
+ "tsx": "^4.23.10",
26
26
  "typescript": "^7.0.2"
27
27
  }
28
28
  }
@@ -36,10 +36,10 @@ import { useMemo } from "react";
36
36
  import { Box, Text } from "ink";
37
37
  import {
38
38
  AssistantRuntimeProvider,
39
+ AuiConfig,
39
40
  useLocalRuntime,
40
41
  StatusBarPrimitive,
41
42
  Tools,
42
- useAui,
43
43
  } from "@assistant-ui/react-ink";
44
44
  import { Thread } from "./components/thread.js";
45
45
  import { createScriptedAdapter, MODEL_NAME } from "./scripted-adapter.js";
@@ -57,12 +57,12 @@ const StatusBar = () => (
57
57
  export const App = () => {
58
58
  const adapter = useMemo(() => createScriptedAdapter(), []);
59
59
  const runtime = useLocalRuntime(adapter);
60
- const aui = useAui({
60
+ const config = AuiConfig({
61
61
  tools: Tools({ toolkit }),
62
62
  });
63
63
 
64
64
  return (
65
- <AssistantRuntimeProvider aui={aui} runtime={runtime}>
65
+ <AssistantRuntimeProvider runtime={runtime} config={config}>
66
66
  <Box flexDirection="column" padding={1}>
67
67
  <Box>
68
68
  <Text bold color="cyan">
@@ -686,7 +686,12 @@ export async function action({ request }: Route.ActionArgs) {
686
686
 
687
687
  ```tsx
688
688
  import { Thread } from "@/components/assistant-ui/thread";
689
- import { useAui, AuiProvider, Suggestions } from "@assistant-ui/react";
689
+ import {
690
+ useAui,
691
+ AuiProvider,
692
+ AuiConfig,
693
+ Suggestions,
694
+ } from "@assistant-ui/react";
690
695
 
691
696
  export function meta() {
692
697
  return [
@@ -696,7 +701,8 @@ export function meta() {
696
701
  }
697
702
 
698
703
  function ThreadWithSuggestions() {
699
- const aui = useAui({
704
+ const aui = useAui();
705
+ const config = AuiConfig({
700
706
  suggestions: Suggestions([
701
707
  {
702
708
  title: "Hello!",
@@ -711,7 +717,7 @@ function ThreadWithSuggestions() {
711
717
  ]),
712
718
  });
713
719
  return (
714
- <AuiProvider value={aui}>
720
+ <AuiProvider extends={aui} config={config}>
715
721
  <Thread />
716
722
  </AuiProvider>
717
723
  );
@@ -773,31 +779,31 @@ export default function Home() {
773
779
  "dependencies": {
774
780
  "@assistant-ui/react": "workspace:*",
775
781
  "@assistant-ui/react-markdown": "workspace:*",
776
- "@react-router/node": "^8.2.0",
777
- "@react-router/serve": "^8.2.0",
782
+ "@react-router/node": "^8.3.0",
783
+ "@react-router/serve": "^8.3.0",
778
784
  "class-variance-authority": "^0.7.1",
779
785
  "clsx": "^2.1.1",
780
786
  "eventsource-parser": "^3.1.0",
781
787
  "isbot": "^5.2.1",
782
- "lucide-react": "^1.24.0",
783
- "openai": "^6.47.0",
784
- "react": "^19.2.7",
785
- "react-dom": "^19.2.7",
786
- "react-router": "^8.2.0",
788
+ "lucide-react": "^1.29.0",
789
+ "openai": "^7.4.0",
790
+ "react": "^19.2.8",
791
+ "react-dom": "^19.2.8",
792
+ "react-router": "^8.3.0",
787
793
  "remark-gfm": "^4.0.1",
788
794
  "tailwind-merge": "^3.6.0"
789
795
  },
790
796
  "devDependencies": {
791
- "@react-router/dev": "^8.2.0",
792
- "@tailwindcss/vite": "^4.3.2",
793
- "@types/node": "^26.1.1",
794
- "@types/react": "^19.2.17",
795
- "@types/react-dom": "^19.2.3",
796
- "tailwindcss": "^4.3.2",
797
+ "@react-router/dev": "^8.3.0",
798
+ "@tailwindcss/vite": "^4.3.3",
799
+ "@types/node": "^26.1.2",
800
+ "@types/react": "^19.2.18",
801
+ "@types/react-dom": "^19.2.4",
802
+ "tailwindcss": "^4.3.3",
797
803
  "tw-animate-css": "^1.4.0",
798
804
  "typescript": "npm:@typescript/typescript6@^6.0.2",
799
805
  "typescript-7": "npm:typescript@^7.0.2",
800
- "vite": "^8.1.4",
806
+ "vite": "^8.2.1",
801
807
  "vite-tsconfig-paths": "^6.1.1"
802
808
  }
803
809
  }
@@ -514,38 +514,37 @@ export default withAui(nextConfig);
514
514
  "start": "next start"
515
515
  },
516
516
  "dependencies": {
517
- "@ai-sdk/openai": "^4.0.14",
518
- "@ai-sdk/react": "^4.0.30",
517
+ "@ai-sdk/openai": "^4.0.34",
518
+ "@ai-sdk/react": "^4.0.59",
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": "^7.0.28",
525
+ "ai": "^7.0.56",
526
526
  "assistant-stream": "workspace:*",
527
527
  "class-variance-authority": "^0.7.1",
528
528
  "clsx": "^2.1.1",
529
- "lucide-react": "^1.24.0",
530
- "next": "^16.2.10",
531
- "react": "^19.2.7",
532
- "react-dom": "^19.2.7",
533
- "redis": "^6.1.0",
529
+ "lucide-react": "^1.29.0",
530
+ "next": "^16.3.0",
531
+ "react": "^19.2.8",
532
+ "react-dom": "^19.2.8",
533
+ "redis": "^6.2.0",
534
534
  "tailwind-merge": "^3.6.0",
535
535
  "zod": "^4.4.3"
536
536
  },
537
537
  "devDependencies": {
538
538
  "@assistant-ui/next": "workspace:*",
539
539
  "@assistant-ui/x-buildutils": "workspace:*",
540
- "@tailwindcss/postcss": "^4.3.2",
541
- "@types/node": "^26.1.1",
542
- "@types/react": "^19.2.17",
543
- "@types/react-dom": "^19.2.3",
544
- "postcss": "^8.5.19",
545
- "tailwindcss": "^4.3.2",
540
+ "@tailwindcss/postcss": "^4.3.3",
541
+ "@types/node": "^26.1.2",
542
+ "@types/react": "^19.2.18",
543
+ "@types/react-dom": "^19.2.4",
544
+ "postcss": "^8.5.26",
545
+ "tailwindcss": "^4.3.3",
546
546
  "tw-animate-css": "^1.4.0",
547
- "typescript": "npm:@typescript/typescript6@^6.0.2",
548
- "typescript-7": "npm:typescript@^7.0.2"
547
+ "typescript": "^7.0.2"
549
548
  }
550
549
  }
551
550