asteroid-odyssey 1.3.12__py3-none-any.whl → 1.6.0__py3-none-any.whl

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 (149) hide show
  1. asteroid_odyssey/__init__.py +254 -48
  2. asteroid_odyssey/api/__init__.py +8 -0
  3. asteroid_odyssey/{agents_v1_gen/api/agent_profile_api.py → api/agent_profiles_api.py} +414 -281
  4. asteroid_odyssey/{agents_v2_gen/api → api}/agents_api.py +30 -30
  5. asteroid_odyssey/{agents_v2_gen/api → api}/execution_api.py +32 -49
  6. asteroid_odyssey/{agents_v2_gen/api → api}/files_api.py +5 -5
  7. asteroid_odyssey/{agents_v2_gen/api_client.py → api_client.py} +10 -6
  8. asteroid_odyssey/{agents_v2_gen/configuration.py → configuration.py} +11 -4
  9. asteroid_odyssey/models/__init__.py +118 -0
  10. asteroid_odyssey/{agents_v2_gen/models → models}/agent_list200_response.py +1 -1
  11. asteroid_odyssey/models/agent_profile_clear_browser_cache200_response.py +87 -0
  12. asteroid_odyssey/models/agent_profiles_list200_response.py +101 -0
  13. asteroid_odyssey/{agents_v2_gen/models → models}/agents_agent_base.py +3 -3
  14. asteroid_odyssey/{agents_v2_gen/models → models}/agents_agent_execute_agent_request.py +7 -5
  15. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity.py +4 -4
  16. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_action_completed_info.py +65 -37
  17. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_action_completed_payload.py +8 -8
  18. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_action_failed_payload.py +9 -9
  19. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_action_started_info.py +50 -22
  20. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_action_started_payload.py +10 -10
  21. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_file_added_payload.py +6 -6
  22. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_payload_union.py +14 -14
  23. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_playwright_script_generated_payload.py +9 -9
  24. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_status_changed_payload.py +19 -19
  25. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_transitioned_node_payload.py +6 -6
  26. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_workflow_updated_payload.py +1 -1
  27. asteroid_odyssey/models/agents_execution_agent_query_context_completed_details.py +98 -0
  28. asteroid_odyssey/models/agents_execution_agent_query_context_started_details.py +96 -0
  29. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_cancelled_payload.py +1 -1
  30. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_comment.py +10 -10
  31. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_completed_payload.py +4 -4
  32. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_execution_result.py +6 -6
  33. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_ext_api_call_completed_details.py +6 -6
  34. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_failed_payload.py +5 -5
  35. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_file_read_completed_details.py +3 -3
  36. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_human_label.py +7 -7
  37. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_list_item.py +33 -37
  38. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_llm_call_started_details.py +1 -1
  39. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_obs_snapshot_with_selectors_completed_details.py +4 -4
  40. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scratchpad_write_completed_details.py +7 -7
  41. asteroid_odyssey/models/agents_execution_script_eval_completed_details.py +101 -0
  42. asteroid_odyssey/models/agents_execution_script_eval_started_details.py +100 -0
  43. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_script_hybrid_playwright_completed_details.py +6 -6
  44. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_script_pad_run_function_completed_details.py +6 -6
  45. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_script_playwright_completed_details.py +6 -6
  46. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scriptpad_read_started_details.py +4 -4
  47. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scriptpad_run_function_started_details.py +4 -4
  48. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scriptpad_search_replace_completed_details.py +5 -5
  49. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scriptpad_search_replace_started_details.py +4 -4
  50. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scriptpad_write_completed_details.py +4 -4
  51. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_terminal_payload.py +4 -4
  52. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_util_get_datetime_completed_details.py +4 -4
  53. asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_workflow_update.py +13 -13
  54. asteroid_odyssey/{agents_v2_gen/models → models}/agents_files_file.py +11 -11
  55. asteroid_odyssey/{agents_v2_gen/models → models}/agents_files_temp_files_response.py +1 -1
  56. asteroid_odyssey/{agents_v2_gen/models → models}/agents_graph_models_nodes_properties_playwright_script_llm_var.py +5 -5
  57. asteroid_odyssey/{agents_v1_gen/models/agent_profile.py → models/agents_profile_agent_profile.py} +37 -32
  58. asteroid_odyssey/{agents_v1_gen/models/cookie.py → models/agents_profile_cookie.py} +21 -26
  59. asteroid_odyssey/{agents_v1_gen/models/country_code.py → models/agents_profile_country_code.py} +5 -5
  60. asteroid_odyssey/{agents_v1_gen/models/create_agent_profile_request.py → models/agents_profile_create_agent_profile_request.py} +33 -28
  61. asteroid_odyssey/{agents_v1_gen/models/credential.py → models/agents_profile_credential.py} +13 -13
  62. asteroid_odyssey/models/agents_profile_operating_system.py +37 -0
  63. asteroid_odyssey/models/agents_profile_proxy_type.py +38 -0
  64. asteroid_odyssey/models/agents_profile_same_site.py +38 -0
  65. asteroid_odyssey/models/agents_profile_sort_field.py +38 -0
  66. asteroid_odyssey/models/agents_profile_update_agent_profile_request.py +129 -0
  67. asteroid_odyssey/{agents_v2_gen/models → models}/executions_list200_response.py +1 -1
  68. asteroid_odyssey/{agents_v2_gen/rest.py → rest.py} +2 -1
  69. asteroid_odyssey-1.6.0.dist-info/METADATA +65 -0
  70. asteroid_odyssey-1.6.0.dist-info/RECORD +119 -0
  71. asteroid_odyssey/agents_v1_gen/__init__.py +0 -53
  72. asteroid_odyssey/agents_v1_gen/api/__init__.py +0 -7
  73. asteroid_odyssey/agents_v1_gen/api/api_api.py +0 -516
  74. asteroid_odyssey/agents_v1_gen/api/execution_api.py +0 -1449
  75. asteroid_odyssey/agents_v1_gen/api_client.py +0 -797
  76. asteroid_odyssey/agents_v1_gen/configuration.py +0 -599
  77. asteroid_odyssey/agents_v1_gen/exceptions.py +0 -216
  78. asteroid_odyssey/agents_v1_gen/models/__init__.py +0 -34
  79. asteroid_odyssey/agents_v1_gen/models/browser_session_recording_response.py +0 -87
  80. asteroid_odyssey/agents_v1_gen/models/delete_agent_profile200_response.py +0 -87
  81. asteroid_odyssey/agents_v1_gen/models/error_response.py +0 -87
  82. asteroid_odyssey/agents_v1_gen/models/execution_response.py +0 -87
  83. asteroid_odyssey/agents_v1_gen/models/execution_result.py +0 -101
  84. asteroid_odyssey/agents_v1_gen/models/execution_result_response.py +0 -100
  85. asteroid_odyssey/agents_v1_gen/models/execution_status_response.py +0 -95
  86. asteroid_odyssey/agents_v1_gen/models/health_check200_response.py +0 -87
  87. asteroid_odyssey/agents_v1_gen/models/health_check500_response.py +0 -87
  88. asteroid_odyssey/agents_v1_gen/models/proxy_type.py +0 -38
  89. asteroid_odyssey/agents_v1_gen/models/status.py +0 -43
  90. asteroid_odyssey/agents_v1_gen/models/structured_agent_execution_request.py +0 -89
  91. asteroid_odyssey/agents_v1_gen/models/update_agent_profile_request.py +0 -126
  92. asteroid_odyssey/agents_v1_gen/rest.py +0 -257
  93. asteroid_odyssey/agents_v2_gen/__init__.py +0 -121
  94. asteroid_odyssey/agents_v2_gen/api/__init__.py +0 -7
  95. asteroid_odyssey/agents_v2_gen/api_response.py +0 -21
  96. asteroid_odyssey/agents_v2_gen/models/__init__.py +0 -102
  97. asteroid_odyssey/agents_v2_gen/py.typed +0 -0
  98. asteroid_odyssey/client.py +0 -1629
  99. asteroid_odyssey-1.3.12.dist-info/METADATA +0 -214
  100. asteroid_odyssey-1.3.12.dist-info/RECORD +0 -134
  101. /asteroid_odyssey/{agents_v1_gen/api_response.py → api_response.py} +0 -0
  102. /asteroid_odyssey/{agents_v2_gen/exceptions.py → exceptions.py} +0 -0
  103. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_agent_execute_agent_response.py +0 -0
  104. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_agent_sort_field.py +0 -0
  105. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_action_name.py +0 -0
  106. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_generic_payload.py +0 -0
  107. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_reasoning_payload.py +0 -0
  108. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_step_completed_payload.py +0 -0
  109. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_step_started_payload.py +0 -0
  110. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_activity_user_message_received_payload.py +0 -0
  111. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_awaiting_confirmation_payload.py +0 -0
  112. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_cancel_reason.py +0 -0
  113. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_element_file_upload_completed_details.py +0 -0
  114. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_ext_get_mail_completed_details.py +0 -0
  115. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_file_list_completed_details.py +0 -0
  116. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_file_stage_completed_details.py +0 -0
  117. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_llm_call_purpose.py +0 -0
  118. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_nav_to_completed_details.py +0 -0
  119. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_nav_to_started_details.py +0 -0
  120. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_node_details.py +0 -0
  121. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_paused_payload.py +0 -0
  122. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_rules_details.py +0 -0
  123. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scratchpad_read_completed_details.py +0 -0
  124. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scratchpad_read_started_details.py +0 -0
  125. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scratchpad_write_started_details.py +0 -0
  126. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_script_hybrid_playwright_started_details.py +0 -0
  127. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_script_playwright_started_details.py +0 -0
  128. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_scriptpad_read_completed_details.py +0 -0
  129. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_sort_field.py +0 -0
  130. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_status.py +0 -0
  131. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_transition_details.py +0 -0
  132. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_update_type.py +0 -0
  133. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_user_messages_add_text_body.py +0 -0
  134. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_execution_util_get_datetime_started_details.py +0 -0
  135. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_files_temp_file.py +0 -0
  136. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_graph_models_nodes_properties_playwright_script_llm_var_type.py +0 -0
  137. /asteroid_odyssey/{agents_v2_gen/models → models}/agents_graph_models_transitions_transition_type.py +0 -0
  138. /asteroid_odyssey/{agents_v2_gen/models → models}/common_bad_request_error_body.py +0 -0
  139. /asteroid_odyssey/{agents_v2_gen/models → models}/common_error.py +0 -0
  140. /asteroid_odyssey/{agents_v2_gen/models → models}/common_forbidden_error_body.py +0 -0
  141. /asteroid_odyssey/{agents_v2_gen/models → models}/common_internal_server_error_body.py +0 -0
  142. /asteroid_odyssey/{agents_v2_gen/models → models}/common_not_found_error_body.py +0 -0
  143. /asteroid_odyssey/{agents_v2_gen/models → models}/common_os_error.py +0 -0
  144. /asteroid_odyssey/{agents_v2_gen/models → models}/common_sort_direction.py +0 -0
  145. /asteroid_odyssey/{agents_v2_gen/models → models}/common_unauthorized_error_body.py +0 -0
  146. /asteroid_odyssey/{agents_v2_gen/models → models}/version.py +0 -0
  147. /asteroid_odyssey/{agents_v1_gen/py.typed → py.typed} +0 -0
  148. {asteroid_odyssey-1.3.12.dist-info → asteroid_odyssey-1.6.0.dist-info}/WHEEL +0 -0
  149. {asteroid_odyssey-1.3.12.dist-info → asteroid_odyssey-1.6.0.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
 
3
3
  """
4
- Asteroid Agents API
4
+ Agent Service
5
5
 
6
- Version 1 of the Asteroid Agents API
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
7
 
8
- The version of the OpenAPI document: v1.0.0
8
+ The version of the OpenAPI document: v1
9
9
  Generated by OpenAPI Generator (https://openapi-generator.tech)
10
10
 
11
11
  Do not edit the class manually.
@@ -18,7 +18,7 @@ from enum import Enum
18
18
  from typing_extensions import Self
19
19
 
20
20
 
21
- class CountryCode(str, Enum):
21
+ class AgentsProfileCountryCode(str, Enum):
22
22
  """
23
23
  Two-letter country code for proxy location
24
24
  """
@@ -38,7 +38,7 @@ class CountryCode(str, Enum):
38
38
 
39
39
  @classmethod
40
40
  def from_json(cls, json_str: str) -> Self:
41
- """Create an instance of CountryCode from a JSON string"""
41
+ """Create an instance of AgentsProfileCountryCode from a JSON string"""
42
42
  return cls(json.loads(json_str))
43
43
 
44
44
 
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
 
3
3
  """
4
- Asteroid Agents API
4
+ Agent Service
5
5
 
6
- Version 1 of the Asteroid Agents API
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
7
 
8
- The version of the OpenAPI document: v1.0.0
8
+ The version of the OpenAPI document: v1
9
9
  Generated by OpenAPI Generator (https://openapi-generator.tech)
10
10
 
11
11
  Do not edit the class manually.
@@ -20,28 +20,31 @@ import json
20
20
  from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing_extensions import Annotated
23
- from asteroid_odyssey.agents_v1_gen.models.cookie import Cookie
24
- from asteroid_odyssey.agents_v1_gen.models.country_code import CountryCode
25
- from asteroid_odyssey.agents_v1_gen.models.credential import Credential
26
- from asteroid_odyssey.agents_v1_gen.models.proxy_type import ProxyType
23
+ from asteroid_odyssey.models.agents_profile_cookie import AgentsProfileCookie
24
+ from asteroid_odyssey.models.agents_profile_country_code import AgentsProfileCountryCode
25
+ from asteroid_odyssey.models.agents_profile_credential import AgentsProfileCredential
26
+ from asteroid_odyssey.models.agents_profile_operating_system import AgentsProfileOperatingSystem
27
+ from asteroid_odyssey.models.agents_profile_proxy_type import AgentsProfileProxyType
27
28
  from typing import Optional, Set
28
29
  from typing_extensions import Self
29
30
 
30
- class CreateAgentProfileRequest(BaseModel):
31
+ class AgentsProfileCreateAgentProfileRequest(BaseModel):
31
32
  """
32
- CreateAgentProfileRequest
33
+ Request to create a new agent profile
33
34
  """ # noqa: E501
34
35
  name: Annotated[str, Field(min_length=1, strict=True, max_length=255)] = Field(description="Name of the agent profile (must be unique within organization)")
35
36
  description: Annotated[str, Field(strict=True, max_length=1000)] = Field(description="Description of the agent profile")
36
- organization_id: StrictStr = Field(description="The ID of the organization that the agent profile belongs to")
37
- proxy_cc: CountryCode
38
- proxy_type: ProxyType
39
- captcha_solver_active: StrictBool = Field(description="Whether the captcha solver should be active for this profile")
40
- sticky_ip: StrictBool = Field(description="Whether the same IP address should be used for all executions of this profile")
41
- credentials: List[Credential] = Field(description="Optional list of credentials to create with the profile")
42
- cookies: List[Cookie] = Field(description="Optional list of cookies to create with the profile")
43
- extra_stealth: Optional[StrictBool] = Field(default=False, description="Whether to enable extra stealth for the profile")
44
- __properties: ClassVar[List[str]] = ["name", "description", "organization_id", "proxy_cc", "proxy_type", "captcha_solver_active", "sticky_ip", "credentials", "cookies", "extra_stealth"]
37
+ organization_id: StrictStr = Field(description="The ID of the organization that the profile belongs to", alias="organizationId")
38
+ proxy_cc: Optional[AgentsProfileCountryCode] = Field(default=None, description="Country code for proxy location", alias="proxyCC")
39
+ proxy_type: Optional[AgentsProfileProxyType] = Field(default=None, description="Type of proxy to use", alias="proxyType")
40
+ captcha_solver_active: Optional[StrictBool] = Field(default=False, description="Whether the captcha solver should be active", alias="captchaSolverActive")
41
+ sticky_ip: Optional[StrictBool] = Field(default=False, description="Whether to use the same IP address for all executions", alias="stickyIP")
42
+ operating_system: Optional[AgentsProfileOperatingSystem] = Field(default=None, description="Operating system to emulate", alias="operatingSystem")
43
+ extra_stealth: Optional[StrictBool] = Field(default=False, description="Whether to enable extra stealth mode", alias="extraStealth")
44
+ cache_persistence: Optional[StrictBool] = Field(default=False, description="Whether to persist browser cache between sessions", alias="cachePersistence")
45
+ credentials: Optional[List[AgentsProfileCredential]] = Field(default=None, description="Initial credentials to create with the profile")
46
+ cookies: Optional[List[AgentsProfileCookie]] = Field(default=None, description="Initial cookies to create with the profile")
47
+ __properties: ClassVar[List[str]] = ["name", "description", "organizationId", "proxyCC", "proxyType", "captchaSolverActive", "stickyIP", "operatingSystem", "extraStealth", "cachePersistence", "credentials", "cookies"]
45
48
 
46
49
  model_config = ConfigDict(
47
50
  populate_by_name=True,
@@ -61,7 +64,7 @@ class CreateAgentProfileRequest(BaseModel):
61
64
 
62
65
  @classmethod
63
66
  def from_json(cls, json_str: str) -> Optional[Self]:
64
- """Create an instance of CreateAgentProfileRequest from a JSON string"""
67
+ """Create an instance of AgentsProfileCreateAgentProfileRequest from a JSON string"""
65
68
  return cls.from_dict(json.loads(json_str))
66
69
 
67
70
  def to_dict(self) -> Dict[str, Any]:
@@ -100,7 +103,7 @@ class CreateAgentProfileRequest(BaseModel):
100
103
 
101
104
  @classmethod
102
105
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
103
- """Create an instance of CreateAgentProfileRequest from a dict"""
106
+ """Create an instance of AgentsProfileCreateAgentProfileRequest from a dict"""
104
107
  if obj is None:
105
108
  return None
106
109
 
@@ -110,14 +113,16 @@ class CreateAgentProfileRequest(BaseModel):
110
113
  _obj = cls.model_validate({
111
114
  "name": obj.get("name"),
112
115
  "description": obj.get("description"),
113
- "organization_id": obj.get("organization_id"),
114
- "proxy_cc": obj.get("proxy_cc"),
115
- "proxy_type": obj.get("proxy_type"),
116
- "captcha_solver_active": obj.get("captcha_solver_active") if obj.get("captcha_solver_active") is not None else False,
117
- "sticky_ip": obj.get("sticky_ip") if obj.get("sticky_ip") is not None else False,
118
- "credentials": [Credential.from_dict(_item) for _item in obj["credentials"]] if obj.get("credentials") is not None else None,
119
- "cookies": [Cookie.from_dict(_item) for _item in obj["cookies"]] if obj.get("cookies") is not None else None,
120
- "extra_stealth": obj.get("extra_stealth") if obj.get("extra_stealth") is not None else False
116
+ "organizationId": obj.get("organizationId"),
117
+ "proxyCC": obj.get("proxyCC"),
118
+ "proxyType": obj.get("proxyType"),
119
+ "captchaSolverActive": obj.get("captchaSolverActive") if obj.get("captchaSolverActive") is not None else False,
120
+ "stickyIP": obj.get("stickyIP") if obj.get("stickyIP") is not None else False,
121
+ "operatingSystem": obj.get("operatingSystem"),
122
+ "extraStealth": obj.get("extraStealth") if obj.get("extraStealth") is not None else False,
123
+ "cachePersistence": obj.get("cachePersistence") if obj.get("cachePersistence") is not None else False,
124
+ "credentials": [AgentsProfileCredential.from_dict(_item) for _item in obj["credentials"]] if obj.get("credentials") is not None else None,
125
+ "cookies": [AgentsProfileCookie.from_dict(_item) for _item in obj["cookies"]] if obj.get("cookies") is not None else None
121
126
  })
122
127
  return _obj
123
128
 
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
 
3
3
  """
4
- Asteroid Agents API
4
+ Agent Service
5
5
 
6
- Version 1 of the Asteroid Agents API
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
7
 
8
- The version of the OpenAPI document: v1.0.0
8
+ The version of the OpenAPI document: v1
9
9
  Generated by OpenAPI Generator (https://openapi-generator.tech)
10
10
 
11
11
  Do not edit the class manually.
@@ -24,15 +24,15 @@ from typing_extensions import Annotated
24
24
  from typing import Optional, Set
25
25
  from typing_extensions import Self
26
26
 
27
- class Credential(BaseModel):
27
+ class AgentsProfileCredential(BaseModel):
28
28
  """
29
- Credential
29
+ A credential stored for an agent profile
30
30
  """ # noqa: E501
31
- id: Optional[StrictStr] = Field(default=None, description="The unique identifier for this credential")
32
- name: Annotated[str, Field(min_length=1, strict=True)] = Field(description="The credential name")
33
- data: Annotated[str, Field(min_length=1, strict=True)] = Field(description="The encrypted credential")
34
- created_at: Optional[datetime] = Field(default=None, description="When the credential was created")
35
- __properties: ClassVar[List[str]] = ["id", "name", "data", "created_at"]
31
+ id: Optional[StrictStr] = Field(default=None, description="Unique identifier for the credential")
32
+ name: Annotated[str, Field(min_length=1, strict=True)] = Field(description="Display name for the credential (will be uppercased)")
33
+ data: Annotated[str, Field(min_length=1, strict=True)] = Field(description="The credential value (plaintext - will be encrypted server-side)")
34
+ created_at: Optional[datetime] = Field(default=None, description="When the credential was created", alias="createdAt")
35
+ __properties: ClassVar[List[str]] = ["id", "name", "data", "createdAt"]
36
36
 
37
37
  model_config = ConfigDict(
38
38
  populate_by_name=True,
@@ -52,7 +52,7 @@ class Credential(BaseModel):
52
52
 
53
53
  @classmethod
54
54
  def from_json(cls, json_str: str) -> Optional[Self]:
55
- """Create an instance of Credential from a JSON string"""
55
+ """Create an instance of AgentsProfileCredential from a JSON string"""
56
56
  return cls.from_dict(json.loads(json_str))
57
57
 
58
58
  def to_dict(self) -> Dict[str, Any]:
@@ -77,7 +77,7 @@ class Credential(BaseModel):
77
77
 
78
78
  @classmethod
79
79
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
80
- """Create an instance of Credential from a dict"""
80
+ """Create an instance of AgentsProfileCredential from a dict"""
81
81
  if obj is None:
82
82
  return None
83
83
 
@@ -88,7 +88,7 @@ class Credential(BaseModel):
88
88
  "id": obj.get("id"),
89
89
  "name": obj.get("name"),
90
90
  "data": obj.get("data"),
91
- "created_at": obj.get("created_at")
91
+ "createdAt": obj.get("createdAt")
92
92
  })
93
93
  return _obj
94
94
 
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Agent Service
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: v1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import json
17
+ from enum import Enum
18
+ from typing_extensions import Self
19
+
20
+
21
+ class AgentsProfileOperatingSystem(str, Enum):
22
+ """
23
+ Operating system to emulate in the browser
24
+ """
25
+
26
+ """
27
+ allowed enum values
28
+ """
29
+ MACOS = 'macos'
30
+ WINDOWS = 'windows'
31
+
32
+ @classmethod
33
+ def from_json(cls, json_str: str) -> Self:
34
+ """Create an instance of AgentsProfileOperatingSystem from a JSON string"""
35
+ return cls(json.loads(json_str))
36
+
37
+
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Agent Service
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: v1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import json
17
+ from enum import Enum
18
+ from typing_extensions import Self
19
+
20
+
21
+ class AgentsProfileProxyType(str, Enum):
22
+ """
23
+ Type of proxy to use for browser sessions
24
+ """
25
+
26
+ """
27
+ allowed enum values
28
+ """
29
+ BASIC = 'basic'
30
+ RESIDENTIAL = 'residential'
31
+ MOBILE = 'mobile'
32
+
33
+ @classmethod
34
+ def from_json(cls, json_str: str) -> Self:
35
+ """Create an instance of AgentsProfileProxyType from a JSON string"""
36
+ return cls(json.loads(json_str))
37
+
38
+
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Agent Service
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: v1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import json
17
+ from enum import Enum
18
+ from typing_extensions import Self
19
+
20
+
21
+ class AgentsProfileSameSite(str, Enum):
22
+ """
23
+ SameSite attribute for cookies
24
+ """
25
+
26
+ """
27
+ allowed enum values
28
+ """
29
+ STRICT = 'Strict'
30
+ LAX = 'Lax'
31
+ NONE = 'None'
32
+
33
+ @classmethod
34
+ def from_json(cls, json_str: str) -> Self:
35
+ """Create an instance of AgentsProfileSameSite from a JSON string"""
36
+ return cls(json.loads(json_str))
37
+
38
+
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Agent Service
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: v1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import json
17
+ from enum import Enum
18
+ from typing_extensions import Self
19
+
20
+
21
+ class AgentsProfileSortField(str, Enum):
22
+ """
23
+ Available fields for sorting agent profiles
24
+ """
25
+
26
+ """
27
+ allowed enum values
28
+ """
29
+ NAME = 'name'
30
+ CREATED_AT = 'created_at'
31
+ UPDATED_AT = 'updated_at'
32
+
33
+ @classmethod
34
+ def from_json(cls, json_str: str) -> Self:
35
+ """Create an instance of AgentsProfileSortField from a JSON string"""
36
+ return cls(json.loads(json_str))
37
+
38
+
@@ -0,0 +1,129 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Agent Service
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: v1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing_extensions import Annotated
23
+ from asteroid_odyssey.models.agents_profile_cookie import AgentsProfileCookie
24
+ from asteroid_odyssey.models.agents_profile_country_code import AgentsProfileCountryCode
25
+ from asteroid_odyssey.models.agents_profile_credential import AgentsProfileCredential
26
+ from asteroid_odyssey.models.agents_profile_operating_system import AgentsProfileOperatingSystem
27
+ from asteroid_odyssey.models.agents_profile_proxy_type import AgentsProfileProxyType
28
+ from typing import Optional, Set
29
+ from typing_extensions import Self
30
+
31
+ class AgentsProfileUpdateAgentProfileRequest(BaseModel):
32
+ """
33
+ Request to update an existing agent profile
34
+ """ # noqa: E501
35
+ name: Optional[Annotated[str, Field(min_length=1, strict=True, max_length=255)]] = Field(default=None, description="New name for the profile")
36
+ description: Optional[Annotated[str, Field(strict=True, max_length=1000)]] = Field(default=None, description="New description for the profile")
37
+ proxy_cc: Optional[AgentsProfileCountryCode] = Field(default=None, description="Country code for proxy location", alias="proxyCC")
38
+ proxy_type: Optional[AgentsProfileProxyType] = Field(default=None, description="Type of proxy to use (set to empty string to disable proxy)", alias="proxyType")
39
+ captcha_solver_active: Optional[StrictBool] = Field(default=None, description="Whether the captcha solver should be active", alias="captchaSolverActive")
40
+ operating_system: Optional[AgentsProfileOperatingSystem] = Field(default=None, description="Operating system to emulate", alias="operatingSystem")
41
+ extra_stealth: Optional[StrictBool] = Field(default=None, description="Whether to enable extra stealth mode", alias="extraStealth")
42
+ cache_persistence: Optional[StrictBool] = Field(default=None, description="Whether to persist browser cache between sessions", alias="cachePersistence")
43
+ credentials_to_add: Optional[List[AgentsProfileCredential]] = Field(default=None, description="Credentials to add to the profile", alias="credentialsToAdd")
44
+ credentials_to_delete: Optional[List[StrictStr]] = Field(default=None, description="IDs of credentials to remove from the profile", alias="credentialsToDelete")
45
+ cookies_to_add: Optional[List[AgentsProfileCookie]] = Field(default=None, description="Cookies to add to the profile", alias="cookiesToAdd")
46
+ cookies_to_delete: Optional[List[StrictStr]] = Field(default=None, description="IDs of cookies to remove from the profile", alias="cookiesToDelete")
47
+ __properties: ClassVar[List[str]] = ["name", "description", "proxyCC", "proxyType", "captchaSolverActive", "operatingSystem", "extraStealth", "cachePersistence", "credentialsToAdd", "credentialsToDelete", "cookiesToAdd", "cookiesToDelete"]
48
+
49
+ model_config = ConfigDict(
50
+ populate_by_name=True,
51
+ validate_assignment=True,
52
+ protected_namespaces=(),
53
+ )
54
+
55
+
56
+ def to_str(self) -> str:
57
+ """Returns the string representation of the model using alias"""
58
+ return pprint.pformat(self.model_dump(by_alias=True))
59
+
60
+ def to_json(self) -> str:
61
+ """Returns the JSON representation of the model using alias"""
62
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
63
+ return json.dumps(self.to_dict())
64
+
65
+ @classmethod
66
+ def from_json(cls, json_str: str) -> Optional[Self]:
67
+ """Create an instance of AgentsProfileUpdateAgentProfileRequest from a JSON string"""
68
+ return cls.from_dict(json.loads(json_str))
69
+
70
+ def to_dict(self) -> Dict[str, Any]:
71
+ """Return the dictionary representation of the model using alias.
72
+
73
+ This has the following differences from calling pydantic's
74
+ `self.model_dump(by_alias=True)`:
75
+
76
+ * `None` is only added to the output dict for nullable fields that
77
+ were set at model initialization. Other fields with value `None`
78
+ are ignored.
79
+ """
80
+ excluded_fields: Set[str] = set([
81
+ ])
82
+
83
+ _dict = self.model_dump(
84
+ by_alias=True,
85
+ exclude=excluded_fields,
86
+ exclude_none=True,
87
+ )
88
+ # override the default output from pydantic by calling `to_dict()` of each item in credentials_to_add (list)
89
+ _items = []
90
+ if self.credentials_to_add:
91
+ for _item_credentials_to_add in self.credentials_to_add:
92
+ if _item_credentials_to_add:
93
+ _items.append(_item_credentials_to_add.to_dict())
94
+ _dict['credentialsToAdd'] = _items
95
+ # override the default output from pydantic by calling `to_dict()` of each item in cookies_to_add (list)
96
+ _items = []
97
+ if self.cookies_to_add:
98
+ for _item_cookies_to_add in self.cookies_to_add:
99
+ if _item_cookies_to_add:
100
+ _items.append(_item_cookies_to_add.to_dict())
101
+ _dict['cookiesToAdd'] = _items
102
+ return _dict
103
+
104
+ @classmethod
105
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
106
+ """Create an instance of AgentsProfileUpdateAgentProfileRequest from a dict"""
107
+ if obj is None:
108
+ return None
109
+
110
+ if not isinstance(obj, dict):
111
+ return cls.model_validate(obj)
112
+
113
+ _obj = cls.model_validate({
114
+ "name": obj.get("name"),
115
+ "description": obj.get("description"),
116
+ "proxyCC": obj.get("proxyCC"),
117
+ "proxyType": obj.get("proxyType"),
118
+ "captchaSolverActive": obj.get("captchaSolverActive"),
119
+ "operatingSystem": obj.get("operatingSystem"),
120
+ "extraStealth": obj.get("extraStealth"),
121
+ "cachePersistence": obj.get("cachePersistence"),
122
+ "credentialsToAdd": [AgentsProfileCredential.from_dict(_item) for _item in obj["credentialsToAdd"]] if obj.get("credentialsToAdd") is not None else None,
123
+ "credentialsToDelete": obj.get("credentialsToDelete"),
124
+ "cookiesToAdd": [AgentsProfileCookie.from_dict(_item) for _item in obj["cookiesToAdd"]] if obj.get("cookiesToAdd") is not None else None,
125
+ "cookiesToDelete": obj.get("cookiesToDelete")
126
+ })
127
+ return _obj
128
+
129
+
@@ -19,7 +19,7 @@ import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict, Field, StrictInt
21
21
  from typing import Any, ClassVar, Dict, List
22
- from asteroid_odyssey.agents_v2_gen.models.agents_execution_list_item import AgentsExecutionListItem
22
+ from asteroid_odyssey.models.agents_execution_list_item import AgentsExecutionListItem
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
25
25
 
@@ -19,7 +19,7 @@ import ssl
19
19
 
20
20
  import urllib3
21
21
 
22
- from asteroid_odyssey.agents_v2_gen.exceptions import ApiException, ApiValueError
22
+ from asteroid_odyssey.exceptions import ApiException, ApiValueError
23
23
 
24
24
  SUPPORTED_SOCKS_PROXIES = {"socks5", "socks5h", "socks4", "socks4a"}
25
25
  RESTResponseType = urllib3.HTTPResponse
@@ -76,6 +76,7 @@ class RESTClientObject:
76
76
  "ca_certs": configuration.ssl_ca_cert,
77
77
  "cert_file": configuration.cert_file,
78
78
  "key_file": configuration.key_file,
79
+ "ca_cert_data": configuration.ca_cert_data,
79
80
  }
80
81
  if configuration.assert_hostname is not None:
81
82
  pool_args['assert_hostname'] = (
@@ -0,0 +1,65 @@
1
+ Metadata-Version: 2.4
2
+ Name: asteroid-odyssey
3
+ Version: 1.6.0
4
+ Summary: Python SDK for the Asteroid Agents API
5
+ Author-email: Asteroid <founders@asteroid.com>
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/asteroidai/agents
8
+ Project-URL: Homepage, https://asteroid.ai
9
+ Project-URL: Documentation, https://docs.asteroid.ai
10
+ Keywords: OpenAPI,Asteroid Agents API,browser automation,AI agents
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
16
+ Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
17
+ Requires-Python: >=3.9
18
+ Description-Content-Type: text/markdown
19
+ Requires-Dist: urllib3<3.0.0,>=2.1.0
20
+ Requires-Dist: python-dateutil>=2.8.2
21
+ Requires-Dist: pydantic>=2
22
+ Requires-Dist: typing-extensions>=4.7.1
23
+ Requires-Dist: requests>=2.28.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=7.2.1; extra == "dev"
26
+ Requires-Dist: pytest-cov>=2.8.1; extra == "dev"
27
+ Requires-Dist: flake8>=4.0.0; extra == "dev"
28
+ Requires-Dist: mypy>=1.5; extra == "dev"
29
+
30
+ # Asteroid Odyssey Python SDK
31
+
32
+ Python SDK for the Asteroid Agents API.
33
+
34
+ ## Installation
35
+
36
+ ```bash
37
+ pip install asteroid-odyssey
38
+ ```
39
+
40
+ ## Usage
41
+
42
+ ```python
43
+ from asteroid_odyssey import ApiClient, Configuration, ExecutionApi
44
+
45
+ # Configure the client
46
+ config = Configuration(
47
+ host="https://odyssey.asteroid.ai/agents/v2",
48
+ api_key={"ApiKeyAuth": "your-api-key"}
49
+ )
50
+
51
+ client = ApiClient(config)
52
+ execution_api = ExecutionApi(client)
53
+
54
+ # Execute an agent
55
+ response = execution_api.agent_execute_post(
56
+ agent_id="your-agent-id",
57
+ agents_agent_execute_agent_request={"dynamicData": {"input": "value"}}
58
+ )
59
+ print(f"Execution ID: {response.execution_id}")
60
+ ```
61
+
62
+ ## Documentation
63
+
64
+ See [docs.asteroid.ai](https://docs.asteroid.ai) for full documentation.
65
+