From 394336419ed210704639af03445858f44f03ba13 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 22:07:31 +0000 Subject: [PATCH 1/2] chore: remove custom code --- .env.example | 3 - .github/workflows/ci.yml | 4 +- .github/workflows/publish-gem.yml | 2 +- .github/workflows/release-doctor.yml | 2 +- .gitignore | 1 - .stats.yml | 8 +- Gemfile.lock | 2 + LICENSE | 2 +- README.md | 208 ++----------- examples/basic.rb | 110 ------- lib/stagehand.rb | 2 + lib/stagehand/internal/type/union.rb | 11 - lib/stagehand/internal/util.rb | 7 +- lib/stagehand/models.rb | 2 + lib/stagehand/models/model_config.rb | 108 +++---- lib/stagehand/models/session_act_params.rb | 62 ++-- lib/stagehand/models/session_end_params.rb | 38 +-- .../models/session_execute_params.rb | 70 ++--- .../models/session_execute_response.rb | 30 +- .../models/session_extract_params.rb | 62 ++-- .../models/session_navigate_params.rb | 42 +-- .../models/session_observe_params.rb | 62 ++-- lib/stagehand/models/session_replay_params.rb | 33 ++ .../models/session_replay_response.rb | 100 ++++++ lib/stagehand/models/session_start_params.rb | 46 +-- lib/stagehand/resources/sessions.rb | 252 +++++---------- rbi/stagehand/models.rbi | 2 + rbi/stagehand/models/model_config.rbi | 179 ++++------- rbi/stagehand/models/session_act_params.rbi | 107 ++----- rbi/stagehand/models/session_end_params.rbi | 69 ----- .../models/session_execute_params.rbi | 129 +++----- .../models/session_execute_response.rbi | 64 +++- .../models/session_extract_params.rbi | 114 ++----- .../models/session_navigate_params.rbi | 85 +----- .../models/session_observe_params.rbi | 114 ++----- .../models/session_replay_params.rbi | 89 ++++++ .../models/session_replay_response.rbi | 286 ++++++++++++++++++ rbi/stagehand/models/session_start_params.rbi | 80 +---- rbi/stagehand/resources/sessions.rbi | 171 +++-------- sig/stagehand/models.rbs | 4 +- sig/stagehand/models/model_config.rbs | 82 +++-- sig/stagehand/models/session_act_params.rbs | 59 +--- sig/stagehand/models/session_end_params.rbs | 35 --- .../models/session_execute_params.rbs | 68 ++--- .../models/session_execute_response.rbs | 29 +- .../models/session_extract_params.rbs | 59 +--- .../models/session_navigate_params.rbs | 45 +-- .../models/session_observe_params.rbs | 59 +--- .../models/session_replay_params.rbs | 41 +++ .../models/session_replay_response.rbs | 137 +++++++++ sig/stagehand/models/session_start_params.rbs | 42 +-- sig/stagehand/resources/sessions.rbs | 59 ++-- stagehand.gemspec | 1 + test/stagehand/client_test.rb | 30 +- test/stagehand/resources/sessions_test.rb | 19 +- 55 files changed, 1463 insertions(+), 2064 deletions(-) delete mode 100644 .env.example delete mode 100644 examples/basic.rb create mode 100644 lib/stagehand/models/session_replay_params.rb create mode 100644 lib/stagehand/models/session_replay_response.rb create mode 100644 rbi/stagehand/models/session_replay_params.rbi create mode 100644 rbi/stagehand/models/session_replay_response.rbi create mode 100644 sig/stagehand/models/session_replay_params.rbs create mode 100644 sig/stagehand/models/session_replay_response.rbs diff --git a/.env.example b/.env.example deleted file mode 100644 index 8092ff3..0000000 --- a/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -BROWSERBASE_API_KEY=bb_live_your_api_key_here -BROWSERBASE_PROJECT_ID=your-project-uuid-here -MODEL_API_KEY=sk-proj-your-llm-api-key-here diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 85ea54e..afcdebf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: @@ -36,7 +36,7 @@ jobs: runs-on: ${{ github.repository == 'stainless-sdks/stagehand-ruby' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: diff --git a/.github/workflows/publish-gem.yml b/.github/workflows/publish-gem.yml index 62df501..160f82b 100644 --- a/.github/workflows/publish-gem.yml +++ b/.github/workflows/publish-gem.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index f5b4310..801df3e 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -12,7 +12,7 @@ jobs: if: github.repository == 'browserbase/stagehand-ruby' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Check release environment run: | diff --git a/.gitignore b/.gitignore index a87eee7..3d26cee 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ .prism.log .ruby-lsp/ .yardoc/ -.env bin/tapioca Brewfile.lock.json doc/ diff --git a/.stats.yml b/.stats.yml index 1915416..094239e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 7 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-2c6c017cc9ca1fcfe7b3902edfa64fb0420bdb46b1740c7c862e81e2132d4f7c.yml -openapi_spec_hash: 220daf7e8f5897909a6c10e3385386e3 -config_hash: 1f709f8775e13029dc60064ef3a94355 +configured_endpoints: 8 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-089c8670f1d7c2e9fa8e5c97010db7c24b8f162eb7cfe76ffa41d70fa46efe2f.yml +openapi_spec_hash: 7a226aee8f3f2ab16febbe6bb35e1657 +config_hash: 8e4ed6629c178aa0c8aaf575cb07c544 diff --git a/Gemfile.lock b/Gemfile.lock index 8762e31..be97777 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -12,6 +12,7 @@ PATH remote: . specs: stagehand (3.0.1) + cgi connection_pool GEM @@ -42,6 +43,7 @@ GEM base64 (0.3.0) benchmark (0.5.0) bigdecimal (3.3.1) + cgi (0.5.1) concurrent-ruby (1.3.5) connection_pool (2.5.4) console (1.34.2) diff --git a/LICENSE b/LICENSE index 6b24314..d15d021 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2025 Stagehand + Copyright 2026 Stagehand Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index bb4f59c..273639b 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,23 @@ -
- -
-

- The AI Browser Automation Framework
- Read the Docs -

- -

- - - - MIT License - - - - - - Discord Community - - -

- -

- browserbase%2Fstagehand | Trendshift -

- -

-If you're looking for other languages, you can find them - here -

- -
- Vibe code - Stagehand with - - Director - - - - Director - -
- -## What is Stagehand? - -Stagehand is a browser automation framework used to control web browsers with natural language and code. By combining the power of AI with the precision of code, Stagehand makes web automation flexible, maintainable, and actually reliable. - -## 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 (and bridging the gap between the two) 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 when you know exactly what you want to do. - -2. **Go from AI-driven to repeatable workflows**: Stagehand lets you preview AI actions before running them, and also helps you easily cache repeatable actions to save time and tokens. - -3. **Write once, run forever**: Stagehand's auto-caching combined with self-healing remembers previous actions, runs without LLM inference, and knows when to involve AI whenever the website changes and your automation breaks. +# Stagehand Ruby API library + +The Stagehand Ruby library provides convenient access to the Stagehand REST API from any Ruby 3.2.0+ application. It ships with comprehensive types & docstrings in Yard, RBS, and RBI – [see below](https://github.com/browserbase/stagehand-ruby#Sorbet) for usage with Sorbet. The standard library's `net/http` is used as the HTTP transport, with connection pooling via the `connection_pool` gem. + +It is generated with [Stainless](https://www.stainless.com/). + +## MCP Server + +Use the Stagehand MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application. + +[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=stagehand-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInN0YWdlaGFuZC1tY3AiXX0) +[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22stagehand-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22stagehand-mcp%22%5D%7D) + +> Note: You may need to set environment variables in your MCP client. + +## Documentation + +Documentation for releases of this gem can be found [on RubyDoc](https://gemdocs.org/gems/stagehand). + +The REST API documentation can be found on [docs.stagehand.dev](https://docs.stagehand.dev). ## Installation @@ -81,115 +37,15 @@ gem "stagehand", "~> 3.0.1" require "bundler/setup" require "stagehand" -# Create a new Stagehand client with your credentials -client = Stagehand::Client.new( - browserbase_api_key: ENV["BROWSERBASE_API_KEY"], # defaults to ENV["BROWSERBASE_API_KEY"] - browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"], # defaults to ENV["BROWSERBASE_PROJECT_ID"] - model_api_key: ENV["MODEL_API_KEY"] # defaults to ENV["MODEL_API_KEY"] -) - -# Start a new browser session -start_response = client.sessions.start( - model_name: "openai/gpt-5-nano" -) -puts "Session started: #{start_response.data.session_id}" - -session_id = start_response.data.session_id - -# Navigate to a webpage -client.sessions.navigate( - session_id, - url: "https://news.ycombinator.com" -) -puts "Navigated to Hacker News" - -# Use Observe to find possible actions on the page -observe_response = client.sessions.observe( - session_id, - instruction: "find the link to view comments for the top post" -) - -actions = observe_response.data.result -puts "Found #{actions.length} possible actions" - -# Take the first action returned by Observe -action = actions.first -puts "Acting on: #{action.description}" - -# Pass the structured action to Act -# Convert the observe result to a hash and ensure method is set to "click" -act_response = client.sessions.act( - session_id, - input: action.to_h.merge(method: "click") -) -puts "Act completed: #{act_response.data.result[:message]}" - -# Extract data from the page -# We're now on the comments page, so extract the top comment text -extract_response = client.sessions.extract( - session_id, - instruction: "extract the text of the top comment on this page", - schema: { - type: "object", - properties: { - comment_text: { - type: "string", - description: "The text content of the top comment" - }, - author: { - type: "string", - description: "The username of the comment author" - } - }, - required: ["comment_text"] - } -) -puts "Extracted data: #{extract_response.data.result}" - -# Get the author from the extracted data -extracted_data = extract_response.data.result -author = extracted_data[:author] -puts "Looking up profile for author: #{author}" - -# Use the Agent to find the author's profile -# Execute runs an autonomous agent that can navigate and interact with pages -execute_response = client.sessions.execute( - session_id, - execute_options: { - instruction: "Find any personal website, GitHub, LinkedIn, or other best profile URL for the Hacker News user '#{author}'. " \ - "Click on their username to go to their profile page and look for any links they have shared.", - max_steps: 15 - }, - agent_config: { - model: Stagehand::ModelConfig::ModelConfigObject.new( - model_name: "openai/gpt-5-nano", - api_key: ENV["MODEL_API_KEY"] - ), - cua: false - } +stagehand = Stagehand::Client.new( + browserbase_api_key: ENV["BROWSERBASE_API_KEY"], # This is the default and can be omitted + browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"], # This is the default and can be omitted + model_api_key: ENV["MODEL_API_KEY"] # This is the default and can be omitted ) -puts "Agent completed: #{execute_response.data.result[:message]}" -puts "Agent success: #{execute_response.data.result[:success]}" -puts "Agent actions taken: #{execute_response.data.result[:actions]&.length || 0}" - -# End the session to cleanup browser resources -client.sessions.end_(session_id) -puts "Session ended" -``` - -### Running the Example - -Set the required environment variables and run the example script: -```bash -# Set your credentials -export BROWSERBASE_API_KEY="your-browserbase-api-key" -export BROWSERBASE_PROJECT_ID="your-browserbase-project-id" -export MODEL_API_KEY="your-openai-api-key" +response = stagehand.sessions.act("00000000-your-session-id-000000000000", input: "click the first link on the page") -# Install dependencies and run -bundle install -bundle exec ruby examples/basic.rb +puts(response.data) ``` ### Streaming @@ -367,11 +223,11 @@ stagehand.sessions.act("00000000-your-session-id-000000000000", **params) Since this library does not depend on `sorbet-runtime`, it cannot provide [`T::Enum`](https://sorbet.org/docs/tenum) instances. Instead, we provide "tagged symbols" instead, which is always a primitive at runtime: ```ruby -# :typescript -puts(Stagehand::SessionActParams::XLanguage::TYPESCRIPT) +# :true +puts(Stagehand::SessionActParams::XStreamResponse::TRUE) -# Revealed type: `T.all(Stagehand::SessionActParams::XLanguage, Symbol)` -T.reveal_type(Stagehand::SessionActParams::XLanguage::TYPESCRIPT) +# Revealed type: `T.all(Stagehand::SessionActParams::XStreamResponse, Symbol)` +T.reveal_type(Stagehand::SessionActParams::XStreamResponse::TRUE) ``` Enum parameters have a "relaxed" type, so you can either pass in enum constants or their literal value: @@ -379,13 +235,13 @@ Enum parameters have a "relaxed" type, so you can either pass in enum constants ```ruby # Using the enum constants preserves the tagged type information: stagehand.sessions.act( - x_language: Stagehand::SessionActParams::XLanguage::TYPESCRIPT, + x_stream_response: Stagehand::SessionActParams::XStreamResponse::TRUE, # … ) # Literal values are also permissible: stagehand.sessions.act( - x_language: :typescript, + x_stream_response: :true, # … ) ``` diff --git a/examples/basic.rb b/examples/basic.rb deleted file mode 100644 index 2b78ab5..0000000 --- a/examples/basic.rb +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -require "bundler/setup" -require "stagehand" - -# Set these environment variables before running this script: -# BROWSERBASE_API_KEY - Your Browserbase API key -# BROWSERBASE_PROJECT_ID - Your Browserbase project ID -# MODEL_API_KEY - Your AI model API key (e.g., OpenAI) - -# Create a new Stagehand client with your credentials -client = Stagehand::Client.new( - browserbase_api_key: ENV["BROWSERBASE_API_KEY"], - browserbase_project_id: ENV["BROWSERBASE_PROJECT_ID"], - model_api_key: ENV["MODEL_API_KEY"] -) - -# Start a new browser session -start_response = client.sessions.start( - model_name: "openai/gpt-5-nano" -) -puts "Session started: #{start_response.data.session_id}" - -session_id = start_response.data.session_id - -# Navigate to a webpage -client.sessions.navigate( - session_id, - url: "https://news.ycombinator.com" -) -puts "Navigated to Hacker News" - -# Use Observe to find possible actions on the page -observe_response = client.sessions.observe( - session_id, - instruction: "find the link to view comments for the top post" -) - -actions = observe_response.data.result -puts "Found #{actions.length} possible actions" - -if actions.empty? - puts "No actions found" - exit 1 -end - -# Take the first action returned by Observe -action = actions.first -puts "Acting on: #{action.description}" - -# Pass the structured action to Act -# Convert the observe result to a hash and ensure method is set to "click" -act_response = client.sessions.act( - session_id, - input: action.to_h.merge(method: "click") -) -puts "Act completed: #{act_response.data.result[:message]}" - -# Extract data from the page -# We're now on the comments page, so extract the top comment text -extract_response = client.sessions.extract( - session_id, - instruction: "extract the text of the top comment on this page", - schema: { - type: "object", - properties: { - comment_text: { - type: "string", - description: "The text content of the top comment" - }, - author: { - type: "string", - description: "The username of the comment author" - } - }, - required: ["comment_text"] - } -) -puts "Extracted data: #{extract_response.data.result}" - -# Get the author from the extracted data -extracted_data = extract_response.data.result -author = extracted_data[:author] -puts "Looking up profile for author: #{author}" - -# Use the Agent to find the author's profile -# Execute runs an autonomous agent that can navigate and interact with pages -execute_response = client.sessions.execute( - session_id, - execute_options: { - instruction: "Find any personal website, GitHub, LinkedIn, or other best profile URL for the Hacker News user '#{author}'. " \ - "Click on their username to go to their profile page and look for any links they have shared.", - max_steps: 15 - }, - agent_config: { - model: Stagehand::ModelConfig::ModelConfigObject.new( - model_name: "openai/gpt-5-nano", - api_key: ENV["MODEL_API_KEY"] - ), - cua: false - } -) -puts "Agent completed: #{execute_response.data.result[:message]}" -puts "Agent success: #{execute_response.data.result[:success]}" -puts "Agent actions taken: #{execute_response.data.result[:actions]&.length || 0}" - -# End the session to cleanup browser resources -client.sessions.end_(session_id) -puts "Session ended" diff --git a/lib/stagehand.rb b/lib/stagehand.rb index b056332..93bd644 100644 --- a/lib/stagehand.rb +++ b/lib/stagehand.rb @@ -68,6 +68,8 @@ require_relative "stagehand/models/session_navigate_response" require_relative "stagehand/models/session_observe_params" require_relative "stagehand/models/session_observe_response" +require_relative "stagehand/models/session_replay_params" +require_relative "stagehand/models/session_replay_response" require_relative "stagehand/models/session_start_params" require_relative "stagehand/models/session_start_response" require_relative "stagehand/models/stream_event" diff --git a/lib/stagehand/internal/type/union.rb b/lib/stagehand/internal/type/union.rb index 618dcd0..14b9cfe 100644 --- a/lib/stagehand/internal/type/union.rb +++ b/lib/stagehand/internal/type/union.rb @@ -4,17 +4,6 @@ module Stagehand module Internal module Type # @api private - # - # @example - # # `model_config` is a `Stagehand::ModelConfig` - # case model_config - # when String - # # ... - # when Stagehand::ModelConfig::ModelConfigObject - # puts(model_config.model_name) - # else - # puts(model_config) - # end module Union include Stagehand::Internal::Type::Converter include Stagehand::Internal::Util::SorbetRuntimeSupport diff --git a/lib/stagehand/internal/util.rb b/lib/stagehand/internal/util.rb index f1c7b1e..1698a6f 100644 --- a/lib/stagehand/internal/util.rb +++ b/lib/stagehand/internal/util.rb @@ -272,12 +272,7 @@ class << self # # @return [Hash{String=>Array}] def decode_query(query) - return {} if query.nil? || query.empty? - - # Use URI.decode_www_form for Ruby 3.2+ and 4.0+ compatibility - URI.decode_www_form(query.to_s).each_with_object({}) do |(key, value), hash| - (hash[key] ||= []) << value - end + CGI.parse(query.to_s) end # @api private diff --git a/lib/stagehand/models.rb b/lib/stagehand/models.rb index 463b760..3453e8e 100644 --- a/lib/stagehand/models.rb +++ b/lib/stagehand/models.rb @@ -55,6 +55,8 @@ module Stagehand SessionObserveParams = Stagehand::Models::SessionObserveParams + SessionReplayParams = Stagehand::Models::SessionReplayParams + SessionStartParams = Stagehand::Models::SessionStartParams StreamEvent = Stagehand::Models::StreamEvent diff --git a/lib/stagehand/models/model_config.rb b/lib/stagehand/models/model_config.rb index 69764f6..44ad028 100644 --- a/lib/stagehand/models/model_config.rb +++ b/lib/stagehand/models/model_config.rb @@ -2,68 +2,54 @@ module Stagehand module Models - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') - module ModelConfig - extend Stagehand::Internal::Type::Union - - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', 'anthropic/claude-4.5-opus') - variant String - - variant -> { Stagehand::ModelConfig::ModelConfigObject } - - class ModelConfigObject < Stagehand::Internal::Type::BaseModel - # @!attribute model_name - # Model name string without prefix (e.g., 'gpt-5-nano', 'claude-4.5-opus') - # - # @return [String] - required :model_name, String, api_name: :modelName - - # @!attribute api_key - # API key for the model provider - # - # @return [String, nil] - optional :api_key, String, api_name: :apiKey - - # @!attribute base_url - # Base URL for the model provider - # - # @return [String, nil] - optional :base_url, String, api_name: :baseURL - - # @!attribute provider - # AI provider for the model (or provide a baseURL endpoint instead) - # - # @return [Symbol, Stagehand::Models::ModelConfig::ModelConfigObject::Provider, nil] - optional :provider, enum: -> { Stagehand::ModelConfig::ModelConfigObject::Provider } - - # @!method initialize(model_name:, api_key: nil, base_url: nil, provider: nil) - # @param model_name [String] Model name string without prefix (e.g., 'gpt-5-nano', 'claude-4.5-opus') - # - # @param api_key [String] API key for the model provider - # - # @param base_url [String] Base URL for the model provider - # - # @param provider [Symbol, Stagehand::Models::ModelConfig::ModelConfigObject::Provider] AI provider for the model (or provide a baseURL endpoint instead) - - # AI provider for the model (or provide a baseURL endpoint instead) - # - # @see Stagehand::Models::ModelConfig::ModelConfigObject#provider - module Provider - extend Stagehand::Internal::Type::Enum - - OPENAI = :openai - ANTHROPIC = :anthropic - GOOGLE = :google - MICROSOFT = :microsoft - - # @!method self.values - # @return [Array] - end + class ModelConfig < Stagehand::Internal::Type::BaseModel + # @!attribute model_name + # Model name string with provider prefix (e.g., 'openai/gpt-5-nano') + # + # @return [String] + required :model_name, String, api_name: :modelName + + # @!attribute api_key + # API key for the model provider + # + # @return [String, nil] + optional :api_key, String, api_name: :apiKey + + # @!attribute base_url + # Base URL for the model provider + # + # @return [String, nil] + optional :base_url, String, api_name: :baseURL + + # @!attribute provider + # AI provider for the model (or provide a baseURL endpoint instead) + # + # @return [Symbol, Stagehand::Models::ModelConfig::Provider, nil] + optional :provider, enum: -> { Stagehand::ModelConfig::Provider } + + # @!method initialize(model_name:, api_key: nil, base_url: nil, provider: nil) + # @param model_name [String] Model name string with provider prefix (e.g., 'openai/gpt-5-nano') + # + # @param api_key [String] API key for the model provider + # + # @param base_url [String] Base URL for the model provider + # + # @param provider [Symbol, Stagehand::Models::ModelConfig::Provider] AI provider for the model (or provide a baseURL endpoint instead) + + # AI provider for the model (or provide a baseURL endpoint instead) + # + # @see Stagehand::Models::ModelConfig#provider + module Provider + extend Stagehand::Internal::Type::Enum + + OPENAI = :openai + ANTHROPIC = :anthropic + GOOGLE = :google + MICROSOFT = :microsoft + + # @!method self.values + # @return [Array] end - - # @!method self.variants - # @return [Array(String, Stagehand::Models::ModelConfig::ModelConfigObject)] end end end diff --git a/lib/stagehand/models/session_act_params.rb b/lib/stagehand/models/session_act_params.rb index 83f4fed..c52fa34 100644 --- a/lib/stagehand/models/session_act_params.rb +++ b/lib/stagehand/models/session_act_params.rb @@ -19,50 +19,26 @@ class SessionActParams < Stagehand::Internal::Type::BaseModel # Target frame ID for the action # # @return [String, nil] - optional :frame_id, String, api_name: :frameId + optional :frame_id, String, api_name: :frameId, nil?: true # @!attribute options # # @return [Stagehand::Models::SessionActParams::Options, nil] optional :options, -> { Stagehand::SessionActParams::Options } - # @!attribute x_language - # Client SDK language - # - # @return [Symbol, Stagehand::Models::SessionActParams::XLanguage, nil] - optional :x_language, enum: -> { Stagehand::SessionActParams::XLanguage } - - # @!attribute x_sdk_version - # Version of the Stagehand SDK - # - # @return [String, nil] - optional :x_sdk_version, String - - # @!attribute x_sent_at - # ISO timestamp when request was sent - # - # @return [Time, nil] - optional :x_sent_at, Time - # @!attribute x_stream_response # Whether to stream the response via SSE # # @return [Symbol, Stagehand::Models::SessionActParams::XStreamResponse, nil] optional :x_stream_response, enum: -> { Stagehand::SessionActParams::XStreamResponse } - # @!method initialize(input:, frame_id: nil, options: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @!method initialize(input:, frame_id: nil, options: nil, x_stream_response: nil, request_options: {}) # @param input [String, Stagehand::Models::Action] Natural language instruction or Action object # - # @param frame_id [String] Target frame ID for the action + # @param frame_id [String, nil] Target frame ID for the action # # @param options [Stagehand::Models::SessionActParams::Options] # - # @param x_language [Symbol, Stagehand::Models::SessionActParams::XLanguage] Client SDK language - # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionActParams::XStreamResponse] Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}] @@ -82,11 +58,10 @@ module Input class Options < Stagehand::Internal::Type::BaseModel # @!attribute model - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # - # @return [String, Stagehand::Models::ModelConfig::ModelConfigObject, nil] - optional :model, union: -> { Stagehand::ModelConfig } + # @return [Stagehand::Models::ModelConfig, String, nil] + optional :model, union: -> { Stagehand::SessionActParams::Options::Model } # @!attribute timeout # Timeout in ms for the action @@ -101,26 +76,25 @@ class Options < Stagehand::Internal::Type::BaseModel optional :variables, Stagehand::Internal::Type::HashOf[String] # @!method initialize(model: nil, timeout: nil, variables: nil) - # Some parameter documentations has been truncated, see - # {Stagehand::Models::SessionActParams::Options} for more details. - # - # @param model [String, Stagehand::Models::ModelConfig::ModelConfigObject] Model name string with provider prefix (e.g., 'openai/gpt-5-nano', 'anthropic/cl + # @param model [Stagehand::Models::ModelConfig, String] Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # # @param timeout [Float] Timeout in ms for the action # # @param variables [Hash{Symbol=>String}] Variables to substitute in the action instruction - end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + # + # @see Stagehand::Models::SessionActParams::Options#model + module Model + extend Stagehand::Internal::Type::Union - TYPESCRIPT = :typescript - PYTHON = :python - PLAYGROUND = :playground + variant -> { Stagehand::ModelConfig } - # @!method self.values - # @return [Array] + variant String + + # @!method self.variants + # @return [Array(Stagehand::Models::ModelConfig, String)] + end end # Whether to stream the response via SSE diff --git a/lib/stagehand/models/session_end_params.rb b/lib/stagehand/models/session_end_params.rb index a471528..b5a19f6 100644 --- a/lib/stagehand/models/session_end_params.rb +++ b/lib/stagehand/models/session_end_params.rb @@ -7,53 +7,17 @@ class SessionEndParams < Stagehand::Internal::Type::BaseModel extend Stagehand::Internal::Type::RequestParameters::Converter include Stagehand::Internal::Type::RequestParameters - # @!attribute x_language - # Client SDK language - # - # @return [Symbol, Stagehand::Models::SessionEndParams::XLanguage, nil] - optional :x_language, enum: -> { Stagehand::SessionEndParams::XLanguage } - - # @!attribute x_sdk_version - # Version of the Stagehand SDK - # - # @return [String, nil] - optional :x_sdk_version, String - - # @!attribute x_sent_at - # ISO timestamp when request was sent - # - # @return [Time, nil] - optional :x_sent_at, Time - # @!attribute x_stream_response # Whether to stream the response via SSE # # @return [Symbol, Stagehand::Models::SessionEndParams::XStreamResponse, nil] optional :x_stream_response, enum: -> { Stagehand::SessionEndParams::XStreamResponse } - # @!method initialize(x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) - # @param x_language [Symbol, Stagehand::Models::SessionEndParams::XLanguage] Client SDK language - # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent - # + # @!method initialize(x_stream_response: nil, request_options: {}) # @param x_stream_response [Symbol, Stagehand::Models::SessionEndParams::XStreamResponse] Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}] - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT = :typescript - PYTHON = :python - PLAYGROUND = :playground - - # @!method self.values - # @return [Array] - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/lib/stagehand/models/session_execute_params.rb b/lib/stagehand/models/session_execute_params.rb index 0507c94..8616536 100644 --- a/lib/stagehand/models/session_execute_params.rb +++ b/lib/stagehand/models/session_execute_params.rb @@ -25,25 +25,13 @@ class SessionExecuteParams < Stagehand::Internal::Type::BaseModel # Target frame ID for the agent # # @return [String, nil] - optional :frame_id, String, api_name: :frameId + optional :frame_id, String, api_name: :frameId, nil?: true - # @!attribute x_language - # Client SDK language + # @!attribute should_cache + # If true, the server captures a cache entry and returns it to the client # - # @return [Symbol, Stagehand::Models::SessionExecuteParams::XLanguage, nil] - optional :x_language, enum: -> { Stagehand::SessionExecuteParams::XLanguage } - - # @!attribute x_sdk_version - # Version of the Stagehand SDK - # - # @return [String, nil] - optional :x_sdk_version, String - - # @!attribute x_sent_at - # ISO timestamp when request was sent - # - # @return [Time, nil] - optional :x_sent_at, Time + # @return [Boolean, nil] + optional :should_cache, Stagehand::Internal::Type::Boolean, api_name: :shouldCache # @!attribute x_stream_response # Whether to stream the response via SSE @@ -51,18 +39,14 @@ class SessionExecuteParams < Stagehand::Internal::Type::BaseModel # @return [Symbol, Stagehand::Models::SessionExecuteParams::XStreamResponse, nil] optional :x_stream_response, enum: -> { Stagehand::SessionExecuteParams::XStreamResponse } - # @!method initialize(agent_config:, execute_options:, frame_id: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @!method initialize(agent_config:, execute_options:, frame_id: nil, should_cache: nil, x_stream_response: nil, request_options: {}) # @param agent_config [Stagehand::Models::SessionExecuteParams::AgentConfig] # # @param execute_options [Stagehand::Models::SessionExecuteParams::ExecuteOptions] # - # @param frame_id [String] Target frame ID for the agent - # - # @param x_language [Symbol, Stagehand::Models::SessionExecuteParams::XLanguage] Client SDK language + # @param frame_id [String, nil] Target frame ID for the agent # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent + # @param should_cache [Boolean] If true, the server captures a cache entry and returns it to the client # # @param x_stream_response [Symbol, Stagehand::Models::SessionExecuteParams::XStreamResponse] Whether to stream the response via SSE # @@ -76,11 +60,10 @@ class AgentConfig < Stagehand::Internal::Type::BaseModel optional :cua, Stagehand::Internal::Type::Boolean # @!attribute model - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # - # @return [String, Stagehand::Models::ModelConfig::ModelConfigObject, nil] - optional :model, union: -> { Stagehand::ModelConfig } + # @return [Stagehand::Models::ModelConfig, String, nil] + optional :model, union: -> { Stagehand::SessionExecuteParams::AgentConfig::Model } # @!attribute provider # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) @@ -95,17 +78,28 @@ class AgentConfig < Stagehand::Internal::Type::BaseModel optional :system_prompt, String, api_name: :systemPrompt # @!method initialize(cua: nil, model: nil, provider: nil, system_prompt: nil) - # Some parameter documentations has been truncated, see - # {Stagehand::Models::SessionExecuteParams::AgentConfig} for more details. - # # @param cua [Boolean] Enable Computer Use Agent mode # - # @param model [String, Stagehand::Models::ModelConfig::ModelConfigObject] Model name string with provider prefix (e.g., 'openai/gpt-5-nano', 'anthropic/cl + # @param model [Stagehand::Models::ModelConfig, String] Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # # @param provider [Symbol, Stagehand::Models::SessionExecuteParams::AgentConfig::Provider] AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) # # @param system_prompt [String] Custom system prompt for the agent + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + # + # @see Stagehand::Models::SessionExecuteParams::AgentConfig#model + module Model + extend Stagehand::Internal::Type::Union + + variant -> { Stagehand::ModelConfig } + + variant String + + # @!method self.variants + # @return [Array(Stagehand::Models::ModelConfig, String)] + end + # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) # # @see Stagehand::Models::SessionExecuteParams::AgentConfig#provider @@ -149,18 +143,6 @@ class ExecuteOptions < Stagehand::Internal::Type::BaseModel # @param max_steps [Float] Maximum number of steps the agent can take end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT = :typescript - PYTHON = :python - PLAYGROUND = :playground - - # @!method self.values - # @return [Array] - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/lib/stagehand/models/session_execute_response.rb b/lib/stagehand/models/session_execute_response.rb index 661f8f9..cac1ec9 100644 --- a/lib/stagehand/models/session_execute_response.rb +++ b/lib/stagehand/models/session_execute_response.rb @@ -29,8 +29,16 @@ class Data < Stagehand::Internal::Type::BaseModel # @return [Stagehand::Models::SessionExecuteResponse::Data::Result] required :result, -> { Stagehand::Models::SessionExecuteResponse::Data::Result } - # @!method initialize(result:) + # @!attribute cache_entry + # + # @return [Stagehand::Models::SessionExecuteResponse::Data::CacheEntry, nil] + optional :cache_entry, + -> { Stagehand::Models::SessionExecuteResponse::Data::CacheEntry }, + api_name: :cacheEntry + + # @!method initialize(result:, cache_entry: nil) # @param result [Stagehand::Models::SessionExecuteResponse::Data::Result] + # @param cache_entry [Stagehand::Models::SessionExecuteResponse::Data::CacheEntry] # @see Stagehand::Models::SessionExecuteResponse::Data#result class Result < Stagehand::Internal::Type::BaseModel @@ -178,6 +186,26 @@ class Usage < Stagehand::Internal::Type::BaseModel # @param reasoning_tokens [Float] end end + + # @see Stagehand::Models::SessionExecuteResponse::Data#cache_entry + class CacheEntry < Stagehand::Internal::Type::BaseModel + # @!attribute cache_key + # Opaque cache identifier computed from instruction, URL, options, and config + # + # @return [String] + required :cache_key, String, api_name: :cacheKey + + # @!attribute entry + # Serialized cache entry that can be written to disk + # + # @return [Object] + required :entry, Stagehand::Internal::Type::Unknown + + # @!method initialize(cache_key:, entry:) + # @param cache_key [String] Opaque cache identifier computed from instruction, URL, options, and config + # + # @param entry [Object] Serialized cache entry that can be written to disk + end end end end diff --git a/lib/stagehand/models/session_extract_params.rb b/lib/stagehand/models/session_extract_params.rb index 266d38b..913d520 100644 --- a/lib/stagehand/models/session_extract_params.rb +++ b/lib/stagehand/models/session_extract_params.rb @@ -13,7 +13,7 @@ class SessionExtractParams < Stagehand::Internal::Type::BaseModel # Target frame ID for the extraction # # @return [String, nil] - optional :frame_id, String, api_name: :frameId + optional :frame_id, String, api_name: :frameId, nil?: true # @!attribute instruction # Natural language instruction for what to extract @@ -32,32 +32,14 @@ class SessionExtractParams < Stagehand::Internal::Type::BaseModel # @return [Hash{Symbol=>Object}, nil] optional :schema, Stagehand::Internal::Type::HashOf[Stagehand::Internal::Type::Unknown] - # @!attribute x_language - # Client SDK language - # - # @return [Symbol, Stagehand::Models::SessionExtractParams::XLanguage, nil] - optional :x_language, enum: -> { Stagehand::SessionExtractParams::XLanguage } - - # @!attribute x_sdk_version - # Version of the Stagehand SDK - # - # @return [String, nil] - optional :x_sdk_version, String - - # @!attribute x_sent_at - # ISO timestamp when request was sent - # - # @return [Time, nil] - optional :x_sent_at, Time - # @!attribute x_stream_response # Whether to stream the response via SSE # # @return [Symbol, Stagehand::Models::SessionExtractParams::XStreamResponse, nil] optional :x_stream_response, enum: -> { Stagehand::SessionExtractParams::XStreamResponse } - # @!method initialize(frame_id: nil, instruction: nil, options: nil, schema: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) - # @param frame_id [String] Target frame ID for the extraction + # @!method initialize(frame_id: nil, instruction: nil, options: nil, schema: nil, x_stream_response: nil, request_options: {}) + # @param frame_id [String, nil] Target frame ID for the extraction # # @param instruction [String] Natural language instruction for what to extract # @@ -65,23 +47,16 @@ class SessionExtractParams < Stagehand::Internal::Type::BaseModel # # @param schema [Hash{Symbol=>Object}] JSON Schema defining the structure of data to extract # - # @param x_language [Symbol, Stagehand::Models::SessionExtractParams::XLanguage] Client SDK language - # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionExtractParams::XStreamResponse] Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}] class Options < Stagehand::Internal::Type::BaseModel # @!attribute model - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # - # @return [String, Stagehand::Models::ModelConfig::ModelConfigObject, nil] - optional :model, union: -> { Stagehand::ModelConfig } + # @return [Stagehand::Models::ModelConfig, String, nil] + optional :model, union: -> { Stagehand::SessionExtractParams::Options::Model } # @!attribute selector # CSS selector to scope extraction to a specific element @@ -96,26 +71,25 @@ class Options < Stagehand::Internal::Type::BaseModel optional :timeout, Float # @!method initialize(model: nil, selector: nil, timeout: nil) - # Some parameter documentations has been truncated, see - # {Stagehand::Models::SessionExtractParams::Options} for more details. - # - # @param model [String, Stagehand::Models::ModelConfig::ModelConfigObject] Model name string with provider prefix (e.g., 'openai/gpt-5-nano', 'anthropic/cl + # @param model [Stagehand::Models::ModelConfig, String] Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # # @param selector [String] CSS selector to scope extraction to a specific element # # @param timeout [Float] Timeout in ms for the extraction - end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + # + # @see Stagehand::Models::SessionExtractParams::Options#model + module Model + extend Stagehand::Internal::Type::Union - TYPESCRIPT = :typescript - PYTHON = :python - PLAYGROUND = :playground + variant -> { Stagehand::ModelConfig } - # @!method self.values - # @return [Array] + variant String + + # @!method self.variants + # @return [Array(Stagehand::Models::ModelConfig, String)] + end end # Whether to stream the response via SSE diff --git a/lib/stagehand/models/session_navigate_params.rb b/lib/stagehand/models/session_navigate_params.rb index 61f56e8..62545b9 100644 --- a/lib/stagehand/models/session_navigate_params.rb +++ b/lib/stagehand/models/session_navigate_params.rb @@ -17,7 +17,7 @@ class SessionNavigateParams < Stagehand::Internal::Type::BaseModel # Target frame ID for the navigation # # @return [String, nil] - optional :frame_id, String, api_name: :frameId + optional :frame_id, String, api_name: :frameId, nil?: true # @!attribute options # @@ -30,45 +30,21 @@ class SessionNavigateParams < Stagehand::Internal::Type::BaseModel # @return [Boolean, nil] optional :stream_response, Stagehand::Internal::Type::Boolean, api_name: :streamResponse - # @!attribute x_language - # Client SDK language - # - # @return [Symbol, Stagehand::Models::SessionNavigateParams::XLanguage, nil] - optional :x_language, enum: -> { Stagehand::SessionNavigateParams::XLanguage } - - # @!attribute x_sdk_version - # Version of the Stagehand SDK - # - # @return [String, nil] - optional :x_sdk_version, String - - # @!attribute x_sent_at - # ISO timestamp when request was sent - # - # @return [Time, nil] - optional :x_sent_at, Time - # @!attribute x_stream_response # Whether to stream the response via SSE # # @return [Symbol, Stagehand::Models::SessionNavigateParams::XStreamResponse, nil] optional :x_stream_response, enum: -> { Stagehand::SessionNavigateParams::XStreamResponse } - # @!method initialize(url:, frame_id: nil, options: nil, stream_response: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @!method initialize(url:, frame_id: nil, options: nil, stream_response: nil, x_stream_response: nil, request_options: {}) # @param url [String] URL to navigate to # - # @param frame_id [String] Target frame ID for the navigation + # @param frame_id [String, nil] Target frame ID for the navigation # # @param options [Stagehand::Models::SessionNavigateParams::Options] # # @param stream_response [Boolean] Whether to stream the response via SSE # - # @param x_language [Symbol, Stagehand::Models::SessionNavigateParams::XLanguage] Client SDK language - # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionNavigateParams::XStreamResponse] Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}] @@ -116,18 +92,6 @@ module WaitUntil end end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT = :typescript - PYTHON = :python - PLAYGROUND = :playground - - # @!method self.values - # @return [Array] - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/lib/stagehand/models/session_observe_params.rb b/lib/stagehand/models/session_observe_params.rb index 54da902..8682fbe 100644 --- a/lib/stagehand/models/session_observe_params.rb +++ b/lib/stagehand/models/session_observe_params.rb @@ -13,7 +13,7 @@ class SessionObserveParams < Stagehand::Internal::Type::BaseModel # Target frame ID for the observation # # @return [String, nil] - optional :frame_id, String, api_name: :frameId + optional :frame_id, String, api_name: :frameId, nil?: true # @!attribute instruction # Natural language instruction for what actions to find @@ -26,54 +26,29 @@ class SessionObserveParams < Stagehand::Internal::Type::BaseModel # @return [Stagehand::Models::SessionObserveParams::Options, nil] optional :options, -> { Stagehand::SessionObserveParams::Options } - # @!attribute x_language - # Client SDK language - # - # @return [Symbol, Stagehand::Models::SessionObserveParams::XLanguage, nil] - optional :x_language, enum: -> { Stagehand::SessionObserveParams::XLanguage } - - # @!attribute x_sdk_version - # Version of the Stagehand SDK - # - # @return [String, nil] - optional :x_sdk_version, String - - # @!attribute x_sent_at - # ISO timestamp when request was sent - # - # @return [Time, nil] - optional :x_sent_at, Time - # @!attribute x_stream_response # Whether to stream the response via SSE # # @return [Symbol, Stagehand::Models::SessionObserveParams::XStreamResponse, nil] optional :x_stream_response, enum: -> { Stagehand::SessionObserveParams::XStreamResponse } - # @!method initialize(frame_id: nil, instruction: nil, options: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) - # @param frame_id [String] Target frame ID for the observation + # @!method initialize(frame_id: nil, instruction: nil, options: nil, x_stream_response: nil, request_options: {}) + # @param frame_id [String, nil] Target frame ID for the observation # # @param instruction [String] Natural language instruction for what actions to find # # @param options [Stagehand::Models::SessionObserveParams::Options] # - # @param x_language [Symbol, Stagehand::Models::SessionObserveParams::XLanguage] Client SDK language - # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionObserveParams::XStreamResponse] Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}] class Options < Stagehand::Internal::Type::BaseModel # @!attribute model - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # - # @return [String, Stagehand::Models::ModelConfig::ModelConfigObject, nil] - optional :model, union: -> { Stagehand::ModelConfig } + # @return [Stagehand::Models::ModelConfig, String, nil] + optional :model, union: -> { Stagehand::SessionObserveParams::Options::Model } # @!attribute selector # CSS selector to scope observation to a specific element @@ -88,26 +63,25 @@ class Options < Stagehand::Internal::Type::BaseModel optional :timeout, Float # @!method initialize(model: nil, selector: nil, timeout: nil) - # Some parameter documentations has been truncated, see - # {Stagehand::Models::SessionObserveParams::Options} for more details. - # - # @param model [String, Stagehand::Models::ModelConfig::ModelConfigObject] Model name string with provider prefix (e.g., 'openai/gpt-5-nano', 'anthropic/cl + # @param model [Stagehand::Models::ModelConfig, String] Model configuration object or model name string (e.g., 'openai/gpt-5-nano') # # @param selector [String] CSS selector to scope observation to a specific element # # @param timeout [Float] Timeout in ms for the observation - end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + # + # @see Stagehand::Models::SessionObserveParams::Options#model + module Model + extend Stagehand::Internal::Type::Union - TYPESCRIPT = :typescript - PYTHON = :python - PLAYGROUND = :playground + variant -> { Stagehand::ModelConfig } - # @!method self.values - # @return [Array] + variant String + + # @!method self.variants + # @return [Array(Stagehand::Models::ModelConfig, String)] + end end # Whether to stream the response via SSE diff --git a/lib/stagehand/models/session_replay_params.rb b/lib/stagehand/models/session_replay_params.rb new file mode 100644 index 0000000..b01594b --- /dev/null +++ b/lib/stagehand/models/session_replay_params.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Stagehand + module Models + # @see Stagehand::Resources::Sessions#replay + class SessionReplayParams < Stagehand::Internal::Type::BaseModel + extend Stagehand::Internal::Type::RequestParameters::Converter + include Stagehand::Internal::Type::RequestParameters + + # @!attribute x_stream_response + # Whether to stream the response via SSE + # + # @return [Symbol, Stagehand::Models::SessionReplayParams::XStreamResponse, nil] + optional :x_stream_response, enum: -> { Stagehand::SessionReplayParams::XStreamResponse } + + # @!method initialize(x_stream_response: nil, request_options: {}) + # @param x_stream_response [Symbol, Stagehand::Models::SessionReplayParams::XStreamResponse] Whether to stream the response via SSE + # + # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}] + + # Whether to stream the response via SSE + module XStreamResponse + extend Stagehand::Internal::Type::Enum + + TRUE = :true + FALSE = :false + + # @!method self.values + # @return [Array] + end + end + end +end diff --git a/lib/stagehand/models/session_replay_response.rb b/lib/stagehand/models/session_replay_response.rb new file mode 100644 index 0000000..da61e51 --- /dev/null +++ b/lib/stagehand/models/session_replay_response.rb @@ -0,0 +1,100 @@ +# frozen_string_literal: true + +module Stagehand + module Models + # @see Stagehand::Resources::Sessions#replay + class SessionReplayResponse < Stagehand::Internal::Type::BaseModel + # @!attribute data + # + # @return [Stagehand::Models::SessionReplayResponse::Data] + required :data, -> { Stagehand::Models::SessionReplayResponse::Data } + + # @!attribute success + # Indicates whether the request was successful + # + # @return [Boolean] + required :success, Stagehand::Internal::Type::Boolean + + # @!method initialize(data:, success:) + # @param data [Stagehand::Models::SessionReplayResponse::Data] + # + # @param success [Boolean] Indicates whether the request was successful + + # @see Stagehand::Models::SessionReplayResponse#data + class Data < Stagehand::Internal::Type::BaseModel + # @!attribute pages + # + # @return [Array, nil] + optional :pages, + -> { Stagehand::Internal::Type::ArrayOf[Stagehand::Models::SessionReplayResponse::Data::Page] } + + # @!method initialize(pages: nil) + # @param pages [Array] + + class Page < Stagehand::Internal::Type::BaseModel + # @!attribute actions + # + # @return [Array, nil] + optional :actions, + -> { Stagehand::Internal::Type::ArrayOf[Stagehand::Models::SessionReplayResponse::Data::Page::Action] } + + # @!method initialize(actions: nil) + # @param actions [Array] + + class Action < Stagehand::Internal::Type::BaseModel + # @!attribute method_ + # + # @return [String, nil] + optional :method_, String, api_name: :method + + # @!attribute token_usage + # + # @return [Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage, nil] + optional :token_usage, + -> { Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage }, + api_name: :tokenUsage + + # @!method initialize(method_: nil, token_usage: nil) + # @param method_ [String] + # @param token_usage [Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage] + + # @see Stagehand::Models::SessionReplayResponse::Data::Page::Action#token_usage + class TokenUsage < Stagehand::Internal::Type::BaseModel + # @!attribute cached_input_tokens + # + # @return [Float, nil] + optional :cached_input_tokens, Float, api_name: :cachedInputTokens + + # @!attribute input_tokens + # + # @return [Float, nil] + optional :input_tokens, Float, api_name: :inputTokens + + # @!attribute output_tokens + # + # @return [Float, nil] + optional :output_tokens, Float, api_name: :outputTokens + + # @!attribute reasoning_tokens + # + # @return [Float, nil] + optional :reasoning_tokens, Float, api_name: :reasoningTokens + + # @!attribute time_ms + # + # @return [Float, nil] + optional :time_ms, Float, api_name: :timeMs + + # @!method initialize(cached_input_tokens: nil, input_tokens: nil, output_tokens: nil, reasoning_tokens: nil, time_ms: nil) + # @param cached_input_tokens [Float] + # @param input_tokens [Float] + # @param output_tokens [Float] + # @param reasoning_tokens [Float] + # @param time_ms [Float] + end + end + end + end + end + end +end diff --git a/lib/stagehand/models/session_start_params.rb b/lib/stagehand/models/session_start_params.rb index a2fda9c..8ccab03 100644 --- a/lib/stagehand/models/session_start_params.rb +++ b/lib/stagehand/models/session_start_params.rb @@ -72,31 +72,13 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # @return [Boolean, nil] optional :wait_for_captcha_solves, Stagehand::Internal::Type::Boolean, api_name: :waitForCaptchaSolves - # @!attribute x_language - # Client SDK language - # - # @return [Symbol, Stagehand::Models::SessionStartParams::XLanguage, nil] - optional :x_language, enum: -> { Stagehand::SessionStartParams::XLanguage } - - # @!attribute x_sdk_version - # Version of the Stagehand SDK - # - # @return [String, nil] - optional :x_sdk_version, String - - # @!attribute x_sent_at - # ISO timestamp when request was sent - # - # @return [Time, nil] - optional :x_sent_at, Time - # @!attribute x_stream_response # Whether to stream the response via SSE # # @return [Symbol, Stagehand::Models::SessionStartParams::XStreamResponse, nil] optional :x_stream_response, enum: -> { Stagehand::SessionStartParams::XStreamResponse } - # @!method initialize(model_name:, act_timeout_ms: nil, browser: nil, browserbase_session_create_params: nil, browserbase_session_id: nil, dom_settle_timeout_ms: nil, experimental: nil, self_heal: nil, system_prompt: nil, verbose: nil, wait_for_captcha_solves: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @!method initialize(model_name:, act_timeout_ms: nil, browser: nil, browserbase_session_create_params: nil, browserbase_session_id: nil, dom_settle_timeout_ms: nil, experimental: nil, self_heal: nil, system_prompt: nil, verbose: nil, wait_for_captcha_solves: nil, x_stream_response: nil, request_options: {}) # @param model_name [String] Model name to use for AI operations # # @param act_timeout_ms [Float] Timeout in ms for act operations (deprecated, v2 only) @@ -119,12 +101,6 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # # @param wait_for_captcha_solves [Boolean] Wait for captcha solves (deprecated, v2 only) # - # @param x_language [Symbol, Stagehand::Models::SessionStartParams::XLanguage] Client SDK language - # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionStartParams::XStreamResponse] Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}] @@ -230,6 +206,11 @@ class LaunchOptions < Stagehand::Internal::Type::BaseModel # @return [String, nil] optional :locale, String + # @!attribute port + # + # @return [Float, nil] + optional :port, Float + # @!attribute preserve_user_data_dir # # @return [Boolean, nil] @@ -250,7 +231,7 @@ class LaunchOptions < Stagehand::Internal::Type::BaseModel # @return [Stagehand::Models::SessionStartParams::Browser::LaunchOptions::Viewport, nil] optional :viewport, -> { Stagehand::SessionStartParams::Browser::LaunchOptions::Viewport } - # @!method initialize(accept_downloads: nil, args: nil, cdp_url: nil, chromium_sandbox: nil, connect_timeout_ms: nil, device_scale_factor: nil, devtools: nil, downloads_path: nil, executable_path: nil, has_touch: nil, headless: nil, ignore_default_args: nil, ignore_https_errors: nil, locale: nil, preserve_user_data_dir: nil, proxy: nil, user_data_dir: nil, viewport: nil) + # @!method initialize(accept_downloads: nil, args: nil, cdp_url: nil, chromium_sandbox: nil, connect_timeout_ms: nil, device_scale_factor: nil, devtools: nil, downloads_path: nil, executable_path: nil, has_touch: nil, headless: nil, ignore_default_args: nil, ignore_https_errors: nil, locale: nil, port: nil, preserve_user_data_dir: nil, proxy: nil, user_data_dir: nil, viewport: nil) # @param accept_downloads [Boolean] # @param args [Array] # @param cdp_url [String] @@ -265,6 +246,7 @@ class LaunchOptions < Stagehand::Internal::Type::BaseModel # @param ignore_default_args [Boolean, Array] # @param ignore_https_errors [Boolean] # @param locale [String] + # @param port [Float] # @param preserve_user_data_dir [Boolean] # @param proxy [Stagehand::Models::SessionStartParams::Browser::LaunchOptions::Proxy] # @param user_data_dir [String] @@ -765,18 +747,6 @@ module Verbose # @return [Array] end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT = :typescript - PYTHON = :python - PLAYGROUND = :playground - - # @!method self.values - # @return [Array] - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/lib/stagehand/resources/sessions.rb b/lib/stagehand/resources/sessions.rb index 3970742..2e4f6e3 100644 --- a/lib/stagehand/resources/sessions.rb +++ b/lib/stagehand/resources/sessions.rb @@ -8,21 +8,15 @@ class Sessions # Executes a browser action using natural language instructions or a predefined # Action object. # - # @overload act(id, input:, frame_id: nil, options: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload act(id, input:, frame_id: nil, options: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # # @param input [String, Stagehand::Models::Action] Body param: Natural language instruction or Action object # - # @param frame_id [String] Body param: Target frame ID for the action + # @param frame_id [String, nil] Body param: Target frame ID for the action # - # @param options [Stagehand::Models::SessionActParams::Options] Body param: - # - # @param x_language [Symbol, Stagehand::Models::SessionActParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK - # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent + # @param options [Stagehand::Models::SessionActParams::Options] Body param # # @param x_stream_response [Symbol, Stagehand::Models::SessionActParams::XStreamResponse] Header param: Whether to stream the response via SSE # @@ -37,13 +31,7 @@ def act(id, params) message = "Please use `#act_streaming` for the streaming use case." raise ArgumentError.new(message) end - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/act", id], @@ -59,21 +47,15 @@ def act(id, params) # Executes a browser action using natural language instructions or a predefined # Action object. # - # @overload act_streaming(id, input:, frame_id: nil, options: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload act_streaming(id, input:, frame_id: nil, options: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # # @param input [String, Stagehand::Models::Action] Body param: Natural language instruction or Action object # - # @param frame_id [String] Body param: Target frame ID for the action - # - # @param options [Stagehand::Models::SessionActParams::Options] Body param: - # - # @param x_language [Symbol, Stagehand::Models::SessionActParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK + # @param frame_id [String, nil] Body param: Target frame ID for the action # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent + # @param options [Stagehand::Models::SessionActParams::Options] Body param # # @param x_stream_response [Symbol, Stagehand::Models::SessionActParams::XStreamResponse] Header param: Whether to stream the response via SSE # @@ -89,13 +71,7 @@ def act_streaming(id, params) raise ArgumentError.new(message) end parsed.store(:streamResponse, true) - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/act", id], @@ -112,16 +88,10 @@ def act_streaming(id, params) # Terminates the browser session and releases all associated resources. # - # @overload end_(id, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload end_(id, x_stream_response: nil, request_options: {}) # # @param id [String] Unique session identifier # - # @param x_language [Symbol, Stagehand::Models::SessionEndParams::XLanguage] Client SDK language - # - # @param x_sdk_version [String] Version of the Stagehand SDK - # - # @param x_sent_at [Time] ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionEndParams::XStreamResponse] Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}, nil] @@ -134,13 +104,7 @@ def end_(id, params = {}) @client.request( method: :post, path: ["v1/sessions/%1$s/end", id], - headers: parsed.transform_keys( - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - ), - body: {}, + headers: parsed.transform_keys(x_stream_response: "x-stream-response"), model: Stagehand::Models::SessionEndResponse, options: options ) @@ -149,23 +113,22 @@ def end_(id, params = {}) # See {Stagehand::Resources::Sessions#execute_streaming} for streaming # counterpart. # + # Some parameter documentations has been truncated, see + # {Stagehand::Models::SessionExecuteParams} for more details. + # # Runs an autonomous AI agent that can perform complex multi-step browser tasks. # - # @overload execute(id, agent_config:, execute_options:, frame_id: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload execute(id, agent_config:, execute_options:, frame_id: nil, should_cache: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # - # @param agent_config [Stagehand::Models::SessionExecuteParams::AgentConfig] Body param: - # - # @param execute_options [Stagehand::Models::SessionExecuteParams::ExecuteOptions] Body param: - # - # @param frame_id [String] Body param: Target frame ID for the agent + # @param agent_config [Stagehand::Models::SessionExecuteParams::AgentConfig] Body param # - # @param x_language [Symbol, Stagehand::Models::SessionExecuteParams::XLanguage] Header param: Client SDK language + # @param execute_options [Stagehand::Models::SessionExecuteParams::ExecuteOptions] Body param # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK + # @param frame_id [String, nil] Body param: Target frame ID for the agent # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent + # @param should_cache [Boolean] Body param: If true, the server captures a cache entry and returns it to the cli # # @param x_stream_response [Symbol, Stagehand::Models::SessionExecuteParams::XStreamResponse] Header param: Whether to stream the response via SSE # @@ -180,13 +143,7 @@ def execute(id, params) message = "Please use `#execute_streaming` for the streaming use case." raise ArgumentError.new(message) end - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/agentExecute", id], @@ -199,23 +156,22 @@ def execute(id, params) # See {Stagehand::Resources::Sessions#execute} for non-streaming counterpart. # + # Some parameter documentations has been truncated, see + # {Stagehand::Models::SessionExecuteParams} for more details. + # # Runs an autonomous AI agent that can perform complex multi-step browser tasks. # - # @overload execute_streaming(id, agent_config:, execute_options:, frame_id: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload execute_streaming(id, agent_config:, execute_options:, frame_id: nil, should_cache: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # - # @param agent_config [Stagehand::Models::SessionExecuteParams::AgentConfig] Body param: - # - # @param execute_options [Stagehand::Models::SessionExecuteParams::ExecuteOptions] Body param: - # - # @param frame_id [String] Body param: Target frame ID for the agent + # @param agent_config [Stagehand::Models::SessionExecuteParams::AgentConfig] Body param # - # @param x_language [Symbol, Stagehand::Models::SessionExecuteParams::XLanguage] Header param: Client SDK language + # @param execute_options [Stagehand::Models::SessionExecuteParams::ExecuteOptions] Body param # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK + # @param frame_id [String, nil] Body param: Target frame ID for the agent # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent + # @param should_cache [Boolean] Body param: If true, the server captures a cache entry and returns it to the cli # # @param x_stream_response [Symbol, Stagehand::Models::SessionExecuteParams::XStreamResponse] Header param: Whether to stream the response via SSE # @@ -231,13 +187,7 @@ def execute_streaming(id, params) raise ArgumentError.new(message) end parsed.store(:streamResponse, true) - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/agentExecute", id], @@ -257,24 +207,18 @@ def execute_streaming(id, params) # # Extracts structured data from the current page using AI-powered analysis. # - # @overload extract(id, frame_id: nil, instruction: nil, options: nil, schema: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload extract(id, frame_id: nil, instruction: nil, options: nil, schema: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # - # @param frame_id [String] Body param: Target frame ID for the extraction + # @param frame_id [String, nil] Body param: Target frame ID for the extraction # # @param instruction [String] Body param: Natural language instruction for what to extract # - # @param options [Stagehand::Models::SessionExtractParams::Options] Body param: + # @param options [Stagehand::Models::SessionExtractParams::Options] Body param # # @param schema [Hash{Symbol=>Object}] Body param: JSON Schema defining the structure of data to extract # - # @param x_language [Symbol, Stagehand::Models::SessionExtractParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK - # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionExtractParams::XStreamResponse] Header param: Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}, nil] @@ -288,13 +232,7 @@ def extract(id, params = {}) message = "Please use `#extract_streaming` for the streaming use case." raise ArgumentError.new(message) end - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/extract", id], @@ -309,24 +247,18 @@ def extract(id, params = {}) # # Extracts structured data from the current page using AI-powered analysis. # - # @overload extract_streaming(id, frame_id: nil, instruction: nil, options: nil, schema: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload extract_streaming(id, frame_id: nil, instruction: nil, options: nil, schema: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # - # @param frame_id [String] Body param: Target frame ID for the extraction + # @param frame_id [String, nil] Body param: Target frame ID for the extraction # # @param instruction [String] Body param: Natural language instruction for what to extract # - # @param options [Stagehand::Models::SessionExtractParams::Options] Body param: + # @param options [Stagehand::Models::SessionExtractParams::Options] Body param # # @param schema [Hash{Symbol=>Object}] Body param: JSON Schema defining the structure of data to extract # - # @param x_language [Symbol, Stagehand::Models::SessionExtractParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK - # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionExtractParams::XStreamResponse] Header param: Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}, nil] @@ -341,13 +273,7 @@ def extract_streaming(id, params = {}) raise ArgumentError.new(message) end parsed.store(:streamResponse, true) - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/extract", id], @@ -364,24 +290,18 @@ def extract_streaming(id, params = {}) # Navigates the browser to the specified URL. # - # @overload navigate(id, url:, frame_id: nil, options: nil, stream_response: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload navigate(id, url:, frame_id: nil, options: nil, stream_response: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # # @param url [String] Body param: URL to navigate to # - # @param frame_id [String] Body param: Target frame ID for the navigation + # @param frame_id [String, nil] Body param: Target frame ID for the navigation # - # @param options [Stagehand::Models::SessionNavigateParams::Options] Body param: + # @param options [Stagehand::Models::SessionNavigateParams::Options] Body param # # @param stream_response [Boolean] Body param: Whether to stream the response via SSE # - # @param x_language [Symbol, Stagehand::Models::SessionNavigateParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK - # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionNavigateParams::XStreamResponse] Header param: Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}, nil] @@ -391,13 +311,7 @@ def extract_streaming(id, params = {}) # @see Stagehand::Models::SessionNavigateParams def navigate(id, params) parsed, options = Stagehand::SessionNavigateParams.dump_request(params) - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/navigate", id], @@ -414,21 +328,15 @@ def navigate(id, params) # Identifies and returns available actions on the current page that match the # given instruction. # - # @overload observe(id, frame_id: nil, instruction: nil, options: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload observe(id, frame_id: nil, instruction: nil, options: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # - # @param frame_id [String] Body param: Target frame ID for the observation + # @param frame_id [String, nil] Body param: Target frame ID for the observation # # @param instruction [String] Body param: Natural language instruction for what actions to find # - # @param options [Stagehand::Models::SessionObserveParams::Options] Body param: - # - # @param x_language [Symbol, Stagehand::Models::SessionObserveParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK - # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent + # @param options [Stagehand::Models::SessionObserveParams::Options] Body param # # @param x_stream_response [Symbol, Stagehand::Models::SessionObserveParams::XStreamResponse] Header param: Whether to stream the response via SSE # @@ -443,13 +351,7 @@ def observe(id, params = {}) message = "Please use `#observe_streaming` for the streaming use case." raise ArgumentError.new(message) end - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/observe", id], @@ -465,21 +367,15 @@ def observe(id, params = {}) # Identifies and returns available actions on the current page that match the # given instruction. # - # @overload observe_streaming(id, frame_id: nil, instruction: nil, options: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload observe_streaming(id, frame_id: nil, instruction: nil, options: nil, x_stream_response: nil, request_options: {}) # # @param id [String] Path param: Unique session identifier # - # @param frame_id [String] Body param: Target frame ID for the observation + # @param frame_id [String, nil] Body param: Target frame ID for the observation # # @param instruction [String] Body param: Natural language instruction for what actions to find # - # @param options [Stagehand::Models::SessionObserveParams::Options] Body param: - # - # @param x_language [Symbol, Stagehand::Models::SessionObserveParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK - # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent + # @param options [Stagehand::Models::SessionObserveParams::Options] Body param # # @param x_stream_response [Symbol, Stagehand::Models::SessionObserveParams::XStreamResponse] Header param: Whether to stream the response via SSE # @@ -495,13 +391,7 @@ def observe_streaming(id, params = {}) raise ArgumentError.new(message) end parsed.store(:streamResponse, true) - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: ["v1/sessions/%1$s/observe", id], @@ -516,24 +406,48 @@ def observe_streaming(id, params = {}) ) end + # Retrieves replay metrics for a session. + # + # @overload replay(id, x_stream_response: nil, request_options: {}) + # + # @param id [String] Unique session identifier + # + # @param x_stream_response [Symbol, Stagehand::Models::SessionReplayParams::XStreamResponse] Whether to stream the response via SSE + # + # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}, nil] + # + # @return [Stagehand::Models::SessionReplayResponse] + # + # @see Stagehand::Models::SessionReplayParams + def replay(id, params = {}) + parsed, options = Stagehand::SessionReplayParams.dump_request(params) + @client.request( + method: :get, + path: ["v1/sessions/%1$s/replay", id], + headers: parsed.transform_keys(x_stream_response: "x-stream-response"), + model: Stagehand::Models::SessionReplayResponse, + options: options + ) + end + # Creates a new browser session with the specified configuration. Returns a # session ID used for all subsequent operations. # - # @overload start(model_name:, act_timeout_ms: nil, browser: nil, browserbase_session_create_params: nil, browserbase_session_id: nil, dom_settle_timeout_ms: nil, experimental: nil, self_heal: nil, system_prompt: nil, verbose: nil, wait_for_captcha_solves: nil, x_language: nil, x_sdk_version: nil, x_sent_at: nil, x_stream_response: nil, request_options: {}) + # @overload start(model_name:, act_timeout_ms: nil, browser: nil, browserbase_session_create_params: nil, browserbase_session_id: nil, dom_settle_timeout_ms: nil, experimental: nil, self_heal: nil, system_prompt: nil, verbose: nil, wait_for_captcha_solves: nil, x_stream_response: nil, request_options: {}) # # @param model_name [String] Body param: Model name to use for AI operations # # @param act_timeout_ms [Float] Body param: Timeout in ms for act operations (deprecated, v2 only) # - # @param browser [Stagehand::Models::SessionStartParams::Browser] Body param: + # @param browser [Stagehand::Models::SessionStartParams::Browser] Body param # - # @param browserbase_session_create_params [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams] Body param: + # @param browserbase_session_create_params [Stagehand::Models::SessionStartParams::BrowserbaseSessionCreateParams] Body param # # @param browserbase_session_id [String] Body param: Existing Browserbase session ID to resume # # @param dom_settle_timeout_ms [Float] Body param: Timeout in ms to wait for DOM to settle # - # @param experimental [Boolean] Body param: + # @param experimental [Boolean] Body param # # @param self_heal [Boolean] Body param: Enable self-healing for failed actions # @@ -543,12 +457,6 @@ def observe_streaming(id, params = {}) # # @param wait_for_captcha_solves [Boolean] Body param: Wait for captcha solves (deprecated, v2 only) # - # @param x_language [Symbol, Stagehand::Models::SessionStartParams::XLanguage] Header param: Client SDK language - # - # @param x_sdk_version [String] Header param: Version of the Stagehand SDK - # - # @param x_sent_at [Time] Header param: ISO timestamp when request was sent - # # @param x_stream_response [Symbol, Stagehand::Models::SessionStartParams::XStreamResponse] Header param: Whether to stream the response via SSE # # @param request_options [Stagehand::RequestOptions, Hash{Symbol=>Object}, nil] @@ -558,13 +466,7 @@ def observe_streaming(id, params = {}) # @see Stagehand::Models::SessionStartParams def start(params) parsed, options = Stagehand::SessionStartParams.dump_request(params) - header_params = - { - x_language: "x-language", - x_sdk_version: "x-sdk-version", - x_sent_at: "x-sent-at", - x_stream_response: "x-stream-response" - } + header_params = {x_stream_response: "x-stream-response"} @client.request( method: :post, path: "v1/sessions/start", diff --git a/rbi/stagehand/models.rbi b/rbi/stagehand/models.rbi index d0bf01d..c9839e6 100644 --- a/rbi/stagehand/models.rbi +++ b/rbi/stagehand/models.rbi @@ -17,6 +17,8 @@ module Stagehand SessionObserveParams = Stagehand::Models::SessionObserveParams + SessionReplayParams = Stagehand::Models::SessionReplayParams + SessionStartParams = Stagehand::Models::SessionStartParams StreamEvent = Stagehand::Models::StreamEvent diff --git a/rbi/stagehand/models/model_config.rbi b/rbi/stagehand/models/model_config.rbi index 0461ba2..a7772b4 100644 --- a/rbi/stagehand/models/model_config.rbi +++ b/rbi/stagehand/models/model_config.rbi @@ -2,141 +2,92 @@ module Stagehand module Models - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') - module ModelConfig - extend Stagehand::Internal::Type::Union - - Variants = + class ModelConfig < Stagehand::Internal::Type::BaseModel + OrHash = T.type_alias do - T.any(String, Stagehand::ModelConfig::ModelConfigObject) + T.any(Stagehand::ModelConfig, Stagehand::Internal::AnyHash) end - class ModelConfigObject < Stagehand::Internal::Type::BaseModel - OrHash = - T.type_alias do - T.any( - Stagehand::ModelConfig::ModelConfigObject, - Stagehand::Internal::AnyHash - ) - end + # Model name string with provider prefix (e.g., 'openai/gpt-5-nano') + sig { returns(String) } + attr_accessor :model_name - # Model name string without prefix (e.g., 'gpt-5-nano', 'claude-4.5-opus') - sig { returns(String) } - attr_accessor :model_name + # API key for the model provider + sig { returns(T.nilable(String)) } + attr_reader :api_key - # API key for the model provider - sig { returns(T.nilable(String)) } - attr_reader :api_key + sig { params(api_key: String).void } + attr_writer :api_key - sig { params(api_key: String).void } - attr_writer :api_key + # Base URL for the model provider + sig { returns(T.nilable(String)) } + attr_reader :base_url - # Base URL for the model provider - sig { returns(T.nilable(String)) } - attr_reader :base_url + sig { params(base_url: String).void } + attr_writer :base_url - sig { params(base_url: String).void } - attr_writer :base_url + # AI provider for the model (or provide a baseURL endpoint instead) + sig { returns(T.nilable(Stagehand::ModelConfig::Provider::OrSymbol)) } + attr_reader :provider - # AI provider for the model (or provide a baseURL endpoint instead) - sig do - returns( - T.nilable( - Stagehand::ModelConfig::ModelConfigObject::Provider::OrSymbol - ) - ) - end - attr_reader :provider + sig { params(provider: Stagehand::ModelConfig::Provider::OrSymbol).void } + attr_writer :provider - sig do - params( - provider: - Stagehand::ModelConfig::ModelConfigObject::Provider::OrSymbol - ).void - end - attr_writer :provider + sig do + params( + model_name: String, + api_key: String, + base_url: String, + provider: Stagehand::ModelConfig::Provider::OrSymbol + ).returns(T.attached_class) + end + def self.new( + # Model name string with provider prefix (e.g., 'openai/gpt-5-nano') + model_name:, + # API key for the model provider + api_key: nil, + # Base URL for the model provider + base_url: nil, + # AI provider for the model (or provide a baseURL endpoint instead) + provider: nil + ) + end - sig do - params( + sig do + override.returns( + { model_name: String, api_key: String, base_url: String, - provider: - Stagehand::ModelConfig::ModelConfigObject::Provider::OrSymbol - ).returns(T.attached_class) - end - def self.new( - # Model name string without prefix (e.g., 'gpt-5-nano', 'claude-4.5-opus') - model_name:, - # API key for the model provider - api_key: nil, - # Base URL for the model provider - base_url: nil, - # AI provider for the model (or provide a baseURL endpoint instead) - provider: nil + provider: Stagehand::ModelConfig::Provider::OrSymbol + } ) - end + end + def to_hash + end + + # AI provider for the model (or provide a baseURL endpoint instead) + module Provider + extend Stagehand::Internal::Type::Enum + + TaggedSymbol = + T.type_alias { T.all(Symbol, Stagehand::ModelConfig::Provider) } + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OPENAI = T.let(:openai, Stagehand::ModelConfig::Provider::TaggedSymbol) + ANTHROPIC = + T.let(:anthropic, Stagehand::ModelConfig::Provider::TaggedSymbol) + GOOGLE = T.let(:google, Stagehand::ModelConfig::Provider::TaggedSymbol) + MICROSOFT = + T.let(:microsoft, Stagehand::ModelConfig::Provider::TaggedSymbol) sig do override.returns( - { - model_name: String, - api_key: String, - base_url: String, - provider: - Stagehand::ModelConfig::ModelConfigObject::Provider::OrSymbol - } + T::Array[Stagehand::ModelConfig::Provider::TaggedSymbol] ) end - def to_hash + def self.values end - - # AI provider for the model (or provide a baseURL endpoint instead) - module Provider - extend Stagehand::Internal::Type::Enum - - TaggedSymbol = - T.type_alias do - T.all(Symbol, Stagehand::ModelConfig::ModelConfigObject::Provider) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } - - OPENAI = - T.let( - :openai, - Stagehand::ModelConfig::ModelConfigObject::Provider::TaggedSymbol - ) - ANTHROPIC = - T.let( - :anthropic, - Stagehand::ModelConfig::ModelConfigObject::Provider::TaggedSymbol - ) - GOOGLE = - T.let( - :google, - Stagehand::ModelConfig::ModelConfigObject::Provider::TaggedSymbol - ) - MICROSOFT = - T.let( - :microsoft, - Stagehand::ModelConfig::ModelConfigObject::Provider::TaggedSymbol - ) - - sig do - override.returns( - T::Array[ - Stagehand::ModelConfig::ModelConfigObject::Provider::TaggedSymbol - ] - ) - end - def self.values - end - end - end - - sig { override.returns(T::Array[Stagehand::ModelConfig::Variants]) } - def self.variants end end end diff --git a/rbi/stagehand/models/session_act_params.rbi b/rbi/stagehand/models/session_act_params.rbi index dca0a54..be8d2f3 100644 --- a/rbi/stagehand/models/session_act_params.rbi +++ b/rbi/stagehand/models/session_act_params.rbi @@ -17,10 +17,7 @@ module Stagehand # Target frame ID for the action sig { returns(T.nilable(String)) } - attr_reader :frame_id - - sig { params(frame_id: String).void } - attr_writer :frame_id + attr_accessor :frame_id sig { returns(T.nilable(Stagehand::SessionActParams::Options)) } attr_reader :options @@ -28,33 +25,6 @@ module Stagehand sig { params(options: Stagehand::SessionActParams::Options::OrHash).void } attr_writer :options - # Client SDK language - sig do - returns(T.nilable(Stagehand::SessionActParams::XLanguage::OrSymbol)) - end - attr_reader :x_language - - sig do - params( - x_language: Stagehand::SessionActParams::XLanguage::OrSymbol - ).void - end - attr_writer :x_language - - # Version of the Stagehand SDK - sig { returns(T.nilable(String)) } - attr_reader :x_sdk_version - - sig { params(x_sdk_version: String).void } - attr_writer :x_sdk_version - - # ISO timestamp when request was sent - sig { returns(T.nilable(Time)) } - attr_reader :x_sent_at - - sig { params(x_sent_at: Time).void } - attr_writer :x_sent_at - # Whether to stream the response via SSE sig do returns( @@ -74,11 +44,8 @@ module Stagehand sig do params( input: T.any(String, Stagehand::Action::OrHash), - frame_id: String, + frame_id: T.nilable(String), options: Stagehand::SessionActParams::Options::OrHash, - x_language: Stagehand::SessionActParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionActParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -90,12 +57,6 @@ module Stagehand # Target frame ID for the action frame_id: nil, options: nil, - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -106,11 +67,8 @@ module Stagehand override.returns( { input: T.any(String, Stagehand::Action), - frame_id: String, + frame_id: T.nilable(String), options: Stagehand::SessionActParams::Options, - x_language: Stagehand::SessionActParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionActParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions @@ -144,20 +102,12 @@ module Stagehand ) end - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') - sig do - returns( - T.nilable(T.any(String, Stagehand::ModelConfig::ModelConfigObject)) - ) - end + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + sig { returns(T.nilable(T.any(Stagehand::ModelConfig, String))) } attr_reader :model sig do - params( - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash) - ).void + params(model: T.any(Stagehand::ModelConfig::OrHash, String)).void end attr_writer :model @@ -177,15 +127,13 @@ module Stagehand sig do params( - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash), + model: T.any(Stagehand::ModelConfig::OrHash, String), timeout: Float, variables: T::Hash[Symbol, String] ).returns(T.attached_class) end def self.new( - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') model: nil, # Timeout in ms for the action timeout: nil, @@ -197,7 +145,7 @@ module Stagehand sig do override.returns( { - model: T.any(String, Stagehand::ModelConfig::ModelConfigObject), + model: T.any(Stagehand::ModelConfig, String), timeout: Float, variables: T::Hash[Symbol, String] } @@ -205,35 +153,20 @@ module Stagehand end def to_hash end - end - - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - TaggedSymbol = - T.type_alias { T.all(Symbol, Stagehand::SessionActParams::XLanguage) } - OrSymbol = T.type_alias { T.any(Symbol, String) } + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + module Model + extend Stagehand::Internal::Type::Union - TYPESCRIPT = - T.let( - :typescript, - Stagehand::SessionActParams::XLanguage::TaggedSymbol - ) - PYTHON = - T.let(:python, Stagehand::SessionActParams::XLanguage::TaggedSymbol) - PLAYGROUND = - T.let( - :playground, - Stagehand::SessionActParams::XLanguage::TaggedSymbol - ) + Variants = T.type_alias { T.any(Stagehand::ModelConfig, String) } - sig do - override.returns( - T::Array[Stagehand::SessionActParams::XLanguage::TaggedSymbol] - ) - end - def self.values + sig do + override.returns( + T::Array[Stagehand::SessionActParams::Options::Model::Variants] + ) + end + def self.variants + end end end diff --git a/rbi/stagehand/models/session_end_params.rbi b/rbi/stagehand/models/session_end_params.rbi index bb4c64d..20188a3 100644 --- a/rbi/stagehand/models/session_end_params.rbi +++ b/rbi/stagehand/models/session_end_params.rbi @@ -11,33 +11,6 @@ module Stagehand T.any(Stagehand::SessionEndParams, Stagehand::Internal::AnyHash) end - # Client SDK language - sig do - returns(T.nilable(Stagehand::SessionEndParams::XLanguage::OrSymbol)) - end - attr_reader :x_language - - sig do - params( - x_language: Stagehand::SessionEndParams::XLanguage::OrSymbol - ).void - end - attr_writer :x_language - - # Version of the Stagehand SDK - sig { returns(T.nilable(String)) } - attr_reader :x_sdk_version - - sig { params(x_sdk_version: String).void } - attr_writer :x_sdk_version - - # ISO timestamp when request was sent - sig { returns(T.nilable(Time)) } - attr_reader :x_sent_at - - sig { params(x_sent_at: Time).void } - attr_writer :x_sent_at - # Whether to stream the response via SSE sig do returns( @@ -56,21 +29,12 @@ module Stagehand sig do params( - x_language: Stagehand::SessionEndParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionEndParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash ).returns(T.attached_class) end def self.new( - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -80,9 +44,6 @@ module Stagehand sig do override.returns( { - x_language: Stagehand::SessionEndParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionEndParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions @@ -92,36 +53,6 @@ module Stagehand def to_hash end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TaggedSymbol = - T.type_alias { T.all(Symbol, Stagehand::SessionEndParams::XLanguage) } - OrSymbol = T.type_alias { T.any(Symbol, String) } - - TYPESCRIPT = - T.let( - :typescript, - Stagehand::SessionEndParams::XLanguage::TaggedSymbol - ) - PYTHON = - T.let(:python, Stagehand::SessionEndParams::XLanguage::TaggedSymbol) - PLAYGROUND = - T.let( - :playground, - Stagehand::SessionEndParams::XLanguage::TaggedSymbol - ) - - sig do - override.returns( - T::Array[Stagehand::SessionEndParams::XLanguage::TaggedSymbol] - ) - end - def self.values - end - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/rbi/stagehand/models/session_execute_params.rbi b/rbi/stagehand/models/session_execute_params.rbi index a16cae7..cf42e06 100644 --- a/rbi/stagehand/models/session_execute_params.rbi +++ b/rbi/stagehand/models/session_execute_params.rbi @@ -34,37 +34,14 @@ module Stagehand # Target frame ID for the agent sig { returns(T.nilable(String)) } - attr_reader :frame_id + attr_accessor :frame_id - sig { params(frame_id: String).void } - attr_writer :frame_id + # If true, the server captures a cache entry and returns it to the client + sig { returns(T.nilable(T::Boolean)) } + attr_reader :should_cache - # Client SDK language - sig do - returns(T.nilable(Stagehand::SessionExecuteParams::XLanguage::OrSymbol)) - end - attr_reader :x_language - - sig do - params( - x_language: Stagehand::SessionExecuteParams::XLanguage::OrSymbol - ).void - end - attr_writer :x_language - - # Version of the Stagehand SDK - sig { returns(T.nilable(String)) } - attr_reader :x_sdk_version - - sig { params(x_sdk_version: String).void } - attr_writer :x_sdk_version - - # ISO timestamp when request was sent - sig { returns(T.nilable(Time)) } - attr_reader :x_sent_at - - sig { params(x_sent_at: Time).void } - attr_writer :x_sent_at + sig { params(should_cache: T::Boolean).void } + attr_writer :should_cache # Whether to stream the response via SSE sig do @@ -87,10 +64,8 @@ module Stagehand agent_config: Stagehand::SessionExecuteParams::AgentConfig::OrHash, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions::OrHash, - frame_id: String, - x_language: Stagehand::SessionExecuteParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, + frame_id: T.nilable(String), + should_cache: T::Boolean, x_stream_response: Stagehand::SessionExecuteParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -101,12 +76,8 @@ module Stagehand execute_options:, # Target frame ID for the agent frame_id: nil, - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, + # If true, the server captures a cache entry and returns it to the client + should_cache: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -118,10 +89,8 @@ module Stagehand { agent_config: Stagehand::SessionExecuteParams::AgentConfig, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions, - frame_id: String, - x_language: Stagehand::SessionExecuteParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, + frame_id: T.nilable(String), + should_cache: T::Boolean, x_stream_response: Stagehand::SessionExecuteParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions @@ -147,20 +116,12 @@ module Stagehand sig { params(cua: T::Boolean).void } attr_writer :cua - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') - sig do - returns( - T.nilable(T.any(String, Stagehand::ModelConfig::ModelConfigObject)) - ) - end + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + sig { returns(T.nilable(T.any(Stagehand::ModelConfig, String))) } attr_reader :model sig do - params( - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash) - ).void + params(model: T.any(Stagehand::ModelConfig::OrHash, String)).void end attr_writer :model @@ -192,8 +153,7 @@ module Stagehand sig do params( cua: T::Boolean, - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash), + model: T.any(Stagehand::ModelConfig::OrHash, String), provider: Stagehand::SessionExecuteParams::AgentConfig::Provider::OrSymbol, system_prompt: String @@ -202,8 +162,7 @@ module Stagehand def self.new( # Enable Computer Use Agent mode cua: nil, - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') model: nil, # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) provider: nil, @@ -216,7 +175,7 @@ module Stagehand override.returns( { cua: T::Boolean, - model: T.any(String, Stagehand::ModelConfig::ModelConfigObject), + model: T.any(Stagehand::ModelConfig, String), provider: Stagehand::SessionExecuteParams::AgentConfig::Provider::OrSymbol, system_prompt: String @@ -226,6 +185,23 @@ module Stagehand def to_hash end + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + module Model + extend Stagehand::Internal::Type::Union + + Variants = T.type_alias { T.any(Stagehand::ModelConfig, String) } + + sig do + override.returns( + T::Array[ + Stagehand::SessionExecuteParams::AgentConfig::Model::Variants + ] + ) + end + def self.variants + end + end + # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) module Provider extend Stagehand::Internal::Type::Enum @@ -329,41 +305,6 @@ module Stagehand end end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TaggedSymbol = - T.type_alias do - T.all(Symbol, Stagehand::SessionExecuteParams::XLanguage) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } - - TYPESCRIPT = - T.let( - :typescript, - Stagehand::SessionExecuteParams::XLanguage::TaggedSymbol - ) - PYTHON = - T.let( - :python, - Stagehand::SessionExecuteParams::XLanguage::TaggedSymbol - ) - PLAYGROUND = - T.let( - :playground, - Stagehand::SessionExecuteParams::XLanguage::TaggedSymbol - ) - - sig do - override.returns( - T::Array[Stagehand::SessionExecuteParams::XLanguage::TaggedSymbol] - ) - end - def self.values - end - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/rbi/stagehand/models/session_execute_response.rbi b/rbi/stagehand/models/session_execute_response.rbi index 6354b86..8c0db23 100644 --- a/rbi/stagehand/models/session_execute_response.rbi +++ b/rbi/stagehand/models/session_execute_response.rbi @@ -69,18 +69,41 @@ module Stagehand end attr_writer :result + sig do + returns( + T.nilable( + Stagehand::Models::SessionExecuteResponse::Data::CacheEntry + ) + ) + end + attr_reader :cache_entry + + sig do + params( + cache_entry: + Stagehand::Models::SessionExecuteResponse::Data::CacheEntry::OrHash + ).void + end + attr_writer :cache_entry + sig do params( result: - Stagehand::Models::SessionExecuteResponse::Data::Result::OrHash + Stagehand::Models::SessionExecuteResponse::Data::Result::OrHash, + cache_entry: + Stagehand::Models::SessionExecuteResponse::Data::CacheEntry::OrHash ).returns(T.attached_class) end - def self.new(result:) + def self.new(result:, cache_entry: nil) end sig do override.returns( - { result: Stagehand::Models::SessionExecuteResponse::Data::Result } + { + result: Stagehand::Models::SessionExecuteResponse::Data::Result, + cache_entry: + Stagehand::Models::SessionExecuteResponse::Data::CacheEntry + } ) end def to_hash @@ -350,6 +373,41 @@ module Stagehand end end end + + class CacheEntry < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionExecuteResponse::Data::CacheEntry, + Stagehand::Internal::AnyHash + ) + end + + # Opaque cache identifier computed from instruction, URL, options, and config + sig { returns(String) } + attr_accessor :cache_key + + # Serialized cache entry that can be written to disk + sig { returns(T.anything) } + attr_accessor :entry + + sig do + params(cache_key: String, entry: T.anything).returns( + T.attached_class + ) + end + def self.new( + # Opaque cache identifier computed from instruction, URL, options, and config + cache_key:, + # Serialized cache entry that can be written to disk + entry: + ) + end + + sig { override.returns({ cache_key: String, entry: T.anything }) } + def to_hash + end + end end end end diff --git a/rbi/stagehand/models/session_extract_params.rbi b/rbi/stagehand/models/session_extract_params.rbi index a246983..ba0e051 100644 --- a/rbi/stagehand/models/session_extract_params.rbi +++ b/rbi/stagehand/models/session_extract_params.rbi @@ -13,10 +13,7 @@ module Stagehand # Target frame ID for the extraction sig { returns(T.nilable(String)) } - attr_reader :frame_id - - sig { params(frame_id: String).void } - attr_writer :frame_id + attr_accessor :frame_id # Natural language instruction for what to extract sig { returns(T.nilable(String)) } @@ -40,33 +37,6 @@ module Stagehand sig { params(schema: T::Hash[Symbol, T.anything]).void } attr_writer :schema - # Client SDK language - sig do - returns(T.nilable(Stagehand::SessionExtractParams::XLanguage::OrSymbol)) - end - attr_reader :x_language - - sig do - params( - x_language: Stagehand::SessionExtractParams::XLanguage::OrSymbol - ).void - end - attr_writer :x_language - - # Version of the Stagehand SDK - sig { returns(T.nilable(String)) } - attr_reader :x_sdk_version - - sig { params(x_sdk_version: String).void } - attr_writer :x_sdk_version - - # ISO timestamp when request was sent - sig { returns(T.nilable(Time)) } - attr_reader :x_sent_at - - sig { params(x_sent_at: Time).void } - attr_writer :x_sent_at - # Whether to stream the response via SSE sig do returns( @@ -85,13 +55,10 @@ module Stagehand sig do params( - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionExtractParams::Options::OrHash, schema: T::Hash[Symbol, T.anything], - x_language: Stagehand::SessionExtractParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionExtractParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -105,12 +72,6 @@ module Stagehand options: nil, # JSON Schema defining the structure of data to extract schema: nil, - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -120,13 +81,10 @@ module Stagehand sig do override.returns( { - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionExtractParams::Options, schema: T::Hash[Symbol, T.anything], - x_language: Stagehand::SessionExtractParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionExtractParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions @@ -145,20 +103,12 @@ module Stagehand ) end - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') - sig do - returns( - T.nilable(T.any(String, Stagehand::ModelConfig::ModelConfigObject)) - ) - end + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + sig { returns(T.nilable(T.any(Stagehand::ModelConfig, String))) } attr_reader :model sig do - params( - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash) - ).void + params(model: T.any(Stagehand::ModelConfig::OrHash, String)).void end attr_writer :model @@ -178,15 +128,13 @@ module Stagehand sig do params( - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash), + model: T.any(Stagehand::ModelConfig::OrHash, String), selector: String, timeout: Float ).returns(T.attached_class) end def self.new( - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') model: nil, # CSS selector to scope extraction to a specific element selector: nil, @@ -198,7 +146,7 @@ module Stagehand sig do override.returns( { - model: T.any(String, Stagehand::ModelConfig::ModelConfigObject), + model: T.any(Stagehand::ModelConfig, String), selector: String, timeout: Float } @@ -206,40 +154,22 @@ module Stagehand end def to_hash end - end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + module Model + extend Stagehand::Internal::Type::Union - TaggedSymbol = - T.type_alias do - T.all(Symbol, Stagehand::SessionExtractParams::XLanguage) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } + Variants = T.type_alias { T.any(Stagehand::ModelConfig, String) } - TYPESCRIPT = - T.let( - :typescript, - Stagehand::SessionExtractParams::XLanguage::TaggedSymbol - ) - PYTHON = - T.let( - :python, - Stagehand::SessionExtractParams::XLanguage::TaggedSymbol - ) - PLAYGROUND = - T.let( - :playground, - Stagehand::SessionExtractParams::XLanguage::TaggedSymbol - ) - - sig do - override.returns( - T::Array[Stagehand::SessionExtractParams::XLanguage::TaggedSymbol] - ) - end - def self.values + sig do + override.returns( + T::Array[ + Stagehand::SessionExtractParams::Options::Model::Variants + ] + ) + end + def self.variants + end end end diff --git a/rbi/stagehand/models/session_navigate_params.rbi b/rbi/stagehand/models/session_navigate_params.rbi index d696cdf..362b908 100644 --- a/rbi/stagehand/models/session_navigate_params.rbi +++ b/rbi/stagehand/models/session_navigate_params.rbi @@ -17,10 +17,7 @@ module Stagehand # Target frame ID for the navigation sig { returns(T.nilable(String)) } - attr_reader :frame_id - - sig { params(frame_id: String).void } - attr_writer :frame_id + attr_accessor :frame_id sig { returns(T.nilable(Stagehand::SessionNavigateParams::Options)) } attr_reader :options @@ -37,35 +34,6 @@ module Stagehand sig { params(stream_response: T::Boolean).void } attr_writer :stream_response - # Client SDK language - sig do - returns( - T.nilable(Stagehand::SessionNavigateParams::XLanguage::OrSymbol) - ) - end - attr_reader :x_language - - sig do - params( - x_language: Stagehand::SessionNavigateParams::XLanguage::OrSymbol - ).void - end - attr_writer :x_language - - # Version of the Stagehand SDK - sig { returns(T.nilable(String)) } - attr_reader :x_sdk_version - - sig { params(x_sdk_version: String).void } - attr_writer :x_sdk_version - - # ISO timestamp when request was sent - sig { returns(T.nilable(Time)) } - attr_reader :x_sent_at - - sig { params(x_sent_at: Time).void } - attr_writer :x_sent_at - # Whether to stream the response via SSE sig do returns( @@ -85,12 +53,9 @@ module Stagehand sig do params( url: String, - frame_id: String, + frame_id: T.nilable(String), options: Stagehand::SessionNavigateParams::Options::OrHash, stream_response: T::Boolean, - x_language: Stagehand::SessionNavigateParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -104,12 +69,6 @@ module Stagehand options: nil, # Whether to stream the response via SSE stream_response: nil, - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -120,12 +79,9 @@ module Stagehand override.returns( { url: String, - frame_id: String, + frame_id: T.nilable(String), options: Stagehand::SessionNavigateParams::Options, stream_response: T::Boolean, - x_language: Stagehand::SessionNavigateParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions @@ -248,41 +204,6 @@ module Stagehand end end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TaggedSymbol = - T.type_alias do - T.all(Symbol, Stagehand::SessionNavigateParams::XLanguage) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } - - TYPESCRIPT = - T.let( - :typescript, - Stagehand::SessionNavigateParams::XLanguage::TaggedSymbol - ) - PYTHON = - T.let( - :python, - Stagehand::SessionNavigateParams::XLanguage::TaggedSymbol - ) - PLAYGROUND = - T.let( - :playground, - Stagehand::SessionNavigateParams::XLanguage::TaggedSymbol - ) - - sig do - override.returns( - T::Array[Stagehand::SessionNavigateParams::XLanguage::TaggedSymbol] - ) - end - def self.values - end - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/rbi/stagehand/models/session_observe_params.rbi b/rbi/stagehand/models/session_observe_params.rbi index c21a99c..faca183 100644 --- a/rbi/stagehand/models/session_observe_params.rbi +++ b/rbi/stagehand/models/session_observe_params.rbi @@ -13,10 +13,7 @@ module Stagehand # Target frame ID for the observation sig { returns(T.nilable(String)) } - attr_reader :frame_id - - sig { params(frame_id: String).void } - attr_writer :frame_id + attr_accessor :frame_id # Natural language instruction for what actions to find sig { returns(T.nilable(String)) } @@ -33,33 +30,6 @@ module Stagehand end attr_writer :options - # Client SDK language - sig do - returns(T.nilable(Stagehand::SessionObserveParams::XLanguage::OrSymbol)) - end - attr_reader :x_language - - sig do - params( - x_language: Stagehand::SessionObserveParams::XLanguage::OrSymbol - ).void - end - attr_writer :x_language - - # Version of the Stagehand SDK - sig { returns(T.nilable(String)) } - attr_reader :x_sdk_version - - sig { params(x_sdk_version: String).void } - attr_writer :x_sdk_version - - # ISO timestamp when request was sent - sig { returns(T.nilable(Time)) } - attr_reader :x_sent_at - - sig { params(x_sent_at: Time).void } - attr_writer :x_sent_at - # Whether to stream the response via SSE sig do returns( @@ -78,12 +48,9 @@ module Stagehand sig do params( - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionObserveParams::Options::OrHash, - x_language: Stagehand::SessionObserveParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionObserveParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -95,12 +62,6 @@ module Stagehand # Natural language instruction for what actions to find instruction: nil, options: nil, - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -110,12 +71,9 @@ module Stagehand sig do override.returns( { - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionObserveParams::Options, - x_language: Stagehand::SessionObserveParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionObserveParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions @@ -134,20 +92,12 @@ module Stagehand ) end - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') - sig do - returns( - T.nilable(T.any(String, Stagehand::ModelConfig::ModelConfigObject)) - ) - end + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + sig { returns(T.nilable(T.any(Stagehand::ModelConfig, String))) } attr_reader :model sig do - params( - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash) - ).void + params(model: T.any(Stagehand::ModelConfig::OrHash, String)).void end attr_writer :model @@ -167,15 +117,13 @@ module Stagehand sig do params( - model: - T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash), + model: T.any(Stagehand::ModelConfig::OrHash, String), selector: String, timeout: Float ).returns(T.attached_class) end def self.new( - # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', - # 'anthropic/claude-4.5-opus') + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') model: nil, # CSS selector to scope observation to a specific element selector: nil, @@ -187,7 +135,7 @@ module Stagehand sig do override.returns( { - model: T.any(String, Stagehand::ModelConfig::ModelConfigObject), + model: T.any(Stagehand::ModelConfig, String), selector: String, timeout: Float } @@ -195,40 +143,22 @@ module Stagehand end def to_hash end - end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum + # Model configuration object or model name string (e.g., 'openai/gpt-5-nano') + module Model + extend Stagehand::Internal::Type::Union - TaggedSymbol = - T.type_alias do - T.all(Symbol, Stagehand::SessionObserveParams::XLanguage) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } + Variants = T.type_alias { T.any(Stagehand::ModelConfig, String) } - TYPESCRIPT = - T.let( - :typescript, - Stagehand::SessionObserveParams::XLanguage::TaggedSymbol - ) - PYTHON = - T.let( - :python, - Stagehand::SessionObserveParams::XLanguage::TaggedSymbol - ) - PLAYGROUND = - T.let( - :playground, - Stagehand::SessionObserveParams::XLanguage::TaggedSymbol - ) - - sig do - override.returns( - T::Array[Stagehand::SessionObserveParams::XLanguage::TaggedSymbol] - ) - end - def self.values + sig do + override.returns( + T::Array[ + Stagehand::SessionObserveParams::Options::Model::Variants + ] + ) + end + def self.variants + end end end diff --git a/rbi/stagehand/models/session_replay_params.rbi b/rbi/stagehand/models/session_replay_params.rbi new file mode 100644 index 0000000..af237fb --- /dev/null +++ b/rbi/stagehand/models/session_replay_params.rbi @@ -0,0 +1,89 @@ +# typed: strong + +module Stagehand + module Models + class SessionReplayParams < Stagehand::Internal::Type::BaseModel + extend Stagehand::Internal::Type::RequestParameters::Converter + include Stagehand::Internal::Type::RequestParameters + + OrHash = + T.type_alias do + T.any(Stagehand::SessionReplayParams, Stagehand::Internal::AnyHash) + end + + # Whether to stream the response via SSE + sig do + returns( + T.nilable(Stagehand::SessionReplayParams::XStreamResponse::OrSymbol) + ) + end + attr_reader :x_stream_response + + sig do + params( + x_stream_response: + Stagehand::SessionReplayParams::XStreamResponse::OrSymbol + ).void + end + attr_writer :x_stream_response + + sig do + params( + x_stream_response: + Stagehand::SessionReplayParams::XStreamResponse::OrSymbol, + request_options: Stagehand::RequestOptions::OrHash + ).returns(T.attached_class) + end + def self.new( + # Whether to stream the response via SSE + x_stream_response: nil, + request_options: {} + ) + end + + sig do + override.returns( + { + x_stream_response: + Stagehand::SessionReplayParams::XStreamResponse::OrSymbol, + request_options: Stagehand::RequestOptions + } + ) + end + def to_hash + end + + # Whether to stream the response via SSE + module XStreamResponse + extend Stagehand::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all(Symbol, Stagehand::SessionReplayParams::XStreamResponse) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + TRUE = + T.let( + :true, + Stagehand::SessionReplayParams::XStreamResponse::TaggedSymbol + ) + FALSE = + T.let( + :false, + Stagehand::SessionReplayParams::XStreamResponse::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + Stagehand::SessionReplayParams::XStreamResponse::TaggedSymbol + ] + ) + end + def self.values + end + end + end + end +end diff --git a/rbi/stagehand/models/session_replay_response.rbi b/rbi/stagehand/models/session_replay_response.rbi new file mode 100644 index 0000000..9c551bc --- /dev/null +++ b/rbi/stagehand/models/session_replay_response.rbi @@ -0,0 +1,286 @@ +# typed: strong + +module Stagehand + module Models + class SessionReplayResponse < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionReplayResponse, + Stagehand::Internal::AnyHash + ) + end + + sig { returns(Stagehand::Models::SessionReplayResponse::Data) } + attr_reader :data + + sig do + params( + data: Stagehand::Models::SessionReplayResponse::Data::OrHash + ).void + end + attr_writer :data + + # Indicates whether the request was successful + sig { returns(T::Boolean) } + attr_accessor :success + + sig do + params( + data: Stagehand::Models::SessionReplayResponse::Data::OrHash, + success: T::Boolean + ).returns(T.attached_class) + end + def self.new( + data:, + # Indicates whether the request was successful + success: + ) + end + + sig do + override.returns( + { + data: Stagehand::Models::SessionReplayResponse::Data, + success: T::Boolean + } + ) + end + def to_hash + end + + class Data < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionReplayResponse::Data, + Stagehand::Internal::AnyHash + ) + end + + sig do + returns( + T.nilable( + T::Array[Stagehand::Models::SessionReplayResponse::Data::Page] + ) + ) + end + attr_reader :pages + + sig do + params( + pages: + T::Array[ + Stagehand::Models::SessionReplayResponse::Data::Page::OrHash + ] + ).void + end + attr_writer :pages + + sig do + params( + pages: + T::Array[ + Stagehand::Models::SessionReplayResponse::Data::Page::OrHash + ] + ).returns(T.attached_class) + end + def self.new(pages: nil) + end + + sig do + override.returns( + { + pages: + T::Array[Stagehand::Models::SessionReplayResponse::Data::Page] + } + ) + end + def to_hash + end + + class Page < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionReplayResponse::Data::Page, + Stagehand::Internal::AnyHash + ) + end + + sig do + returns( + T.nilable( + T::Array[ + Stagehand::Models::SessionReplayResponse::Data::Page::Action + ] + ) + ) + end + attr_reader :actions + + sig do + params( + actions: + T::Array[ + Stagehand::Models::SessionReplayResponse::Data::Page::Action::OrHash + ] + ).void + end + attr_writer :actions + + sig do + params( + actions: + T::Array[ + Stagehand::Models::SessionReplayResponse::Data::Page::Action::OrHash + ] + ).returns(T.attached_class) + end + def self.new(actions: nil) + end + + sig do + override.returns( + { + actions: + T::Array[ + Stagehand::Models::SessionReplayResponse::Data::Page::Action + ] + } + ) + end + def to_hash + end + + class Action < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionReplayResponse::Data::Page::Action, + Stagehand::Internal::AnyHash + ) + end + + sig { returns(T.nilable(String)) } + attr_reader :method_ + + sig { params(method_: String).void } + attr_writer :method_ + + sig do + returns( + T.nilable( + Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage + ) + ) + end + attr_reader :token_usage + + sig do + params( + token_usage: + Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage::OrHash + ).void + end + attr_writer :token_usage + + sig do + params( + method_: String, + token_usage: + Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage::OrHash + ).returns(T.attached_class) + end + def self.new(method_: nil, token_usage: nil) + end + + sig do + override.returns( + { + method_: String, + token_usage: + Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage + } + ) + end + def to_hash + end + + class TokenUsage < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage, + Stagehand::Internal::AnyHash + ) + end + + sig { returns(T.nilable(Float)) } + attr_reader :cached_input_tokens + + sig { params(cached_input_tokens: Float).void } + attr_writer :cached_input_tokens + + sig { returns(T.nilable(Float)) } + attr_reader :input_tokens + + sig { params(input_tokens: Float).void } + attr_writer :input_tokens + + sig { returns(T.nilable(Float)) } + attr_reader :output_tokens + + sig { params(output_tokens: Float).void } + attr_writer :output_tokens + + sig { returns(T.nilable(Float)) } + attr_reader :reasoning_tokens + + sig { params(reasoning_tokens: Float).void } + attr_writer :reasoning_tokens + + sig { returns(T.nilable(Float)) } + attr_reader :time_ms + + sig { params(time_ms: Float).void } + attr_writer :time_ms + + sig do + params( + cached_input_tokens: Float, + input_tokens: Float, + output_tokens: Float, + reasoning_tokens: Float, + time_ms: Float + ).returns(T.attached_class) + end + def self.new( + cached_input_tokens: nil, + input_tokens: nil, + output_tokens: nil, + reasoning_tokens: nil, + time_ms: nil + ) + end + + sig do + override.returns( + { + cached_input_tokens: Float, + input_tokens: Float, + output_tokens: Float, + reasoning_tokens: Float, + time_ms: Float + } + ) + end + def to_hash + end + end + end + end + end + end + end +end diff --git a/rbi/stagehand/models/session_start_params.rbi b/rbi/stagehand/models/session_start_params.rbi index 955842f..a550754 100644 --- a/rbi/stagehand/models/session_start_params.rbi +++ b/rbi/stagehand/models/session_start_params.rbi @@ -99,33 +99,6 @@ module Stagehand sig { params(wait_for_captcha_solves: T::Boolean).void } attr_writer :wait_for_captcha_solves - # Client SDK language - sig do - returns(T.nilable(Stagehand::SessionStartParams::XLanguage::OrSymbol)) - end - attr_reader :x_language - - sig do - params( - x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol - ).void - end - attr_writer :x_language - - # Version of the Stagehand SDK - sig { returns(T.nilable(String)) } - attr_reader :x_sdk_version - - sig { params(x_sdk_version: String).void } - attr_writer :x_sdk_version - - # ISO timestamp when request was sent - sig { returns(T.nilable(Time)) } - attr_reader :x_sent_at - - sig { params(x_sent_at: Time).void } - attr_writer :x_sent_at - # Whether to stream the response via SSE sig do returns( @@ -156,9 +129,6 @@ module Stagehand system_prompt: String, verbose: Stagehand::SessionStartParams::Verbose::OrFloat, wait_for_captcha_solves: T::Boolean, - x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionStartParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -184,12 +154,6 @@ module Stagehand verbose: nil, # Wait for captcha solves (deprecated, v2 only) wait_for_captcha_solves: nil, - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -211,9 +175,6 @@ module Stagehand system_prompt: String, verbose: Stagehand::SessionStartParams::Verbose::OrFloat, wait_for_captcha_solves: T::Boolean, - x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionStartParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions @@ -403,6 +364,12 @@ module Stagehand sig { params(locale: String).void } attr_writer :locale + sig { returns(T.nilable(Float)) } + attr_reader :port + + sig { params(port: Float).void } + attr_writer :port + sig { returns(T.nilable(T::Boolean)) } attr_reader :preserve_user_data_dir @@ -466,6 +433,7 @@ module Stagehand Stagehand::SessionStartParams::Browser::LaunchOptions::IgnoreDefaultArgs::Variants, ignore_https_errors: T::Boolean, locale: String, + port: Float, preserve_user_data_dir: T::Boolean, proxy: Stagehand::SessionStartParams::Browser::LaunchOptions::Proxy::OrHash, @@ -489,6 +457,7 @@ module Stagehand ignore_default_args: nil, ignore_https_errors: nil, locale: nil, + port: nil, preserve_user_data_dir: nil, proxy: nil, user_data_dir: nil, @@ -514,6 +483,7 @@ module Stagehand Stagehand::SessionStartParams::Browser::LaunchOptions::IgnoreDefaultArgs::Variants, ignore_https_errors: T::Boolean, locale: String, + port: Float, preserve_user_data_dir: T::Boolean, proxy: Stagehand::SessionStartParams::Browser::LaunchOptions::Proxy, @@ -1697,38 +1667,6 @@ module Stagehand end end - # Client SDK language - module XLanguage - extend Stagehand::Internal::Type::Enum - - TaggedSymbol = - T.type_alias do - T.all(Symbol, Stagehand::SessionStartParams::XLanguage) - end - OrSymbol = T.type_alias { T.any(Symbol, String) } - - TYPESCRIPT = - T.let( - :typescript, - Stagehand::SessionStartParams::XLanguage::TaggedSymbol - ) - PYTHON = - T.let(:python, Stagehand::SessionStartParams::XLanguage::TaggedSymbol) - PLAYGROUND = - T.let( - :playground, - Stagehand::SessionStartParams::XLanguage::TaggedSymbol - ) - - sig do - override.returns( - T::Array[Stagehand::SessionStartParams::XLanguage::TaggedSymbol] - ) - end - def self.values - end - end - # Whether to stream the response via SSE module XStreamResponse extend Stagehand::Internal::Type::Enum diff --git a/rbi/stagehand/resources/sessions.rbi b/rbi/stagehand/resources/sessions.rbi index b1eb1ba..e298865 100644 --- a/rbi/stagehand/resources/sessions.rbi +++ b/rbi/stagehand/resources/sessions.rbi @@ -11,11 +11,8 @@ module Stagehand params( id: String, input: T.any(String, Stagehand::Action::OrHash), - frame_id: String, + frame_id: T.nilable(String), options: Stagehand::SessionActParams::Options::OrHash, - x_language: Stagehand::SessionActParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionActParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -29,14 +26,8 @@ module Stagehand input:, # Body param: Target frame ID for the action frame_id: nil, - # Body param: + # Body param options: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use `#act_streaming` or @@ -54,11 +45,8 @@ module Stagehand params( id: String, input: T.any(String, Stagehand::Action::OrHash), - frame_id: String, + frame_id: T.nilable(String), options: Stagehand::SessionActParams::Options::OrHash, - x_language: Stagehand::SessionActParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionActParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -72,14 +60,8 @@ module Stagehand input:, # Body param: Target frame ID for the action frame_id: nil, - # Body param: + # Body param options: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use `#act_streaming` or @@ -93,9 +75,6 @@ module Stagehand sig do params( id: String, - x_language: Stagehand::SessionEndParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionEndParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -104,12 +83,6 @@ module Stagehand def end_( # Unique session identifier id, - # Client SDK language - x_language: nil, - # Version of the Stagehand SDK - x_sdk_version: nil, - # ISO timestamp when request was sent - x_sent_at: nil, # Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -126,10 +99,8 @@ module Stagehand agent_config: Stagehand::SessionExecuteParams::AgentConfig::OrHash, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions::OrHash, - frame_id: String, - x_language: Stagehand::SessionExecuteParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, + frame_id: T.nilable(String), + should_cache: T::Boolean, x_stream_response: Stagehand::SessionExecuteParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -139,18 +110,15 @@ module Stagehand def execute( # Path param: Unique session identifier id, - # Body param: + # Body param agent_config:, - # Body param: + # Body param execute_options:, # Body param: Target frame ID for the agent frame_id: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, + # Body param: If true, the server captures a cache entry and returns it to the + # client + should_cache: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use @@ -170,10 +138,8 @@ module Stagehand agent_config: Stagehand::SessionExecuteParams::AgentConfig::OrHash, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions::OrHash, - frame_id: String, - x_language: Stagehand::SessionExecuteParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, + frame_id: T.nilable(String), + should_cache: T::Boolean, x_stream_response: Stagehand::SessionExecuteParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -183,18 +149,15 @@ module Stagehand def execute_streaming( # Path param: Unique session identifier id, - # Body param: + # Body param agent_config:, - # Body param: + # Body param execute_options:, # Body param: Target frame ID for the agent frame_id: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, + # Body param: If true, the server captures a cache entry and returns it to the + # client + should_cache: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use @@ -212,13 +175,10 @@ module Stagehand sig do params( id: String, - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionExtractParams::Options::OrHash, schema: T::Hash[Symbol, T.anything], - x_language: Stagehand::SessionExtractParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionExtractParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -232,16 +192,10 @@ module Stagehand frame_id: nil, # Body param: Natural language instruction for what to extract instruction: nil, - # Body param: + # Body param options: nil, # Body param: JSON Schema defining the structure of data to extract schema: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use @@ -258,13 +212,10 @@ module Stagehand sig do params( id: String, - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionExtractParams::Options::OrHash, schema: T::Hash[Symbol, T.anything], - x_language: Stagehand::SessionExtractParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionExtractParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -278,16 +229,10 @@ module Stagehand frame_id: nil, # Body param: Natural language instruction for what to extract instruction: nil, - # Body param: + # Body param options: nil, # Body param: JSON Schema defining the structure of data to extract schema: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use @@ -303,12 +248,9 @@ module Stagehand params( id: String, url: String, - frame_id: String, + frame_id: T.nilable(String), options: Stagehand::SessionNavigateParams::Options::OrHash, stream_response: T::Boolean, - x_language: Stagehand::SessionNavigateParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionNavigateParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -321,16 +263,10 @@ module Stagehand url:, # Body param: Target frame ID for the navigation frame_id: nil, - # Body param: + # Body param options: nil, # Body param: Whether to stream the response via SSE stream_response: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, request_options: {} @@ -345,12 +281,9 @@ module Stagehand sig do params( id: String, - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionObserveParams::Options::OrHash, - x_language: Stagehand::SessionObserveParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionObserveParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -364,14 +297,8 @@ module Stagehand frame_id: nil, # Body param: Natural language instruction for what actions to find instruction: nil, - # Body param: + # Body param options: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use @@ -389,12 +316,9 @@ module Stagehand sig do params( id: String, - frame_id: String, + frame_id: T.nilable(String), instruction: String, options: Stagehand::SessionObserveParams::Options::OrHash, - x_language: Stagehand::SessionObserveParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionObserveParams::XStreamResponse::OrSymbol, stream_response: T.noreturn, @@ -408,14 +332,8 @@ module Stagehand frame_id: nil, # Body param: Natural language instruction for what actions to find instruction: nil, - # Body param: + # Body param options: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, # There is no need to provide `stream_response:`. Instead, use @@ -426,6 +344,24 @@ module Stagehand ) end + # Retrieves replay metrics for a session. + sig do + params( + id: String, + x_stream_response: + Stagehand::SessionReplayParams::XStreamResponse::OrSymbol, + request_options: Stagehand::RequestOptions::OrHash + ).returns(Stagehand::Models::SessionReplayResponse) + end + def replay( + # Unique session identifier + id, + # Whether to stream the response via SSE + x_stream_response: nil, + request_options: {} + ) + end + # Creates a new browser session with the specified configuration. Returns a # session ID used for all subsequent operations. sig do @@ -442,9 +378,6 @@ module Stagehand system_prompt: String, verbose: Stagehand::SessionStartParams::Verbose::OrFloat, wait_for_captcha_solves: T::Boolean, - x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::SessionStartParams::XStreamResponse::OrSymbol, request_options: Stagehand::RequestOptions::OrHash @@ -455,15 +388,15 @@ module Stagehand model_name:, # Body param: Timeout in ms for act operations (deprecated, v2 only) act_timeout_ms: nil, - # Body param: + # Body param browser: nil, - # Body param: + # Body param browserbase_session_create_params: nil, # Body param: Existing Browserbase session ID to resume browserbase_session_id: nil, # Body param: Timeout in ms to wait for DOM to settle dom_settle_timeout_ms: nil, - # Body param: + # Body param experimental: nil, # Body param: Enable self-healing for failed actions self_heal: nil, @@ -473,12 +406,6 @@ module Stagehand verbose: nil, # Body param: Wait for captcha solves (deprecated, v2 only) wait_for_captcha_solves: nil, - # Header param: Client SDK language - x_language: nil, - # Header param: Version of the Stagehand SDK - x_sdk_version: nil, - # Header param: ISO timestamp when request was sent - x_sent_at: nil, # Header param: Whether to stream the response via SSE x_stream_response: nil, request_options: {} diff --git a/sig/stagehand/models.rbs b/sig/stagehand/models.rbs index ebfaad6..b1942c9 100644 --- a/sig/stagehand/models.rbs +++ b/sig/stagehand/models.rbs @@ -1,7 +1,7 @@ module Stagehand class Action = Stagehand::Models::Action - module ModelConfig = Stagehand::Models::ModelConfig + class ModelConfig = Stagehand::Models::ModelConfig class SessionActParams = Stagehand::Models::SessionActParams @@ -15,6 +15,8 @@ module Stagehand class SessionObserveParams = Stagehand::Models::SessionObserveParams + class SessionReplayParams = Stagehand::Models::SessionReplayParams + class SessionStartParams = Stagehand::Models::SessionStartParams class StreamEvent = Stagehand::Models::StreamEvent diff --git a/sig/stagehand/models/model_config.rbs b/sig/stagehand/models/model_config.rbs index 36ee8c0..ec18bf7 100644 --- a/sig/stagehand/models/model_config.rbs +++ b/sig/stagehand/models/model_config.rbs @@ -1,64 +1,56 @@ module Stagehand module Models - type model_config = String | Stagehand::ModelConfig::ModelConfigObject + type model_config = + { + model_name: String, + api_key: String, + base_url: String, + provider: Stagehand::Models::ModelConfig::provider + } - module ModelConfig - extend Stagehand::Internal::Type::Union + class ModelConfig < Stagehand::Internal::Type::BaseModel + attr_accessor model_name: String - type model_config_object = - { - model_name: String, - api_key: String, - base_url: String, - provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider - } + attr_reader api_key: String? - class ModelConfigObject < Stagehand::Internal::Type::BaseModel - attr_accessor model_name: String + def api_key=: (String) -> String - attr_reader api_key: String? + attr_reader base_url: String? - def api_key=: (String) -> String + def base_url=: (String) -> String - attr_reader base_url: String? + attr_reader provider: Stagehand::Models::ModelConfig::provider? - def base_url=: (String) -> String + def provider=: ( + Stagehand::Models::ModelConfig::provider + ) -> Stagehand::Models::ModelConfig::provider - attr_reader provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider? + def initialize: ( + model_name: String, + ?api_key: String, + ?base_url: String, + ?provider: Stagehand::Models::ModelConfig::provider + ) -> void - def provider=: ( - Stagehand::Models::ModelConfig::ModelConfigObject::provider - ) -> Stagehand::Models::ModelConfig::ModelConfigObject::provider + def to_hash: -> { + model_name: String, + api_key: String, + base_url: String, + provider: Stagehand::Models::ModelConfig::provider + } - def initialize: ( - model_name: String, - ?api_key: String, - ?base_url: String, - ?provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider - ) -> void + type provider = :openai | :anthropic | :google | :microsoft - def to_hash: -> { - model_name: String, - api_key: String, - base_url: String, - provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider - } + module Provider + extend Stagehand::Internal::Type::Enum - type provider = :openai | :anthropic | :google | :microsoft + OPENAI: :openai + ANTHROPIC: :anthropic + GOOGLE: :google + MICROSOFT: :microsoft - module Provider - extend Stagehand::Internal::Type::Enum - - OPENAI: :openai - ANTHROPIC: :anthropic - GOOGLE: :google - MICROSOFT: :microsoft - - def self?.values: -> ::Array[Stagehand::Models::ModelConfig::ModelConfigObject::provider] - end + def self?.values: -> ::Array[Stagehand::Models::ModelConfig::provider] end - - def self?.variants: -> ::Array[Stagehand::Models::model_config] end end end diff --git a/sig/stagehand/models/session_act_params.rbs b/sig/stagehand/models/session_act_params.rbs index 650a3cc..873e768 100644 --- a/sig/stagehand/models/session_act_params.rbs +++ b/sig/stagehand/models/session_act_params.rbs @@ -3,11 +3,8 @@ module Stagehand type session_act_params = { input: Stagehand::Models::SessionActParams::input, - frame_id: String, + frame_id: String?, options: Stagehand::SessionActParams::Options, - x_language: Stagehand::Models::SessionActParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionActParams::x_stream_response } & Stagehand::Internal::Type::request_parameters @@ -18,9 +15,7 @@ module Stagehand attr_accessor input: Stagehand::Models::SessionActParams::input - attr_reader frame_id: String? - - def frame_id=: (String) -> String + attr_accessor frame_id: String? attr_reader options: Stagehand::SessionActParams::Options? @@ -28,20 +23,6 @@ module Stagehand Stagehand::SessionActParams::Options ) -> Stagehand::SessionActParams::Options - attr_reader x_language: Stagehand::Models::SessionActParams::x_language? - - def x_language=: ( - Stagehand::Models::SessionActParams::x_language - ) -> Stagehand::Models::SessionActParams::x_language - - attr_reader x_sdk_version: String? - - def x_sdk_version=: (String) -> String - - attr_reader x_sent_at: Time? - - def x_sent_at=: (Time) -> Time - attr_reader x_stream_response: Stagehand::Models::SessionActParams::x_stream_response? def x_stream_response=: ( @@ -50,22 +31,16 @@ module Stagehand def initialize: ( input: Stagehand::Models::SessionActParams::input, - ?frame_id: String, + ?frame_id: String?, ?options: Stagehand::SessionActParams::Options, - ?x_language: Stagehand::Models::SessionActParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionActParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> void def to_hash: -> { input: Stagehand::Models::SessionActParams::input, - frame_id: String, + frame_id: String?, options: Stagehand::SessionActParams::Options, - x_language: Stagehand::Models::SessionActParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionActParams::x_stream_response, request_options: Stagehand::RequestOptions } @@ -80,17 +55,17 @@ module Stagehand type options = { - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionActParams::Options::model, timeout: Float, variables: ::Hash[Symbol, String] } class Options < Stagehand::Internal::Type::BaseModel - attr_reader model: Stagehand::Models::model_config? + attr_reader model: Stagehand::Models::SessionActParams::Options::model? def model=: ( - Stagehand::Models::model_config - ) -> Stagehand::Models::model_config + Stagehand::Models::SessionActParams::Options::model + ) -> Stagehand::Models::SessionActParams::Options::model attr_reader timeout: Float? @@ -101,28 +76,24 @@ module Stagehand def variables=: (::Hash[Symbol, String]) -> ::Hash[Symbol, String] def initialize: ( - ?model: Stagehand::Models::model_config, + ?model: Stagehand::Models::SessionActParams::Options::model, ?timeout: Float, ?variables: ::Hash[Symbol, String] ) -> void def to_hash: -> { - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionActParams::Options::model, timeout: Float, variables: ::Hash[Symbol, String] } - end - type x_language = :typescript | :python | :playground - - module XLanguage - extend Stagehand::Internal::Type::Enum + type model = Stagehand::ModelConfig | String - TYPESCRIPT: :typescript - PYTHON: :python - PLAYGROUND: :playground + module Model + extend Stagehand::Internal::Type::Union - def self?.values: -> ::Array[Stagehand::Models::SessionActParams::x_language] + def self?.variants: -> ::Array[Stagehand::Models::SessionActParams::Options::model] + end end type x_stream_response = :true | :false diff --git a/sig/stagehand/models/session_end_params.rbs b/sig/stagehand/models/session_end_params.rbs index 3d3093f..fab9e7a 100644 --- a/sig/stagehand/models/session_end_params.rbs +++ b/sig/stagehand/models/session_end_params.rbs @@ -2,9 +2,6 @@ module Stagehand module Models type session_end_params = { - x_language: Stagehand::Models::SessionEndParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionEndParams::x_stream_response } & Stagehand::Internal::Type::request_parameters @@ -13,20 +10,6 @@ module Stagehand extend Stagehand::Internal::Type::RequestParameters::Converter include Stagehand::Internal::Type::RequestParameters - attr_reader x_language: Stagehand::Models::SessionEndParams::x_language? - - def x_language=: ( - Stagehand::Models::SessionEndParams::x_language - ) -> Stagehand::Models::SessionEndParams::x_language - - attr_reader x_sdk_version: String? - - def x_sdk_version=: (String) -> String - - attr_reader x_sent_at: Time? - - def x_sent_at=: (Time) -> Time - attr_reader x_stream_response: Stagehand::Models::SessionEndParams::x_stream_response? def x_stream_response=: ( @@ -34,33 +17,15 @@ module Stagehand ) -> Stagehand::Models::SessionEndParams::x_stream_response def initialize: ( - ?x_language: Stagehand::Models::SessionEndParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionEndParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> void def to_hash: -> { - x_language: Stagehand::Models::SessionEndParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionEndParams::x_stream_response, request_options: Stagehand::RequestOptions } - type x_language = :typescript | :python | :playground - - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT: :typescript - PYTHON: :python - PLAYGROUND: :playground - - def self?.values: -> ::Array[Stagehand::Models::SessionEndParams::x_language] - end - type x_stream_response = :true | :false module XStreamResponse diff --git a/sig/stagehand/models/session_execute_params.rbs b/sig/stagehand/models/session_execute_params.rbs index 74e78ce..5f45c4f 100644 --- a/sig/stagehand/models/session_execute_params.rbs +++ b/sig/stagehand/models/session_execute_params.rbs @@ -4,10 +4,8 @@ module Stagehand { agent_config: Stagehand::SessionExecuteParams::AgentConfig, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions, - frame_id: String, - x_language: Stagehand::Models::SessionExecuteParams::x_language, - x_sdk_version: String, - x_sent_at: Time, + frame_id: String?, + should_cache: bool, x_stream_response: Stagehand::Models::SessionExecuteParams::x_stream_response } & Stagehand::Internal::Type::request_parameters @@ -20,23 +18,11 @@ module Stagehand attr_accessor execute_options: Stagehand::SessionExecuteParams::ExecuteOptions - attr_reader frame_id: String? + attr_accessor frame_id: String? - def frame_id=: (String) -> String + attr_reader should_cache: bool? - attr_reader x_language: Stagehand::Models::SessionExecuteParams::x_language? - - def x_language=: ( - Stagehand::Models::SessionExecuteParams::x_language - ) -> Stagehand::Models::SessionExecuteParams::x_language - - attr_reader x_sdk_version: String? - - def x_sdk_version=: (String) -> String - - attr_reader x_sent_at: Time? - - def x_sent_at=: (Time) -> Time + def should_cache=: (bool) -> bool attr_reader x_stream_response: Stagehand::Models::SessionExecuteParams::x_stream_response? @@ -47,10 +33,8 @@ module Stagehand def initialize: ( agent_config: Stagehand::SessionExecuteParams::AgentConfig, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions, - ?frame_id: String, - ?x_language: Stagehand::Models::SessionExecuteParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, + ?frame_id: String?, + ?should_cache: bool, ?x_stream_response: Stagehand::Models::SessionExecuteParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> void @@ -58,10 +42,8 @@ module Stagehand def to_hash: -> { agent_config: Stagehand::SessionExecuteParams::AgentConfig, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions, - frame_id: String, - x_language: Stagehand::Models::SessionExecuteParams::x_language, - x_sdk_version: String, - x_sent_at: Time, + frame_id: String?, + should_cache: bool, x_stream_response: Stagehand::Models::SessionExecuteParams::x_stream_response, request_options: Stagehand::RequestOptions } @@ -69,7 +51,7 @@ module Stagehand type agent_config = { cua: bool, - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionExecuteParams::AgentConfig::model, provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider, system_prompt: String } @@ -79,11 +61,11 @@ module Stagehand def cua=: (bool) -> bool - attr_reader model: Stagehand::Models::model_config? + attr_reader model: Stagehand::Models::SessionExecuteParams::AgentConfig::model? def model=: ( - Stagehand::Models::model_config - ) -> Stagehand::Models::model_config + Stagehand::Models::SessionExecuteParams::AgentConfig::model + ) -> Stagehand::Models::SessionExecuteParams::AgentConfig::model attr_reader provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider? @@ -97,18 +79,26 @@ module Stagehand def initialize: ( ?cua: bool, - ?model: Stagehand::Models::model_config, + ?model: Stagehand::Models::SessionExecuteParams::AgentConfig::model, ?provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider, ?system_prompt: String ) -> void def to_hash: -> { cua: bool, - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionExecuteParams::AgentConfig::model, provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider, system_prompt: String } + type model = Stagehand::ModelConfig | String + + module Model + extend Stagehand::Internal::Type::Union + + def self?.variants: -> ::Array[Stagehand::Models::SessionExecuteParams::AgentConfig::model] + end + type provider = :openai | :anthropic | :google | :microsoft module Provider @@ -150,18 +140,6 @@ module Stagehand } end - type x_language = :typescript | :python | :playground - - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT: :typescript - PYTHON: :python - PLAYGROUND: :playground - - def self?.values: -> ::Array[Stagehand::Models::SessionExecuteParams::x_language] - end - type x_stream_response = :true | :false module XStreamResponse diff --git a/sig/stagehand/models/session_execute_response.rbs b/sig/stagehand/models/session_execute_response.rbs index 740b8a2..ab959c3 100644 --- a/sig/stagehand/models/session_execute_response.rbs +++ b/sig/stagehand/models/session_execute_response.rbs @@ -19,17 +19,28 @@ module Stagehand } type data = - { result: Stagehand::Models::SessionExecuteResponse::Data::Result } + { + result: Stagehand::Models::SessionExecuteResponse::Data::Result, + cache_entry: Stagehand::Models::SessionExecuteResponse::Data::CacheEntry + } class Data < Stagehand::Internal::Type::BaseModel attr_accessor result: Stagehand::Models::SessionExecuteResponse::Data::Result + attr_reader cache_entry: Stagehand::Models::SessionExecuteResponse::Data::CacheEntry? + + def cache_entry=: ( + Stagehand::Models::SessionExecuteResponse::Data::CacheEntry + ) -> Stagehand::Models::SessionExecuteResponse::Data::CacheEntry + def initialize: ( - result: Stagehand::Models::SessionExecuteResponse::Data::Result + result: Stagehand::Models::SessionExecuteResponse::Data::Result, + ?cache_entry: Stagehand::Models::SessionExecuteResponse::Data::CacheEntry ) -> void def to_hash: -> { - result: Stagehand::Models::SessionExecuteResponse::Data::Result + result: Stagehand::Models::SessionExecuteResponse::Data::Result, + cache_entry: Stagehand::Models::SessionExecuteResponse::Data::CacheEntry } type result = @@ -186,6 +197,18 @@ module Stagehand } end end + + type cache_entry = { cache_key: String, entry: top } + + class CacheEntry < Stagehand::Internal::Type::BaseModel + attr_accessor cache_key: String + + attr_accessor entry: top + + def initialize: (cache_key: String, entry: top) -> void + + def to_hash: -> { cache_key: String, entry: top } + end end end end diff --git a/sig/stagehand/models/session_extract_params.rbs b/sig/stagehand/models/session_extract_params.rbs index e58df84..0883d42 100644 --- a/sig/stagehand/models/session_extract_params.rbs +++ b/sig/stagehand/models/session_extract_params.rbs @@ -2,13 +2,10 @@ module Stagehand module Models type session_extract_params = { - frame_id: String, + frame_id: String?, instruction: String, options: Stagehand::SessionExtractParams::Options, schema: ::Hash[Symbol, top], - x_language: Stagehand::Models::SessionExtractParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionExtractParams::x_stream_response } & Stagehand::Internal::Type::request_parameters @@ -17,9 +14,7 @@ module Stagehand extend Stagehand::Internal::Type::RequestParameters::Converter include Stagehand::Internal::Type::RequestParameters - attr_reader frame_id: String? - - def frame_id=: (String) -> String + attr_accessor frame_id: String? attr_reader instruction: String? @@ -35,20 +30,6 @@ module Stagehand def schema=: (::Hash[Symbol, top]) -> ::Hash[Symbol, top] - attr_reader x_language: Stagehand::Models::SessionExtractParams::x_language? - - def x_language=: ( - Stagehand::Models::SessionExtractParams::x_language - ) -> Stagehand::Models::SessionExtractParams::x_language - - attr_reader x_sdk_version: String? - - def x_sdk_version=: (String) -> String - - attr_reader x_sent_at: Time? - - def x_sent_at=: (Time) -> Time - attr_reader x_stream_response: Stagehand::Models::SessionExtractParams::x_stream_response? def x_stream_response=: ( @@ -56,42 +37,36 @@ module Stagehand ) -> Stagehand::Models::SessionExtractParams::x_stream_response def initialize: ( - ?frame_id: String, + ?frame_id: String?, ?instruction: String, ?options: Stagehand::SessionExtractParams::Options, ?schema: ::Hash[Symbol, top], - ?x_language: Stagehand::Models::SessionExtractParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionExtractParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> void def to_hash: -> { - frame_id: String, + frame_id: String?, instruction: String, options: Stagehand::SessionExtractParams::Options, schema: ::Hash[Symbol, top], - x_language: Stagehand::Models::SessionExtractParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionExtractParams::x_stream_response, request_options: Stagehand::RequestOptions } type options = { - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionExtractParams::Options::model, selector: String, timeout: Float } class Options < Stagehand::Internal::Type::BaseModel - attr_reader model: Stagehand::Models::model_config? + attr_reader model: Stagehand::Models::SessionExtractParams::Options::model? def model=: ( - Stagehand::Models::model_config - ) -> Stagehand::Models::model_config + Stagehand::Models::SessionExtractParams::Options::model + ) -> Stagehand::Models::SessionExtractParams::Options::model attr_reader selector: String? @@ -102,28 +77,24 @@ module Stagehand def timeout=: (Float) -> Float def initialize: ( - ?model: Stagehand::Models::model_config, + ?model: Stagehand::Models::SessionExtractParams::Options::model, ?selector: String, ?timeout: Float ) -> void def to_hash: -> { - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionExtractParams::Options::model, selector: String, timeout: Float } - end - type x_language = :typescript | :python | :playground - - module XLanguage - extend Stagehand::Internal::Type::Enum + type model = Stagehand::ModelConfig | String - TYPESCRIPT: :typescript - PYTHON: :python - PLAYGROUND: :playground + module Model + extend Stagehand::Internal::Type::Union - def self?.values: -> ::Array[Stagehand::Models::SessionExtractParams::x_language] + def self?.variants: -> ::Array[Stagehand::Models::SessionExtractParams::Options::model] + end end type x_stream_response = :true | :false diff --git a/sig/stagehand/models/session_navigate_params.rbs b/sig/stagehand/models/session_navigate_params.rbs index ced7f1f..f02e2d9 100644 --- a/sig/stagehand/models/session_navigate_params.rbs +++ b/sig/stagehand/models/session_navigate_params.rbs @@ -3,12 +3,9 @@ module Stagehand type session_navigate_params = { url: String, - frame_id: String, + frame_id: String?, options: Stagehand::SessionNavigateParams::Options, stream_response: bool, - x_language: Stagehand::Models::SessionNavigateParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionNavigateParams::x_stream_response } & Stagehand::Internal::Type::request_parameters @@ -19,9 +16,7 @@ module Stagehand attr_accessor url: String - attr_reader frame_id: String? - - def frame_id=: (String) -> String + attr_accessor frame_id: String? attr_reader options: Stagehand::SessionNavigateParams::Options? @@ -33,20 +28,6 @@ module Stagehand def stream_response=: (bool) -> bool - attr_reader x_language: Stagehand::Models::SessionNavigateParams::x_language? - - def x_language=: ( - Stagehand::Models::SessionNavigateParams::x_language - ) -> Stagehand::Models::SessionNavigateParams::x_language - - attr_reader x_sdk_version: String? - - def x_sdk_version=: (String) -> String - - attr_reader x_sent_at: Time? - - def x_sent_at=: (Time) -> Time - attr_reader x_stream_response: Stagehand::Models::SessionNavigateParams::x_stream_response? def x_stream_response=: ( @@ -55,24 +36,18 @@ module Stagehand def initialize: ( url: String, - ?frame_id: String, + ?frame_id: String?, ?options: Stagehand::SessionNavigateParams::Options, ?stream_response: bool, - ?x_language: Stagehand::Models::SessionNavigateParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionNavigateParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> void def to_hash: -> { url: String, - frame_id: String, + frame_id: String?, options: Stagehand::SessionNavigateParams::Options, stream_response: bool, - x_language: Stagehand::Models::SessionNavigateParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionNavigateParams::x_stream_response, request_options: Stagehand::RequestOptions } @@ -124,18 +99,6 @@ module Stagehand end end - type x_language = :typescript | :python | :playground - - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT: :typescript - PYTHON: :python - PLAYGROUND: :playground - - def self?.values: -> ::Array[Stagehand::Models::SessionNavigateParams::x_language] - end - type x_stream_response = :true | :false module XStreamResponse diff --git a/sig/stagehand/models/session_observe_params.rbs b/sig/stagehand/models/session_observe_params.rbs index 1a76ea6..8451b64 100644 --- a/sig/stagehand/models/session_observe_params.rbs +++ b/sig/stagehand/models/session_observe_params.rbs @@ -2,12 +2,9 @@ module Stagehand module Models type session_observe_params = { - frame_id: String, + frame_id: String?, instruction: String, options: Stagehand::SessionObserveParams::Options, - x_language: Stagehand::Models::SessionObserveParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionObserveParams::x_stream_response } & Stagehand::Internal::Type::request_parameters @@ -16,9 +13,7 @@ module Stagehand extend Stagehand::Internal::Type::RequestParameters::Converter include Stagehand::Internal::Type::RequestParameters - attr_reader frame_id: String? - - def frame_id=: (String) -> String + attr_accessor frame_id: String? attr_reader instruction: String? @@ -30,20 +25,6 @@ module Stagehand Stagehand::SessionObserveParams::Options ) -> Stagehand::SessionObserveParams::Options - attr_reader x_language: Stagehand::Models::SessionObserveParams::x_language? - - def x_language=: ( - Stagehand::Models::SessionObserveParams::x_language - ) -> Stagehand::Models::SessionObserveParams::x_language - - attr_reader x_sdk_version: String? - - def x_sdk_version=: (String) -> String - - attr_reader x_sent_at: Time? - - def x_sent_at=: (Time) -> Time - attr_reader x_stream_response: Stagehand::Models::SessionObserveParams::x_stream_response? def x_stream_response=: ( @@ -51,40 +32,34 @@ module Stagehand ) -> Stagehand::Models::SessionObserveParams::x_stream_response def initialize: ( - ?frame_id: String, + ?frame_id: String?, ?instruction: String, ?options: Stagehand::SessionObserveParams::Options, - ?x_language: Stagehand::Models::SessionObserveParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionObserveParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> void def to_hash: -> { - frame_id: String, + frame_id: String?, instruction: String, options: Stagehand::SessionObserveParams::Options, - x_language: Stagehand::Models::SessionObserveParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionObserveParams::x_stream_response, request_options: Stagehand::RequestOptions } type options = { - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionObserveParams::Options::model, selector: String, timeout: Float } class Options < Stagehand::Internal::Type::BaseModel - attr_reader model: Stagehand::Models::model_config? + attr_reader model: Stagehand::Models::SessionObserveParams::Options::model? def model=: ( - Stagehand::Models::model_config - ) -> Stagehand::Models::model_config + Stagehand::Models::SessionObserveParams::Options::model + ) -> Stagehand::Models::SessionObserveParams::Options::model attr_reader selector: String? @@ -95,28 +70,24 @@ module Stagehand def timeout=: (Float) -> Float def initialize: ( - ?model: Stagehand::Models::model_config, + ?model: Stagehand::Models::SessionObserveParams::Options::model, ?selector: String, ?timeout: Float ) -> void def to_hash: -> { - model: Stagehand::Models::model_config, + model: Stagehand::Models::SessionObserveParams::Options::model, selector: String, timeout: Float } - end - type x_language = :typescript | :python | :playground - - module XLanguage - extend Stagehand::Internal::Type::Enum + type model = Stagehand::ModelConfig | String - TYPESCRIPT: :typescript - PYTHON: :python - PLAYGROUND: :playground + module Model + extend Stagehand::Internal::Type::Union - def self?.values: -> ::Array[Stagehand::Models::SessionObserveParams::x_language] + def self?.variants: -> ::Array[Stagehand::Models::SessionObserveParams::Options::model] + end end type x_stream_response = :true | :false diff --git a/sig/stagehand/models/session_replay_params.rbs b/sig/stagehand/models/session_replay_params.rbs new file mode 100644 index 0000000..f419c8c --- /dev/null +++ b/sig/stagehand/models/session_replay_params.rbs @@ -0,0 +1,41 @@ +module Stagehand + module Models + type session_replay_params = + { + x_stream_response: Stagehand::Models::SessionReplayParams::x_stream_response + } + & Stagehand::Internal::Type::request_parameters + + class SessionReplayParams < Stagehand::Internal::Type::BaseModel + extend Stagehand::Internal::Type::RequestParameters::Converter + include Stagehand::Internal::Type::RequestParameters + + attr_reader x_stream_response: Stagehand::Models::SessionReplayParams::x_stream_response? + + def x_stream_response=: ( + Stagehand::Models::SessionReplayParams::x_stream_response + ) -> Stagehand::Models::SessionReplayParams::x_stream_response + + def initialize: ( + ?x_stream_response: Stagehand::Models::SessionReplayParams::x_stream_response, + ?request_options: Stagehand::request_opts + ) -> void + + def to_hash: -> { + x_stream_response: Stagehand::Models::SessionReplayParams::x_stream_response, + request_options: Stagehand::RequestOptions + } + + type x_stream_response = :true | :false + + module XStreamResponse + extend Stagehand::Internal::Type::Enum + + TRUE: :true + FALSE: :false + + def self?.values: -> ::Array[Stagehand::Models::SessionReplayParams::x_stream_response] + end + end + end +end diff --git a/sig/stagehand/models/session_replay_response.rbs b/sig/stagehand/models/session_replay_response.rbs new file mode 100644 index 0000000..b94815c --- /dev/null +++ b/sig/stagehand/models/session_replay_response.rbs @@ -0,0 +1,137 @@ +module Stagehand + module Models + type session_replay_response = + { data: Stagehand::Models::SessionReplayResponse::Data, success: bool } + + class SessionReplayResponse < Stagehand::Internal::Type::BaseModel + attr_accessor data: Stagehand::Models::SessionReplayResponse::Data + + attr_accessor success: bool + + def initialize: ( + data: Stagehand::Models::SessionReplayResponse::Data, + success: bool + ) -> void + + def to_hash: -> { + data: Stagehand::Models::SessionReplayResponse::Data, + success: bool + } + + type data = + { pages: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page] } + + class Data < Stagehand::Internal::Type::BaseModel + attr_reader pages: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page]? + + def pages=: ( + ::Array[Stagehand::Models::SessionReplayResponse::Data::Page] + ) -> ::Array[Stagehand::Models::SessionReplayResponse::Data::Page] + + def initialize: ( + ?pages: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page] + ) -> void + + def to_hash: -> { + pages: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page] + } + + type page = + { + actions: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page::Action] + } + + class Page < Stagehand::Internal::Type::BaseModel + attr_reader actions: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page::Action]? + + def actions=: ( + ::Array[Stagehand::Models::SessionReplayResponse::Data::Page::Action] + ) -> ::Array[Stagehand::Models::SessionReplayResponse::Data::Page::Action] + + def initialize: ( + ?actions: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page::Action] + ) -> void + + def to_hash: -> { + actions: ::Array[Stagehand::Models::SessionReplayResponse::Data::Page::Action] + } + + type action = + { + method_: String, + token_usage: Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage + } + + class Action < Stagehand::Internal::Type::BaseModel + attr_reader method_: String? + + def method_=: (String) -> String + + attr_reader token_usage: Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage? + + def token_usage=: ( + Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage + ) -> Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage + + def initialize: ( + ?method_: String, + ?token_usage: Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage + ) -> void + + def to_hash: -> { + method_: String, + token_usage: Stagehand::Models::SessionReplayResponse::Data::Page::Action::TokenUsage + } + + type token_usage = + { + cached_input_tokens: Float, + input_tokens: Float, + output_tokens: Float, + reasoning_tokens: Float, + time_ms: Float + } + + class TokenUsage < Stagehand::Internal::Type::BaseModel + attr_reader cached_input_tokens: Float? + + def cached_input_tokens=: (Float) -> Float + + attr_reader input_tokens: Float? + + def input_tokens=: (Float) -> Float + + attr_reader output_tokens: Float? + + def output_tokens=: (Float) -> Float + + attr_reader reasoning_tokens: Float? + + def reasoning_tokens=: (Float) -> Float + + attr_reader time_ms: Float? + + def time_ms=: (Float) -> Float + + def initialize: ( + ?cached_input_tokens: Float, + ?input_tokens: Float, + ?output_tokens: Float, + ?reasoning_tokens: Float, + ?time_ms: Float + ) -> void + + def to_hash: -> { + cached_input_tokens: Float, + input_tokens: Float, + output_tokens: Float, + reasoning_tokens: Float, + time_ms: Float + } + end + end + end + end + end + end +end diff --git a/sig/stagehand/models/session_start_params.rbs b/sig/stagehand/models/session_start_params.rbs index 7ce7c12..5944f95 100644 --- a/sig/stagehand/models/session_start_params.rbs +++ b/sig/stagehand/models/session_start_params.rbs @@ -13,9 +13,6 @@ module Stagehand system_prompt: String, verbose: Stagehand::Models::SessionStartParams::verbose, wait_for_captcha_solves: bool, - x_language: Stagehand::Models::SessionStartParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionStartParams::x_stream_response } & Stagehand::Internal::Type::request_parameters @@ -72,20 +69,6 @@ module Stagehand def wait_for_captcha_solves=: (bool) -> bool - attr_reader x_language: Stagehand::Models::SessionStartParams::x_language? - - def x_language=: ( - Stagehand::Models::SessionStartParams::x_language - ) -> Stagehand::Models::SessionStartParams::x_language - - attr_reader x_sdk_version: String? - - def x_sdk_version=: (String) -> String - - attr_reader x_sent_at: Time? - - def x_sent_at=: (Time) -> Time - attr_reader x_stream_response: Stagehand::Models::SessionStartParams::x_stream_response? def x_stream_response=: ( @@ -104,9 +87,6 @@ module Stagehand ?system_prompt: String, ?verbose: Stagehand::Models::SessionStartParams::verbose, ?wait_for_captcha_solves: bool, - ?x_language: Stagehand::Models::SessionStartParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionStartParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> void @@ -123,9 +103,6 @@ module Stagehand system_prompt: String, verbose: Stagehand::Models::SessionStartParams::verbose, wait_for_captcha_solves: bool, - x_language: Stagehand::Models::SessionStartParams::x_language, - x_sdk_version: String, - x_sent_at: Time, x_stream_response: Stagehand::Models::SessionStartParams::x_stream_response, request_options: Stagehand::RequestOptions } @@ -182,6 +159,7 @@ module Stagehand ignore_default_args: Stagehand::Models::SessionStartParams::Browser::LaunchOptions::ignore_default_args, ignore_https_errors: bool, locale: String, + port: Float, preserve_user_data_dir: bool, proxy: Stagehand::SessionStartParams::Browser::LaunchOptions::Proxy, user_data_dir: String, @@ -247,6 +225,10 @@ module Stagehand def locale=: (String) -> String + attr_reader port: Float? + + def port=: (Float) -> Float + attr_reader preserve_user_data_dir: bool? def preserve_user_data_dir=: (bool) -> bool @@ -282,6 +264,7 @@ module Stagehand ?ignore_default_args: Stagehand::Models::SessionStartParams::Browser::LaunchOptions::ignore_default_args, ?ignore_https_errors: bool, ?locale: String, + ?port: Float, ?preserve_user_data_dir: bool, ?proxy: Stagehand::SessionStartParams::Browser::LaunchOptions::Proxy, ?user_data_dir: String, @@ -303,6 +286,7 @@ module Stagehand ignore_default_args: Stagehand::Models::SessionStartParams::Browser::LaunchOptions::ignore_default_args, ignore_https_errors: bool, locale: String, + port: Float, preserve_user_data_dir: bool, proxy: Stagehand::SessionStartParams::Browser::LaunchOptions::Proxy, user_data_dir: String, @@ -867,18 +851,6 @@ module Stagehand def self?.values: -> ::Array[Stagehand::Models::SessionStartParams::verbose] end - type x_language = :typescript | :python | :playground - - module XLanguage - extend Stagehand::Internal::Type::Enum - - TYPESCRIPT: :typescript - PYTHON: :python - PLAYGROUND: :playground - - def self?.values: -> ::Array[Stagehand::Models::SessionStartParams::x_language] - end - type x_stream_response = :true | :false module XStreamResponse diff --git a/sig/stagehand/resources/sessions.rbs b/sig/stagehand/resources/sessions.rbs index c5ab041..cc450b6 100644 --- a/sig/stagehand/resources/sessions.rbs +++ b/sig/stagehand/resources/sessions.rbs @@ -4,11 +4,8 @@ module Stagehand def act: ( String id, input: Stagehand::Models::SessionActParams::input, - ?frame_id: String, + ?frame_id: String?, ?options: Stagehand::SessionActParams::Options, - ?x_language: Stagehand::Models::SessionActParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionActParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Models::SessionActResponse @@ -16,20 +13,14 @@ module Stagehand def act_streaming: ( String id, input: Stagehand::Models::SessionActParams::input, - ?frame_id: String, + ?frame_id: String?, ?options: Stagehand::SessionActParams::Options, - ?x_language: Stagehand::Models::SessionActParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionActParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Internal::Stream[Stagehand::StreamEvent] def end_: ( String id, - ?x_language: Stagehand::Models::SessionEndParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionEndParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Models::SessionEndResponse @@ -38,10 +29,8 @@ module Stagehand String id, agent_config: Stagehand::SessionExecuteParams::AgentConfig, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions, - ?frame_id: String, - ?x_language: Stagehand::Models::SessionExecuteParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, + ?frame_id: String?, + ?should_cache: bool, ?x_stream_response: Stagehand::Models::SessionExecuteParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Models::SessionExecuteResponse @@ -50,36 +39,28 @@ module Stagehand String id, agent_config: Stagehand::SessionExecuteParams::AgentConfig, execute_options: Stagehand::SessionExecuteParams::ExecuteOptions, - ?frame_id: String, - ?x_language: Stagehand::Models::SessionExecuteParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, + ?frame_id: String?, + ?should_cache: bool, ?x_stream_response: Stagehand::Models::SessionExecuteParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Internal::Stream[Stagehand::StreamEvent] def extract: ( String id, - ?frame_id: String, + ?frame_id: String?, ?instruction: String, ?options: Stagehand::SessionExtractParams::Options, ?schema: ::Hash[Symbol, top], - ?x_language: Stagehand::Models::SessionExtractParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionExtractParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Models::SessionExtractResponse def extract_streaming: ( String id, - ?frame_id: String, + ?frame_id: String?, ?instruction: String, ?options: Stagehand::SessionExtractParams::Options, ?schema: ::Hash[Symbol, top], - ?x_language: Stagehand::Models::SessionExtractParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionExtractParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Internal::Stream[Stagehand::StreamEvent] @@ -87,40 +68,37 @@ module Stagehand def navigate: ( String id, url: String, - ?frame_id: String, + ?frame_id: String?, ?options: Stagehand::SessionNavigateParams::Options, ?stream_response: bool, - ?x_language: Stagehand::Models::SessionNavigateParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionNavigateParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Models::SessionNavigateResponse def observe: ( String id, - ?frame_id: String, + ?frame_id: String?, ?instruction: String, ?options: Stagehand::SessionObserveParams::Options, - ?x_language: Stagehand::Models::SessionObserveParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionObserveParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Models::SessionObserveResponse def observe_streaming: ( String id, - ?frame_id: String, + ?frame_id: String?, ?instruction: String, ?options: Stagehand::SessionObserveParams::Options, - ?x_language: Stagehand::Models::SessionObserveParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionObserveParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Internal::Stream[Stagehand::StreamEvent] + def replay: ( + String id, + ?x_stream_response: Stagehand::Models::SessionReplayParams::x_stream_response, + ?request_options: Stagehand::request_opts + ) -> Stagehand::Models::SessionReplayResponse + def start: ( model_name: String, ?act_timeout_ms: Float, @@ -133,9 +111,6 @@ module Stagehand ?system_prompt: String, ?verbose: Stagehand::Models::SessionStartParams::verbose, ?wait_for_captcha_solves: bool, - ?x_language: Stagehand::Models::SessionStartParams::x_language, - ?x_sdk_version: String, - ?x_sent_at: Time, ?x_stream_response: Stagehand::Models::SessionStartParams::x_stream_response, ?request_options: Stagehand::request_opts ) -> Stagehand::Models::SessionStartResponse diff --git a/stagehand.gemspec b/stagehand.gemspec index 3b5af74..9aef31c 100644 --- a/stagehand.gemspec +++ b/stagehand.gemspec @@ -24,5 +24,6 @@ Gem::Specification.new do |s| ".ignore" ] s.extra_rdoc_files = ["README.md"] + s.add_dependency "cgi" s.add_dependency "connection_pool" end diff --git a/test/stagehand/client_test.rb b/test/stagehand/client_test.rb index bad7760..fcb4bd0 100644 --- a/test/stagehand/client_test.rb +++ b/test/stagehand/client_test.rb @@ -46,7 +46,7 @@ def test_client_default_request_default_retry_attempts ) assert_raises(Stagehand::Errors::InternalServerError) do - stagehand.sessions.start(model_name: "gpt-4o") + stagehand.sessions.start(model_name: "openai/gpt-4o") end assert_requested(:any, /./, times: 3) @@ -65,7 +65,7 @@ def test_client_given_request_default_retry_attempts ) assert_raises(Stagehand::Errors::InternalServerError) do - stagehand.sessions.start(model_name: "gpt-4o") + stagehand.sessions.start(model_name: "openai/gpt-4o") end assert_requested(:any, /./, times: 4) @@ -83,7 +83,7 @@ def test_client_default_request_given_retry_attempts ) assert_raises(Stagehand::Errors::InternalServerError) do - stagehand.sessions.start(model_name: "gpt-4o", request_options: {max_retries: 3}) + stagehand.sessions.start(model_name: "openai/gpt-4o", request_options: {max_retries: 3}) end assert_requested(:any, /./, times: 4) @@ -102,7 +102,7 @@ def test_client_given_request_given_retry_attempts ) assert_raises(Stagehand::Errors::InternalServerError) do - stagehand.sessions.start(model_name: "gpt-4o", request_options: {max_retries: 4}) + stagehand.sessions.start(model_name: "openai/gpt-4o", request_options: {max_retries: 4}) end assert_requested(:any, /./, times: 5) @@ -125,7 +125,7 @@ def test_client_retry_after_seconds ) assert_raises(Stagehand::Errors::InternalServerError) do - stagehand.sessions.start(model_name: "gpt-4o") + stagehand.sessions.start(model_name: "openai/gpt-4o") end assert_requested(:any, /./, times: 2) @@ -150,7 +150,7 @@ def test_client_retry_after_date assert_raises(Stagehand::Errors::InternalServerError) do Thread.current.thread_variable_set(:time_now, Time.now) - stagehand.sessions.start(model_name: "gpt-4o") + stagehand.sessions.start(model_name: "openai/gpt-4o") Thread.current.thread_variable_set(:time_now, nil) end @@ -175,7 +175,7 @@ def test_client_retry_after_ms ) assert_raises(Stagehand::Errors::InternalServerError) do - stagehand.sessions.start(model_name: "gpt-4o") + stagehand.sessions.start(model_name: "openai/gpt-4o") end assert_requested(:any, /./, times: 2) @@ -194,7 +194,7 @@ def test_retry_count_header ) assert_raises(Stagehand::Errors::InternalServerError) do - stagehand.sessions.start(model_name: "gpt-4o") + stagehand.sessions.start(model_name: "openai/gpt-4o") end 3.times do @@ -215,7 +215,7 @@ def test_omit_retry_count_header assert_raises(Stagehand::Errors::InternalServerError) do stagehand.sessions.start( - model_name: "gpt-4o", + model_name: "openai/gpt-4o", request_options: {extra_headers: {"x-stainless-retry-count" => nil}} ) end @@ -238,7 +238,7 @@ def test_overwrite_retry_count_header assert_raises(Stagehand::Errors::InternalServerError) do stagehand.sessions.start( - model_name: "gpt-4o", + model_name: "openai/gpt-4o", request_options: {extra_headers: {"x-stainless-retry-count" => "42"}} ) end @@ -266,7 +266,7 @@ def test_client_redirect_307 ) assert_raises(Stagehand::Errors::APIConnectionError) do - stagehand.sessions.start(model_name: "gpt-4o", request_options: {extra_headers: {}}) + stagehand.sessions.start(model_name: "openai/gpt-4o", request_options: {extra_headers: {}}) end recorded, = WebMock::RequestRegistry.instance.requested_signatures.hash.first @@ -301,7 +301,7 @@ def test_client_redirect_303 ) assert_raises(Stagehand::Errors::APIConnectionError) do - stagehand.sessions.start(model_name: "gpt-4o", request_options: {extra_headers: {}}) + stagehand.sessions.start(model_name: "openai/gpt-4o", request_options: {extra_headers: {}}) end assert_requested(:get, "http://localhost/redirected", times: Stagehand::Client::MAX_REDIRECTS) do @@ -332,7 +332,7 @@ def test_client_redirect_auth_keep_same_origin assert_raises(Stagehand::Errors::APIConnectionError) do stagehand.sessions.start( - model_name: "gpt-4o", + model_name: "openai/gpt-4o", request_options: {extra_headers: {"authorization" => "Bearer xyz"}} ) end @@ -368,7 +368,7 @@ def test_client_redirect_auth_strip_cross_origin assert_raises(Stagehand::Errors::APIConnectionError) do stagehand.sessions.start( - model_name: "gpt-4o", + model_name: "openai/gpt-4o", request_options: {extra_headers: {"authorization" => "Bearer xyz"}} ) end @@ -390,7 +390,7 @@ def test_default_headers model_api_key: "My Model API Key" ) - stagehand.sessions.start(model_name: "gpt-4o") + stagehand.sessions.start(model_name: "openai/gpt-4o") assert_requested(:any, /./) do |req| headers = req.headers.transform_keys(&:downcase).fetch_values("accept", "content-type") diff --git a/test/stagehand/resources/sessions_test.rb b/test/stagehand/resources/sessions_test.rb index 9748e5c..b10a800 100644 --- a/test/stagehand/resources/sessions_test.rb +++ b/test/stagehand/resources/sessions_test.rb @@ -111,10 +111,27 @@ def test_observe end end + def test_replay + skip("Prism tests are disabled") + + response = @stagehand.sessions.replay("c4dbf3a9-9a58-4b22-8a1c-9f20f9f9e123") + + assert_pattern do + response => Stagehand::Models::SessionReplayResponse + end + + assert_pattern do + response => { + data: Stagehand::Models::SessionReplayResponse::Data, + success: Stagehand::Internal::Type::Boolean + } + end + end + def test_start_required_params skip("Prism tests are disabled") - response = @stagehand.sessions.start(model_name: "gpt-4o") + response = @stagehand.sessions.start(model_name: "openai/gpt-4o") assert_pattern do response => Stagehand::Models::SessionStartResponse From 9bb904f06630cf38489ae1dba68b8bb2a0c0a770 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 22:08:18 +0000 Subject: [PATCH 2/2] release: 3.0.2 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ Gemfile.lock | 2 +- README.md | 2 +- lib/stagehand/version.rb | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 56441f9..a1304a1 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "3.0.1" + ".": "3.0.2" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 74290b2..b11f481 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 3.0.2 (2026-01-22) + +Full Changelog: [v3.0.1...v3.0.2](https://github.com/browserbase/stagehand-ruby/compare/v3.0.1...v3.0.2) + +### Chores + +* remove custom code ([3943364](https://github.com/browserbase/stagehand-ruby/commit/394336419ed210704639af03445858f44f03ba13)) + ## 3.0.1 (2026-01-15) Full Changelog: [v0.6.2...v3.0.1](https://github.com/browserbase/stagehand-ruby/compare/v0.6.2...v3.0.1) diff --git a/Gemfile.lock b/Gemfile.lock index be97777..611d738 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - stagehand (3.0.1) + stagehand (3.0.2) cgi connection_pool diff --git a/README.md b/README.md index 273639b..f3380f8 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "stagehand", "~> 3.0.1" +gem "stagehand", "~> 3.0.2" ``` diff --git a/lib/stagehand/version.rb b/lib/stagehand/version.rb index 831a738..fdc5dfc 100644 --- a/lib/stagehand/version.rb +++ b/lib/stagehand/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Stagehand - VERSION = "3.0.1" + VERSION = "3.0.2" end