diff --git a/apps/rowboat/app/projects/[projectId]/workflow/copilot.tsx b/apps/rowboat/app/projects/[projectId]/workflow/copilot.tsx index c7c1bd12..70d61bc5 100644 --- a/apps/rowboat/app/projects/[projectId]/workflow/copilot.tsx +++ b/apps/rowboat/app/projects/[projectId]/workflow/copilot.tsx @@ -15,7 +15,7 @@ import clsx from "clsx"; import { Action as WorkflowDispatch } from "./workflow_editor"; import MarkdownContent from "../../../lib/components/markdown-content"; import { CopyAsJsonButton } from "../playground/copy-as-json-button"; -import { CornerDownLeftIcon, SendIcon } from "lucide-react"; +import { CornerDownLeftIcon, PlusIcon, SendIcon } from "lucide-react"; import { useSearchParams } from 'next/navigation'; @@ -23,7 +23,7 @@ const CopilotContext = createContext<{ workflow: z.infer | null; handleApplyChange: (messageIndex: number, actionIndex: number, field?: string) => void; appliedChanges: Record; -}>({ workflow: null, handleApplyChange: () => {}, appliedChanges: {} }); +}>({ workflow: null, handleApplyChange: () => { }, appliedChanges: {} }); export function getAppliedChangeKey(messageIndex: number, actionIndex: number, field: string) { return `${messageIndex}-${actionIndex}-${field}`; @@ -174,35 +174,35 @@ function App({ projectId, workflow, dispatch, - chatContext=undefined, - messages, - setMessages, - loadingResponse, - setLoadingResponse, - loadingMessage, - setLoadingMessage, - responseError, - setResponseError, + chatContext = undefined, }: { projectId: string; workflow: z.infer; dispatch: (action: WorkflowDispatch) => void; chatContext?: z.infer; - messages: z.infer[]; - setMessages: (messages: z.infer[]) => void; - loadingResponse: boolean; - setLoadingResponse: (loading: boolean) => void; - loadingMessage: string; - setLoadingMessage: (message: string) => void; - responseError: string | null; - setResponseError: (error: string | null) => void; }) { const messagesEndRef = useRef(null); + const [messages, setMessages] = useState[]>([]); + const [loadingResponse, setLoadingResponse] = useState(false); + const [loadingMessage, setLoadingMessage] = useState("Thinking"); + const [responseError, setResponseError] = useState(null); const [appliedChanges, setAppliedChanges] = useState>({}); const [discardContext, setDiscardContext] = useState(false); const [lastRequest, setLastRequest] = useState(null); const [lastResponse, setLastResponse] = useState(null); + // Check for initial prompt in local storage and send it + useEffect(() => { + const prompt = localStorage.getItem(`project_prompt_${projectId}`); + if (prompt && messages.length === 0) { + localStorage.removeItem(`project_prompt_${projectId}`); + setMessages([{ + role: 'user', + content: prompt + }]); + } + }, [projectId, messages.length, setMessages]); + // First useEffect for loading messages useEffect(() => { setLoadingMessage("Thinking"); @@ -481,8 +481,8 @@ function App({ {effectiveContext.type === 'tool' && `Tool: ${effectiveContext.name}`} {effectiveContext.type === 'prompt' && `Prompt: ${effectiveContext.name}`} -