+ );
+ },
+ CodeHeader,
+});
diff --git a/surfsense_web/components/assistant-ui/thread.tsx b/surfsense_web/components/assistant-ui/thread.tsx
new file mode 100644
index 000000000..26ee44872
--- /dev/null
+++ b/surfsense_web/components/assistant-ui/thread.tsx
@@ -0,0 +1,349 @@
+import {
+ ActionBarPrimitive,
+ AssistantIf,
+ BranchPickerPrimitive,
+ ComposerPrimitive,
+ ErrorPrimitive,
+ MessagePrimitive,
+ ThreadPrimitive,
+} from "@assistant-ui/react";
+import {
+ ArrowDownIcon,
+ ArrowUpIcon,
+ CheckIcon,
+ ChevronLeftIcon,
+ ChevronRightIcon,
+ CopyIcon,
+ DownloadIcon,
+ PencilIcon,
+ RefreshCwIcon,
+ SquareIcon,
+} from "lucide-react";
+import type { FC } from "react";
+import {
+ ComposerAddAttachment,
+ ComposerAttachments,
+ UserMessageAttachments,
+} from "@/components/assistant-ui/attachment";
+import { MarkdownText } from "@/components/assistant-ui/markdown-text";
+import { ToolFallback } from "@/components/assistant-ui/tool-fallback";
+import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button";
+import { Button } from "@/components/ui/button";
+import { cn } from "@/lib/utils";
+
+export const Thread: FC = () => {
+ return (
+ + How can I help you today? +
++ {isCancelled ? "Cancelled tool: " : "Used tool: "} + {toolName} +
+ ++ Cancelled reason: +
++ {cancelledReason} +
+{argsText}
+ Result:
+
+ {typeof result === "string" ? result : JSON.stringify(result, null, 2)}
+
+