runtype 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +152 -0
- data/README.md +88 -10
- data/generated/lib/runtype/agent_aliases/client.rb +153 -0
- data/generated/lib/runtype/agent_aliases/types/delete_v1agents_id_aliases_alias_bindings_request.rb +17 -0
- data/generated/lib/runtype/agent_aliases/types/delete_v1agents_id_aliases_alias_bindings_response.rb +19 -0
- data/generated/lib/runtype/agent_aliases/types/get_v1agents_id_aliases_alias_bindings_request.rb +13 -0
- data/generated/lib/runtype/agent_aliases/types/get_v1agents_id_aliases_alias_bindings_response.rb +19 -0
- data/generated/lib/runtype/agent_aliases/types/get_v1agents_id_aliases_alias_response.rb +2 -0
- data/generated/lib/runtype/agent_aliases/types/get_v1agents_id_aliases_response_data_item.rb +2 -0
- data/generated/lib/runtype/agent_aliases/types/get_v1agents_id_deployments_response_data_item.rb +2 -0
- data/generated/lib/runtype/agent_aliases/types/post_v1agents_id_aliases_alias_rollback_response.rb +2 -0
- data/generated/lib/runtype/agent_aliases/types/put_v1agents_id_aliases_alias_bindings_request.rb +21 -0
- data/generated/lib/runtype/agent_aliases/types/put_v1agents_id_aliases_alias_bindings_response.rb +19 -0
- data/generated/lib/runtype/agent_aliases/types/put_v1agents_id_aliases_alias_response.rb +2 -0
- data/generated/lib/runtype/agent_versions/client.rb +13 -1
- data/generated/lib/runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_request.rb +6 -0
- data/generated/lib/runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_request_deployment.rb +11 -0
- data/generated/lib/runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_request_deployment_action.rb +14 -0
- data/generated/lib/runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_response.rb +1 -1
- data/generated/lib/runtype/conversations/client.rb +28 -10
- data/generated/lib/runtype/conversations/types/get_v1conversations_id_response.rb +3 -1
- data/generated/lib/runtype/conversations/types/post_v1conversations_request.rb +6 -0
- data/generated/lib/runtype/conversations/types/post_v1conversations_response.rb +3 -1
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request.rb +7 -1
- data/generated/lib/runtype/conversations/types/{put_v1conversations_id_request_messages_item_content_one_item_asset_ref_ref_kind.rb → put_v1conversations_id_request_messages_mode.rb} +3 -3
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_response.rb +3 -1
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one.rb +2 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one_history.rb +14 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one_messages_item.rb +4 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one_messages_item_role.rb +1 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one_messages_item_tool_calls_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one_messages_item_tool_results_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_zero.rb +2 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_zero_history.rb +14 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_zero_messages_item.rb +4 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_role.rb +1 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_tool_calls_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_tool_results_item.rb +17 -0
- data/generated/lib/runtype/model_configs/types/post_v1model_configs_request_settings_custom_model.rb +2 -0
- data/generated/lib/runtype/model_configs/types/post_v1model_configs_request_settings_custom_model_mid_conversation_system_messages.rb +14 -0
- data/generated/lib/runtype/model_configs/types/put_v1model_configs_id_request_settings_custom_model.rb +2 -0
- data/generated/lib/runtype/model_configs/types/put_v1model_configs_id_request_settings_custom_model_mid_conversation_system_messages.rb +14 -0
- data/generated/lib/runtype/products/client.rb +45 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_request.rb +13 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response.rb +13 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data.rb +13 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item.rb +17 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item.rb +77 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_agent_target_resolution.rb +15 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_agent_version.rb +17 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_execution_mode.rb +14 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_notification_mode.rb +15 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_pending_approval.rb +27 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_status.rb +19 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_error.rb +11 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_surfaces_item.rb +19 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item.rb +15 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item_agent_mode.rb +45 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item_available_fields.rb +39 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item_available_fields_metadata_schema.rb +11 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_error.rb +11 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_source.rb +14 -0
- data/generated/lib/runtype/provider_keys/types/post_v1provider_keys_id_sync_models_request_models_item.rb +2 -0
- data/generated/lib/runtype/provider_keys/types/post_v1provider_keys_id_sync_models_request_models_item_mid_conversation_system_messages.rb +14 -0
- data/generated/lib/runtype/types/agent_ensure_deploy_target.rb +2 -0
- data/generated/lib/runtype/types/conflict_error_body_candidate_count.rb +21 -0
- data/generated/lib/runtype/types/conflict_error_body_candidate_count_code.rb +11 -0
- data/generated/lib/runtype/types/conversation_message_author.rb +16 -0
- data/generated/lib/runtype/types/conversation_message_author_type.rb +14 -0
- data/generated/lib/runtype/types/conversation_modified_error.rb +13 -0
- data/generated/lib/runtype/types/conversation_modified_error_code.rb +11 -0
- data/generated/lib/runtype/types/conversation_source.rb +14 -0
- data/generated/lib/runtype/types/conversation_transcript_message.rb +23 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content.rb +14 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content_one_item.rb +21 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content_one_item_asset_ref.rb +19 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content_one_item_asset_ref_ref_kind.rb +12 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content_one_item_file.rb +13 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content_one_item_image.rb +11 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content_one_item_reasoning.rb +11 -0
- data/generated/lib/runtype/types/conversation_transcript_message_content_one_item_text.rb +9 -0
- data/generated/lib/runtype/types/conversation_transcript_message_role.rb +14 -0
- data/generated/lib/runtype/types/conversation_transcript_message_tool_calls_item.rb +15 -0
- data/generated/lib/runtype/types/conversation_transcript_message_tool_results_item.rb +15 -0
- data/generated/lib/runtype.rb +59 -12
- data/lib/runtype/agent_ensure.rb +35 -3
- data/lib/runtype/agent_release_aliases.rb +146 -2
- data/lib/runtype/client.rb +21 -1
- data/lib/runtype/errors.rb +14 -2
- data/lib/runtype/raw_client_timeout.rb +56 -0
- data/lib/runtype/sdk_version.rb +2 -1
- data/lib/runtype.rb +1 -0
- metadata +58 -10
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item.rb +0 -17
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item_content.rb +0 -15
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item.rb +0 -21
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_asset_ref.rb +0 -21
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_file.rb +0 -15
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_image.rb +0 -13
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_text.rb +0 -11
- data/generated/lib/runtype/conversations/types/put_v1conversations_id_request_messages_item_role.rb +0 -15
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Runtype
|
|
4
|
+
module Types
|
|
5
|
+
class ConversationTranscriptMessageToolCallsItem < Internal::Types::Model
|
|
6
|
+
field :args, -> { Internal::Types::Hash[String, Object] }, optional: true, nullable: false
|
|
7
|
+
|
|
8
|
+
field :provider_options, -> { Internal::Types::Hash[String, Object] }, optional: true, nullable: false, api_name: "providerOptions"
|
|
9
|
+
|
|
10
|
+
field :tool_call_id, -> { String }, optional: false, nullable: false, api_name: "toolCallId"
|
|
11
|
+
|
|
12
|
+
field :tool_name, -> { String }, optional: false, nullable: false, api_name: "toolName"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Runtype
|
|
4
|
+
module Types
|
|
5
|
+
class ConversationTranscriptMessageToolResultsItem < Internal::Types::Model
|
|
6
|
+
field :provider_options, -> { Internal::Types::Hash[String, Object] }, optional: true, nullable: false, api_name: "providerOptions"
|
|
7
|
+
|
|
8
|
+
field :result, -> { Object }, optional: true, nullable: false
|
|
9
|
+
|
|
10
|
+
field :tool_call_id, -> { String }, optional: false, nullable: false, api_name: "toolCallId"
|
|
11
|
+
|
|
12
|
+
field :tool_name, -> { String }, optional: false, nullable: false, api_name: "toolName"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/generated/lib/runtype.rb
CHANGED
|
@@ -42,12 +42,17 @@ require_relative "runtype/agent_aliases/types/get_v1agents_id_aliases_response"
|
|
|
42
42
|
require_relative "runtype/agent_aliases/types/get_v1agents_id_aliases_alias_response"
|
|
43
43
|
require_relative "runtype/agent_aliases/types/put_v1agents_id_aliases_alias_response"
|
|
44
44
|
require_relative "runtype/agent_aliases/types/delete_v1agents_id_aliases_alias_response"
|
|
45
|
+
require_relative "runtype/agent_aliases/types/get_v1agents_id_aliases_alias_bindings_response"
|
|
46
|
+
require_relative "runtype/agent_aliases/types/put_v1agents_id_aliases_alias_bindings_response"
|
|
47
|
+
require_relative "runtype/agent_aliases/types/delete_v1agents_id_aliases_alias_bindings_response"
|
|
45
48
|
require_relative "runtype/agent_aliases/types/post_v1agents_id_aliases_alias_rollback_response"
|
|
46
49
|
require_relative "runtype/agent_aliases/types/get_v1agents_id_deployments_response_data_item"
|
|
47
50
|
require_relative "runtype/agent_aliases/types/get_v1agents_id_deployments_response"
|
|
48
51
|
require_relative "runtype/agent_versions/types/get_v1agent_versions_agent_id_request_type"
|
|
49
52
|
require_relative "runtype/agent_versions/types/get_v1agent_versions_agent_id_response_versions_item"
|
|
50
53
|
require_relative "runtype/agent_versions/types/get_v1agent_versions_agent_id_response"
|
|
54
|
+
require_relative "runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_request_deployment_action"
|
|
55
|
+
require_relative "runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_request_deployment"
|
|
51
56
|
require_relative "runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_request_on_conflict"
|
|
52
57
|
require_relative "runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_response_last_modified_source"
|
|
53
58
|
require_relative "runtype/agent_versions/types/post_v1agent_versions_agent_id_publish_response"
|
|
@@ -593,19 +598,25 @@ require_relative "runtype/conversations/types/get_v1conversations_response_pagin
|
|
|
593
598
|
require_relative "runtype/conversations/types/get_v1conversations_response"
|
|
594
599
|
require_relative "runtype/conversations/types/post_v1conversations_response_schema_warnings_item"
|
|
595
600
|
require_relative "runtype/conversations/types/post_v1conversations_response_source"
|
|
601
|
+
require_relative "runtype/types/conversation_message_author_type"
|
|
602
|
+
require_relative "runtype/types/conversation_message_author"
|
|
603
|
+
require_relative "runtype/types/conversation_transcript_message_content_one_item_text"
|
|
604
|
+
require_relative "runtype/types/conversation_transcript_message_content_one_item_image"
|
|
605
|
+
require_relative "runtype/types/conversation_transcript_message_content_one_item_file"
|
|
606
|
+
require_relative "runtype/types/conversation_transcript_message_content_one_item_reasoning"
|
|
607
|
+
require_relative "runtype/types/conversation_transcript_message_content_one_item_asset_ref_ref_kind"
|
|
608
|
+
require_relative "runtype/types/conversation_transcript_message_content_one_item_asset_ref"
|
|
609
|
+
require_relative "runtype/types/conversation_transcript_message_content_one_item"
|
|
610
|
+
require_relative "runtype/types/conversation_transcript_message_content"
|
|
611
|
+
require_relative "runtype/types/conversation_transcript_message_role"
|
|
612
|
+
require_relative "runtype/types/conversation_transcript_message_tool_calls_item"
|
|
613
|
+
require_relative "runtype/types/conversation_transcript_message_tool_results_item"
|
|
614
|
+
require_relative "runtype/types/conversation_transcript_message"
|
|
596
615
|
require_relative "runtype/conversations/types/post_v1conversations_response"
|
|
597
616
|
require_relative "runtype/conversations/types/get_v1conversations_id_response_schema_warnings_item"
|
|
598
617
|
require_relative "runtype/conversations/types/get_v1conversations_id_response_source"
|
|
599
618
|
require_relative "runtype/conversations/types/get_v1conversations_id_response"
|
|
600
|
-
require_relative "runtype/conversations/types/
|
|
601
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_image"
|
|
602
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_file"
|
|
603
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_asset_ref_ref_kind"
|
|
604
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item_asset_ref"
|
|
605
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item_content_one_item"
|
|
606
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item_content"
|
|
607
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item_role"
|
|
608
|
-
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_item"
|
|
619
|
+
require_relative "runtype/conversations/types/put_v1conversations_id_request_messages_mode"
|
|
609
620
|
require_relative "runtype/conversations/types/put_v1conversations_id_response_schema_warnings_item"
|
|
610
621
|
require_relative "runtype/conversations/types/put_v1conversations_id_response_source"
|
|
611
622
|
require_relative "runtype/conversations/types/put_v1conversations_id_response"
|
|
@@ -715,6 +726,7 @@ require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_credential
|
|
|
715
726
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_credential_proxies_item"
|
|
716
727
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_end_user"
|
|
717
728
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_flow"
|
|
729
|
+
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_history"
|
|
718
730
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_identity_proof"
|
|
719
731
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_content_one_item_text"
|
|
720
732
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_content_one_item_image"
|
|
@@ -723,6 +735,8 @@ require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_i
|
|
|
723
735
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_content_one_item"
|
|
724
736
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_content"
|
|
725
737
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_role"
|
|
738
|
+
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_tool_calls_item"
|
|
739
|
+
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item_tool_results_item"
|
|
726
740
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_messages_item"
|
|
727
741
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_options_environment"
|
|
728
742
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_zero_options_flow_mode"
|
|
@@ -815,6 +829,7 @@ require_relative "runtype/dispatch/types/post_v1dispatch_request_one_credential_
|
|
|
815
829
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_credential_proxies_item"
|
|
816
830
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_end_user"
|
|
817
831
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_flow"
|
|
832
|
+
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_history"
|
|
818
833
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_identity_proof"
|
|
819
834
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item_content_one_item_text"
|
|
820
835
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item_content_one_item_image"
|
|
@@ -823,6 +838,8 @@ require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_it
|
|
|
823
838
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item_content_one_item"
|
|
824
839
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item_content"
|
|
825
840
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item_role"
|
|
841
|
+
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item_tool_calls_item"
|
|
842
|
+
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item_tool_results_item"
|
|
826
843
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_messages_item"
|
|
827
844
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_options_environment"
|
|
828
845
|
require_relative "runtype/dispatch/types/post_v1dispatch_request_one_options_flow_mode"
|
|
@@ -1215,6 +1232,7 @@ require_relative "runtype/model_configs/types/get_v1model_configs_response"
|
|
|
1215
1232
|
require_relative "runtype/model_configs/types/post_v1model_configs_request_provider"
|
|
1216
1233
|
require_relative "runtype/model_configs/types/post_v1model_configs_request_settings_custom_model_executor_config"
|
|
1217
1234
|
require_relative "runtype/model_configs/types/post_v1model_configs_request_settings_custom_model_executor_provider"
|
|
1235
|
+
require_relative "runtype/model_configs/types/post_v1model_configs_request_settings_custom_model_mid_conversation_system_messages"
|
|
1218
1236
|
require_relative "runtype/model_configs/types/post_v1model_configs_request_settings_custom_model_reasoning"
|
|
1219
1237
|
require_relative "runtype/model_configs/types/post_v1model_configs_request_settings_custom_model"
|
|
1220
1238
|
require_relative "runtype/model_configs/types/post_v1model_configs_request_settings"
|
|
@@ -1251,6 +1269,7 @@ require_relative "runtype/model_configs/types/get_v1model_configs_usage_response
|
|
|
1251
1269
|
require_relative "runtype/model_configs/types/get_v1model_configs_usage_response"
|
|
1252
1270
|
require_relative "runtype/model_configs/types/put_v1model_configs_id_request_settings_custom_model_executor_config"
|
|
1253
1271
|
require_relative "runtype/model_configs/types/put_v1model_configs_id_request_settings_custom_model_executor_provider"
|
|
1272
|
+
require_relative "runtype/model_configs/types/put_v1model_configs_id_request_settings_custom_model_mid_conversation_system_messages"
|
|
1254
1273
|
require_relative "runtype/model_configs/types/put_v1model_configs_id_request_settings_custom_model_reasoning"
|
|
1255
1274
|
require_relative "runtype/model_configs/types/put_v1model_configs_id_request_settings_custom_model"
|
|
1256
1275
|
require_relative "runtype/model_configs/types/put_v1model_configs_id_request_settings"
|
|
@@ -1342,6 +1361,24 @@ require_relative "runtype/products/types/put_v1products_id_request_spec_tech_sta
|
|
|
1342
1361
|
require_relative "runtype/products/types/put_v1products_id_request_spec"
|
|
1343
1362
|
require_relative "runtype/products/types/put_v1products_id_response"
|
|
1344
1363
|
require_relative "runtype/products/types/delete_v1products_id_response"
|
|
1364
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_agent_target_resolution"
|
|
1365
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_agent_version"
|
|
1366
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_execution_mode"
|
|
1367
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_notification_mode"
|
|
1368
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_pending_approval"
|
|
1369
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_status"
|
|
1370
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item"
|
|
1371
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item_error"
|
|
1372
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_agents_item"
|
|
1373
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item_agent_mode"
|
|
1374
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item_available_fields_metadata_schema"
|
|
1375
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item_available_fields"
|
|
1376
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_data_item"
|
|
1377
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_error"
|
|
1378
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_surfaces_item_source"
|
|
1379
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data_surfaces_item"
|
|
1380
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response_data"
|
|
1381
|
+
require_relative "runtype/products/types/get_v1products_id_activity_response"
|
|
1345
1382
|
require_relative "runtype/products/types/post_v1products_id_capabilities_response"
|
|
1346
1383
|
require_relative "runtype/products/types/put_v1products_id_capabilities_capability_id_response"
|
|
1347
1384
|
require_relative "runtype/products/types/delete_v1products_id_capabilities_capability_id_response"
|
|
@@ -1564,6 +1601,7 @@ require_relative "runtype/provider_keys/types/patch_v1provider_keys_id_response_
|
|
|
1564
1601
|
require_relative "runtype/provider_keys/types/patch_v1provider_keys_id_response"
|
|
1565
1602
|
require_relative "runtype/provider_keys/types/post_v1provider_keys_id_discover_models_response_models_item"
|
|
1566
1603
|
require_relative "runtype/provider_keys/types/post_v1provider_keys_id_discover_models_response"
|
|
1604
|
+
require_relative "runtype/provider_keys/types/post_v1provider_keys_id_sync_models_request_models_item_mid_conversation_system_messages"
|
|
1567
1605
|
require_relative "runtype/provider_keys/types/post_v1provider_keys_id_sync_models_request_models_item_reasoning"
|
|
1568
1606
|
require_relative "runtype/provider_keys/types/post_v1provider_keys_id_sync_models_request_models_item"
|
|
1569
1607
|
require_relative "runtype/provider_keys/types/post_v1provider_keys_id_sync_models_response"
|
|
@@ -1916,16 +1954,17 @@ require_relative "runtype/types/conflict_error_body_last_modified_source"
|
|
|
1916
1954
|
require_relative "runtype/types/conflict_error_body_organization_model_config_migrated"
|
|
1917
1955
|
require_relative "runtype/types/conflict_error_body_organization_connection_migrated"
|
|
1918
1956
|
require_relative "runtype/types/conflict_error_body"
|
|
1919
|
-
require_relative "runtype/types/not_found_error_body_code"
|
|
1920
|
-
require_relative "runtype/types/not_found_error_body"
|
|
1921
1957
|
require_relative "runtype/types/precondition_failed_error_body_code"
|
|
1922
1958
|
require_relative "runtype/types/error_details_item"
|
|
1923
1959
|
require_relative "runtype/types/error"
|
|
1924
1960
|
require_relative "runtype/types/precondition_failed_error_body"
|
|
1961
|
+
require_relative "runtype/types/not_found_error_body_code"
|
|
1962
|
+
require_relative "runtype/types/not_found_error_body"
|
|
1925
1963
|
require_relative "runtype/types/unprocessable_entity_error_body_code"
|
|
1926
1964
|
require_relative "runtype/types/unprocessable_entity_error_body"
|
|
1927
|
-
require_relative "runtype/types/conflict_error_body_organization_model_config_needs_configuration"
|
|
1928
1965
|
require_relative "runtype/types/bad_request_error_body_code"
|
|
1966
|
+
require_relative "runtype/types/conflict_error_body_candidate_count_code"
|
|
1967
|
+
require_relative "runtype/types/conflict_error_body_candidate_count"
|
|
1929
1968
|
require_relative "runtype/types/service_unavailable_error_body_code"
|
|
1930
1969
|
require_relative "runtype/types/service_unavailable_error_body"
|
|
1931
1970
|
require_relative "runtype/types/forbidden_error_body_code"
|
|
@@ -1947,6 +1986,7 @@ require_relative "runtype/types/payment_required_error_body"
|
|
|
1947
1986
|
require_relative "runtype/types/forbidden_error_body_error"
|
|
1948
1987
|
require_relative "runtype/types/not_implemented_error_body_code"
|
|
1949
1988
|
require_relative "runtype/types/not_implemented_error_body"
|
|
1989
|
+
require_relative "runtype/types/conflict_error_body_organization_model_config_needs_configuration"
|
|
1950
1990
|
require_relative "runtype/types/bad_request_error_body_error"
|
|
1951
1991
|
require_relative "runtype/types/internal_server_error_body_error"
|
|
1952
1992
|
require_relative "runtype/types/internal_server_error_body_errors_item"
|
|
@@ -2121,6 +2161,9 @@ require_relative "runtype/types/client_input_delivery_receipt"
|
|
|
2121
2161
|
require_relative "runtype/types/conversation_busy_error_code"
|
|
2122
2162
|
require_relative "runtype/types/conversation_busy_error_phase"
|
|
2123
2163
|
require_relative "runtype/types/conversation_busy_error"
|
|
2164
|
+
require_relative "runtype/types/conversation_modified_error_code"
|
|
2165
|
+
require_relative "runtype/types/conversation_modified_error"
|
|
2166
|
+
require_relative "runtype/types/conversation_source"
|
|
2124
2167
|
require_relative "runtype/types/daily_usage_response_daily_execution_cap_reason"
|
|
2125
2168
|
require_relative "runtype/types/daily_usage_response_daily"
|
|
2126
2169
|
require_relative "runtype/types/daily_usage_response_monthly_execution_cap_reason"
|
|
@@ -2454,6 +2497,9 @@ require_relative "runtype/agent_aliases/types/get_v1agents_id_aliases_request"
|
|
|
2454
2497
|
require_relative "runtype/agent_aliases/types/get_v1agents_id_aliases_alias_request"
|
|
2455
2498
|
require_relative "runtype/agent_aliases/types/put_v1agents_id_aliases_alias_request"
|
|
2456
2499
|
require_relative "runtype/agent_aliases/types/delete_v1agents_id_aliases_alias_request"
|
|
2500
|
+
require_relative "runtype/agent_aliases/types/get_v1agents_id_aliases_alias_bindings_request"
|
|
2501
|
+
require_relative "runtype/agent_aliases/types/put_v1agents_id_aliases_alias_bindings_request"
|
|
2502
|
+
require_relative "runtype/agent_aliases/types/delete_v1agents_id_aliases_alias_bindings_request"
|
|
2457
2503
|
require_relative "runtype/agent_aliases/types/post_v1agents_id_aliases_alias_rollback_request"
|
|
2458
2504
|
require_relative "runtype/agent_aliases/types/get_v1agents_id_deployments_request"
|
|
2459
2505
|
require_relative "runtype/agent_versions/client"
|
|
@@ -2728,6 +2774,7 @@ require_relative "runtype/products/types/get_v1products_pull_fpo_request"
|
|
|
2728
2774
|
require_relative "runtype/products/types/get_v1products_id_request"
|
|
2729
2775
|
require_relative "runtype/products/types/put_v1products_id_request"
|
|
2730
2776
|
require_relative "runtype/products/types/delete_v1products_id_request"
|
|
2777
|
+
require_relative "runtype/products/types/get_v1products_id_activity_request"
|
|
2731
2778
|
require_relative "runtype/products/types/post_v1products_id_capabilities_request"
|
|
2732
2779
|
require_relative "runtype/products/types/put_v1products_id_capabilities_capability_id_request"
|
|
2733
2780
|
require_relative "runtype/products/types/delete_v1products_id_capabilities_capability_id_request"
|
data/lib/runtype/agent_ensure.rb
CHANGED
|
@@ -16,6 +16,10 @@ module Runtype
|
|
|
16
16
|
"use deploy: { alias: \"live\" } instead of release: \"publish\", " \
|
|
17
17
|
"and omit both to save without activating."
|
|
18
18
|
|
|
19
|
+
# The keys a `version:` hash may carry, mirroring the API's strict
|
|
20
|
+
# `EnsureVersionMetadata` schema (apps/api/src/lib/ensure-version-metadata.ts).
|
|
21
|
+
VERSION_METADATA_KEYS = %i[label notes].freeze
|
|
22
|
+
|
|
19
23
|
# Idempotently makes the platform's definition of this agent match
|
|
20
24
|
# `definition`. Identity is the agent name within the API key's account
|
|
21
25
|
# scope. Hash-first: probes with the local content hash and only ships the
|
|
@@ -35,6 +39,9 @@ module Runtype
|
|
|
35
39
|
# both `release:` and `deploy:` to save without activating.
|
|
36
40
|
# @param expected_remote_hash [String, nil] binds a dry run to its apply:
|
|
37
41
|
# the write proceeds only if the remote still hashes to this value.
|
|
42
|
+
# @param version [Hash, nil] provenance recorded on the version row this
|
|
43
|
+
# converge appends, e.g. `{ label: "a1b2c3d", notes: "CI run 4821" }`.
|
|
44
|
+
# Omit to keep the default `"sdk-ensure"` label and the server's notes.
|
|
38
45
|
# @param request_options [Hash] see {Runtype::Client#dispatch}.
|
|
39
46
|
# @return [Hash] `{"result" => "unchanged"|"created"|"updated", "agentId",
|
|
40
47
|
# "versionId", "contentHash"}`, or for a dry run `{"result" => "plan",
|
|
@@ -44,9 +51,10 @@ module Runtype
|
|
|
44
51
|
# or `remote_changed`).
|
|
45
52
|
# @raise [Runtype::DriftError] with `expect_no_changes:` when the plan is
|
|
46
53
|
# not `"none"`.
|
|
47
|
-
# @raise [ArgumentError] when both `release:` and `deploy:` are given
|
|
54
|
+
# @raise [ArgumentError] when both `release:` and `deploy:` are given, or
|
|
55
|
+
# when `version:` carries a key other than `label:` and `notes:`.
|
|
48
56
|
def ensure_agent(definition, dry_run: false, expect_no_changes: false, on_conflict: nil, release: nil,
|
|
49
|
-
deploy: nil, expected_remote_hash: nil, request_options: {})
|
|
57
|
+
deploy: nil, expected_remote_hash: nil, version: nil, request_options: {})
|
|
50
58
|
raise ArgumentError, RELEASE_DEPLOY_CONFLICT_MESSAGE if release && deploy
|
|
51
59
|
|
|
52
60
|
definition = Runtype::AgentDefinition.from(definition)
|
|
@@ -54,7 +62,8 @@ module Runtype
|
|
|
54
62
|
onConflict: on_conflict&.to_s,
|
|
55
63
|
release: release&.to_s,
|
|
56
64
|
deploy: deploy_intent(deploy),
|
|
57
|
-
expectedRemoteHash: expected_remote_hash
|
|
65
|
+
expectedRemoteHash: expected_remote_hash,
|
|
66
|
+
version: version_metadata(version)
|
|
58
67
|
}.compact
|
|
59
68
|
|
|
60
69
|
if dry_run || expect_no_changes
|
|
@@ -115,6 +124,29 @@ module Runtype
|
|
|
115
124
|
{ alias: name.to_s }
|
|
116
125
|
end
|
|
117
126
|
|
|
127
|
+
# Normalizes `version:` into the wire shape. Keys may be Symbols or Strings;
|
|
128
|
+
# an unknown key raises here rather than reaching the server's strict 400.
|
|
129
|
+
# A hash whose values are all nil is treated as omitted, so
|
|
130
|
+
# `version: { label: ENV["GIT_SHA"] }` outside CI still saves — the same
|
|
131
|
+
# reading the API gives an empty label, which falls back to `"sdk-ensure"`.
|
|
132
|
+
#
|
|
133
|
+
# @param version [Hash, nil]
|
|
134
|
+
# @return [Hash, nil] `{ label:, notes: }`, or nil when nothing was asked.
|
|
135
|
+
# @raise [ArgumentError] on a non-Hash or an unrecognized key.
|
|
136
|
+
def version_metadata(version)
|
|
137
|
+
return nil if version.nil?
|
|
138
|
+
raise ArgumentError, "version: needs a Hash, e.g. version: { label: \"a1b2c3d\" }." unless version.is_a?(Hash)
|
|
139
|
+
|
|
140
|
+
metadata = version.each_with_object({}) do |(key, value), acc|
|
|
141
|
+
name = key.to_sym
|
|
142
|
+
raise ArgumentError, "version: accepts label: and notes:, not #{key.inspect}." unless
|
|
143
|
+
VERSION_METADATA_KEYS.include?(name)
|
|
144
|
+
|
|
145
|
+
acc[name] = value.to_s unless value.nil?
|
|
146
|
+
end
|
|
147
|
+
metadata.empty? ? nil : metadata
|
|
148
|
+
end
|
|
149
|
+
|
|
118
150
|
# @return [Hash{String => String}] `name:localHash` => server hash, so a
|
|
119
151
|
# hot process pays the probe once per definition.
|
|
120
152
|
def ensure_memo
|
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "openssl"
|
|
4
|
+
require "socket"
|
|
5
|
+
require "timeout"
|
|
6
|
+
|
|
3
7
|
module Runtype
|
|
4
8
|
# Release aliases and deployment receipts on {Runtype::Client}. An agent runs
|
|
5
9
|
# an immutable version; a named mutable alias (`live`, `pr-482`) selects which
|
|
6
10
|
# one, and every activation appends a deployment receipt. Protocol:
|
|
7
11
|
# `docs/adr/0025-agent-release-aliases.md`.
|
|
8
12
|
module AgentReleaseAliases
|
|
13
|
+
# The fields a `promotion:` hash may carry, mirroring the API's strict
|
|
14
|
+
# `AgentDeploymentPromotion` schema (apps/api/src/routes/agents/alias-routes.ts)
|
|
15
|
+
# and the generated {Runtype::Types::AgentDeploymentPromotion} model.
|
|
16
|
+
PROMOTION_FIELDS = %i[source_agent_id source_version_id source_content_hash source_commit].freeze
|
|
17
|
+
|
|
18
|
+
# The failures one {#archive_agent_alias_everywhere} row may absorb: the
|
|
19
|
+
# curated API tree, plus the transport exceptions Net::HTTP raises below
|
|
20
|
+
# {Runtype.wrap_errors} (the same set {Runtype::Streaming::Connection}
|
|
21
|
+
# translates). Everything else is an SDK defect rather than a per-agent
|
|
22
|
+
# outcome and aborts the sweep loudly instead of becoming a failure row.
|
|
23
|
+
SWEEP_ISOLATED_ERRORS = [
|
|
24
|
+
Runtype::Error, Timeout::Error, OpenSSL::SSL::SSLError, SocketError, SystemCallError, IOError
|
|
25
|
+
].freeze
|
|
26
|
+
|
|
9
27
|
# The named pointers of one agent: `live` first, then the preview aliases by
|
|
10
28
|
# name. Archived aliases are omitted unless asked for. Omitting `limit:`
|
|
11
29
|
# returns every pointer; supplying it pages through the same order.
|
|
@@ -52,13 +70,20 @@ module Runtype
|
|
|
52
70
|
# sent as `If-Match`; required when moving an existing `live` pointer.
|
|
53
71
|
# @param idempotency_key [String, nil] replays the same activation safely.
|
|
54
72
|
# @param reason [String, nil] recorded on the receipt.
|
|
73
|
+
# @param promotion [Hash, Runtype::Types::AgentDeploymentPromotion, nil] the
|
|
74
|
+
# source-organization ids and hashes a cross-organization promotion came
|
|
75
|
+
# from, e.g. `{ source_version_id: "agv_9", source_commit: sha }`, linked
|
|
76
|
+
# on the receipt. Provenance only: it authorizes nothing, and the
|
|
77
|
+
# activating credentials alone decide what the activation may do.
|
|
55
78
|
# @param request_options [Hash]
|
|
56
79
|
# @return [Runtype::AgentAliases::Types::PutV1AgentsIDAliasesAliasResponse]
|
|
80
|
+
# @raise [ArgumentError] when `promotion:` carries an unrecognized key.
|
|
57
81
|
def activate_agent_alias(agent_id, alias_name, version_id:, revision: nil, idempotency_key: nil, reason: nil,
|
|
58
|
-
request_options: {})
|
|
82
|
+
promotion: nil, request_options: {})
|
|
59
83
|
params = {
|
|
60
84
|
id: agent_id, alias_: alias_name, version_id: version_id,
|
|
61
|
-
if_match: revision, idempotency_key: idempotency_key, reason: reason
|
|
85
|
+
if_match: revision, idempotency_key: idempotency_key, reason: reason,
|
|
86
|
+
promotion: promotion_provenance(promotion)
|
|
62
87
|
}.compact
|
|
63
88
|
Runtype.wrap_errors do
|
|
64
89
|
release_alias_client.activate_a_version_at_a_release_alias(request_options: request_options, **params)
|
|
@@ -127,6 +152,59 @@ module Runtype
|
|
|
127
152
|
end
|
|
128
153
|
end
|
|
129
154
|
|
|
155
|
+
# Every agent in the caller's organization carrying a pointer with this
|
|
156
|
+
# name, each with the revision to quote back as `If-Match`. This is the read
|
|
157
|
+
# a "pull request closed" cleanup makes before archiving each pointer; the
|
|
158
|
+
# per-agent list would need every agent id first. Unpaginated, and `live` is
|
|
159
|
+
# readable here like any other name.
|
|
160
|
+
#
|
|
161
|
+
# @param alias_name [String] e.g. `"pr-482"`.
|
|
162
|
+
# @param include_archived [Boolean]
|
|
163
|
+
# @param request_options [Hash]
|
|
164
|
+
# @return [Runtype::AgentAliases::Types::GetV1AgentAliasesResponse]
|
|
165
|
+
def list_agent_aliases_by_name(alias_name, include_archived: false, request_options: {})
|
|
166
|
+
params = { alias_: alias_name }
|
|
167
|
+
params[:include_archived] = "true" if include_archived
|
|
168
|
+
Runtype.wrap_errors do
|
|
169
|
+
release_alias_client.list_release_aliases_with_one_name_across_the_organization(
|
|
170
|
+
request_options: request_options, **params
|
|
171
|
+
)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Archives this pointer on every agent in the organization that carries it,
|
|
176
|
+
# each under the revision just read, so a concurrent deploy answers 412
|
|
177
|
+
# instead of racing. An API refusal or transport failure on one agent is
|
|
178
|
+
# reported in `"failed"` and the sweep continues; any other exception is an
|
|
179
|
+
# SDK defect and propagates, so a broken response contract never reads as a
|
|
180
|
+
# completed sweep. Only active pointers are listed, so a second run archives
|
|
181
|
+
# nothing.
|
|
182
|
+
#
|
|
183
|
+
# @param alias_name [String]
|
|
184
|
+
# @param dry_run [Boolean] report what would be archived and archive nothing.
|
|
185
|
+
# @param request_options [Hash]
|
|
186
|
+
# @return [Hash] `{"alias", "archived" => [{"agentId", "agentName",
|
|
187
|
+
# "revision", "receiptId"}], "failed" => [{"agentId", "agentName",
|
|
188
|
+
# "error", "code"?}]}`, or for a dry run `{"alias", "dryRun" => true,
|
|
189
|
+
# "wouldArchive" => [<row>]}` carrying the listed rows unchanged.
|
|
190
|
+
def archive_agent_alias_everywhere(alias_name, dry_run: false, request_options: {})
|
|
191
|
+
rows = list_agent_aliases_by_name(alias_name, request_options: request_options).data
|
|
192
|
+
return { "alias" => alias_name, "dryRun" => true, "wouldArchive" => rows } if dry_run
|
|
193
|
+
|
|
194
|
+
rows.each_with_object({ "alias" => alias_name, "archived" => [], "failed" => [] }) do |row, sweep|
|
|
195
|
+
sweep["archived"] << archive_one_everywhere(row, alias_name, request_options)
|
|
196
|
+
# Wider than Runtype::Error: a DNS, TLS or connection-reset failure is
|
|
197
|
+
# raised by Net::HTTP and never reaches Runtype.wrap_errors, so rescuing
|
|
198
|
+
# the curated tree alone would abort the sweep on one bad row and leave the
|
|
199
|
+
# remaining pointers active — the opposite of what this method promises.
|
|
200
|
+
rescue *SWEEP_ISOLATED_ERRORS => e
|
|
201
|
+
sweep["failed"] << {
|
|
202
|
+
"agentId" => row.agent_id, "agentName" => row.agent_name,
|
|
203
|
+
"error" => e.message, "code" => alias_failure_code(e)
|
|
204
|
+
}.compact
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
130
208
|
private
|
|
131
209
|
|
|
132
210
|
# @return [Runtype::AgentAliases::Client] the generated sub-client these
|
|
@@ -134,5 +212,71 @@ module Runtype
|
|
|
134
212
|
def release_alias_client
|
|
135
213
|
api.agent_aliases
|
|
136
214
|
end
|
|
215
|
+
|
|
216
|
+
# One row of an {#archive_agent_alias_everywhere} sweep. The revision and
|
|
217
|
+
# receipt reported are the archive response's, not the listed row's.
|
|
218
|
+
#
|
|
219
|
+
# @param row [Runtype::AgentAliases::Types::GetV1AgentAliasesResponseDataItem]
|
|
220
|
+
# @param alias_name [String]
|
|
221
|
+
# @param request_options [Hash]
|
|
222
|
+
# @return [Hash]
|
|
223
|
+
def archive_one_everywhere(row, alias_name, request_options)
|
|
224
|
+
archived = archive_agent_alias(
|
|
225
|
+
row.agent_id, alias_name, revision: row.revision.to_s, request_options: request_options
|
|
226
|
+
)
|
|
227
|
+
{
|
|
228
|
+
"agentId" => row.agent_id, "agentName" => row.agent_name,
|
|
229
|
+
"revision" => archived.revision, "receiptId" => archived.receipt_id
|
|
230
|
+
}
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# The alias plane's refusal code for a failed sweep row, matching the
|
|
234
|
+
# TypeScript helper's `code` field. 428 carries no code of its own, so the
|
|
235
|
+
# one the typed error uses is supplied here.
|
|
236
|
+
#
|
|
237
|
+
# @param error [Runtype::Error]
|
|
238
|
+
# @return [String, nil]
|
|
239
|
+
def alias_failure_code(error)
|
|
240
|
+
body = error.respond_to?(:body) ? error.body : nil
|
|
241
|
+
code = body["code"] if body.is_a?(Hash)
|
|
242
|
+
return code.to_s if code
|
|
243
|
+
|
|
244
|
+
"alias_revision_required" if error.respond_to?(:status_code) && error.status_code == 428
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Normalizes `promotion:` into the wire shape. A generated
|
|
248
|
+
# {Runtype::Types::AgentDeploymentPromotion} passes through; a Hash may spell
|
|
249
|
+
# its keys either way, and an unknown key raises here rather than reaching
|
|
250
|
+
# the server's strict 400 — or, worse, being absorbed as an extra field on
|
|
251
|
+
# the generated request model. An all-nil hash is treated as omitted, the
|
|
252
|
+
# same reading the API gives an empty promotion object.
|
|
253
|
+
#
|
|
254
|
+
# @param promotion [Hash, Runtype::Types::AgentDeploymentPromotion, nil]
|
|
255
|
+
# @return [Hash, Runtype::Types::AgentDeploymentPromotion, nil]
|
|
256
|
+
# @raise [ArgumentError] on a non-Hash or an unrecognized key.
|
|
257
|
+
def promotion_provenance(promotion)
|
|
258
|
+
return nil if promotion.nil?
|
|
259
|
+
return promotion if promotion.is_a?(Runtype::Types::AgentDeploymentPromotion)
|
|
260
|
+
|
|
261
|
+
unless promotion.is_a?(Hash)
|
|
262
|
+
raise ArgumentError,
|
|
263
|
+
"promotion: needs a Hash of source ids, e.g. promotion: { source_version_id: \"agv_9\" }."
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
provenance = promotion.each_with_object({}) do |(key, value), acc|
|
|
267
|
+
field = promotion_field(key)
|
|
268
|
+
raise ArgumentError, "promotion: accepts #{PROMOTION_FIELDS.join(", ")}, not #{key.inspect}." unless field
|
|
269
|
+
|
|
270
|
+
acc[field] = value.to_s unless value.nil?
|
|
271
|
+
end
|
|
272
|
+
provenance.empty? ? nil : provenance
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# @param key [String, Symbol] either spelling of a promotion field.
|
|
276
|
+
# @return [Symbol, nil] the snake_case field name, or nil when unrecognized.
|
|
277
|
+
def promotion_field(key)
|
|
278
|
+
field = key.to_s.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase.to_sym
|
|
279
|
+
PROMOTION_FIELDS.include?(field) ? field : nil
|
|
280
|
+
end
|
|
137
281
|
end
|
|
138
282
|
end
|
data/lib/runtype/client.rb
CHANGED
|
@@ -53,7 +53,10 @@ module Runtype
|
|
|
53
53
|
|
|
54
54
|
# @param api_key [String, nil] defaults to `RUNTYPE_API_KEY`.
|
|
55
55
|
# @param base_url [String] defaults to `RUNTYPE_BASE_URL`, then production.
|
|
56
|
-
# @param timeout [Numeric, nil] per-operation socket timeout in seconds
|
|
56
|
+
# @param timeout [Numeric, nil] per-operation socket timeout in seconds,
|
|
57
|
+
# defaulting to {DEFAULT_TIMEOUT}. Governs the dispatch and streaming
|
|
58
|
+
# paths and every generated resource call alike; a single call overrides
|
|
59
|
+
# it with `request_options: { timeout_in_seconds: n }`.
|
|
57
60
|
# @param max_retries [Integer] retries for generated resource calls. The
|
|
58
61
|
# dispatch paths never retry: replaying an execution would run it twice.
|
|
59
62
|
# @raise [Runtype::AuthenticationError] when no API key is available.
|
|
@@ -79,6 +82,8 @@ module Runtype
|
|
|
79
82
|
authorization: bearer_token,
|
|
80
83
|
max_retries: max_retries
|
|
81
84
|
)
|
|
85
|
+
# WORKAROUND(fern ruby generator): BaseClient takes no timeout, so seed the transport it just built.
|
|
86
|
+
Runtype::RawClientTimeout.apply(generated_raw_client, timeout: @timeout)
|
|
82
87
|
end
|
|
83
88
|
|
|
84
89
|
# Executes a flow or agent and waits for the complete JSON response.
|
|
@@ -193,6 +198,21 @@ module Runtype
|
|
|
193
198
|
|
|
194
199
|
private
|
|
195
200
|
|
|
201
|
+
# The transport {#api} shares with every resource sub-client it builds.
|
|
202
|
+
# Read once at construction, before any sub-client has memoized it.
|
|
203
|
+
#
|
|
204
|
+
# @return [Runtype::Internal::Http::RawClient]
|
|
205
|
+
# @raise [Runtype::Error] when the generated core no longer holds one, which
|
|
206
|
+
# means the timeout can no longer be applied to generated calls.
|
|
207
|
+
def generated_raw_client
|
|
208
|
+
raw = @api.instance_variable_get(:@raw_client)
|
|
209
|
+
return raw if raw.is_a?(Runtype::Internal::Http::RawClient)
|
|
210
|
+
|
|
211
|
+
raise Runtype::Error,
|
|
212
|
+
"Runtype::BaseClient no longer exposes @raw_client, so Runtype::Client cannot apply its timeout " \
|
|
213
|
+
"to generated calls. Rewire Runtype::RawClientTimeout against the generated core's new shape."
|
|
214
|
+
end
|
|
215
|
+
|
|
196
216
|
# @return [String]
|
|
197
217
|
def bearer_token
|
|
198
218
|
"Bearer #{@api_key}"
|
data/lib/runtype/errors.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "timeout"
|
|
4
|
+
|
|
3
5
|
module Runtype
|
|
4
6
|
# Base class for every error the overlay raises. Rescue this to catch all of
|
|
5
7
|
# them regardless of which generated resource produced the failure.
|
|
@@ -28,12 +30,20 @@ module Runtype
|
|
|
28
30
|
# Translates a Fern-generated error into the curated equivalent. Errors that
|
|
29
31
|
# are not generated API errors are returned unchanged.
|
|
30
32
|
#
|
|
33
|
+
# A socket timeout is translated too: the generated methods rescue
|
|
34
|
+
# `Net::HTTPRequestTimeout`, a 408 response class no socket ever raises, so
|
|
35
|
+
# `Net::OpenTimeout`, `Net::ReadTimeout` and `Net::WriteTimeout` reach here
|
|
36
|
+
# untranslated. They all descend from `Timeout::Error`, so one clause covers
|
|
37
|
+
# connect, read and write, matching {Runtype::Streaming::Connection}.
|
|
38
|
+
#
|
|
31
39
|
# @param error [Exception]
|
|
32
40
|
# @return [Exception]
|
|
33
41
|
def self.from_generated(error)
|
|
34
42
|
case error
|
|
35
43
|
when Runtype::Errors::TimeoutError
|
|
36
44
|
APITimeoutError.new("Request timed out")
|
|
45
|
+
when ::Timeout::Error
|
|
46
|
+
APITimeoutError.new("Request timed out: #{error.message}")
|
|
37
47
|
when Runtype::Errors::ResponseError
|
|
38
48
|
from_response(status: error.code, body: error.message)
|
|
39
49
|
when Runtype::Errors::ApiError
|
|
@@ -235,7 +245,9 @@ module Runtype
|
|
|
235
245
|
class APIConnectionError < Error; end
|
|
236
246
|
|
|
237
247
|
# Runs a block, re-raising Fern-generated errors as their curated equivalents
|
|
238
|
-
# so callers keep one stable rescue surface across regenerations.
|
|
248
|
+
# so callers keep one stable rescue surface across regenerations. A socket
|
|
249
|
+
# timeout raised inside a generated call is curated here too, as
|
|
250
|
+
# {Runtype::APITimeoutError}.
|
|
239
251
|
#
|
|
240
252
|
# @example
|
|
241
253
|
# Runtype.wrap_errors { client.flows.list_flows }
|
|
@@ -243,7 +255,7 @@ module Runtype
|
|
|
243
255
|
# @return [Object] whatever the block returns.
|
|
244
256
|
def self.wrap_errors
|
|
245
257
|
yield
|
|
246
|
-
rescue Runtype::Errors::ApiError => e
|
|
258
|
+
rescue Runtype::Errors::ApiError, ::Timeout::Error => e
|
|
247
259
|
raise Runtype::Error.from_generated(e)
|
|
248
260
|
end
|
|
249
261
|
end
|