From 326595b148e410174e79c9a6e7f63006478ffaf6 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Tue, 3 Mar 2026 14:49:50 -0800 Subject: [PATCH] Add Vitest to web app and remove unused composer/env props - add `vitest` to `apps/web` devDependencies and lockfile - remove unused `envMode` prop from `BranchToolbar` usage and signature - drop unused composer command input ref in `ChatView` --- apps/web/package.json | 3 +- apps/web/src/components/BranchToolbar.tsx | 2 - apps/web/src/components/ChatView.tsx | 57 ++++++++++++----------- bun.lock | 1 + 4 files changed, 34 insertions(+), 29 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 17d0930559d748db9fadc53eb4d07b34ac5bc386..a4db93a229c8d9f12998e8c646a3e0ba6108266e 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -44,6 +44,7 @@ "babel-plugin-react-compiler": "^19.0.0-beta-e552027-20250112", "tailwindcss": "^4.0.0", "typescript": "catalog:", - "vite": "^8.0.0-beta.12" + "vite": "^8.0.0-beta.12", + "vitest": "catalog:" } } diff --git a/apps/web/src/components/BranchToolbar.tsx b/apps/web/src/components/BranchToolbar.tsx index 929a0572c561ab261327eae7730dbb78cb191524..1859d125a1cb97bcb746334f53fb4f83337a12c6 100644 --- a/apps/web/src/components/BranchToolbar.tsx +++ b/apps/web/src/components/BranchToolbar.tsx @@ -15,7 +15,6 @@ import { Button } from "./ui/button"; interface BranchToolbarProps { threadId: ThreadId; - envMode: EnvMode; onEnvModeChange: (mode: EnvMode) => void; envLocked: boolean; onComposerFocusRequest?: () => void; @@ -23,7 +22,6 @@ interface BranchToolbarProps { export default function BranchToolbar({ threadId, - envMode, onEnvModeChange, envLocked, onComposerFocusRequest, diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index a6f7ecc9dd592439205dab300222ca03fd2a5711..4f45454af53da6dc1eed29a1d6ce715d9f62f9de 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -524,7 +524,6 @@ export default function ChatView({ threadId }: ChatViewProps) { const pendingUserScrollUpIntentRef = useRef(false); const pendingAutoScrollFrameRef = useRef(null); const composerEditorRef = useRef(null); - const composerCommandInputRef = useRef(null); const composerFormRef = useRef(null); const composerFormHeightRef = useRef(0); const composerImagesRef = useRef([]); @@ -633,7 +632,8 @@ export default function ChatView({ threadId }: ChatViewProps) { [selectedModel, settings.customCodexModels], ); const slashModelOptions = useMemo( - () => getSlashModelOptions(settings.customCodexModels, composerTrigger?.query ?? "", selectedModel), + () => + getSlashModelOptions(settings.customCodexModels, composerTrigger?.query ?? "", selectedModel), [composerTrigger?.query, selectedModel, settings.customCodexModels], ); const phase = derivePhase(activeThread?.session ?? null); @@ -912,12 +912,12 @@ export default function ChatView({ threadId }: ChatViewProps) { } return slashModelOptions.map(({ slug, name }) => ({ - id: `model:${slug}`, - type: "model" as const, - model: slug, - label: name, - description: slug, - })); + id: `model:${slug}`, + type: "model" as const, + model: slug, + label: name, + description: slug, + })); }, [composerTrigger, slashModelOptions, workspaceEntries]); const composerMenuOpen = Boolean(composerTrigger); const activeComposerMenuItem = useMemo( @@ -2312,12 +2312,9 @@ export default function ChatView({ threadId }: ChatViewProps) { return; } if (item.type === "slash-command") { - const applied = applyPromptReplacement( - trigger.rangeStart, - trigger.rangeEnd, - "/model ", - { expectedText: expectedToken }, - ); + const applied = applyPromptReplacement(trigger.rangeStart, trigger.rangeEnd, "/model ", { + expectedText: expectedToken, + }); if (applied) { setComposerHighlightedItemId(null); } @@ -2360,18 +2357,27 @@ export default function ChatView({ threadId }: ChatViewProps) { workspaceEntriesQuery.isLoading || workspaceEntriesQuery.isFetching); - const onPromptChange = useCallback((nextPrompt: string, nextCursor: number, cursorAdjacentToMention: boolean) => { - promptRef.current = nextPrompt; - setPrompt(nextPrompt); - setComposerCursor(nextCursor); - setComposerTrigger( - cursorAdjacentToMention - ? null - : detectComposerTrigger(nextPrompt, expandCollapsedComposerCursor(nextPrompt, nextCursor)), - ); - }, [setPrompt]); + const onPromptChange = useCallback( + (nextPrompt: string, nextCursor: number, cursorAdjacentToMention: boolean) => { + promptRef.current = nextPrompt; + setPrompt(nextPrompt); + setComposerCursor(nextCursor); + setComposerTrigger( + cursorAdjacentToMention + ? null + : detectComposerTrigger( + nextPrompt, + expandCollapsedComposerCursor(nextPrompt, nextCursor), + ), + ); + }, + [setPrompt], + ); - const onComposerCommandKey = (key: "ArrowDown" | "ArrowUp" | "Enter" | "Tab", event: KeyboardEvent) => { + const onComposerCommandKey = ( + key: "ArrowDown" | "ArrowUp" | "Enter" | "Tab", + event: KeyboardEvent, + ) => { const { trigger } = resolveActiveComposerTrigger(); const menuIsActive = composerMenuOpenRef.current || trigger !== null; @@ -2778,7 +2784,6 @@ export default function ChatView({ threadId }: ChatViewProps) { {isGitRepo && (