runtype 0.3.0 → 0.11.1
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 +919 -0
- data/README.md +118 -12
- 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.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_feedback/client.rb +58 -0
- data/generated/lib/runtype/agent_feedback/types/post_v1agent_feedback_request.rb +19 -0
- data/generated/lib/runtype/agent_feedback/types/post_v1agent_feedback_request_category.rb +19 -0
- data/generated/lib/runtype/agent_feedback/types/post_v1agent_feedback_response.rb +13 -0
- data/generated/lib/runtype/agent_feedback/types/post_v1agent_feedback_response_status.rb +13 -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/agents/client.rb +127 -14
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config.rb +59 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_advisor.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_artifacts.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_artifacts_types_item.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_context_management.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_context_management_compaction.rb +23 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_context_management_compaction_strategy.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_context_management_tool_results.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_context_management_tool_results_prune_mode.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_durability.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_durability_forced.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling_fallbacks_item.rb +19 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling_fallbacks_item_message.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling_fallbacks_item_model.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling_fallbacks_item_retry.rb +11 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling_on_error.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling_triggers_item.rb +11 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_error_handling_triggers_item_type.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_logging_policy.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_loop_config.rb +19 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_memory.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_memory_pointer_scope.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_pii_redaction.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_reasoning.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_reasoning_budget_tokens.rb +25 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_reasoning_budget_tokens_reasoning_effort.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_reasoning_budget_tokens_reasoning_summary.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox.rb +29 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_coding_agents_item.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_instance_type.rb +16 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_network_access.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_network_access_allow.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_network_access_allow_profile.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_network_access_zero.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_persistence.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_provider.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_sleep_after.rb +16 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_sandbox_ttl.rb +16 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_state.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_state_merge_strategy.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_state_predict_state_item.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_temporal.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tenancy_strategy.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tenancy_strategy_assurance_floor.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tenancy_strategy_assurance_floor_end_user.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tenancy_strategy_assurance_floor_tenant.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tenancy_strategy_preset.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools.rb +31 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_approval.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_approval_choices.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_approval_require.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_code_mode_config.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_mcp_servers_item.rb +25 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_mcp_servers_item_auth.rb +21 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_mcp_servers_item_auth_type.rb +18 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_mcp_servers_item_transport.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_per_tool_limits_value.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_runtime_tools_item.rb +23 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_runtime_tools_item_tool_type.rb +19 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_subagent_config.rb +33 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_subagent_config_default_execution_mode.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_subagent_config_default_notify.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_subagent_config_execution_modes_item.rb +14 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_tool_call_strategy.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_tools_tool_search.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice.rb +25 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_eleven_labs.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_endpointing.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_endpointing_strategy.rb +16 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_interruption_mode.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_speech.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_speech_mode.rb +15 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_speech_synthesizer.rb +17 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_speech_synthesizer_settings.rb +13 -0
- data/generated/lib/runtype/agents/types/create_voice_agent_draft_request_config_voice_speech_transcriber.rb +13 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_execution_id_response.rb +6 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_execution_id_response_execution_lane.rb +14 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_execution_id_response_external_telemetry.rb +17 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_execution_id_response_external_telemetry_completeness.rb +16 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_execution_id_response_external_telemetry_source.rb +13 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_execution_id_tool_calls_response_tool_calls_item.rb +14 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_request.rb +2 -0
- data/generated/lib/runtype/agents/types/{get_v1agents_id_export_runtime_response_agent_type.rb → get_v1agents_id_executions_request_agent_source.rb} +4 -2
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_response_data_item.rb +2 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_executions_response_data_item_otel_producer.rb +20 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_export_runtime_request.rb +6 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_export_runtime_request_format.rb +14 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_request.rb +13 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_response.rb +13 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_response_data.rb +27 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_response_data_cost.rb +11 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_response_data_tokens.rb +13 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_response_data_tools_item.rb +17 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_response_data_versions_item.rb +19 -0
- data/generated/lib/runtype/agents/types/get_v1agents_id_run_insights_response_data_window.rb +15 -0
- data/generated/lib/runtype/agents/types/post_v1agents_ensure_request.rb +4 -0
- data/generated/lib/runtype/agents/types/post_v1agents_ensure_request_definition_config_sandbox.rb +2 -0
- data/generated/lib/runtype/agents/types/post_v1agents_ensure_request_definition_config_sandbox_coding_agents_item.rb +13 -0
- data/generated/lib/runtype/agents/types/post_v1agents_ensure_request_definition_config_tools.rb +2 -0
- data/generated/lib/runtype/agents/types/post_v1agents_ensure_request_definition_config_tools_runtime_tools_item.rb +4 -0
- data/generated/lib/runtype/agents/types/post_v1agents_ensure_request_definition_config_tools_tool_search.rb +15 -0
- data/generated/lib/runtype/agents/types/post_v1agents_id_execute_request_x_runtype_concurrency.rb +1 -1
- data/generated/lib/runtype/agents/types/post_v1agents_request_claude_managed_config.rb +2 -0
- data/generated/lib/runtype/agents/types/post_v1agents_request_config_sandbox.rb +2 -0
- data/generated/lib/runtype/agents/types/post_v1agents_request_config_sandbox_coding_agents_item.rb +13 -0
- data/generated/lib/runtype/agents/types/post_v1agents_request_config_tools.rb +2 -0
- data/generated/lib/runtype/agents/types/post_v1agents_request_config_tools_runtime_tools_item.rb +4 -0
- data/generated/lib/runtype/agents/types/post_v1agents_request_config_tools_tool_search.rb +15 -0
- data/generated/lib/runtype/agents/types/put_v1agents_id_request_claude_managed_config.rb +2 -0
- data/generated/lib/runtype/agents/types/put_v1agents_id_request_config_sandbox.rb +2 -0
- data/generated/lib/runtype/agents/types/put_v1agents_id_request_config_sandbox_coding_agents_item.rb +13 -0
- data/generated/lib/runtype/agents/types/put_v1agents_id_request_config_tools.rb +2 -0
- data/generated/lib/runtype/agents/types/put_v1agents_id_request_config_tools_runtime_tools_item.rb +4 -0
- data/generated/lib/runtype/agents/types/put_v1agents_id_request_config_tools_tool_search.rb +15 -0
- data/generated/lib/runtype/agents/types/put_v1agents_id_response.rb +2 -0
- data/generated/lib/runtype/client.rb +25 -5
- data/generated/lib/runtype/client_runtime/client.rb +57 -6
- data/generated/lib/runtype/client_runtime/types/post_v1client_agents_agent_id_voice_prewarm_request.rb +15 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_chat_request_submit_mode.rb +1 -1
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_session_id.rb +1 -1
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_session_id_identity_proof.rb +19 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_session_id_identity_proof_provider.rb +17 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_three.rb +1 -1
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_three_identity_proof.rb +19 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_three_identity_proof_provider.rb +17 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_two.rb +1 -1
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_two_identity_proof.rb +19 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_two_identity_proof_provider.rb +17 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_zero.rb +1 -1
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_zero_identity_proof.rb +19 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_request_zero_identity_proof_provider.rb +17 -0
- data/generated/lib/runtype/client_runtime/types/post_v1client_init_response_durable_recovery.rb +1 -1
- data/generated/lib/runtype/client_tokens/types/post_v1client_tokens_request.rb +2 -0
- 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/client.rb +5 -4
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_request_continuation_tool_output_messages_item.rb +4 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_request_continuation_tool_output_messages_item_role.rb +1 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_request_continuation_tool_output_messages_item_tool_calls_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_request_continuation_tool_output_messages_item_tool_results_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_stream_request_continuation_tool_output_messages_item.rb +4 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_stream_request_continuation_tool_output_messages_item_role.rb +1 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_stream_request_continuation_tool_output_messages_item_tool_calls_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_continue_stream_request_continuation_tool_output_messages_item_tool_results_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one.rb +2 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one_agent_sandbox.rb +2 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_one_agent_sandbox_coding_agents_item.rb +13 -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_agent_sandbox.rb +2 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_request_zero_agent_sandbox_coding_agents_item.rb +13 -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/dispatch/types/post_v1dispatch_resume_request_messages_item.rb +4 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_resume_request_messages_item_role.rb +1 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_resume_request_messages_item_tool_calls_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_resume_request_messages_item_tool_results_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_resume_stream_request_messages_item.rb +4 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_resume_stream_request_messages_item_role.rb +1 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_resume_stream_request_messages_item_tool_calls_item.rb +17 -0
- data/generated/lib/runtype/dispatch/types/post_v1dispatch_resume_stream_request_messages_item_tool_results_item.rb +17 -0
- data/generated/lib/runtype/documentation/client.rb +2 -3
- data/generated/lib/runtype/documentation/types/post_v1documentation_build_instructions_request.rb +2 -0
- data/generated/lib/runtype/evals/client.rb +4 -1
- data/generated/lib/runtype/executions/client.rb +3 -1
- data/generated/lib/runtype/executions/types/get_v1executions_execution_id_status_response.rb +6 -0
- data/generated/lib/runtype/executions/types/get_v1executions_execution_id_status_response_execution_lane.rb +14 -0
- data/generated/lib/runtype/identity_integrations/client.rb +39 -0
- data/generated/lib/runtype/logs/client.rb +166 -8
- data/generated/lib/runtype/logs/types/get_v1logs_context_execution_id_blocks_request.rb +13 -0
- data/generated/lib/runtype/logs/types/get_v1logs_context_execution_id_blocks_response.rb +13 -0
- data/generated/lib/runtype/logs/types/get_v1logs_context_execution_id_request.rb +11 -0
- data/generated/lib/runtype/logs/types/{get_v1logs_debug_response.rb → get_v1logs_context_execution_id_response.rb} +2 -2
- data/generated/lib/runtype/logs/types/get_v1logs_entry_request.rb +15 -0
- data/generated/lib/runtype/logs/types/get_v1logs_entry_response.rb +13 -0
- data/generated/lib/runtype/logs/types/get_v1logs_entry_response_data.rb +11 -0
- data/generated/lib/runtype/logs/types/get_v1logs_request.rb +8 -0
- data/generated/lib/runtype/logs/types/get_v1logs_response.rb +2 -0
- data/generated/lib/runtype/logs/types/get_v1logs_response_data.rb +2 -0
- data/generated/lib/runtype/logs/types/get_v1logs_response_data_live.rb +17 -0
- data/generated/lib/runtype/logs/types/get_v1logs_response_data_live_reason.rb +14 -0
- data/generated/lib/runtype/logs/types/get_v1logs_response_data_pagination.rb +2 -0
- data/generated/lib/runtype/logs/types/get_v1logs_response_window.rb +14 -0
- data/generated/lib/runtype/logs/types/get_v1logs_stats_request.rb +8 -0
- data/generated/lib/runtype/logs/types/get_v1logs_stats_response.rb +2 -0
- data/generated/lib/runtype/logs/types/get_v1logs_stats_response_data.rb +4 -0
- data/generated/lib/runtype/logs/types/get_v1logs_stats_response_data_stats_source.rb +15 -0
- data/generated/lib/runtype/logs/types/get_v1logs_stats_response_window.rb +14 -0
- data/generated/lib/runtype/logs/types/get_v1logs_trace_conversation_conversation_id_response.rb +1 -1
- data/generated/lib/runtype/logs/types/get_v1logs_trace_execution_execution_id_children_request.rb +11 -0
- data/generated/lib/runtype/logs/types/get_v1logs_trace_execution_execution_id_children_response.rb +15 -0
- data/generated/lib/runtype/logs/types/get_v1logs_trace_execution_execution_id_children_response_data_item.rb +19 -0
- data/generated/lib/runtype/logs/types/get_v1logs_trace_execution_execution_id_response.rb +1 -1
- data/generated/lib/runtype/messaging_conversations/client.rb +2 -0
- data/generated/lib/runtype/messaging_conversations/types/get_v1messaging_conversations_id_messages_request.rb +2 -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 +345 -4
- data/generated/lib/runtype/products/types/create_product_comment_request.rb +19 -0
- data/generated/lib/runtype/{conversations/types/put_v1conversations_id_request_messages_item_role.rb → products/types/create_product_comment_request_author_kind.rb} +2 -3
- data/generated/lib/runtype/products/types/create_product_comment_thread_request.rb +17 -0
- data/generated/lib/runtype/products/types/declare_product_stack_request.rb +15 -0
- data/generated/lib/runtype/products/types/declare_product_stack_request_source.rb +15 -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 +109 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_completeness.rb +17 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_kind.rb +14 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_origin.rb +15 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_source.rb +14 -0
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_status.rb +18 -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/products/types/get_v1products_id_comments_request.rb +19 -0
- data/generated/lib/runtype/products/types/get_v1products_id_comments_request_status.rb +15 -0
- data/generated/lib/runtype/products/types/get_v1products_id_response.rb +2 -0
- data/generated/lib/runtype/products/types/get_v1products_id_response_editor_context.rb +6 -0
- data/generated/lib/runtype/products/types/get_v1products_id_response_editor_context_flow_steps_map_value_item.rb +2 -0
- data/generated/lib/runtype/products/types/get_v1products_id_surfaces_surface_id_response.rb +2 -0
- data/generated/lib/runtype/products/types/get_v1products_response_data_item_capabilities_item.rb +4 -0
- data/generated/lib/runtype/products/types/post_v1products_ensure_request_definition_spec_internal_docs_resources_item.rb +6 -0
- data/generated/lib/runtype/products/types/post_v1products_request_canvas.rb +2 -0
- data/generated/lib/runtype/products/types/post_v1products_request_spec.rb +2 -0
- data/generated/lib/runtype/products/types/post_v1products_request_spec_internal_docs_resources_item.rb +6 -0
- data/generated/lib/runtype/products/types/put_v1products_id_request_canvas.rb +2 -0
- data/generated/lib/runtype/products/types/put_v1products_id_request_spec.rb +2 -0
- data/generated/lib/runtype/products/types/put_v1products_id_request_spec_internal_docs_resources_item.rb +6 -0
- data/generated/lib/runtype/products/types/put_v1products_id_surfaces_surface_id_entry_point_request.rb +15 -0
- data/generated/lib/runtype/products/types/put_v1products_id_surfaces_surface_id_entry_point_response.rb +13 -0
- data/generated/lib/runtype/products/types/update_product_comment_thread_request.rb +15 -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/question_sets/client.rb +416 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_id_request.rb +11 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_id_resolved_request.rb +13 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_id_response.rb +13 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_id_versions_request.rb +11 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_id_versions_response.rb +11 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_id_versions_version_number_calibrations_request.rb +17 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_id_versions_version_number_calibrations_response.rb +13 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_request.rb +17 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_request_direction.rb +14 -0
- data/generated/lib/runtype/question_sets/types/get_v1question_sets_response.rb +13 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_id_versions_version_number_calibrations_request.rb +17 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_id_versions_version_number_calibrations_request_record.rb +15 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_id_versions_version_number_calibrations_request_record_per_question_value.rb +19 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_id_versions_version_number_calibrations_response.rb +13 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_id_versions_version_number_publish_request.rb +13 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_id_versions_version_number_publish_response.rb +13 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_request.rb +21 -0
- data/generated/lib/runtype/question_sets/types/post_v1question_sets_response.rb +13 -0
- data/generated/lib/runtype/question_sets/types/put_v1question_sets_id_request.rb +21 -0
- data/generated/lib/runtype/question_sets/types/put_v1question_sets_id_response.rb +13 -0
- data/generated/lib/runtype/question_sets/types/put_v1question_sets_id_response_version.rb +30 -0
- data/generated/lib/runtype/runs/client.rb +150 -0
- data/generated/lib/runtype/runs/types/get_v1runs_execution_id_request.rb +15 -0
- data/generated/lib/runtype/runs/types/get_v1runs_execution_id_request_overlay.rb +14 -0
- data/generated/lib/runtype/runs/types/get_v1runs_execution_id_request_view.rb +14 -0
- data/generated/lib/runtype/runs/types/get_v1runs_execution_id_response.rb +11 -0
- data/generated/lib/runtype/runs/types/get_v1runs_request.rb +47 -0
- data/generated/lib/runtype/runs/types/get_v1runs_request_include_children.rb +14 -0
- data/generated/lib/runtype/runs/types/get_v1runs_request_overlay.rb +14 -0
- data/generated/lib/runtype/runs/types/get_v1runs_request_source.rb +14 -0
- data/generated/lib/runtype/runs/types/get_v1runs_request_status.rb +15 -0
- data/generated/lib/runtype/runs/types/get_v1runs_request_view.rb +14 -0
- data/generated/lib/runtype/runs/types/get_v1runs_response.rb +15 -0
- data/generated/lib/runtype/runs/types/get_v1runs_response_pagination.rb +19 -0
- data/generated/lib/runtype/runs/types/get_v1runs_response_window.rb +14 -0
- data/generated/lib/runtype/schedules/client.rb +97 -0
- data/generated/lib/runtype/schedules/types/get_v1schedules_id_runs_response_data_item.rb +2 -0
- data/generated/lib/runtype/schedules/types/get_v1schedules_pull_request.rb +19 -0
- data/generated/lib/runtype/schedules/types/get_v1schedules_runs_all_response_data_item.rb +2 -0
- data/generated/lib/runtype/schedules/types/post_v1schedules_ensure_request.rb +23 -0
- data/generated/lib/runtype/schedules/types/post_v1schedules_ensure_request_on_conflict.rb +14 -0
- data/generated/lib/runtype/skills/client.rb +39 -0
- data/generated/lib/runtype/skills/types/get_v1skills_id_bindings_request.rb +11 -0
- data/generated/lib/runtype/skills/types/get_v1skills_id_bindings_response.rb +11 -0
- data/generated/lib/runtype/skills/types/get_v1skills_id_bindings_response_data_item.rb +25 -0
- data/generated/lib/runtype/skills/types/get_v1skills_id_bindings_response_data_item_agent.rb +15 -0
- data/generated/lib/runtype/surfaces/client.rb +48 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound.rb +16 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_channel_overrides_value.rb +13 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_channel_overrides_value_channel_response_mode.rb +15 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_channel_overrides_value_eagerness.rb +15 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_channel_response_mode.rb +15 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_context_backfill.rb +19 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_context_backfill_mode.rb +15 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_eagerness.rb +15 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_keywords.rb +15 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_response_data_item_inbound_on_uncertain.rb +14 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_surface_id_channel_context_request.rb +13 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_surface_id_channel_context_response.rb +19 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_surface_id_channel_context_response_provider.rb +15 -0
- data/generated/lib/runtype/surfaces/types/get_v1surfaces_surface_id_response.rb +2 -0
- data/generated/lib/runtype/telemetry/client.rb +58 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_request.rb +11 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response.rb +27 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_admission.rb +17 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_errors_item.rb +13 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_status.rb +16 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_tiers.rb +15 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_tiers_canonical.rb +21 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_tiers_hot.rb +20 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_tiers_raw.rb +21 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_totals.rb +27 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_trace.rb +23 -0
- data/generated/lib/runtype/telemetry/types/get_otlp_ingest_health_response_trace_delivery.rb +23 -0
- data/generated/lib/runtype/tools/types/post_v1tools_flows_flow_id_convert_to_tool_response_validation.rb +2 -0
- data/generated/lib/runtype/tools/types/post_v1tools_id_execute_request.rb +2 -0
- data/generated/lib/runtype/tools/types/post_v1tools_id_execute_response.rb +3 -7
- data/generated/lib/runtype/tools/types/post_v1tools_id_execute_response_error.rb +19 -0
- data/generated/lib/runtype/tools/types/{post_v1tools_id_execute_response_status.rb → post_v1tools_id_execute_response_error_status.rb} +1 -1
- data/generated/lib/runtype/tools/types/post_v1tools_id_test_response.rb +3 -7
- data/generated/lib/runtype/tools/types/post_v1tools_id_test_response_error.rb +19 -0
- data/generated/lib/runtype/tools/types/{post_v1tools_id_test_response_status.rb → post_v1tools_id_test_response_error_status.rb} +1 -1
- data/generated/lib/runtype/tools/types/post_v1tools_response_validation.rb +2 -0
- data/generated/lib/runtype/tools/types/put_v1tools_id_response_validation.rb +2 -0
- data/generated/lib/runtype/types/agent_ensure_capability.rb +21 -0
- data/generated/lib/runtype/types/agent_ensure_capability_change.rb +17 -0
- data/generated/lib/runtype/types/agent_ensure_capability_change_action.rb +14 -0
- data/generated/lib/runtype/types/agent_ensure_capability_change_kind.rb +13 -0
- data/generated/lib/runtype/types/agent_ensure_deploy_target.rb +2 -0
- data/generated/lib/runtype/types/agent_ensure_response_changed_keys.rb +4 -0
- data/generated/lib/runtype/types/agent_ensure_response_version_id.rb +4 -0
- data/generated/lib/runtype/types/agent_ensure_skill_binding.rb +13 -0
- data/generated/lib/runtype/types/agent_ensure_skill_binding_change.rb +17 -0
- data/generated/lib/runtype/types/agent_ensure_skill_binding_change_action.rb +14 -0
- data/generated/lib/runtype/types/agent_pull_response.rb +4 -0
- data/generated/lib/runtype/types/agent_pull_response_definition_config_sandbox.rb +2 -0
- data/generated/lib/runtype/types/agent_pull_response_definition_config_sandbox_coding_agents_item.rb +11 -0
- data/generated/lib/runtype/types/agent_pull_response_definition_config_tools.rb +2 -0
- data/generated/lib/runtype/types/agent_pull_response_definition_config_tools_runtime_tools_item.rb +4 -0
- data/generated/lib/runtype/types/agent_pull_response_definition_config_tools_tool_search.rb +13 -0
- data/generated/lib/runtype/types/builtin_tool_execute_result.rb +15 -0
- data/generated/lib/runtype/types/channel_context_decision.rb +17 -0
- data/generated/lib/runtype/types/channel_context_decision_capability.rb +15 -0
- data/generated/lib/runtype/types/channel_context_decision_capability_outcome.rb +14 -0
- data/generated/lib/runtype/types/channel_context_decision_decision.rb +14 -0
- data/generated/lib/runtype/types/channel_context_decision_failure.rb +17 -0
- data/generated/lib/runtype/types/channel_context_label.rb +17 -0
- data/generated/lib/runtype/types/channel_context_label_label.rb +13 -0
- data/generated/lib/runtype/types/channel_context_label_source.rb +15 -0
- data/generated/lib/runtype/types/channel_context_message.rb +25 -0
- data/generated/lib/runtype/types/channel_context_message_author_kind.rb +13 -0
- data/generated/lib/runtype/types/collection_lookup_failed_error.rb +17 -0
- data/generated/lib/runtype/types/collection_lookup_failed_error_code.rb +11 -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/context_blocks.rb +11 -0
- data/generated/lib/runtype/types/context_blocks_blocks_item.rb +13 -0
- data/generated/lib/runtype/types/context_manifest_entry.rb +27 -0
- data/generated/lib/runtype/types/context_manifest_entry_category.rb +16 -0
- data/generated/lib/runtype/types/context_manifest_entry_flags_item.rb +13 -0
- data/generated/lib/runtype/types/context_manifest_entry_kind.rb +19 -0
- data/generated/lib/runtype/types/context_manifest_entry_role.rb +14 -0
- data/generated/lib/runtype/types/context_snapshot.rb +33 -0
- data/generated/lib/runtype/types/context_snapshot_removed_since_previous_item.rb +11 -0
- data/generated/lib/runtype/types/context_snapshot_removed_since_previous_item_reason.rb +14 -0
- data/generated/lib/runtype/types/context_snapshot_reported.rb +13 -0
- data/generated/lib/runtype/types/context_snapshots.rb +13 -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_trace.rb +17 -0
- data/generated/lib/runtype/types/conversation_trace_executions_item.rb +13 -0
- data/generated/lib/runtype/types/conversation_trace_produced_by.rb +38 -0
- data/generated/lib/runtype/types/conversation_trace_produced_by_source.rb +12 -0
- data/generated/lib/runtype/types/conversation_trace_truncation.rb +13 -0
- data/generated/lib/runtype/types/conversation_trace_truncation_reason.rb +11 -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/types/create_voice_agent_draft_response.rb +11 -0
- data/generated/lib/runtype/types/declare_product_stack_response.rb +15 -0
- data/generated/lib/runtype/types/declare_product_stack_response_source.rb +13 -0
- data/generated/lib/runtype/types/dispatch_agent_json_response.rb +6 -0
- data/generated/lib/runtype/types/dispatch_agent_json_response_agent_target_resolution.rb +13 -0
- data/generated/lib/runtype/types/dispatch_detached_tool_output_json_response.rb +6 -0
- data/generated/lib/runtype/types/dispatch_detached_tool_output_json_response_agent_target_resolution.rb +13 -0
- data/generated/lib/runtype/types/dispatch_tool_output_continuation_json_response.rb +6 -0
- data/generated/lib/runtype/types/dispatch_tool_output_continuation_json_response_agent_target_resolution.rb +13 -0
- data/generated/lib/runtype/types/eval_run_scores_response.rb +2 -0
- data/generated/lib/runtype/types/eval_run_scores_response_cases_item.rb +2 -0
- data/generated/lib/runtype/types/eval_run_scores_response_cases_item_failure_kind.rb +11 -0
- data/generated/lib/runtype/types/eval_suite_detail.rb +2 -0
- data/generated/lib/runtype/types/eval_suite_detail_warnings_item.rb +13 -0
- data/generated/lib/runtype/types/eval_suite_latest_run.rb +2 -0
- data/generated/lib/runtype/types/eval_suite_summary.rb +2 -0
- data/generated/lib/runtype/types/eval_suite_summary_warnings_item.rb +13 -0
- data/generated/lib/runtype/types/execution_stream_event.rb +4 -0
- data/generated/lib/runtype/types/execution_stream_event_model_call_complete.rb +41 -0
- data/generated/lib/runtype/types/execution_stream_event_model_call_complete_attributes_value.rb +15 -0
- data/generated/lib/runtype/types/execution_stream_event_model_call_complete_subagent.rb +13 -0
- data/generated/lib/runtype/types/execution_stream_event_model_call_complete_tokens.rb +17 -0
- data/generated/lib/runtype/types/execution_stream_event_model_call_start.rb +29 -0
- data/generated/lib/runtype/types/execution_stream_event_model_call_start_subagent.rb +13 -0
- data/generated/lib/runtype/types/execution_stream_event_turn_complete.rb +2 -0
- data/generated/lib/runtype/types/execution_stream_event_turn_complete_attributes_value.rb +15 -0
- data/generated/lib/runtype/types/external_observed_approvals.rb +17 -0
- data/generated/lib/runtype/types/external_observed_approvals_availability.rb +11 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item.rb +23 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item_decision.rb +14 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item_observations_item.rb +15 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item_observations_item_source.rb +15 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item_observations_item_source_attribute.rb +11 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item_observations_item_source_kind.rb +11 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item_observations_item_state.rb +13 -0
- data/generated/lib/runtype/types/external_observed_approvals_lifecycles_item_raw_states_item.rb +13 -0
- data/generated/lib/runtype/types/identity_assertion_jwks.rb +9 -0
- data/generated/lib/runtype/types/identity_assertion_public_jwk.rb +21 -0
- data/generated/lib/runtype/types/judgment_calibration_record.rb +23 -0
- data/generated/lib/runtype/types/judgment_calibration_record_source.rb +12 -0
- data/generated/lib/runtype/types/list_product_comments_response.rb +13 -0
- data/generated/lib/runtype/types/product_canvas_block.rb +23 -0
- data/generated/lib/runtype/types/product_comment.rb +23 -0
- data/generated/lib/runtype/types/product_comment_author_kind.rb +12 -0
- data/generated/lib/runtype/types/product_comment_thread.rb +27 -0
- data/generated/lib/runtype/types/product_declared_stack.rb +15 -0
- data/generated/lib/runtype/types/product_pull_response_definition_spec_internal_docs_resources_item.rb +6 -0
- data/generated/lib/runtype/types/product_stack.rb +18 -0
- data/generated/lib/runtype/types/product_stack_declared.rb +14 -0
- data/generated/lib/runtype/types/product_stack_detected.rb +12 -0
- data/generated/lib/runtype/types/product_stack_item.rb +21 -0
- data/generated/lib/runtype/types/question_set.rb +25 -0
- data/generated/lib/runtype/types/question_set_error.rb +13 -0
- data/generated/lib/runtype/types/question_set_list_item.rb +29 -0
- data/generated/lib/runtype/types/question_set_version.rb +27 -0
- data/generated/lib/runtype/types/resolved_question_set.rb +21 -0
- data/generated/lib/runtype/types/resolved_question_set_calibration.rb +17 -0
- data/generated/lib/runtype/types/resolved_question_set_calibration_source.rb +12 -0
- data/generated/lib/runtype/types/run_eval_response.rb +2 -0
- data/generated/lib/runtype/types/run_eval_response_cases_item.rb +2 -0
- data/generated/lib/runtype/types/run_eval_response_cases_item_failure_kind.rb +11 -0
- data/generated/lib/runtype/types/run_list_pagination.rb +15 -0
- data/generated/lib/runtype/types/run_list_row.rb +107 -0
- data/generated/lib/runtype/types/run_list_row_completeness.rb +15 -0
- data/generated/lib/runtype/types/run_list_row_kind.rb +12 -0
- data/generated/lib/runtype/types/run_list_row_origin.rb +13 -0
- data/generated/lib/runtype/types/run_list_row_source.rb +12 -0
- data/generated/lib/runtype/types/run_list_row_status.rb +16 -0
- data/generated/lib/runtype/types/runtime_exported_skill.rb +21 -0
- data/generated/lib/runtype/types/schedule_ensure_conflict.rb +17 -0
- data/generated/lib/runtype/types/schedule_ensure_conflict_code.rb +12 -0
- data/generated/lib/runtype/types/schedule_ensure_definition.rb +27 -0
- data/generated/lib/runtype/types/schedule_ensure_definition_execution_options.rb +27 -0
- data/generated/lib/runtype/types/schedule_ensure_definition_execution_options_logging_policy.rb +13 -0
- data/generated/lib/runtype/types/schedule_ensure_definition_trigger.rb +15 -0
- data/generated/lib/runtype/types/schedule_ensure_definition_trigger_type.rb +12 -0
- data/generated/lib/runtype/types/schedule_ensure_hash_mismatch.rb +13 -0
- data/generated/lib/runtype/types/schedule_ensure_hash_mismatch_code.rb +11 -0
- data/generated/lib/runtype/types/schedule_ensure_response.rb +15 -0
- data/generated/lib/runtype/types/schedule_ensure_response_changed_keys.rb +19 -0
- data/generated/lib/runtype/types/schedule_ensure_response_changed_keys_changes.rb +13 -0
- data/generated/lib/runtype/types/schedule_ensure_response_changed_keys_result.rb +11 -0
- data/generated/lib/runtype/types/schedule_ensure_response_one.rb +9 -0
- data/generated/lib/runtype/types/schedule_ensure_response_one_result.rb +11 -0
- data/generated/lib/runtype/types/schedule_ensure_response_zero.rb +13 -0
- data/generated/lib/runtype/types/schedule_ensure_response_zero_result.rb +13 -0
- data/generated/lib/runtype/types/schedule_ensure_target.rb +15 -0
- data/generated/lib/runtype/types/schedule_pull_response.rb +17 -0
- data/generated/lib/runtype/types/schedule_run_link.rb +15 -0
- data/generated/lib/runtype/types/schedule_run_link_kind.rb +13 -0
- data/generated/lib/runtype/types/tool_execute_error.rb +13 -0
- data/generated/lib/runtype/types/trace_log_entry.rb +145 -0
- data/generated/lib/runtype/types/trace_log_entry_estimated_context_breakdown.rb +15 -0
- data/generated/lib/runtype/types/trace_log_entry_estimated_context_breakdown_categories_value.rb +11 -0
- data/generated/lib/runtype/types/trace_log_entry_estimated_cost.rb +14 -0
- data/generated/lib/runtype/types/trace_log_entry_level.rb +14 -0
- data/generated/lib/runtype/types/trace_log_entry_logging_policy.rb +11 -0
- data/generated/lib/runtype/types/trace_log_entry_otlp_incomplete_activity.rb +13 -0
- data/generated/lib/runtype/types/trace_log_entry_otlp_instrumentation_warning.rb +11 -0
- data/generated/lib/runtype/types/trace_log_entry_otlp_record_kind.rb +13 -0
- data/generated/lib/runtype/types/trace_log_entry_status.rb +16 -0
- data/generated/lib/runtype/types/trace_log_entry_type.rb +19 -0
- data/generated/lib/runtype/types/trace_node.rb +35 -0
- data/generated/lib/runtype/types/trace_node_lifecycle.rb +14 -0
- data/generated/lib/runtype/types/trace_node_node_type.rb +16 -0
- data/generated/lib/runtype/types/trace_produced_by.rb +37 -0
- data/generated/lib/runtype/types/trace_produced_by_source.rb +12 -0
- data/generated/lib/runtype/types/trace_tree.rb +41 -0
- data/generated/lib/runtype/types/trace_tree_availability.rb +13 -0
- data/generated/lib/runtype/types/trace_tree_availability_reason.rb +11 -0
- data/generated/lib/runtype/types/trace_tree_child_truncation.rb +15 -0
- data/generated/lib/runtype/types/trace_tree_child_truncation_reason.rb +11 -0
- data/generated/lib/runtype/types/trace_tree_source.rb +13 -0
- data/generated/lib/runtype/types/trace_tree_totals_source.rb +12 -0
- data/generated/lib/runtype/types/trace_tree_truncation.rb +13 -0
- data/generated/lib/runtype/types/trace_tree_truncation_reason.rb +11 -0
- data/generated/lib/runtype/users/types/get_v1users_profile_response_features.rb +2 -0
- data/generated/lib/runtype.rb +3506 -2863
- data/lib/runtype/agent_ensure.rb +97 -10
- data/lib/runtype/agent_release_aliases.rb +146 -2
- data/lib/runtype/client.rb +22 -1
- data/lib/runtype/config_ensure.rb +272 -0
- data/lib/runtype/content_hash.rb +257 -0
- data/lib/runtype/detached_follow.rb +12 -0
- data/lib/runtype/errors.rb +56 -10
- data/lib/runtype/local_tool_runner.rb +3 -1
- data/lib/runtype/raw_client_timeout.rb +56 -0
- data/lib/runtype/sdk_version.rb +2 -1
- data/lib/runtype.rb +3 -0
- metadata +422 -15
- data/generated/lib/runtype/agents/types/get_v1agents_id_export_runtime_response.rb +0 -25
- 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/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
|
|
@@ -32,9 +36,22 @@ module Runtype
|
|
|
32
36
|
# `deploy:`: `"publish"` also re-aims the `live` alias; default `"none"`.
|
|
33
37
|
# @param deploy [Hash, String, Symbol, nil] activates the saved version at a
|
|
34
38
|
# release alias, e.g. `{ alias: "pr-482" }` or the bare `"live"`. Omit
|
|
35
|
-
# both `release:` and `deploy:` to save without activating.
|
|
39
|
+
# both `release:` and `deploy:` to save without activating. `bindings:`
|
|
40
|
+
# (`{ "API_URL" => "https://staging..." }`) replaces the alias's
|
|
41
|
+
# per-alias secret overrides, as in the TypeScript SDK.
|
|
36
42
|
# @param expected_remote_hash [String, nil] binds a dry run to its apply:
|
|
37
43
|
# the write proceeds only if the remote still hashes to this value.
|
|
44
|
+
# @param version [Hash, nil] provenance recorded on the version row this
|
|
45
|
+
# converge appends, e.g. `{ label: "a1b2c3d", notes: "CI run 4821" }`.
|
|
46
|
+
# Omit to keep the default `"sdk-ensure"` label and the server's notes.
|
|
47
|
+
# @param skills [Array<Hash>, nil] the complete set of skills bound to the
|
|
48
|
+
# agent, in load order, e.g. `[{ name: "refund-policy", version: 3 }]`.
|
|
49
|
+
# `version:` pins a skill versionNumber; omit it to follow the published
|
|
50
|
+
# version. Bound skills absent here are unbound; `nil` leaves them alone.
|
|
51
|
+
# @param capabilities [Array<Hash>, nil] the complete set of capabilities in
|
|
52
|
+
# display order, e.g. `[{ toolName: "lookup_order", flow: "Order Lookup" }]`.
|
|
53
|
+
# Each names exactly one `flow:`, `agent:` or `tool:` source by name.
|
|
54
|
+
# Capabilities absent here are removed; `nil` leaves them alone.
|
|
38
55
|
# @param request_options [Hash] see {Runtype::Client#dispatch}.
|
|
39
56
|
# @return [Hash] `{"result" => "unchanged"|"created"|"updated", "agentId",
|
|
40
57
|
# "versionId", "contentHash"}`, or for a dry run `{"result" => "plan",
|
|
@@ -43,10 +60,13 @@ module Runtype
|
|
|
43
60
|
# @raise [Runtype::EnsureConflictError] on a 409 (`external_modification`
|
|
44
61
|
# or `remote_changed`).
|
|
45
62
|
# @raise [Runtype::DriftError] with `expect_no_changes:` when the plan is
|
|
46
|
-
# not `"none"
|
|
47
|
-
#
|
|
63
|
+
# not `"none"`, would change a skill binding or, with `release:` or
|
|
64
|
+
# `deploy:`, would move the alias or change its binding names.
|
|
65
|
+
# @raise [ArgumentError] when both `release:` and `deploy:` are given, or
|
|
66
|
+
# when `version:` carries a key other than `label:` and `notes:`.
|
|
48
67
|
def ensure_agent(definition, dry_run: false, expect_no_changes: false, on_conflict: nil, release: nil,
|
|
49
|
-
deploy: nil, expected_remote_hash: nil,
|
|
68
|
+
deploy: nil, expected_remote_hash: nil, version: nil, skills: nil, capabilities: nil,
|
|
69
|
+
request_options: {})
|
|
50
70
|
raise ArgumentError, RELEASE_DEPLOY_CONFLICT_MESSAGE if release && deploy
|
|
51
71
|
|
|
52
72
|
definition = Runtype::AgentDefinition.from(definition)
|
|
@@ -54,7 +74,10 @@ module Runtype
|
|
|
54
74
|
onConflict: on_conflict&.to_s,
|
|
55
75
|
release: release&.to_s,
|
|
56
76
|
deploy: deploy_intent(deploy),
|
|
57
|
-
expectedRemoteHash: expected_remote_hash
|
|
77
|
+
expectedRemoteHash: expected_remote_hash,
|
|
78
|
+
version: version_metadata(version),
|
|
79
|
+
skills: skills&.map(&:to_h),
|
|
80
|
+
capabilities: capabilities&.map(&:to_h)
|
|
58
81
|
}.compact
|
|
59
82
|
|
|
60
83
|
if dry_run || expect_no_changes
|
|
@@ -64,7 +87,7 @@ module Runtype
|
|
|
64
87
|
unless plan["result"] == "plan"
|
|
65
88
|
raise Runtype::Error, "Expected a plan result from dryRun, got #{plan["result"].inspect}"
|
|
66
89
|
end
|
|
67
|
-
raise Runtype::DriftError.new(plan, name: definition.name) if expect_no_changes && plan
|
|
90
|
+
raise Runtype::DriftError.new(plan, name: definition.name) if expect_no_changes && drifted?(plan, passthrough)
|
|
68
91
|
|
|
69
92
|
return plan
|
|
70
93
|
end
|
|
@@ -98,13 +121,28 @@ module Runtype
|
|
|
98
121
|
|
|
99
122
|
private
|
|
100
123
|
|
|
124
|
+
# Whether a dry-run plan fails the drift gate: content or skill-binding
|
|
125
|
+
# changes, or, when the converge asked to activate an alias, a pointer move
|
|
126
|
+
# or a binding-name change at that alias.
|
|
127
|
+
#
|
|
128
|
+
# @param plan [Hash]
|
|
129
|
+
# @param passthrough [Hash] the options this converge sends.
|
|
130
|
+
# @return [Boolean]
|
|
131
|
+
def drifted?(plan, passthrough)
|
|
132
|
+
return true if plan["changes"] != "none" || Runtype::DriftError.skill_changes(plan).any?
|
|
133
|
+
|
|
134
|
+
deploy_requested = passthrough.key?(:deploy) || passthrough[:release] == "publish"
|
|
135
|
+
deploy_requested && Runtype::DriftError.deployment_changes(plan).any?
|
|
136
|
+
end
|
|
137
|
+
|
|
101
138
|
# Normalizes the two accepted spellings of `deploy:` into the wire shape.
|
|
102
|
-
# A bare String or Symbol names the alias; a Hash may spell its
|
|
139
|
+
# A bare String or Symbol names the alias; a Hash may spell its keys either
|
|
103
140
|
# way. The alias name itself is never resolved client-side.
|
|
104
141
|
#
|
|
105
142
|
# @param deploy [Hash, String, Symbol, nil]
|
|
106
|
-
# @return [Hash, nil] `{ alias: "<name>" }`, or nil when nothing was asked.
|
|
107
|
-
# @raise [ArgumentError] when a Hash carries no alias name
|
|
143
|
+
# @return [Hash, nil] `{ alias: "<name>", bindings: {...}? }`, or nil when nothing was asked.
|
|
144
|
+
# @raise [ArgumentError] when a Hash carries no alias name, or a supplied
|
|
145
|
+
# `bindings:` (nil included) is not a Hash of String names to String values.
|
|
108
146
|
def deploy_intent(deploy)
|
|
109
147
|
return nil if deploy.nil?
|
|
110
148
|
return { alias: deploy.to_s } unless deploy.is_a?(Hash)
|
|
@@ -112,7 +150,56 @@ module Runtype
|
|
|
112
150
|
name = deploy[:alias] || deploy["alias"]
|
|
113
151
|
raise ArgumentError, "deploy: needs an alias name, e.g. deploy: { alias: \"live\" }." if name.nil?
|
|
114
152
|
|
|
115
|
-
{ alias: name.to_s }
|
|
153
|
+
return { alias: name.to_s } unless deploy.key?(:bindings) || deploy.key?("bindings")
|
|
154
|
+
|
|
155
|
+
bindings = deploy.key?(:bindings) ? deploy[:bindings] : deploy["bindings"]
|
|
156
|
+
{ alias: name.to_s, bindings: deploy_bindings(bindings) }
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Validates `deploy: { bindings: }`, the per-alias `{{secret:NAME}}`
|
|
160
|
+
# overrides. Names may be Symbols; values must already be Strings so a
|
|
161
|
+
# stray nil or number fails here rather than binding its `to_s`.
|
|
162
|
+
#
|
|
163
|
+
# @param bindings [Hash]
|
|
164
|
+
# @return [Hash{String => String}]
|
|
165
|
+
# @raise [ArgumentError] on a non-Hash or a non-String value.
|
|
166
|
+
def deploy_bindings(bindings)
|
|
167
|
+
unless bindings.is_a?(Hash)
|
|
168
|
+
raise ArgumentError,
|
|
169
|
+
"deploy: bindings: needs a Hash of secret names to values, e.g. { \"API_URL\" => \"https://...\" }."
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
bindings.each_with_object({}) do |(key, value), acc|
|
|
173
|
+
unless (key.is_a?(String) || key.is_a?(Symbol)) && value.is_a?(String)
|
|
174
|
+
raise ArgumentError,
|
|
175
|
+
"deploy: bindings: maps String names to String values; got #{key.inspect} => #{value.class}."
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
acc[key.to_s] = value
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Normalizes `version:` into the wire shape. Keys may be Symbols or Strings;
|
|
183
|
+
# an unknown key raises here rather than reaching the server's strict 400.
|
|
184
|
+
# A hash whose values are all nil is treated as omitted, so
|
|
185
|
+
# `version: { label: ENV["GIT_SHA"] }` outside CI still saves — the same
|
|
186
|
+
# reading the API gives an empty label, which falls back to `"sdk-ensure"`.
|
|
187
|
+
#
|
|
188
|
+
# @param version [Hash, nil]
|
|
189
|
+
# @return [Hash, nil] `{ label:, notes: }`, or nil when nothing was asked.
|
|
190
|
+
# @raise [ArgumentError] on a non-Hash or an unrecognized key.
|
|
191
|
+
def version_metadata(version)
|
|
192
|
+
return nil if version.nil?
|
|
193
|
+
raise ArgumentError, "version: needs a Hash, e.g. version: { label: \"a1b2c3d\" }." unless version.is_a?(Hash)
|
|
194
|
+
|
|
195
|
+
metadata = version.each_with_object({}) do |(key, value), acc|
|
|
196
|
+
name = key.to_sym
|
|
197
|
+
raise ArgumentError, "version: accepts label: and notes:, not #{key.inspect}." unless
|
|
198
|
+
VERSION_METADATA_KEYS.include?(name)
|
|
199
|
+
|
|
200
|
+
acc[name] = value.to_s unless value.nil?
|
|
201
|
+
end
|
|
202
|
+
metadata.empty? ? nil : metadata
|
|
116
203
|
end
|
|
117
204
|
|
|
118
205
|
# @return [Hash{String => String}] `name:localHash` => server hash, so a
|
|
@@ -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
|
@@ -26,6 +26,7 @@ module Runtype
|
|
|
26
26
|
# clients with different keys or base URLs can coexist in one process.
|
|
27
27
|
class Client
|
|
28
28
|
include Runtype::AgentEnsure
|
|
29
|
+
include Runtype::ConfigEnsure
|
|
29
30
|
include Runtype::AgentReleaseAliases
|
|
30
31
|
include Runtype::LocalToolRunner
|
|
31
32
|
|
|
@@ -53,7 +54,10 @@ module Runtype
|
|
|
53
54
|
|
|
54
55
|
# @param api_key [String, nil] defaults to `RUNTYPE_API_KEY`.
|
|
55
56
|
# @param base_url [String] defaults to `RUNTYPE_BASE_URL`, then production.
|
|
56
|
-
# @param timeout [Numeric, nil] per-operation socket timeout in seconds
|
|
57
|
+
# @param timeout [Numeric, nil] per-operation socket timeout in seconds,
|
|
58
|
+
# defaulting to {DEFAULT_TIMEOUT}. Governs the dispatch and streaming
|
|
59
|
+
# paths and every generated resource call alike; a single call overrides
|
|
60
|
+
# it with `request_options: { timeout_in_seconds: n }`.
|
|
57
61
|
# @param max_retries [Integer] retries for generated resource calls. The
|
|
58
62
|
# dispatch paths never retry: replaying an execution would run it twice.
|
|
59
63
|
# @raise [Runtype::AuthenticationError] when no API key is available.
|
|
@@ -79,6 +83,8 @@ module Runtype
|
|
|
79
83
|
authorization: bearer_token,
|
|
80
84
|
max_retries: max_retries
|
|
81
85
|
)
|
|
86
|
+
# WORKAROUND(fern ruby generator): BaseClient takes no timeout, so seed the transport it just built.
|
|
87
|
+
Runtype::RawClientTimeout.apply(generated_raw_client, timeout: @timeout)
|
|
82
88
|
end
|
|
83
89
|
|
|
84
90
|
# Executes a flow or agent and waits for the complete JSON response.
|
|
@@ -193,6 +199,21 @@ module Runtype
|
|
|
193
199
|
|
|
194
200
|
private
|
|
195
201
|
|
|
202
|
+
# The transport {#api} shares with every resource sub-client it builds.
|
|
203
|
+
# Read once at construction, before any sub-client has memoized it.
|
|
204
|
+
#
|
|
205
|
+
# @return [Runtype::Internal::Http::RawClient]
|
|
206
|
+
# @raise [Runtype::Error] when the generated core no longer holds one, which
|
|
207
|
+
# means the timeout can no longer be applied to generated calls.
|
|
208
|
+
def generated_raw_client
|
|
209
|
+
raw = @api.instance_variable_get(:@raw_client)
|
|
210
|
+
return raw if raw.is_a?(Runtype::Internal::Http::RawClient)
|
|
211
|
+
|
|
212
|
+
raise Runtype::Error,
|
|
213
|
+
"Runtype::BaseClient no longer exposes @raw_client, so Runtype::Client cannot apply its timeout " \
|
|
214
|
+
"to generated calls. Rewire Runtype::RawClientTimeout against the generated core's new shape."
|
|
215
|
+
end
|
|
216
|
+
|
|
196
217
|
# @return [String]
|
|
197
218
|
def bearer_token
|
|
198
219
|
"Bearer #{@api_key}"
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
require "uri"
|
|
5
|
+
|
|
6
|
+
module Runtype
|
|
7
|
+
# Config-as-code on {Runtype::Client} for skills, flows, tools, surfaces,
|
|
8
|
+
# products and evals: the same hash-first ensure protocol as
|
|
9
|
+
# {AgentEnsure#ensure_agent}, mirroring the TypeScript SDK's `*-ensure.ts`
|
|
10
|
+
# modules option for option. Protocol: `docs/adr/0003-agent-config-as-code-ensure.md`.
|
|
11
|
+
#
|
|
12
|
+
# Definitions are plain Hashes in wire shape (camelCase keys, Symbol or
|
|
13
|
+
# String). Every converge probes with the content hash, ships the full
|
|
14
|
+
# definition only on `definitionRequired`, memoizes the server's hash per
|
|
15
|
+
# client, raises {Runtype::EnsureConflictError} on the protocol's 409 and
|
|
16
|
+
# {Runtype::DriftError} under `expect_no_changes:`.
|
|
17
|
+
module ConfigEnsure
|
|
18
|
+
Kind = Struct.new(:label, :pull_hint, :ensure_hint, :hasher, :drift, keyword_init: true)
|
|
19
|
+
|
|
20
|
+
SKILL = Kind.new(label: "Skill", pull_hint: "client.pull_skill(name)", ensure_hint: "ensure_skill",
|
|
21
|
+
hasher: ContentHash.method(:skill), drift: true)
|
|
22
|
+
FLOW = Kind.new(label: "Flow", pull_hint: "client.pull_flow(name)", ensure_hint: "ensure_flow",
|
|
23
|
+
hasher: ->(definition) { ContentHash.flow(definition["steps"] || []) }, drift: true)
|
|
24
|
+
TOOL = Kind.new(label: "Tool", pull_hint: "client.pull_tool(name)", ensure_hint: "ensure_tool",
|
|
25
|
+
hasher: ContentHash.method(:tool), drift: true)
|
|
26
|
+
SURFACE = Kind.new(label: "Surface", pull_hint: "client.pull_surface(product_id, name)",
|
|
27
|
+
ensure_hint: "ensure_surface", hasher: ContentHash.method(:surface), drift: true)
|
|
28
|
+
PRODUCT = Kind.new(label: "Product", pull_hint: "client.pull_product(name)", ensure_hint: "ensure_product",
|
|
29
|
+
hasher: ContentHash.method(:product), drift: true)
|
|
30
|
+
EVAL = Kind.new(label: "Eval", pull_hint: "client.pull_eval(name)", ensure_hint: "ensure_eval",
|
|
31
|
+
hasher: ContentHash.method(:eval_suite), drift: false)
|
|
32
|
+
|
|
33
|
+
# Converges `{ name:, manifest: { frontmatter:, runtype:?, body: } }`. Every
|
|
34
|
+
# change appends an immutable version.
|
|
35
|
+
#
|
|
36
|
+
# @param definition [Hash]
|
|
37
|
+
# @param dry_run [Boolean] plan without writing (the CI drift gate).
|
|
38
|
+
# @param expect_no_changes [Boolean] implies `dry_run`; raises {Runtype::DriftError} unless the plan is `"none"`.
|
|
39
|
+
# @param on_conflict [String, Symbol, nil] `"error"` (default) or `"overwrite"`.
|
|
40
|
+
# @param release [String, Symbol, nil] `"publish"` also re-aims the published-version pointer.
|
|
41
|
+
# @param expected_remote_hash [String, nil] the write proceeds only if the remote still hashes to this.
|
|
42
|
+
# @param request_options [Hash] see {Runtype::Client#dispatch}.
|
|
43
|
+
# @return [Hash] `{"result", "skillId", "versionId", "contentHash"}`, or the dry-run plan.
|
|
44
|
+
# @raise [Runtype::EnsureConflictError] on the protocol's 409.
|
|
45
|
+
# @raise [Runtype::DriftError] with `expect_no_changes:` when the plan is not `"none"`.
|
|
46
|
+
def ensure_skill(definition, dry_run: false, expect_no_changes: false, on_conflict: nil, release: nil,
|
|
47
|
+
expected_remote_hash: nil, request_options: {})
|
|
48
|
+
wire = config_wire(definition)
|
|
49
|
+
options = { onConflict: on_conflict&.to_s, release: release&.to_s, expectedRemoteHash: expected_remote_hash }
|
|
50
|
+
converge_config(SKILL, "v1/skills/ensure", wire, skill_wire(wire), options.compact,
|
|
51
|
+
dry_run: dry_run, expect_no_changes: expect_no_changes, request_options: request_options)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @param name [String]
|
|
55
|
+
# @return [Hash] `{"skillId", "definition", "contentHash", "lastModifiedSource", "updatedAt", "versionId"}`.
|
|
56
|
+
def pull_skill(name, request_options: {})
|
|
57
|
+
get_json("v1/skills/pull", { name: name }, request_options)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Converges `{ name:, steps: [...], evals:? }`. Inline `evals` are not part
|
|
61
|
+
# of the flow wire: each converges through {#ensure_eval} after the flow and
|
|
62
|
+
# is reported as `result["evals"]`; a dry run skips them.
|
|
63
|
+
#
|
|
64
|
+
# @param version [Hash, nil] provenance for the version row, `{ label:, notes: }`.
|
|
65
|
+
# @return [Hash] `{"result", "flowId", "versionId", "contentHash", "evals"?}`, or the dry-run plan.
|
|
66
|
+
# @see #ensure_skill for the shared options and errors.
|
|
67
|
+
def ensure_flow(definition, dry_run: false, expect_no_changes: false, on_conflict: nil, release: nil,
|
|
68
|
+
expected_remote_hash: nil, version: nil, request_options: {})
|
|
69
|
+
wire = config_wire(definition)
|
|
70
|
+
options = { onConflict: on_conflict&.to_s, release: release&.to_s, expectedRemoteHash: expected_remote_hash,
|
|
71
|
+
version: version_metadata(version) }
|
|
72
|
+
flow_wire = { "name" => wire["name"], "steps" => wire["steps"] || [] }
|
|
73
|
+
result = converge_config(FLOW, "v1/flows/ensure", wire, flow_wire, options.compact,
|
|
74
|
+
dry_run: dry_run, expect_no_changes: expect_no_changes,
|
|
75
|
+
request_options: request_options)
|
|
76
|
+
inline_evals = Array(wire["evals"])
|
|
77
|
+
return result if result["result"] == "plan" || inline_evals.empty?
|
|
78
|
+
|
|
79
|
+
result.merge("evals" => inline_evals.map { |suite| ensure_eval(suite, request_options: request_options) })
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# @param name [String]
|
|
83
|
+
# @return [Hash] `{"flowId", "definition", "contentHash", "lastModifiedSource", "updatedAt", "versionId"}`.
|
|
84
|
+
def pull_flow(name, request_options: {})
|
|
85
|
+
get_json("v1/flows/pull", { name: name }, request_options)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Converges `{ name:, description:, toolType:, parametersSchema:, config: }`. Never deletes.
|
|
89
|
+
#
|
|
90
|
+
# @return [Hash] `{"result", "toolId", "contentHash"}`, or the dry-run plan.
|
|
91
|
+
# @see #ensure_skill for the shared options and errors.
|
|
92
|
+
def ensure_tool(definition, dry_run: false, expect_no_changes: false, on_conflict: nil,
|
|
93
|
+
expected_remote_hash: nil, request_options: {})
|
|
94
|
+
wire = config_wire(definition)
|
|
95
|
+
options = { onConflict: on_conflict&.to_s, expectedRemoteHash: expected_remote_hash }
|
|
96
|
+
converge_config(TOOL, "v1/tools/ensure", wire, wire, options.compact,
|
|
97
|
+
dry_run: dry_run, expect_no_changes: expect_no_changes, request_options: request_options)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @param name [String]
|
|
101
|
+
# @return [Hash] `{"toolId", "definition", "contentHash", "lastModifiedSource", "updatedAt"}`.
|
|
102
|
+
def pull_tool(name, request_options: {})
|
|
103
|
+
get_json("v1/tools/pull", { name: name }, request_options)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Converges `{ name:, type:, behavior:?, inbound:?, outbound:?, status:? }`
|
|
107
|
+
# as a surface of `product_id`; identity is the name within that product.
|
|
108
|
+
#
|
|
109
|
+
# @param product_id [String]
|
|
110
|
+
# @return [Hash] `{"result", "surfaceId", "contentHash"}`, or the dry-run plan.
|
|
111
|
+
# @see #ensure_skill for the shared options and errors.
|
|
112
|
+
def ensure_surface(product_id, definition, dry_run: false, expect_no_changes: false, on_conflict: nil,
|
|
113
|
+
expected_remote_hash: nil, request_options: {})
|
|
114
|
+
wire = config_wire(definition)
|
|
115
|
+
options = { onConflict: on_conflict&.to_s, expectedRemoteHash: expected_remote_hash }
|
|
116
|
+
converge_config(SURFACE, surface_path(product_id, "ensure"), wire, wire, options.compact,
|
|
117
|
+
dry_run: dry_run, expect_no_changes: expect_no_changes, request_options: request_options,
|
|
118
|
+
memo_scope: product_id.to_s,
|
|
119
|
+
probe_first: !(wire.key?("inbound") || wire.key?("outbound")))
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# @param product_id [String]
|
|
123
|
+
# @param name [String]
|
|
124
|
+
# @return [Hash] `{"surfaceId", "definition", "contentHash", "lastModifiedSource", "updatedAt"}`.
|
|
125
|
+
def pull_surface(product_id, name, request_options: {})
|
|
126
|
+
get_json(surface_path(product_id, "pull"), { name: name }, request_options)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Converges the product row `{ name:, description:?, icon:?, spec:? }`.
|
|
130
|
+
#
|
|
131
|
+
# @return [Hash] `{"result", "productId", "contentHash"}`, or the dry-run plan.
|
|
132
|
+
# @see #ensure_skill for the shared options and errors.
|
|
133
|
+
def ensure_product(definition, dry_run: false, expect_no_changes: false, on_conflict: nil,
|
|
134
|
+
expected_remote_hash: nil, request_options: {})
|
|
135
|
+
wire = config_wire(definition)
|
|
136
|
+
options = { onConflict: on_conflict&.to_s, expectedRemoteHash: expected_remote_hash }
|
|
137
|
+
converge_config(PRODUCT, "v1/products/ensure", wire, wire, options.compact,
|
|
138
|
+
dry_run: dry_run, expect_no_changes: expect_no_changes, request_options: request_options)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# @param name [String]
|
|
142
|
+
# @return [Hash] `{"productId", "definition", "contentHash", "lastModifiedSource", "updatedAt"}`.
|
|
143
|
+
def pull_product(name, request_options: {})
|
|
144
|
+
get_json("v1/products/pull", { name: name }, request_options)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Converges a whole Full Product Object; the server fans out per entity.
|
|
148
|
+
# Ships the full FPO (no hash probe). Non-atomic: inspect `"hasFailures"`
|
|
149
|
+
# and `"entities"` and re-run to self-heal.
|
|
150
|
+
#
|
|
151
|
+
# @param fpo [Hash]
|
|
152
|
+
# @param prune [Boolean] remove product-scoped capabilities and surfaces absent from the FPO.
|
|
153
|
+
# @return [Hash] `{"result", "productId", "contentHash", "entities", "hasFailures"}`.
|
|
154
|
+
def ensure_fpo(fpo, dry_run: false, on_conflict: nil, prune: false, request_options: {})
|
|
155
|
+
body = { fpo: fpo }
|
|
156
|
+
body[:dryRun] = true if dry_run
|
|
157
|
+
body[:onConflict] = on_conflict.to_s if on_conflict
|
|
158
|
+
body[:prune] = true if prune
|
|
159
|
+
config_ensure_request("v1/products/ensure-fpo", body, request_options)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# @param name [String]
|
|
163
|
+
# @return [Hash] `{"productId", "fpo", "contentHash", "warnings"?}`.
|
|
164
|
+
def pull_fpo(name, request_options: {})
|
|
165
|
+
get_json("v1/products/pull-fpo", { name: name }, request_options)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Converges an eval suite `{ name:, target:, cases:, virtual:, ... }`
|
|
169
|
+
# (cases carry their merged graders in `expect`). Never executes it.
|
|
170
|
+
#
|
|
171
|
+
# @return [Hash] `{"result", "suiteId", "contentHash"}`.
|
|
172
|
+
# @raise [ArgumentError] for a virtual suite, which has nothing durable to converge.
|
|
173
|
+
def ensure_eval(definition, request_options: {})
|
|
174
|
+
wire = config_wire(definition)
|
|
175
|
+
if wire["virtual"]
|
|
176
|
+
raise ArgumentError, "Cannot ensure a virtual eval: virtual evals are ephemeral (nothing is persisted to " \
|
|
177
|
+
"converge). Remove virtual: true to converge a durable suite, or run it directly."
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
converge_config(EVAL, "v1/eval/ensure", wire, wire, {}, request_options: request_options)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# @param name [String]
|
|
184
|
+
# @return [Hash] `{"suiteId", "definition", "contentHash", "lastModifiedSource", "updatedAt"}`.
|
|
185
|
+
def pull_eval(name, request_options: {})
|
|
186
|
+
get_json("v1/eval/pull", { name: name }, request_options)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
private
|
|
190
|
+
|
|
191
|
+
# Round-trips through JSON so Symbol keys and values hash exactly as they will be sent.
|
|
192
|
+
def config_wire(definition)
|
|
193
|
+
JSON.parse(JSON.generate(definition.to_h))
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def skill_wire(wire)
|
|
197
|
+
manifest = wire["manifest"].is_a?(Hash) ? wire["manifest"] : {}
|
|
198
|
+
frontmatter = (manifest["frontmatter"] || {}).dup
|
|
199
|
+
runtype_block = flatten_unknown_extensions(manifest["runtype"])
|
|
200
|
+
frontmatter["runtype"] = runtype_block unless runtype_block.empty?
|
|
201
|
+
{ "frontmatter" => frontmatter, "body" => manifest["body"] || "" }
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Spreads a pulled `unknownExtensions` back to top-level `runtype` keys, as SKILL.md stores them.
|
|
205
|
+
def flatten_unknown_extensions(runtype_block)
|
|
206
|
+
return {} unless runtype_block.is_a?(Hash)
|
|
207
|
+
|
|
208
|
+
extensions = runtype_block["unknownExtensions"]
|
|
209
|
+
flattened = runtype_block.except("unknownExtensions")
|
|
210
|
+
extensions.is_a?(Hash) ? flattened.merge(extensions) : flattened
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def surface_path(product_id, action)
|
|
214
|
+
"v1/products/#{URI.encode_uri_component(product_id.to_s)}/surfaces/#{action}"
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def converge_config(kind, path, wire, sent, options, request_options:, dry_run: false,
|
|
218
|
+
expect_no_changes: false, memo_scope: "", probe_first: true)
|
|
219
|
+
name = wire["name"]
|
|
220
|
+
raise ArgumentError, "#{kind.label} ensure requires a definition with a non-empty name" unless
|
|
221
|
+
name.is_a?(String) && !name.empty?
|
|
222
|
+
|
|
223
|
+
if dry_run || expect_no_changes
|
|
224
|
+
plan = config_ensure_request(path, { name: name, definition: sent, dryRun: true, **options },
|
|
225
|
+
request_options)
|
|
226
|
+
return check_config_plan(kind, plan, name, expect_no_changes)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
local_hash = kind.hasher.call(wire)
|
|
230
|
+
memo_key = "#{memo_scope}\0#{name}\0#{local_hash}"
|
|
231
|
+
probe = { "result" => "definitionRequired" }
|
|
232
|
+
if probe_first
|
|
233
|
+
probe = config_ensure_request(
|
|
234
|
+
path, { name: name, contentHash: config_ensure_memo[memo_key] || local_hash, **options },
|
|
235
|
+
request_options
|
|
236
|
+
)
|
|
237
|
+
end
|
|
238
|
+
if probe["result"] == "definitionRequired"
|
|
239
|
+
probe = config_ensure_request(path, { name: name, definition: sent, **options }, request_options)
|
|
240
|
+
if probe["result"] == "definitionRequired"
|
|
241
|
+
raise Runtype::Error, "Server reported definitionRequired for a full-definition request"
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
config_ensure_memo[memo_key] = probe["contentHash"] if probe["result"] != "plan" && probe["contentHash"]
|
|
245
|
+
probe
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def check_config_plan(kind, plan, name, expect_no_changes)
|
|
249
|
+
raise Runtype::Error, "Expected a plan result from dryRun, got #{plan["result"].inspect}" unless
|
|
250
|
+
plan["result"] == "plan"
|
|
251
|
+
if expect_no_changes && kind.drift && (plan["changes"] != "none" || plan["publishPending"] == true)
|
|
252
|
+
raise Runtype::DriftError.new(plan, name: name, entity: kind.label, pull_hint: kind.pull_hint,
|
|
253
|
+
ensure_hint: kind.ensure_hint)
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
plan
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# @return [Hash{String => String}] `scope\0name\0localHash` => server hash.
|
|
260
|
+
def config_ensure_memo
|
|
261
|
+
@config_ensure_memo ||= {}
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
def config_ensure_request(path, body, request_options)
|
|
265
|
+
post_json(path, body, request_options)
|
|
266
|
+
rescue Runtype::APIStatusError => e
|
|
267
|
+
raise Runtype::EnsureConflictError.from_status_error(e) if Runtype::EnsureConflictError.protocol_conflict?(e)
|
|
268
|
+
|
|
269
|
+
raise
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|