diff --git a/.castiron.stats.yml b/.castiron.stats.yml index 2060d8f6f..d724a97d0 100644 --- a/.castiron.stats.yml +++ b/.castiron.stats.yml @@ -1,8 +1,8 @@ schema_version: 1 -generation_id: 4ec7ddaa-ffa6-4a66-9035-ecb517108372 -openapi_spec_hash: f21b711c644bd7acb83c4a35be5f89b5 -openapi_transformed_spec_hash: 9d23bc992f6c476d92ff2a1768ed1b17 -config_hash: ed29aaecbd1993a4cd3a714b00bc39d2 -codegen_sha: 485e909890c0685a1afe1a48769757c44a75dd1c -codegen_hash: 08f5227f4a60fb777fcad36dd9097c6c0a1651caaf06bc928d96839fc149ae2e -public_codegen_sha: a17a5cded92ca8999b02053afcfc5459f01463e5 +generation_id: d507486e-80bb-4c77-ab2f-b280f244a836 +openapi_spec_hash: 633998559d1b899949f8986dd1a58df1 +openapi_transformed_spec_hash: 0bed479bcc4261379749a5fe4e5d6a45 +config_hash: dd5d37ab21844cf4e91a2f181042a9c1 +codegen_sha: b60321b75dee05ffe731751b9d0297a963293f34 +codegen_hash: b6c907773d8159afb1992c0d89354d5ba62e9940e431fc319046dad7c91230ca +public_codegen_sha: ee22d0fe3f027eb1b02d37b1aa868e41886c37cc diff --git a/api_reference/openapi.transformed.yml b/api_reference/openapi.transformed.yml index 66338069b..d7c77f055 100644 --- a/api_reference/openapi.transformed.yml +++ b/api_reference/openapi.transformed.yml @@ -36188,6 +36188,36 @@ paths: "input_tokens": 11 } webhooks: + agent_environment_expired: + post: + description: | + Sent when an agent environment expires and can no longer resume from a snapshot. + requestBody: + description: The event payload sent by the API. + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookAgentEnvironmentExpired' + responses: + '200': + description: | + Return a 200 status code to acknowledge receipt of the event. Non-200 + status codes will be retried. + agent_environment_suspended: + post: + description: | + Sent when an agent environment is suspended and can resume from a snapshot. + requestBody: + description: The event payload sent by the API. + content: + application/json: + schema: + $ref: '#/components/schemas/WebhookAgentEnvironmentSuspended' + responses: + '200': + description: | + Return a 200 status code to acknowledge receipt of the event. Non-200 + status codes will be retried. agent_environment_failed: post: description: | @@ -71424,6 +71454,68 @@ components: - type - status - action + WebhookAgentEnvironmentExpired: + type: object + title: agent.environment.expired + description: | + Sent when an agent environment expires and can no longer resume from a snapshot. + allOf: + - $ref: '#/components/schemas/WebhookAgentSessionEnvelope' + - type: object + required: + - type + - data + properties: + type: + type: string + description: The event type. Always `agent.environment.expired`. + enum: + - agent.environment.expired + x-stainless-const: true + data: + $ref: '#/components/schemas/AgentEnvironmentEvent' + x-oaiMeta: + name: agent.environment.expired + group: webhook-events + example: | + { + "id": "evt_123", + "object": "event", + "created_at": 1719168000, + "type": "agent.environment.expired", + "data": {"id": "ccarenv_123"} + } + WebhookAgentEnvironmentSuspended: + type: object + title: agent.environment.suspended + description: | + Sent when an agent environment is suspended and can resume from a snapshot. + allOf: + - $ref: '#/components/schemas/WebhookAgentSessionEnvelope' + - type: object + required: + - type + - data + properties: + type: + type: string + description: The event type. Always `agent.environment.suspended`. + enum: + - agent.environment.suspended + x-stainless-const: true + data: + $ref: '#/components/schemas/AgentEnvironmentEvent' + x-oaiMeta: + name: agent.environment.suspended + group: webhook-events + example: | + { + "id": "evt_123", + "object": "event", + "created_at": 1719168000, + "type": "agent.environment.suspended", + "data": {"id": "ccarenv_123"} + } WebhookAgentEnvironmentFailed: type: object title: agent.environment.failed @@ -81169,6 +81261,7 @@ components: - ready - connected - disconnected + - suspended - expired - failed x-enumDescriptions: @@ -81176,6 +81269,7 @@ components: - Provisioning succeeded and the environment is available for attachment or use. - '' - '' + - The sandbox is stopped and can be resumed from its private checkpoint. - '' - '' description: The public lifecycle status of an execution environment. @@ -87103,12 +87197,16 @@ components: - ready - connected - disconnected + - suspended + - expired - failed x-enumDescriptions: - The environment is being prepared. - The environment is ready to connect. - The environment is connected. - The environment is disconnected. + - The environment is stopped and can be resumed from its private checkpoint. + - The environment and its private checkpoint have expired. - The environment failed to connect. description: The connection status of a session environment. SessionEnvironmentErrorResource: @@ -87193,6 +87291,76 @@ components: - environment additionalProperties: false description: Emitted when a hosted session environment is ready to connect. + SessionEventAgentSessionEnvironmentSuspended: + type: object + properties: + type: + type: string + enum: + - agent.session.environment.suspended + default: agent.session.environment.suspended + x-stainless-const: true + description: The type of the object. Always `agent.session.environment.suspended`. + event_id: + type: string + minLength: 0 + description: The unique ID of the event. + session_id: + type: string + minLength: 0 + description: The ID of the session associated with the event. + turn_id: + type: + - string + - 'null' + minLength: 0 + description: The ID of the turn associated with the event, when applicable. + environment: + $ref: '#/components/schemas/SessionEnvironmentStateResource' + description: The current environment state. + required: + - type + - event_id + - session_id + - turn_id + - environment + additionalProperties: false + description: Emitted after an idle hosted session environment is checkpointed and stopped. + SessionEventAgentSessionEnvironmentExpired: + type: object + properties: + type: + type: string + enum: + - agent.session.environment.expired + default: agent.session.environment.expired + x-stainless-const: true + description: The type of the object. Always `agent.session.environment.expired`. + event_id: + type: string + minLength: 0 + description: The unique ID of the event. + session_id: + type: string + minLength: 0 + description: The ID of the session associated with the event. + turn_id: + type: + - string + - 'null' + minLength: 0 + description: The ID of the turn associated with the event, when applicable. + environment: + $ref: '#/components/schemas/SessionEnvironmentStateResource' + description: The current environment state. + required: + - type + - event_id + - session_id + - turn_id + - environment + additionalProperties: false + description: Emitted after a suspended hosted session environment and its checkpoint expire. SessionEventAgentSessionEnvironmentReset: type: object properties: @@ -88428,6 +88596,8 @@ components: mapping: error: '#/components/schemas/SessionEventError' agent.session.environment.ready: '#/components/schemas/SessionEventAgentSessionEnvironmentReady' + agent.session.environment.suspended: '#/components/schemas/SessionEventAgentSessionEnvironmentSuspended' + agent.session.environment.expired: '#/components/schemas/SessionEventAgentSessionEnvironmentExpired' agent.session.environment.reset: '#/components/schemas/SessionEventAgentSessionEnvironmentReset' agent.output.command_execution_output.delta: '#/components/schemas/SessionEventAgentOutputCommandExecutionOutputDelta' agent.session.created: '#/components/schemas/SessionEventAgentSessionCreated' @@ -88460,6 +88630,8 @@ components: x-oai-discriminator-values: - error - agent.session.environment.ready + - agent.session.environment.suspended + - agent.session.environment.expired - agent.session.environment.reset - agent.output.command_execution_output.delta - agent.session.created @@ -88492,6 +88664,8 @@ components: anyOf: - $ref: '#/components/schemas/SessionEventError' - $ref: '#/components/schemas/SessionEventAgentSessionEnvironmentReady' + - $ref: '#/components/schemas/SessionEventAgentSessionEnvironmentSuspended' + - $ref: '#/components/schemas/SessionEventAgentSessionEnvironmentExpired' - $ref: '#/components/schemas/SessionEventAgentSessionEnvironmentReset' - $ref: '#/components/schemas/SessionEventAgentOutputCommandExecutionOutputDelta' - $ref: '#/components/schemas/SessionEventAgentSessionCreated' @@ -90152,6 +90326,8 @@ components: - video.failed - agent.environment.ready - agent.environment.failed + - agent.environment.suspended + - agent.environment.expired - agent.session.created - agent.session.action_required - agent.session.in_progress diff --git a/lib/openai.rb b/lib/openai.rb index 8f4eef0a2..7b4b31b4b 100644 --- a/lib/openai.rb +++ b/lib/openai.rb @@ -563,11 +563,13 @@ require_relative "openai/models/beta/agent_session_deleted" require_relative "openai/models/beta/agent_session_environment_connected_event" require_relative "openai/models/beta/agent_session_environment_disconnected_event" +require_relative "openai/models/beta/agent_session_environment_expired_event" require_relative "openai/models/beta/agent_session_environment_failed_event" require_relative "openai/models/beta/agent_session_environment_pending_event" require_relative "openai/models/beta/agent_session_environment_ready_event" require_relative "openai/models/beta/agent_session_environment_reset_event" require_relative "openai/models/beta/agent_session_environment_state" +require_relative "openai/models/beta/agent_session_environment_suspended_event" require_relative "openai/models/beta/agent_session_error_event" require_relative "openai/models/beta/agent_session_event" require_relative "openai/models/beta/agent_session_failed_event" @@ -1448,8 +1450,10 @@ require_relative "openai/models/video_retrieve_params" require_relative "openai/models/video_seconds" require_relative "openai/models/video_size" +require_relative "openai/models/webhooks/agent_environment_expired_webhook_event" require_relative "openai/models/webhooks/agent_environment_failed_webhook_event" require_relative "openai/models/webhooks/agent_environment_ready_webhook_event" +require_relative "openai/models/webhooks/agent_environment_suspended_webhook_event" require_relative "openai/models/webhooks/agent_session_action_required_webhook_event" require_relative "openai/models/webhooks/agent_session_created_webhook_event" require_relative "openai/models/webhooks/agent_session_failed_webhook_event" diff --git a/lib/openai/models/beta/agent_session_environment_expired_event.rb b/lib/openai/models/beta/agent_session_environment_expired_event.rb new file mode 100644 index 000000000..82aa1486d --- /dev/null +++ b/lib/openai/models/beta/agent_session_environment_expired_event.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Beta + class AgentSessionEnvironmentExpiredEvent < OpenAI::Internal::Type::BaseModel + # @!attribute environment + # The current environment state. + # + # @return [OpenAI::Models::Beta::AgentSessionEnvironmentState] + required :environment, -> { OpenAI::Beta::AgentSessionEnvironmentState } + + # @!attribute event_id + # The unique ID of the event. + # + # @return [String] + required :event_id, String + + # @!attribute session_id + # The ID of the session associated with the event. + # + # @return [String] + required :session_id, String + + # @!attribute turn_id + # The ID of the turn associated with the event, when applicable. + # + # @return [String, nil] + required :turn_id, String, nil?: true + + # @!attribute type + # The type of the object. Always `agent.session.environment.expired`. + # + # @return [Symbol, :"agent.session.environment.expired"] + required :type, const: :"agent.session.environment.expired" + + # @!method initialize(environment:, event_id:, session_id:, turn_id:, type: :"agent.session.environment.expired") + # Emitted after a suspended hosted session environment and its checkpoint expire. + # + # @param environment [OpenAI::Models::Beta::AgentSessionEnvironmentState] + # The current environment state. + # + # @param event_id [String] + # The unique ID of the event. + # + # @param session_id [String] + # The ID of the session associated with the event. + # + # @param turn_id [String, nil] + # The ID of the turn associated with the event, when applicable. + # + # @param type [Symbol, :"agent.session.environment.expired"] + # The type of the object. Always `agent.session.environment.expired`. + end + end + end +end diff --git a/lib/openai/models/beta/agent_session_environment_state.rb b/lib/openai/models/beta/agent_session_environment_state.rb index 31c983d45..cd289bb16 100644 --- a/lib/openai/models/beta/agent_session_environment_state.rb +++ b/lib/openai/models/beta/agent_session_environment_state.rb @@ -94,6 +94,12 @@ module Status # The environment is disconnected. DISCONNECTED = :disconnected + # The environment is stopped and can be resumed from its private checkpoint. + SUSPENDED = :suspended + + # The environment and its private checkpoint have expired. + EXPIRED = :expired + # The environment failed to connect. FAILED = :failed diff --git a/lib/openai/models/beta/agent_session_environment_suspended_event.rb b/lib/openai/models/beta/agent_session_environment_suspended_event.rb new file mode 100644 index 000000000..1578e3222 --- /dev/null +++ b/lib/openai/models/beta/agent_session_environment_suspended_event.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Beta + class AgentSessionEnvironmentSuspendedEvent < OpenAI::Internal::Type::BaseModel + # @!attribute environment + # The current environment state. + # + # @return [OpenAI::Models::Beta::AgentSessionEnvironmentState] + required :environment, -> { OpenAI::Beta::AgentSessionEnvironmentState } + + # @!attribute event_id + # The unique ID of the event. + # + # @return [String] + required :event_id, String + + # @!attribute session_id + # The ID of the session associated with the event. + # + # @return [String] + required :session_id, String + + # @!attribute turn_id + # The ID of the turn associated with the event, when applicable. + # + # @return [String, nil] + required :turn_id, String, nil?: true + + # @!attribute type + # The type of the object. Always `agent.session.environment.suspended`. + # + # @return [Symbol, :"agent.session.environment.suspended"] + required :type, const: :"agent.session.environment.suspended" + + # @!method initialize(environment:, event_id:, session_id:, turn_id:, type: :"agent.session.environment.suspended") + # Emitted after an idle hosted session environment is checkpointed and stopped. + # + # @param environment [OpenAI::Models::Beta::AgentSessionEnvironmentState] + # The current environment state. + # + # @param event_id [String] + # The unique ID of the event. + # + # @param session_id [String] + # The ID of the session associated with the event. + # + # @param turn_id [String, nil] + # The ID of the turn associated with the event, when applicable. + # + # @param type [Symbol, :"agent.session.environment.suspended"] + # The type of the object. Always `agent.session.environment.suspended`. + end + end + end +end diff --git a/lib/openai/models/beta/agent_session_event.rb b/lib/openai/models/beta/agent_session_event.rb index 993c45c88..24595527a 100644 --- a/lib/openai/models/beta/agent_session_event.rb +++ b/lib/openai/models/beta/agent_session_event.rb @@ -15,6 +15,12 @@ module AgentSessionEvent # Emitted when a hosted session environment is ready to connect. variant :"agent.session.environment.ready", -> { OpenAI::Beta::AgentSessionEnvironmentReadyEvent } + # Emitted after an idle hosted session environment is checkpointed and stopped. + variant :"agent.session.environment.suspended", -> { OpenAI::Beta::AgentSessionEnvironmentSuspendedEvent } + + # Emitted after a suspended hosted session environment and its checkpoint expire. + variant :"agent.session.environment.expired", -> { OpenAI::Beta::AgentSessionEnvironmentExpiredEvent } + # Emitted after a hosted sandbox is replaced. Conversation history survives; changes to the previous sandbox's files and processes do not. variant :"agent.session.environment.reset", -> { OpenAI::Beta::AgentSessionEnvironmentResetEvent } @@ -124,7 +130,7 @@ module AgentSessionEvent ) # @!method self.variants - # @return [Array(OpenAI::Models::Beta::AgentSessionErrorEvent, OpenAI::Models::Beta::AgentSessionEnvironmentReadyEvent, OpenAI::Models::Beta::AgentSessionEnvironmentResetEvent, OpenAI::Models::Beta::AgentOutputCommandExecutionOutputDeltaEvent, OpenAI::Models::Beta::AgentSessionCreatedEvent, OpenAI::Models::Beta::AgentSessionTurnCreatedEvent, OpenAI::Models::Beta::AgentSessionTurnInProgressEvent, OpenAI::Models::Beta::AgentSessionTurnCompletedEvent, OpenAI::Models::Beta::AgentSessionTurnFailedEvent, OpenAI::Models::Beta::AgentSessionTurnCancelledEvent, OpenAI::Models::Beta::AgentSessionTurnItemAddedEvent, OpenAI::Models::Beta::AgentSessionIdleEvent, OpenAI::Models::Beta::AgentSessionInProgressEvent, OpenAI::Models::Beta::AgentSessionRequiresActionEvent, OpenAI::Models::Beta::AgentSessionFailedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentPendingEvent, OpenAI::Models::Beta::AgentSessionEnvironmentConnectedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentDisconnectedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentFailedEvent, OpenAI::Models::Beta::AgentSessionSubagentCreatedEvent, OpenAI::Models::Beta::AgentSessionSubagentActiveEvent, OpenAI::Models::Beta::AgentSessionSubagentClosedEvent, OpenAI::Models::Beta::AgentSessionTurnItemDoneEvent, OpenAI::Models::Beta::AgentSessionTurnContentPartAddedEvent, OpenAI::Models::Beta::AgentSessionTurnContentPartDoneEvent, OpenAI::Models::Beta::AgentSessionTurnOutputTextDeltaEvent, OpenAI::Models::Beta::AgentSessionTurnOutputTextDoneEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryPartAddedEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryPartDoneEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryTextDeltaEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryTextDoneEvent)] + # @return [Array(OpenAI::Models::Beta::AgentSessionErrorEvent, OpenAI::Models::Beta::AgentSessionEnvironmentReadyEvent, OpenAI::Models::Beta::AgentSessionEnvironmentSuspendedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentExpiredEvent, OpenAI::Models::Beta::AgentSessionEnvironmentResetEvent, OpenAI::Models::Beta::AgentOutputCommandExecutionOutputDeltaEvent, OpenAI::Models::Beta::AgentSessionCreatedEvent, OpenAI::Models::Beta::AgentSessionTurnCreatedEvent, OpenAI::Models::Beta::AgentSessionTurnInProgressEvent, OpenAI::Models::Beta::AgentSessionTurnCompletedEvent, OpenAI::Models::Beta::AgentSessionTurnFailedEvent, OpenAI::Models::Beta::AgentSessionTurnCancelledEvent, OpenAI::Models::Beta::AgentSessionTurnItemAddedEvent, OpenAI::Models::Beta::AgentSessionIdleEvent, OpenAI::Models::Beta::AgentSessionInProgressEvent, OpenAI::Models::Beta::AgentSessionRequiresActionEvent, OpenAI::Models::Beta::AgentSessionFailedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentPendingEvent, OpenAI::Models::Beta::AgentSessionEnvironmentConnectedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentDisconnectedEvent, OpenAI::Models::Beta::AgentSessionEnvironmentFailedEvent, OpenAI::Models::Beta::AgentSessionSubagentCreatedEvent, OpenAI::Models::Beta::AgentSessionSubagentActiveEvent, OpenAI::Models::Beta::AgentSessionSubagentClosedEvent, OpenAI::Models::Beta::AgentSessionTurnItemDoneEvent, OpenAI::Models::Beta::AgentSessionTurnContentPartAddedEvent, OpenAI::Models::Beta::AgentSessionTurnContentPartDoneEvent, OpenAI::Models::Beta::AgentSessionTurnOutputTextDeltaEvent, OpenAI::Models::Beta::AgentSessionTurnOutputTextDoneEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryPartAddedEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryPartDoneEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryTextDeltaEvent, OpenAI::Models::Beta::AgentSessionTurnReasoningSummaryTextDoneEvent)] end end end diff --git a/lib/openai/models/beta/agents/environment_info.rb b/lib/openai/models/beta/agents/environment_info.rb index bd4e1ddb9..dd1f45293 100644 --- a/lib/openai/models/beta/agents/environment_info.rb +++ b/lib/openai/models/beta/agents/environment_info.rb @@ -84,6 +84,9 @@ module Status CONNECTED = :connected DISCONNECTED = :disconnected + # The sandbox is stopped and can be resumed from its private checkpoint. + SUSPENDED = :suspended + EXPIRED = :expired FAILED = :failed diff --git a/lib/openai/models/webhooks/agent_environment_expired_webhook_event.rb b/lib/openai/models/webhooks/agent_environment_expired_webhook_event.rb new file mode 100644 index 000000000..3fb3326b4 --- /dev/null +++ b/lib/openai/models/webhooks/agent_environment_expired_webhook_event.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Webhooks + class AgentEnvironmentExpiredWebhookEvent < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The unique ID of the event. + # + # @return [String] + required :id, String + + # @!attribute created_at + # The Unix timestamp, in seconds, when the event was created. + # + # @return [Integer] + required :created_at, Integer + + # @!attribute data + # Identifies the environment whose lifecycle changed. + # + # @return [OpenAI::Models::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data] + required :data, -> { OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data } + + # @!attribute object + # The object type. Always `event`. + # + # @return [Symbol, :event] + required :object, const: :event + + # @!attribute type + # The event type. Always `agent.environment.expired`. + # + # @return [Symbol, :"agent.environment.expired"] + required :type, const: :"agent.environment.expired" + + # @!method initialize(id:, created_at:, data:, object: :event, type: :"agent.environment.expired") + # Sent when an agent environment expires and can no longer resume from a snapshot. + # + # @param id [String] + # The unique ID of the event. + # + # @param created_at [Integer] + # The Unix timestamp, in seconds, when the event was created. + # + # @param data [OpenAI::Models::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data] + # Identifies the environment whose lifecycle changed. + # + # @param object [Symbol, :event] + # The object type. Always `event`. + # + # @param type [Symbol, :"agent.environment.expired"] + # The event type. Always `agent.environment.expired`. + + # @see OpenAI::Models::Webhooks::AgentEnvironmentExpiredWebhookEvent#data + class Data < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The ID of the environment. + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # Identifies the environment whose lifecycle changed. + # + # @param id [String] + # The ID of the environment. + end + end + end + end +end diff --git a/lib/openai/models/webhooks/agent_environment_suspended_webhook_event.rb b/lib/openai/models/webhooks/agent_environment_suspended_webhook_event.rb new file mode 100644 index 000000000..ce03183e9 --- /dev/null +++ b/lib/openai/models/webhooks/agent_environment_suspended_webhook_event.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +module OpenAI + module Models + module Webhooks + class AgentEnvironmentSuspendedWebhookEvent < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The unique ID of the event. + # + # @return [String] + required :id, String + + # @!attribute created_at + # The Unix timestamp, in seconds, when the event was created. + # + # @return [Integer] + required :created_at, Integer + + # @!attribute data + # Identifies the environment whose lifecycle changed. + # + # @return [OpenAI::Models::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data] + required :data, -> { OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data } + + # @!attribute object + # The object type. Always `event`. + # + # @return [Symbol, :event] + required :object, const: :event + + # @!attribute type + # The event type. Always `agent.environment.suspended`. + # + # @return [Symbol, :"agent.environment.suspended"] + required :type, const: :"agent.environment.suspended" + + # @!method initialize(id:, created_at:, data:, object: :event, type: :"agent.environment.suspended") + # Sent when an agent environment is suspended and can resume from a snapshot. + # + # @param id [String] + # The unique ID of the event. + # + # @param created_at [Integer] + # The Unix timestamp, in seconds, when the event was created. + # + # @param data [OpenAI::Models::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data] + # Identifies the environment whose lifecycle changed. + # + # @param object [Symbol, :event] + # The object type. Always `event`. + # + # @param type [Symbol, :"agent.environment.suspended"] + # The event type. Always `agent.environment.suspended`. + + # @see OpenAI::Models::Webhooks::AgentEnvironmentSuspendedWebhookEvent#data + class Data < OpenAI::Internal::Type::BaseModel + # @!attribute id + # The ID of the environment. + # + # @return [String] + required :id, String + + # @!method initialize(id:) + # Identifies the environment whose lifecycle changed. + # + # @param id [String] + # The ID of the environment. + end + end + end + end +end diff --git a/lib/openai/models/webhooks/unwrap_webhook_event.rb b/lib/openai/models/webhooks/unwrap_webhook_event.rb index 5f2b05b39..56b5e87b4 100644 --- a/lib/openai/models/webhooks/unwrap_webhook_event.rb +++ b/lib/openai/models/webhooks/unwrap_webhook_event.rb @@ -3,13 +3,18 @@ module OpenAI module Models module Webhooks - # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is - # attached to a session. + # Sent when an agent environment expires and can no longer resume from a snapshot. module UnwrapWebhookEvent extend OpenAI::Internal::Type::Union discriminator :type + # Sent when an agent environment expires and can no longer resume from a snapshot. + variant :"agent.environment.expired", -> { OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent } + + # Sent when an agent environment is suspended and can resume from a snapshot. + variant :"agent.environment.suspended", -> { OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent } + # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is attached to a session. variant :"agent.environment.failed", -> { OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent } @@ -103,7 +108,7 @@ module UnwrapWebhookEvent variant :"safety.warning_issued", -> { OpenAI::Webhooks::SafetyWarningIssuedWebhookEvent } # @!method self.variants - # @return [Array(OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent)] + # @return [Array(OpenAI::Models::Webhooks::AgentEnvironmentExpiredWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentSuspendedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent)] end end end diff --git a/lib/openai/models/webhooks/webhook_create_params.rb b/lib/openai/models/webhooks/webhook_create_params.rb index cb6ee687a..028a90da1 100644 --- a/lib/openai/models/webhooks/webhook_create_params.rb +++ b/lib/openai/models/webhooks/webhook_create_params.rb @@ -64,6 +64,8 @@ module EventType VIDEO_FAILED = :"video.failed" AGENT_ENVIRONMENT_READY = :"agent.environment.ready" AGENT_ENVIRONMENT_FAILED = :"agent.environment.failed" + AGENT_ENVIRONMENT_SUSPENDED = :"agent.environment.suspended" + AGENT_ENVIRONMENT_EXPIRED = :"agent.environment.expired" AGENT_SESSION_CREATED = :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED = :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS = :"agent.session.in_progress" diff --git a/lib/openai/models/webhooks/webhook_test_params.rb b/lib/openai/models/webhooks/webhook_test_params.rb index 5b395320c..1fbc03855 100644 --- a/lib/openai/models/webhooks/webhook_test_params.rb +++ b/lib/openai/models/webhooks/webhook_test_params.rb @@ -50,6 +50,8 @@ module EventType VIDEO_FAILED = :"video.failed" AGENT_ENVIRONMENT_READY = :"agent.environment.ready" AGENT_ENVIRONMENT_FAILED = :"agent.environment.failed" + AGENT_ENVIRONMENT_SUSPENDED = :"agent.environment.suspended" + AGENT_ENVIRONMENT_EXPIRED = :"agent.environment.expired" AGENT_SESSION_CREATED = :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED = :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS = :"agent.session.in_progress" diff --git a/lib/openai/models/webhooks/webhook_update_params.rb b/lib/openai/models/webhooks/webhook_update_params.rb index 1307cf654..23af68e41 100644 --- a/lib/openai/models/webhooks/webhook_update_params.rb +++ b/lib/openai/models/webhooks/webhook_update_params.rb @@ -71,6 +71,8 @@ module EventType VIDEO_FAILED = :"video.failed" AGENT_ENVIRONMENT_READY = :"agent.environment.ready" AGENT_ENVIRONMENT_FAILED = :"agent.environment.failed" + AGENT_ENVIRONMENT_SUSPENDED = :"agent.environment.suspended" + AGENT_ENVIRONMENT_EXPIRED = :"agent.environment.expired" AGENT_SESSION_CREATED = :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED = :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS = :"agent.session.in_progress" diff --git a/lib/openai/resources/beta/agents/sessions/events.rb b/lib/openai/resources/beta/agents/sessions/events.rb index 72522927a..5e1ee1d6d 100644 --- a/lib/openai/resources/beta/agents/sessions/events.rb +++ b/lib/openai/resources/beta/agents/sessions/events.rb @@ -57,7 +57,7 @@ def create(session_id, params) # # @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}, nil] # - # @return [OpenAI::Internal::Stream] + # @return [OpenAI::Internal::Stream] # # @see OpenAI::Models::Beta::Agents::Sessions::EventStreamParams def stream_streaming(session_id, params = {}) diff --git a/lib/openai/resources/webhooks.rb b/lib/openai/resources/webhooks.rb index eb16d2e93..68ceb09cf 100644 --- a/lib/openai/resources/webhooks.rb +++ b/lib/openai/resources/webhooks.rb @@ -203,7 +203,7 @@ def test_(webhook_endpoint_id, params) # @param headers [Hash] The webhook headers # @param webhook_secret [String, nil] The webhook secret (optional, will use client webhook secret or ENV["OPENAI_WEBHOOK_SECRET"] if not provided) # - # @return [OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent] + # @return [OpenAI::Models::Webhooks::AgentEnvironmentExpiredWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentSuspendedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Models::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Models::Webhooks::AgentSessionActionRequiredWebhookEvent, OpenAI::Models::Webhooks::AgentSessionCreatedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionFailedWebhookEvent, OpenAI::Models::Webhooks::AgentSessionIdleWebhookEvent, OpenAI::Models::Webhooks::AgentSessionInProgressWebhookEvent, OpenAI::Models::Webhooks::BatchCancelledWebhookEvent, OpenAI::Models::Webhooks::BatchCompletedWebhookEvent, OpenAI::Models::Webhooks::BatchExpiredWebhookEvent, OpenAI::Models::Webhooks::BatchFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunCanceledWebhookEvent, OpenAI::Models::Webhooks::EvalRunFailedWebhookEvent, OpenAI::Models::Webhooks::EvalRunSucceededWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobCancelledWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobFailedWebhookEvent, OpenAI::Models::Webhooks::FineTuningJobSucceededWebhookEvent, OpenAI::Models::Webhooks::LiveCallIncomingWebhookEvent, OpenAI::Models::Webhooks::LiveTransportIncomingWebhookEvent, OpenAI::Models::Webhooks::RealtimeCallIncomingWebhookEvent, OpenAI::Models::Webhooks::ResponseCancelledWebhookEvent, OpenAI::Models::Webhooks::ResponseCompletedWebhookEvent, OpenAI::Models::Webhooks::ResponseFailedWebhookEvent, OpenAI::Models::Webhooks::ResponseIncompleteWebhookEvent, OpenAI::Models::Webhooks::SafetyAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyDeactivationIssuedWebhookEvent, OpenAI::Models::Webhooks::SafetyOrgAlertCreatedWebhookEvent, OpenAI::Models::Webhooks::SafetyWarningIssuedWebhookEvent] # # @raise [ArgumentError] if signature verification fails def unwrap( diff --git a/rbi/openai/models/beta/agent_session_environment_expired_event.rbi b/rbi/openai/models/beta/agent_session_environment_expired_event.rbi new file mode 100644 index 000000000..951f6ce71 --- /dev/null +++ b/rbi/openai/models/beta/agent_session_environment_expired_event.rbi @@ -0,0 +1,95 @@ +# typed: strong + +module OpenAI + module Models + + module Beta + + class AgentSessionEnvironmentExpiredEvent < OpenAI::Internal::Type::BaseModel + + OrHash = T.type_alias do + T.any( + OpenAI::Beta::AgentSessionEnvironmentExpiredEvent, + OpenAI::Internal::AnyHash + ) + end + + # The current environment state. + sig { returns(OpenAI::Beta::AgentSessionEnvironmentState) } + attr_reader :environment + + sig { params(environment: OpenAI::Beta::AgentSessionEnvironmentState::OrHash).void } + attr_writer :environment + + # The unique ID of the event. + sig { returns(String) } + attr_accessor :event_id + + # The ID of the session associated with the event. + sig { returns(String) } + attr_accessor :session_id + + # The ID of the turn associated with the event, when applicable. + sig { returns(T.nilable(String)) } + attr_accessor :turn_id + + # The type of the object. Always `agent.session.environment.expired`. + sig { returns(Symbol) } + attr_accessor :type + + # Emitted after a suspended hosted session environment and its checkpoint expire. + sig do + params( + + environment: OpenAI::Beta::AgentSessionEnvironmentState::OrHash, + + event_id: String, + + session_id: String, + + turn_id: T.nilable(String), + + type: Symbol + ) + .returns(T.attached_class) + end + def self.new( + + # The current environment state. + environment:, + + # The unique ID of the event. + event_id:, + + # The ID of the session associated with the event. + session_id:, + + # The ID of the turn associated with the event, when applicable. + turn_id:, + + # The type of the object. Always `agent.session.environment.expired`. + + type: :"agent.session.environment.expired" + ) + end + + sig do + override.returns( + { + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: T.nilable(String), + type: Symbol + } + ) + end + def to_hash + end + + end + + end + + end +end diff --git a/rbi/openai/models/beta/agent_session_environment_state.rbi b/rbi/openai/models/beta/agent_session_environment_state.rbi index 7dc3f8ef2..c7fd9712c 100644 --- a/rbi/openai/models/beta/agent_session_environment_state.rbi +++ b/rbi/openai/models/beta/agent_session_environment_state.rbi @@ -152,6 +152,12 @@ module OpenAI # The environment is disconnected. DISCONNECTED = T.let(:disconnected, OpenAI::Beta::AgentSessionEnvironmentState::Status::TaggedSymbol) + # The environment is stopped and can be resumed from its private checkpoint. + SUSPENDED = T.let(:suspended, OpenAI::Beta::AgentSessionEnvironmentState::Status::TaggedSymbol) + + # The environment and its private checkpoint have expired. + EXPIRED = T.let(:expired, OpenAI::Beta::AgentSessionEnvironmentState::Status::TaggedSymbol) + # The environment failed to connect. FAILED = T.let(:failed, OpenAI::Beta::AgentSessionEnvironmentState::Status::TaggedSymbol) diff --git a/rbi/openai/models/beta/agent_session_environment_suspended_event.rbi b/rbi/openai/models/beta/agent_session_environment_suspended_event.rbi new file mode 100644 index 000000000..53dd497aa --- /dev/null +++ b/rbi/openai/models/beta/agent_session_environment_suspended_event.rbi @@ -0,0 +1,95 @@ +# typed: strong + +module OpenAI + module Models + + module Beta + + class AgentSessionEnvironmentSuspendedEvent < OpenAI::Internal::Type::BaseModel + + OrHash = T.type_alias do + T.any( + OpenAI::Beta::AgentSessionEnvironmentSuspendedEvent, + OpenAI::Internal::AnyHash + ) + end + + # The current environment state. + sig { returns(OpenAI::Beta::AgentSessionEnvironmentState) } + attr_reader :environment + + sig { params(environment: OpenAI::Beta::AgentSessionEnvironmentState::OrHash).void } + attr_writer :environment + + # The unique ID of the event. + sig { returns(String) } + attr_accessor :event_id + + # The ID of the session associated with the event. + sig { returns(String) } + attr_accessor :session_id + + # The ID of the turn associated with the event, when applicable. + sig { returns(T.nilable(String)) } + attr_accessor :turn_id + + # The type of the object. Always `agent.session.environment.suspended`. + sig { returns(Symbol) } + attr_accessor :type + + # Emitted after an idle hosted session environment is checkpointed and stopped. + sig do + params( + + environment: OpenAI::Beta::AgentSessionEnvironmentState::OrHash, + + event_id: String, + + session_id: String, + + turn_id: T.nilable(String), + + type: Symbol + ) + .returns(T.attached_class) + end + def self.new( + + # The current environment state. + environment:, + + # The unique ID of the event. + event_id:, + + # The ID of the session associated with the event. + session_id:, + + # The ID of the turn associated with the event, when applicable. + turn_id:, + + # The type of the object. Always `agent.session.environment.suspended`. + + type: :"agent.session.environment.suspended" + ) + end + + sig do + override.returns( + { + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: T.nilable(String), + type: Symbol + } + ) + end + def to_hash + end + + end + + end + + end +end diff --git a/rbi/openai/models/beta/agent_session_event.rbi b/rbi/openai/models/beta/agent_session_event.rbi index d0859478d..b3c274c33 100644 --- a/rbi/openai/models/beta/agent_session_event.rbi +++ b/rbi/openai/models/beta/agent_session_event.rbi @@ -13,6 +13,8 @@ module OpenAI T.any( OpenAI::Beta::AgentSessionErrorEvent, OpenAI::Beta::AgentSessionEnvironmentReadyEvent, + OpenAI::Beta::AgentSessionEnvironmentSuspendedEvent, + OpenAI::Beta::AgentSessionEnvironmentExpiredEvent, OpenAI::Beta::AgentSessionEnvironmentResetEvent, OpenAI::Beta::AgentOutputCommandExecutionOutputDeltaEvent, OpenAI::Beta::AgentSessionCreatedEvent, diff --git a/rbi/openai/models/beta/agents/environment_info.rbi b/rbi/openai/models/beta/agents/environment_info.rbi index 322cd1515..cb9ec4d4a 100644 --- a/rbi/openai/models/beta/agents/environment_info.rbi +++ b/rbi/openai/models/beta/agents/environment_info.rbi @@ -126,6 +126,9 @@ module OpenAI CONNECTED = T.let(:connected, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) DISCONNECTED = T.let(:disconnected, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) + # The sandbox is stopped and can be resumed from its private checkpoint. + SUSPENDED = T.let(:suspended, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) + EXPIRED = T.let(:expired, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) FAILED = T.let(:failed, OpenAI::Beta::Agents::EnvironmentInfo::Status::TaggedSymbol) diff --git a/rbi/openai/models/webhooks/agent_environment_expired_webhook_event.rbi b/rbi/openai/models/webhooks/agent_environment_expired_webhook_event.rbi new file mode 100644 index 000000000..cd702133a --- /dev/null +++ b/rbi/openai/models/webhooks/agent_environment_expired_webhook_event.rbi @@ -0,0 +1,133 @@ +# typed: strong + +module OpenAI + module Models + + module Webhooks + + class AgentEnvironmentExpiredWebhookEvent < OpenAI::Internal::Type::BaseModel + + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent, + OpenAI::Internal::AnyHash + ) + end + + # The unique ID of the event. + sig { returns(String) } + attr_accessor :id + + # The Unix timestamp, in seconds, when the event was created. + sig { returns(Integer) } + attr_accessor :created_at + + # Identifies the environment whose lifecycle changed. + sig { returns(OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data) } + attr_reader :data + + sig { params(data: OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data::OrHash).void } + attr_writer :data + + # The object type. Always `event`. + sig { returns(Symbol) } + attr_accessor :object + + # The event type. Always `agent.environment.expired`. + sig { returns(Symbol) } + attr_accessor :type + + # Sent when an agent environment expires and can no longer resume from a snapshot. + sig do + params( + + id: String, + + created_at: Integer, + + data: OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data::OrHash, + + object: Symbol, + + type: Symbol + ) + .returns(T.attached_class) + end + def self.new( + + # The unique ID of the event. + id:, + + # The Unix timestamp, in seconds, when the event was created. + created_at:, + + # Identifies the environment whose lifecycle changed. + data:, + + # The object type. Always `event`. + object: :event, + + # The event type. Always `agent.environment.expired`. + + type: :"agent.environment.expired" + ) + end + + sig do + override.returns( + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data, + object: Symbol, + type: Symbol + } + ) + end + def to_hash + end + + class Data < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data, + OpenAI::Internal::AnyHash + ) + end + + # The ID of the environment. + sig { returns(String) } + attr_accessor :id + + # Identifies the environment whose lifecycle changed. + sig do + params( + + id: String + ) + .returns(T.attached_class) + end + def self.new( + + # The ID of the environment. + + id: + ) + end + + sig do + override.returns( + {id: String} + ) + end + def to_hash + end + + end + + end + + end + + end +end diff --git a/rbi/openai/models/webhooks/agent_environment_suspended_webhook_event.rbi b/rbi/openai/models/webhooks/agent_environment_suspended_webhook_event.rbi new file mode 100644 index 000000000..74aaabcd3 --- /dev/null +++ b/rbi/openai/models/webhooks/agent_environment_suspended_webhook_event.rbi @@ -0,0 +1,133 @@ +# typed: strong + +module OpenAI + module Models + + module Webhooks + + class AgentEnvironmentSuspendedWebhookEvent < OpenAI::Internal::Type::BaseModel + + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent, + OpenAI::Internal::AnyHash + ) + end + + # The unique ID of the event. + sig { returns(String) } + attr_accessor :id + + # The Unix timestamp, in seconds, when the event was created. + sig { returns(Integer) } + attr_accessor :created_at + + # Identifies the environment whose lifecycle changed. + sig { returns(OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data) } + attr_reader :data + + sig { params(data: OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data::OrHash).void } + attr_writer :data + + # The object type. Always `event`. + sig { returns(Symbol) } + attr_accessor :object + + # The event type. Always `agent.environment.suspended`. + sig { returns(Symbol) } + attr_accessor :type + + # Sent when an agent environment is suspended and can resume from a snapshot. + sig do + params( + + id: String, + + created_at: Integer, + + data: OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data::OrHash, + + object: Symbol, + + type: Symbol + ) + .returns(T.attached_class) + end + def self.new( + + # The unique ID of the event. + id:, + + # The Unix timestamp, in seconds, when the event was created. + created_at:, + + # Identifies the environment whose lifecycle changed. + data:, + + # The object type. Always `event`. + object: :event, + + # The event type. Always `agent.environment.suspended`. + + type: :"agent.environment.suspended" + ) + end + + sig do + override.returns( + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data, + object: Symbol, + type: Symbol + } + ) + end + def to_hash + end + + class Data < OpenAI::Internal::Type::BaseModel + OrHash = T.type_alias do + T.any( + OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data, + OpenAI::Internal::AnyHash + ) + end + + # The ID of the environment. + sig { returns(String) } + attr_accessor :id + + # Identifies the environment whose lifecycle changed. + sig do + params( + + id: String + ) + .returns(T.attached_class) + end + def self.new( + + # The ID of the environment. + + id: + ) + end + + sig do + override.returns( + {id: String} + ) + end + def to_hash + end + + end + + end + + end + + end +end diff --git a/rbi/openai/models/webhooks/unwrap_webhook_event.rbi b/rbi/openai/models/webhooks/unwrap_webhook_event.rbi index dfdc42225..41e7fcd3f 100644 --- a/rbi/openai/models/webhooks/unwrap_webhook_event.rbi +++ b/rbi/openai/models/webhooks/unwrap_webhook_event.rbi @@ -5,13 +5,14 @@ module OpenAI module Webhooks - # Sent when setup fails for a prewarmed OpenAI-hosted environment before it is - # attached to a session. + # Sent when an agent environment expires and can no longer resume from a snapshot. module UnwrapWebhookEvent extend OpenAI::Internal::Type::Union Variants = T.type_alias do T.any( + OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent, + OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent, OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent, diff --git a/rbi/openai/models/webhooks/webhook_create_params.rbi b/rbi/openai/models/webhooks/webhook_create_params.rbi index de92ba15c..7e0b36c42 100644 --- a/rbi/openai/models/webhooks/webhook_create_params.rbi +++ b/rbi/openai/models/webhooks/webhook_create_params.rbi @@ -129,6 +129,14 @@ module OpenAI :"agent.environment.failed", OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol ) + AGENT_ENVIRONMENT_SUSPENDED = T.let( + :"agent.environment.suspended", + OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol + ) + AGENT_ENVIRONMENT_EXPIRED = T.let( + :"agent.environment.expired", + OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol + ) AGENT_SESSION_CREATED = T.let( :"agent.session.created", OpenAI::Webhooks::WebhookCreateParams::EventType::TaggedSymbol diff --git a/rbi/openai/models/webhooks/webhook_test_params.rbi b/rbi/openai/models/webhooks/webhook_test_params.rbi index f22be0cd7..560966a87 100644 --- a/rbi/openai/models/webhooks/webhook_test_params.rbi +++ b/rbi/openai/models/webhooks/webhook_test_params.rbi @@ -114,6 +114,14 @@ module OpenAI :"agent.environment.failed", OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol ) + AGENT_ENVIRONMENT_SUSPENDED = T.let( + :"agent.environment.suspended", + OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol + ) + AGENT_ENVIRONMENT_EXPIRED = T.let( + :"agent.environment.expired", + OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol + ) AGENT_SESSION_CREATED = T.let( :"agent.session.created", OpenAI::Webhooks::WebhookTestParams::EventType::TaggedSymbol diff --git a/rbi/openai/models/webhooks/webhook_update_params.rbi b/rbi/openai/models/webhooks/webhook_update_params.rbi index a8dba9a2d..841e3a223 100644 --- a/rbi/openai/models/webhooks/webhook_update_params.rbi +++ b/rbi/openai/models/webhooks/webhook_update_params.rbi @@ -146,6 +146,14 @@ module OpenAI :"agent.environment.failed", OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol ) + AGENT_ENVIRONMENT_SUSPENDED = T.let( + :"agent.environment.suspended", + OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol + ) + AGENT_ENVIRONMENT_EXPIRED = T.let( + :"agent.environment.expired", + OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol + ) AGENT_SESSION_CREATED = T.let( :"agent.session.created", OpenAI::Webhooks::WebhookUpdateParams::EventType::TaggedSymbol diff --git a/rbi/openai/resources/webhooks.rbi b/rbi/openai/resources/webhooks.rbi index ec0194d8b..34458502d 100644 --- a/rbi/openai/resources/webhooks.rbi +++ b/rbi/openai/resources/webhooks.rbi @@ -140,6 +140,8 @@ module OpenAI ) .returns( T.any( + OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent, + OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent, OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent, OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent, OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent, diff --git a/sig/openai/models/beta/agent_session_environment_expired_event.rbs b/sig/openai/models/beta/agent_session_environment_expired_event.rbs new file mode 100644 index 000000000..8bf79e994 --- /dev/null +++ b/sig/openai/models/beta/agent_session_environment_expired_event.rbs @@ -0,0 +1,57 @@ +module OpenAI + module Models + module Beta + type agent_session_environment_expired_event = + { + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: String?, + ?type: :"agent.session.environment.expired" + } + + class AgentSessionEnvironmentExpiredEvent < OpenAI::Internal::Type::BaseModel + # The current environment state. + attr_accessor environment: OpenAI::Beta::AgentSessionEnvironmentState + + # The unique ID of the event. + attr_accessor event_id: String + + # The ID of the session associated with the event. + attr_accessor session_id: String + + # The ID of the turn associated with the event, when applicable. + attr_accessor turn_id: String? + + # The type of the object. Always `agent.session.environment.expired`. + attr_accessor type: :"agent.session.environment.expired" + + # @param environment + # The current environment state. + # @param event_id + # The unique ID of the event. + # @param session_id + # The ID of the session associated with the event. + # @param turn_id + # The ID of the turn associated with the event, when applicable. + # @param type + # The type of the object. Always `agent.session.environment.expired`. + def initialize: ( + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: String?, + ?type: :"agent.session.environment.expired" + ) -> void + + def to_hash: -> { + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: String?, + ?type: :"agent.session.environment.expired" + } + end + end + end +end diff --git a/sig/openai/models/beta/agent_session_environment_state.rbs b/sig/openai/models/beta/agent_session_environment_state.rbs index 50f73436d..c9c3c3b50 100644 --- a/sig/openai/models/beta/agent_session_environment_state.rbs +++ b/sig/openai/models/beta/agent_session_environment_state.rbs @@ -67,7 +67,14 @@ module OpenAI def to_hash: -> { code: String, message: String, type: String } end - type status = :pending | :ready | :connected | :disconnected | :failed + type status = + :pending + | :ready + | :connected + | :disconnected + | :suspended + | :expired + | :failed module Status extend OpenAI::Internal::Type::Enum @@ -84,6 +91,12 @@ module OpenAI # The environment is disconnected. DISCONNECTED: :disconnected + # The environment is stopped and can be resumed from its private checkpoint. + SUSPENDED: :suspended + + # The environment and its private checkpoint have expired. + EXPIRED: :expired + # The environment failed to connect. FAILED: :failed diff --git a/sig/openai/models/beta/agent_session_environment_suspended_event.rbs b/sig/openai/models/beta/agent_session_environment_suspended_event.rbs new file mode 100644 index 000000000..f788e7080 --- /dev/null +++ b/sig/openai/models/beta/agent_session_environment_suspended_event.rbs @@ -0,0 +1,57 @@ +module OpenAI + module Models + module Beta + type agent_session_environment_suspended_event = + { + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: String?, + ?type: :"agent.session.environment.suspended" + } + + class AgentSessionEnvironmentSuspendedEvent < OpenAI::Internal::Type::BaseModel + # The current environment state. + attr_accessor environment: OpenAI::Beta::AgentSessionEnvironmentState + + # The unique ID of the event. + attr_accessor event_id: String + + # The ID of the session associated with the event. + attr_accessor session_id: String + + # The ID of the turn associated with the event, when applicable. + attr_accessor turn_id: String? + + # The type of the object. Always `agent.session.environment.suspended`. + attr_accessor type: :"agent.session.environment.suspended" + + # @param environment + # The current environment state. + # @param event_id + # The unique ID of the event. + # @param session_id + # The ID of the session associated with the event. + # @param turn_id + # The ID of the turn associated with the event, when applicable. + # @param type + # The type of the object. Always `agent.session.environment.suspended`. + def initialize: ( + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: String?, + ?type: :"agent.session.environment.suspended" + ) -> void + + def to_hash: -> { + environment: OpenAI::Beta::AgentSessionEnvironmentState, + event_id: String, + session_id: String, + turn_id: String?, + ?type: :"agent.session.environment.suspended" + } + end + end + end +end diff --git a/sig/openai/models/beta/agent_session_event.rbs b/sig/openai/models/beta/agent_session_event.rbs index c53227729..d402f1ea2 100644 --- a/sig/openai/models/beta/agent_session_event.rbs +++ b/sig/openai/models/beta/agent_session_event.rbs @@ -4,6 +4,8 @@ module OpenAI type agent_session_event = OpenAI::Beta::AgentSessionErrorEvent | OpenAI::Beta::AgentSessionEnvironmentReadyEvent + | OpenAI::Beta::AgentSessionEnvironmentSuspendedEvent + | OpenAI::Beta::AgentSessionEnvironmentExpiredEvent | OpenAI::Beta::AgentSessionEnvironmentResetEvent | OpenAI::Beta::AgentOutputCommandExecutionOutputDeltaEvent | OpenAI::Beta::AgentSessionCreatedEvent diff --git a/sig/openai/models/beta/agents/environment_info.rbs b/sig/openai/models/beta/agents/environment_info.rbs index a82817ec9..fcf08c169 100644 --- a/sig/openai/models/beta/agents/environment_info.rbs +++ b/sig/openai/models/beta/agents/environment_info.rbs @@ -70,7 +70,13 @@ module OpenAI } type status = - :pending | :ready | :connected | :disconnected | :expired | :failed + :pending + | :ready + | :connected + | :disconnected + | :suspended + | :expired + | :failed module Status extend OpenAI::Internal::Type::Enum @@ -82,6 +88,10 @@ module OpenAI CONNECTED: :connected DISCONNECTED: :disconnected + + # The sandbox is stopped and can be resumed from its private checkpoint. + SUSPENDED: :suspended + EXPIRED: :expired FAILED: :failed diff --git a/sig/openai/models/webhooks/agent_environment_expired_webhook_event.rbs b/sig/openai/models/webhooks/agent_environment_expired_webhook_event.rbs new file mode 100644 index 000000000..590bffd37 --- /dev/null +++ b/sig/openai/models/webhooks/agent_environment_expired_webhook_event.rbs @@ -0,0 +1,70 @@ +module OpenAI + module Models + module Webhooks + type agent_environment_expired_webhook_event = + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.expired" + } + + class AgentEnvironmentExpiredWebhookEvent < OpenAI::Internal::Type::BaseModel + # The unique ID of the event. + attr_accessor id: String + + # The Unix timestamp, in seconds, when the event was created. + attr_accessor created_at: Integer + + # Identifies the environment whose lifecycle changed. + attr_accessor data: OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data + + # The object type. Always `event`. + attr_accessor object: :event + + # The event type. Always `agent.environment.expired`. + attr_accessor type: :"agent.environment.expired" + + # @param id + # The unique ID of the event. + # @param created_at + # The Unix timestamp, in seconds, when the event was created. + # @param data + # Identifies the environment whose lifecycle changed. + # @param object + # The object type. Always `event`. + # @param type + # The event type. Always `agent.environment.expired`. + def initialize: ( + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.expired" + ) -> void + + def to_hash: -> { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.expired" + } + + type data = { id: String } + + class Data < OpenAI::Internal::Type::BaseModel + # The ID of the environment. + attr_accessor id: String + + # @param id + # The ID of the environment. + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end +end diff --git a/sig/openai/models/webhooks/agent_environment_suspended_webhook_event.rbs b/sig/openai/models/webhooks/agent_environment_suspended_webhook_event.rbs new file mode 100644 index 000000000..3ad07cf75 --- /dev/null +++ b/sig/openai/models/webhooks/agent_environment_suspended_webhook_event.rbs @@ -0,0 +1,70 @@ +module OpenAI + module Models + module Webhooks + type agent_environment_suspended_webhook_event = + { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.suspended" + } + + class AgentEnvironmentSuspendedWebhookEvent < OpenAI::Internal::Type::BaseModel + # The unique ID of the event. + attr_accessor id: String + + # The Unix timestamp, in seconds, when the event was created. + attr_accessor created_at: Integer + + # Identifies the environment whose lifecycle changed. + attr_accessor data: OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data + + # The object type. Always `event`. + attr_accessor object: :event + + # The event type. Always `agent.environment.suspended`. + attr_accessor type: :"agent.environment.suspended" + + # @param id + # The unique ID of the event. + # @param created_at + # The Unix timestamp, in seconds, when the event was created. + # @param data + # Identifies the environment whose lifecycle changed. + # @param object + # The object type. Always `event`. + # @param type + # The event type. Always `agent.environment.suspended`. + def initialize: ( + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.suspended" + ) -> void + + def to_hash: -> { + id: String, + created_at: Integer, + data: OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent::Data, + ?object: :event, + ?type: :"agent.environment.suspended" + } + + type data = { id: String } + + class Data < OpenAI::Internal::Type::BaseModel + # The ID of the environment. + attr_accessor id: String + + # @param id + # The ID of the environment. + def initialize: (id: String) -> void + + def to_hash: -> { id: String } + end + end + end + end +end diff --git a/sig/openai/models/webhooks/unwrap_webhook_event.rbs b/sig/openai/models/webhooks/unwrap_webhook_event.rbs index c23cec36b..f892af499 100644 --- a/sig/openai/models/webhooks/unwrap_webhook_event.rbs +++ b/sig/openai/models/webhooks/unwrap_webhook_event.rbs @@ -2,7 +2,9 @@ module OpenAI module Models module Webhooks type unwrap_webhook_event = - OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent + OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent + | OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent + | OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent | OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent | OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent | OpenAI::Webhooks::AgentSessionCreatedWebhookEvent diff --git a/sig/openai/models/webhooks/webhook_create_params.rbs b/sig/openai/models/webhooks/webhook_create_params.rbs index 88128fe5c..7c5b449a1 100644 --- a/sig/openai/models/webhooks/webhook_create_params.rbs +++ b/sig/openai/models/webhooks/webhook_create_params.rbs @@ -62,6 +62,8 @@ module OpenAI | :"video.failed" | :"agent.environment.ready" | :"agent.environment.failed" + | :"agent.environment.suspended" + | :"agent.environment.expired" | :"agent.session.created" | :"agent.session.action_required" | :"agent.session.in_progress" @@ -91,6 +93,8 @@ module OpenAI VIDEO_FAILED: :"video.failed" AGENT_ENVIRONMENT_READY: :"agent.environment.ready" AGENT_ENVIRONMENT_FAILED: :"agent.environment.failed" + AGENT_ENVIRONMENT_SUSPENDED: :"agent.environment.suspended" + AGENT_ENVIRONMENT_EXPIRED: :"agent.environment.expired" AGENT_SESSION_CREATED: :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED: :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS: :"agent.session.in_progress" diff --git a/sig/openai/models/webhooks/webhook_test_params.rbs b/sig/openai/models/webhooks/webhook_test_params.rbs index 7b261c621..d64f8ecff 100644 --- a/sig/openai/models/webhooks/webhook_test_params.rbs +++ b/sig/openai/models/webhooks/webhook_test_params.rbs @@ -51,6 +51,8 @@ module OpenAI | :"video.failed" | :"agent.environment.ready" | :"agent.environment.failed" + | :"agent.environment.suspended" + | :"agent.environment.expired" | :"agent.session.created" | :"agent.session.action_required" | :"agent.session.in_progress" @@ -80,6 +82,8 @@ module OpenAI VIDEO_FAILED: :"video.failed" AGENT_ENVIRONMENT_READY: :"agent.environment.ready" AGENT_ENVIRONMENT_FAILED: :"agent.environment.failed" + AGENT_ENVIRONMENT_SUSPENDED: :"agent.environment.suspended" + AGENT_ENVIRONMENT_EXPIRED: :"agent.environment.expired" AGENT_SESSION_CREATED: :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED: :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS: :"agent.session.in_progress" diff --git a/sig/openai/models/webhooks/webhook_update_params.rbs b/sig/openai/models/webhooks/webhook_update_params.rbs index ad26ad60f..32a052043 100644 --- a/sig/openai/models/webhooks/webhook_update_params.rbs +++ b/sig/openai/models/webhooks/webhook_update_params.rbs @@ -78,6 +78,8 @@ module OpenAI | :"video.failed" | :"agent.environment.ready" | :"agent.environment.failed" + | :"agent.environment.suspended" + | :"agent.environment.expired" | :"agent.session.created" | :"agent.session.action_required" | :"agent.session.in_progress" @@ -107,6 +109,8 @@ module OpenAI VIDEO_FAILED: :"video.failed" AGENT_ENVIRONMENT_READY: :"agent.environment.ready" AGENT_ENVIRONMENT_FAILED: :"agent.environment.failed" + AGENT_ENVIRONMENT_SUSPENDED: :"agent.environment.suspended" + AGENT_ENVIRONMENT_EXPIRED: :"agent.environment.expired" AGENT_SESSION_CREATED: :"agent.session.created" AGENT_SESSION_ACTION_REQUIRED: :"agent.session.action_required" AGENT_SESSION_IN_PROGRESS: :"agent.session.in_progress" diff --git a/sig/openai/resources/webhooks.rbs b/sig/openai/resources/webhooks.rbs index 0c539de2b..74af2ebcc 100644 --- a/sig/openai/resources/webhooks.rbs +++ b/sig/openai/resources/webhooks.rbs @@ -50,7 +50,9 @@ module OpenAI String payload, ?Hash[String | Symbol, String] headers, ?String? webhook_secret - ) -> (OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent + ) -> (OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent + | OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent + | OpenAI::Webhooks::AgentEnvironmentFailedWebhookEvent | OpenAI::Webhooks::AgentEnvironmentReadyWebhookEvent | OpenAI::Webhooks::AgentSessionActionRequiredWebhookEvent | OpenAI::Webhooks::AgentSessionCreatedWebhookEvent diff --git a/test/openai/agent_session_environment_reset_event_test.rb b/test/openai/agent_session_environment_reset_event_test.rb index 0953c3899..667268706 100644 --- a/test/openai/agent_session_environment_reset_event_test.rb +++ b/test/openai/agent_session_environment_reset_event_test.rb @@ -29,6 +29,47 @@ def test_reset_event_with_a_turn assert_reset_event(turn_id: "turn_synthetic", reset_count: 7) end + def test_suspended_and_expired_events_without_a_turn + event_classes = { + suspended: OpenAI::Beta::AgentSessionEnvironmentSuspendedEvent, + expired: OpenAI::Beta::AgentSessionEnvironmentExpiredEvent + } + payloads = event_classes.map do |status, _event_class| + { + type: "agent.session.environment.#{status}", + event_id: "event_#{status}", + session_id: "session_synthetic", + turn_id: nil, + environment: {id: "ccarenv_synthetic", type: "openai_hosted", status: status, error: nil} + } + end + + request = stub_request(:get, "http://localhost/agents/sessions/session_synthetic/events").to_return( + status: 200, + headers: {"content-type" => "text/event-stream"}, + body: payloads.map { |payload| "data: #{JSON.generate(payload)}\n\n" }.join + ) + client = OpenAI::Client.new(base_url: "http://localhost", api_key: "synthetic", max_retries: 0) + stream = client.beta.agents.sessions.events.stream_streaming("session_synthetic") + events = stream.to_a + + assert_equal(2, events.length) + events.zip(event_classes, payloads).each do |event, (status, event_class), payload| + assert_instance_of(event_class, event) + assert_equal(:"agent.session.environment.#{status}", event.type) + assert_nil(event.turn_id) + assert_instance_of(OpenAI::Beta::AgentSessionEnvironmentState, event.environment) + assert_equal(status, event.environment.status) + assert_equal("ccarenv_synthetic", event.environment.id) + assert_nil(event.environment.error) + assert_equal(JSON.parse(JSON.generate(payload)), JSON.parse(event.to_json)) + end + + assert_requested(request, times: 1) + ensure + stream&.close + end + private def assert_reset_event(turn_id:, reset_count:) diff --git a/test/openai/helpers/webhook_verification_test.rb b/test/openai/helpers/webhook_verification_test.rb index 885e78a50..d8e0d652a 100644 --- a/test/openai/helpers/webhook_verification_test.rb +++ b/test/openai/helpers/webhook_verification_test.rb @@ -230,6 +230,33 @@ def test_unwrap_signed_agent_events_and_nested_payloads end end + def test_unwrap_signed_agent_environment_lifecycle_events + event_types = { + "agent.environment.suspended" => OpenAI::Webhooks::AgentEnvironmentSuspendedWebhookEvent, + "agent.environment.expired" => OpenAI::Webhooks::AgentEnvironmentExpiredWebhookEvent + } + + event_types.each do |event_type, event_class| + @test_payload = JSON.generate( + id: "evt_synthetic", + object: "event", + created_at: Integer(@fixed_timestamp, 10), + type: event_type, + data: {id: "ccarenv_synthetic"} + ) + event = @client.webhooks.unwrap( + @test_payload, + signed_headers("synthetic-agent-webhook-secret"), + "synthetic-agent-webhook-secret" + ) + + assert_instance_of(event_class, event) + assert_instance_of(event_class::Data, event.data) + assert_equal("ccarenv_synthetic", event.data.id) + assert_equal(JSON.parse(@test_payload), JSON.parse(event.to_json)) + end + end + def test_unwrap_safety_events event_types = { "safety.warning_issued" => OpenAI::Webhooks::SafetyWarningIssuedWebhookEvent,