From 83771e3ff7311ecb8dac811ecc998587facc2a0e Mon Sep 17 00:00:00 2001 From: Brace Sproul Date: Sat, 26 Jul 2025 13:47:30 -0700 Subject: [PATCH] chore: Delete unused code (#551) --- .../src/components/github/open-pr-button.tsx | 82 ---------------- .../src/components/thread/messages/human.tsx | 17 ++-- apps/web/src/providers/Stream.tsx | 97 ------------------- 3 files changed, 11 insertions(+), 185 deletions(-) delete mode 100644 apps/web/src/components/github/open-pr-button.tsx delete mode 100644 apps/web/src/providers/Stream.tsx diff --git a/apps/web/src/components/github/open-pr-button.tsx b/apps/web/src/components/github/open-pr-button.tsx deleted file mode 100644 index 8577286e..00000000 --- a/apps/web/src/components/github/open-pr-button.tsx +++ /dev/null @@ -1,82 +0,0 @@ -"use client"; - -import { useStreamContext } from "@/providers/Stream"; -import { TooltipIconButton } from "@/components/ui/tooltip-icon-button"; -import { useQueryState } from "nuqs"; -import { - GitPullRequest, - GitMerge, - GitPullRequestClosed, - GitPullRequestDraft, -} from "lucide-react"; -import { useEffect, useState } from "react"; -import { getPullRequest } from "@/utils/github"; -import { cn } from "@/lib/utils"; - -export function OpenPRButton() { - const stream = useStreamContext(); - const [branch] = useQueryState("branch"); - const [prState, setPrState] = useState< - "open" | "closed" | "draft" | "merged" - >(); - const [pullRequest, setPullRequest] = useState>(); - - useEffect(() => { - const baseBranch = - stream.values?.targetRepository?.branch ?? - stream.values?.targetRepository?.baseCommit ?? - branch; - if ( - !stream.values || - !stream.values.branchName || - !stream.values.targetRepository || - !baseBranch - ) { - return; - } - getPullRequest({ - owner: stream.values.targetRepository.owner, - repo: stream.values.targetRepository.repo, - baseBranch: baseBranch, - headBranch: stream.values.branchName, - }).then((pr) => { - if (!pr) return; - setPullRequest(pr); - if (pr.merged_at) { - setPrState("merged"); - } else if (pr.draft) { - setPrState("draft"); - } else { - setPrState(pr.state); - } - }); - }, [stream.values?.branchName, stream.values?.targetRepository, branch]); - - if (!pullRequest) { - return null; - } - - const handleOpenPR = () => { - window.open(pullRequest.html_url, "_blank", "noopener,noreferrer"); - }; - - return ( - - {prState === "merged" && } - {prState === "draft" && } - {prState === "closed" && } - {prState === "open" && } - - ); -} diff --git a/apps/web/src/components/thread/messages/human.tsx b/apps/web/src/components/thread/messages/human.tsx index 81803607..17db4298 100644 --- a/apps/web/src/components/thread/messages/human.tsx +++ b/apps/web/src/components/thread/messages/human.tsx @@ -1,4 +1,3 @@ -import { useStreamContext } from "@/providers/Stream"; import { Message } from "@langchain/langgraph-sdk"; import { useState } from "react"; import { getContentString } from "../utils"; @@ -8,6 +7,7 @@ import { BranchSwitcher, CommandBar } from "./shared"; import { MultimodalPreview } from "@/components/thread/MultimodalPreview"; import { isBase64ContentBlock } from "@/lib/multimodal-utils"; import { BaseMessage } from "@langchain/core/messages"; +import { useStream } from "@langchain/langgraph-sdk/react"; function EditableContent({ value, @@ -38,12 +38,17 @@ function EditableContent({ export function HumanMessage({ message, isLoading, + submit, + setBranch, + getMessagesMetadata, }: { message: Message; isLoading: boolean; + submit: ReturnType["submit"]; + setBranch: ReturnType["setBranch"]; + getMessagesMetadata: ReturnType["getMessagesMetadata"]; }) { - const thread = useStreamContext(); - const meta = thread.getMessagesMetadata(message); + const meta = getMessagesMetadata(message); const parentCheckpoint = meta?.firstSeenState?.parent_checkpoint; const [isEditing, setIsEditing] = useState(false); @@ -57,7 +62,7 @@ export function HumanMessage({ type: "human", content: value, } as unknown as BaseMessage; - thread.submit( + submit( { messages: [newMessage], internalMessages: [newMessage] }, { checkpoint: parentCheckpoint, @@ -69,7 +74,7 @@ export function HumanMessage({ return { ...values, messages: [ - ...(values.messages ?? []), + ...((values.messages as Message[]) ?? []), newMessage, ] as unknown as BaseMessage[], }; @@ -136,7 +141,7 @@ export function HumanMessage({ thread.setBranch(branch)} + onSelect={(branch) => setBranch(branch)} isLoading={isLoading} /> ; - -type StreamContextType = ReturnType & { - customEvents: CustomNodeEvent[]; -}; -const StreamContext = createContext(undefined); - -async function sleep(ms = 4000) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -const StreamSession = ({ children }: { children: ReactNode }) => { - const [threadId, setThreadId] = useQueryState("threadId"); - const [customEvents, setCustomEvents] = useState([]); - const { refreshThreads } = useThreadsContext(); - - if (!process.env.NEXT_PUBLIC_API_URL) { - throw new Error( - "NEXT_PUBLIC_API_URL environment variable must be defined.", - ); - } - - const streamValue = useTypedStream({ - apiUrl: process.env.NEXT_PUBLIC_API_URL, - assistantId: MANAGER_GRAPH_ID, - reconnectOnMount: true, - threadId: threadId ?? null, - onCustomEvent: (event, options) => { - if (isCustomNodeEvent(event)) { - setCustomEvents((prev) => [...prev, event]); - } - if (isUIMessage(event) || isRemoveUIMessage(event)) { - options.mutate((prev) => { - const ui = uiMessageReducer(prev.ui ?? [], event); - return { ...prev, ui }; - }); - } - }, - onThreadId: (id) => { - setThreadId(id); - sleep().then(() => { - refreshThreads().catch(console.error); - }); - }, - }); - - return ( - - {children} - - ); -}; - -export const StreamProvider: React.FC<{ - children: ReactNode; -}> = ({ children }) => { - return {children}; -}; - -export const useStreamContext = (): StreamContextType => { - const context = useContext(StreamContext); - if (context === undefined) { - throw new Error("useStreamContext must be used within a StreamProvider"); - } - return context; -}; - -export default StreamContext;