Skip to content

Conversation

@monadoid
Copy link
Contributor

@monadoid monadoid commented Dec 22, 2025

why

With my previous artifacts approach, our client sdk repos like stagehand-python just pulled the most recent artifact, which could be error prone - by having it pull a versioned release, we avoid a swath of potential issues.

what changed

Added logic for pushing releases.

test plan

We should see a release show up for stagehand-server when this merges, since I added a minor version bump changeset.


Summary by cubic

Publish stagehand-server via versioned GitHub Releases driven by Changesets, replacing the previous GitHub Artifacts flow. SDKs can now fetch stable, versioned assets (OpenAPI spec) from releases.

  • New Features

    • Auto-tag stagehand-server/v{version} when packages/server version changes; skips if unchanged or tag exists.
    • New release workflow verifies the tag matches package.json, packages openapi.v3.yaml, and publishes a GitHub Release with notes.
    • Added a minor Changeset for @browserbasehq/stagehand-server to trigger the first release.
  • Migration

    • Update SDKs (e.g., stagehand-python) to download openapi.v3.stagehand-server-{version}.yaml from the matching GitHub Release tag.
    • Stop relying on the “latest” GitHub Artifacts.

Written for commit e47c56e. Summary will update automatically on new commits.

@changeset-bot
Copy link

changeset-bot bot commented Dec 22, 2025

🦋 Changeset detected

Latest commit: e47c56e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@browserbasehq/stagehand-server Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 4 files

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Dec 22, 2025

Greptile Summary

This PR transitions from using GitHub artifacts to versioned releases for stagehand-server, improving reliability for downstream SDK repositories. The implementation adds automated tagging when the server version changes and creates GitHub releases with the OpenAPI spec.

Changes:

  • Added changeset for @browserbasehq/stagehand-server to trigger initial minor version bump
  • Updated release.yml to automatically create git tags when server version changes (comparing current version with previous commit)
  • Added new stagehand-server-release.yml workflow triggered by tags to publish GitHub releases with OpenAPI spec
  • Fixed stainless.yml to only run merge builds when merging to main branch

The tagging logic correctly handles edge cases including missing previous versions, existing tags, and initial commits. The workflow integrates cleanly with the existing changesets release process.

Confidence Score: 4/5

  • This PR is safe to merge with low risk
  • The implementation is well thought out with proper error handling and edge case management. The tagging logic correctly compares versions and handles scenarios like missing previous versions and existing tags. The new workflow is simple and focused. Minor deduction because this introduces a new release mechanism that should be monitored on first run to ensure the tag-to-release flow works as expected.
  • Monitor .github/workflows/release.yml on first run to verify the tagging step executes correctly when versions change

Important Files Changed

Filename Overview
.github/workflows/release.yml Updated checkout action to v4, added fetch-depth: 0, and added tagging logic for stagehand-server versions
.github/workflows/stagehand-server-release.yml New workflow that creates GitHub releases with OpenAPI spec when stagehand-server tags are pushed

Sequence Diagram

sequenceDiagram
    participant Dev as Developer
    participant PR as Pull Request
    participant Release as release.yml
    participant Changesets as changesets/action
    participant Main as main branch
    participant Tag as Git Tag
    participant ServerRelease as stagehand-server-release.yml
    participant GH as GitHub Releases

    Dev->>PR: Add changeset file (lucky-dolls-joke.md)
    PR->>Main: Merge to main
    Main->>Release: Trigger workflow (push to main)
    Release->>Changesets: Run changesets/action
    Changesets->>Changesets: Detect changesets
    Changesets->>PR: Create "Version Packages" PR
    Note over Changesets,PR: Updates package.json versions
    PR->>Main: Merge Version Packages PR
    Main->>Release: Trigger workflow again
    Release->>Changesets: Run changesets/action
    Changesets->>Changesets: Detect version bump commit
    Changesets->>Changesets: Publish to npm
    Release->>Release: Read current server version
    Release->>Release: Compare with previous commit version
    alt Version changed
        Release->>Tag: Create stagehand-server/vX.Y.Z tag
        Tag->>ServerRelease: Trigger workflow (tag push)
        ServerRelease->>ServerRelease: Verify tag matches package.json
        ServerRelease->>ServerRelease: Copy OpenAPI spec to release assets
        ServerRelease->>GH: Create GitHub release with assets
        GH->>Dev: Release published
    else Version unchanged
        Release->>Release: Skip tagging
    end
Loading

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Dec 22, 2025

Greptile's behavior is changing!

From now on, if a review finishes with no comments, we will not post an additional "statistics" comment to confirm that our review found nothing to comment on. However, you can confirm that we reviewed your changes in the status check section.

This feature can be toggled off in your Code Review Settings by deselecting "Create a status check for each PR".

@monadoid monadoid merged commit 5fc1281 into main Dec 22, 2025
21 checks passed
miguelg719 pushed a commit that referenced this pull request Dec 27, 2025
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @browserbasehq/stagehand@3.0.7

### Patch Changes

- [#1461](#1461)
[`0f3991e`](0f3991e)
Thanks [@tkattkat](https://github.com/tkattkat)! - Move hybrid mode out
of experimental

- [#1433](#1433)
[`e0e22e0`](e0e22e0)
Thanks [@tkattkat](https://github.com/tkattkat)! - Put hybrid mode
behind experimental

- [#1456](#1456)
[`f261051`](f261051)
Thanks [@shrey150](https://github.com/shrey150)! - Invoke page.hover for
agent move action

- [#1473](#1473)
[`e021674`](e021674)
Thanks [@shrey150](https://github.com/shrey150)! - Add safety
confirmation support for OpenAI + Google CUA

- [#1399](#1399)
[`6a5496f`](6a5496f)
Thanks [@tkattkat](https://github.com/tkattkat)! - Ensure cua agent is
killed when stagehand.close is called

- [#1436](#1436)
[`fea1700`](fea1700)
Thanks [@miguelg719](https://github.com/miguelg719)! - Fix auto-load key
for act/extract/observe parametrized models on api

- [#1439](#1439)
[`5b288d9`](5b288d9)
Thanks [@tkattkat](https://github.com/tkattkat)! - Remove base64 from
agent actions array ( still present in messages object )

- [#1408](#1408)
[`e822f5a`](e822f5a)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - allow for
act() cache hit when variable values change

- [#1472](#1472)
[`638efc7`](638efc7)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix: agent
cache not refreshed on action failure

- [#1424](#1424)
[`a890f16`](a890f16)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix:
"Error: -32000 Failed to convert response to JSON: CBOR: stack limit
exceeded"

- [#1418](#1418)
[`934f492`](934f492)
Thanks [@miguelg719](https://github.com/miguelg719)! - Cleanup handlers
and bus listeners on close

- [#1430](#1430)
[`bd2db92`](bd2db92)
Thanks [@shrey150](https://github.com/shrey150)! - Fix CUA model
coordinate translation

- [#1465](#1465)
[`51e0170`](51e0170)
Thanks [@miguelg719](https://github.com/miguelg719)! - Add media
resolution high provider option to gemini 3 hybrid agent

- [#1431](#1431)
[`05f5580`](05f5580)
Thanks [@tkattkat](https://github.com/tkattkat)! - Update the cache
handling for agent

- [#1432](#1432)
[`f56a9c2`](f56a9c2)
Thanks [@tkattkat](https://github.com/tkattkat)! - Deprecate cua: true
in favor of mode: "cua"

- [#1406](#1406)
[`b40ae11`](b40ae11)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add support for
hovering with coordinates ( page.hover )

- [#1407](#1407)
[`0d2b398`](0d2b398)
Thanks [@tkattkat](https://github.com/tkattkat)! - Clean up page methods

- [#1412](#1412)
[`cd01f29`](cd01f29)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - fix: load
GOOGLE_API_KEY from .env

- [#1462](#1462)
[`a734fca`](a734fca)
Thanks [@shrey150](https://github.com/shrey150)! - fix: correctly pass
userDataDir to chrome launcher

- [#1466](#1466)
[`b342acf`](b342acf)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - move
playwright to optional dependencies

- [#1440](#1440)
[`2987cd1`](2987cd1)
Thanks [@tkattkat](https://github.com/tkattkat)! - [Feature] support
excluding tools from agent

- [#1455](#1455)
[`dfab1d5`](dfab1d5)
Thanks [@seanmcguire12](https://github.com/seanmcguire12)! - update
aisdk client to better enforce structured output with deepseek models

- [#1428](#1428)
[`4d71162`](4d71162)
Thanks [@tkattkat](https://github.com/tkattkat)! - Add "hybrid" mode to
stagehand agent

## @browserbasehq/stagehand-server@3.2.0

### Minor Changes

- [#1459](#1459)
[`abb3469`](abb3469)
Thanks [@monadoid](https://github.com/monadoid)! - Added building of
binaries

- [#1457](#1457)
[`5fc1281`](5fc1281)
Thanks [@monadoid](https://github.com/monadoid)! - First changeset for
stagehand-server

- [#1469](#1469)
[`d634d45`](d634d45)
Thanks [@monadoid](https://github.com/monadoid)! - Bump to test binary
builds

### Patch Changes

- Updated dependencies
\[[`0f3991e`](0f3991e),
[`e0e22e0`](e0e22e0),
[`f261051`](f261051),
[`e021674`](e021674),
[`6a5496f`](6a5496f),
[`fea1700`](fea1700),
[`5b288d9`](5b288d9),
[`e822f5a`](e822f5a),
[`638efc7`](638efc7),
[`a890f16`](a890f16),
[`934f492`](934f492),
[`bd2db92`](bd2db92),
[`51e0170`](51e0170),
[`05f5580`](05f5580),
[`f56a9c2`](f56a9c2),
[`b40ae11`](b40ae11),
[`0d2b398`](0d2b398),
[`cd01f29`](cd01f29),
[`a734fca`](a734fca),
[`b342acf`](b342acf),
[`2987cd1`](2987cd1),
[`dfab1d5`](dfab1d5),
[`4d71162`](4d71162)]:
    -   @browserbasehq/stagehand@3.0.7

## @browserbasehq/stagehand-evals@1.1.6

### Patch Changes

- [#1373](#1373)
[`cadd192`](cadd192)
Thanks [@tkattkat](https://github.com/tkattkat)! - Update screenshot
collector in agent evals cli

- Updated dependencies
\[[`0f3991e`](0f3991e),
[`e0e22e0`](e0e22e0),
[`f261051`](f261051),
[`e021674`](e021674),
[`6a5496f`](6a5496f),
[`fea1700`](fea1700),
[`5b288d9`](5b288d9),
[`e822f5a`](e822f5a),
[`638efc7`](638efc7),
[`a890f16`](a890f16),
[`934f492`](934f492),
[`bd2db92`](bd2db92),
[`51e0170`](51e0170),
[`05f5580`](05f5580),
[`f56a9c2`](f56a9c2),
[`b40ae11`](b40ae11),
[`0d2b398`](0d2b398),
[`cd01f29`](cd01f29),
[`a734fca`](a734fca),
[`b342acf`](b342acf),
[`2987cd1`](2987cd1),
[`dfab1d5`](dfab1d5),
[`4d71162`](4d71162)]:
    -   @browserbasehq/stagehand@3.0.7

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants