4/4 Add Browserbase support to Go - #2417
Open
monadoid wants to merge 7 commits into
Open
Conversation
|
Contributor
There was a problem hiding this comment.
All reported issues were addressed across 11 files
Architecture diagram
sequenceDiagram
participant Client as SDK Consumer
participant Init as Stagehand.Init
participant Resolver as resolveBrowserSource
participant Browserbase as Browserbase Session Client
participant BBAPI as Browserbase HTTP API
participant Local as Local Chrome Launcher
participant CDP as Existing CDP Browser
participant RPC as CDP RPC Client
participant Extension as Extension Assets
Note over Client,RPC: Browser Source Resolution (Init)
Client->>Init: Init(ctx, params)
Init->>Resolver: resolveBrowserSource(ctx, params)
alt BrowserbaseClientBrowserSource
Resolver->>Resolver: validate API key
Resolver->>Browserbase: create Browserbase session client
Browserbase->>BBAPI: uploadExtension(archive)
BBAPI-->>Browserbase: extension ID
Browserbase->>BBAPI: createSession(request)
BBAPI-->>Browserbase: session ID, connect URL
Browserbase-->>Resolver: resolvedBrowserSource
Note over Resolver: preloadedExtension = true
else LocalBrowserSource
Resolver->>Extension: materializeExtension()
Extension-->>Resolver: extension dir, cleanup
Resolver->>Local: launchLocal(ctx, source)
Local-->>Resolver: resolvedBrowserSource (CDP URL)
Note over Resolver: extensionDir set, connectTimeout applied
else CDPBrowserSource
Resolver->>Resolver: validate CDP URL
Resolver->>Resolver: build http.Header from map
Resolver->>Extension: materializeExtension()
Extension-->>Resolver: extension dir, cleanup
Note over Resolver: keepAlive = true, close = nil (caller owns)
end
Resolver-->>Init: resolvedBrowserSource
Init->>RPC: connectResolvedBrowser(ctx, browser, telemetry)
RPC->>RPC: connectRPCClient with CDP options
RPC-->>Init: protocol client
alt connectProtocol fails
Init->>Init: releaseBrowser(ctx)
Note over Init: errors.Join(protocol err, release err)
Init-->>Client: error
else success
Init-->>Client: initialized Stagehand
end
Note over Client,RPC: Browserbase Session Lifecycle (Close)
Client->>Init: Close(ctx)
Init->>Init: releaseBrowser(ctx)
alt keepAlive = true (CDP caller-owned)
Init->>Init: skip close, run cleanup only
else keepAlive = false (Browserbase)
alt close != nil (Browserbase session)
Init->>Browserbase: browser.close(ctx)
Browserbase->>BBAPI: releaseSession(ctx, sessionID)
Browserbase->>BBAPI: deleteExtension(ctx, extensionID)
Note over Browserbase: mutex protects against double-close
end
end
opt cleanup != nil (local/CDP extension dir)
Init->>Extension: cleanup()
end
Init-->>Client: errors.Join(close err, cleanup err)
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
sameelarif
reviewed
Jul 27, 2026
# Conflicts: # packages/sdk-go/client_test.go
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Finishes the Go client by wiring all three browser sources through
Stagehand.Init:net/httpclient for extension upload, session creation, release, and cleanup.The Browserbase client validates typed request and response structs through one shared request path, following the same pattern as Zod plus
fetchin TypeScript. The public local, CDP, and Browserbase lifecycles are covered by real browser tests.Stack created with GitHub Stacks CLI • Give Feedback 💬