From 3b0b3a81126a0f368c665e5a44bc2074cc361b5d Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 16 Jun 2026 14:27:23 +0000 Subject: [PATCH 01/24] Show onboarding before public backend auth gate Co-authored-by: openhands --- .pr/fixed-behavior.gif | Bin 0 -> 45343 bytes .pr/previous-behavior.gif | Bin 0 -> 17788 bytes __tests__/root.test.tsx | 56 ++++++++++++++++++++++++++++++++++++++ src/root.tsx | 51 ++++++++++++++++++++++++++++++++-- 4 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 .pr/fixed-behavior.gif create mode 100644 .pr/previous-behavior.gif diff --git a/.pr/fixed-behavior.gif b/.pr/fixed-behavior.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e1333665c4eb2c9be9a027df64bfb29d52ce7e3 GIT binary patch literal 45343 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 H8F2U?*J;>V literal 0 HcmV?d00001 diff --git a/.pr/previous-behavior.gif b/.pr/previous-behavior.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f6dfbb146cf65ae045352a6143b2cd074f30bd9 GIT binary patch literal 17788 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 literal 0 HcmV?d00001 diff --git a/__tests__/root.test.tsx b/__tests__/root.test.tsx index e5f75f23b..591119d2e 100644 --- a/__tests__/root.test.tsx +++ b/__tests__/root.test.tsx @@ -7,6 +7,7 @@ import App, { links } from "#/root"; import { server } from "#/mocks/node"; import { __resetActiveStoreForTests } from "#/api/backend-registry/active-store"; import { ActiveBackendProvider } from "#/contexts/active-backend-context"; +import { ONBOARDING_COMPLETED_STORAGE_KEY } from "#/components/features/onboarding/use-onboarding-completion"; const TRANSLATIONS: Record = { BACKEND$MANAGE_TITLE: "Manage backends", @@ -33,6 +34,14 @@ vi.mock("react-i18next", () => ({ }), })); +vi.mock("#/components/features/onboarding/onboarding-modal", () => ({ + OnboardingModal: () => ( +
+
+
+ ), +})); + const RouterStub = createRoutesStub([ { Component: App, @@ -64,7 +73,54 @@ const renderApp = (initialEntries: string[] = ["/"]) => describe("App root agent-server availability guard", () => { beforeEach(() => { window.localStorage.clear(); + vi.unstubAllEnvs(); + delete (window as unknown as Record) + .__AGENT_CANVAS_AUTH_REQUIRED__; + ( + window as unknown as Record + ).__AGENT_CANVAS_SESSION_API_KEY__ = "test-session-key"; + __resetActiveStoreForTests(); + }); + + it("shows first-run onboarding before the auth gate when public mode has no backend key", async () => { + vi.stubEnv("VITE_AUTH_REQUIRED", "true"); + vi.stubEnv("VITE_SESSION_API_KEY", ""); + delete (window as unknown as Record) + .__AGENT_CANVAS_SESSION_API_KEY__; + window.localStorage.clear(); + __resetActiveStoreForTests(); + + renderApp(["/"]); + + await waitFor(() => { + expect( + screen.getByTestId("first-run-onboarding-screen"), + ).toBeInTheDocument(); + }); + expect(await screen.findByTestId("onboarding-modal")).toBeInTheDocument(); + expect( + await screen.findByTestId("onboarding-step-choose-agent"), + ).toBeInTheDocument(); + expect( + screen.queryByTestId("api-key-entry-screen"), + ).not.toBeInTheDocument(); + }); + + it("shows the auth gate after onboarding was already completed", async () => { + vi.stubEnv("VITE_AUTH_REQUIRED", "true"); + vi.stubEnv("VITE_SESSION_API_KEY", ""); + delete (window as unknown as Record) + .__AGENT_CANVAS_SESSION_API_KEY__; + window.localStorage.clear(); + window.localStorage.setItem(ONBOARDING_COMPLETED_STORAGE_KEY, "1"); __resetActiveStoreForTests(); + + renderApp(["/"]); + + await waitFor(() => { + expect(screen.getByTestId("api-key-entry-screen")).toBeInTheDocument(); + }); + expect(screen.queryByTestId("onboarding-modal")).not.toBeInTheDocument(); }); it("shows the manage-backends modal when the connected server reports an old version", async () => { diff --git a/src/root.tsx b/src/root.tsx index 88c55ec2b..bae8773c2 100644 --- a/src/root.tsx +++ b/src/root.tsx @@ -30,6 +30,7 @@ import { LoadingSpinner } from "#/components/shared/loading-spinner"; import { useConfig } from "#/hooks/query/use-config"; import { QUERY_KEYS } from "#/hooks/query/query-keys"; import { AgentServerUIRoot } from "#/components/providers"; +import { useOnboardingCompletion } from "#/components/features/onboarding/use-onboarding-completion"; import { applyColorTheme, readPersistedColorTheme, @@ -56,6 +57,14 @@ const ApiKeyEntryScreen = React.lazy( () => import("#/components/features/backends/api-key-entry-screen"), ); +// Rendered only for first-run public/frontend-only bootstraps; keep the +// onboarding flow out of the root bundle until this rare gate is active. +const OnboardingModal = React.lazy(() => + import("#/components/features/onboarding/onboarding-modal").then((m) => ({ + default: m.OnboardingModal, + })), +); + export function Layout({ children }: { children: React.ReactNode }) { return ( @@ -125,6 +134,18 @@ function MissingAgentServerScreen() { ); } +function FirstRunOnboardingScreen({ onClose }: { onClose: () => void }) { + return ( +
+ }> + + +
+ ); +} export const links: LinksFunction = () => [ { rel: "icon", type: "image/svg+xml", href: "/favicon.svg" }, @@ -150,10 +171,30 @@ export default function App() { const bakedKeyMissing = isAuthRequiredAndMissing(); const hasRegisteredKey = Boolean(getEffectiveLocalBackend()?.apiKey); const authMissing = bakedKeyMissing && !hasRegisteredKey; + const { isCompleted: onboardingCompleted, markCompleted } = + useOnboardingCompletion(); + const [showFirstRunOnboarding, setShowFirstRunOnboarding] = React.useState( + () => authMissing && !onboardingCompleted, + ); + + React.useEffect(() => { + if (authMissing && !onboardingCompleted) { + setShowFirstRunOnboarding(true); + return; + } + + if (onboardingCompleted) { + setShowFirstRunOnboarding(false); + } + }, [authMissing, onboardingCompleted]); // Skip the /server_info probe entirely when we already know auth is - // required and missing — it would just 401 and waste time. - const config = useConfig({ enabled: !authMissing }); + // required and missing — it would just 401 and waste time. Also keep the + // root bootstrap quiet while the first-run onboarding modal owns backend + // collection; the onboarding steps issue their own backend-specific queries. + const config = useConfig({ + enabled: !authMissing && !showFirstRunOnboarding, + }); const { active } = useActiveBackendContext(); const activeCloudHealth = useBackendsHealth( active.backend.kind === "cloud" ? [active.backend] : [], @@ -163,7 +204,11 @@ export default function App() { activeCloudHealth?.isConnected === false && isCloudBackendLoggedOutHealthError(activeCloudHealth.lastError); - // No key at all → instant auth screen (no network). + if (showFirstRunOnboarding) { + return ; + } + + // No key at all after onboarding was skipped/completed → auth screen. // Stale key → /server_info 401 → auth screen (public mode only). if (authMissing || isAgentServerAuthError(config.error)) { return ( From 0ebd22ac63d20d9fa0441dfda41eaaee4cdef4f2 Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 16 Jun 2026 16:05:40 +0000 Subject: [PATCH 02/24] Make backend setup the first onboarding step Co-authored-by: openhands --- .pr/fixed-behavior.gif | Bin 45343 -> 70429 bytes .../onboarding/onboarding-modal.test.tsx | 49 +++++++++--------- __tests__/root.test.tsx | 4 +- .../features/onboarding/onboarding-modal.tsx | 11 ++-- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/.pr/fixed-behavior.gif b/.pr/fixed-behavior.gif index 5e1333665c4eb2c9be9a027df64bfb29d52ce7e3..f83f5da40adc248ea6977c07128884e507131cca 100644 GIT binary patch literal 70429 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 S+)w`O&zjIq|6GZH002A3l8fB{ literal 45343 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 H8F2U?*J;>V diff --git a/__tests__/components/onboarding/onboarding-modal.test.tsx b/__tests__/components/onboarding/onboarding-modal.test.tsx index 136d51c3c..9bc03901e 100644 --- a/__tests__/components/onboarding/onboarding-modal.test.tsx +++ b/__tests__/components/onboarding/onboarding-modal.test.tsx @@ -99,8 +99,13 @@ vi.mock("#/hooks/query/use-acp-auth-status", () => ({ }), })); -async function completeAgentStep(user: ReturnType) { - await user.click(screen.getByTestId("onboarding-agent-next")); +async function completeBackendStep(user: ReturnType) { + await waitFor( + () => + expect(screen.getByTestId("onboarding-backend-next")).not.toBeDisabled(), + { timeout: 3000 }, + ); + await user.click(screen.getByTestId("onboarding-backend-next")); await waitFor( () => expect(screen.getByTestId("onboarding-modal")).toHaveAttribute( @@ -111,13 +116,8 @@ async function completeAgentStep(user: ReturnType) { ); } -async function completeBackendStep(user: ReturnType) { - await waitFor( - () => - expect(screen.getByTestId("onboarding-backend-next")).not.toBeDisabled(), - { timeout: 3000 }, - ); - await user.click(screen.getByTestId("onboarding-backend-next")); +async function completeAgentStep(user: ReturnType) { + await user.click(screen.getByTestId("onboarding-agent-next")); await waitFor( () => expect(screen.getByTestId("onboarding-modal")).toHaveAttribute( @@ -183,7 +183,7 @@ afterEach(() => { }); describe("OnboardingModal", () => { - it("starts on the choose-agent step with each slide offset by its index", () => { + it("starts on the backend step with each slide offset by its index", () => { renderModal(); expect(screen.getByTestId("onboarding-modal")).toHaveAttribute( @@ -191,7 +191,7 @@ describe("OnboardingModal", () => { "0", ); expect( - screen.getByTestId("onboarding-step-choose-agent"), + screen.getByTestId("onboarding-step-check-backend"), ).toBeInTheDocument(); expect(screen.getByTestId("onboarding-slide-0")).toHaveAttribute( @@ -251,7 +251,6 @@ describe("OnboardingModal", () => { renderModal(); const user = userEvent.setup(); - await completeAgentStep(user); await waitFor(() => expect(screen.getByTestId("onboarding-backend-connected")).toBeVisible(), ); @@ -263,7 +262,9 @@ describe("OnboardingModal", () => { screen.getByTestId("onboarding-backend-show-configuration"), ).toBeInTheDocument(); - await user.click(screen.getByTestId("onboarding-backend-show-configuration")); + await user.click( + screen.getByTestId("onboarding-backend-show-configuration"), + ); expect( screen.getByTestId("onboarding-backend-configuration-fields"), ).not.toHaveClass("hidden"); @@ -273,15 +274,15 @@ describe("OnboardingModal", () => { renderModal(); const user = userEvent.setup(); - // Step 0 → 1. ChooseAgentStep does an async save before advancing. - await completeAgentStep(user); + // Step 0 → 1. Once the backend health probe resolves, step 0's Next is enabled. + await completeBackendStep(user); expect(screen.getByTestId("onboarding-slide-1")).toHaveAttribute( "data-active", "true", ); - // Step 1 → 2. Once the backend health probe resolves, step 1's Next is enabled. - await completeBackendStep(user); + // Step 1 → 2. ChooseAgentStep does an async save before advancing. + await completeAgentStep(user); expect(screen.getByTestId("onboarding-slide-2")).toHaveAttribute( "data-active", "true", @@ -345,8 +346,8 @@ describe("OnboardingModal", () => { // Arrange: render the modal and walk through to the LLM step. renderModal(); const user = userEvent.setup(); - await completeAgentStep(user); await completeBackendStep(user); + await completeAgentStep(user); // Wait for the LLM slide to become the active one before querying // by role — otherwise the heading is `aria-hidden` from inside a // not-yet-active slide and getByRole filters it out. @@ -382,9 +383,9 @@ describe("OnboardingModal", () => { // Pick Gemini CLI: its key/base-URL come from the SDK registry like the // other providers, so the slide shows the GEMINI_API_KEY field. + await completeBackendStep(user); await user.click(screen.getByTestId("onboarding-agent-option-gemini-cli")); await completeAgentStep(user); - await completeBackendStep(user); // Lands on slide 2 (the ACP step) — not jumped past to Say Hello. await waitFor( @@ -422,10 +423,10 @@ describe("OnboardingModal", () => { renderModal(); const user = userEvent.setup(); - // Pick Claude Code → Check Backend. + // Pick Claude Code after configuring the backend. + await completeBackendStep(user); await user.click(screen.getByTestId("onboarding-agent-option-claude-code")); await completeAgentStep(user); - await completeBackendStep(user); // Slide 2 is the ACP credentials step (not skipped), so the flow keeps // all 4 progress segments and slide 2 — not Say Hello — is now active. @@ -483,9 +484,9 @@ describe("OnboardingModal", () => { renderModal(); const user = userEvent.setup(); + await completeBackendStep(user); await user.click(screen.getByTestId("onboarding-agent-option-codex")); await completeAgentStep(user); - await completeBackendStep(user); await waitFor( () => expect(screen.getByTestId("onboarding-modal")).toHaveAttribute( @@ -513,8 +514,8 @@ describe("OnboardingModal", () => { renderModal(); const user = userEvent.setup(); - await completeAgentStep(user); await completeBackendStep(user); + await completeAgentStep(user); await user.click(screen.getByTestId("onboarding-llm-next")); const helloInput = screen.getByTestId( @@ -532,8 +533,8 @@ describe("OnboardingModal", () => { renderModal(onClose); const user = userEvent.setup(); - await completeAgentStep(user); await completeBackendStep(user); + await completeAgentStep(user); await waitFor(() => expect(screen.getByTestId("onboarding-slide-2")).toHaveAttribute( "data-active", diff --git a/__tests__/root.test.tsx b/__tests__/root.test.tsx index 591119d2e..a591a3ed3 100644 --- a/__tests__/root.test.tsx +++ b/__tests__/root.test.tsx @@ -37,7 +37,7 @@ vi.mock("react-i18next", () => ({ vi.mock("#/components/features/onboarding/onboarding-modal", () => ({ OnboardingModal: () => (
-
+
), })); @@ -99,7 +99,7 @@ describe("App root agent-server availability guard", () => { }); expect(await screen.findByTestId("onboarding-modal")).toBeInTheDocument(); expect( - await screen.findByTestId("onboarding-step-choose-agent"), + await screen.findByTestId("onboarding-step-check-backend"), ).toBeInTheDocument(); expect( screen.queryByTestId("api-key-entry-screen"), diff --git a/src/components/features/onboarding/onboarding-modal.tsx b/src/components/features/onboarding/onboarding-modal.tsx index 628d5001f..2737d90eb 100644 --- a/src/components/features/onboarding/onboarding-modal.tsx +++ b/src/components/features/onboarding/onboarding-modal.tsx @@ -82,8 +82,8 @@ interface OnboardingModalProps { * Top-level onboarding modal for first-time users. * * The flow is a fixed sequence of four steps: - * 0. Choose agent - * 1. Check backend + * 0. Check backend + * 1. Choose agent * 2. Set up LLM * 3. Say hello (creates a fresh conversation, then closes) * @@ -151,15 +151,16 @@ export function OnboardingModal({ className="relative overflow-clip" > + + + - - - {isOpenHands ? ( From b41d36a2a4bcf1166db33ef1bcf86d01b26cb493 Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 16 Jun 2026 16:17:35 +0000 Subject: [PATCH 03/24] Restore Cloud backend option in onboarding Co-authored-by: openhands --- .pr/fixed-behavior.gif | Bin 70429 -> 91992 bytes .../onboarding/onboarding-modal.test.tsx | 11 +- .../features/backends/backend-form-modal.tsx | 199 +++++++++++++----- .../onboarding/steps/check-backend-step.tsx | 95 +++++---- 4 files changed, 210 insertions(+), 95 deletions(-) diff --git a/.pr/fixed-behavior.gif b/.pr/fixed-behavior.gif index f83f5da40adc248ea6977c07128884e507131cca..71e198e2626c3520de951812f763bd6e044cb5f8 100644 GIT binary patch literal 91992 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 GEdK|2?If81 literal 70429 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 S+)w`O&zjIq|6GZH002A3l8fB{ diff --git a/__tests__/components/onboarding/onboarding-modal.test.tsx b/__tests__/components/onboarding/onboarding-modal.test.tsx index 9bc03901e..bebc22b43 100644 --- a/__tests__/components/onboarding/onboarding-modal.test.tsx +++ b/__tests__/components/onboarding/onboarding-modal.test.tsx @@ -102,7 +102,7 @@ vi.mock("#/hooks/query/use-acp-auth-status", () => ({ async function completeBackendStep(user: ReturnType) { await waitFor( () => - expect(screen.getByTestId("onboarding-backend-next")).not.toBeDisabled(), + expect(screen.getByTestId("onboarding-backend-connected")).toBeVisible(), { timeout: 3000 }, ); await user.click(screen.getByTestId("onboarding-backend-next")); @@ -214,6 +214,13 @@ describe("OnboardingModal", () => { renderModal(); const user = userEvent.setup(); + await waitFor(() => + expect(screen.getByTestId("onboarding-backend-connected")).toBeVisible(), + ); + await user.click( + screen.getByTestId("onboarding-backend-show-configuration"), + ); + await user.clear(screen.getByTestId("onboarding-backend-host")); await user.type( screen.getByTestId("onboarding-backend-host"), @@ -268,6 +275,8 @@ describe("OnboardingModal", () => { expect( screen.getByTestId("onboarding-backend-configuration-fields"), ).not.toHaveClass("hidden"); + expect(screen.getByTestId("onboarding-backend-cloud-title")).toBeVisible(); + expect(screen.getByTestId("onboarding-backend-login-button")).toBeVisible(); }); it("advances each step via the per-step Next button and reframes slide offsets", async () => { diff --git a/src/components/features/backends/backend-form-modal.tsx b/src/components/features/backends/backend-form-modal.tsx index 86c20e15a..9564ccf84 100644 --- a/src/components/features/backends/backend-form-modal.tsx +++ b/src/components/features/backends/backend-form-modal.tsx @@ -273,6 +273,8 @@ interface UseBackendFormOptions { onTestConnection: (payload: BackendFormSubmitPayload) => Promise; /** Called after a successful connection test and persistence. */ onSuccess: () => void; + /** Require a non-empty API key even when the host looks local. */ + requireApiKey?: boolean; /** * When provided, completely replaces the default submit flow * (onTestConnection + onSuccess). The hook still manages form state @@ -294,6 +296,7 @@ function useBackendForm({ initialApiKey = "", onTestConnection, onSuccess, + requireApiKey = false, onSubmitOverride, }: UseBackendFormOptions) { const { t } = useTranslation("openhands"); @@ -307,10 +310,11 @@ function useBackendForm({ const [isSubmitting, setIsSubmitting] = React.useState(false); const kind = inferKindFromHost(host); + const needsApiKey = requireApiKey || kind !== "local"; const canSubmit = name.trim().length > 0 && isValidHostUrl(host) && - (kind === "local" || apiKey.trim().length > 0); + (!needsApiKey || apiKey.trim().length > 0); const handleSubmit = React.useCallback( async (e: React.FormEvent) => { @@ -356,6 +360,7 @@ function useBackendForm({ kind, onTestConnection, onSuccess, + requireApiKey, onSubmitOverride, t, ], @@ -487,6 +492,7 @@ export function BackendForm({ } onSubmitted(); }, + requireApiKey, onSubmitOverride, }); @@ -654,15 +660,95 @@ function useRedirectAfterAddBackend() { }, [currentPath, navigate]); } +interface BackendConnectionOptionsProps { + onConnected: (payload: BackendFormSubmitPayload) => void; + testIdRoot?: string; + initialManualBackend?: Partial< + Pick + >; + requireManualApiKey?: boolean; + manualSubmitLabel?: React.ReactNode; + manualSubmittingLabel?: React.ReactNode; + manualSubmitTestId?: string; +} + /** - * Left column of the "Add a Backend" modal: manual connection via - * Host + API Key. Designed for self-hosted agent servers and - * self-hosted OpenHands Cloud with API key auth. + * Manual agent-server connection plus OpenHands Cloud OAuth login. + * Used by both the Add Backend modal and the onboarding backend step so + * supported backend choices stay consistent across first-run and settings UI. */ -function ManualConnectionColumn({ onClose }: { onClose: () => void }) { +export function BackendConnectionOptions({ + onConnected, + testIdRoot = "add-backend", + initialManualBackend, + requireManualApiKey = false, + manualSubmitLabel, + manualSubmittingLabel, + manualSubmitTestId, +}: BackendConnectionOptionsProps) { + const { t } = useTranslation("openhands"); + + return ( +
+
+ +
+ +
+
+ + {t(I18nKey.BACKEND$LOGIN_OR)} + +
+
+ +
+ +
+
+ ); +} + +interface ManualConnectionColumnProps { + onConnected: (payload: BackendFormSubmitPayload) => void; + testIdRoot: string; + initialBackend?: Partial< + Pick + >; + requireApiKey: boolean; + submitLabel: React.ReactNode; + submittingLabel: React.ReactNode; + submitTestId?: string; +} + +/** + * Manual connection via Host + API Key. Designed for self-hosted agent servers + * and self-hosted OpenHands Cloud with API key auth. + */ +function ManualConnectionColumn({ + onConnected, + testIdRoot, + initialBackend, + requireApiKey, + submitLabel, + submittingLabel, + submitTestId, +}: ManualConnectionColumnProps) { const { t } = useTranslation("openhands"); - const { addBackend } = useActiveBackendContext(); - const redirectAfterAdd = useRedirectAfterAddBackend(); const { name, @@ -678,29 +764,31 @@ function ManualConnectionColumn({ onClose }: { onClose: () => void }) { canSubmit, handleSubmit, } = useBackendForm({ + initialName: initialBackend?.name ?? "", + initialHost: initialBackend?.host ?? "", + initialApiKey: initialBackend?.apiKey ?? "", onTestConnection: testBackendConnection, onSuccess: () => { - addBackend({ + onConnected({ name: name.trim(), host: normalizeHost(host), apiKey: apiKey.trim(), kind, }); - redirectAfterAdd(); - onClose(); }, + requireApiKey, }); return (
void }) {
void }) { />

{t(I18nKey.BACKEND$HOST_HELPER)}

void }) { {connectionError ? (
{connectionError} @@ -766,26 +854,27 @@ function ManualConnectionColumn({ onClose }: { onClose: () => void }) { type="submit" variant="secondary" isDisabled={!canSubmit || isSubmitting} - testId="add-backend-submit" + testId={submitTestId ?? `${testIdRoot}-submit`} className="w-full text-center" > - {isSubmitting - ? t(I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING) - : t(I18nKey.BACKEND$CONNECT)} + {isSubmitting ? submittingLabel : submitLabel} ); } +interface CloudLoginColumnProps { + onConnected: (payload: BackendFormSubmitPayload) => void; + testIdRoot: string; +} + /** - * Right column of the "Add a Backend" modal: one-click OAuth login - * with OpenHands Cloud. Includes an "Advanced" disclosure for - * users who self-host OpenHands Cloud and need to override the host. + * One-click OAuth login with OpenHands Cloud. Includes an "Advanced" + * disclosure for users who self-host OpenHands Cloud and need to override the + * host. */ -function CloudLoginColumn({ onClose }: { onClose: () => void }) { +function CloudLoginColumn({ onConnected, testIdRoot }: CloudLoginColumnProps) { const { t } = useTranslation("openhands"); - const { addBackend } = useActiveBackendContext(); - const redirectAfterAdd = useRedirectAfterAddBackend(); const [advancedOpen, setAdvancedOpen] = React.useState(false); const [customHost, setCustomHost] = React.useState(""); @@ -793,14 +882,12 @@ function CloudLoginColumn({ onClose }: { onClose: () => void }) { const effectiveHost = customHost.trim() || DEFAULT_OPENHANDS_CLOUD_HOST; const handleLoginSuccess = (apiKey: string) => { - addBackend({ + onConnected({ name: "OpenHands Cloud", host: normalizeHost(effectiveHost), apiKey, kind: "cloud", }); - redirectAfterAdd(); - onClose(); }; return ( @@ -810,7 +897,7 @@ function CloudLoginColumn({ onClose }: { onClose: () => void }) {

{t(I18nKey.BACKEND$CLOUD_TITLE)}

@@ -823,7 +910,7 @@ function CloudLoginColumn({ onClose }: { onClose: () => void }) {
@@ -831,7 +918,7 @@ function CloudLoginColumn({ onClose }: { onClose: () => void }) { type="button" onClick={() => setAdvancedOpen((open) => !open)} aria-expanded={advancedOpen} - data-testid="add-backend-advanced-toggle" + data-testid={`${testIdRoot}-advanced-toggle`} className="flex w-full cursor-pointer items-center justify-center gap-1 text-center text-xs text-[var(--oh-muted)] transition-colors hover:text-content-2" > {t(I18nKey.BACKEND$ADVANCED)} @@ -851,8 +938,8 @@ function CloudLoginColumn({ onClose }: { onClose: () => void }) { aria-hidden={!advancedOpen} > void }) { ); } +function AddBackendConnectionOptions({ onClose }: { onClose: () => void }) { + const { addBackend } = useActiveBackendContext(); + const redirectAfterAdd = useRedirectAfterAddBackend(); + + const handleConnected = React.useCallback( + (payload: BackendFormSubmitPayload) => { + addBackend(payload); + redirectAfterAdd(); + onClose(); + }, + [addBackend, redirectAfterAdd, onClose], + ); + + return ; +} + // ── Modal wrappers ────────────────────────────────────────────────── /** @@ -906,26 +1009,8 @@ export function BackendFormModal({
- {/* Two-column body */} -
- {/* Left: manual connection */} -
- -
- - {/* Vertical OR divider */} -
-
- - {t(I18nKey.BACKEND$LOGIN_OR)} - -
-
- - {/* Right: cloud login */} -
- -
+
+
diff --git a/src/components/features/onboarding/steps/check-backend-step.tsx b/src/components/features/onboarding/steps/check-backend-step.tsx index 94ad54d80..5e9eea2f0 100644 --- a/src/components/features/onboarding/steps/check-backend-step.tsx +++ b/src/components/features/onboarding/steps/check-backend-step.tsx @@ -8,7 +8,10 @@ import { isAuthRequired, } from "#/api/agent-server-config"; import { DEFAULT_LOCAL_BACKEND_NAME } from "#/api/backend-registry/default-backend"; -import { BackendForm } from "#/components/features/backends/backend-form-modal"; +import { + BackendConnectionOptions, + type BackendFormSubmitPayload, +} from "#/components/features/backends/backend-form-modal"; import { BrandButton } from "#/components/features/settings/brand-button"; import { useActiveBackendContext } from "#/contexts/active-backend-context"; import { useBackendsHealth } from "#/hooks/query/use-backends-health"; @@ -100,7 +103,7 @@ function ConnectionBanner({ */ export function CheckBackendStep({ onBack, onNext }: CheckBackendStepProps) { const { t } = useTranslation("openhands"); - const { active } = useActiveBackendContext(); + const { active, addBackend, updateBackend } = useActiveBackendContext(); const { backend } = active; const noBackendSelected = isNoBackend(backend); const defaults = React.useMemo(() => getAgentServerFormDefaults(), []); @@ -132,6 +135,23 @@ export function CheckBackendStep({ onBack, onNext }: CheckBackendStepProps) { const hideConfigurationFields = isConnected === true && !configurationOpen; + const handleConnected = React.useCallback( + (payload: BackendFormSubmitPayload) => { + if (noBackendSelected) { + addBackend(payload); + } else { + updateBackend(backend.id, payload); + } + onNext(); + }, + [addBackend, backend.id, noBackendSelected, onNext, updateBackend], + ); + + const actionRowClassName = cn( + "sticky bottom-0 mt-2 flex items-center gap-2 bg-base-secondary pt-4 pb-7", + onBack ? "justify-between" : "justify-end", + ); + return (
) : null} - ( -
- {onBack ? ( - - {t(I18nKey.ONBOARDING$BACK)} - - ) : null} +
+ {!hideConfigurationFields ? ( + + ) : null} +
+ + {hideConfigurationFields ? ( +
+ {onBack ? ( - {isSubmitting - ? t(I18nKey.SETTINGS$SAVING) - : t(I18nKey.ONBOARDING$NEXT)} + {t(I18nKey.ONBOARDING$BACK)} -
- )} - /> + ) : null} + + {t(I18nKey.ONBOARDING$NEXT)} + +
+ ) : null}
); } From ae212df0209673c58611d651b6dfdf0a9c6c36ba Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 16 Jun 2026 16:29:08 +0000 Subject: [PATCH 04/24] Make first-run backend onboarding calmer Co-authored-by: openhands --- .pr/fixed-behavior.gif | Bin 91992 -> 79643 bytes .../onboarding/onboarding-modal.test.tsx | 24 +++++++++++++++ .../onboarding/steps/check-backend-step.tsx | 28 ++++++++++-------- src/i18n/translation.json | 17 +++++++++++ 4 files changed, 57 insertions(+), 12 deletions(-) diff --git a/.pr/fixed-behavior.gif b/.pr/fixed-behavior.gif index 71e198e2626c3520de951812f763bd6e044cb5f8..99b43fdfd56af7b1ad8e1a43c52d2472e2192aef 100644 GIT binary patch literal 79643 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
); } From 04f77e0dfa6bd71443eb8dba989cf055383ac464 Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 16 Jun 2026 16:44:34 +0000 Subject: [PATCH 10/24] Hide skip on locked Cloud backend onboarding Co-authored-by: openhands --- __tests__/components/onboarding/onboarding-modal.test.tsx | 1 + src/components/features/onboarding/onboarding-modal.tsx | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/__tests__/components/onboarding/onboarding-modal.test.tsx b/__tests__/components/onboarding/onboarding-modal.test.tsx index 17afded0b..c13b30f52 100644 --- a/__tests__/components/onboarding/onboarding-modal.test.tsx +++ b/__tests__/components/onboarding/onboarding-modal.test.tsx @@ -259,6 +259,7 @@ describe("OnboardingModal", () => { expect( screen.queryByTestId("onboarding-backend-cloud-host"), ).not.toBeInTheDocument(); + expect(screen.queryByTestId("onboarding-skip")).not.toBeInTheDocument(); }); it("shows a connection error when saving an unreachable backend", async () => { diff --git a/src/components/features/onboarding/onboarding-modal.tsx b/src/components/features/onboarding/onboarding-modal.tsx index 2737d90eb..25293416b 100644 --- a/src/components/features/onboarding/onboarding-modal.tsx +++ b/src/components/features/onboarding/onboarding-modal.tsx @@ -1,5 +1,6 @@ import React from "react"; import { useTranslation } from "react-i18next"; +import { getLockedCloudHost } from "#/api/agent-server-config"; import { ModalBackdrop } from "#/components/shared/modals/modal-backdrop"; import { MODAL_MAX_WIDTH_VIEWPORT, @@ -108,6 +109,7 @@ export function OnboardingModal({ // * Any ACP provider (Claude Code / Codex / Gemini) → the ACP credentials // form: API key + optional base URL, with a login-detection banner. const isOpenHands = selectedAgentId === "openhands"; + const hideSkip = currentStep === 0 && getLockedCloudHost() !== null; const goNext = React.useCallback( () => setCurrentStep((step) => Math.min(step + 1, TOTAL_STEPS - 1)), [], @@ -184,7 +186,7 @@ export function OnboardingModal({
- {currentStep < TOTAL_STEPS - 1 ? ( + {currentStep < TOTAL_STEPS - 1 && !hideSkip ? ( ) : null} -
+
{!hideConfigurationFields ? ( Date: Thu, 18 Jun 2026 15:18:31 -0400 Subject: [PATCH 16/24] fix: show onboarding for locked cloud first run --- __tests__/root.test.tsx | 26 ++++++++++++++++++++++++++ src/root.tsx | 22 ++++++++++++++++------ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/__tests__/root.test.tsx b/__tests__/root.test.tsx index a591a3ed3..720bab55f 100644 --- a/__tests__/root.test.tsx +++ b/__tests__/root.test.tsx @@ -76,6 +76,8 @@ describe("App root agent-server availability guard", () => { vi.unstubAllEnvs(); delete (window as unknown as Record) .__AGENT_CANVAS_AUTH_REQUIRED__; + delete (window as unknown as Record) + .__AGENT_CANVAS_LOCK_TO_CLOUD__; ( window as unknown as Record ).__AGENT_CANVAS_SESSION_API_KEY__ = "test-session-key"; @@ -106,6 +108,30 @@ describe("App root agent-server availability guard", () => { ).not.toBeInTheDocument(); }); + it("shows first-run onboarding before the recovery modal when locked to Cloud with no backend", async () => { + vi.stubEnv("VITE_LOCK_TO_CLOUD", "https://app.all-hands.dev"); + vi.stubEnv("VITE_SESSION_API_KEY", ""); + delete (window as unknown as Record) + .__AGENT_CANVAS_SESSION_API_KEY__; + window.localStorage.clear(); + __resetActiveStoreForTests(); + + renderApp(["/"]); + + await waitFor(() => { + expect( + screen.getByTestId("first-run-onboarding-screen"), + ).toBeInTheDocument(); + }); + expect(await screen.findByTestId("onboarding-modal")).toBeInTheDocument(); + expect( + screen.queryByTestId("agent-server-onboarding-screen"), + ).not.toBeInTheDocument(); + expect( + screen.queryByTestId("manage-backends-modal"), + ).not.toBeInTheDocument(); + }); + it("shows the auth gate after onboarding was already completed", async () => { vi.stubEnv("VITE_AUTH_REQUIRED", "true"); vi.stubEnv("VITE_SESSION_API_KEY", ""); diff --git a/src/root.tsx b/src/root.tsx index bae8773c2..cc5b9578b 100644 --- a/src/root.tsx +++ b/src/root.tsx @@ -17,8 +17,14 @@ import { isAgentServerUnavailableError, isAgentServerAuthError, } from "#/api/agent-server-compatibility"; -import { isAuthRequiredAndMissing } from "#/api/agent-server-config"; -import { getEffectiveLocalBackend } from "#/api/backend-registry/active-store"; +import { + getLockedCloudHost, + isAuthRequiredAndMissing, +} from "#/api/agent-server-config"; +import { + getEffectiveLocalBackend, + isNoBackend, +} from "#/api/backend-registry/active-store"; import { useActiveBackendContext } from "#/contexts/active-backend-context"; import { isCloudBackendLoggedOutHealthError, @@ -171,14 +177,19 @@ export default function App() { const bakedKeyMissing = isAuthRequiredAndMissing(); const hasRegisteredKey = Boolean(getEffectiveLocalBackend()?.apiKey); const authMissing = bakedKeyMissing && !hasRegisteredKey; + const { active } = useActiveBackendContext(); + const lockedNoBackend = + Boolean(getLockedCloudHost()) && isNoBackend(active.backend); const { isCompleted: onboardingCompleted, markCompleted } = useOnboardingCompletion(); + const shouldShowFirstRunOnboarding = + (authMissing || lockedNoBackend) && !onboardingCompleted; const [showFirstRunOnboarding, setShowFirstRunOnboarding] = React.useState( - () => authMissing && !onboardingCompleted, + () => shouldShowFirstRunOnboarding, ); React.useEffect(() => { - if (authMissing && !onboardingCompleted) { + if (shouldShowFirstRunOnboarding) { setShowFirstRunOnboarding(true); return; } @@ -186,7 +197,7 @@ export default function App() { if (onboardingCompleted) { setShowFirstRunOnboarding(false); } - }, [authMissing, onboardingCompleted]); + }, [onboardingCompleted, shouldShowFirstRunOnboarding]); // Skip the /server_info probe entirely when we already know auth is // required and missing — it would just 401 and waste time. Also keep the @@ -195,7 +206,6 @@ export default function App() { const config = useConfig({ enabled: !authMissing && !showFirstRunOnboarding, }); - const { active } = useActiveBackendContext(); const activeCloudHealth = useBackendsHealth( active.backend.kind === "cloud" ? [active.backend] : [], )[active.backend.id]; From 5bb8049f74d37aacf3180ebca4cd1bb8a632825f Mon Sep 17 00:00:00 2001 From: neubig <398875+neubig@users.noreply.github.com> Date: Thu, 18 Jun 2026 15:51:58 -0400 Subject: [PATCH 17/24] ci: support stacked mock llm runs --- .github/workflows/docker.yml | 1 - .github/workflows/mock-llm-docker-e2e.yml | 2 +- .github/workflows/mock-llm-e2e.yml | 6 +++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 404bb5abd..1dacc7781 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -7,7 +7,6 @@ on: tags: - "v*" pull_request: - branches: [main] workflow_dispatch: inputs: agent_server_image: diff --git a/.github/workflows/mock-llm-docker-e2e.yml b/.github/workflows/mock-llm-docker-e2e.yml index 0f2781fad..8218fa0e6 100644 --- a/.github/workflows/mock-llm-docker-e2e.yml +++ b/.github/workflows/mock-llm-docker-e2e.yml @@ -70,7 +70,7 @@ jobs: SHOULD_RUN=false while IFS= read -r file; do case "$file" in - src/*|public/*|scripts/*|bin/*|config/*|docker/*|tests/e2e/mock-llm/*|tests/e2e/support/*|package.json|package-lock.json|vite.config.ts|tsconfig.json|react-router.config.ts|playwright.mock-llm.config.ts|playwright.mock-llm-docker.config.ts|tailwind.config.js|hero.ts|.github/workflows/mock-llm-docker-e2e.yml) + src/*|public/*|scripts/*|bin/*|config/*|docker/*|tests/e2e/mock-llm/*|tests/e2e/support/*|package.json|package-lock.json|vite.config.ts|tsconfig.json|react-router.config.ts|playwright.mock-llm.config.ts|playwright.mock-llm-docker.config.ts|tailwind.config.js|hero.ts|.github/workflows/docker.yml|.github/workflows/mock-llm-docker-e2e.yml) SHOULD_RUN=true break ;; diff --git a/.github/workflows/mock-llm-e2e.yml b/.github/workflows/mock-llm-e2e.yml index e58a9b040..1532fa622 100644 --- a/.github/workflows/mock-llm-e2e.yml +++ b/.github/workflows/mock-llm-e2e.yml @@ -49,7 +49,11 @@ jobs: needs: detect-pr-changes if: github.event_name != 'pull_request' || needs.detect-pr-changes.outputs.should_run == 'true' runs-on: ubuntu-24.04 - timeout-minutes: 15 + # Full-suite runs can spend several minutes on dependency, browser, uv, + # and frontend setup before Playwright starts. Keep Playwright's own + # 10-minute test deadline below, but give the job enough wall-clock room + # for setup plus reporting so GitHub does not terminate it mid-suite. + timeout-minutes: 30 env: MOCK_LLM_REPORT_PATH: mock-llm-report.md From 0da388a049733cd54b2b40e9c916f18eb58b8fc5 Mon Sep 17 00:00:00 2001 From: neubig <398875+neubig@users.noreply.github.com> Date: Thu, 18 Jun 2026 15:53:56 -0400 Subject: [PATCH 18/24] test: assert scoped shell background --- .../mock-llm/regressions/mock-llm-ui-regressions.spec.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/e2e/mock-llm/regressions/mock-llm-ui-regressions.spec.ts b/tests/e2e/mock-llm/regressions/mock-llm-ui-regressions.spec.ts index 0f131de3a..997b9c702 100644 --- a/tests/e2e/mock-llm/regressions/mock-llm-ui-regressions.spec.ts +++ b/tests/e2e/mock-llm/regressions/mock-llm-ui-regressions.spec.ts @@ -370,13 +370,12 @@ test.describe("UI regressions", () => { await routeSessionApiKey(page); await page.goto("/", { waitUntil: "domcontentloaded" }); - await expect(page.locator("[data-agent-server-ui]").first()).toBeVisible({ - timeout: 15_000, - }); + const shell = page.locator("[data-agent-server-ui]").first(); + await expect(shell).toBeVisible({ timeout: 15_000 }); const layout = page.getByTestId("root-layout"); await expect(layout).toBeVisible(); - const insideBackground = await layout.evaluate( + const insideBackground = await shell.evaluate( (el) => getComputedStyle(el).backgroundColor, ); From 4b3118fe8cc9f79ffb73492b1f989ffb61b29060 Mon Sep 17 00:00:00 2001 From: openhands Date: Thu, 18 Jun 2026 21:28:59 +0000 Subject: [PATCH 19/24] fix: resolve merge conflicts with main (fix-public-onboarding stacking) - Remove duplicate handleConnected/actionRowClassName/titleKey declarations in check-backend-step.tsx that resulted from merging the parent PR's changes on top of our lock-to-cloud additions - Remove erroneous waitFor(onboarding-backend-connected) steps from the 'shows a connection error' test which uses a no-backend context where the connection banner is never shown Co-authored-by: openhands --- .../onboarding/onboarding-modal.test.tsx | 7 ------ .../onboarding/steps/check-backend-step.tsx | 23 ------------------- 2 files changed, 30 deletions(-) diff --git a/__tests__/components/onboarding/onboarding-modal.test.tsx b/__tests__/components/onboarding/onboarding-modal.test.tsx index ad1a493b8..2097c58da 100644 --- a/__tests__/components/onboarding/onboarding-modal.test.tsx +++ b/__tests__/components/onboarding/onboarding-modal.test.tsx @@ -302,13 +302,6 @@ describe("OnboardingModal", () => { renderModal(); const user = userEvent.setup(); - await waitFor(() => - expect(screen.getByTestId("onboarding-backend-connected")).toBeVisible(), - ); - await user.click( - screen.getByTestId("onboarding-backend-show-configuration"), - ); - await user.clear(screen.getByTestId("onboarding-backend-host")); await user.type( screen.getByTestId("onboarding-backend-host"), diff --git a/src/components/features/onboarding/steps/check-backend-step.tsx b/src/components/features/onboarding/steps/check-backend-step.tsx index 9cf242d88..02577eaa1 100644 --- a/src/components/features/onboarding/steps/check-backend-step.tsx +++ b/src/components/features/onboarding/steps/check-backend-step.tsx @@ -158,29 +158,6 @@ export function CheckBackendStep({ onBack, onNext }: CheckBackendStepProps) { : I18nKey.BACKEND$ADD_TITLE : I18nKey.ONBOARDING$BACKEND_TITLE; - const handleConnected = React.useCallback( - (payload: BackendFormSubmitPayload) => { - if (noBackendSelected) { - addBackend(payload); - } else { - updateBackend(backend.id, payload); - } - onNext(); - }, - [addBackend, backend.id, noBackendSelected, onNext, updateBackend], - ); - - const actionRowClassName = cn( - "sticky bottom-0 mt-2 flex items-center gap-2 bg-base-secondary pt-4 pb-7", - onBack ? "justify-between" : "justify-end", - ); - const titleKey = noBackendSelected - ? I18nKey.BACKEND$ADD_TITLE - : I18nKey.ONBOARDING$BACKEND_TITLE; - const subtitleKey = noBackendSelected - ? I18nKey.ONBOARDING$ADD_BACKEND_SUBTITLE - : I18nKey.ONBOARDING$BACKEND_SUBTITLE; - return (
Date: Thu, 18 Jun 2026 21:30:27 +0000 Subject: [PATCH 20/24] fix: remove unused isLockedToCloud export All callsites use getLockedCloudHost() !== null directly. Remove the redundant helper to keep the public API intentional. Co-authored-by: openhands --- src/api/agent-server-config.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/api/agent-server-config.ts b/src/api/agent-server-config.ts index 4d6331d82..9c54fc0fb 100644 --- a/src/api/agent-server-config.ts +++ b/src/api/agent-server-config.ts @@ -100,10 +100,6 @@ export function getLockedCloudHost(): string | null { return null; } -export function isLockedToCloud(): boolean { - return getLockedCloudHost() !== null; -} - export function getAgentServerBaseUrl(): string | null { const configuredUrl = getConfiguredBaseUrl(); if (configuredUrl) return configuredUrl; From 682e853ae2701085a3262b1c4835940db786ef3a Mon Sep 17 00:00:00 2001 From: Graham Neubig Date: Fri, 19 Jun 2026 09:15:34 -0400 Subject: [PATCH 21/24] fix: show onboarding first in locked-cloud mode when a session key is present On PR #1389 Hiep reported that `static-server.mjs --lock-to-cloud ...` landed on the Manage Backends recovery modal ("Add Backend") instead of first-run onboarding after a fresh `~/.openhands`. Root cause: when the build had a baked-in `VITE_SESSION_API_KEY` (or one was injected via `--session-api-key`), `makeDefaultLocalBackend()` seeded a Local backend even in locked-to-Cloud mode. That made `isNoBackend()` false, so `lockedNoBackend` was false and first-run onboarding was skipped; the subsequent `/server_info` probe failed and `root.tsx` rendered `MissingAgentServerScreen` (Manage Backends recovery modal). Fix: - `makeDefaultLocalBackend()` returns null when `getLockedCloudHost()` is set, so locked mode never auto-seeds a Local backend. - `root.tsx` broadens the gate to `lockedNeedsOnboarding`: locked + (no backend OR active backend is not Cloud) triggers onboarding, covering a stale persisted Local backend from a previous non-locked session too. Verified by building with a baked `VITE_SESSION_API_KEY` and serving with `--lock-to-cloud`: the app now shows the first-run onboarding Cloud-login screen instead of the recovery modal, and no Local backend is seeded. Non-locked mode still seeds the Local backend as before. Co-authored-by: openhands --- __tests__/root.test.tsx | 70 +++++++++++++++++++++ src/api/backend-registry/default-backend.ts | 12 ++++ src/root.tsx | 11 +++- 3 files changed, 90 insertions(+), 3 deletions(-) diff --git a/__tests__/root.test.tsx b/__tests__/root.test.tsx index 720bab55f..5ec342686 100644 --- a/__tests__/root.test.tsx +++ b/__tests__/root.test.tsx @@ -132,6 +132,76 @@ describe("App root agent-server availability guard", () => { ).not.toBeInTheDocument(); }); + it("shows first-run onboarding when locked to Cloud even if a session API key is baked in", async () => { + // Reproduces Hiep's report on PR #1389: a pre-built bundle with a baked-in + // VITE_SESSION_API_KEY plus --lock-to-cloud used to seed a disconnected + // Local backend, which skipped onboarding and landed on the Manage Backends + // recovery modal. Locked mode must not seed a Local backend, so onboarding + // still owns the first-run Cloud login. + vi.stubEnv("VITE_LOCK_TO_CLOUD", "https://app.all-hands.dev"); + vi.stubEnv("VITE_SESSION_API_KEY", "baked-session-key"); + ( + window as unknown as Record + ).__AGENT_CANVAS_SESSION_API_KEY__ = "baked-session-key"; + window.localStorage.clear(); + __resetActiveStoreForTests(); + + renderApp(["/"]); + + await waitFor(() => { + expect( + screen.getByTestId("first-run-onboarding-screen"), + ).toBeInTheDocument(); + }); + expect(await screen.findByTestId("onboarding-modal")).toBeInTheDocument(); + expect( + screen.queryByTestId("agent-server-onboarding-screen"), + ).not.toBeInTheDocument(); + expect( + screen.queryByTestId("manage-backends-modal"), + ).not.toBeInTheDocument(); + // No Local backend should have been seeded into the registry. + expect(window.localStorage.getItem("openhands-backends")).toBeNull(); + }); + + it("shows first-run onboarding when locked to Cloud with a stale persisted Local backend", async () => { + // A Local backend persisted from a previous non-locked session must not + // bypass onboarding once the deployment is locked to Cloud. + vi.stubEnv("VITE_LOCK_TO_CLOUD", "https://app.all-hands.dev"); + vi.stubEnv("VITE_SESSION_API_KEY", ""); + delete (window as unknown as Record) + .__AGENT_CANVAS_SESSION_API_KEY__; + window.localStorage.setItem( + "openhands-backends", + JSON.stringify([ + { + id: "default-local", + name: "Local", + host: "http://127.0.0.1:8000", + apiKey: "stale-key", + kind: "local", + }, + ]), + ); + window.localStorage.setItem( + "openhands-active-backend", + JSON.stringify({ backendId: "default-local", orgId: null }), + ); + __resetActiveStoreForTests(); + + renderApp(["/"]); + + await waitFor(() => { + expect( + screen.getByTestId("first-run-onboarding-screen"), + ).toBeInTheDocument(); + }); + expect(await screen.findByTestId("onboarding-modal")).toBeInTheDocument(); + expect( + screen.queryByTestId("manage-backends-modal"), + ).not.toBeInTheDocument(); + }); + it("shows the auth gate after onboarding was already completed", async () => { vi.stubEnv("VITE_AUTH_REQUIRED", "true"); vi.stubEnv("VITE_SESSION_API_KEY", ""); diff --git a/src/api/backend-registry/default-backend.ts b/src/api/backend-registry/default-backend.ts index 77b7f1fad..a9a6ba489 100644 --- a/src/api/backend-registry/default-backend.ts +++ b/src/api/backend-registry/default-backend.ts @@ -1,6 +1,7 @@ import { getAgentServerBaseUrl, getAgentServerSessionApiKey, + getLockedCloudHost, } from "../agent-server-config"; import type { Backend } from "./types"; @@ -22,8 +23,19 @@ export const DEFAULT_LOCAL_BACKEND_NAME = "Local"; * Used as the seed entry written to `openhands-backends` on first load; * if it returns null, onboarding is responsible for collecting backend * connection details from the user. + * + * Returns null when the deployment is locked to a single OpenHands Cloud + * host (`VITE_LOCK_TO_CLOUD` / `--lock-to-cloud`). In locked mode the user + * can only authenticate against the configured Cloud URL, so seeding a + * Local backend from a baked/injected session key would short-circuit the + * first-run onboarding gate and strand the user on the Manage Backends + * recovery modal with a disconnected Local entry. */ export function makeDefaultLocalBackend(): Backend | null { + // Locked-to-Cloud deployments must never auto-seed a Local backend — + // see the docblock above. + if (getLockedCloudHost()) return null; + const host = getAgentServerBaseUrl(); const apiKey = getAgentServerSessionApiKey(); diff --git a/src/root.tsx b/src/root.tsx index cc5b9578b..54d056477 100644 --- a/src/root.tsx +++ b/src/root.tsx @@ -178,12 +178,17 @@ export default function App() { const hasRegisteredKey = Boolean(getEffectiveLocalBackend()?.apiKey); const authMissing = bakedKeyMissing && !hasRegisteredKey; const { active } = useActiveBackendContext(); - const lockedNoBackend = - Boolean(getLockedCloudHost()) && isNoBackend(active.backend); + // In locked-to-Cloud mode the only valid backend is a Cloud backend against + // the configured host. A missing backend OR a stale Local backend (e.g. one + // persisted from a previous non-locked session) must both trigger first-run + // onboarding instead of the Manage Backends recovery modal. + const lockedNeedsOnboarding = + Boolean(getLockedCloudHost()) && + (isNoBackend(active.backend) || active.backend.kind !== "cloud"); const { isCompleted: onboardingCompleted, markCompleted } = useOnboardingCompletion(); const shouldShowFirstRunOnboarding = - (authMissing || lockedNoBackend) && !onboardingCompleted; + (authMissing || lockedNeedsOnboarding) && !onboardingCompleted; const [showFirstRunOnboarding, setShowFirstRunOnboarding] = React.useState( () => shouldShowFirstRunOnboarding, ); From a8fa1106e6e850452fec249e5b771f5ad759e4af Mon Sep 17 00:00:00 2001 From: Graham Neubig Date: Fri, 19 Jun 2026 11:12:53 -0400 Subject: [PATCH 22/24] fix: locked-cloud onboarding layout + restore CI test mock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI fix: - `use-create-conversation-metadata.test.ts` mocks the whole `agent-server-config` module but was missing `getLockedCloudHost`, which `makeDefaultLocalBackend()` now imports. Add it (returning null) so the default local backend seeds and the create-conversation mutation succeeds again. Onboarding layout (locked-to-Cloud first-run step): - Drop the `max-w-sm` cap on the locked CloudLoginColumn so the "Skip the setup — connect instantly with your OpenHands Cloud account." text fills the modal content width instead of wrapping in a narrow centered column. - Add `pb-7` to the onboarding scroll area so the "Login with OpenHands Cloud" button is no longer flush with / cut off by the modal bottom. Widening the text (fewer lines) plus the bottom padding together give the button breathing room. Co-authored-by: openhands --- __tests__/api/use-create-conversation-metadata.test.ts | 1 + src/components/features/backends/backend-form-modal.tsx | 2 +- src/components/features/onboarding/onboarding-modal.tsx | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/__tests__/api/use-create-conversation-metadata.test.ts b/__tests__/api/use-create-conversation-metadata.test.ts index 5c4c45fb3..1033df95f 100644 --- a/__tests__/api/use-create-conversation-metadata.test.ts +++ b/__tests__/api/use-create-conversation-metadata.test.ts @@ -54,6 +54,7 @@ vi.mock("#/api/agent-server-config", () => ({ ), shouldLoadPublicSkills: vi.fn(() => true), syncBakedSessionApiKey: vi.fn(), + getLockedCloudHost: vi.fn(() => null), })); vi.mock("#/api/settings-service/settings-service.api", () => ({ diff --git a/src/components/features/backends/backend-form-modal.tsx b/src/components/features/backends/backend-form-modal.tsx index 362f47d5e..8dcb7e7e4 100644 --- a/src/components/features/backends/backend-form-modal.tsx +++ b/src/components/features/backends/backend-form-modal.tsx @@ -696,7 +696,7 @@ export function BackendConnectionOptions({ data-testid={`${testIdRoot}-connection-options`} className="flex justify-center" > -
+
Date: Fri, 19 Jun 2026 11:31:44 -0400 Subject: [PATCH 23/24] test: add getLockedCloudHost to agent-server-config test mocks `makeDefaultLocalBackend()` now imports `getLockedCloudHost` from `agent-server-config`. Two tests that fully mock that module were missing the export, so the default local backend never seeded and every create-/ read-conversation path threw `NoBackendAvailableError`: - `agent-server-conversation-service.test.ts` (23 failures on ubuntu CI) - `use-create-conversation-metadata.test.ts` (already fixed in prev commit) Add `getLockedCloudHost: vi.fn(() => null)` to both mocks so the non-locked default-backend seeding path works again. Co-authored-by: openhands --- __tests__/api/agent-server-conversation-service.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/__tests__/api/agent-server-conversation-service.test.ts b/__tests__/api/agent-server-conversation-service.test.ts index b5d8e906e..22fa9305f 100644 --- a/__tests__/api/agent-server-conversation-service.test.ts +++ b/__tests__/api/agent-server-conversation-service.test.ts @@ -82,6 +82,7 @@ vi.mock("#/api/agent-server-config", () => ({ getAgentServerHeaders: vi.fn(() => ({ "X-Session-API-Key": "test-api-key" })), shouldLoadPublicSkills: vi.fn(() => true), syncBakedSessionApiKey: vi.fn(), + getLockedCloudHost: vi.fn(() => null), })); vi.mock("#/api/settings-service/settings-service.api", () => ({ From 7d6cb4bc681692dc638ec96ff1168f5f9dc40309 Mon Sep 17 00:00:00 2001 From: FraterCCCLXIII Date: Fri, 19 Jun 2026 10:09:47 -0700 Subject: [PATCH 24/24] Enhance conversation sidebar with pinned section and grouped organization (#1144) * Add pinned conversations and reorderable workspace folders to the sidebar. Persist pins per backend with a capped pinned section, pin-on-hover cards that keep the icon aligned with hover actions via an invisible ellipsis spacer, and drag-and-drop folder ordering stored in panel preferences. Co-authored-by: Cursor * Simplify grouped folder rows for drag and expand. Drop the grip and chevron controls, remove selection highlight and layout animation, and drag or click the folder label directly while keeping row hover feedback. Co-authored-by: Cursor * Polish folder drag-and-drop and pinned section visuals. Drag the whole folder (and contents) as the drag image, show an accent drop line between folders with position-aware reordering, and animate sibling folders into place only around a reorder. Swap the folder icon to its open or closed counterpart on hover, add a chronological-view divider plus an outline pin icon to the pinned section header, and render that header in normal weight. Co-authored-by: Cursor * Add hover metadata popover for sidebar conversations. Show a modal-styled popover on conversation hover with the full title, status dot, and repo/branch-or-directory, model, and created-date rows. Reserve the action overlay width so titles truncate instead of colliding with the pin, drop the small status tooltip, and gate the popover behind a new "Hover metadata" toggle in the filter dropdown (persisted, on by default). Co-authored-by: Cursor * Improve folder drag preview and placeholder. Show a rounded, surfaced drag image anchored to the grab point and blank the original row (preserving its height) via opacity so Chrome does not cancel the native drag. Co-authored-by: Cursor * Harden sidebar "Load more" pagination Dedupe loaded conversations by id and keep fetching pages until the visible list actually grows, so a single "Load more" click reliably surfaces new rows despite the 10s background refetch dropping in-flight fetchNextPage calls or pages yielding zero visible rows. Show the skeleton throughout. Also drop the native title tooltip on card titles and record the still-intermittent double-click symptom as a KNOWN ISSUE. Co-authored-by: Cursor * Keep pinned conversations exclusive to the pinned section. Filter pinned threads out of grouped/chronological lists to prevent duplicates, add regression coverage for both list modes, and add the missing upgrade-button translation key with typed i18n usage. Co-authored-by: Cursor * fix: failing tests * fix: lint --------- Co-authored-by: Cursor Co-authored-by: hieptl --- .../conversation-card.test.tsx | 45 ++ .../conversation-panel-filter-menu.test.tsx | 2 + .../conversation-panel-list-helpers.test.ts | 49 ++ .../conversation-panel.test.tsx | 183 ++++++- ...nversation-panel-preferences-store.test.ts | 2 + .../stores/pinned-conversations-store.test.ts | 77 +++ .../conversation-card-header.tsx | 1 + .../conversation-card-preview.tsx | 134 +++++ .../conversation-card-title.tsx | 1 - .../conversation-card/conversation-card.tsx | 147 +++++- .../conversation-group-folder-list.tsx | 188 +++++++ .../conversation-group-folder-row.tsx | 239 +++++++++ .../conversation-panel-filter-menu.tsx | 15 + .../conversation-panel-list-helpers.ts | 89 ++++ .../conversation-panel-pinned-section.tsx | 71 +++ .../conversation-panel/conversation-panel.tsx | 466 ++++++++++++------ .../features/settings/upgrade-button.tsx | 2 +- src/i18n/translation.json | 204 ++++++++ .../conversation-panel-preferences-store.ts | 26 +- src/stores/pinned-conversations-store.ts | 95 ++++ 20 files changed, 1854 insertions(+), 182 deletions(-) create mode 100644 __tests__/stores/pinned-conversations-store.test.ts create mode 100644 src/components/features/conversation-panel/conversation-card/conversation-card-preview.tsx create mode 100644 src/components/features/conversation-panel/conversation-group-folder-list.tsx create mode 100644 src/components/features/conversation-panel/conversation-group-folder-row.tsx create mode 100644 src/components/features/conversation-panel/conversation-panel-pinned-section.tsx create mode 100644 src/stores/pinned-conversations-store.ts diff --git a/__tests__/components/features/conversation-panel/conversation-card.test.tsx b/__tests__/components/features/conversation-panel/conversation-card.test.tsx index 0b4c5b663..69d0e5efd 100644 --- a/__tests__/components/features/conversation-panel/conversation-card.test.tsx +++ b/__tests__/components/features/conversation-panel/conversation-card.test.tsx @@ -39,6 +39,8 @@ vi.mock("react-i18next", async () => { CONVERSATION$UPDATED: "Updated", COMMON$NO_REPOSITORY: "No repository", CONVERSATION$ACP_AGENT_GENERIC: "ACP", + CONVERSATION_PANEL$PIN_CONVERSATION: "Pin conversation", + CONVERSATION_PANEL$UNPIN_CONVERSATION: "Unpin conversation", }; return translations[key] || key; }, @@ -799,4 +801,47 @@ describe("ConversationCard", () => { ).not.toBeInTheDocument(); }); }); + + it("calls onTogglePin when the pin button is clicked", async () => { + const onTogglePin = vi.fn(); + const user = userEvent.setup(); + + renderWithProviders( + , + ); + + const card = screen.getByTestId("conversation-card"); + await user.hover(card); + await user.click( + screen.getByTestId("conversation-pin-toggle-conversation-1"), + ); + expect(onTogglePin).toHaveBeenCalledTimes(1); + }); + + it("keeps the pin icon visible without hover when alwaysShowPinIcon is set", () => { + renderWithProviders( + , + ); + + expect( + screen.getByTestId("conversation-pin-toggle-conversation-1"), + ).toBeVisible(); + expect(screen.getByRole("time")).toBeInTheDocument(); + }); }); diff --git a/__tests__/components/features/conversation-panel/conversation-panel-filter-menu.test.tsx b/__tests__/components/features/conversation-panel/conversation-panel-filter-menu.test.tsx index ff71dd952..d2a389b83 100644 --- a/__tests__/components/features/conversation-panel/conversation-panel-filter-menu.test.tsx +++ b/__tests__/components/features/conversation-panel/conversation-panel-filter-menu.test.tsx @@ -32,6 +32,8 @@ function renderFilterMenu( toggleShowRepoBranchMetadata: vi.fn(), showLlmProfiles: false, toggleShowLlmProfiles: vi.fn(), + showHoverMetadata: false, + toggleShowHoverMetadata: vi.fn(), totalConversationsCount: 5, onRequestDeleteAll: vi.fn(), ...overrides, diff --git a/__tests__/components/features/conversation-panel/conversation-panel-list-helpers.test.ts b/__tests__/components/features/conversation-panel/conversation-panel-list-helpers.test.ts index d688fec63..3526f7a08 100644 --- a/__tests__/components/features/conversation-panel/conversation-panel-list-helpers.test.ts +++ b/__tests__/components/features/conversation-panel/conversation-panel-list-helpers.test.ts @@ -1,9 +1,12 @@ import { describe, expect, it } from "vitest"; import { + applyGroupFolderOrder, getGroupConversationPreview, groupConversations, GROUP_CONVERSATIONS_PREVIEW_LIMIT, parseConversationTimeMs, + moveGroupFolderOrder, + resolvePinnedConversations, sortConversationsByField, } from "#/components/features/conversation-panel/conversation-panel-list-helpers"; import type { AppConversation } from "#/api/conversation-service/agent-server-conversation-service.types"; @@ -252,6 +255,20 @@ describe("conversation-panel-list-helpers", () => { expect(GROUP_CONVERSATIONS_PREVIEW_LIMIT).toBe(5); }); + it("resolvePinnedConversations preserves pin order and drops missing ids", () => { + const conversations = [ + { ...base, id: "a", title: "A" }, + { ...base, id: "b", title: "B" }, + { ...base, id: "c", title: "C" }, + ] as AppConversation[]; + + expect( + resolvePinnedConversations(["c", "missing", "a"], conversations).map( + (conversation) => conversation.id, + ), + ).toEqual(["c", "a"]); + }); + it("groups local conversations by selected_workspace, collapsing per-conversation worktree paths", () => { // Two worktree-mode conversations launched against the same workspace must // end up in a single group keyed off the user-selected workspace, not split @@ -365,4 +382,36 @@ describe("conversation-panel-list-helpers", () => { }, }); }); + + it("applies a persisted folder order and moves folders via drag-and-drop", () => { + const groups = [ + { id: "ws:/workspace/alpha", label: "alpha" }, + { id: "ws:/workspace/beta", label: "beta" }, + { id: "ws:/workspace/gamma", label: "gamma" }, + ]; + + expect( + applyGroupFolderOrder(groups, [ + "ws:/workspace/gamma", + "ws:/workspace/alpha", + ]).map((group) => group.id), + ).toEqual([ + "ws:/workspace/gamma", + "ws:/workspace/alpha", + "ws:/workspace/beta", + ]); + + expect( + moveGroupFolderOrder( + ["ws:/workspace/gamma", "ws:/workspace/alpha"], + groups.map((group) => group.id), + "ws:/workspace/alpha", + "ws:/workspace/beta", + ), + ).toEqual([ + "ws:/workspace/gamma", + "ws:/workspace/beta", + "ws:/workspace/alpha", + ]); + }); }); diff --git a/__tests__/components/features/conversation-panel/conversation-panel.test.tsx b/__tests__/components/features/conversation-panel/conversation-panel.test.tsx index 283bc5f53..a7fef6733 100644 --- a/__tests__/components/features/conversation-panel/conversation-panel.test.tsx +++ b/__tests__/components/features/conversation-panel/conversation-panel.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, waitFor, within } from "@testing-library/react"; +import { act, fireEvent, render, screen, waitFor, within } from "@testing-library/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { I18nextProvider } from "react-i18next"; import i18n from "i18next"; @@ -18,6 +18,7 @@ import React from "react"; import { renderWithProviders } from "test-utils"; import { ConversationPanel } from "#/components/features/conversation-panel/conversation-panel"; import { useConversationPanelPreferencesStore } from "#/stores/conversation-panel-preferences-store"; +import { usePinnedConversationsStore } from "#/stores/pinned-conversations-store"; import AgentServerConversationService from "#/api/conversation-service/agent-server-conversation-service.api"; import { AppConversation } from "#/api/conversation-service/agent-server-conversation-service.types"; import { ExecutionStatus } from "#/types/agent-server/core"; @@ -109,6 +110,8 @@ describe("ConversationPanel", () => { beforeEach(() => { vi.clearAllMocks(); mockStopConversationMutate.mockClear(); + _mockConversationCounter = 0; + usePinnedConversationsStore.setState({ pinsByBackendId: {} }); // Setup default mock for searchConversations vi.spyOn( AgentServerConversationService, @@ -1719,4 +1722,182 @@ describe("ConversationPanel", () => { }); }); }); + + it("reorders grouped folders via drag and drop", async () => { + useConversationPanelPreferencesStore.setState({ + organizeMode: "grouped", + groupFolderOrder: [], + }); + + vi.spyOn( + AgentServerConversationService, + "searchConversations", + ).mockResolvedValue({ + items: [ + createMockConversation({ + id: "alpha-chat", + title: "Alpha Chat", + selected_workspace: "/workspace/alpha", + }), + createMockConversation({ + id: "beta-chat", + title: "Beta Chat", + selected_workspace: "/workspace/beta", + }), + ], + next_page_id: null, + }); + + renderConversationPanel(); + + const alphaFolder = await screen.findByTestId( + "thread-folder-ws--workspace-alpha", + ); + const betaFolder = screen.getByTestId("thread-folder-ws--workspace-beta"); + expect(alphaFolder.compareDocumentPosition(betaFolder)).toBe( + Node.DOCUMENT_POSITION_FOLLOWING, + ); + + const dragHandle = screen.getByTestId( + "thread-folder-drag-ws--workspace-alpha", + ); + const dataTransfer = { + effectAllowed: "move", + dropEffect: "move", + data: {} as Record, + setData(format: string, value: string) { + this.data[format] = value; + }, + getData(format: string) { + return this.data[format]; + }, + }; + fireEvent.dragStart(dragHandle, { dataTransfer }); + fireEvent.dragOver(betaFolder, { dataTransfer }); + fireEvent.drop(betaFolder, { dataTransfer }); + + const reorderedAlpha = screen.getByTestId( + "thread-folder-ws--workspace-alpha", + ); + const reorderedBeta = screen.getByTestId("thread-folder-ws--workspace-beta"); + expect(reorderedBeta.compareDocumentPosition(reorderedAlpha)).toBe( + Node.DOCUMENT_POSITION_FOLLOWING, + ); + expect( + useConversationPanelPreferencesStore.getState().groupFolderOrder, + ).toEqual(["ws:/workspace/beta", "ws:/workspace/alpha"]); + }); + + it("shows a pinned section above the conversations list when pins exist", async () => { + usePinnedConversationsStore + .getState() + .pinConversation("default-local", "2"); + + renderConversationPanel(); + + const pinnedSection = await screen.findByTestId( + "conversation-panel-pinned-section", + ); + expect( + within(pinnedSection).getByText("CONVERSATION_PANEL$PINNED"), + ).toBeInTheDocument(); + expect( + within(pinnedSection).getAllByTestId("conversation-card"), + ).toHaveLength(1); + expect( + within(pinnedSection).getByTestId("conversation-pin-toggle-2"), + ).toBeInTheDocument(); + }); + + it("renders pinned conversations only in the pinned section in chronological mode", async () => { + usePinnedConversationsStore + .getState() + .pinConversation("default-local", "2"); + + renderConversationPanel(); + + const pinnedSection = await screen.findByTestId( + "conversation-panel-pinned-section", + ); + expect(within(pinnedSection).getAllByTestId("conversation-card")).toHaveLength( + 1, + ); + expect(await screen.findAllByTestId("conversation-card")).toHaveLength(3); + expect(screen.getAllByText("Conversation 2")).toHaveLength(1); + }); + + it("renders pinned conversations only in the pinned section in grouped mode", async () => { + useConversationPanelPreferencesStore.setState({ organizeMode: "grouped" }); + usePinnedConversationsStore + .getState() + .pinConversation("default-local", "2"); + + renderConversationPanel(); + + const pinnedSection = await screen.findByTestId( + "conversation-panel-pinned-section", + ); + expect(within(pinnedSection).getAllByTestId("conversation-card")).toHaveLength( + 1, + ); + expect(await screen.findAllByTestId("conversation-card")).toHaveLength(3); + expect(screen.getAllByText("Conversation 2")).toHaveLength(1); + }); + + it("hides the pinned section after the last pin is removed", async () => { + usePinnedConversationsStore + .getState() + .pinConversation("default-local", "2"); + + const user = userEvent.setup(); + renderConversationPanel(); + + const pinnedSection = await screen.findByTestId( + "conversation-panel-pinned-section", + ); + const pinnedCard = within(pinnedSection).getByTestId("conversation-card"); + await user.hover(pinnedCard); + await user.click( + within(pinnedSection).getByTestId("conversation-pin-toggle-2"), + ); + + await waitFor(() => { + expect( + screen.queryByTestId("conversation-panel-pinned-section"), + ).not.toBeInTheDocument(); + }); + }); + + it("shows only five pinned conversations before a More control", async () => { + const manyConversations = Array.from({ length: 6 }, (_, index) => + createMockConversation({ + id: String(index + 1), + title: `Conversation ${index + 1}`, + }), + ); + vi.spyOn( + AgentServerConversationService, + "searchConversations", + ).mockResolvedValue({ + items: manyConversations, + next_page_id: null, + }); + for (const conversation of manyConversations) { + usePinnedConversationsStore + .getState() + .pinConversation("default-local", conversation.id); + } + + renderConversationPanel(); + + const pinnedSection = await screen.findByTestId( + "conversation-panel-pinned-section", + ); + expect( + within(pinnedSection).getAllByTestId("conversation-card"), + ).toHaveLength(5); + expect( + within(pinnedSection).getByTestId("conversation-panel-pinned-view-more"), + ).toHaveTextContent("CONVERSATION_PANEL$MORE"); + }); }); diff --git a/__tests__/stores/conversation-panel-preferences-store.test.ts b/__tests__/stores/conversation-panel-preferences-store.test.ts index a909f4d60..e33e25bc9 100644 --- a/__tests__/stores/conversation-panel-preferences-store.test.ts +++ b/__tests__/stores/conversation-panel-preferences-store.test.ts @@ -71,7 +71,9 @@ describe("conversation-panel-preferences store", () => { ); expect(Object.keys(persisted.state).sort()).toEqual([ "conversationSort", + "groupFolderOrder", "organizeMode", + "showHoverMetadata", "showLlmProfiles", "showOlderConversations", "showRepoBranchMetadata", diff --git a/__tests__/stores/pinned-conversations-store.test.ts b/__tests__/stores/pinned-conversations-store.test.ts new file mode 100644 index 000000000..d806e0d7a --- /dev/null +++ b/__tests__/stores/pinned-conversations-store.test.ts @@ -0,0 +1,77 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { usePinnedConversationsStore } from "#/stores/pinned-conversations-store"; + +const STORAGE_KEY = "pinned-conversations"; +const BACKEND_ID = "default-local"; + +describe("pinned-conversations store", () => { + beforeEach(() => { + window.localStorage.clear(); + usePinnedConversationsStore.setState({ pinsByBackendId: {} }); + }); + + it("pins a conversation at the front of the backend list", () => { + usePinnedConversationsStore + .getState() + .pinConversation(BACKEND_ID, "conversation-a"); + usePinnedConversationsStore + .getState() + .pinConversation(BACKEND_ID, "conversation-b"); + + expect( + usePinnedConversationsStore.getState().pinsByBackendId[BACKEND_ID], + ).toEqual(["conversation-b", "conversation-a"]); + }); + + it("does not duplicate pins for the same conversation", () => { + usePinnedConversationsStore + .getState() + .pinConversation(BACKEND_ID, "conversation-a"); + usePinnedConversationsStore + .getState() + .pinConversation(BACKEND_ID, "conversation-a"); + + expect( + usePinnedConversationsStore.getState().pinsByBackendId[BACKEND_ID], + ).toEqual(["conversation-a"]); + }); + + it("toggles pin state", () => { + usePinnedConversationsStore + .getState() + .togglePin(BACKEND_ID, "conversation-a"); + expect( + usePinnedConversationsStore.getState().pinsByBackendId[BACKEND_ID], + ).toEqual(["conversation-a"]); + + usePinnedConversationsStore + .getState() + .togglePin(BACKEND_ID, "conversation-a"); + expect( + usePinnedConversationsStore.getState().pinsByBackendId[BACKEND_ID], + ).toEqual([]); + }); + + it("prunes missing conversations and persists pin order", () => { + usePinnedConversationsStore + .getState() + .pinConversation(BACKEND_ID, "conversation-a"); + usePinnedConversationsStore + .getState() + .pinConversation(BACKEND_ID, "conversation-b"); + usePinnedConversationsStore + .getState() + .pruneMissingConversations(BACKEND_ID, ["conversation-b"]); + + expect( + usePinnedConversationsStore.getState().pinsByBackendId[BACKEND_ID], + ).toEqual(["conversation-b"]); + + const persisted = JSON.parse( + window.localStorage.getItem(STORAGE_KEY) ?? "{}", + ); + expect(persisted.state.pinsByBackendId[BACKEND_ID]).toEqual([ + "conversation-b", + ]); + }); +}); diff --git a/src/components/features/conversation-panel/conversation-card/conversation-card-header.tsx b/src/components/features/conversation-panel/conversation-card/conversation-card-header.tsx index eb1cf6739..111336796 100644 --- a/src/components/features/conversation-panel/conversation-card/conversation-card-header.tsx +++ b/src/components/features/conversation-panel/conversation-card/conversation-card-header.tsx @@ -27,6 +27,7 @@ export function ConversationCardHeader({
)} diff --git a/src/components/features/conversation-panel/conversation-card/conversation-card-preview.tsx b/src/components/features/conversation-panel/conversation-card/conversation-card-preview.tsx new file mode 100644 index 000000000..f033b7923 --- /dev/null +++ b/src/components/features/conversation-panel/conversation-card/conversation-card-preview.tsx @@ -0,0 +1,134 @@ +import type { ReactNode } from "react"; +import { Folder } from "lucide-react"; +import { FaBitbucket, FaGithub, FaGitlab } from "react-icons/fa6"; +import { FaCodeBranch } from "react-icons/fa"; +import type { IconType } from "react-icons/lib"; +import { useTranslation } from "react-i18next"; +import { I18nKey } from "#/i18n/declaration"; +import type { RepositorySelection } from "#/api/open-hands.types"; +import type { Provider } from "#/types/settings"; +import type { ExecutionStatus } from "#/types/agent-server/core/base/common"; +import type { SandboxStatus } from "#/api/conversation-service/agent-server-conversation-service.types"; +import AzureDevOpsLogo from "#/assets/branding/azure-devops-logo.svg?react"; +import { ConversationStatusDot } from "../conversation-status-dot"; + +interface ConversationCardPreviewProps { + title: string; + executionStatus?: ExecutionStatus | null; + sandboxStatus?: SandboxStatus | null; + selectedRepository: RepositorySelection | null; + workspaceWorkingDir?: string | null; + llmModel?: string | null; + createdAt?: string; +} + +const providerIcon: Partial> = { + bitbucket: FaBitbucket, + bitbucket_data_center: FaBitbucket, + github: FaGithub, + gitlab: FaGitlab, +}; + +interface PreviewRowProps { + label: string; + children: ReactNode; +} + +function PreviewRow({ label, children }: PreviewRowProps) { + return ( +
+ {label} + + {children} + +
+ ); +} + +export function ConversationCardPreview({ + title, + executionStatus, + sandboxStatus, + selectedRepository, + workspaceWorkingDir, + llmModel, + createdAt, +}: ConversationCardPreviewProps) { + const { t } = useTranslation("openhands"); + + const repository = selectedRepository?.selected_repository ?? null; + const branch = selectedRepository?.selected_branch ?? null; + const provider = selectedRepository?.git_provider ?? null; + const ProviderIcon = provider ? providerIcon[provider] : null; + + const createdLabel = createdAt + ? new Date(createdAt).toLocaleString(undefined, { + dateStyle: "medium", + timeStyle: "short", + }) + : null; + + return ( +
+
+ {executionStatus !== undefined ? ( +
+ +
+ ) : null} + + {title} + +
+ +
+ {repository ? ( + <> + + + {ProviderIcon ? ( + + ) : null} + {provider === "azure_devops" ? ( + + ) : null} + {repository} + + + {branch ? ( + + + + {branch} + + + ) : null} + + ) : workspaceWorkingDir ? ( + + + + {workspaceWorkingDir} + + + ) : null} + + {llmModel ? ( + + {llmModel} + + ) : null} + + {createdLabel ? ( + + {createdLabel} + + ) : null} +
+
+ ); +} diff --git a/src/components/features/conversation-panel/conversation-card/conversation-card-title.tsx b/src/components/features/conversation-panel/conversation-card/conversation-card-title.tsx index 901c93ab5..eaa2d8948 100644 --- a/src/components/features/conversation-panel/conversation-card/conversation-card-title.tsx +++ b/src/components/features/conversation-panel/conversation-card/conversation-card-title.tsx @@ -52,7 +52,6 @@ export function ConversationCardTitle({ "text-xs leading-6 font-semibold bg-transparent truncate overflow-hidden", isConversationArchived && "opacity-60", )} - title={title} > {title}

diff --git a/src/components/features/conversation-panel/conversation-card/conversation-card.tsx b/src/components/features/conversation-panel/conversation-card/conversation-card.tsx index 3dc84d874..13499b978 100644 --- a/src/components/features/conversation-panel/conversation-card/conversation-card.tsx +++ b/src/components/features/conversation-panel/conversation-card/conversation-card.tsx @@ -1,6 +1,9 @@ import React from "react"; +import { Pin } from "lucide-react"; +import { useTranslation } from "react-i18next"; import { useTracking } from "#/hooks/use-tracking"; import { cn } from "#/utils/utils"; +import { I18nKey } from "#/i18n/declaration"; import { transformVSCodeUrl } from "#/utils/vscode-url-helper"; import ConversationService from "#/api/conversation-service/conversation-service.api"; import { ExecutionStatus } from "#/types/agent-server/core/base/common"; @@ -35,6 +38,10 @@ interface ConversationCardProps { showLlmProfiles?: boolean; agentKind?: "openhands" | "acp" | null; acpServer?: string | null; + isPinned?: boolean; + onTogglePin?: () => void; + /** When true and pinned, keep the pin icon visible without hovering. */ + alwaysShowPinIcon?: boolean; } export function ConversationCard({ @@ -59,7 +66,11 @@ export function ConversationCard({ showLlmProfiles = false, agentKind = null, acpServer = null, + isPinned = false, + onTogglePin, + alwaysShowPinIcon = false, }: ConversationCardProps) { + const { t } = useTranslation("openhands"); const { trackDownloadVsCodeButtonClicked } = useTracking(); const [titleMode, setTitleMode] = React.useState<"view" | "edit">("view"); const { mutateAsync: downloadConversation } = useDownloadConversation(); @@ -130,7 +141,42 @@ export function ConversationCard({ onContextMenuToggle?.(false); }; + const handleTogglePin = (event: React.MouseEvent) => { + event.preventDefault(); + event.stopPropagation(); + onTogglePin?.(); + }; + + const renderPinButton = () => ( + + ); + const hasContextMenu = !!(onDelete || onChangeTitle || showOptions); + const hasHoverActions = hasContextMenu || !!onTogglePin; + const showPersistentPinIcon = alwaysShowPinIcon && isPinned && !!onTogglePin; const shouldRenderFooter = showRepositoryMetadata || (showLlmProfiles && (agentKind === "acp" || !!llmModel)); @@ -143,8 +189,8 @@ export function ConversationCard({ onClick={onClick} className={cn( "group relative h-auto w-full cursor-pointer rounded-md py-1 pl-2 pr-1 transition-colors", - "data-[context-menu-open=false]:hover:bg-[var(--oh-surface)]", - "data-[active=true]:bg-[var(--oh-surface)]", + !contextMenuOpen && "hover:bg-[var(--oh-surface)]", + (isActive || contextMenuOpen) && "bg-[var(--oh-surface)]", )} >
@@ -159,12 +205,25 @@ export function ConversationCard({ {sandboxStatus === "ERROR" && }
-
- {(createdAt ?? lastUpdatedAt) && ( +
+ {!showPersistentPinIcon && (createdAt ?? lastUpdatedAt) && (

)} - {hasContextMenu && ( + {hasHoverActions ? (

- {})} - onDelete={onDelete && handleDelete} - onStop={onStop && handleStop} - onEdit={onChangeTitle && handleEdit} - onDownloadViaVSCode={handleDownloadViaVSCode} - onDownloadConversation={handleDownloadConversation} - executionStatus={executionStatus} - conversationId={conversationId} - showOptions={showOptions} - /> + {onTogglePin ? renderPinButton() : null} + {showPersistentPinIcon && + (createdAt ?? lastUpdatedAt) && + hasContextMenu ? ( +
+
+ {})} + onDelete={onDelete && handleDelete} + onStop={onStop && handleStop} + onEdit={onChangeTitle && handleEdit} + onDownloadViaVSCode={handleDownloadViaVSCode} + onDownloadConversation={handleDownloadConversation} + executionStatus={executionStatus} + conversationId={conversationId} + showOptions={showOptions} + /> +
+

+ +

+
+ ) : null} + {!showPersistentPinIcon && hasContextMenu ? ( + {})} + onDelete={onDelete && handleDelete} + onStop={onStop && handleStop} + onEdit={onChangeTitle && handleEdit} + onDownloadViaVSCode={handleDownloadViaVSCode} + onDownloadConversation={handleDownloadConversation} + executionStatus={executionStatus} + conversationId={conversationId} + showOptions={showOptions} + /> + ) : null}
- )} + ) : null}
diff --git a/src/components/features/conversation-panel/conversation-group-folder-list.tsx b/src/components/features/conversation-panel/conversation-group-folder-list.tsx new file mode 100644 index 000000000..e71549b4f --- /dev/null +++ b/src/components/features/conversation-panel/conversation-group-folder-list.tsx @@ -0,0 +1,188 @@ +import { + useCallback, + useEffect, + useRef, + useState, + type DragEvent, + type ReactNode, +} from "react"; +import { useTranslation } from "react-i18next"; +import type { AppConversation } from "#/api/conversation-service/agent-server-conversation-service.types"; +import { I18nKey } from "#/i18n/declaration"; +import { ConversationGroupFolderRow } from "./conversation-group-folder-row"; +import { + moveGroupFolderOrder, + type ConversationGroupLaunch, + type GroupFolderDropPosition, +} from "./conversation-panel-list-helpers"; + +interface ConversationGroup { + id: string; + label: string; + conversations: AppConversation[]; + launch: ConversationGroupLaunch; +} + +interface ConversationGroupFolderListProps { + groups: ConversationGroup[]; + groupIds: readonly string[]; + groupFolderOrder: readonly string[]; + setGroupFolderOrder: (order: readonly string[]) => void; + collapsedGroupIds: ReadonlySet; + expandedGroupPreviewIds: ReadonlySet; + onToggleGroupCollapsed: (groupId: string) => void; + onToggleGroupPreviewExpanded: (groupId: string) => void; + isCreatingConversationFlow: boolean; + activeConversationId?: string | null; + onLaunchFromGroup: (launch: ConversationGroupLaunch) => void; + renderConversationCard: (conversation: AppConversation) => ReactNode; +} + +export function ConversationGroupFolderList({ + groups, + groupIds, + groupFolderOrder, + setGroupFolderOrder, + collapsedGroupIds, + expandedGroupPreviewIds, + onToggleGroupCollapsed, + onToggleGroupPreviewExpanded, + isCreatingConversationFlow, + activeConversationId, + onLaunchFromGroup, + renderConversationCard, +}: ConversationGroupFolderListProps) { + const { t } = useTranslation("openhands"); + const [draggedGroupId, setDraggedGroupId] = useState(null); + const [dropTargetGroupId, setDropTargetGroupId] = useState( + null, + ); + const [dropPosition, setDropPosition] = + useState(null); + // Layout animation is only enabled around a drag-and-drop reorder so that + // expand/collapse clicks don't trigger sibling repositioning animations. + const [animateLayout, setAnimateLayout] = useState(false); + const animateLayoutTimeoutRef = useRef | null>( + null, + ); + + useEffect( + () => () => { + if (animateLayoutTimeoutRef.current) { + clearTimeout(animateLayoutTimeoutRef.current); + } + }, + [], + ); + + const stopAnimatingLayoutSoon = useCallback(() => { + if (animateLayoutTimeoutRef.current) { + clearTimeout(animateLayoutTimeoutRef.current); + } + animateLayoutTimeoutRef.current = setTimeout(() => { + setAnimateLayout(false); + animateLayoutTimeoutRef.current = null; + }, 300); + }, []); + + const resetDragState = useCallback(() => { + setDraggedGroupId(null); + setDropTargetGroupId(null); + setDropPosition(null); + }, []); + + const computeDropPosition = useCallback( + (event: DragEvent): GroupFolderDropPosition => { + const rect = event.currentTarget.getBoundingClientRect(); + return event.clientY < rect.top + rect.height / 2 ? "before" : "after"; + }, + [], + ); + + const handleDrop = useCallback( + (targetGroupId: string, position: GroupFolderDropPosition) => { + if (!draggedGroupId || draggedGroupId === targetGroupId) { + resetDragState(); + stopAnimatingLayoutSoon(); + return; + } + + setGroupFolderOrder( + moveGroupFolderOrder( + groupFolderOrder, + groupIds, + draggedGroupId, + targetGroupId, + position, + ), + ); + resetDragState(); + // Keep layout animation active across the reorder render, then disable + // it once the spring settles. + stopAnimatingLayoutSoon(); + }, + [ + draggedGroupId, + groupFolderOrder, + groupIds, + resetDragState, + setGroupFolderOrder, + stopAnimatingLayoutSoon, + ], + ); + + return ( + + ); +} diff --git a/src/components/features/conversation-panel/conversation-group-folder-row.tsx b/src/components/features/conversation-panel/conversation-group-folder-row.tsx new file mode 100644 index 000000000..edff1e42b --- /dev/null +++ b/src/components/features/conversation-panel/conversation-group-folder-row.tsx @@ -0,0 +1,239 @@ +import { motion } from "framer-motion"; +import { Folder, FolderOpen, Plus } from "lucide-react"; +import { useRef, type DragEvent, type ReactNode } from "react"; +import { useTranslation } from "react-i18next"; +import type { AppConversation } from "#/api/conversation-service/agent-server-conversation-service.types"; +import { I18nKey } from "#/i18n/declaration"; +import { cn } from "#/utils/utils"; +import type { + ConversationGroupLaunch, + GroupFolderDropPosition, +} from "./conversation-panel-list-helpers"; +import { getGroupConversationPreview } from "./conversation-panel-list-helpers"; + +interface ConversationGroup { + id: string; + label: string; + conversations: AppConversation[]; + launch: ConversationGroupLaunch; +} + +interface ConversationGroupFolderRowProps { + group: ConversationGroup; + expanded: boolean; + previewExpanded: boolean; + isDragging: boolean; + dropIndicatorPosition: GroupFolderDropPosition | null; + animateLayout: boolean; + isCreatingConversationFlow: boolean; + activeConversationId?: string | null; + onToggleExpanded: () => void; + onDragStart: () => void; + onDragEnd: () => void; + onDragOver: (event: DragEvent) => void; + onDragLeave: () => void; + onDrop: (event: DragEvent) => void; + onTogglePreviewExpanded: () => void; + onLaunchFromGroup: () => void; + renderConversationCard: (conversation: AppConversation) => ReactNode; +} + +export function ConversationGroupFolderRow({ + group, + expanded, + previewExpanded, + isDragging, + dropIndicatorPosition, + animateLayout, + isCreatingConversationFlow, + activeConversationId, + onToggleExpanded, + onDragStart, + onDragEnd, + onDragOver, + onDragLeave, + onDrop, + onTogglePreviewExpanded, + onLaunchFromGroup, + renderConversationCard, +}: ConversationGroupFolderRowProps) { + const { t } = useTranslation("openhands"); + const sectionRef = useRef(null); + const headingId = `thread-folder-${group.id.replace(/[^a-zA-Z0-9_-]/g, "-")}`; + const groupTestIdSuffix = group.id.replace(/[^a-zA-Z0-9_-]/g, "-"); + const { visibleConversations, isPreviewTruncated, isShowingAll } = + getGroupConversationPreview(group.conversations, { + expanded: previewExpanded, + activeConversationId, + }); + + return ( + + {dropIndicatorPosition ? ( +
+ ) : null} + {/* Keep the row's footprint (height) while dragging but hide its + content so the original slot reads as an empty placeholder. Use + opacity (not visibility/display) because hiding the drag source + synchronously during dragstart cancels the native drag in Chrome. */} +
+
+ + +
+ {expanded ? ( +
+ {visibleConversations.map(renderConversationCard)} + {isPreviewTruncated ? ( +
+ +
+ ) : null} +
+ ) : null} +
+ + ); +} diff --git a/src/components/features/conversation-panel/conversation-panel-filter-menu.tsx b/src/components/features/conversation-panel/conversation-panel-filter-menu.tsx index 7d45a8978..208a13717 100644 --- a/src/components/features/conversation-panel/conversation-panel-filter-menu.tsx +++ b/src/components/features/conversation-panel/conversation-panel-filter-menu.tsx @@ -11,6 +11,7 @@ import { GitBranch, ListFilter, MessageCircle, + MousePointerClick, Star, Trash2, } from "lucide-react"; @@ -51,6 +52,8 @@ export interface ConversationPanelFilterMenuProps { toggleShowRepoBranchMetadata: () => void; showLlmProfiles: boolean; toggleShowLlmProfiles: () => void; + showHoverMetadata: boolean; + toggleShowHoverMetadata: () => void; totalConversationsCount: number; onRequestDeleteAll: () => void; } @@ -72,6 +75,8 @@ export function ConversationPanelFilterMenu({ toggleShowRepoBranchMetadata, showLlmProfiles, toggleShowLlmProfiles, + showHoverMetadata, + toggleShowHoverMetadata, totalConversationsCount, onRequestDeleteAll, }: ConversationPanelFilterMenuProps) { @@ -261,6 +266,16 @@ export function ConversationPanelFilterMenu({ setFilterMenuOpen(false); }} /> + { + toggleShowHoverMetadata(); + setFilterMenuOpen(false); + }} + /> [conversation.id, conversation]), + ); + return pinnedIds + .map((id) => byId.get(id)) + .filter( + (conversation): conversation is AppConversation => conversation != null, + ); +} + +export function filterOutPinnedConversations( + conversations: readonly AppConversation[], + pinnedIds: readonly string[], +): AppConversation[] { + if (pinnedIds.length === 0) { + return [...conversations]; + } + + const pinnedSet = new Set(pinnedIds); + return conversations.filter( + (conversation) => !pinnedSet.has(conversation.id), + ); +} + /** Subset of `useCreateConversation` variables for launching from a group row */ export type ConversationGroupLaunch = { workingDir?: string; @@ -222,3 +250,64 @@ export function groupConversations( groups.sort((a, b) => groupOrderKey(b) - groupOrderKey(a)); return groups; } + +export function applyGroupFolderOrder( + groups: readonly T[], + order: readonly string[], +): T[] { + if (order.length === 0) { + return [...groups]; + } + + const byId = new Map(groups.map((group) => [group.id, group])); + const ordered: T[] = []; + const seen = new Set(); + + for (const id of order) { + const group = byId.get(id); + if (group) { + ordered.push(group); + seen.add(id); + } + } + + for (const group of groups) { + if (!seen.has(group.id)) { + ordered.push(group); + } + } + + return ordered; +} + +export type GroupFolderDropPosition = "before" | "after"; + +export function moveGroupFolderOrder( + order: readonly string[], + groupIds: readonly string[], + activeGroupId: string, + targetGroupId: string, + position: GroupFolderDropPosition = "after", +): string[] { + if (activeGroupId === targetGroupId) { + return [...order]; + } + + const effectiveOrder = applyGroupFolderOrder( + groupIds.map((id) => ({ id })), + order, + ).map((group) => group.id); + const fromIndex = effectiveOrder.indexOf(activeGroupId); + const toIndex = effectiveOrder.indexOf(targetGroupId); + if (fromIndex < 0 || toIndex < 0) { + return [...order]; + } + + const nextOrder = [...effectiveOrder]; + nextOrder.splice(fromIndex, 1); + const adjustedTargetIndex = nextOrder.indexOf(targetGroupId); + const insertIndex = + position === "before" ? adjustedTargetIndex : adjustedTargetIndex + 1; + nextOrder.splice(insertIndex, 0, activeGroupId); + return nextOrder; +} diff --git a/src/components/features/conversation-panel/conversation-panel-pinned-section.tsx b/src/components/features/conversation-panel/conversation-panel-pinned-section.tsx new file mode 100644 index 000000000..fac830269 --- /dev/null +++ b/src/components/features/conversation-panel/conversation-panel-pinned-section.tsx @@ -0,0 +1,71 @@ +import React from "react"; +import { Pin } from "lucide-react"; +import { useTranslation } from "react-i18next"; +import { I18nKey } from "#/i18n/declaration"; +import type { AppConversation } from "#/api/conversation-service/agent-server-conversation-service.types"; +import { cn } from "#/utils/utils"; +import { + getGroupConversationPreview, + GROUP_CONVERSATIONS_PREVIEW_LIMIT, +} from "./conversation-panel-list-helpers"; + +interface ConversationPanelPinnedSectionProps { + pinnedConversations: readonly AppConversation[]; + isPreviewExpanded: boolean; + onTogglePreviewExpanded: () => void; + activeConversationId: string | null; + showDivider?: boolean; + renderConversationCard: (conversation: AppConversation) => React.ReactNode; +} + +export function ConversationPanelPinnedSection({ + pinnedConversations, + isPreviewExpanded, + onTogglePreviewExpanded, + activeConversationId, + showDivider = false, + renderConversationCard, +}: ConversationPanelPinnedSectionProps) { + const { t } = useTranslation("openhands"); + + const { visibleConversations, isPreviewTruncated, isShowingAll } = + getGroupConversationPreview(pinnedConversations, { + limit: GROUP_CONVERSATIONS_PREVIEW_LIMIT, + expanded: isPreviewExpanded, + activeConversationId, + }); + + return ( +
+

+ + {t(I18nKey.CONVERSATION_PANEL$PINNED)} +

+
+ {visibleConversations.map(renderConversationCard)} +
+ {isPreviewTruncated ? ( +
+ +
+ ) : null} +
+ ); +} diff --git a/src/components/features/conversation-panel/conversation-panel.tsx b/src/components/features/conversation-panel/conversation-panel.tsx index 38d5c3dbd..a2b407f1e 100644 --- a/src/components/features/conversation-panel/conversation-panel.tsx +++ b/src/components/features/conversation-panel/conversation-panel.tsx @@ -1,6 +1,6 @@ import React from "react"; +import { Tooltip } from "@heroui/react"; import { useTranslation } from "react-i18next"; -import { Folder, Plus } from "lucide-react"; import { I18nKey } from "#/i18n/declaration"; import { useNavigation } from "#/context/navigation-context"; import { useActiveBackend } from "#/contexts/active-backend-context"; @@ -10,7 +10,6 @@ import { useDeleteConversation } from "#/hooks/mutation/use-delete-conversation" import { useUnifiedPauseConversation } from "#/hooks/mutation/use-unified-stop-conversation"; import { ConfirmDeleteModal } from "./confirm-delete-modal"; import { ConfirmStopModal } from "./confirm-stop-modal"; -import { LoadingSpinner } from "#/components/shared/loading-spinner"; import { NavigationLink } from "#/components/shared/navigation-link"; import { ExitConversationModal } from "./exit-conversation-modal"; import { useClickOutsideElement } from "#/hooks/use-click-outside-element"; @@ -24,6 +23,7 @@ import { isExecutionActive } from "#/utils/status"; import { useCreateConversation } from "#/hooks/mutation/use-create-conversation"; import { useIsCreatingConversation } from "#/hooks/use-is-creating-conversation"; import { ConversationCard } from "./conversation-card/conversation-card"; +import { ConversationCardPreview } from "./conversation-card/conversation-card-preview"; import { StartTaskCard } from "./start-task-card/start-task-card"; import { ConversationCardSkeleton } from "./conversation-card/conversation-card-skeleton"; import { CompactConversationRow } from "./compact-conversation-row"; @@ -31,12 +31,17 @@ import { useConversationPanelPreferencesStore } from "#/stores/conversation-pane import { cn } from "#/utils/utils"; import { ConversationPanelFilterMenu } from "./conversation-panel-filter-menu"; import { ConversationPanelNewThreadPicker } from "./conversation-panel-new-thread-picker"; +import { ConversationGroupFolderList } from "./conversation-group-folder-list"; +import { ConversationPanelPinnedSection } from "./conversation-panel-pinned-section"; import { + applyGroupFolderOrder, + filterOutPinnedConversations, groupConversations, - getGroupConversationPreview, + resolvePinnedConversations, sortConversationsByField, type ConversationGroupLaunch, } from "./conversation-panel-list-helpers"; +import { usePinnedConversationsStore } from "#/stores/pinned-conversations-store"; interface ConversationPanelProps { onClose?: () => void; @@ -50,6 +55,8 @@ interface ConversationPanelProps { const noop = () => {}; +const EMPTY_PINNED_CONVERSATION_IDS: readonly string[] = []; + const ONE_HOUR_MS = 60 * 60 * 1000; const partitionByCutoff = ( @@ -115,6 +122,12 @@ export function ConversationPanel({ const toggleShowLlmProfiles = useConversationPanelPreferencesStore( (state) => state.toggleShowLlmProfiles, ); + const showHoverMetadata = useConversationPanelPreferencesStore( + (state) => state.showHoverMetadata, + ); + const toggleShowHoverMetadata = useConversationPanelPreferencesStore( + (state) => state.toggleShowHoverMetadata, + ); const organizeMode = useConversationPanelPreferencesStore( (state) => state.organizeMode, ); @@ -133,6 +146,12 @@ export function ConversationPanel({ const setThreadScope = useConversationPanelPreferencesStore( (state) => state.setThreadScope, ); + const groupFolderOrder = useConversationPanelPreferencesStore( + (state) => state.groupFolderOrder, + ); + const setGroupFolderOrder = useConversationPanelPreferencesStore( + (state) => state.setGroupFolderOrder, + ); const [filterMenuOpen, setFilterMenuOpen] = React.useState(false); const [isListScrolled, setIsListScrolled] = React.useState(false); const filterMenuRef = useClickOutsideElement(() => { @@ -144,6 +163,17 @@ export function ConversationPanel({ const [expandedGroupPreviewIds, setExpandedGroupPreviewIds] = React.useState< ReadonlySet >(() => new Set()); + const [expandedPinnedPreview, setExpandedPinnedPreview] = + React.useState(false); + + const pinnedIds = usePinnedConversationsStore( + (state) => + state.pinsByBackendId[activeBackend.id] ?? EMPTY_PINNED_CONVERSATION_IDS, + ); + const togglePin = usePinnedConversationsStore((state) => state.togglePin); + const pruneMissingPinnedConversations = usePinnedConversationsStore( + (state) => state.pruneMissingConversations, + ); const toggleGroupCollapsed = React.useCallback((groupId: string) => { setCollapsedGroupIds((prev) => { @@ -192,6 +222,7 @@ export function ConversationPanel({ isLoading, isFetched, hasNextPage, + isFetching, isFetchingNextPage, fetchNextPage, } = usePaginatedConversations(); @@ -199,17 +230,63 @@ export function ConversationPanel({ // Fetch in-progress start tasks const { data: startTasks } = useStartTasks(); - const conversations = React.useMemo( - () => data?.pages.flatMap((page) => page.items) ?? [], - [data], + const conversations = React.useMemo(() => { + const all = data?.pages.flatMap((page) => page.items) ?? []; + // The 10s background refetch re-fetches every loaded page with the + // `UPDATED_AT_DESC` cursor. If a conversation's `updated_at` shifts between + // page fetches, a later page can overlap an earlier one and surface the + // same conversation twice. Dedupe by id (keeping the first/freshest copy) + // so the rendered count reflects real growth and React keys stay unique. + const seen = new Set(); + return all.filter((conversation) => { + if (seen.has(conversation.id)) { + return false; + } + seen.add(conversation.id); + return true; + }); + }, [data]); + + const pinnedConversations = React.useMemo( + () => resolvePinnedConversations(pinnedIds, conversations), + [conversations, pinnedIds], ); + React.useEffect(() => { + if (!isFetched) { + return; + } + pruneMissingPinnedConversations( + activeBackend.id, + conversations.map((conversation) => conversation.id), + ); + }, [ + activeBackend.id, + conversations, + isFetched, + pruneMissingPinnedConversations, + ]); + + React.useEffect(() => { + if (pinnedIds.length === 0) { + setExpandedPinnedPreview(false); + } + }, [pinnedIds.length]); + const scopedConversations = React.useMemo(() => { - if (threadScope === "relevant") { - return conversations.filter((c) => isExecutionActive(c.execution_status)); + const scopeFiltered = + threadScope === "relevant" + ? conversations.filter((c) => isExecutionActive(c.execution_status)) + : conversations; + + // In the expanded panel, pinned conversations should only appear inside + // the dedicated pinned section (not duplicated in grouped/flat lists). + if (compact) { + return scopeFiltered; } - return conversations; - }, [conversations, threadScope]); + + return filterOutPinnedConversations(scopeFiltered, pinnedIds); + }, [compact, conversations, pinnedIds, threadScope]); const { recent: recentScoped, older: olderScoped } = React.useMemo( () => partitionByCutoff(scopedConversations), @@ -265,6 +342,18 @@ export function ConversationPanel({ showOlderConversations, ]); + const orderedConversationGroups = React.useMemo(() => { + if (!conversationGroups) { + return null; + } + return applyGroupFolderOrder(conversationGroups, groupFolderOrder); + }, [conversationGroups, groupFolderOrder]); + + const conversationGroupIds = React.useMemo( + () => conversationGroups?.map((group) => group.id) ?? [], + [conversationGroups], + ); + const compactVisibleConversations = React.useMemo( () => sortConversationsByField( @@ -279,17 +368,87 @@ export function ConversationPanel({ const visibleFlatCount = sortedVisibleConversations.length; const visibleGroupedCount = React.useMemo(() => { - if (!conversationGroups) { + if (!orderedConversationGroups) { return 0; } - return conversationGroups.reduce((n, g) => n + g.conversations.length, 0); - }, [conversationGroups]); + return orderedConversationGroups.reduce( + (n, g) => n + g.conversations.length, + 0, + ); + }, [orderedConversationGroups]); const listIsEffectivelyEmpty = organizeMode === "grouped" && !compact ? visibleGroupedCount === 0 : visibleFlatCount === 0; + // Number of conversations actually rendered in the list right now, in the + // current organize mode. "Load more" succeeds only when this number grows. + const visibleCount = + organizeMode === "grouped" && !compact + ? visibleGroupedCount + : visibleFlatCount; + + // KNOWN ISSUE (unresolved as of 2026-05-29): users still report that the + // sidebar "Load more" sometimes requires two clicks before new conversations + // appear. The mitigation below (dedupe by id in `conversations`, plus the + // floor-tracking driver that keeps fetching until the visible count grows) + // reduced but did NOT fully eliminate the symptom in manual testing. Likely + // remaining suspects to investigate next: the agent-server cursor pagination + // returning an overlapping/short page under `UPDATED_AT_DESC` while the 10s + // `refetchInterval` reorders pages (see `usePaginatedConversations`), or a + // React Query state lag where `hasNextPage`/`isFetching` settle a render + // after the click. If you pick this up, reproduce against a backend with + // >40 conversations and watch the `/api/conversations/search` cursors. + // + // Robust "Load more" driver. A single click can fail to surface new rows for + // two reasons: (1) `fetchNextPage()` is silently dropped while the 10s + // background refetch is in flight, and (2) a fetched page can yield zero + // *visible* rows (filtered out by the active scope, or deduped as overlap), + // so the list does not appear to grow. We capture the visible count at click + // time and keep fetching pages — once the query is idle — until the visible + // count actually increases or there are no more pages. + const [loadMoreFloor, setLoadMoreFloor] = React.useState(null); + const visibleCountRef = React.useRef(visibleCount); + visibleCountRef.current = visibleCount; + + const requestLoadMore = React.useCallback(() => { + if (hasNextPage) { + setLoadMoreFloor(visibleCountRef.current); + } + }, [hasNextPage]); + + React.useEffect(() => { + if (loadMoreFloor === null) { + return; + } + // Goal met: the visible list grew past where it was when the user clicked. + if (visibleCount > loadMoreFloor) { + setLoadMoreFloor(null); + return; + } + // Nothing more to fetch — stop waiting even if the list did not grow. + if (!hasNextPage) { + setLoadMoreFloor(null); + return; + } + // Wait for any in-flight fetch (including the background refetch) to settle + // before requesting the next page, otherwise the request is dropped. + if (isFetching || isFetchingNextPage) { + return; + } + fetchNextPage(); + }, [ + loadMoreFloor, + visibleCount, + hasNextPage, + isFetching, + isFetchingNextPage, + fetchNextPage, + ]); + + const isLoadingMore = loadMoreFloor !== null || isFetchingNextPage; + const { mutate: deleteConversation, mutateAsync: deleteConversationAsync } = useDeleteConversation(); const { mutate: pauseConversation } = useUnifiedPauseConversation(); @@ -407,7 +566,11 @@ export function ConversationPanel({ }; const renderConversationCard = React.useCallback( - (conversation: (typeof conversations)[number]) => { + ( + conversation: (typeof conversations)[number], + options?: { inPinnedSection?: boolean }, + ) => { + const isPinned = pinnedIds.includes(conversation.id); if (compact) { return ( + } > - - handleDeleteProject(conversation.id, conversation.title ?? "") - } - onStop={() => handleStopConversation(conversation.id)} - onChangeTitle={(title) => - handleConversationTitleChange(conversation.id, title) - } - title={conversation.title ?? ""} - selectedRepository={{ - selected_repository: conversation.selected_repository, - selected_branch: conversation.selected_branch, - git_provider: conversation.git_provider as Provider, - }} - lastUpdatedAt={conversation.updated_at} - createdAt={conversation.created_at} - executionStatus={conversation.execution_status} - sandboxStatus={conversation.sandbox_status} - conversationId={conversation.id} - contextMenuOpen={openContextMenuId === conversation.id} - onContextMenuToggle={(isOpen) => - setOpenContextMenuId(isOpen ? conversation.id : null) - } - isActive={conversation.id === currentConversationId} - workspaceWorkingDir={ - conversation.selected_workspace ?? - conversation.workspace?.working_dir - } - showRepositoryMetadata={showRepoBranchMetadata} - llmModel={conversation.llm_model} - showLlmProfiles={showLlmProfiles} - agentKind={conversation.agent_kind} - acpServer={conversation.acp_server} - /> - + + + handleDeleteProject(conversation.id, conversation.title ?? "") + } + onStop={() => handleStopConversation(conversation.id)} + onChangeTitle={(title) => + handleConversationTitleChange(conversation.id, title) + } + title={conversation.title ?? ""} + selectedRepository={{ + selected_repository: conversation.selected_repository, + selected_branch: conversation.selected_branch, + git_provider: conversation.git_provider as Provider, + }} + lastUpdatedAt={conversation.updated_at} + createdAt={conversation.created_at} + executionStatus={conversation.execution_status} + sandboxStatus={conversation.sandbox_status} + conversationId={conversation.id} + contextMenuOpen={openContextMenuId === conversation.id} + onContextMenuToggle={(isOpen) => + setOpenContextMenuId(isOpen ? conversation.id : null) + } + isActive={conversation.id === currentConversationId} + workspaceWorkingDir={ + conversation.selected_workspace ?? + conversation.workspace?.working_dir + } + showRepositoryMetadata={showRepoBranchMetadata} + llmModel={conversation.llm_model} + showLlmProfiles={showLlmProfiles} + agentKind={conversation.agent_kind} + acpServer={conversation.acp_server} + isPinned={isPinned} + onTogglePin={() => togglePin(activeBackend.id, conversation.id)} + alwaysShowPinIcon={isPinned && !options?.inPinnedSection} + /> + + ); }, [ + activeBackend.id, compact, currentConversationId, handleConversationTitleChange, @@ -489,8 +692,11 @@ export function ConversationPanel({ handleStopConversation, onClose, openContextMenuId, + pinnedIds, showRepoBranchMetadata, showLlmProfiles, + showHoverMetadata, + togglePin, ], ); @@ -502,11 +708,14 @@ export function ConversationPanel({ // not `isFetching` — the latter flips back to true on every 10s background // refetch, causing the skeleton/empty-state to flicker when the list is empty. const showInitialSkeleton = isLoading || !isFetched; + const showPinnedSection = + !compact && !showInitialSkeleton && pinnedConversations.length > 0; const showEmptyState = isFetched && !isLoading && !compact && listIsEffectivelyEmpty && + !showPinnedSection && !startTasks?.length; const showConversationHeader = !compact; @@ -554,6 +763,8 @@ export function ConversationPanel({ toggleShowRepoBranchMetadata={toggleShowRepoBranchMetadata} showLlmProfiles={showLlmProfiles} toggleShowLlmProfiles={toggleShowLlmProfiles} + showHoverMetadata={showHoverMetadata} + toggleShowHoverMetadata={toggleShowHoverMetadata} totalConversationsCount={conversations.length} onRequestDeleteAll={() => setConfirmDeleteAllVisible(true)} /> @@ -586,6 +797,21 @@ export function ConversationPanel({
)} + {showPinnedSection ? ( + + setExpandedPinnedPreview((current) => !current) + } + activeConversationId={currentConversationId} + showDivider={!compact && organizeMode === "chronological"} + renderConversationCard={(conversation) => + renderConversationCard(conversation, { inPinnedSection: true }) + } + /> + ) : null} + {/* Render in-progress start tasks first (skipped in compact mode — their rich card layout doesn't fit in the icon rail). */} {!compact && @@ -601,108 +827,41 @@ export function ConversationPanel({ ))} {!showInitialSkeleton && compact - ? compactVisibleConversations.map(renderConversationCard) + ? compactVisibleConversations.map((conversation) => + renderConversationCard(conversation), + ) : null} {!showInitialSkeleton && !compact && organizeMode === "grouped" && - conversationGroups && - conversationGroups.length > 0 ? ( - + orderedConversationGroups && + orderedConversationGroups.length > 0 ? ( + + renderConversationCard(conversation) + } + /> ) : null} {!showInitialSkeleton && !compact && organizeMode === "chronological" ? (
- {sortedVisibleConversations.map(renderConversationCard)} + {sortedVisibleConversations.map((conversation) => + renderConversationCard(conversation), + )}
) : null} @@ -710,22 +869,23 @@ export function ConversationPanel({ *and* the older list is currently visible (or there are no older conversations to begin with) — otherwise the next page would be populated mostly with conversations the user has chosen to hide. */} - {showLoadMore && ( -
- {isFetchingNextPage ? ( - - ) : ( + {showLoadMore && + (isLoadingMore ? ( +
+ +
+ ) : ( +
- )} -
- )} +
+ ))}
{confirmDeleteModalVisible && ( diff --git a/src/components/features/settings/upgrade-button.tsx b/src/components/features/settings/upgrade-button.tsx index 92792693f..f79f2d077 100644 --- a/src/components/features/settings/upgrade-button.tsx +++ b/src/components/features/settings/upgrade-button.tsx @@ -1,6 +1,6 @@ import { useTranslation } from "react-i18next"; -import { cn } from "#/utils/utils"; import { I18nKey } from "#/i18n/declaration"; +import { cn } from "#/utils/utils"; interface UpgradeButtonProps { onClick?: () => void; diff --git a/src/i18n/translation.json b/src/i18n/translation.json index f1fc213b1..e6a89624f 100644 --- a/src/i18n/translation.json +++ b/src/i18n/translation.json @@ -16812,6 +16812,23 @@ "tr": "Depo ve dal", "uk": "Репозиторій і гілка" }, + "CONVERSATION_PANEL$HOVER_METADATA": { + "en": "Hover metadata", + "ja": "ホバーメタデータ", + "zh-CN": "悬停元数据", + "zh-TW": "懸停中繼資料", + "ko-KR": "호버 메타데이터", + "no": "Sveve-metadata", + "ar": "بيانات التمرير", + "de": "Hover-Metadaten", + "fr": "Métadonnées au survol", + "it": "Metadati al passaggio", + "pt": "Metadados ao passar", + "es": "Metadatos al pasar", + "ca": "Metadades en passar", + "tr": "Üzerine gelme meta verileri", + "uk": "Метадані при наведенні" + }, "CONVERSATION_PANEL$NO_WORKSPACE": { "en": "No workspace", "ja": "ワークスペースなし", @@ -16914,6 +16931,193 @@ "tr": "Daha az", "uk": "Менше" }, + "CONVERSATION_PANEL$EXPAND_FOLDER": { + "en": "Expand {{label}} folder", + "ja": "{{label}} フォルダを展開", + "zh-CN": "展开 {{label}} 文件夹", + "zh-TW": "展開 {{label}} 資料夾", + "ko-KR": "{{label}} 폴더 펼치기", + "no": "Utvid mappen {{label}}", + "ar": "توسيع مجلد {{label}}", + "de": "Ordner {{label}} aufklappen", + "fr": "Développer le dossier {{label}}", + "it": "Espandi cartella {{label}}", + "pt": "Expandir pasta {{label}}", + "es": "Expandir carpeta {{label}}", + "ca": "Desplega la carpeta {{label}}", + "tr": "{{label}} klasörünü genişlet", + "uk": "Розгорнути папку {{label}}" + }, + "CONVERSATION_PANEL$COLLAPSE_FOLDER": { + "en": "Collapse {{label}} folder", + "ja": "{{label}} フォルダを折りたたむ", + "zh-CN": "收起 {{label}} 文件夹", + "zh-TW": "收合 {{label}} 資料夾", + "ko-KR": "{{label}} 폴더 접기", + "no": "Skjul mappen {{label}}", + "ar": "طي مجلد {{label}}", + "de": "Ordner {{label}} einklappen", + "fr": "Réduire le dossier {{label}}", + "it": "Comprimi cartella {{label}}", + "pt": "Recolher pasta {{label}}", + "es": "Contraer carpeta {{label}}", + "ca": "Replega la carpeta {{label}}", + "tr": "{{label}} klasörünü daralt", + "uk": "Згорнути папку {{label}}" + }, + "CONVERSATION_PANEL$SELECT_FOLDER": { + "en": "Select {{label}} folder", + "ja": "{{label}} フォルダを選択", + "zh-CN": "选择 {{label}} 文件夹", + "zh-TW": "選取 {{label}} 資料夾", + "ko-KR": "{{label}} 폴더 선택", + "no": "Velg mappen {{label}}", + "ar": "تحديد مجلد {{label}}", + "de": "Ordner {{label}} auswählen", + "fr": "Sélectionner le dossier {{label}}", + "it": "Seleziona cartella {{label}}", + "pt": "Selecionar pasta {{label}}", + "es": "Seleccionar carpeta {{label}}", + "ca": "Selecciona la carpeta {{label}}", + "tr": "{{label}} klasörünü seç", + "uk": "Вибрати папку {{label}}" + }, + "CONVERSATION_PANEL$DRAG_FOLDER": { + "en": "Drag {{label}} folder to reorder", + "ja": "{{label}} フォルダをドラッグして並べ替え", + "zh-CN": "拖动 {{label}} 文件夹以重新排序", + "zh-TW": "拖曳 {{label}} 資料夾以重新排序", + "ko-KR": "{{label}} 폴더를 드래그하여 순서 변경", + "no": "Dra mappen {{label}} for å endre rekkefølge", + "ar": "اسحب مجلد {{label}} لإعادة الترتيب", + "de": "Ordner {{label}} ziehen, um neu zu sortieren", + "fr": "Glisser le dossier {{label}} pour réorganiser", + "it": "Trascina la cartella {{label}} per riordinare", + "pt": "Arraste a pasta {{label}} para reordenar", + "es": "Arrastra la carpeta {{label}} para reordenar", + "ca": "Arrossega la carpeta {{label}} per reordenar", + "tr": "Sıralamak için {{label}} klasörünü sürükleyin", + "uk": "Перетягніть папку {{label}}, щоб змінити порядок" + }, + "CONVERSATION_PANEL$PINNED": { + "en": "Pinned", + "ja": "ピン留め", + "zh-CN": "已固定", + "zh-TW": "已釘選", + "ko-KR": "고정됨", + "no": "Festet", + "ar": "مثبت", + "de": "Angepinnt", + "fr": "Épinglés", + "it": "Fissati", + "pt": "Fixados", + "es": "Fijados", + "ca": "Fixats", + "tr": "Sabitlenmiş", + "uk": "Закріплені" + }, + "CONVERSATION_PANEL$PREVIEW_DIRECTORY": { + "en": "Directory", + "ja": "ディレクトリ", + "zh-CN": "目录", + "zh-TW": "目錄", + "ko-KR": "디렉터리", + "no": "Katalog", + "ar": "الدليل", + "de": "Verzeichnis", + "fr": "Répertoire", + "it": "Directory", + "pt": "Diretório", + "es": "Directorio", + "ca": "Directori", + "tr": "Dizin", + "uk": "Каталог" + }, + "CONVERSATION_PANEL$PREVIEW_MODEL": { + "en": "Model", + "ja": "モデル", + "zh-CN": "模型", + "zh-TW": "模型", + "ko-KR": "모델", + "no": "Modell", + "ar": "النموذج", + "de": "Modell", + "fr": "Modèle", + "it": "Modello", + "pt": "Modelo", + "es": "Modelo", + "ca": "Model", + "tr": "Model", + "uk": "Модель" + }, + "CONVERSATION_PANEL$PIN_CONVERSATION": { + "en": "Pin conversation", + "ja": "会話をピン留め", + "zh-CN": "固定对话", + "zh-TW": "釘選對話", + "ko-KR": "대화 고정", + "no": "Fest samtale", + "ar": "تثبيت المحادثة", + "de": "Unterhaltung anpinnen", + "fr": "Épingler la conversation", + "it": "Fissa conversazione", + "pt": "Fixar conversa", + "es": "Fijar conversación", + "ca": "Fixar conversa", + "tr": "Konuşmayı sabitle", + "uk": "Закріпити розмову" + }, + "CONVERSATION_PANEL$UNPIN_CONVERSATION": { + "en": "Unpin conversation", + "ja": "会話のピン留めを解除", + "zh-CN": "取消固定对话", + "zh-TW": "取消釘選對話", + "ko-KR": "대화 고정 해제", + "no": "Løsne samtale", + "ar": "إلغاء تثبيت المحادثة", + "de": "Unterhaltung lösen", + "fr": "Désépingler la conversation", + "it": "Rimuovi fissaggio conversazione", + "pt": "Desafixar conversa", + "es": "Desfijar conversación", + "ca": "Desfixar conversa", + "tr": "Konuşmanın sabitlemesini kaldır", + "uk": "Відкріпити розмову" + }, + "CONVERSATION_PANEL$MOVE_FOLDER_UP": { + "en": "Move {{label}} folder up", + "ja": "{{label}} フォルダを上に移動", + "zh-CN": "将 {{label}} 文件夹上移", + "zh-TW": "將 {{label}} 資料夾上移", + "ko-KR": "{{label}} 폴더 위로 이동", + "no": "Flytt mappen {{label}} opp", + "ar": "نقل مجلد {{label}} لأعلى", + "de": "Ordner {{label}} nach oben verschieben", + "fr": "Monter le dossier {{label}}", + "it": "Sposta la cartella {{label}} in su", + "pt": "Mover pasta {{label}} para cima", + "es": "Mover carpeta {{label}} arriba", + "ca": "Mou la carpeta {{label}} amunt", + "tr": "{{label}} klasörünü yukarı taşı", + "uk": "Перемістити папку {{label}} вгору" + }, + "CONVERSATION_PANEL$MOVE_FOLDER_DOWN": { + "en": "Move {{label}} folder down", + "ja": "{{label}} フォルダを下に移動", + "zh-CN": "将 {{label}} 文件夹下移", + "zh-TW": "將 {{label}} 資料夾下移", + "ko-KR": "{{label}} 폴더 아래로 이동", + "no": "Flytt mappen {{label}} ned", + "ar": "نقل مجلد {{label}} لأسفل", + "de": "Ordner {{label}} nach unten verschieben", + "fr": "Descendre le dossier {{label}}", + "it": "Sposta la cartella {{label}} in giù", + "pt": "Mover pasta {{label}} para baixo", + "es": "Mover carpeta {{label}} abajo", + "ca": "Mou la carpeta {{label}} avall", + "tr": "{{label}} klasörünü aşağı taşı", + "uk": "Перемістити папку {{label}} вниз" + }, "CONVERSATION$CONFIRM_DELETE_ALL_TITLE": { "en": "Delete all conversations", "ja": "すべての会話を削除", diff --git a/src/stores/conversation-panel-preferences-store.ts b/src/stores/conversation-panel-preferences-store.ts index e70f29607..72f092d69 100644 --- a/src/stores/conversation-panel-preferences-store.ts +++ b/src/stores/conversation-panel-preferences-store.ts @@ -1,9 +1,9 @@ import { create } from "zustand"; import { persist, createJSONStorage } from "zustand/middleware"; -import type { - ConversationSortField, - OrganizeMode, - ThreadScope, +import { + type ConversationSortField, + type OrganizeMode, + type ThreadScope, } from "#/components/features/conversation-panel/conversation-panel-list-helpers"; /** @@ -23,9 +23,11 @@ interface ConversationPanelPreferencesState { showOlderConversations: boolean; showRepoBranchMetadata: boolean; showLlmProfiles: boolean; + showHoverMetadata: boolean; organizeMode: OrganizeMode; conversationSort: ConversationSortField; threadScope: ThreadScope; + groupFolderOrder: string[]; } interface ConversationPanelPreferencesActions { @@ -35,9 +37,12 @@ interface ConversationPanelPreferencesActions { toggleShowRepoBranchMetadata: () => void; setShowLlmProfiles: (value: boolean) => void; toggleShowLlmProfiles: () => void; + setShowHoverMetadata: (value: boolean) => void; + toggleShowHoverMetadata: () => void; setOrganizeMode: (value: OrganizeMode) => void; setConversationSort: (value: ConversationSortField) => void; setThreadScope: (value: ThreadScope) => void; + setGroupFolderOrder: (order: readonly string[]) => void; } type ConversationPanelPreferencesStore = ConversationPanelPreferencesState & @@ -47,9 +52,11 @@ const initialState: ConversationPanelPreferencesState = { showOlderConversations: true, showRepoBranchMetadata: false, showLlmProfiles: false, + showHoverMetadata: true, organizeMode: "chronological", conversationSort: "updated", threadScope: "all", + groupFolderOrder: [], }; export const useConversationPanelPreferencesStore = @@ -78,10 +85,19 @@ export const useConversationPanelPreferencesStore = showLlmProfiles: !state.showLlmProfiles, })), + setShowHoverMetadata: (value) => + set(() => ({ showHoverMetadata: value })), + toggleShowHoverMetadata: () => + set((state) => ({ + showHoverMetadata: !state.showHoverMetadata, + })), + setOrganizeMode: (value) => set(() => ({ organizeMode: value })), setConversationSort: (value) => set(() => ({ conversationSort: value })), setThreadScope: (value) => set(() => ({ threadScope: value })), + setGroupFolderOrder: (order) => + set(() => ({ groupFolderOrder: [...order] })), }), { name: "conversation-panel-preferences", @@ -91,9 +107,11 @@ export const useConversationPanelPreferencesStore = showOlderConversations: state.showOlderConversations, showRepoBranchMetadata: state.showRepoBranchMetadata, showLlmProfiles: state.showLlmProfiles, + showHoverMetadata: state.showHoverMetadata, organizeMode: state.organizeMode, conversationSort: state.conversationSort, threadScope: state.threadScope, + groupFolderOrder: state.groupFolderOrder, }), }, ), diff --git a/src/stores/pinned-conversations-store.ts b/src/stores/pinned-conversations-store.ts new file mode 100644 index 000000000..190c5b4ff --- /dev/null +++ b/src/stores/pinned-conversations-store.ts @@ -0,0 +1,95 @@ +import { create } from "zustand"; +import { persist, createJSONStorage } from "zustand/middleware"; + +interface PinnedConversationsState { + pinsByBackendId: Record; +} + +interface PinnedConversationsActions { + pinConversation: (backendId: string, conversationId: string) => void; + unpinConversation: (backendId: string, conversationId: string) => void; + togglePin: (backendId: string, conversationId: string) => void; + pruneMissingConversations: ( + backendId: string, + existingIds: readonly string[], + ) => void; +} + +type PinnedConversationsStore = PinnedConversationsState & + PinnedConversationsActions; + +const initialState: PinnedConversationsState = { + pinsByBackendId: {}, +}; + +function getPinsForBackend( + pinsByBackendId: Record, + backendId: string, +): string[] { + return pinsByBackendId[backendId] ?? []; +} + +export const usePinnedConversationsStore = create()( + persist( + (set, get) => ({ + ...initialState, + + pinConversation: (backendId, conversationId) => { + const current = getPinsForBackend(get().pinsByBackendId, backendId); + if (current.includes(conversationId)) { + return; + } + set((state) => ({ + pinsByBackendId: { + ...state.pinsByBackendId, + [backendId]: [conversationId, ...current], + }, + })); + }, + + unpinConversation: (backendId, conversationId) => { + const current = getPinsForBackend(get().pinsByBackendId, backendId); + if (!current.includes(conversationId)) { + return; + } + set((state) => ({ + pinsByBackendId: { + ...state.pinsByBackendId, + [backendId]: current.filter((id) => id !== conversationId), + }, + })); + }, + + togglePin: (backendId, conversationId) => { + const current = getPinsForBackend(get().pinsByBackendId, backendId); + if (current.includes(conversationId)) { + get().unpinConversation(backendId, conversationId); + } else { + get().pinConversation(backendId, conversationId); + } + }, + + pruneMissingConversations: (backendId, existingIds) => { + const existing = new Set(existingIds); + const current = getPinsForBackend(get().pinsByBackendId, backendId); + const pruned = current.filter((id) => existing.has(id)); + if (pruned.length === current.length) { + return; + } + set((state) => ({ + pinsByBackendId: { + ...state.pinsByBackendId, + [backendId]: pruned, + }, + })); + }, + }), + { + name: "pinned-conversations", + storage: createJSONStorage(() => localStorage), + partialize: (state): PinnedConversationsState => ({ + pinsByBackendId: state.pinsByBackendId, + }), + }, + ), +);