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

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 (187) hide show
  1. package/.docs/organized/code-examples/waterfall.md +3 -3
  2. package/.docs/organized/code-examples/with-a2a.md +5 -4
  3. package/.docs/organized/code-examples/with-ag-ui.md +7 -6
  4. package/.docs/organized/code-examples/with-ai-sdk-v7.md +14 -13
  5. package/.docs/organized/code-examples/with-artifacts.md +12 -11
  6. package/.docs/organized/code-examples/with-assistant-transport.md +6 -5
  7. package/.docs/organized/code-examples/with-browser-extension.md +6 -6
  8. package/.docs/organized/code-examples/with-chain-of-thought.md +16 -14
  9. package/.docs/organized/code-examples/with-cloud-standalone.md +7 -7
  10. package/.docs/organized/code-examples/with-cloud.md +11 -10
  11. package/.docs/organized/code-examples/with-custom-thread-list.md +11 -10
  12. package/.docs/organized/code-examples/with-elevenlabs-conversational.md +14 -13
  13. package/.docs/organized/code-examples/with-elevenlabs-scribe.md +15 -14
  14. package/.docs/organized/code-examples/with-eve.md +6 -5
  15. package/.docs/organized/code-examples/with-expo.md +213 -36
  16. package/.docs/organized/code-examples/with-external-store.md +6 -5
  17. package/.docs/organized/code-examples/with-ffmpeg.md +11 -10
  18. package/.docs/organized/code-examples/with-generative-ui.md +263 -29
  19. package/.docs/organized/code-examples/with-google-adk.md +5 -4
  20. package/.docs/organized/code-examples/with-heat-graph.md +3 -3
  21. package/.docs/organized/code-examples/with-image-generation.md +8 -7
  22. package/.docs/organized/code-examples/with-interactables.md +11 -10
  23. package/.docs/organized/code-examples/with-langchain.md +10 -9
  24. package/.docs/organized/code-examples/with-langgraph.md +7 -6
  25. package/.docs/organized/code-examples/with-livekit.md +15 -14
  26. package/.docs/organized/code-examples/with-mcp.md +14 -12
  27. package/.docs/organized/code-examples/with-nuxt.md +511 -575
  28. package/.docs/organized/code-examples/with-opencode.md +4 -4
  29. package/.docs/organized/code-examples/with-openui.md +450 -0
  30. package/.docs/organized/code-examples/with-pi.md +6 -5
  31. package/.docs/organized/code-examples/with-react-hook-form.md +16 -13
  32. package/.docs/organized/code-examples/with-react-ink-web.md +65 -15
  33. package/.docs/organized/code-examples/with-react-ink.md +5 -4
  34. package/.docs/organized/code-examples/with-react-router.md +8 -7
  35. package/.docs/organized/code-examples/with-resumable-stream.md +13 -12
  36. package/.docs/organized/code-examples/with-store.md +3 -3
  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 +10 -9
  40. package/.docs/organized/code-examples/with-tap-runtime.md +5 -4
  41. package/.docs/organized/code-examples/with-virtualized-thread.md +6 -5
  42. package/.docs/organized/code-examples/with-vue.md +2 -2
  43. package/.docs/raw/docs/{(docs) → (getting-started)}/cli.mdx +6 -1
  44. package/.docs/raw/docs/{(docs) → (getting-started)}/devtools.mdx +1 -1
  45. package/.docs/raw/docs/{(docs) → (getting-started)}/index.mdx +4 -2
  46. package/.docs/raw/docs/{(docs) → (getting-started)}/installation.mdx +26 -26
  47. package/.docs/raw/docs/(reference)/api-reference/adapters/suggestions.mdx +6 -0
  48. package/.docs/raw/docs/(reference)/api-reference/context-providers/assistant-runtime-provider.mdx +1 -1
  49. package/.docs/raw/docs/(reference)/api-reference/external-store/message-conversion.mdx +6 -1
  50. package/.docs/raw/docs/(reference)/api-reference/generative-ui/slack.mdx +5 -1
  51. package/.docs/raw/docs/(reference)/api-reference/generative-ui/teams.mdx +9 -2
  52. package/.docs/raw/docs/(reference)/api-reference/hooks/primitives.mdx +2 -2
  53. package/.docs/raw/docs/(reference)/api-reference/integrations/{react-ai-sdk.mdx → ai-sdk.mdx} +43 -18
  54. package/.docs/raw/docs/(reference)/api-reference/integrations/eve.mdx +61 -2
  55. package/.docs/raw/docs/(reference)/api-reference/integrations/index.mdx +3 -3
  56. package/.docs/raw/docs/(reference)/api-reference/overview.mdx +2 -2
  57. package/.docs/raw/docs/(reference)/api-reference/primitives/composer.mdx +20 -2
  58. package/.docs/raw/docs/(reference)/api-reference/tools/interactables.mdx +1 -1
  59. package/.docs/raw/docs/(reference)/api-reference/tools/status.mdx +1 -1
  60. package/.docs/raw/docs/(reference)/api-reference/transport/frame.mdx +1 -1
  61. package/.docs/raw/docs/(reference)/api-reference/utilities/miscellaneous.mdx +32 -1
  62. package/.docs/raw/docs/(reference)/api-reference/voice/session.mdx +1 -1
  63. package/.docs/raw/docs/cloud/ai-sdk-assistant-ui.mdx +10 -10
  64. package/.docs/raw/docs/cloud/ai-sdk.mdx +4 -2
  65. package/.docs/raw/docs/cloud/index.mdx +1 -1
  66. package/.docs/raw/docs/copilots/assistant-frame.mdx +19 -8
  67. package/.docs/raw/docs/guides/attachments.mdx +4 -4
  68. package/.docs/raw/docs/guides/branching.mdx +1 -1
  69. package/.docs/raw/docs/guides/chatgpt-subscription.mdx +1 -1
  70. package/.docs/raw/docs/guides/context-api.mdx +15 -17
  71. package/.docs/raw/docs/guides/dictation.mdx +2 -2
  72. package/.docs/raw/docs/guides/electron.mdx +1 -1
  73. package/.docs/raw/docs/guides/latex.mdx +1 -1
  74. package/.docs/raw/docs/guides/mentions.mdx +2 -0
  75. package/.docs/raw/docs/guides/message-timing.mdx +11 -5
  76. package/.docs/raw/docs/guides/quoting.mdx +1 -1
  77. package/.docs/raw/docs/guides/resumable-streams.mdx +3 -3
  78. package/.docs/raw/docs/guides/speech.mdx +1 -1
  79. package/.docs/raw/docs/guides/suggestions.mdx +8 -5
  80. package/.docs/raw/docs/guides/voice.mdx +1 -1
  81. package/.docs/raw/docs/ink/hooks.mdx +1 -1
  82. package/.docs/raw/docs/ink/index.mdx +3 -2
  83. package/.docs/raw/docs/ink/migration.mdx +1 -1
  84. package/.docs/raw/docs/ink/primitives.mdx +1 -1
  85. package/.docs/raw/docs/integrations/attachments/custom-adapter.mdx +3 -3
  86. package/.docs/raw/docs/integrations/frameworks/ai-sdk.mdx +3 -3
  87. package/.docs/raw/docs/integrations/frameworks/{cloudflare-agents/overview.mdx → cloudflare-agents.mdx} +4 -3
  88. package/.docs/raw/docs/integrations/frameworks/mastra/overview.mdx +1 -1
  89. package/.docs/raw/docs/integrations/frameworks/mastra/separate-server.mdx +1 -1
  90. package/.docs/raw/docs/integrations/index.mdx +2 -2
  91. package/.docs/raw/docs/integrations/persistence/custom-adapter.mdx +149 -131
  92. package/.docs/raw/docs/migrations/toolkit-tools.mdx +2 -2
  93. package/.docs/raw/docs/migrations/v0-15.mdx +34 -0
  94. package/.docs/raw/docs/primitives/action-bar.mdx +1 -1
  95. package/.docs/raw/docs/primitives/assistant-modal.mdx +1 -1
  96. package/.docs/raw/docs/primitives/attachment.mdx +1 -1
  97. package/.docs/raw/docs/primitives/branch-picker.mdx +1 -1
  98. package/.docs/raw/docs/primitives/chain-of-thought.mdx +3 -3
  99. package/.docs/raw/docs/primitives/composer.mdx +1 -1
  100. package/.docs/raw/docs/primitives/error.mdx +1 -1
  101. package/.docs/raw/docs/primitives/message.mdx +1 -1
  102. package/.docs/raw/docs/primitives/selection-toolbar.mdx +1 -1
  103. package/.docs/raw/docs/primitives/suggestion.mdx +4 -2
  104. package/.docs/raw/docs/primitives/thread-list.mdx +1 -1
  105. package/.docs/raw/docs/primitives/thread.mdx +2 -2
  106. package/.docs/raw/docs/react-native/adapters.mdx +1 -1
  107. package/.docs/raw/docs/react-native/index.mdx +2 -2
  108. package/.docs/raw/docs/react-native/migration.mdx +2 -2
  109. package/.docs/raw/docs/react-native/primitives.mdx +142 -5
  110. package/.docs/raw/docs/runtimes/ag-ui/runtime-options.mdx +48 -6
  111. package/.docs/raw/docs/runtimes/ai-sdk/overview.mdx +3 -3
  112. package/.docs/raw/docs/runtimes/ai-sdk/v4-legacy.mdx +4 -4
  113. package/.docs/raw/docs/runtimes/ai-sdk/v7.mdx +31 -16
  114. package/.docs/raw/docs/runtimes/claude-managed-agents.mdx +118 -0
  115. package/.docs/raw/docs/runtimes/concepts/adapters.mdx +3 -3
  116. package/.docs/raw/docs/runtimes/concepts/architecture.mdx +3 -3
  117. package/.docs/raw/docs/runtimes/concepts/stability.mdx +2 -1
  118. package/.docs/raw/docs/runtimes/concepts/threads.mdx +73 -33
  119. package/.docs/raw/docs/runtimes/custom/assistant-transport.mdx +1 -1
  120. package/.docs/raw/docs/runtimes/custom/external-store.mdx +6 -2
  121. package/.docs/raw/docs/runtimes/langchain.mdx +2 -2
  122. package/.docs/raw/docs/runtimes/langgraph/streaming.mdx +4 -0
  123. package/.docs/raw/docs/runtimes/opencode/quickstart.mdx +1 -1
  124. package/.docs/raw/docs/runtimes/pick-a-runtime.mdx +9 -2
  125. package/.docs/raw/docs/tools/backend.mdx +4 -4
  126. package/.docs/raw/docs/tools/defining-tools.mdx +21 -2
  127. package/.docs/raw/docs/tools/generative-ui-primitive.mdx +180 -0
  128. package/.docs/raw/docs/tools/generative-ui-slack.mdx +167 -0
  129. package/.docs/raw/docs/tools/generative-ui-teams.mdx +160 -0
  130. package/.docs/raw/docs/tools/generative-ui.mdx +224 -211
  131. package/.docs/raw/docs/tools/index.mdx +2 -1
  132. package/.docs/raw/docs/tools/interactables.mdx +8 -7
  133. package/.docs/raw/docs/tools/mcp-apps.mdx +18 -1
  134. package/.docs/raw/docs/tools/mcp.mdx +2 -2
  135. package/.docs/raw/docs/tools/openui.mdx +175 -0
  136. package/.docs/raw/docs/tools/tool-ui.mdx +18 -7
  137. package/.docs/raw/docs/tools/user-managed-mcp.mdx +7 -3
  138. package/.docs/raw/docs/ui/assistant-modal.mdx +3 -3
  139. package/.docs/raw/docs/ui/assistant-sidebar.mdx +1 -1
  140. package/.docs/raw/docs/ui/attachment.mdx +50 -3
  141. package/.docs/raw/docs/ui/composer-trigger-popover.mdx +36 -1
  142. package/.docs/raw/docs/ui/context-display.mdx +1 -1
  143. package/.docs/raw/docs/ui/directive-text.mdx +1 -1
  144. package/.docs/raw/docs/ui/file.mdx +2 -2
  145. package/.docs/raw/docs/ui/follow-up-suggestions.mdx +1 -1
  146. package/.docs/raw/docs/ui/image.mdx +2 -2
  147. package/.docs/raw/docs/ui/markdown.mdx +40 -1
  148. package/.docs/raw/docs/ui/mermaid.mdx +1 -1
  149. package/.docs/raw/docs/ui/message-timing.mdx +1 -1
  150. package/.docs/raw/docs/ui/model-selector.mdx +4 -4
  151. package/.docs/raw/docs/ui/part-grouping.mdx +1 -1
  152. package/.docs/raw/docs/ui/quote.mdx +3 -3
  153. package/.docs/raw/docs/ui/reasoning.mdx +31 -3
  154. package/.docs/raw/docs/ui/scrollbar.mdx +1 -1
  155. package/.docs/raw/docs/ui/sources.mdx +10 -1
  156. package/.docs/raw/docs/ui/streamdown.mdx +2 -2
  157. package/.docs/raw/docs/ui/syntax-highlighting.mdx +1 -1
  158. package/.docs/raw/docs/ui/thread-list.mdx +40 -1
  159. package/.docs/raw/docs/ui/thread.mdx +49 -2
  160. package/.docs/raw/docs/ui/tool-fallback.mdx +23 -9
  161. package/.docs/raw/docs/ui/tool-group.mdx +1 -1
  162. package/.docs/raw/docs/ui/voice.mdx +1 -1
  163. package/.docs/raw/docs/utilities/react-o11y.mdx +2 -2
  164. package/dist/xulux/catalog-client.d.ts.map +1 -1
  165. package/dist/xulux/catalog-client.js +51 -6
  166. package/dist/xulux/catalog-client.js.map +1 -1
  167. package/dist/xulux/types.d.ts +7 -7
  168. package/dist/xulux/types.d.ts.map +1 -1
  169. package/dist/xulux/types.js.map +1 -1
  170. package/package.json +5 -5
  171. package/src/tools/tests/docs.test.ts +10 -7
  172. package/src/tools/tests/path-traversal.test.ts +5 -2
  173. package/src/tools/tests/xulux-templates.test.ts +63 -0
  174. package/src/xulux/catalog-client.ts +68 -23
  175. package/src/xulux/types.ts +17 -13
  176. package/.docs/raw/docs/tools/interactables-legacy.mdx +0 -423
  177. package/.docs/raw/docs/ui/accordion.mdx +0 -266
  178. package/.docs/raw/docs/ui/badge.mdx +0 -150
  179. package/.docs/raw/docs/ui/diff-viewer.mdx +0 -280
  180. package/.docs/raw/docs/ui/dot-matrix.mdx +0 -133
  181. package/.docs/raw/docs/ui/number-roll.mdx +0 -154
  182. package/.docs/raw/docs/ui/select.mdx +0 -254
  183. package/.docs/raw/docs/ui/tabs.mdx +0 -271
  184. /package/.docs/raw/docs/{(docs) → (getting-started)}/architecture.mdx +0 -0
  185. /package/.docs/raw/docs/{(docs) → (getting-started)}/base-ui.mdx +0 -0
  186. /package/.docs/raw/docs/{(docs) → (getting-started)}/llm.mdx +0 -0
  187. /package/.docs/raw/docs/{(docs) → (getting-started)}/rtl.mdx +0 -0
@@ -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.33.0",
22
+ "svelte": "^5.56.10"
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.2"
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
+