From 4bd5bc18564ec6cf777ee9953efa72fe495b4e86 Mon Sep 17 00:00:00 2001 From: miguel Date: Sun, 29 Jun 2025 13:42:53 -0700 Subject: [PATCH 1/7] feature parity workflow --- .github/workflows/feature-parity.yml | 132 +++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 .github/workflows/feature-parity.yml diff --git a/.github/workflows/feature-parity.yml b/.github/workflows/feature-parity.yml new file mode 100644 index 00000000..8fab7687 --- /dev/null +++ b/.github/workflows/feature-parity.yml @@ -0,0 +1,132 @@ +name: Feature Parity + +on: + pull_request: + types: + - opened + - synchronize + - labeled + - unlabeled + +jobs: + check-parity-label: + runs-on: ubuntu-latest + if: github.event.action == 'labeled' && github.event.label.name == 'parity' + steps: + - name: Check out repository code + uses: actions/checkout@v4 + + - name: Check user permissions + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({ + owner: context.repo.owner, + repo: context.repo.repo, + username: context.actor + }); + + const hasWriteAccess = ['admin', 'write'].includes(permission.permission); + + if (!hasWriteAccess) { + // Remove the parity label if user doesn't have write access + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + name: 'parity' + }); + + // Add a comment explaining why the label was removed + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: `❌ **Parity Label Removed**\n\n@${context.actor}, you do not have sufficient permissions to add the 'parity' label. Only users with write access can trigger feature parity issues.\n\nIf you believe this feature should be implemented in the Python SDK, please ask a maintainer to add the label.` + }); + + throw new Error(`User ${context.actor} does not have write access to add parity label`); + } + + console.log(`User ${context.actor} has ${permission.permission} access - proceeding with parity workflow`); + + - name: Create issue in TS SDK repository + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.TS_REPO_TOKEN }} + script: | + const { data: pullRequest } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + }); + + // Get PR comments for additional context + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + + // Format comments for the issue description + let commentsSection = ''; + if (comments.length > 0) { + commentsSection = '\n\n## Recent Comments\n\n'; + comments.slice(-3).forEach(comment => { + commentsSection += `**@${comment.user.login}** commented:\n`; + commentsSection += `${comment.body.substring(0, 500)}${comment.body.length > 500 ? '...' : ''}\n\n`; + }); + } + + // Get list of changed files for context + const { data: files } = await github.rest.pulls.listFiles({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + }); + + const changedFiles = files.map(file => `- \`${file.filename}\``).join('\n'); + + const issueTitle = `[Feature Parity] ${pullRequest.title}`; + const issueBody = `## Feature Parity Request + + This issue was automatically created from a pull request in the TypeScript Stagehand repository that was labeled with 'parity'. + + ### Original PR Details + - **PR**: #${context.issue.number} - ${pullRequest.title} + - **Author**: @${pullRequest.user.login} + - **Link**: ${pullRequest.html_url} + + ### Description + ${pullRequest.body || 'No description provided.'} + + ### Changed Files + ${changedFiles} + + ${commentsSection} + + ### Action Required + Please review the changes in the original PR and implement equivalent functionality in the Python SDK if applicable. + + --- + *This issue was automatically generated by the Feature Parity workflow.*`; + + // Create the issue in the Python repository + const { data: issue } = await github.rest.issues.create({ + owner: 'browserbase', + repo: 'stagehand', + title: issueTitle, + body: issueBody, + labels: ['feature-parity'] + }); + + console.log(`Created issue: ${issue.html_url}`); + + // Add a comment to the original PR confirming the issue was created + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: `🔄 **Feature Parity Issue Created**\n\nAn issue has been automatically created in the Python SDK repository to track parity implementation:\n${issue.html_url}` + }); From f187e378e847829dbd743219309bda6ebb79e908 Mon Sep 17 00:00:00 2001 From: miguel Date: Sun, 29 Jun 2025 14:22:54 -0700 Subject: [PATCH 2/7] readme update --- README.md | 15 ++++++++++++--- media/Director_Logo.png | Bin 0 -> 19450 bytes media/Director_Logo_White.svg | 20 ++++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 media/Director_Logo.png create mode 100644 media/Director_Logo_White.svg diff --git a/README.md b/README.md index c2ca68ea..69963bdd 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,22 @@

-> Stagehand Python is now available! We're actively seeking feedback from the community and looking for contributors. Join our [Slack community](https://stagehand.dev/slack) to stay updated on the latest updates +> If you're looking for the TypeScript implementation, you can find it [here](https://github.com/browserbase/stagehand) +**Vibe code** Stagehand with [Director](https://director.ai): + ## Why Stagehand? -*Stagehand is the easiest way to build browser automations with AI-powered interactions.* - Most existing browser automation tools either require you to write low-level code in a framework like Selenium, Playwright, or Puppeteer, or use high-level agents that can be unpredictable in production. By letting developers choose what to write in code vs. natural language, Stagehand is the natural choice for browser automations in production. 1. **Choose when to write code vs. natural language**: use AI when you want to navigate unfamiliar pages, and use code ([Playwright](https://playwright.dev/)) when you know exactly what you want to do. diff --git a/media/Director_Logo.png b/media/Director_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a51ee4684970cd067b8afc51ccb88dca91b821 GIT binary patch literal 19450 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 Td6DB?9I=Y`AIg=;n7sHuFJQr0 literal 0 HcmV?d00001 diff --git a/media/Director_Logo_White.svg b/media/Director_Logo_White.svg new file mode 100644 index 00000000..5828dc5e --- /dev/null +++ b/media/Director_Logo_White.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + From d1423ebff85cac7193e3526abe1f127b2118df38 Mon Sep 17 00:00:00 2001 From: miguel Date: Sun, 29 Jun 2025 14:31:36 -0700 Subject: [PATCH 3/7] readme fix --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 69963bdd..d406282b 100644 --- a/README.md +++ b/README.md @@ -36,18 +36,18 @@ > If you're looking for the TypeScript implementation, you can find it [here](https://github.com/browserbase/stagehand) -**Vibe code** Stagehand with [Director](https://director.ai): -
- +
+ Vibe code + Stagehand with + + + + Director + +
+ ## Why Stagehand? Most existing browser automation tools either require you to write low-level code in a framework like Selenium, Playwright, or Puppeteer, or use high-level agents that can be unpredictable in production. By letting developers choose what to write in code vs. natural language, Stagehand is the natural choice for browser automations in production. From d4e0d57d5acd4b4ba8bb37e1d3b4c3a3dbe3a7e3 Mon Sep 17 00:00:00 2001 From: miguel Date: Sun, 29 Jun 2025 14:45:35 -0700 Subject: [PATCH 4/7] simplify readme link --- README.md | 12 ++++++------ media/Director_Logo.png | Bin 19450 -> 0 bytes media/Director_Logo_White.svg | 20 -------------------- media/director_icon.svg | 13 +++++++++++++ 4 files changed, 19 insertions(+), 26 deletions(-) delete mode 100644 media/Director_Logo.png delete mode 100644 media/Director_Logo_White.svg create mode 100644 media/director_icon.svg diff --git a/README.md b/README.md index d406282b..5c15a26d 100644 --- a/README.md +++ b/README.md @@ -37,14 +37,14 @@ > If you're looking for the TypeScript implementation, you can find it [here](https://github.com/browserbase/stagehand)
- Vibe code - Stagehand with + Vibe code + Stagehand with - - - Director - + Director + + Director +
diff --git a/media/Director_Logo.png b/media/Director_Logo.png deleted file mode 100644 index f9a51ee4684970cd067b8afc51ccb88dca91b821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19450 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 Td6DB?9I=Y`AIg=;n7sHuFJQr0 diff --git a/media/Director_Logo_White.svg b/media/Director_Logo_White.svg deleted file mode 100644 index 5828dc5e..00000000 --- a/media/Director_Logo_White.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/media/director_icon.svg b/media/director_icon.svg new file mode 100644 index 00000000..60125586 --- /dev/null +++ b/media/director_icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + From d4a0f43d1a5afce92b1bcc63c436256e59dee91c Mon Sep 17 00:00:00 2001 From: miguel Date: Sun, 29 Jun 2025 14:47:30 -0700 Subject: [PATCH 5/7] formatting --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5c15a26d..6b0a7f58 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ Director + Director From ac944fa64301fb8a5fff44415078214f5e3ce4b4 Mon Sep 17 00:00:00 2001 From: miguel Date: Sun, 29 Jun 2025 14:52:50 -0700 Subject: [PATCH 6/7] center --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6b0a7f58..090ef805 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,10 @@

-> If you're looking for the TypeScript implementation, you can find it [here](https://github.com/browserbase/stagehand) +

+If you're looking for the TypeScript implementation, you can find it + here +

Vibe code @@ -44,7 +47,7 @@ - Director + Director
From a6e13c72c7f23fb89486a8c247c186d4fce9682f Mon Sep 17 00:00:00 2001 From: Roaring <216452114+the-roaring@users.noreply.github.com> Date: Mon, 30 Jun 2025 12:27:10 -0700 Subject: [PATCH 7/7] update parity workflow to use stagehand-parity-bot app --- .github/workflows/feature-parity.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/feature-parity.yml b/.github/workflows/feature-parity.yml index 8fab7687..59be3621 100644 --- a/.github/workflows/feature-parity.yml +++ b/.github/workflows/feature-parity.yml @@ -12,6 +12,10 @@ jobs: check-parity-label: runs-on: ubuntu-latest if: github.event.action == 'labeled' && github.event.label.name == 'parity' + permissions: + contents: read + pull-requests: write + issues: write steps: - name: Check out repository code uses: actions/checkout@v4 @@ -51,10 +55,19 @@ jobs: console.log(`User ${context.actor} has ${permission.permission} access - proceeding with parity workflow`); - - name: Create issue in TS SDK repository + - name: Generate GitHub App token + id: generate-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.PARITY_APP_ID }} + private-key: ${{ secrets.PARITY_APP_PRIVATE_KEY }} + owner: browserbase + repositories: stagehand + + - name: Create issue in Python SDK repository uses: actions/github-script@v7 with: - github-token: ${{ secrets.TS_REPO_TOKEN }} + github-token: ${{ steps.generate-token.outputs.token }} script: | const { data: pullRequest } = await github.rest.pulls.get({ owner: context.repo.owner,