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.
Files changed (329) hide show
  1. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/PKG-INFO +1 -1
  2. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/pyproject.toml +1 -1
  3. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/__init__.py +12 -0
  4. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_cli_version.py +1 -1
  5. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/cloud_agent.py +1 -1
  6. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/query.py +2 -1
  7. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_version.py +1 -1
  8. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/client.py +2 -1
  9. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/types.py +47 -6
  10. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/test_cloud_agent_query.py +18 -0
  11. qoder_agent_sdk-1.0.2/tests/query_model_policy/functional/test_list_available_models_rich_fields.py +133 -0
  12. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/test_model_policy_e2e.py +12 -17
  13. {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
  14. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_download_cli.py +4 -0
  15. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/.gitignore +0 -0
  16. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/LICENSE +0 -0
  17. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/README.md +0 -0
  18. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_bundled/.gitignore +0 -0
  19. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_errors.py +0 -0
  20. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/__init__.py +0 -0
  21. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/auth_helpers.py +0 -0
  22. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/client.py +0 -0
  23. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/mcp_handler.py +0 -0
  24. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/mcp_serialize.py +0 -0
  25. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/message_parser.py +0 -0
  26. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/sdk_mcp_transport.py +0 -0
  27. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/session_mutations.py +0 -0
  28. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/sessions.py +0 -0
  29. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/transport/__init__.py +0 -0
  30. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/_internal/transport/subprocess_cli.py +0 -0
  31. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/auth.py +0 -0
  32. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/py.typed +0 -0
  33. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/query.py +0 -0
  34. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/src/qoder_agent_sdk/settings.py +0 -0
  35. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/__init__.py +0 -0
  36. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/__init__.py +0 -0
  37. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/dotenv.py +0 -0
  38. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/e2e.py +0 -0
  39. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/e2e_env.py +0 -0
  40. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/_shared/fake_qodercli.py +0 -0
  41. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/__init__.py +0 -0
  42. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/conftest.py +0 -0
  43. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_description.py +0 -0
  44. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_disallowed_tools.py +0 -0
  45. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_effort.py +0 -0
  46. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_initial_prompt.py +0 -0
  47. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_max_turns.py +0 -0
  48. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_mcp_servers.py +0 -0
  49. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_model.py +0 -0
  50. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_permission_mode.py +0 -0
  51. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_prompt.py +0 -0
  52. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_skills.py +0 -0
  53. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_agent_tools.py +0 -0
  54. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_disallowed_tools_empty.py +0 -0
  55. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_effort_max.py +0 -0
  56. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_empty_agents.py +0 -0
  57. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_initial_prompt_empty.py +0 -0
  58. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_many_agents.py +0 -0
  59. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_max_turns_zero.py +0 -0
  60. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_multi_agent_task_isolation.py +0 -0
  61. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_permission_mode_default.py +0 -0
  62. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_tools_empty.py +0 -0
  63. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_tools_non_existent.py +0 -0
  64. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_boundary_unregistered_session_agent.py +0 -0
  65. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_register_custom_subagent.py +0 -0
  66. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_session_agent.py +0 -0
  67. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_session_agent_from_sdk_agents.py +0 -0
  68. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_isolated_context.py +0 -0
  69. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_agent_selection.py +0 -0
  70. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_prompt.py +0 -0
  71. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_subagent_tool_call_timeout.py +0 -0
  72. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/agents/test_supported_agents_list.py +0 -0
  73. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/contract/test_subprocess_auth.py +0 -0
  74. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/e2e/test_access_token_auth.py +0 -0
  75. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/e2e/test_job_token_auth.py +0 -0
  76. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/e2e/test_qodercli_auth.py +0 -0
  77. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/unit/test_auth.py +0 -0
  78. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/auth/unit/test_dotenv.py +0 -0
  79. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/__init__.py +0 -0
  80. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/__init__.py +0 -0
  81. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/_helpers.py +0 -0
  82. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/test_client_multi_turn_session.py +0 -0
  83. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/test_create_agent_session_stream.py +0 -0
  84. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/cloud_agent/functional/test_multi_turn_session.py +0 -0
  85. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/conftest.py +0 -0
  86. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/__init__.py +0 -0
  87. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/conftest.py +0 -0
  88. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/__init__.py +0 -0
  89. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_compact.py +0 -0
  90. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_config_change.py +0 -0
  91. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_cwd_changed.py +0 -0
  92. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_decision_merge.py +0 -0
  93. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_elicitation.py +0 -0
  94. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_elicitation_result.py +0 -0
  95. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_file_changed.py +0 -0
  96. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_hooks_e2e.py +0 -0
  97. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_instructions_loaded.py +0 -0
  98. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_notification.py +0 -0
  99. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_permission_denied.py +0 -0
  100. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_permission_request.py +0 -0
  101. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_post_tool_use.py +0 -0
  102. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_post_tool_use_failure.py +0 -0
  103. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_pre_tool_use.py +0 -0
  104. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_session_end.py +0 -0
  105. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_session_start.py +0 -0
  106. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_setup.py +0 -0
  107. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_stop.py +0 -0
  108. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_stop_failure.py +0 -0
  109. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_subagent.py +0 -0
  110. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_task_completed.py +0 -0
  111. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_task_created.py +0 -0
  112. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_teammate_idle.py +0 -0
  113. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_user_prompt_submit.py +0 -0
  114. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/hooks/functional/test_worktree.py +0 -0
  115. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/__init__.py +0 -0
  116. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/_e2e.py +0 -0
  117. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_can_use_tool.py +0 -0
  118. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_client_and_streaming.py +0 -0
  119. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_external_prompt_tool.py +0 -0
  120. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_options_and_modes.py +0 -0
  121. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_permission_modes.py +0 -0
  122. {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
  123. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_permission_request_hook_deny_fires_denied.py +0 -0
  124. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_permission_updates.py +0 -0
  125. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_settings_and_mcp_policy.py +0 -0
  126. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/permissions/test_streaming_async_iterable_can_use_tool.py +0 -0
  127. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/__init__.py +0 -0
  128. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/conftest.py +0 -0
  129. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_bogus_plugin_dir.py +0 -0
  130. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_broken_plugin_content.py +0 -0
  131. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_local_plugin_init.py +0 -0
  132. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_multiple_plugin_dirs.py +0 -0
  133. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_plugin_contributes_resources.py +0 -0
  134. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_reload_plugins_commands.py +0 -0
  135. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_reload_plugins_error_count.py +0 -0
  136. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/test_reload_plugins_response_shape.py +0 -0
  137. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/unit/__init__.py +0 -0
  138. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/unit/test_plugin_dir_argv.py +0 -0
  139. {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
  140. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/plugins_loading_control/unit/test_settings_passthrough.py +0 -0
  141. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_at_file_reference.py +0 -0
  142. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_client_multi_turn_io.py +0 -0
  143. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_compact_context.py +0 -0
  144. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_multimodal_content_blocks.py +0 -0
  145. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_partial_stream_events.py +0 -0
  146. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_query_stream_turns_io.py +0 -0
  147. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_server_output_style_info.py +0 -0
  148. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_stream_user_message_io.py +0 -0
  149. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_string_prompt_io.py +0 -0
  150. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_io/test_system_prompt.py +0 -0
  151. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/__init__.py +0 -0
  152. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/conftest.py +0 -0
  153. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/__init__.py +0 -0
  154. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/elicit_mcp_server.py +0 -0
  155. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/fake_oauth_mcp_server.py +0 -0
  156. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/minimal_mcp_server.py +0 -0
  157. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/fixtures/sse_mcp_server.py +0 -0
  158. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/__init__.py +0 -0
  159. {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
  160. {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
  161. {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
  162. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_elicitation_hook_probe.py +0 -0
  163. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_elicitation_result_hook_probe.py +0 -0
  164. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_elicitation_url_mode_unsupported.py +0 -0
  165. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_http_server_public_deepwiki.py +0 -0
  166. {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
  167. {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
  168. {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
  169. {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
  170. {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
  171. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_mixed_three_way_transports.py +0 -0
  172. {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
  173. {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
  174. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_authenticate_silent_refresh.py +0 -0
  175. {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
  176. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_inject_token_connects.py +0 -0
  177. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_oauth_needs_auth_status.py +0 -0
  178. {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
  179. {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
  180. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_permission_prompt_tool_probe.py +0 -0
  181. {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
  182. {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
  183. {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
  184. {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
  185. {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
  186. {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
  187. {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
  188. {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
  189. {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
  190. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/functional/test_stdio_server_lifecycle.py +0 -0
  191. {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
  192. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/__init__.py +0 -0
  193. {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
  194. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_cli_args_mcp_config.py +0 -0
  195. {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
  196. {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
  197. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_create_sdk_mcp_server.py +0 -0
  198. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_handler_accepts_extra_helper.py +0 -0
  199. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_inbound_elicitation_callback.py +0 -0
  200. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_inbound_elicitation_default_cancel.py +0 -0
  201. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_inbound_get_model_policy.py +0 -0
  202. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_mcp_authenticate_response_variants.py +0 -0
  203. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_mcp_server_status_request.py +0 -0
  204. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_mcp/unit/test_mcp_server_status_timeout.py +0 -0
  205. {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
  206. {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
  207. {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
  208. {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
  209. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/__init__.py +0 -0
  210. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/__init__.py +0 -0
  211. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/conftest.py +0 -0
  212. {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
  213. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/functional/test_model_selection_logging.py +0 -0
  214. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/unit/__init__.py +0 -0
  215. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/query_model_policy/unit/test_list_byok_providers.py +0 -0
  216. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/__init__.py +0 -0
  217. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/conftest.py +0 -0
  218. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_capture_checkpoint_uuid_from_stream.py +0 -0
  219. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_enable_file_checkpointing.py +0 -0
  220. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_mid_stream_rewind.py +0 -0
  221. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_multiple_checkpoints_rewind.py +0 -0
  222. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_replay_user_messages_checkpoint_uuid.py +0 -0
  223. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_resume_session_rewind.py +0 -0
  224. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_bash_changes_not_tracked.py +0 -0
  225. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_cross_session_rejected.py +0 -0
  226. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_directory_ops_not_undone.py +0 -0
  227. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_dry_run_with_checkpoint.py +0 -0
  228. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_files_success.py +0 -0
  229. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_local_files_only.py +0 -0
  230. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_malformed_message_id.py +0 -0
  231. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_preserves_conversation.py +0 -0
  232. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_stats.py +0 -0
  233. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_unknown_message.py +0 -0
  234. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/rewind_api/test_rewind_without_checkpointing.py +0 -0
  235. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_continue_latest_session.py +0 -0
  236. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_fork_session.py +0 -0
  237. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_new_client_session.py +0 -0
  238. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_new_query_session.py +0 -0
  239. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_new_session_with_session_id.py +0 -0
  240. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/session_control/test_resume_session.py +0 -0
  241. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/__init__.py +0 -0
  242. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/conftest.py +0 -0
  243. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_agent_preloaded_skills.py +0 -0
  244. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_builtin_skills_visibility.py +0 -0
  245. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_default_skills_policy.py +0 -0
  246. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_enable_all_skills.py +0 -0
  247. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_enable_named_skills.py +0 -0
  248. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_plugin_skill_in_init.py +0 -0
  249. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/test_settings_skill_overrides.py +0 -0
  250. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/unit/__init__.py +0 -0
  251. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/skills_loading_control/unit/test_skills_argv.py +0 -0
  252. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_build_wheel.py +0 -0
  253. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_client.py +0 -0
  254. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_control_request_timeout.py +0 -0
  255. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_errors.py +0 -0
  256. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_integration.py +0 -0
  257. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_mcp_dynamic.py +0 -0
  258. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_mcp_large_output.py +0 -0
  259. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_mcp_oauth.py +0 -0
  260. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_message_parser.py +0 -0
  261. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_permission_alignment.py +0 -0
  262. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_query.py +0 -0
  263. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_rate_limit_event_repro.py +0 -0
  264. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_sdk_mcp_integration.py +0 -0
  265. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_sdk_mcp_routing.py +0 -0
  266. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_session_mutations.py +0 -0
  267. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_sessions.py +0 -0
  268. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_streaming_client.py +0 -0
  269. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_subprocess_buffering.py +0 -0
  270. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_tool_callbacks.py +0 -0
  271. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_transport.py +0 -0
  272. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/test_types.py +0 -0
  273. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/__init__.py +0 -0
  274. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/conftest.py +0 -0
  275. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_allowedTools_disallowedTools_conflict_priority.py +0 -0
  276. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_canUseTool_throws_error.py +0 -0
  277. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_concurrent_multiple_tool_uses.py +0 -0
  278. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_createSdkMcpServer_many_tools.py +0 -0
  279. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_long_running_vs_controlRequestTimeoutMs.py +0 -0
  280. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_returns_large_content.py +0 -0
  281. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_returns_malformed_result.py +0 -0
  282. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_handler_returns_undefined.py +0 -0
  283. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_model_calls_unknown_tool_functional.py +0 -0
  284. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_tool_input_deeply_nested_schema.py +0 -0
  285. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_boundary_tool_input_many_fields.py +0 -0
  286. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_empty_tools.py +0 -0
  287. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_mcpServers_option.py +0 -0
  288. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_multiple_tools.py +0 -0
  289. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_name_routes_tool.py +0 -0
  290. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_createSdkMcpServer_version.py +0 -0
  291. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_isError_true.py +0 -0
  292. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_isError_with_structured_data.py +0 -0
  293. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_throws_async_rejection.py +0 -0
  294. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_throws_non_Error.py +0 -0
  295. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_handler_throws_sync_Error.py +0 -0
  296. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_error_isError_allows_agent_retry.py +0 -0
  297. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_allowedTools_permits_mcp_tool.py +0 -0
  298. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_allowedTools_server_pattern.py +0 -0
  299. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_allow_passthrough.py +0 -0
  300. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_conditional_on_input.py +0 -0
  301. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_deny.py +0 -0
  302. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_deny_with_interrupt.py +0 -0
  303. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_receives_mcp_toolName_format.py +0 -0
  304. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_updatedInput.py +0 -0
  305. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_canUseTool_updatedPermissions.py +0 -0
  306. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_disallowedTools_blocks_tool.py +0 -0
  307. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_mode_bypassPermissions_with_mcp_tool.py +0 -0
  308. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_postToolUse_hook_additionalContext.py +0 -0
  309. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_permission_preToolUse_hook_updatedInput.py +0 -0
  310. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_empty_content_array.py +0 -0
  311. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_image_content.py +0 -0
  312. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_multiple_content_blocks.py +0 -0
  313. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_return_text_content.py +0 -0
  314. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_destructiveHint.py +0 -0
  315. {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
  316. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_input_schema_describe.py +0 -0
  317. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_input_schema_nested.py +0 -0
  318. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_input_schema_zod_shape.py +0 -0
  319. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_name_and_description.py +0 -0
  320. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_openWorldHint.py +0 -0
  321. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_tool_readOnlyHint.py +0 -0
  322. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer.py +0 -0
  323. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_duplicate_tool_name.py +0 -0
  324. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_empty_server_name.py +0 -0
  325. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_empty_tool_description.py +0 -0
  326. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_createSdkMcpServer_empty_tool_name.py +0 -0
  327. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_mcp_handler.py +0 -0
  328. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_sdk_mcp_transport.py +0 -0
  329. {qoder_agent_sdk-1.0.0 → qoder_agent_sdk-1.0.2}/tests/tools/test_unit_tool_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qoder-agent-sdk
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Python SDK for Qoder Agent
5
5
  Author: Qoder
6
6
  License: Copyright (c) 2026 Qoder
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "qoder-agent-sdk"
7
- version = "1.0.0"
7
+ version = "1.0.2"
8
8
  description = "Python SDK for Qoder Agent"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -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",
@@ -1,3 +1,3 @@
1
1
  """Bundled runtime CLI version."""
2
2
 
3
- __cli_version__ = "1.0.0"
3
+ __cli_version__ = "1.0.3"
@@ -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://openapi.qoder.sh/api/v1/cloud"
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 with at least ``value`` and ``isEnabled``.
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
@@ -1,3 +1,3 @@
1
1
  """Version information for qoder-agent-sdk."""
2
2
 
3
- __version__ = "1.0.0"
3
+ __version__ = "1.0.2"
@@ -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 with at least ``value`` and ``isEnabled``.
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 ModelInfo(TypedDict, total=False):
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
- isNew: bool
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,
@@ -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 = dict(
47
- cwd="/tmp",
48
- cli_path=CLI_PATH,
49
- permission_mode="bypassPermissions",
50
- allow_dangerously_skip_permissions=True,
51
- model=DEFAULT_MODEL,
52
- max_turns=1,
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='Fetch https://example.com and summarize it.',
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='Generate an image of a sunset.',
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 {"model": "qmodel", "parameters": {"temperature": 0.3, "max_tokens": 100}}
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
- {"value": "qmodel", "isEnabled": True, "displayName": "Q Model"},
986
- {"value": "qmodel-preview", "isEnabled": True, "displayName": "Q Model Preview"},
987
- {"value": "legacy", "isEnabled": False, "displayName": "Legacy"},
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