qoder-agent-sdk 1.0.0__tar.gz → 1.0.2__tar.gz
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.
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/PKG-INFO +1 -1
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/pyproject.toml +1 -1
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/__init__.py +12 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_cli_version.py +1 -1
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/cloud_agent.py +1 -1
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/query.py +2 -1
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_version.py +1 -1
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/client.py +2 -1
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/types.py +47 -6
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/test_cloud_agent_query.py +18 -0
- qoder_agent_sdk-1.0.2/tests/query_model_policy/functional/test_list_available_models_rich_fields.py +133 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/test_model_policy_e2e.py +12 -17
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/unit/test_pull_suppresses_model_flag.py +43 -7
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_download_cli.py +4 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/.gitignore +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/LICENSE +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/README.md +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_bundled/.gitignore +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_errors.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/auth_helpers.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/client.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/mcp_handler.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/mcp_serialize.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/message_parser.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/sdk_mcp_transport.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/session_mutations.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/sessions.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/transport/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/transport/subprocess_cli.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/auth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/py.typed +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/query.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/settings.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/dotenv.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/e2e.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/e2e_env.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/fake_qodercli.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_description.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_disallowed_tools.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_effort.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_initial_prompt.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_max_turns.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_mcp_servers.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_model.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_permission_mode.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_prompt.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_skills.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_tools.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_disallowed_tools_empty.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_effort_max.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_empty_agents.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_initial_prompt_empty.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_many_agents.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_max_turns_zero.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_multi_agent_task_isolation.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_permission_mode_default.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_tools_empty.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_tools_non_existent.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_unregistered_session_agent.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_register_custom_subagent.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_session_agent.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_session_agent_from_sdk_agents.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_isolated_context.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_agent_selection.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_prompt.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_timeout.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_supported_agents_list.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/contract/test_subprocess_auth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/e2e/test_access_token_auth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/e2e/test_job_token_auth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/e2e/test_qodercli_auth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/unit/test_auth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/unit/test_dotenv.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/_helpers.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/test_client_multi_turn_session.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/test_create_agent_session_stream.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/test_multi_turn_session.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_compact.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_config_change.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_cwd_changed.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_decision_merge.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_elicitation.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_elicitation_result.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_file_changed.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_hooks_e2e.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_instructions_loaded.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_notification.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_permission_denied.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_permission_request.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_post_tool_use.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_post_tool_use_failure.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_pre_tool_use.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_session_end.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_session_start.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_setup.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_stop.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_stop_failure.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_subagent.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_task_completed.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_task_created.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_teammate_idle.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_user_prompt_submit.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_worktree.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/_e2e.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_can_use_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_client_and_streaming.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_external_prompt_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_options_and_modes.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_permission_modes.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_permission_request_hook_allow_skips_can_use_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_permission_request_hook_deny_fires_denied.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_permission_updates.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_settings_and_mcp_policy.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_streaming_async_iterable_can_use_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_bogus_plugin_dir.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_broken_plugin_content.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_local_plugin_init.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_multiple_plugin_dirs.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_plugin_contributes_resources.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_reload_plugins_commands.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_reload_plugins_error_count.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_reload_plugins_response_shape.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/unit/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/unit/test_plugin_dir_argv.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/unit/test_reload_plugins_control_request.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/unit/test_settings_passthrough.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_at_file_reference.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_client_multi_turn_io.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_compact_context.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_multimodal_content_blocks.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_partial_stream_events.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_query_stream_turns_io.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_server_output_style_info.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_stream_user_message_io.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_string_prompt_io.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_system_prompt.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/elicit_mcp_server.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/fake_oauth_mcp_server.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/minimal_mcp_server.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/sse_mcp_server.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_allowed_mcp_server_names_exempts_sdk.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_allowed_mcp_server_names_filters_stdio.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_control_request_timeout_does_not_poison_runner.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_elicitation_hook_probe.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_elicitation_result_hook_probe.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_elicitation_url_mode_unsupported.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_http_server_public_deepwiki.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_http_sse_bogus_url_not_crashing.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_mcp_server_status_metadata_fields.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_mcp_server_status_point_in_time_snapshot.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_mcp_status_empty_when_no_servers.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_mixed_inprocess_and_stdio_servers.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_mixed_three_way_transports.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_authenticate_custom_redirect_uri.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_authenticate_returns_url_with_dcr.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_authenticate_silent_refresh.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_clear_auth_resets_to_needs_auth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_inject_token_connects.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_needs_auth_status.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_submit_callback_completes_flow.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_token_persists_across_sessions.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_permission_prompt_tool_probe.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_sdk_mcp_annotations_not_echoed_in_status.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_sdk_mcp_close_tears_down_transport.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_sdk_mcp_multi_turn_reuse.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_sdk_mcp_multiple_servers_isolated.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_sdk_mcp_server_connected_status.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_sdk_mcp_tool_description_passthrough.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_server_name_special_chars_prefix.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_sse_server_headers_and_connection.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_stdio_grandchild_reclaim_on_close.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_stdio_server_lifecycle.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_strict_mcp_config_blocks_external_config.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_cli_args_allowed_mcp_server_names.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_cli_args_mcp_config.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_cli_args_permission_prompt_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_cli_args_strict_mcp_config.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_create_sdk_mcp_server.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_handler_accepts_extra_helper.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_inbound_elicitation_callback.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_inbound_elicitation_default_cancel.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_inbound_get_model_policy.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_mcp_authenticate_response_variants.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_mcp_server_status_request.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_mcp_server_status_timeout.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_mcp_toggle_and_reconnect_requests.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_sdk_mcp_handler_extra_signal.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_sdk_mcp_handler_non_content_normalization.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_sdk_server_split_from_process_servers.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/test_model_selection_e2e_logging.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/test_model_selection_logging.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/unit/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/unit/test_list_byok_providers.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_capture_checkpoint_uuid_from_stream.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_enable_file_checkpointing.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_mid_stream_rewind.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_multiple_checkpoints_rewind.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_replay_user_messages_checkpoint_uuid.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_resume_session_rewind.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_bash_changes_not_tracked.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_cross_session_rejected.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_directory_ops_not_undone.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_dry_run_with_checkpoint.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_files_success.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_local_files_only.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_malformed_message_id.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_preserves_conversation.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_stats.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_unknown_message.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_without_checkpointing.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_continue_latest_session.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_fork_session.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_new_client_session.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_new_query_session.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_new_session_with_session_id.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_resume_session.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_agent_preloaded_skills.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_builtin_skills_visibility.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_default_skills_policy.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_enable_all_skills.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_enable_named_skills.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_plugin_skill_in_init.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_settings_skill_overrides.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/unit/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/unit/test_skills_argv.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_build_wheel.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_client.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_control_request_timeout.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_errors.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_integration.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_mcp_dynamic.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_mcp_large_output.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_mcp_oauth.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_message_parser.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_permission_alignment.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_query.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_rate_limit_event_repro.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_sdk_mcp_integration.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_sdk_mcp_routing.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_session_mutations.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_sessions.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_streaming_client.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_subprocess_buffering.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_tool_callbacks.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_transport.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_types.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/__init__.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/conftest.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_allowedTools_disallowedTools_conflict_priority.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_canUseTool_throws_error.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_concurrent_multiple_tool_uses.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_createSdkMcpServer_many_tools.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_long_running_vs_controlRequestTimeoutMs.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_returns_large_content.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_returns_malformed_result.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_returns_undefined.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_model_calls_unknown_tool_functional.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_tool_input_deeply_nested_schema.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_tool_input_many_fields.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_empty_tools.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_mcpServers_option.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_multiple_tools.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_name_routes_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_version.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_isError_true.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_isError_with_structured_data.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_throws_async_rejection.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_throws_non_Error.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_throws_sync_Error.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_isError_allows_agent_retry.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_allowedTools_permits_mcp_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_allowedTools_server_pattern.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_allow_passthrough.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_conditional_on_input.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_deny.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_deny_with_interrupt.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_receives_mcp_toolName_format.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_updatedInput.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_updatedPermissions.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_disallowedTools_blocks_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_mode_bypassPermissions_with_mcp_tool.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_postToolUse_hook_additionalContext.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_preToolUse_hook_updatedInput.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_empty_content_array.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_image_content.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_multiple_content_blocks.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_text_content.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_destructiveHint.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_handler_receives_args_and_returns_content.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_input_schema_describe.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_input_schema_nested.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_input_schema_zod_shape.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_name_and_description.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_openWorldHint.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_readOnlyHint.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_duplicate_tool_name.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_empty_server_name.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_empty_tool_description.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_empty_tool_name.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_mcp_handler.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_sdk_mcp_transport.py +0 -0
- {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_tool_helper.py +0 -0
|
@@ -128,10 +128,16 @@ from .types import (
|
|
|
128
128
|
McpToolAnnotations,
|
|
129
129
|
McpToolInfo,
|
|
130
130
|
Message,
|
|
131
|
+
ModelContextConfig,
|
|
132
|
+
ModelContextWindowEntry,
|
|
133
|
+
ModelEffortEntry,
|
|
131
134
|
ModelInfo,
|
|
132
135
|
ModelPolicyContext,
|
|
133
136
|
ModelPolicyProvider,
|
|
134
137
|
ModelPolicyResult,
|
|
138
|
+
ModelThinkingConfig,
|
|
139
|
+
ModelThinkingDisabled,
|
|
140
|
+
ModelThinkingEnabled,
|
|
135
141
|
OAuthToken,
|
|
136
142
|
OnElicitation,
|
|
137
143
|
OnMcpOAuthRequired,
|
|
@@ -936,6 +942,12 @@ __all__ = [
|
|
|
936
942
|
"ModelPolicyTimeoutError",
|
|
937
943
|
# Model Policy
|
|
938
944
|
"ModelInfo",
|
|
945
|
+
"ModelContextConfig",
|
|
946
|
+
"ModelContextWindowEntry",
|
|
947
|
+
"ModelEffortEntry",
|
|
948
|
+
"ModelThinkingConfig",
|
|
949
|
+
"ModelThinkingDisabled",
|
|
950
|
+
"ModelThinkingEnabled",
|
|
939
951
|
"ModelPolicyContext",
|
|
940
952
|
"ModelPolicyProvider",
|
|
941
953
|
"ModelPolicyResult",
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/cloud_agent.py
RENAMED
|
@@ -34,7 +34,7 @@ from ..types import (
|
|
|
34
34
|
from .auth_helpers import once_callback
|
|
35
35
|
|
|
36
36
|
CLOUD_AGENT_API_BASE_ENV = "QODER_CLOUD_AGENT_API_BASE"
|
|
37
|
-
DEFAULT_CLOUD_AGENT_API_BASE = "https://
|
|
37
|
+
DEFAULT_CLOUD_AGENT_API_BASE = "https://api.qoder.com/api/v1/cloud"
|
|
38
38
|
|
|
39
39
|
CLOUD_EVENT_AGENT_MESSAGE = "agent.message"
|
|
40
40
|
CLOUD_EVENT_MODEL_REQUEST_END = "span.model_request_end"
|
|
@@ -1290,7 +1290,8 @@ class Query:
|
|
|
1290
1290
|
|
|
1291
1291
|
Sends a ``get_models`` control request and returns the ``models``
|
|
1292
1292
|
array from the response. Each entry is a :class:`ModelInfo`-shaped
|
|
1293
|
-
dict
|
|
1293
|
+
dict, including rich catalog fields such as ``context_config`` and
|
|
1294
|
+
``thinking_config`` when the CLI provides them.
|
|
1294
1295
|
|
|
1295
1296
|
Returns:
|
|
1296
1297
|
A list of model info dicts, or an empty list when the CLI
|
|
@@ -317,7 +317,8 @@ class QoderSDKClient:
|
|
|
317
317
|
"""Query the CLI for the list of available models.
|
|
318
318
|
|
|
319
319
|
Returns the current set of models the CLI exposes. Each entry is a
|
|
320
|
-
:class:`ModelInfo` dict
|
|
320
|
+
:class:`ModelInfo` dict, including rich catalog fields such as
|
|
321
|
+
``context_config`` and ``thinking_config`` when the CLI provides them.
|
|
321
322
|
|
|
322
323
|
Returns:
|
|
323
324
|
A list of model info dicts, or an empty list when no models
|
|
@@ -5,7 +5,7 @@ import sys
|
|
|
5
5
|
from collections.abc import Awaitable, Callable
|
|
6
6
|
from dataclasses import dataclass, field
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import TYPE_CHECKING, Any, Literal
|
|
8
|
+
from typing import TYPE_CHECKING, Any, Literal, TypeAlias
|
|
9
9
|
|
|
10
10
|
from .auth import InternalAuthOptions
|
|
11
11
|
|
|
@@ -2022,16 +2022,57 @@ QoderModelPurpose = Literal[
|
|
|
2022
2022
|
"""LLM call purpose sent by the CLI in a get_model_policy request."""
|
|
2023
2023
|
|
|
2024
2024
|
|
|
2025
|
-
class
|
|
2025
|
+
class ModelContextWindowEntry(TypedDict):
|
|
2026
|
+
"""Context-window entry returned in a model catalog response."""
|
|
2027
|
+
|
|
2028
|
+
token_count: int
|
|
2029
|
+
is_default: NotRequired[bool]
|
|
2030
|
+
|
|
2031
|
+
|
|
2032
|
+
ModelContextConfig: TypeAlias = dict[str, ModelContextWindowEntry]
|
|
2033
|
+
"""Server-side ``context_config``, keyed by tier label such as ``200K``."""
|
|
2034
|
+
|
|
2035
|
+
|
|
2036
|
+
class ModelEffortEntry(TypedDict, total=False):
|
|
2037
|
+
"""Thinking-effort entry returned in a model catalog response."""
|
|
2038
|
+
|
|
2039
|
+
description: str
|
|
2040
|
+
is_default: bool
|
|
2041
|
+
|
|
2042
|
+
|
|
2043
|
+
class ModelThinkingDisabled(TypedDict, total=False):
|
|
2044
|
+
"""Configuration shown when thinking is disabled for a model."""
|
|
2045
|
+
|
|
2046
|
+
description: str
|
|
2047
|
+
|
|
2048
|
+
|
|
2049
|
+
class ModelThinkingEnabled(TypedDict, total=False):
|
|
2050
|
+
"""Configuration shown when thinking is enabled for a model."""
|
|
2051
|
+
|
|
2052
|
+
description: str
|
|
2053
|
+
efforts: dict[str, ModelEffortEntry]
|
|
2054
|
+
is_default: bool
|
|
2055
|
+
|
|
2056
|
+
|
|
2057
|
+
class ModelThinkingConfig(TypedDict, total=False):
|
|
2058
|
+
"""Server-side ``thinking_config`` block, preserved 1:1."""
|
|
2059
|
+
|
|
2060
|
+
disabled: ModelThinkingDisabled
|
|
2061
|
+
enabled: ModelThinkingEnabled
|
|
2062
|
+
|
|
2063
|
+
|
|
2064
|
+
class ModelInfo(TypedDict):
|
|
2026
2065
|
"""Model entry returned by the CLI in get_model_policy requests."""
|
|
2027
2066
|
|
|
2028
2067
|
value: str
|
|
2029
2068
|
displayName: str
|
|
2030
|
-
isEnabled: bool
|
|
2031
|
-
isFree: bool
|
|
2032
|
-
priceFactor: float
|
|
2033
2069
|
description: str
|
|
2034
|
-
|
|
2070
|
+
isEnabled: bool
|
|
2071
|
+
isFree: NotRequired[bool]
|
|
2072
|
+
priceFactor: NotRequired[float]
|
|
2073
|
+
isNew: NotRequired[bool]
|
|
2074
|
+
context_config: NotRequired[ModelContextConfig]
|
|
2075
|
+
thinking_config: NotRequired[ModelThinkingConfig]
|
|
2035
2076
|
|
|
2036
2077
|
|
|
2037
2078
|
class ModelPolicyContext(TypedDict, total=False):
|
|
@@ -435,6 +435,24 @@ async def test_cloud_agent_uses_existing_agent_to_create_session(
|
|
|
435
435
|
}
|
|
436
436
|
|
|
437
437
|
|
|
438
|
+
def test_cloud_agent_uses_api_qoder_com_as_default_openapi_prefix(
|
|
439
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
440
|
+
) -> None:
|
|
441
|
+
monkeypatch.delenv("QODER_CLOUD_AGENT_API_BASE", raising=False)
|
|
442
|
+
|
|
443
|
+
q = CloudAgentQuery(
|
|
444
|
+
prompt="hello default endpoint",
|
|
445
|
+
options=QoderAgentOptions(
|
|
446
|
+
auth=access_token("test-pat"),
|
|
447
|
+
experimental_cloud_agent={"session": {"id": "sess_existing"}},
|
|
448
|
+
),
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
q._prepare_connection()
|
|
452
|
+
|
|
453
|
+
assert q._api_base == "https://api.qoder.com/api/v1/cloud"
|
|
454
|
+
|
|
455
|
+
|
|
438
456
|
@pytest.mark.asyncio
|
|
439
457
|
async def test_cloud_agent_usage_and_text_blocks_flow_into_result(
|
|
440
458
|
monkeypatch: pytest.MonkeyPatch,
|
qoder_agent_sdk-1.0.2/tests/query_model_policy/functional/test_list_available_models_rich_fields.py
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"""Functional test for rich fields returned by ``get_available_models()``.
|
|
2
|
+
|
|
3
|
+
The SDK should preserve the model-catalog payload shape from qodercli. In
|
|
4
|
+
particular, server-side snake_case blocks such as ``context_config`` and
|
|
5
|
+
``thinking_config`` must pass through without flattening or renaming.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
import pytest
|
|
13
|
+
|
|
14
|
+
from tests._shared.e2e import client, has_qoder_cli, no_qoder_cli_reason
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _is_json_number(value: Any) -> bool:
|
|
18
|
+
return isinstance(value, (int, float)) and not isinstance(value, bool)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@pytest.mark.e2e
|
|
22
|
+
@pytest.mark.asyncio
|
|
23
|
+
@pytest.mark.timeout(60)
|
|
24
|
+
async def test_get_available_models_reports_and_validates_returned_fields():
|
|
25
|
+
if not has_qoder_cli():
|
|
26
|
+
pytest.skip(no_qoder_cli_reason())
|
|
27
|
+
|
|
28
|
+
async with client(
|
|
29
|
+
cwd="/tmp",
|
|
30
|
+
permission_mode="bypassPermissions",
|
|
31
|
+
allow_dangerously_skip_permissions=True,
|
|
32
|
+
model="qmodel",
|
|
33
|
+
max_turns=1,
|
|
34
|
+
) as q:
|
|
35
|
+
models = await q.get_available_models()
|
|
36
|
+
|
|
37
|
+
assert models, "expected non-empty model list"
|
|
38
|
+
returned_fields = sorted({key for model in models for key in model})
|
|
39
|
+
print("get_available_models returned fields:", ", ".join(returned_fields))
|
|
40
|
+
|
|
41
|
+
for model in models:
|
|
42
|
+
assert isinstance(model.get("value"), str)
|
|
43
|
+
if "displayName" in model:
|
|
44
|
+
assert isinstance(model["displayName"], str)
|
|
45
|
+
if "description" in model:
|
|
46
|
+
assert isinstance(model["description"], str)
|
|
47
|
+
if "isEnabled" in model:
|
|
48
|
+
assert isinstance(model["isEnabled"], bool)
|
|
49
|
+
if "isNew" in model:
|
|
50
|
+
assert isinstance(model["isNew"], bool)
|
|
51
|
+
if "isFree" in model:
|
|
52
|
+
assert isinstance(model["isFree"], bool)
|
|
53
|
+
if "priceFactor" in model:
|
|
54
|
+
assert _is_json_number(model["priceFactor"])
|
|
55
|
+
|
|
56
|
+
with_context = next(
|
|
57
|
+
(
|
|
58
|
+
model
|
|
59
|
+
for model in models
|
|
60
|
+
if isinstance(model.get("context_config"), dict) and model["context_config"]
|
|
61
|
+
),
|
|
62
|
+
None,
|
|
63
|
+
)
|
|
64
|
+
if with_context is None:
|
|
65
|
+
print("get_available_models did not return context_config")
|
|
66
|
+
else:
|
|
67
|
+
context_config = with_context["context_config"]
|
|
68
|
+
context_defaults = 0
|
|
69
|
+
for tier, entry in context_config.items():
|
|
70
|
+
assert isinstance(tier, str)
|
|
71
|
+
assert isinstance(entry, dict), (
|
|
72
|
+
f"context_config[{tier}] on {with_context.get('value')} must be a dict"
|
|
73
|
+
)
|
|
74
|
+
assert _is_json_number(entry.get("token_count")), (
|
|
75
|
+
f"context_config[{tier}].token_count must be numeric, got {entry!r}"
|
|
76
|
+
)
|
|
77
|
+
if "is_default" in entry:
|
|
78
|
+
assert isinstance(entry["is_default"], bool)
|
|
79
|
+
if entry["is_default"]:
|
|
80
|
+
context_defaults += 1
|
|
81
|
+
assert context_defaults <= 1, (
|
|
82
|
+
"at most one context_config tier may be is_default on "
|
|
83
|
+
f"{with_context.get('value')}"
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
with_thinking = next(
|
|
87
|
+
(
|
|
88
|
+
model
|
|
89
|
+
for model in models
|
|
90
|
+
if isinstance(model.get("thinking_config"), dict)
|
|
91
|
+
and model["thinking_config"]
|
|
92
|
+
),
|
|
93
|
+
None,
|
|
94
|
+
)
|
|
95
|
+
if with_thinking is None:
|
|
96
|
+
print("get_available_models did not return thinking_config")
|
|
97
|
+
return
|
|
98
|
+
|
|
99
|
+
thinking_config = with_thinking["thinking_config"]
|
|
100
|
+
disabled = thinking_config.get("disabled")
|
|
101
|
+
enabled = thinking_config.get("enabled")
|
|
102
|
+
assert isinstance(disabled, dict) or isinstance(enabled, dict), (
|
|
103
|
+
f"thinking_config on {with_thinking.get('value')} must include "
|
|
104
|
+
"disabled or enabled"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
if isinstance(disabled, dict) and "description" in disabled:
|
|
108
|
+
assert isinstance(disabled["description"], str)
|
|
109
|
+
|
|
110
|
+
if isinstance(enabled, dict):
|
|
111
|
+
if "description" in enabled:
|
|
112
|
+
assert isinstance(enabled["description"], str)
|
|
113
|
+
if "is_default" in enabled:
|
|
114
|
+
assert isinstance(enabled["is_default"], bool)
|
|
115
|
+
|
|
116
|
+
efforts = enabled.get("efforts")
|
|
117
|
+
if isinstance(efforts, dict):
|
|
118
|
+
effort_defaults = 0
|
|
119
|
+
for level, effort in efforts.items():
|
|
120
|
+
assert isinstance(level, str)
|
|
121
|
+
assert isinstance(effort, dict), (
|
|
122
|
+
f"thinking_config.enabled.efforts[{level}] must be a dict"
|
|
123
|
+
)
|
|
124
|
+
if "description" in effort:
|
|
125
|
+
assert isinstance(effort["description"], str)
|
|
126
|
+
if "is_default" in effort:
|
|
127
|
+
assert isinstance(effort["is_default"], bool)
|
|
128
|
+
if effort["is_default"]:
|
|
129
|
+
effort_defaults += 1
|
|
130
|
+
assert effort_defaults <= 1, (
|
|
131
|
+
"at most one thinking effort may be is_default on "
|
|
132
|
+
f"{with_thinking.get('value')}"
|
|
133
|
+
)
|
|
@@ -22,7 +22,6 @@ from typing import Any
|
|
|
22
22
|
import pytest
|
|
23
23
|
|
|
24
24
|
from qoder_agent_sdk import QoderSDKClient, query
|
|
25
|
-
from qoder_agent_sdk.auth import access_token_from_env
|
|
26
25
|
from qoder_agent_sdk.types import (
|
|
27
26
|
ModelPolicyContext,
|
|
28
27
|
ModelPolicyResult,
|
|
@@ -43,14 +42,14 @@ skip_if_no_cli = pytest.mark.skipif(
|
|
|
43
42
|
|
|
44
43
|
def make_options(**overrides) -> QoderAgentOptions:
|
|
45
44
|
"""Build standard options for functional tests."""
|
|
46
|
-
base =
|
|
47
|
-
cwd
|
|
48
|
-
cli_path
|
|
49
|
-
permission_mode
|
|
50
|
-
allow_dangerously_skip_permissions
|
|
51
|
-
model
|
|
52
|
-
max_turns
|
|
53
|
-
|
|
45
|
+
base = {
|
|
46
|
+
"cwd": "/tmp",
|
|
47
|
+
"cli_path": CLI_PATH,
|
|
48
|
+
"permission_mode": "bypassPermissions",
|
|
49
|
+
"allow_dangerously_skip_permissions": True,
|
|
50
|
+
"model": DEFAULT_MODEL,
|
|
51
|
+
"max_turns": 1,
|
|
52
|
+
}
|
|
54
53
|
base.update(overrides)
|
|
55
54
|
return QoderAgentOptions(**base)
|
|
56
55
|
|
|
@@ -216,9 +215,7 @@ class TestPullTimeout:
|
|
|
216
215
|
|
|
217
216
|
messages = asyncio.run(_run())
|
|
218
217
|
# The query should have failed - no success result
|
|
219
|
-
results = [
|
|
220
|
-
m for m in messages if hasattr(m, "type") and m.type == "result"
|
|
221
|
-
]
|
|
218
|
+
results = [m for m in messages if hasattr(m, "type") and m.type == "result"]
|
|
222
219
|
if results:
|
|
223
220
|
# If we got a result, it should NOT be success
|
|
224
221
|
assert results[0].subtype != "success"
|
|
@@ -245,9 +242,7 @@ class TestPullThrows:
|
|
|
245
242
|
return messages
|
|
246
243
|
|
|
247
244
|
messages = asyncio.run(_run())
|
|
248
|
-
results = [
|
|
249
|
-
m for m in messages if hasattr(m, "type") and m.type == "result"
|
|
250
|
-
]
|
|
245
|
+
results = [m for m in messages if hasattr(m, "type") and m.type == "result"]
|
|
251
246
|
if results:
|
|
252
247
|
assert results[0].subtype != "success"
|
|
253
248
|
|
|
@@ -568,7 +563,7 @@ class TestPullPurposeWebFetch:
|
|
|
568
563
|
max_turns=3,
|
|
569
564
|
)
|
|
570
565
|
async for msg in query(
|
|
571
|
-
prompt=
|
|
566
|
+
prompt="Fetch https://example.com and summarize it.",
|
|
572
567
|
options=options,
|
|
573
568
|
):
|
|
574
569
|
if hasattr(msg, "type") and msg.type == "result":
|
|
@@ -597,7 +592,7 @@ class TestPullPurposeImageGen:
|
|
|
597
592
|
max_turns=3,
|
|
598
593
|
)
|
|
599
594
|
async for msg in query(
|
|
600
|
-
prompt=
|
|
595
|
+
prompt="Generate an image of a sunset.",
|
|
601
596
|
options=options,
|
|
602
597
|
):
|
|
603
598
|
if hasattr(msg, "type") and msg.type == "result":
|
|
@@ -111,7 +111,6 @@ class TestModelPolicyProviderInvocation:
|
|
|
111
111
|
],
|
|
112
112
|
}
|
|
113
113
|
sent: list[dict] = []
|
|
114
|
-
original_write = query_obj.transport.write
|
|
115
114
|
|
|
116
115
|
async def capture_write(data):
|
|
117
116
|
sent.append(json.loads(data))
|
|
@@ -184,7 +183,10 @@ class TestModelPolicyProviderInvocation:
|
|
|
184
183
|
"""Provider returning parameters → forwarded on wire."""
|
|
185
184
|
|
|
186
185
|
def provider(ctx: ModelPolicyContext) -> ModelPolicyResult:
|
|
187
|
-
return {
|
|
186
|
+
return {
|
|
187
|
+
"model": "qmodel",
|
|
188
|
+
"parameters": {"temperature": 0.3, "max_tokens": 100},
|
|
189
|
+
}
|
|
188
190
|
|
|
189
191
|
async def _test():
|
|
190
192
|
q = self._make_query_with_provider(provider)
|
|
@@ -511,7 +513,6 @@ class TestPurposeSpecificInvocations:
|
|
|
511
513
|
|
|
512
514
|
async def _send(query_obj):
|
|
513
515
|
sent: list[dict] = []
|
|
514
|
-
original_write = query_obj.transport.write
|
|
515
516
|
|
|
516
517
|
async def capture_write(data):
|
|
517
518
|
sent.append(json.loads(data))
|
|
@@ -649,7 +650,6 @@ class TestCustomModelWireFormat:
|
|
|
649
650
|
async def _test():
|
|
650
651
|
q = self._make_query_with_provider(provider)
|
|
651
652
|
sent: list[dict] = []
|
|
652
|
-
original_write = q.transport.write
|
|
653
653
|
|
|
654
654
|
async def capture_write(data):
|
|
655
655
|
sent.append(json.loads(data))
|
|
@@ -982,9 +982,39 @@ class TestGetAvailableModels:
|
|
|
982
982
|
"request_id": request_id,
|
|
983
983
|
"response": {
|
|
984
984
|
"models": [
|
|
985
|
-
{
|
|
986
|
-
|
|
987
|
-
|
|
985
|
+
{
|
|
986
|
+
"value": "qmodel",
|
|
987
|
+
"isEnabled": True,
|
|
988
|
+
"displayName": "Q Model",
|
|
989
|
+
"description": "Primary model",
|
|
990
|
+
"context_config": {
|
|
991
|
+
"200K": {
|
|
992
|
+
"token_count": 200000,
|
|
993
|
+
"is_default": True,
|
|
994
|
+
}
|
|
995
|
+
},
|
|
996
|
+
"thinking_config": {
|
|
997
|
+
"enabled": {
|
|
998
|
+
"description": "Enable thinking",
|
|
999
|
+
"efforts": {
|
|
1000
|
+
"high": {
|
|
1001
|
+
"description": "More reasoning",
|
|
1002
|
+
"is_default": True,
|
|
1003
|
+
}
|
|
1004
|
+
},
|
|
1005
|
+
}
|
|
1006
|
+
},
|
|
1007
|
+
},
|
|
1008
|
+
{
|
|
1009
|
+
"value": "qmodel-preview",
|
|
1010
|
+
"isEnabled": True,
|
|
1011
|
+
"displayName": "Q Model Preview",
|
|
1012
|
+
},
|
|
1013
|
+
{
|
|
1014
|
+
"value": "legacy",
|
|
1015
|
+
"isEnabled": False,
|
|
1016
|
+
"displayName": "Legacy",
|
|
1017
|
+
},
|
|
988
1018
|
]
|
|
989
1019
|
},
|
|
990
1020
|
}
|
|
@@ -1022,6 +1052,12 @@ class TestGetAvailableModels:
|
|
|
1022
1052
|
assert len(models) == 3
|
|
1023
1053
|
assert models[0]["value"] == "qmodel"
|
|
1024
1054
|
assert models[0]["displayName"] == "Q Model"
|
|
1055
|
+
assert models[0]["description"] == "Primary model"
|
|
1056
|
+
assert models[0]["context_config"]["200K"]["token_count"] == 200000
|
|
1057
|
+
assert (
|
|
1058
|
+
models[0]["thinking_config"]["enabled"]["efforts"]["high"]["is_default"]
|
|
1059
|
+
is True
|
|
1060
|
+
)
|
|
1025
1061
|
assert models[1]["value"] == "qmodel-preview"
|
|
1026
1062
|
assert models[2]["isEnabled"] is False
|
|
1027
1063
|
|
|
@@ -43,6 +43,10 @@ def test_dev_versions_use_dev_release_bucket(monkeypatch):
|
|
|
43
43
|
download_cli = load_download_cli()
|
|
44
44
|
|
|
45
45
|
monkeypatch.delenv("QODER_CLI_MIRROR", raising=False)
|
|
46
|
+
assert (
|
|
47
|
+
download_cli.PROD_DOWNLOAD_BASE_URL
|
|
48
|
+
== "https://download.qoder.com/qodercli/releases"
|
|
49
|
+
)
|
|
46
50
|
assert download_cli.is_dev_cli_version("0.2.0-nightly.20260518.0117548")
|
|
47
51
|
assert (
|
|
48
52
|
download_cli.get_download_base_url("0.2.17-alpha.1")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/auth_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/mcp_handler.py
RENAMED
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/mcp_serialize.py
RENAMED
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/message_parser.py
RENAMED
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/sdk_mcp_transport.py
RENAMED
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/session_mutations.py
RENAMED
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/transport/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_disallowed_tools_empty.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_initial_prompt_empty.py
RENAMED
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_max_turns_zero.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_tools_non_existent.py
RENAMED
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_register_custom_subagent.py
RENAMED
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_session_agent_from_sdk_agents.py
RENAMED
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_isolated_context.py
RENAMED
|
File without changes
|
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_prompt.py
RENAMED
|
File without changes
|
{qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_timeout.py
RENAMED
|
File without changes
|