runtype 0.5.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 +767 -0
- data/README.md +30 -2
- data/generated/lib/runtype/agent_aliases/types/get_v1agents_id_aliases_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/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/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_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_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_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/products/client.rb +303 -7
- data/generated/lib/runtype/products/types/create_product_comment_request.rb +19 -0
- data/generated/lib/runtype/products/types/create_product_comment_request_author_kind.rb +14 -0
- 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_response_data_agents_item.rb +1 -1
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item.rb +55 -23
- 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_execution_mode.rb → get_v1products_id_activity_response_data_agents_item_data_item_kind.rb} +3 -3
- data/generated/lib/runtype/products/types/{get_v1products_id_activity_response_data_agents_item_data_item_notification_mode.rb → get_v1products_id_activity_response_data_agents_item_data_item_origin.rb} +4 -4
- data/generated/lib/runtype/products/types/{get_v1products_id_activity_response_data_agents_item_data_item_agent_target_resolution.rb → get_v1products_id_activity_response_data_agents_item_data_item_source.rb} +3 -4
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_status.rb +1 -2
- 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/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_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/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_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/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 -2910
- data/lib/runtype/agent_ensure.rb +64 -9
- data/lib/runtype/client.rb +1 -0
- 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 +42 -8
- data/lib/runtype/local_tool_runner.rb +3 -1
- data/lib/runtype/sdk_version.rb +1 -1
- data/lib/runtype.rb +2 -0
- metadata +370 -11
- data/generated/lib/runtype/agents/types/get_v1agents_id_export_runtime_response.rb +0 -25
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_agent_version.rb +0 -17
- data/generated/lib/runtype/products/types/get_v1products_id_activity_response_data_agents_item_data_item_pending_approval.rb +0 -27
data/lib/runtype/agent_ensure.rb
CHANGED
|
@@ -36,12 +36,22 @@ module Runtype
|
|
|
36
36
|
# `deploy:`: `"publish"` also re-aims the `live` alias; default `"none"`.
|
|
37
37
|
# @param deploy [Hash, String, Symbol, nil] activates the saved version at a
|
|
38
38
|
# release alias, e.g. `{ alias: "pr-482" }` or the bare `"live"`. Omit
|
|
39
|
-
# 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.
|
|
40
42
|
# @param expected_remote_hash [String, nil] binds a dry run to its apply:
|
|
41
43
|
# the write proceeds only if the remote still hashes to this value.
|
|
42
44
|
# @param version [Hash, nil] provenance recorded on the version row this
|
|
43
45
|
# converge appends, e.g. `{ label: "a1b2c3d", notes: "CI run 4821" }`.
|
|
44
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.
|
|
45
55
|
# @param request_options [Hash] see {Runtype::Client#dispatch}.
|
|
46
56
|
# @return [Hash] `{"result" => "unchanged"|"created"|"updated", "agentId",
|
|
47
57
|
# "versionId", "contentHash"}`, or for a dry run `{"result" => "plan",
|
|
@@ -50,11 +60,13 @@ module Runtype
|
|
|
50
60
|
# @raise [Runtype::EnsureConflictError] on a 409 (`external_modification`
|
|
51
61
|
# or `remote_changed`).
|
|
52
62
|
# @raise [Runtype::DriftError] with `expect_no_changes:` when the plan is
|
|
53
|
-
# not `"none"
|
|
63
|
+
# not `"none"`, would change a skill binding or, with `release:` or
|
|
64
|
+
# `deploy:`, would move the alias or change its binding names.
|
|
54
65
|
# @raise [ArgumentError] when both `release:` and `deploy:` are given, or
|
|
55
66
|
# when `version:` carries a key other than `label:` and `notes:`.
|
|
56
67
|
def ensure_agent(definition, dry_run: false, expect_no_changes: false, on_conflict: nil, release: nil,
|
|
57
|
-
deploy: nil, expected_remote_hash: nil, version: nil,
|
|
68
|
+
deploy: nil, expected_remote_hash: nil, version: nil, skills: nil, capabilities: nil,
|
|
69
|
+
request_options: {})
|
|
58
70
|
raise ArgumentError, RELEASE_DEPLOY_CONFLICT_MESSAGE if release && deploy
|
|
59
71
|
|
|
60
72
|
definition = Runtype::AgentDefinition.from(definition)
|
|
@@ -63,7 +75,9 @@ module Runtype
|
|
|
63
75
|
release: release&.to_s,
|
|
64
76
|
deploy: deploy_intent(deploy),
|
|
65
77
|
expectedRemoteHash: expected_remote_hash,
|
|
66
|
-
version: version_metadata(version)
|
|
78
|
+
version: version_metadata(version),
|
|
79
|
+
skills: skills&.map(&:to_h),
|
|
80
|
+
capabilities: capabilities&.map(&:to_h)
|
|
67
81
|
}.compact
|
|
68
82
|
|
|
69
83
|
if dry_run || expect_no_changes
|
|
@@ -73,7 +87,7 @@ module Runtype
|
|
|
73
87
|
unless plan["result"] == "plan"
|
|
74
88
|
raise Runtype::Error, "Expected a plan result from dryRun, got #{plan["result"].inspect}"
|
|
75
89
|
end
|
|
76
|
-
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)
|
|
77
91
|
|
|
78
92
|
return plan
|
|
79
93
|
end
|
|
@@ -107,13 +121,28 @@ module Runtype
|
|
|
107
121
|
|
|
108
122
|
private
|
|
109
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
|
+
|
|
110
138
|
# Normalizes the two accepted spellings of `deploy:` into the wire shape.
|
|
111
|
-
# 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
|
|
112
140
|
# way. The alias name itself is never resolved client-side.
|
|
113
141
|
#
|
|
114
142
|
# @param deploy [Hash, String, Symbol, nil]
|
|
115
|
-
# @return [Hash, nil] `{ alias: "<name>" }`, or nil when nothing was asked.
|
|
116
|
-
# @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.
|
|
117
146
|
def deploy_intent(deploy)
|
|
118
147
|
return nil if deploy.nil?
|
|
119
148
|
return { alias: deploy.to_s } unless deploy.is_a?(Hash)
|
|
@@ -121,7 +150,33 @@ module Runtype
|
|
|
121
150
|
name = deploy[:alias] || deploy["alias"]
|
|
122
151
|
raise ArgumentError, "deploy: needs an alias name, e.g. deploy: { alias: \"live\" }." if name.nil?
|
|
123
152
|
|
|
124
|
-
{ 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
|
|
125
180
|
end
|
|
126
181
|
|
|
127
182
|
# Normalizes `version:` into the wire shape. Keys may be Symbols or Strings;
|
data/lib/runtype/client.rb
CHANGED
|
@@ -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
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "digest"
|
|
4
|
+
|
|
5
|
+
module Runtype
|
|
6
|
+
# Canonical content hashes for the config-as-code ensure surfaces other than
|
|
7
|
+
# agents (see {AgentDefinition.content_hash_for}). Each is a wire contract
|
|
8
|
+
# with the API and the TypeScript SDK, pinned by the corpora under
|
|
9
|
+
# `packages/shared/test-fixtures/*-content-hash/cases.json`. A key absent
|
|
10
|
+
# from a Hash plays JavaScript's `undefined` (dropped); `nil` plays `null`.
|
|
11
|
+
module ContentHash
|
|
12
|
+
MAX_ARRAY_INDEX = 4_294_967_294
|
|
13
|
+
FPO_OPTIONAL_SECTIONS = %w[records schedules secrets evals skills].freeze
|
|
14
|
+
SERVER_SET_STACK_FIELDS = %w[detected declared hiddenAt].freeze
|
|
15
|
+
|
|
16
|
+
module_function
|
|
17
|
+
|
|
18
|
+
# @param steps [Array<Hash>] a flow's steps.
|
|
19
|
+
# @return [String] SHA-256 hex over the canonical step list.
|
|
20
|
+
def flow(steps)
|
|
21
|
+
sha256(normalize_flow_steps(steps))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @param steps [Array<Hash>]
|
|
25
|
+
# @return [Array<Hash>] the canonical steps, sorted by `order`.
|
|
26
|
+
def normalize_flow_steps(steps)
|
|
27
|
+
Array(steps).each_with_index
|
|
28
|
+
.map { |step, index| legacy_flow_step_identity(stringify(step), index) }
|
|
29
|
+
.each_with_index
|
|
30
|
+
.sort_by { |step, index| [step_order(step), index] }
|
|
31
|
+
.map { |step, _index| normalize_flow_step(step) }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @param definition [Hash] `{ name:, manifest: { frontmatter:, runtype:, body: } }`.
|
|
35
|
+
# @return [String] SHA-256 hex; the frontmatter name is identity, not content.
|
|
36
|
+
def skill(definition)
|
|
37
|
+
manifest = plain(stringify(definition)["manifest"])
|
|
38
|
+
frontmatter = plain(manifest["frontmatter"]).except("name")
|
|
39
|
+
runtype_block = manifest["runtype"]
|
|
40
|
+
body = manifest["body"]
|
|
41
|
+
sha256(
|
|
42
|
+
"frontmatter" => normalize_value(frontmatter),
|
|
43
|
+
"runtype" => runtype_block.is_a?(Hash) ? normalize_value(runtype_block) : {},
|
|
44
|
+
"body" => body.is_a?(String) ? body : ""
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# @param definition [Hash] `{ name:, description:, toolType:, parametersSchema:, config: }`.
|
|
49
|
+
# @return [String] SHA-256 hex; the name is identity, not content.
|
|
50
|
+
def tool(definition)
|
|
51
|
+
wire = stringify(definition)
|
|
52
|
+
normalized = {}
|
|
53
|
+
normalized["toolType"] = wire["toolType"] if wire.key?("toolType")
|
|
54
|
+
normalized["description"] = wire["description"] if truthy?(wire["description"])
|
|
55
|
+
normalized["parametersSchema"] = object_or_empty(wire["parametersSchema"])
|
|
56
|
+
normalized["config"] = object_or_empty(wire["config"])
|
|
57
|
+
sha256(normalized)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @param definition [Hash] `{ name:, type:, behavior:?, inbound:?, outbound:?, status:? }`.
|
|
61
|
+
# @return [String] SHA-256 hex.
|
|
62
|
+
def surface(definition)
|
|
63
|
+
wire = stringify(definition)
|
|
64
|
+
type_entry = wire.key?("type") ? { "type" => wire["type"] } : {}
|
|
65
|
+
behavior = wire["behavior"]
|
|
66
|
+
normalized = type_entry.dup
|
|
67
|
+
normalized["behavior"] = behavior.is_a?(Hash) ? normalize_value(type_entry.merge(behavior)) : type_entry.dup
|
|
68
|
+
normalized["status"] = truthy?(wire["status"]) ? wire["status"] : "draft"
|
|
69
|
+
normalized["environment"] = "development"
|
|
70
|
+
sha256(normalized)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @param definition [Hash] `{ name:, description:?, icon:?, spec:? }`.
|
|
74
|
+
# @return [String] SHA-256 hex; the name is identity, not content.
|
|
75
|
+
def product(definition)
|
|
76
|
+
wire = stringify(definition)
|
|
77
|
+
normalized = {}
|
|
78
|
+
normalized["description"] = wire["description"] if truthy?(wire["description"])
|
|
79
|
+
normalized["icon"] = wire["icon"] if truthy?(wire["icon"])
|
|
80
|
+
normalized["spec"] = object_or_empty(as_saved_stack(wire["spec"]))
|
|
81
|
+
sha256(normalized)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# @param fpo [Hash] a Full Product Object.
|
|
85
|
+
# @return [String] SHA-256 hex; `_meta` and `product.name` are excluded.
|
|
86
|
+
def fpo(fpo)
|
|
87
|
+
wire = stringify(fpo)
|
|
88
|
+
normalized = {}
|
|
89
|
+
normalized["version"] = normalize_value(wire["version"]) unless wire["version"].nil?
|
|
90
|
+
normalized["product"] = normalize_value(plain(wire["product"]).except("name"))
|
|
91
|
+
%w[capabilities tools surfaces].each { |section| normalized[section] = normalize_value(wire[section] || []) }
|
|
92
|
+
FPO_OPTIONAL_SECTIONS.each do |section|
|
|
93
|
+
normalized[section] = normalize_value(wire[section]) unless wire[section].nil?
|
|
94
|
+
end
|
|
95
|
+
sha256(normalized)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# @param definition [Hash] an eval suite `{ name:, target:, cases:, virtual:, ... }`.
|
|
99
|
+
# @return [String] SHA-256 hex; cases sort by name, grader order is kept.
|
|
100
|
+
def eval_suite(definition)
|
|
101
|
+
wire = stringify(definition)
|
|
102
|
+
mode = truthy?(wire["recordedToolMode"]) ? wire["recordedToolMode"] : "next_step"
|
|
103
|
+
policy = truthy?(wire["recordedToolUnmatchedPolicy"]) ? wire["recordedToolUnmatchedPolicy"] : "fail"
|
|
104
|
+
canonical = {}
|
|
105
|
+
canonical["target"] = sort_keeping_nil(wire["target"]) if wire.key?("target")
|
|
106
|
+
canonical["virtual"] = wire["virtual"] if wire.key?("virtual")
|
|
107
|
+
canonical["recordedToolMode"] = mode unless mode == "next_step"
|
|
108
|
+
canonical["recordedToolUnmatchedPolicy"] = policy unless policy == "fail"
|
|
109
|
+
cases = Array(wire["cases"]).map { |entry| plain(entry) }
|
|
110
|
+
canonical["cases"] = cases.each_with_index
|
|
111
|
+
.sort_by { |entry, index| [utf16(entry["name"].to_s), index] }
|
|
112
|
+
.map { |entry, _index| canonical_case(entry) }
|
|
113
|
+
sha256(canonical)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Drops nil entries and orders object keys the way `JSON.stringify` emits
|
|
117
|
+
# sorted keys, recursively; arrays keep their order.
|
|
118
|
+
#
|
|
119
|
+
# @param value [Object]
|
|
120
|
+
# @return [Object]
|
|
121
|
+
def normalize_value(value)
|
|
122
|
+
case value
|
|
123
|
+
when Array then value.map { |entry| normalize_value(entry) }
|
|
124
|
+
when Hash
|
|
125
|
+
entries = stringify(value)
|
|
126
|
+
entries.keys.sort_by { |key| json_key_order(key) }.each_with_object({}) do |key, out|
|
|
127
|
+
out[key] = normalize_value(entries[key]) unless entries[key].nil?
|
|
128
|
+
end
|
|
129
|
+
else value
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# @return [String]
|
|
134
|
+
def sha256(value)
|
|
135
|
+
Digest::SHA256.hexdigest(Runtype::CanonicalJSON.generate(value))
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def canonical_case(entry)
|
|
139
|
+
canonical = {}
|
|
140
|
+
canonical["name"] = entry["name"] if entry.key?("name")
|
|
141
|
+
canonical["input"] = sort_keeping_nil(entry["input"]) if entry.key?("input")
|
|
142
|
+
canonical["expected"] = sort_keeping_nil(entry["expected"]) if entry.key?("expected")
|
|
143
|
+
canonical["expect"] = Array(entry["expect"]).map { |grader| sort_keeping_nil(grader) }
|
|
144
|
+
canonical
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def normalize_flow_step(step)
|
|
148
|
+
normalized = {
|
|
149
|
+
"type" => step["type"].is_a?(String) ? step["type"] : "",
|
|
150
|
+
"name" => step["name"].is_a?(String) ? step["name"] : "",
|
|
151
|
+
"enabled" => step["enabled"] != false
|
|
152
|
+
}
|
|
153
|
+
normalized["when"] = step["when"] if step["when"].is_a?(String)
|
|
154
|
+
normalized["config"] = normalize_flow_config(step["config"])
|
|
155
|
+
normalized["order"] = step_order(step)
|
|
156
|
+
normalized
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Sorts keys and keeps nil; one level of array items is normalized, deeper
|
|
160
|
+
# arrays keep their insertion key order, exactly as the TypeScript SDK does.
|
|
161
|
+
def normalize_flow_config(config)
|
|
162
|
+
return {} unless config.is_a?(Hash)
|
|
163
|
+
|
|
164
|
+
entries = stringify(config)
|
|
165
|
+
entries.keys.sort_by { |key| json_key_order(key) }.each_with_object({}) do |key, out|
|
|
166
|
+
value = entries[key]
|
|
167
|
+
out[key] =
|
|
168
|
+
case value
|
|
169
|
+
when Hash then normalize_flow_config(value)
|
|
170
|
+
when Array then value.map { |item| item.is_a?(Hash) ? normalize_flow_config(item) : js_emission_order(item) }
|
|
171
|
+
else value
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# The key order `JSON.stringify` gives an object nobody sorted: canonical
|
|
177
|
+
# array indexes first, then insertion order.
|
|
178
|
+
def js_emission_order(value)
|
|
179
|
+
case value
|
|
180
|
+
when Array then value.map { |entry| js_emission_order(entry) }
|
|
181
|
+
when Hash
|
|
182
|
+
entries = stringify(value)
|
|
183
|
+
indexes, others = entries.keys.partition { |key| json_key_order(key).first.zero? }
|
|
184
|
+
(indexes.sort_by { |key| json_key_order(key) } + others).to_h { |key| [key, js_emission_order(entries[key])] }
|
|
185
|
+
else value
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def sort_keeping_nil(value)
|
|
190
|
+
case value
|
|
191
|
+
when Array then value.map { |entry| sort_keeping_nil(entry) }
|
|
192
|
+
when Hash
|
|
193
|
+
entries = stringify(value)
|
|
194
|
+
entries.keys.sort_by { |key| json_key_order(key) }.to_h { |key| [key, sort_keeping_nil(entries[key])] }
|
|
195
|
+
else value
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# A legacy step missing `name`/`order` defaults to `Step N`/`N`, as flow pull emits.
|
|
200
|
+
def legacy_flow_step_identity(step, index)
|
|
201
|
+
step.merge(
|
|
202
|
+
"name" => step["name"].is_a?(String) ? step["name"] : "Step #{index + 1}",
|
|
203
|
+
"order" => step["order"].is_a?(Numeric) ? step["order"] : index + 1
|
|
204
|
+
)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def step_order(step)
|
|
208
|
+
order = step.is_a?(Hash) ? step["order"] : nil
|
|
209
|
+
order.is_a?(Numeric) ? order : 0
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def json_key_order(key)
|
|
213
|
+
if key.match?(/\A(?:0|[1-9]\d*)\z/) && key.to_i <= MAX_ARRAY_INDEX
|
|
214
|
+
[0, key.to_i, []]
|
|
215
|
+
else
|
|
216
|
+
[1, 0, utf16(key)]
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def utf16(value)
|
|
221
|
+
value.encode("UTF-16LE").unpack("v*")
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def object_or_empty(value)
|
|
225
|
+
value.is_a?(Hash) ? normalize_value(value) : {}
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# `spec` with its stack as a save stores it: server-set fields dropped, `hidden` deduplicated.
|
|
229
|
+
def as_saved_stack(spec)
|
|
230
|
+
return spec unless spec.is_a?(Hash)
|
|
231
|
+
|
|
232
|
+
wire = stringify(spec)
|
|
233
|
+
return wire unless wire["stack"].is_a?(Hash)
|
|
234
|
+
|
|
235
|
+
stack = stringify(wire["stack"]).except(*SERVER_SET_STACK_FIELDS)
|
|
236
|
+
stack["hidden"] = stack["hidden"].uniq if stack["hidden"].is_a?(Array)
|
|
237
|
+
wire.merge("stack" => stack)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def plain(value)
|
|
241
|
+
value.is_a?(Hash) ? stringify(value) : {}
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def stringify(value)
|
|
245
|
+
value.is_a?(Hash) ? value.to_h { |key, entry| [key.to_s, entry] } : {}
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# JavaScript truthiness for the values a definition can hold.
|
|
249
|
+
def truthy?(value)
|
|
250
|
+
!(value.nil? || value == false || value == "" || (value.is_a?(Numeric) && value.zero?))
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
private_class_method :canonical_case, :normalize_flow_step, :normalize_flow_config, :js_emission_order,
|
|
254
|
+
:sort_keeping_nil, :step_order, :json_key_order, :utf16, :object_or_empty, :plain,
|
|
255
|
+
:stringify, :truthy?
|
|
256
|
+
end
|
|
257
|
+
end
|