feat: dashboard provider support and session creation improvements (#1092)

Add provider icons and session creation from the dashboard UI.
Sessions can now be created with cloud providers (Browserbase,
Browserless, Browser Use, Kernel) in addition to local engines.

CLI changes:
- Track provider via .provider files alongside .engine files
- Add WaitUntil::None variant to skip lifecycle event waits for providers
- Auto-set waitUntil=none when --provider is used with navigate
- Fix Browser Use: use direct WSS connection (wss://connect.browser-use.com)
- Add connect_cdp_direct for providers with page-level CDP proxies
- Fix resolve_cdp_url to convert https:// provider URLs to wss://
- Treat empty CDP session_id as None (omit from protocol messages)
- Fix Browserbase: send explicit JSON body + Content-Type header
- Increase CDP connect timeout to 25s for remote providers
- Clean up .provider files on session close

Dashboard changes:
- Show provider or engine icon per session in sidebar
- New session dialog with unified engine/provider selector grid
- Async session creation with loading state and error display
- Kill zombie daemons on provider connection failure
- Parse CLI JSON error output for user-friendly messages
- Default new session URL to https://agent-browser.dev
This commit is contained in:
Chris Tate
2026-03-30 18:35:12 -05:00
committed by GitHub
parent f8bc8b368a
commit 40fdb4284d
22 changed files with 274 additions and 107 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ export const maxDuration = 60;
const DEFAULT_MODEL = "anthropic/claude-haiku-4.5";
const SYSTEM_PROMPT = `You are a helpful documentation assistant for agent-browser, a headless browser automation CLI designed for AI agents.
const SYSTEM_PROMPT = `You are a helpful documentation assistant for agent-browser, a browser automation CLI designed for AI agents.
GitHub repository: https://github.com/vercel-labs/agent-browser
Documentation: https://agent-browser.dev
+6 -6
View File
@@ -25,23 +25,23 @@ const geistMono = Geist_Mono({
export const metadata: Metadata = {
metadataBase: new URL("https://agent-browser.dev"),
title: {
default: "agent-browser | Headless Browser Automation for AI",
default: "agent-browser | Browser Automation for AI",
template: "%s | agent-browser",
},
description: "Headless browser automation CLI for AI agents",
description: "Browser automation CLI for AI agents",
openGraph: {
type: "website",
locale: "en_US",
url: "https://agent-browser.dev",
siteName: "agent-browser",
title: "agent-browser | Headless Browser Automation for AI",
description: "Headless browser automation CLI for AI agents",
title: "agent-browser | Browser Automation for AI",
description: "Browser automation CLI for AI agents",
images: [{ url: "/og", width: 1200, height: 630, alt: "agent-browser" }],
},
twitter: {
card: "summary_large_image",
title: "agent-browser | Headless Browser Automation for AI",
description: "Headless browser automation CLI for AI agents",
title: "agent-browser | Browser Automation for AI",
description: "Browser automation CLI for AI agents",
images: ["/og"],
},
};
+1 -1
View File
@@ -2,7 +2,7 @@ import type { Metadata } from "next";
import { PAGE_TITLES } from "./page-titles";
const DESCRIPTION =
"Headless browser automation CLI for AI agents";
"Browser automation CLI for AI agents";
export function pageMetadata(slug: string): Metadata {
const title = PAGE_TITLES[slug];
+1 -1
View File
@@ -1,5 +1,5 @@
export const PAGE_TITLES: Record<string, string> = {
"": "Headless Browser\nAutomation for AI",
"": "Browser\nAutomation for AI",
installation: "Installation",
"quick-start": "Quick Start",
skills: "Skills",