From 061930217b3efce30e29cf8b2511970b21c86c57 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:36:19 +0000 Subject: [PATCH 1/6] feat(api): manual updates --- .stats.yml | 4 +- lib/stagehand/models/action.rb | 10 +- lib/stagehand/models/model_config.rb | 25 ++++- lib/stagehand/models/session_act_response.rb | 52 +++++++++- .../models/session_execute_params.rb | 25 ++++- .../models/session_observe_response.rb | 52 +++++++++- lib/stagehand/models/session_start_params.rb | 34 ++++--- .../models/session_start_response.rb | 22 +++-- lib/stagehand/models/stream_event.rb | 2 +- lib/stagehand/resources/sessions.rb | 10 +- rbi/stagehand/models/action.rbi | 11 +++ rbi/stagehand/models/model_config.rbi | 80 +++++++++++++++- rbi/stagehand/models/session_act_response.rbi | 95 +++++++++++++++++- .../models/session_execute_params.rbi | 69 +++++++++++++ .../models/session_observe_response.rbi | 96 ++++++++++++++++++- rbi/stagehand/models/session_start_params.rbi | 51 +++++++--- .../models/session_start_response.rbi | 26 +++-- rbi/stagehand/models/stream_event.rbi | 2 +- rbi/stagehand/resources/sessions.rbi | 9 +- sig/stagehand/models/action.rbs | 7 ++ sig/stagehand/models/model_config.rbs | 32 ++++++- sig/stagehand/models/session_act_response.rbs | 51 +++++++++- .../models/session_execute_params.rbs | 22 +++++ .../models/session_observe_response.rbs | 55 ++++++++++- sig/stagehand/models/session_start_params.rbs | 31 +++--- .../models/session_start_response.rbs | 14 +-- sig/stagehand/resources/sessions.rbs | 3 +- 27 files changed, 775 insertions(+), 115 deletions(-) diff --git a/.stats.yml b/.stats.yml index 5dba58c..d90df61 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-f7d6b6489159f611a2bfdc267ce0a6fc0455bed1ffa0c310044baaa5d8381b9b.yml -openapi_spec_hash: cd88d8068abfde8382da0bed674e440c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-4fb17cafc413ae3d575e3268602b01d2d0e9ebeb734a41b6086b3353ff0d2523.yml +openapi_spec_hash: 8d48d8564849246f6f14d900c6c5f60c config_hash: 5c69fb596588b8ace08203858518c149 diff --git a/lib/stagehand/models/action.rb b/lib/stagehand/models/action.rb index 2f299e1..e88331d 100644 --- a/lib/stagehand/models/action.rb +++ b/lib/stagehand/models/action.rb @@ -21,13 +21,19 @@ class Action < Stagehand::Internal::Type::BaseModel # @return [Array, nil] optional :arguments, Stagehand::Internal::Type::ArrayOf[String] + # @!attribute backend_node_id + # Backend node ID for the element + # + # @return [Float, nil] + optional :backend_node_id, Float, api_name: :backendNodeId + # @!attribute method_ # The method to execute (click, fill, etc.) # # @return [String, nil] optional :method_, String, api_name: :method - # @!method initialize(description:, selector:, arguments: nil, method_: nil) + # @!method initialize(description:, selector:, arguments: nil, backend_node_id: nil, method_: nil) # Action object returned by observe and used by act # # @param description [String] Human-readable description of the action @@ -36,6 +42,8 @@ class Action < Stagehand::Internal::Type::BaseModel # # @param arguments [Array] Arguments to pass to the method # + # @param backend_node_id [Float] Backend node ID for the element + # # @param method_ [String] The method to execute (click, fill, etc.) end end diff --git a/lib/stagehand/models/model_config.rb b/lib/stagehand/models/model_config.rb index e5e314c..69764f6 100644 --- a/lib/stagehand/models/model_config.rb +++ b/lib/stagehand/models/model_config.rb @@ -31,12 +31,35 @@ class ModelConfigObject < Stagehand::Internal::Type::BaseModel # @return [String, nil] optional :base_url, String, api_name: :baseURL - # @!method initialize(model_name:, api_key: nil, base_url: nil) + # @!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 end # @!method self.variants diff --git a/lib/stagehand/models/session_act_response.rb b/lib/stagehand/models/session_act_response.rb index 20b07d5..9ad16a4 100644 --- a/lib/stagehand/models/session_act_response.rb +++ b/lib/stagehand/models/session_act_response.rb @@ -51,8 +51,9 @@ class Result < Stagehand::Internal::Type::BaseModel # @!attribute actions # List of actions that were executed # - # @return [Array] - required :actions, -> { Stagehand::Internal::Type::ArrayOf[Stagehand::Action] } + # @return [Array] + required :actions, + -> { Stagehand::Internal::Type::ArrayOf[Stagehand::Models::SessionActResponse::Data::Result::Action] } # @!attribute message # Human-readable result message @@ -69,11 +70,56 @@ class Result < Stagehand::Internal::Type::BaseModel # @!method initialize(action_description:, actions:, message:, success:) # @param action_description [String] Description of the action that was performed # - # @param actions [Array] List of actions that were executed + # @param actions [Array] List of actions that were executed # # @param message [String] Human-readable result message # # @param success [Boolean] Whether the action completed successfully + + class Action < Stagehand::Internal::Type::BaseModel + # @!attribute description + # Human-readable description of the action + # + # @return [String] + required :description, String + + # @!attribute selector + # CSS selector or XPath for the element + # + # @return [String] + required :selector, String + + # @!attribute arguments + # Arguments to pass to the method + # + # @return [Array, nil] + optional :arguments, Stagehand::Internal::Type::ArrayOf[String] + + # @!attribute backend_node_id + # Backend node ID for the element + # + # @return [Float, nil] + optional :backend_node_id, Float, api_name: :backendNodeId + + # @!attribute method_ + # The method to execute (click, fill, etc.) + # + # @return [String, nil] + optional :method_, String, api_name: :method + + # @!method initialize(description:, selector:, arguments: nil, backend_node_id: nil, method_: nil) + # Action object returned by observe and used by act + # + # @param description [String] Human-readable description of the action + # + # @param selector [String] CSS selector or XPath for the element + # + # @param arguments [Array] Arguments to pass to the method + # + # @param backend_node_id [Float] Backend node ID for the element + # + # @param method_ [String] The method to execute (click, fill, etc.) + end end end end diff --git a/lib/stagehand/models/session_execute_params.rb b/lib/stagehand/models/session_execute_params.rb index 5258c58..0507c94 100644 --- a/lib/stagehand/models/session_execute_params.rb +++ b/lib/stagehand/models/session_execute_params.rb @@ -82,13 +82,19 @@ class AgentConfig < Stagehand::Internal::Type::BaseModel # @return [String, Stagehand::Models::ModelConfig::ModelConfigObject, nil] optional :model, union: -> { Stagehand::ModelConfig } + # @!attribute provider + # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) + # + # @return [Symbol, Stagehand::Models::SessionExecuteParams::AgentConfig::Provider, nil] + optional :provider, enum: -> { Stagehand::SessionExecuteParams::AgentConfig::Provider } + # @!attribute system_prompt # Custom system prompt for the agent # # @return [String, nil] optional :system_prompt, String, api_name: :systemPrompt - # @!method initialize(cua: nil, model: nil, system_prompt: nil) + # @!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. # @@ -96,7 +102,24 @@ class AgentConfig < Stagehand::Internal::Type::BaseModel # # @param model [String, Stagehand::Models::ModelConfig::ModelConfigObject] Model name string with provider prefix (e.g., 'openai/gpt-5-nano', 'anthropic/cl # + # @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 + + # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) + # + # @see Stagehand::Models::SessionExecuteParams::AgentConfig#provider + module Provider + extend Stagehand::Internal::Type::Enum + + OPENAI = :openai + ANTHROPIC = :anthropic + GOOGLE = :google + MICROSOFT = :microsoft + + # @!method self.values + # @return [Array] + end end class ExecuteOptions < Stagehand::Internal::Type::BaseModel diff --git a/lib/stagehand/models/session_observe_response.rb b/lib/stagehand/models/session_observe_response.rb index f9891b2..f7d85bf 100644 --- a/lib/stagehand/models/session_observe_response.rb +++ b/lib/stagehand/models/session_observe_response.rb @@ -26,8 +26,9 @@ class SessionObserveResponse < Stagehand::Internal::Type::BaseModel class Data < Stagehand::Internal::Type::BaseModel # @!attribute result # - # @return [Array] - required :result, -> { Stagehand::Internal::Type::ArrayOf[Stagehand::Action] } + # @return [Array] + required :result, + -> { Stagehand::Internal::Type::ArrayOf[Stagehand::Models::SessionObserveResponse::Data::Result] } # @!attribute action_id # Action ID for tracking @@ -36,9 +37,54 @@ class Data < Stagehand::Internal::Type::BaseModel optional :action_id, String, api_name: :actionId # @!method initialize(result:, action_id: nil) - # @param result [Array] + # @param result [Array] # # @param action_id [String] Action ID for tracking + + class Result < Stagehand::Internal::Type::BaseModel + # @!attribute description + # Human-readable description of the action + # + # @return [String] + required :description, String + + # @!attribute selector + # CSS selector or XPath for the element + # + # @return [String] + required :selector, String + + # @!attribute arguments + # Arguments to pass to the method + # + # @return [Array, nil] + optional :arguments, Stagehand::Internal::Type::ArrayOf[String] + + # @!attribute backend_node_id + # Backend node ID for the element + # + # @return [Float, nil] + optional :backend_node_id, Float, api_name: :backendNodeId + + # @!attribute method_ + # The method to execute (click, fill, etc.) + # + # @return [String, nil] + optional :method_, String, api_name: :method + + # @!method initialize(description:, selector:, arguments: nil, backend_node_id: nil, method_: nil) + # Action object returned by observe and used by act + # + # @param description [String] Human-readable description of the action + # + # @param selector [String] CSS selector or XPath for the element + # + # @param arguments [Array] Arguments to pass to the method + # + # @param backend_node_id [Float] Backend node ID for the element + # + # @param method_ [String] The method to execute (click, fill, etc.) + end end end end diff --git a/lib/stagehand/models/session_start_params.rb b/lib/stagehand/models/session_start_params.rb index c2c9c0a..250bdf5 100644 --- a/lib/stagehand/models/session_start_params.rb +++ b/lib/stagehand/models/session_start_params.rb @@ -14,7 +14,7 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel required :model_name, String, api_name: :modelName # @!attribute act_timeout_ms - # Timeout in ms for act operations + # Timeout in ms for act operations (deprecated, v2 only) # # @return [Float, nil] optional :act_timeout_ms, Float, api_name: :actTimeoutMs @@ -37,11 +37,6 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # @return [String, nil] optional :browserbase_session_id, String, api_name: :browserbaseSessionID - # @!attribute debug_dom - # - # @return [Boolean, nil] - optional :debug_dom, Stagehand::Internal::Type::Boolean, api_name: :debugDom - # @!attribute dom_settle_timeout_ms # Timeout in ms to wait for DOM to settle # @@ -68,10 +63,11 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # @!attribute verbose # Logging verbosity level (0=quiet, 1=normal, 2=debug) # - # @return [Integer, nil] - optional :verbose, Integer + # @return [Symbol, Stagehand::Models::SessionStartParams::Verbose, nil] + optional :verbose, enum: -> { Stagehand::SessionStartParams::Verbose } # @!attribute wait_for_captcha_solves + # Wait for captcha solves (deprecated, v2 only) # # @return [Boolean, nil] optional :wait_for_captcha_solves, Stagehand::Internal::Type::Boolean, api_name: :waitForCaptchaSolves @@ -100,10 +96,10 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # @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, debug_dom: 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_language: nil, x_sdk_version: nil, x_sent_at: 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 + # @param act_timeout_ms [Float] Timeout in ms for act operations (deprecated, v2 only) # # @param browser [Stagehand::Models::SessionStartParams::Browser] # @@ -111,8 +107,6 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # # @param browserbase_session_id [String] Existing Browserbase session ID to resume # - # @param debug_dom [Boolean] - # # @param dom_settle_timeout_ms [Float] Timeout in ms to wait for DOM to settle # # @param experimental [Boolean] @@ -121,9 +115,9 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # # @param system_prompt [String] Custom system prompt for AI operations # - # @param verbose [Integer] Logging verbosity level (0=quiet, 1=normal, 2=debug) + # @param verbose [Symbol, Stagehand::Models::SessionStartParams::Verbose] Logging verbosity level (0=quiet, 1=normal, 2=debug) # - # @param wait_for_captcha_solves [Boolean] + # @param wait_for_captcha_solves [Boolean] Wait for captcha solves (deprecated, v2 only) # # @param x_language [Symbol, Stagehand::Models::SessionStartParams::XLanguage] Client SDK language # @@ -759,6 +753,18 @@ module Region end end + # Logging verbosity level (0=quiet, 1=normal, 2=debug) + module Verbose + extend Stagehand::Internal::Type::Enum + + VERBOSE_0 = :"0" + VERBOSE_1 = :"1" + VERBOSE_2 = :"2" + + # @!method self.values + # @return [Array] + end + # Client SDK language module XLanguage extend Stagehand::Internal::Type::Enum diff --git a/lib/stagehand/models/session_start_response.rb b/lib/stagehand/models/session_start_response.rb index ff2e44d..06f322b 100644 --- a/lib/stagehand/models/session_start_response.rb +++ b/lib/stagehand/models/session_start_response.rb @@ -27,24 +27,28 @@ class Data < Stagehand::Internal::Type::BaseModel # @return [Boolean] required :available, Stagehand::Internal::Type::Boolean - # @!attribute connect_url - # CDP WebSocket URL for connecting to the Browserbase cloud browser - # - # @return [String] - required :connect_url, String, api_name: :connectUrl - # @!attribute session_id # Unique Browserbase session identifier # # @return [String] required :session_id, String, api_name: :sessionId - # @!method initialize(available:, connect_url:, session_id:) - # @param available [Boolean] + # @!attribute cdp_url + # CDP WebSocket URL for connecting to the Browserbase cloud browser (present when + # available) # - # @param connect_url [String] CDP WebSocket URL for connecting to the Browserbase cloud browser + # @return [String, nil] + optional :cdp_url, String, api_name: :cdpUrl, nil?: true + + # @!method initialize(available:, session_id:, cdp_url: nil) + # Some parameter documentations has been truncated, see + # {Stagehand::Models::SessionStartResponse::Data} for more details. + # + # @param available [Boolean] # # @param session_id [String] Unique Browserbase session identifier + # + # @param cdp_url [String, nil] CDP WebSocket URL for connecting to the Browserbase cloud browser (present when end end end diff --git a/lib/stagehand/models/stream_event.rb b/lib/stagehand/models/stream_event.rb index cb40861..38173d7 100644 --- a/lib/stagehand/models/stream_event.rb +++ b/lib/stagehand/models/stream_event.rb @@ -22,7 +22,7 @@ class StreamEvent < Stagehand::Internal::Type::BaseModel # @!method initialize(id:, data:, type:) # Server-Sent Event emitted during streaming responses. Events are sent as - # `data: \n\n`. + # `data: \n\n`. Key order: data (with status first), type, id. # # @param id [String] Unique identifier for this event # diff --git a/lib/stagehand/resources/sessions.rb b/lib/stagehand/resources/sessions.rb index b113a18..acd8f5d 100644 --- a/lib/stagehand/resources/sessions.rb +++ b/lib/stagehand/resources/sessions.rb @@ -518,11 +518,11 @@ def observe_streaming(id, params = {}) # 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, debug_dom: 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_language: nil, x_sdk_version: nil, x_sent_at: 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 + # @param act_timeout_ms [Float] Body param: Timeout in ms for act operations (deprecated, v2 only) # # @param browser [Stagehand::Models::SessionStartParams::Browser] Body param: # @@ -530,8 +530,6 @@ def observe_streaming(id, params = {}) # # @param browserbase_session_id [String] Body param: Existing Browserbase session ID to resume # - # @param debug_dom [Boolean] Body param: - # # @param dom_settle_timeout_ms [Float] Body param: Timeout in ms to wait for DOM to settle # # @param experimental [Boolean] Body param: @@ -540,9 +538,9 @@ def observe_streaming(id, params = {}) # # @param system_prompt [String] Body param: Custom system prompt for AI operations # - # @param verbose [Integer] Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug) + # @param verbose [Symbol, Stagehand::Models::SessionStartParams::Verbose] Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug) # - # @param wait_for_captcha_solves [Boolean] Body param: + # @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 # diff --git a/rbi/stagehand/models/action.rbi b/rbi/stagehand/models/action.rbi index ca73f21..fc55d7a 100644 --- a/rbi/stagehand/models/action.rbi +++ b/rbi/stagehand/models/action.rbi @@ -21,6 +21,13 @@ module Stagehand sig { params(arguments: T::Array[String]).void } attr_writer :arguments + # Backend node ID for the element + sig { returns(T.nilable(Float)) } + attr_reader :backend_node_id + + sig { params(backend_node_id: Float).void } + attr_writer :backend_node_id + # The method to execute (click, fill, etc.) sig { returns(T.nilable(String)) } attr_reader :method_ @@ -34,6 +41,7 @@ module Stagehand description: String, selector: String, arguments: T::Array[String], + backend_node_id: Float, method_: String ).returns(T.attached_class) end @@ -44,6 +52,8 @@ module Stagehand selector:, # Arguments to pass to the method arguments: nil, + # Backend node ID for the element + backend_node_id: nil, # The method to execute (click, fill, etc.) method_: nil ) @@ -55,6 +65,7 @@ module Stagehand description: String, selector: String, arguments: T::Array[String], + backend_node_id: Float, method_: String } ) diff --git a/rbi/stagehand/models/model_config.rbi b/rbi/stagehand/models/model_config.rbi index 09f3634..0461ba2 100644 --- a/rbi/stagehand/models/model_config.rbi +++ b/rbi/stagehand/models/model_config.rbi @@ -39,28 +39,100 @@ module Stagehand sig { params(base_url: String).void } attr_writer :base_url + # AI provider for the model (or provide a baseURL endpoint instead) sig do - params(model_name: String, api_key: String, base_url: String).returns( - T.attached_class + returns( + T.nilable( + Stagehand::ModelConfig::ModelConfigObject::Provider::OrSymbol + ) ) end + attr_reader :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::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 + base_url: nil, + # AI provider for the model (or provide a baseURL endpoint instead) + provider: nil ) end sig do override.returns( - { model_name: String, api_key: String, base_url: String } + { + model_name: String, + api_key: String, + base_url: String, + provider: + Stagehand::ModelConfig::ModelConfigObject::Provider::OrSymbol + } ) 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 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]) } diff --git a/rbi/stagehand/models/session_act_response.rbi b/rbi/stagehand/models/session_act_response.rbi index 287a2b1..9405c6a 100644 --- a/rbi/stagehand/models/session_act_response.rbi +++ b/rbi/stagehand/models/session_act_response.rbi @@ -111,7 +111,13 @@ module Stagehand attr_accessor :action_description # List of actions that were executed - sig { returns(T::Array[Stagehand::Action]) } + sig do + returns( + T::Array[ + Stagehand::Models::SessionActResponse::Data::Result::Action + ] + ) + end attr_accessor :actions # Human-readable result message @@ -125,7 +131,10 @@ module Stagehand sig do params( action_description: String, - actions: T::Array[Stagehand::Action::OrHash], + actions: + T::Array[ + Stagehand::Models::SessionActResponse::Data::Result::Action::OrHash + ], message: String, success: T::Boolean ).returns(T.attached_class) @@ -146,7 +155,10 @@ module Stagehand override.returns( { action_description: String, - actions: T::Array[Stagehand::Action], + actions: + T::Array[ + Stagehand::Models::SessionActResponse::Data::Result::Action + ], message: String, success: T::Boolean } @@ -154,6 +166,83 @@ module Stagehand end def to_hash end + + class Action < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionActResponse::Data::Result::Action, + Stagehand::Internal::AnyHash + ) + end + + # Human-readable description of the action + sig { returns(String) } + attr_accessor :description + + # CSS selector or XPath for the element + sig { returns(String) } + attr_accessor :selector + + # Arguments to pass to the method + sig { returns(T.nilable(T::Array[String])) } + attr_reader :arguments + + sig { params(arguments: T::Array[String]).void } + attr_writer :arguments + + # Backend node ID for the element + sig { returns(T.nilable(Float)) } + attr_reader :backend_node_id + + sig { params(backend_node_id: Float).void } + attr_writer :backend_node_id + + # The method to execute (click, fill, etc.) + sig { returns(T.nilable(String)) } + attr_reader :method_ + + sig { params(method_: String).void } + attr_writer :method_ + + # Action object returned by observe and used by act + sig do + params( + description: String, + selector: String, + arguments: T::Array[String], + backend_node_id: Float, + method_: String + ).returns(T.attached_class) + end + def self.new( + # Human-readable description of the action + description:, + # CSS selector or XPath for the element + selector:, + # Arguments to pass to the method + arguments: nil, + # Backend node ID for the element + backend_node_id: nil, + # The method to execute (click, fill, etc.) + method_: nil + ) + end + + sig do + override.returns( + { + description: String, + selector: String, + arguments: T::Array[String], + backend_node_id: Float, + method_: String + } + ) + end + def to_hash + end + end end end end diff --git a/rbi/stagehand/models/session_execute_params.rbi b/rbi/stagehand/models/session_execute_params.rbi index 6e89cc2..a16cae7 100644 --- a/rbi/stagehand/models/session_execute_params.rbi +++ b/rbi/stagehand/models/session_execute_params.rbi @@ -164,6 +164,24 @@ module Stagehand end attr_writer :model + # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) + sig do + returns( + T.nilable( + Stagehand::SessionExecuteParams::AgentConfig::Provider::OrSymbol + ) + ) + end + attr_reader :provider + + sig do + params( + provider: + Stagehand::SessionExecuteParams::AgentConfig::Provider::OrSymbol + ).void + end + attr_writer :provider + # Custom system prompt for the agent sig { returns(T.nilable(String)) } attr_reader :system_prompt @@ -176,6 +194,8 @@ module Stagehand cua: T::Boolean, model: T.any(String, Stagehand::ModelConfig::ModelConfigObject::OrHash), + provider: + Stagehand::SessionExecuteParams::AgentConfig::Provider::OrSymbol, system_prompt: String ).returns(T.attached_class) end @@ -185,6 +205,8 @@ module Stagehand # Model name string with provider prefix (e.g., 'openai/gpt-5-nano', # 'anthropic/claude-4.5-opus') model: nil, + # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) + provider: nil, # Custom system prompt for the agent system_prompt: nil ) @@ -195,12 +217,59 @@ module Stagehand { cua: T::Boolean, model: T.any(String, Stagehand::ModelConfig::ModelConfigObject), + provider: + Stagehand::SessionExecuteParams::AgentConfig::Provider::OrSymbol, system_prompt: String } ) end def to_hash end + + # AI provider for the agent (legacy, use model: openai/gpt-5-nano instead) + module Provider + extend Stagehand::Internal::Type::Enum + + TaggedSymbol = + T.type_alias do + T.all( + Symbol, + Stagehand::SessionExecuteParams::AgentConfig::Provider + ) + end + OrSymbol = T.type_alias { T.any(Symbol, String) } + + OPENAI = + T.let( + :openai, + Stagehand::SessionExecuteParams::AgentConfig::Provider::TaggedSymbol + ) + ANTHROPIC = + T.let( + :anthropic, + Stagehand::SessionExecuteParams::AgentConfig::Provider::TaggedSymbol + ) + GOOGLE = + T.let( + :google, + Stagehand::SessionExecuteParams::AgentConfig::Provider::TaggedSymbol + ) + MICROSOFT = + T.let( + :microsoft, + Stagehand::SessionExecuteParams::AgentConfig::Provider::TaggedSymbol + ) + + sig do + override.returns( + T::Array[ + Stagehand::SessionExecuteParams::AgentConfig::Provider::TaggedSymbol + ] + ) + end + def self.values + end + end end class ExecuteOptions < Stagehand::Internal::Type::BaseModel diff --git a/rbi/stagehand/models/session_observe_response.rbi b/rbi/stagehand/models/session_observe_response.rbi index c444a4d..cc0a55a 100644 --- a/rbi/stagehand/models/session_observe_response.rbi +++ b/rbi/stagehand/models/session_observe_response.rbi @@ -58,7 +58,11 @@ module Stagehand ) end - sig { returns(T::Array[Stagehand::Action]) } + sig do + returns( + T::Array[Stagehand::Models::SessionObserveResponse::Data::Result] + ) + end attr_accessor :result # Action ID for tracking @@ -70,7 +74,10 @@ module Stagehand sig do params( - result: T::Array[Stagehand::Action::OrHash], + result: + T::Array[ + Stagehand::Models::SessionObserveResponse::Data::Result::OrHash + ], action_id: String ).returns(T.attached_class) end @@ -83,11 +90,94 @@ module Stagehand sig do override.returns( - { result: T::Array[Stagehand::Action], action_id: String } + { + result: + T::Array[ + Stagehand::Models::SessionObserveResponse::Data::Result + ], + action_id: String + } ) end def to_hash end + + class Result < Stagehand::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Stagehand::Models::SessionObserveResponse::Data::Result, + Stagehand::Internal::AnyHash + ) + end + + # Human-readable description of the action + sig { returns(String) } + attr_accessor :description + + # CSS selector or XPath for the element + sig { returns(String) } + attr_accessor :selector + + # Arguments to pass to the method + sig { returns(T.nilable(T::Array[String])) } + attr_reader :arguments + + sig { params(arguments: T::Array[String]).void } + attr_writer :arguments + + # Backend node ID for the element + sig { returns(T.nilable(Float)) } + attr_reader :backend_node_id + + sig { params(backend_node_id: Float).void } + attr_writer :backend_node_id + + # The method to execute (click, fill, etc.) + sig { returns(T.nilable(String)) } + attr_reader :method_ + + sig { params(method_: String).void } + attr_writer :method_ + + # Action object returned by observe and used by act + sig do + params( + description: String, + selector: String, + arguments: T::Array[String], + backend_node_id: Float, + method_: String + ).returns(T.attached_class) + end + def self.new( + # Human-readable description of the action + description:, + # CSS selector or XPath for the element + selector:, + # Arguments to pass to the method + arguments: nil, + # Backend node ID for the element + backend_node_id: nil, + # The method to execute (click, fill, etc.) + method_: nil + ) + end + + sig do + override.returns( + { + description: String, + selector: String, + arguments: T::Array[String], + backend_node_id: Float, + method_: String + } + ) + end + def to_hash + end + end end end end diff --git a/rbi/stagehand/models/session_start_params.rbi b/rbi/stagehand/models/session_start_params.rbi index 02c3527..e9157f4 100644 --- a/rbi/stagehand/models/session_start_params.rbi +++ b/rbi/stagehand/models/session_start_params.rbi @@ -15,7 +15,7 @@ module Stagehand sig { returns(String) } attr_accessor :model_name - # Timeout in ms for act operations + # Timeout in ms for act operations (deprecated, v2 only) sig { returns(T.nilable(Float)) } attr_reader :act_timeout_ms @@ -54,12 +54,6 @@ module Stagehand sig { params(browserbase_session_id: String).void } attr_writer :browserbase_session_id - sig { returns(T.nilable(T::Boolean)) } - attr_reader :debug_dom - - sig { params(debug_dom: T::Boolean).void } - attr_writer :debug_dom - # Timeout in ms to wait for DOM to settle sig { returns(T.nilable(Float)) } attr_reader :dom_settle_timeout_ms @@ -88,12 +82,17 @@ module Stagehand attr_writer :system_prompt # Logging verbosity level (0=quiet, 1=normal, 2=debug) - sig { returns(T.nilable(Integer)) } + sig do + returns(T.nilable(Stagehand::SessionStartParams::Verbose::OrSymbol)) + end attr_reader :verbose - sig { params(verbose: Integer).void } + sig do + params(verbose: Stagehand::SessionStartParams::Verbose::OrSymbol).void + end attr_writer :verbose + # Wait for captcha solves (deprecated, v2 only) sig { returns(T.nilable(T::Boolean)) } attr_reader :wait_for_captcha_solves @@ -151,12 +150,11 @@ module Stagehand browserbase_session_create_params: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::OrHash, browserbase_session_id: String, - debug_dom: T::Boolean, dom_settle_timeout_ms: Float, experimental: T::Boolean, self_heal: T::Boolean, system_prompt: String, - verbose: Integer, + verbose: Stagehand::SessionStartParams::Verbose::OrSymbol, wait_for_captcha_solves: T::Boolean, x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, x_sdk_version: String, @@ -169,13 +167,12 @@ module Stagehand def self.new( # Model name to use for AI operations model_name:, - # Timeout in ms for act operations + # Timeout in ms for act operations (deprecated, v2 only) act_timeout_ms: nil, browser: nil, browserbase_session_create_params: nil, # Existing Browserbase session ID to resume browserbase_session_id: nil, - debug_dom: nil, # Timeout in ms to wait for DOM to settle dom_settle_timeout_ms: nil, experimental: nil, @@ -185,6 +182,7 @@ module Stagehand system_prompt: nil, # Logging verbosity level (0=quiet, 1=normal, 2=debug) verbose: nil, + # Wait for captcha solves (deprecated, v2 only) wait_for_captcha_solves: nil, # Client SDK language x_language: nil, @@ -207,12 +205,11 @@ module Stagehand browserbase_session_create_params: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams, browserbase_session_id: String, - debug_dom: T::Boolean, dom_settle_timeout_ms: Float, experimental: T::Boolean, self_heal: T::Boolean, system_prompt: String, - verbose: Integer, + verbose: Stagehand::SessionStartParams::Verbose::OrSymbol, wait_for_captcha_solves: T::Boolean, x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, x_sdk_version: String, @@ -1676,6 +1673,30 @@ module Stagehand end end + # Logging verbosity level (0=quiet, 1=normal, 2=debug) + module Verbose + extend Stagehand::Internal::Type::Enum + + TaggedSymbol = + T.type_alias { T.all(Symbol, Stagehand::SessionStartParams::Verbose) } + OrSymbol = T.type_alias { T.any(Symbol, String) } + + VERBOSE_0 = + T.let(:"0", Stagehand::SessionStartParams::Verbose::TaggedSymbol) + VERBOSE_1 = + T.let(:"1", Stagehand::SessionStartParams::Verbose::TaggedSymbol) + VERBOSE_2 = + T.let(:"2", Stagehand::SessionStartParams::Verbose::TaggedSymbol) + + sig do + override.returns( + T::Array[Stagehand::SessionStartParams::Verbose::TaggedSymbol] + ) + end + def self.values + end + end + # Client SDK language module XLanguage extend Stagehand::Internal::Type::Enum diff --git a/rbi/stagehand/models/session_start_response.rbi b/rbi/stagehand/models/session_start_response.rbi index 6ca9940..abcf115 100644 --- a/rbi/stagehand/models/session_start_response.rbi +++ b/rbi/stagehand/models/session_start_response.rbi @@ -59,33 +59,39 @@ module Stagehand sig { returns(T::Boolean) } attr_accessor :available - # CDP WebSocket URL for connecting to the Browserbase cloud browser - sig { returns(String) } - attr_accessor :connect_url - # Unique Browserbase session identifier sig { returns(String) } attr_accessor :session_id + # CDP WebSocket URL for connecting to the Browserbase cloud browser (present when + # available) + sig { returns(T.nilable(String)) } + attr_accessor :cdp_url + sig do params( available: T::Boolean, - connect_url: String, - session_id: String + session_id: String, + cdp_url: T.nilable(String) ).returns(T.attached_class) end def self.new( available:, - # CDP WebSocket URL for connecting to the Browserbase cloud browser - connect_url:, # Unique Browserbase session identifier - session_id: + session_id:, + # CDP WebSocket URL for connecting to the Browserbase cloud browser (present when + # available) + cdp_url: nil ) end sig do override.returns( - { available: T::Boolean, connect_url: String, session_id: String } + { + available: T::Boolean, + session_id: String, + cdp_url: T.nilable(String) + } ) end def to_hash diff --git a/rbi/stagehand/models/stream_event.rbi b/rbi/stagehand/models/stream_event.rbi index 77b90da..d1e4d04 100644 --- a/rbi/stagehand/models/stream_event.rbi +++ b/rbi/stagehand/models/stream_event.rbi @@ -20,7 +20,7 @@ module Stagehand attr_accessor :type # Server-Sent Event emitted during streaming responses. Events are sent as - # `data: \n\n`. + # `data: \n\n`. Key order: data (with status first), type, id. sig do params( id: String, diff --git a/rbi/stagehand/resources/sessions.rbi b/rbi/stagehand/resources/sessions.rbi index ad3b978..0d50d56 100644 --- a/rbi/stagehand/resources/sessions.rbi +++ b/rbi/stagehand/resources/sessions.rbi @@ -436,12 +436,11 @@ module Stagehand browserbase_session_create_params: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams::OrHash, browserbase_session_id: String, - debug_dom: T::Boolean, dom_settle_timeout_ms: Float, experimental: T::Boolean, self_heal: T::Boolean, system_prompt: String, - verbose: Integer, + verbose: Stagehand::SessionStartParams::Verbose::OrSymbol, wait_for_captcha_solves: T::Boolean, x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, x_sdk_version: String, @@ -454,7 +453,7 @@ module Stagehand def start( # Body param: Model name to use for AI operations model_name:, - # Body param: Timeout in ms for act operations + # Body param: Timeout in ms for act operations (deprecated, v2 only) act_timeout_ms: nil, # Body param: browser: nil, @@ -462,8 +461,6 @@ module Stagehand browserbase_session_create_params: nil, # Body param: Existing Browserbase session ID to resume browserbase_session_id: nil, - # Body param: - debug_dom: nil, # Body param: Timeout in ms to wait for DOM to settle dom_settle_timeout_ms: nil, # Body param: @@ -474,7 +471,7 @@ module Stagehand system_prompt: nil, # Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug) verbose: nil, - # Body param: + # Body param: Wait for captcha solves (deprecated, v2 only) wait_for_captcha_solves: nil, # Header param: Client SDK language x_language: nil, diff --git a/sig/stagehand/models/action.rbs b/sig/stagehand/models/action.rbs index 7710201..54525ef 100644 --- a/sig/stagehand/models/action.rbs +++ b/sig/stagehand/models/action.rbs @@ -5,6 +5,7 @@ module Stagehand description: String, selector: String, arguments: ::Array[String], + backend_node_id: Float, method_: String } @@ -17,6 +18,10 @@ module Stagehand def arguments=: (::Array[String]) -> ::Array[String] + attr_reader backend_node_id: Float? + + def backend_node_id=: (Float) -> Float + attr_reader method_: String? def method_=: (String) -> String @@ -25,6 +30,7 @@ module Stagehand description: String, selector: String, ?arguments: ::Array[String], + ?backend_node_id: Float, ?method_: String ) -> void @@ -32,6 +38,7 @@ module Stagehand description: String, selector: String, arguments: ::Array[String], + backend_node_id: Float, method_: String } end diff --git a/sig/stagehand/models/model_config.rbs b/sig/stagehand/models/model_config.rbs index 5a3793e..36ee8c0 100644 --- a/sig/stagehand/models/model_config.rbs +++ b/sig/stagehand/models/model_config.rbs @@ -6,7 +6,12 @@ module Stagehand extend Stagehand::Internal::Type::Union type model_config_object = - { model_name: String, api_key: String, base_url: String } + { + model_name: String, + api_key: String, + base_url: String, + provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider + } class ModelConfigObject < Stagehand::Internal::Type::BaseModel attr_accessor model_name: String @@ -19,17 +24,38 @@ module Stagehand def base_url=: (String) -> String + attr_reader provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider? + + def provider=: ( + Stagehand::Models::ModelConfig::ModelConfigObject::provider + ) -> Stagehand::Models::ModelConfig::ModelConfigObject::provider + def initialize: ( model_name: String, ?api_key: String, - ?base_url: String + ?base_url: String, + ?provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider ) -> void def to_hash: -> { model_name: String, api_key: String, - base_url: String + base_url: String, + provider: Stagehand::Models::ModelConfig::ModelConfigObject::provider } + + type provider = :openai | :anthropic | :google | :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 end def self?.variants: -> ::Array[Stagehand::Models::model_config] diff --git a/sig/stagehand/models/session_act_response.rbs b/sig/stagehand/models/session_act_response.rbs index a5731ba..b5962c4 100644 --- a/sig/stagehand/models/session_act_response.rbs +++ b/sig/stagehand/models/session_act_response.rbs @@ -44,7 +44,7 @@ module Stagehand type result = { action_description: String, - actions: ::Array[Stagehand::Action], + actions: ::Array[Stagehand::Models::SessionActResponse::Data::Result::Action], message: String, success: bool } @@ -52,7 +52,7 @@ module Stagehand class Result < Stagehand::Internal::Type::BaseModel attr_accessor action_description: String - attr_accessor actions: ::Array[Stagehand::Action] + attr_accessor actions: ::Array[Stagehand::Models::SessionActResponse::Data::Result::Action] attr_accessor message: String @@ -60,17 +60,60 @@ module Stagehand def initialize: ( action_description: String, - actions: ::Array[Stagehand::Action], + actions: ::Array[Stagehand::Models::SessionActResponse::Data::Result::Action], message: String, success: bool ) -> void def to_hash: -> { action_description: String, - actions: ::Array[Stagehand::Action], + actions: ::Array[Stagehand::Models::SessionActResponse::Data::Result::Action], message: String, success: bool } + + type action = + { + description: String, + selector: String, + arguments: ::Array[String], + backend_node_id: Float, + method_: String + } + + class Action < Stagehand::Internal::Type::BaseModel + attr_accessor description: String + + attr_accessor selector: String + + attr_reader arguments: ::Array[String]? + + def arguments=: (::Array[String]) -> ::Array[String] + + attr_reader backend_node_id: Float? + + def backend_node_id=: (Float) -> Float + + attr_reader method_: String? + + def method_=: (String) -> String + + def initialize: ( + description: String, + selector: String, + ?arguments: ::Array[String], + ?backend_node_id: Float, + ?method_: String + ) -> void + + def to_hash: -> { + description: String, + selector: String, + arguments: ::Array[String], + backend_node_id: Float, + method_: String + } + end end end end diff --git a/sig/stagehand/models/session_execute_params.rbs b/sig/stagehand/models/session_execute_params.rbs index 274de49..74e78ce 100644 --- a/sig/stagehand/models/session_execute_params.rbs +++ b/sig/stagehand/models/session_execute_params.rbs @@ -70,6 +70,7 @@ module Stagehand { cua: bool, model: Stagehand::Models::model_config, + provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider, system_prompt: String } @@ -84,6 +85,12 @@ module Stagehand Stagehand::Models::model_config ) -> Stagehand::Models::model_config + attr_reader provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider? + + def provider=: ( + Stagehand::Models::SessionExecuteParams::AgentConfig::provider + ) -> Stagehand::Models::SessionExecuteParams::AgentConfig::provider + attr_reader system_prompt: String? def system_prompt=: (String) -> String @@ -91,14 +98,29 @@ module Stagehand def initialize: ( ?cua: bool, ?model: Stagehand::Models::model_config, + ?provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider, ?system_prompt: String ) -> void def to_hash: -> { cua: bool, model: Stagehand::Models::model_config, + provider: Stagehand::Models::SessionExecuteParams::AgentConfig::provider, system_prompt: String } + + type provider = :openai | :anthropic | :google | :microsoft + + module Provider + extend Stagehand::Internal::Type::Enum + + OPENAI: :openai + ANTHROPIC: :anthropic + GOOGLE: :google + MICROSOFT: :microsoft + + def self?.values: -> ::Array[Stagehand::Models::SessionExecuteParams::AgentConfig::provider] + end end type execute_options = diff --git a/sig/stagehand/models/session_observe_response.rbs b/sig/stagehand/models/session_observe_response.rbs index b760981..004d496 100644 --- a/sig/stagehand/models/session_observe_response.rbs +++ b/sig/stagehand/models/session_observe_response.rbs @@ -18,24 +18,71 @@ module Stagehand success: bool } - type data = { result: ::Array[Stagehand::Action], action_id: String } + type data = + { + result: ::Array[Stagehand::Models::SessionObserveResponse::Data::Result], + action_id: String + } class Data < Stagehand::Internal::Type::BaseModel - attr_accessor result: ::Array[Stagehand::Action] + attr_accessor result: ::Array[Stagehand::Models::SessionObserveResponse::Data::Result] attr_reader action_id: String? def action_id=: (String) -> String def initialize: ( - result: ::Array[Stagehand::Action], + result: ::Array[Stagehand::Models::SessionObserveResponse::Data::Result], ?action_id: String ) -> void def to_hash: -> { - result: ::Array[Stagehand::Action], + result: ::Array[Stagehand::Models::SessionObserveResponse::Data::Result], action_id: String } + + type result = + { + description: String, + selector: String, + arguments: ::Array[String], + backend_node_id: Float, + method_: String + } + + class Result < Stagehand::Internal::Type::BaseModel + attr_accessor description: String + + attr_accessor selector: String + + attr_reader arguments: ::Array[String]? + + def arguments=: (::Array[String]) -> ::Array[String] + + attr_reader backend_node_id: Float? + + def backend_node_id=: (Float) -> Float + + attr_reader method_: String? + + def method_=: (String) -> String + + def initialize: ( + description: String, + selector: String, + ?arguments: ::Array[String], + ?backend_node_id: Float, + ?method_: String + ) -> void + + def to_hash: -> { + description: String, + selector: String, + arguments: ::Array[String], + backend_node_id: Float, + method_: String + } + end end end end diff --git a/sig/stagehand/models/session_start_params.rbs b/sig/stagehand/models/session_start_params.rbs index 14a51f0..481aad1 100644 --- a/sig/stagehand/models/session_start_params.rbs +++ b/sig/stagehand/models/session_start_params.rbs @@ -7,12 +7,11 @@ module Stagehand browser: Stagehand::SessionStartParams::Browser, browserbase_session_create_params: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams, browserbase_session_id: String, - debug_dom: bool, dom_settle_timeout_ms: Float, experimental: bool, self_heal: bool, system_prompt: String, - verbose: Integer, + verbose: Stagehand::Models::SessionStartParams::verbose, wait_for_captcha_solves: bool, x_language: Stagehand::Models::SessionStartParams::x_language, x_sdk_version: String, @@ -47,10 +46,6 @@ module Stagehand def browserbase_session_id=: (String) -> String - attr_reader debug_dom: bool? - - def debug_dom=: (bool) -> bool - attr_reader dom_settle_timeout_ms: Float? def dom_settle_timeout_ms=: (Float) -> Float @@ -67,9 +62,11 @@ module Stagehand def system_prompt=: (String) -> String - attr_reader verbose: Integer? + attr_reader verbose: Stagehand::Models::SessionStartParams::verbose? - def verbose=: (Integer) -> Integer + def verbose=: ( + Stagehand::Models::SessionStartParams::verbose + ) -> Stagehand::Models::SessionStartParams::verbose attr_reader wait_for_captcha_solves: bool? @@ -101,12 +98,11 @@ module Stagehand ?browser: Stagehand::SessionStartParams::Browser, ?browserbase_session_create_params: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams, ?browserbase_session_id: String, - ?debug_dom: bool, ?dom_settle_timeout_ms: Float, ?experimental: bool, ?self_heal: bool, ?system_prompt: String, - ?verbose: Integer, + ?verbose: Stagehand::Models::SessionStartParams::verbose, ?wait_for_captcha_solves: bool, ?x_language: Stagehand::Models::SessionStartParams::x_language, ?x_sdk_version: String, @@ -121,12 +117,11 @@ module Stagehand browser: Stagehand::SessionStartParams::Browser, browserbase_session_create_params: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams, browserbase_session_id: String, - debug_dom: bool, dom_settle_timeout_ms: Float, experimental: bool, self_heal: bool, system_prompt: String, - verbose: Integer, + verbose: Stagehand::Models::SessionStartParams::verbose, wait_for_captcha_solves: bool, x_language: Stagehand::Models::SessionStartParams::x_language, x_sdk_version: String, @@ -860,6 +855,18 @@ module Stagehand end end + type verbose = :"0" | :"1" | :"2" + + module Verbose + extend Stagehand::Internal::Type::Enum + + VERBOSE_0: :"0" + VERBOSE_1: :"1" + VERBOSE_2: :"2" + + def self?.values: -> ::Array[Stagehand::Models::SessionStartParams::verbose] + end + type x_language = :typescript | :python | :playground module XLanguage diff --git a/sig/stagehand/models/session_start_response.rbs b/sig/stagehand/models/session_start_response.rbs index 6e03a62..055e142 100644 --- a/sig/stagehand/models/session_start_response.rbs +++ b/sig/stagehand/models/session_start_response.rbs @@ -18,25 +18,25 @@ module Stagehand success: bool } - type data = { available: bool, connect_url: String, session_id: String } + type data = { available: bool, session_id: String, cdp_url: String? } class Data < Stagehand::Internal::Type::BaseModel attr_accessor available: bool - attr_accessor connect_url: String - attr_accessor session_id: String + attr_accessor cdp_url: String? + def initialize: ( available: bool, - connect_url: String, - session_id: String + session_id: String, + ?cdp_url: String? ) -> void def to_hash: -> { available: bool, - connect_url: String, - session_id: String + session_id: String, + cdp_url: String? } end end diff --git a/sig/stagehand/resources/sessions.rbs b/sig/stagehand/resources/sessions.rbs index 75ba1bb..c5ab041 100644 --- a/sig/stagehand/resources/sessions.rbs +++ b/sig/stagehand/resources/sessions.rbs @@ -127,12 +127,11 @@ module Stagehand ?browser: Stagehand::SessionStartParams::Browser, ?browserbase_session_create_params: Stagehand::SessionStartParams::BrowserbaseSessionCreateParams, ?browserbase_session_id: String, - ?debug_dom: bool, ?dom_settle_timeout_ms: Float, ?experimental: bool, ?self_heal: bool, ?system_prompt: String, - ?verbose: Integer, + ?verbose: Stagehand::Models::SessionStartParams::verbose, ?wait_for_captcha_solves: bool, ?x_language: Stagehand::Models::SessionStartParams::x_language, ?x_sdk_version: String, From 3e81eba0b962a3ec0c9a8b13fc9ae30f0961663e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 20 Dec 2025 04:57:15 +0000 Subject: [PATCH 2/6] docs: add more examples --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index b459cad..cd0fe89 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,21 @@ response = stagehand.sessions.act("00000000-your-session-id-000000000000", input puts(response.data) ``` +### Streaming + +We provide support for streaming responses using Server-Sent Events (SSE). + +```ruby +stream = stagehand.sessions.act_streaming( + "00000000-your-session-id-000000000000", + input: "click the first link on the page" +) + +stream.each do |session| + puts(session.data) +end +``` + ### Handling errors When the library is unable to connect to the API, or if the API returns a non-success status code (i.e., 4xx or 5xx response), a subclass of `Stagehand::Errors::APIError` will be thrown: From 926a819a4bbe2b260d3dbd46b860c444f60857bf Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 21:50:03 +0000 Subject: [PATCH 3/6] feat: [STG-1053] [server] Use fastify-zod-openapi + zod v4 for openapi generation --- .stats.yml | 4 ++-- lib/stagehand/models/session_start_params.rb | 12 +++++----- lib/stagehand/resources/sessions.rb | 2 +- rbi/stagehand/models/session_start_params.rbi | 22 +++++++++---------- rbi/stagehand/resources/sessions.rbi | 2 +- sig/stagehand/models/session_start_params.rbs | 8 +++---- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.stats.yml b/.stats.yml index d90df61..2c7a523 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-4fb17cafc413ae3d575e3268602b01d2d0e9ebeb734a41b6086b3353ff0d2523.yml -openapi_spec_hash: 8d48d8564849246f6f14d900c6c5f60c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-ed52466945f2f8dfd3814a29e948d7bf30af7b76a7a7689079c03b8baf64e26f.yml +openapi_spec_hash: 5d57aaf2362b0d882372dbf76477ba23 config_hash: 5c69fb596588b8ace08203858518c149 diff --git a/lib/stagehand/models/session_start_params.rb b/lib/stagehand/models/session_start_params.rb index 250bdf5..a2fda9c 100644 --- a/lib/stagehand/models/session_start_params.rb +++ b/lib/stagehand/models/session_start_params.rb @@ -63,7 +63,7 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # @!attribute verbose # Logging verbosity level (0=quiet, 1=normal, 2=debug) # - # @return [Symbol, Stagehand::Models::SessionStartParams::Verbose, nil] + # @return [Float, Stagehand::Models::SessionStartParams::Verbose, nil] optional :verbose, enum: -> { Stagehand::SessionStartParams::Verbose } # @!attribute wait_for_captcha_solves @@ -115,7 +115,7 @@ class SessionStartParams < Stagehand::Internal::Type::BaseModel # # @param system_prompt [String] Custom system prompt for AI operations # - # @param verbose [Symbol, Stagehand::Models::SessionStartParams::Verbose] Logging verbosity level (0=quiet, 1=normal, 2=debug) + # @param verbose [Float, Stagehand::Models::SessionStartParams::Verbose] Logging verbosity level (0=quiet, 1=normal, 2=debug) # # @param wait_for_captcha_solves [Boolean] Wait for captcha solves (deprecated, v2 only) # @@ -757,12 +757,12 @@ module Region module Verbose extend Stagehand::Internal::Type::Enum - VERBOSE_0 = :"0" - VERBOSE_1 = :"1" - VERBOSE_2 = :"2" + VERBOSE_0 = 0 + VERBOSE_1 = 1 + VERBOSE_2 = 2 # @!method self.values - # @return [Array] + # @return [Array] end # Client SDK language diff --git a/lib/stagehand/resources/sessions.rb b/lib/stagehand/resources/sessions.rb index acd8f5d..1ce3d6d 100644 --- a/lib/stagehand/resources/sessions.rb +++ b/lib/stagehand/resources/sessions.rb @@ -538,7 +538,7 @@ def observe_streaming(id, params = {}) # # @param system_prompt [String] Body param: Custom system prompt for AI operations # - # @param verbose [Symbol, Stagehand::Models::SessionStartParams::Verbose] Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug) + # @param verbose [Float, Stagehand::Models::SessionStartParams::Verbose] Body param: Logging verbosity level (0=quiet, 1=normal, 2=debug) # # @param wait_for_captcha_solves [Boolean] Body param: Wait for captcha solves (deprecated, v2 only) # diff --git a/rbi/stagehand/models/session_start_params.rbi b/rbi/stagehand/models/session_start_params.rbi index e9157f4..955842f 100644 --- a/rbi/stagehand/models/session_start_params.rbi +++ b/rbi/stagehand/models/session_start_params.rbi @@ -83,12 +83,12 @@ module Stagehand # Logging verbosity level (0=quiet, 1=normal, 2=debug) sig do - returns(T.nilable(Stagehand::SessionStartParams::Verbose::OrSymbol)) + returns(T.nilable(Stagehand::SessionStartParams::Verbose::OrFloat)) end attr_reader :verbose sig do - params(verbose: Stagehand::SessionStartParams::Verbose::OrSymbol).void + params(verbose: Stagehand::SessionStartParams::Verbose::OrFloat).void end attr_writer :verbose @@ -154,7 +154,7 @@ module Stagehand experimental: T::Boolean, self_heal: T::Boolean, system_prompt: String, - verbose: Stagehand::SessionStartParams::Verbose::OrSymbol, + verbose: Stagehand::SessionStartParams::Verbose::OrFloat, wait_for_captcha_solves: T::Boolean, x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, x_sdk_version: String, @@ -209,7 +209,7 @@ module Stagehand experimental: T::Boolean, self_heal: T::Boolean, system_prompt: String, - verbose: Stagehand::SessionStartParams::Verbose::OrSymbol, + verbose: Stagehand::SessionStartParams::Verbose::OrFloat, wait_for_captcha_solves: T::Boolean, x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, x_sdk_version: String, @@ -1677,20 +1677,20 @@ module Stagehand module Verbose extend Stagehand::Internal::Type::Enum - TaggedSymbol = - T.type_alias { T.all(Symbol, Stagehand::SessionStartParams::Verbose) } - OrSymbol = T.type_alias { T.any(Symbol, String) } + TaggedFloat = + T.type_alias { T.all(Float, Stagehand::SessionStartParams::Verbose) } + OrFloat = T.type_alias { Float } VERBOSE_0 = - T.let(:"0", Stagehand::SessionStartParams::Verbose::TaggedSymbol) + T.let(0, Stagehand::SessionStartParams::Verbose::TaggedFloat) VERBOSE_1 = - T.let(:"1", Stagehand::SessionStartParams::Verbose::TaggedSymbol) + T.let(1, Stagehand::SessionStartParams::Verbose::TaggedFloat) VERBOSE_2 = - T.let(:"2", Stagehand::SessionStartParams::Verbose::TaggedSymbol) + T.let(2, Stagehand::SessionStartParams::Verbose::TaggedFloat) sig do override.returns( - T::Array[Stagehand::SessionStartParams::Verbose::TaggedSymbol] + T::Array[Stagehand::SessionStartParams::Verbose::TaggedFloat] ) end def self.values diff --git a/rbi/stagehand/resources/sessions.rbi b/rbi/stagehand/resources/sessions.rbi index 0d50d56..b1eb1ba 100644 --- a/rbi/stagehand/resources/sessions.rbi +++ b/rbi/stagehand/resources/sessions.rbi @@ -440,7 +440,7 @@ module Stagehand experimental: T::Boolean, self_heal: T::Boolean, system_prompt: String, - verbose: Stagehand::SessionStartParams::Verbose::OrSymbol, + verbose: Stagehand::SessionStartParams::Verbose::OrFloat, wait_for_captcha_solves: T::Boolean, x_language: Stagehand::SessionStartParams::XLanguage::OrSymbol, x_sdk_version: String, diff --git a/sig/stagehand/models/session_start_params.rbs b/sig/stagehand/models/session_start_params.rbs index 481aad1..7ce7c12 100644 --- a/sig/stagehand/models/session_start_params.rbs +++ b/sig/stagehand/models/session_start_params.rbs @@ -855,14 +855,14 @@ module Stagehand end end - type verbose = :"0" | :"1" | :"2" + type verbose = Float module Verbose extend Stagehand::Internal::Type::Enum - VERBOSE_0: :"0" - VERBOSE_1: :"1" - VERBOSE_2: :"2" + VERBOSE_0: 0 + VERBOSE_1: 1 + VERBOSE_2: 2 def self?.values: -> ::Array[Stagehand::Models::SessionStartParams::verbose] end From 8a57cd5279ff4bc5956ed98508d694a4b290500f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 23 Dec 2025 19:53:40 +0000 Subject: [PATCH 4/6] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index 2c7a523..21604fb 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-ed52466945f2f8dfd3814a29e948d7bf30af7b76a7a7689079c03b8baf64e26f.yml openapi_spec_hash: 5d57aaf2362b0d882372dbf76477ba23 -config_hash: 5c69fb596588b8ace08203858518c149 +config_hash: 6b5d2b7e13aea77b1fd038e5eb8c0662 From f030a1c941c5cf22b0c5637cc2677f14e4c3521c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 23 Dec 2025 20:07:16 +0000 Subject: [PATCH 5/6] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index 21604fb..5a89fb7 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-ed52466945f2f8dfd3814a29e948d7bf30af7b76a7a7689079c03b8baf64e26f.yml openapi_spec_hash: 5d57aaf2362b0d882372dbf76477ba23 -config_hash: 6b5d2b7e13aea77b1fd038e5eb8c0662 +config_hash: 989ddfee371586e9156b4d484ec0a6cc From ff61811ef9ffb5cbc197b96e04e0f2afccb1ef3e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 23 Dec 2025 20:07:32 +0000 Subject: [PATCH 6/6] release: 0.5.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 14 ++++++++++++++ Gemfile.lock | 2 +- README.md | 2 +- lib/stagehand/version.rb | 2 +- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index da59f99..2aca35a 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.4.0" + ".": "0.5.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 16b9b31..1bdc5a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 0.5.0 (2025-12-23) + +Full Changelog: [v0.4.0...v0.5.0](https://github.com/browserbase/stagehand-ruby/compare/v0.4.0...v0.5.0) + +### Features + +* [STG-1053] [server] Use fastify-zod-openapi + zod v4 for openapi generation ([926a819](https://github.com/browserbase/stagehand-ruby/commit/926a819a4bbe2b260d3dbd46b860c444f60857bf)) +* **api:** manual updates ([0619302](https://github.com/browserbase/stagehand-ruby/commit/061930217b3efce30e29cf8b2511970b21c86c57)) + + +### Documentation + +* add more examples ([3e81eba](https://github.com/browserbase/stagehand-ruby/commit/3e81eba0b962a3ec0c9a8b13fc9ae30f0961663e)) + ## 0.4.0 (2025-12-19) Full Changelog: [v0.3.0...v0.4.0](https://github.com/browserbase/stagehand-ruby/compare/v0.3.0...v0.4.0) diff --git a/Gemfile.lock b/Gemfile.lock index 0569df8..3424b4d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GIT PATH remote: . specs: - stagehand (0.4.0) + stagehand (0.5.0) connection_pool GEM diff --git a/README.md b/README.md index cd0fe89..34809ce 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "stagehand", "~> 0.4.0" +gem "stagehand", "~> 0.5.0" ``` diff --git a/lib/stagehand/version.rb b/lib/stagehand/version.rb index f55cf9c..f65b6e4 100644 --- a/lib/stagehand/version.rb +++ b/lib/stagehand/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Stagehand - VERSION = "0.4.0" + VERSION = "0.5.0" end