asteroid-odyssey 1.3.7__py3-none-any.whl → 1.3.8__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 (89) hide show
  1. asteroid_odyssey/__init__.py +4 -2
  2. asteroid_odyssey/agents_v1_gen/__init__.py +0 -1
  3. asteroid_odyssey/agents_v1_gen/api/execution_api.py +26 -311
  4. asteroid_odyssey/agents_v1_gen/models/__init__.py +0 -1
  5. asteroid_odyssey/agents_v1_gen/models/agent_profile.py +1 -3
  6. asteroid_odyssey/agents_v1_gen/models/create_agent_profile_request.py +1 -3
  7. asteroid_odyssey/agents_v1_gen/models/proxy_type.py +1 -0
  8. asteroid_odyssey/agents_v1_gen/models/update_agent_profile_request.py +1 -3
  9. asteroid_odyssey/agents_v2_gen/__init__.py +53 -15
  10. asteroid_odyssey/agents_v2_gen/api/__init__.py +3 -1
  11. asteroid_odyssey/agents_v2_gen/api/agents_api.py +684 -0
  12. asteroid_odyssey/agents_v2_gen/api/{default_api.py → execution_api.py} +381 -479
  13. asteroid_odyssey/agents_v2_gen/api/files_api.py +895 -0
  14. asteroid_odyssey/agents_v2_gen/models/__init__.py +50 -14
  15. asteroid_odyssey/agents_v2_gen/models/agents_agent_execute_agent_request.py +103 -0
  16. asteroid_odyssey/{agents_v1_gen/models/upload_execution_files200_response.py → agents_v2_gen/models/agents_agent_execute_agent_response.py} +11 -13
  17. asteroid_odyssey/agents_v2_gen/models/agents_execution_action_name.py +93 -0
  18. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_completed_info.py +350 -0
  19. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_completed_payload.py +25 -3
  20. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_failed_payload.py +19 -3
  21. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_started_info.py +252 -0
  22. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_started_payload.py +23 -3
  23. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_file_added_payload.py +10 -1
  24. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_generic_payload.py +11 -2
  25. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_payload_union.py +132 -104
  26. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_playwright_script_generated_payload.py +114 -0
  27. asteroid_odyssey/agents_v2_gen/models/{activity_payload_union_terminal.py → agents_execution_activity_reasoning_payload.py} +9 -13
  28. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_status_changed_payload.py +11 -2
  29. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_step_completed_payload.py +11 -2
  30. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_step_started_payload.py +11 -2
  31. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_transitioned_node_payload.py +20 -4
  32. asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_user_message_received_payload.py +11 -2
  33. asteroid_odyssey/agents_v2_gen/models/{activity_payload_union_action_started.py → agents_execution_activity_workflow_updated_payload.py} +17 -13
  34. asteroid_odyssey/agents_v2_gen/models/agents_execution_comment.py +100 -0
  35. asteroid_odyssey/agents_v2_gen/models/agents_execution_completed_payload.py +4 -11
  36. asteroid_odyssey/agents_v2_gen/models/agents_execution_element_file_upload_completed_details.py +96 -0
  37. asteroid_odyssey/agents_v2_gen/models/agents_execution_execution_result.py +103 -0
  38. asteroid_odyssey/agents_v2_gen/models/agents_execution_ext_api_call_completed_details.py +102 -0
  39. asteroid_odyssey/agents_v2_gen/models/agents_execution_ext_get_mail_completed_details.py +98 -0
  40. asteroid_odyssey/agents_v2_gen/models/agents_execution_failed_payload.py +8 -2
  41. asteroid_odyssey/agents_v2_gen/models/{activity_payload_union_file_added.py → agents_execution_file_list_completed_details.py} +13 -17
  42. asteroid_odyssey/agents_v2_gen/models/agents_execution_file_read_completed_details.py +100 -0
  43. asteroid_odyssey/agents_v2_gen/models/agents_execution_file_stage_completed_details.py +96 -0
  44. asteroid_odyssey/agents_v2_gen/models/agents_execution_human_label.py +96 -0
  45. asteroid_odyssey/agents_v2_gen/models/agents_execution_list_item.py +141 -0
  46. asteroid_odyssey/agents_v2_gen/models/agents_execution_llm_call_purpose.py +40 -0
  47. asteroid_odyssey/agents_v2_gen/models/agents_execution_llm_call_started_details.py +97 -0
  48. asteroid_odyssey/agents_v2_gen/models/agents_execution_nav_to_completed_details.py +96 -0
  49. asteroid_odyssey/agents_v2_gen/models/agents_execution_nav_to_started_details.py +96 -0
  50. asteroid_odyssey/agents_v2_gen/models/agents_execution_obs_snapshot_with_selectors_completed_details.py +98 -0
  51. asteroid_odyssey/agents_v2_gen/models/agents_execution_rules_details.py +87 -0
  52. asteroid_odyssey/agents_v2_gen/models/agents_execution_scratchpad_read_completed_details.py +98 -0
  53. asteroid_odyssey/agents_v2_gen/models/{activity_payload_union_generic.py → agents_execution_scratchpad_read_started_details.py} +20 -17
  54. asteroid_odyssey/agents_v2_gen/models/agents_execution_scratchpad_write_completed_details.py +104 -0
  55. asteroid_odyssey/agents_v2_gen/models/{activity_payload_union_step_started.py → agents_execution_scratchpad_write_started_details.py} +20 -17
  56. asteroid_odyssey/agents_v2_gen/models/agents_execution_script_hybrid_playwright_completed_details.py +102 -0
  57. asteroid_odyssey/agents_v2_gen/models/agents_execution_script_hybrid_playwright_started_details.py +96 -0
  58. asteroid_odyssey/agents_v2_gen/models/agents_execution_script_pad_run_function_completed_details.py +102 -0
  59. asteroid_odyssey/agents_v2_gen/models/agents_execution_script_playwright_completed_details.py +102 -0
  60. asteroid_odyssey/agents_v2_gen/models/agents_execution_script_playwright_started_details.py +96 -0
  61. asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_read_completed_details.py +96 -0
  62. asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_read_started_details.py +98 -0
  63. asteroid_odyssey/agents_v2_gen/models/{activity_payload_union_action_completed.py → agents_execution_scriptpad_run_function_started_details.py} +21 -18
  64. asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_search_replace_completed_details.py +106 -0
  65. asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_search_replace_started_details.py +100 -0
  66. asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_write_completed_details.py +102 -0
  67. asteroid_odyssey/agents_v2_gen/models/agents_execution_sort_field.py +37 -0
  68. asteroid_odyssey/agents_v2_gen/models/agents_execution_terminal_payload.py +11 -2
  69. asteroid_odyssey/agents_v2_gen/models/{activity_payload_union_action_failed.py → agents_execution_util_get_datetime_completed_details.py} +20 -19
  70. asteroid_odyssey/agents_v2_gen/models/agents_execution_util_get_datetime_started_details.py +96 -0
  71. asteroid_odyssey/agents_v2_gen/models/{agents_execution_graph_update.py → agents_execution_workflow_update.py} +11 -5
  72. asteroid_odyssey/agents_v2_gen/models/agents_files_temp_file.py +89 -0
  73. asteroid_odyssey/agents_v2_gen/models/{agents_execution_activity_graph_updated_payload.py → agents_files_temp_files_response.py} +14 -14
  74. asteroid_odyssey/agents_v2_gen/models/agents_graph_models_nodes_properties_playwright_script_llm_var.py +92 -0
  75. asteroid_odyssey/agents_v2_gen/models/agents_graph_models_nodes_properties_playwright_script_llm_var_type.py +38 -0
  76. asteroid_odyssey/agents_v2_gen/models/agents_graph_models_transitions_transition_type.py +38 -0
  77. asteroid_odyssey/agents_v2_gen/models/common_os_error.py +87 -0
  78. asteroid_odyssey/agents_v2_gen/models/executions_list200_response.py +101 -0
  79. asteroid_odyssey/client.py +204 -33
  80. {asteroid_odyssey-1.3.7.dist-info → asteroid_odyssey-1.3.8.dist-info}/METADATA +1 -1
  81. asteroid_odyssey-1.3.8.dist-info/RECORD +132 -0
  82. asteroid_odyssey/agents_v2_gen/models/activity_payload_union_graph_updated.py +0 -100
  83. asteroid_odyssey/agents_v2_gen/models/activity_payload_union_status_changed.py +0 -100
  84. asteroid_odyssey/agents_v2_gen/models/activity_payload_union_step_completed.py +0 -100
  85. asteroid_odyssey/agents_v2_gen/models/activity_payload_union_transitioned_node.py +0 -100
  86. asteroid_odyssey/agents_v2_gen/models/activity_payload_union_user_message_received.py +0 -100
  87. asteroid_odyssey-1.3.7.dist-info/RECORD +0 -95
  88. {asteroid_odyssey-1.3.7.dist-info → asteroid_odyssey-1.3.8.dist-info}/WHEEL +0 -0
  89. {asteroid_odyssey-1.3.7.dist-info → asteroid_odyssey-1.3.8.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,101 @@
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, StrictInt
21
+ from typing import Any, ClassVar, Dict, List
22
+ from asteroid_odyssey.agents_v2_gen.models.agents_execution_list_item import AgentsExecutionListItem
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class ExecutionsList200Response(BaseModel):
27
+ """
28
+ ExecutionsList200Response
29
+ """ # noqa: E501
30
+ items: List[AgentsExecutionListItem]
31
+ page: StrictInt
32
+ page_size: StrictInt = Field(alias="pageSize")
33
+ total: StrictInt
34
+ __properties: ClassVar[List[str]] = ["items", "page", "pageSize", "total"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.model_dump(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> Optional[Self]:
54
+ """Create an instance of ExecutionsList200Response from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self) -> Dict[str, Any]:
58
+ """Return the dictionary representation of the model using alias.
59
+
60
+ This has the following differences from calling pydantic's
61
+ `self.model_dump(by_alias=True)`:
62
+
63
+ * `None` is only added to the output dict for nullable fields that
64
+ were set at model initialization. Other fields with value `None`
65
+ are ignored.
66
+ """
67
+ excluded_fields: Set[str] = set([
68
+ ])
69
+
70
+ _dict = self.model_dump(
71
+ by_alias=True,
72
+ exclude=excluded_fields,
73
+ exclude_none=True,
74
+ )
75
+ # override the default output from pydantic by calling `to_dict()` of each item in items (list)
76
+ _items = []
77
+ if self.items:
78
+ for _item_items in self.items:
79
+ if _item_items:
80
+ _items.append(_item_items.to_dict())
81
+ _dict['items'] = _items
82
+ return _dict
83
+
84
+ @classmethod
85
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
86
+ """Create an instance of ExecutionsList200Response from a dict"""
87
+ if obj is None:
88
+ return None
89
+
90
+ if not isinstance(obj, dict):
91
+ return cls.model_validate(obj)
92
+
93
+ _obj = cls.model_validate({
94
+ "items": [AgentsExecutionListItem.from_dict(_item) for _item in obj["items"]] if obj.get("items") is not None else None,
95
+ "page": obj.get("page"),
96
+ "pageSize": obj.get("pageSize"),
97
+ "total": obj.get("total")
98
+ })
99
+ return _obj
100
+
101
+
@@ -24,7 +24,6 @@ from .agents_v1_gen import (
24
24
  AgentProfileApi as AgentsV1AgentProfileApi,
25
25
  ExecutionStatusResponse,
26
26
  ExecutionResult,
27
- UploadExecutionFiles200Response,
28
27
  Status,
29
28
  StructuredAgentExecutionRequest,
30
29
  CreateAgentProfileRequest,
@@ -39,10 +38,15 @@ from .agents_v2_gen import (
39
38
  AgentList200Response as AgentList200Response,
40
39
  Configuration as AgentsV2Configuration,
41
40
  ApiClient as AgentsV2ApiClient,
42
- DefaultApi as AgentsV2ExecutionApi,
41
+ AgentsApi as AgentsV2AgentsApi,
42
+ ExecutionApi as AgentsV2ExecutionApi,
43
+ FilesApi as AgentsV2FilesApi,
43
44
  AgentsExecutionActivity as ExecutionActivity,
44
45
  AgentsExecutionUserMessagesAddTextBody as ExecutionUserMessagesAddTextBody,
45
46
  AgentsFilesFile as File,
47
+ AgentsAgentExecuteAgentRequest as V2ExecuteAgentRequest,
48
+ AgentsFilesTempFile as TempFile,
49
+ AgentsFilesTempFilesResponse as TempFilesResponse,
46
50
  )
47
51
 
48
52
 
@@ -131,7 +135,7 @@ class AsteroidClient:
131
135
  if api_key is None:
132
136
  raise TypeError("API key cannot be None")
133
137
 
134
- # Configure the API client
138
+ # Configure the V1 API client (used for status, results, profiles, etc.)
135
139
  config = AgentsV1Configuration(
136
140
  host=base_url or "https://odyssey.asteroid.ai/api/v1",
137
141
  api_key={'ApiKeyAuth': api_key}
@@ -142,23 +146,35 @@ class AsteroidClient:
142
146
  self.execution_api = AgentsV1ExecutionApi(self.api_client)
143
147
  self.agent_profile_api = AgentsV1AgentProfileApi(self.api_client)
144
148
 
149
+ # Configure the V2 API client
145
150
  self.agents_v2_config = AgentsV2Configuration(
146
151
  host=base_url or "https://odyssey.asteroid.ai/agents/v2",
147
152
  api_key={'ApiKeyAuth': api_key}
148
153
  )
149
154
  self.agents_v2_api_client = AgentsV2ApiClient(self.agents_v2_config)
155
+ self.agents_v2_agents_api = AgentsV2AgentsApi(self.agents_v2_api_client)
150
156
  self.agents_v2_execution_api = AgentsV2ExecutionApi(self.agents_v2_api_client)
157
+ self.agents_v2_files_api = AgentsV2FilesApi(self.agents_v2_api_client)
151
158
 
152
- # --- V1 ---
153
-
154
- def execute_agent(self, agent_id: str, execution_data: Dict[str, Any], agent_profile_id: Optional[str] = None) -> str:
159
+ def execute_agent(
160
+ self,
161
+ agent_id: str,
162
+ execution_data: Optional[Dict[str, Any]] = None,
163
+ agent_profile_id: Optional[str] = None,
164
+ metadata: Optional[Dict[str, Any]] = None,
165
+ temp_files: Optional[List[TempFile]] = None,
166
+ version: Optional[int] = None,
167
+ ) -> str:
155
168
  """
156
169
  Execute an agent with the provided parameters.
157
170
 
158
171
  Args:
159
172
  agent_id: The ID of the agent to execute
160
- execution_data: The execution parameters
161
- agent_profile_id: Optional ID of the agent profile
173
+ execution_data: Dynamic data to be merged into the placeholders defined in prompts
174
+ agent_profile_id: Optional ID of the agent profile to use
175
+ metadata: Optional metadata key-value pairs for organizing and filtering executions
176
+ temp_files: Optional list of temporary files to attach (must be pre-uploaded using stage file endpoint)
177
+ version: Optional version of the agent to execute. If not provided, the latest version will be used.
162
178
 
163
179
  Returns:
164
180
  The execution ID
@@ -167,15 +183,24 @@ class AsteroidClient:
167
183
  AsteroidAPIError: If the execution request fails
168
184
 
169
185
  Example:
170
- execution_id = client.execute_agent('my-agent-id', {'input': 'some dynamic value'}, 'agent-profile-id')
186
+ execution_id = client.execute_agent('my-agent-id', {'input': 'some dynamic value'})
187
+ execution_id = client.execute_agent('my-agent-id', {'input': 'value'}, version=3)
171
188
  """
172
- req = StructuredAgentExecutionRequest(dynamic_data=execution_data, agent_profile_id=agent_profile_id)
189
+ req = V2ExecuteAgentRequest(
190
+ dynamic_data=execution_data,
191
+ agent_profile_id=agent_profile_id,
192
+ metadata=metadata,
193
+ temp_files=temp_files,
194
+ version=version,
195
+ )
173
196
  try:
174
- response = self.execution_api.execute_agent_structured(agent_id, req)
197
+ response = self.agents_v2_agents_api.agent_execute_post(agent_id, req)
175
198
  return response.execution_id
176
199
  except ApiException as e:
177
200
  raise AsteroidAPIError(f"Failed to execute agent: {e}") from e
178
201
 
202
+ # --- V1 ---
203
+
179
204
  def get_execution_status(self, execution_id: str) -> ExecutionStatusResponse:
180
205
  """
181
206
  Get the current status for an execution.
@@ -309,9 +334,12 @@ class AsteroidClient:
309
334
  execution_id: str,
310
335
  files: List[Union[bytes, str, Tuple[str, bytes]]],
311
336
  default_filename: str = "file.txt"
312
- ) -> UploadExecutionFiles200Response:
337
+ ) -> str:
313
338
  """
314
- Upload files to an execution.
339
+ Upload files to a running execution.
340
+
341
+ Use this method to upload files to an execution that is already in progress.
342
+ If you want to attach files to an execution before it starts, use stage_temp_files instead.
315
343
 
316
344
  Args:
317
345
  execution_id: The execution identifier
@@ -322,18 +350,17 @@ class AsteroidClient:
322
350
  default_filename: Default filename to use when file is provided as bytes
323
351
 
324
352
  Returns:
325
- The upload response containing message and file IDs
353
+ Success message from the API
326
354
 
327
355
  Raises:
328
- Exception: If the upload request fails
356
+ AsteroidAPIError: If the upload request fails
329
357
 
330
358
  Example:
331
- # Upload with file content (file should be in your current working directory)
359
+ # Upload with file content
332
360
  with open('hello.txt', 'r') as f:
333
361
  file_content = f.read()
334
362
 
335
363
  response = client.upload_execution_files(execution_id, [file_content.encode()])
336
- print(f"Uploaded files: {response.file_ids}")
337
364
 
338
365
  # Upload with filename and content
339
366
  files = [('hello.txt', file_content.encode())]
@@ -344,7 +371,7 @@ class AsteroidClient:
344
371
  response = client.upload_execution_files(execution_id, [hello_content])
345
372
  """
346
373
  try:
347
- # Process files to ensure proper format
374
+ # Process files to ensure proper format for the V2 API
348
375
  processed_files = []
349
376
  for file_item in files:
350
377
  if isinstance(file_item, tuple):
@@ -373,7 +400,7 @@ class AsteroidClient:
373
400
  content = str(file_item).encode()
374
401
  processed_files.append((default_filename, content))
375
402
 
376
- response = self.execution_api.upload_execution_files(execution_id, files=processed_files)
403
+ response = self.agents_v2_files_api.execution_context_files_upload(execution_id, files=processed_files)
377
404
  return response
378
405
  except ApiException as e:
379
406
  raise AsteroidAPIError(f"Failed to upload execution files: {e}") from e
@@ -824,17 +851,92 @@ class AsteroidClient:
824
851
  Returns:
825
852
  A list of files associated with the execution
826
853
  Raises:
827
- Exception: If the files request fails
854
+ AsteroidAPIError: If the files request fails
828
855
  Example:
829
856
  files = client.get_execution_files("execution_id")
830
857
  for file in files:
831
858
  print(f"File: {file.file_name}, Size: {file.file_size}")
832
859
  """
833
860
  try:
834
- return self.agents_v2_execution_api.execution_context_files_get(execution_id)
861
+ return self.agents_v2_files_api.execution_context_files_get(execution_id)
835
862
  except ApiException as e:
836
863
  raise AsteroidAPIError(f"Failed to get execution files: {e}") from e
837
864
 
865
+ def stage_temp_files(
866
+ self,
867
+ organization_id: str,
868
+ files: List[Union[bytes, str, Tuple[str, bytes]]],
869
+ default_filename: str = "file.txt"
870
+ ) -> List[TempFile]:
871
+ """
872
+ Stage files before starting an execution.
873
+
874
+ Use this method to pre-upload files that will be attached to an execution when it starts.
875
+ The returned TempFile objects can be passed to execute_agent's temp_files parameter.
876
+
877
+ Args:
878
+ organization_id: The organization identifier
879
+ files: List of files to stage. Each file can be:
880
+ - bytes: Raw file content (will use default_filename)
881
+ - str: File path as string (will read file and use filename)
882
+ - Tuple[str, bytes]: (filename, file_content) tuple
883
+ default_filename: Default filename to use when file is provided as bytes
884
+
885
+ Returns:
886
+ List of TempFile objects that can be passed to execute_agent
887
+
888
+ Raises:
889
+ AsteroidAPIError: If the staging request fails
890
+
891
+ Example:
892
+ # Stage files before execution
893
+ temp_files = client.stage_temp_files("org-123", [
894
+ ("data.csv", csv_content.encode()),
895
+ "/path/to/document.pdf"
896
+ ])
897
+
898
+ # Use staged files when executing agent
899
+ execution_id = client.execute_agent(
900
+ agent_id="my-agent",
901
+ execution_data={"input": "Process these files"},
902
+ temp_files=temp_files
903
+ )
904
+ """
905
+ try:
906
+ # Process files to ensure proper format for the V2 API
907
+ processed_files = []
908
+ for file_item in files:
909
+ if isinstance(file_item, tuple):
910
+ # Already in (filename, content) format
911
+ filename, content = file_item
912
+ if isinstance(content, str):
913
+ content = content.encode()
914
+ processed_files.append((filename, content))
915
+ elif isinstance(file_item, str):
916
+ # Check if string is a file path that exists, otherwise treat as content
917
+ if os.path.isfile(file_item):
918
+ # File path - read the file
919
+ filename = os.path.basename(file_item)
920
+ with open(file_item, 'rb') as f:
921
+ content = f.read()
922
+ processed_files.append((filename, content))
923
+ else:
924
+ # String content - encode and use default filename
925
+ content = file_item.encode()
926
+ processed_files.append((default_filename, content))
927
+ elif isinstance(file_item, bytes):
928
+ # Raw bytes - use default filename
929
+ processed_files.append((default_filename, file_item))
930
+ else:
931
+ # Other types - convert to string content and encode
932
+ content = str(file_item).encode()
933
+ processed_files.append((default_filename, content))
934
+
935
+ response = self.agents_v2_files_api.temp_files_stage(organization_id, files=processed_files)
936
+ return response.temp_files
937
+ except ApiException as e:
938
+ raise AsteroidAPIError(f"Failed to stage temp files: {e}") from e
939
+
838
940
  def download_execution_file(self, file: File, download_path: Union[str, Path],
839
941
  create_dirs: bool = True, timeout: int = 30) -> str:
840
942
  """
@@ -953,25 +1055,44 @@ def create_client(api_key: str, base_url: Optional[str] = None) -> AsteroidClien
953
1055
  """
954
1056
  return AsteroidClient(api_key, base_url)
955
1057
 
956
- # --- V1 ---
957
-
958
- def execute_agent(client: AsteroidClient, agent_id: str, execution_data: Dict[str, Any], agent_profile_id: Optional[str] = None) -> str:
1058
+ def execute_agent(
1059
+ client: AsteroidClient,
1060
+ agent_id: str,
1061
+ execution_data: Optional[Dict[str, Any]] = None,
1062
+ agent_profile_id: Optional[str] = None,
1063
+ metadata: Optional[Dict[str, Any]] = None,
1064
+ temp_files: Optional[List[TempFile]] = None,
1065
+ version: Optional[int] = None,
1066
+ ) -> str:
959
1067
  """
960
1068
  Execute an agent with the provided parameters.
961
1069
 
962
1070
  Args:
963
1071
  client: The AsteroidClient instance
964
1072
  agent_id: The ID of the agent to execute
965
- execution_data: The execution parameters
966
- agent_profile_id: Optional ID of the agent profile
1073
+ execution_data: Dynamic data to be merged into the placeholders defined in prompts
1074
+ agent_profile_id: Optional ID of the agent profile to use
1075
+ metadata: Optional metadata key-value pairs for organizing and filtering executions
1076
+ temp_files: Optional list of temporary files to attach (must be pre-uploaded using stage file endpoint)
1077
+ version: Optional version of the agent to execute. If not provided, the latest version will be used.
967
1078
 
968
1079
  Returns:
969
1080
  The execution ID
970
1081
 
971
1082
  Example:
972
- execution_id = execute_agent(client, 'my-agent-id', {'input': 'some dynamic value'}, 'agent-profile-id')
1083
+ execution_id = execute_agent(client, 'my-agent-id', {'input': 'some dynamic value'})
1084
+ execution_id = execute_agent(client, 'my-agent-id', {'input': 'value'}, version=3)
973
1085
  """
974
- return client.execute_agent(agent_id, execution_data, agent_profile_id)
1086
+ return client.execute_agent(
1087
+ agent_id,
1088
+ execution_data,
1089
+ agent_profile_id,
1090
+ metadata,
1091
+ temp_files,
1092
+ version,
1093
+ )
1094
+
1095
+ # --- V1 ---
975
1096
 
976
1097
 
977
1098
 
@@ -1048,9 +1169,12 @@ def upload_execution_files(
1048
1169
  execution_id: str,
1049
1170
  files: List[Union[bytes, str, Tuple[str, bytes]]],
1050
1171
  default_filename: str = "file.txt"
1051
- ) -> UploadExecutionFiles200Response:
1172
+ ) -> str:
1052
1173
  """
1053
- Upload files to an execution.
1174
+ Upload files to a running execution.
1175
+
1176
+ Use this function to upload files to an execution that is already in progress.
1177
+ If you want to attach files to an execution before it starts, use stage_temp_files instead.
1054
1178
 
1055
1179
  Args:
1056
1180
  client: The AsteroidClient instance
@@ -1059,13 +1183,12 @@ def upload_execution_files(
1059
1183
  default_filename: Default filename to use when file is provided as bytes
1060
1184
 
1061
1185
  Returns:
1062
- The upload response containing message and file IDs
1186
+ Success message from the API
1063
1187
 
1064
1188
  Example:
1065
1189
  # Create a simple text file with "Hello World!" content
1066
1190
  hello_content = "Hello World!".encode()
1067
1191
  response = upload_execution_files(client, execution_id, [hello_content])
1068
- print(f"Uploaded files: {response.file_ids}")
1069
1192
 
1070
1193
  # Or specify filename with content
1071
1194
  files = [('hello.txt', "Hello World!".encode())]
@@ -1074,6 +1197,51 @@ def upload_execution_files(
1074
1197
  return client.upload_execution_files(execution_id, files, default_filename)
1075
1198
 
1076
1199
 
1200
+ def stage_temp_files(
1201
+ client: AsteroidClient,
1202
+ organization_id: str,
1203
+ files: List[Union[bytes, str, Tuple[str, bytes]]],
1204
+ default_filename: str = "file.txt"
1205
+ ) -> List[TempFile]:
1206
+ """
1207
+ Stage files before starting an execution.
1208
+
1209
+ Use this function to pre-upload files that will be attached to an execution when it starts.
1210
+ The returned TempFile objects can be passed to execute_agent's temp_files parameter.
1211
+
1212
+ Args:
1213
+ client: The AsteroidClient instance
1214
+ organization_id: The organization identifier
1215
+ files: List of files to stage. Each file can be:
1216
+ - bytes: Raw file content (will use default_filename)
1217
+ - str: File path as string (will read file and use filename)
1218
+ - Tuple[str, bytes]: (filename, file_content) tuple
1219
+ default_filename: Default filename to use when file is provided as bytes
1220
+
1221
+ Returns:
1222
+ List of TempFile objects that can be passed to execute_agent
1223
+
1224
+ Raises:
1225
+ AsteroidAPIError: If the staging request fails
1226
+
1227
+ Example:
1228
+ # Stage files before execution
1229
+ temp_files = stage_temp_files(client, "org-123", [
1230
+ ("data.csv", csv_content.encode()),
1231
+ "/path/to/document.pdf"
1232
+ ])
1233
+
1234
+ # Use staged files when executing agent
1235
+ execution_id = execute_agent(
1236
+ client,
1237
+ agent_id="my-agent",
1238
+ execution_data={"input": "Process these files"},
1239
+ temp_files=temp_files
1240
+ )
1241
+ """
1242
+ return client.stage_temp_files(organization_id, files, default_filename)
1243
+
1244
+
1077
1245
  def get_browser_session_recording(client: AsteroidClient, execution_id: str) -> str:
1078
1246
  """
1079
1247
  Get the browser session recording URL for a completed execution.
@@ -1359,6 +1527,7 @@ __all__ = [
1359
1527
  'get_execution_result',
1360
1528
  'wait_for_execution_result',
1361
1529
  'upload_execution_files',
1530
+ 'stage_temp_files',
1362
1531
  'get_browser_session_recording',
1363
1532
  'get_agent_profiles',
1364
1533
  'get_agent_profile',
@@ -1375,5 +1544,7 @@ __all__ = [
1375
1544
  'AsteroidAPIError',
1376
1545
  'ExecutionError',
1377
1546
  'TimeoutError',
1378
- 'AgentInteractionResult'
1547
+ 'AgentInteractionResult',
1548
+ 'TempFile',
1549
+ 'TempFilesResponse',
1379
1550
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: asteroid-odyssey
3
- Version: 1.3.7
3
+ Version: 1.3.8
4
4
  Summary: A Python SDK for browser automation using Asteroid platform.
5
5
  Author-email: David Mlcoch <founders@asteroid.com>
6
6
  License-Expression: MIT
@@ -0,0 +1,132 @@
1
+ asteroid_odyssey/__init__.py,sha256=po0AK2n1AiFyeAywL4Ju3qHGzTcRuH2LuXstuXthbT0,1273
2
+ asteroid_odyssey/client.py,sha256=hn4n26Sf6k0qxxBKYFMiKahhKZW1JrvyqfRPLgk9yQI,59685
3
+ asteroid_odyssey/agents_v1_gen/__init__.py,sha256=8ULksHLOQJbxz9LkUs0sHFs47cWst2SeKs3NLGlLCjk,2841
4
+ asteroid_odyssey/agents_v1_gen/api_client.py,sha256=sxH4_y4LtJLTmK9Sd67qYIkHwnbjLGFI7aaL-Y4xZUs,27513
5
+ asteroid_odyssey/agents_v1_gen/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
6
+ asteroid_odyssey/agents_v1_gen/configuration.py,sha256=1t9XRUOXQHxmjI04S56NYuqNXC7Bh-vuDA9jKTzBUK0,18722
7
+ asteroid_odyssey/agents_v1_gen/exceptions.py,sha256=xauMukb96TkgN7Rx5c_d_XWOJb7ldCY5SuTmybyKTr8,6414
8
+ asteroid_odyssey/agents_v1_gen/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ asteroid_odyssey/agents_v1_gen/rest.py,sha256=iduh4ZegNAHkGyuLXUjHAQFp5U82c-dtAMCvTTBO0Fg,9371
10
+ asteroid_odyssey/agents_v1_gen/api/__init__.py,sha256=oj1pzgrbo8C6FrpBVC7IvfUu-uplU4JQjfE_jZE0Mz4,265
11
+ asteroid_odyssey/agents_v1_gen/api/agent_profile_api.py,sha256=uOgyH3VN8LseS5Mq2uFxAbZM5iH88O0YEmXFTMc8bQ0,66369
12
+ asteroid_odyssey/agents_v1_gen/api/api_api.py,sha256=vqZ7wQEQGOpa1D6U1QLL27XK-0DY5_v9tdQJNt_lpsM,19217
13
+ asteroid_odyssey/agents_v1_gen/api/execution_api.py,sha256=S9tbYepfA2KJo_b0yjF9rcrOkXQ43Zr7VSY4Ht_BW5M,57247
14
+ asteroid_odyssey/agents_v1_gen/models/__init__.py,sha256=4PpzL2BSjKC9Xr0D2P4Mx1TQmWzJZ5cPWsyF3pNYBgs,1936
15
+ asteroid_odyssey/agents_v1_gen/models/agent_profile.py,sha256=PDYXOpWJpOYhbYdijVFtbcRseIm-j7Iw6_W3qzMsJ6Y,5561
16
+ asteroid_odyssey/agents_v1_gen/models/browser_session_recording_response.py,sha256=OgYXsMiADk5IIDKkWJTy0RfnnBO3Zbaq9mEUyaxTaH0,2590
17
+ asteroid_odyssey/agents_v1_gen/models/cookie.py,sha256=jvK-SgpFn8Untq3JnHTxDQnznT6Snn7Vnykba1-c3XU,4020
18
+ asteroid_odyssey/agents_v1_gen/models/country_code.py,sha256=pYFM0OC_maaGfUsFTTnKtSJxXKQiNS0pU3O0LLFz_Uo,802
19
+ asteroid_odyssey/agents_v1_gen/models/create_agent_profile_request.py,sha256=cIH7pgti55wHhNh9TJiNJJJuJVVnbje4LL2SjgsUfFM,5453
20
+ asteroid_odyssey/agents_v1_gen/models/credential.py,sha256=MSzwgGLjNiH_fclHpZpYKKDWn-498etD1CLS_EfmA7k,3033
21
+ asteroid_odyssey/agents_v1_gen/models/delete_agent_profile200_response.py,sha256=y6gaG8VLeC2muBcw-i6KG64i-xrHq1v-8A7T8ViwBwk,2514
22
+ asteroid_odyssey/agents_v1_gen/models/error_response.py,sha256=njnDeKZeMPiteuX4l3MsWTHkG4qEiv8sbIUTv0Z8yQY,2459
23
+ asteroid_odyssey/agents_v1_gen/models/execution_response.py,sha256=c4PJNQDsWlQwumSonH1Sxqcb1q521FhNGgZugoinZNA,2513
24
+ asteroid_odyssey/agents_v1_gen/models/execution_result.py,sha256=o6V8oHt9QR7vfRcCrnHwk8exwALUollWBfShze_lzBM,3354
25
+ asteroid_odyssey/agents_v1_gen/models/execution_result_response.py,sha256=zBGBV9FOtCOFE9vDwfWEJkcKMkXYOHluo2ycJlW_S2A,3603
26
+ asteroid_odyssey/agents_v1_gen/models/execution_status_response.py,sha256=ykdr-9kRFmIs3FnmsYWrlX4s-096wlMy3BQX6CCdiBc,3050
27
+ asteroid_odyssey/agents_v1_gen/models/health_check200_response.py,sha256=x_6F6rhTvqpuMUFtD5ynLrUFY4vuVdkWfDRkTx2hVp0,2548
28
+ asteroid_odyssey/agents_v1_gen/models/health_check500_response.py,sha256=b6pG-pqUKkQ5oqmWWyakdr7YYjnTYYeZjoVHkcU-TSY,2533
29
+ asteroid_odyssey/agents_v1_gen/models/proxy_type.py,sha256=zZ2MI0w7PZ8_a3KCLlNqQUcf99qyvuRSMWwyjaEDT-o,724
30
+ asteroid_odyssey/agents_v1_gen/models/status.py,sha256=tnt_4jdoMzcjo6J0vttf2QKLNK0FC9XcjZKbGC3sbz0,889
31
+ asteroid_odyssey/agents_v1_gen/models/structured_agent_execution_request.py,sha256=VZyW85pVz9T27aiG4ZlGywnnxTOaJCAjHSDz8D2YxY8,2913
32
+ asteroid_odyssey/agents_v1_gen/models/update_agent_profile_request.py,sha256=zFy3EoYm9-nCncNPHwZDX7I5O2ZlKRJH6foPk0sAhA8,5895
33
+ asteroid_odyssey/agents_v2_gen/__init__.py,sha256=iR4Io6QLbZUU_NUNvYe2Xeo1M9ueJc2dGZLwQS7JH9k,11969
34
+ asteroid_odyssey/agents_v2_gen/api_client.py,sha256=zf8LBIbhuInmYPs4iTmxc8mU4gwONeX3JPq3D8ZTftM,27573
35
+ asteroid_odyssey/agents_v2_gen/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
36
+ asteroid_odyssey/agents_v2_gen/configuration.py,sha256=z_um4Jc01mYd-U0-8J74KOy2AJYq6KDtcRxBtDFVsEQ,18593
37
+ asteroid_odyssey/agents_v2_gen/exceptions.py,sha256=UnVNkXG6lZtS5J3YpOcPu3rg5SUP1XRwSyYJl30rM0M,6474
38
+ asteroid_odyssey/agents_v2_gen/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ asteroid_odyssey/agents_v2_gen/rest.py,sha256=pSjg1rCUe0Z7K1xrRtsHwQo7Xa-yF35k2o2ORAdbiKY,9431
40
+ asteroid_odyssey/agents_v2_gen/api/__init__.py,sha256=zP96zXtocDaIDci8REJzcl6ARlnBapyslSrPf7-JiT0,256
41
+ asteroid_odyssey/agents_v2_gen/api/agents_api.py,sha256=UAIQsb3CLwN-q_cwlEH3sfOwfEvaT67E5OSDpVXFK9M,26558
42
+ asteroid_odyssey/agents_v2_gen/api/execution_api.py,sha256=F9hQRxRItKRvru3drCnXzIcLfU2bwmrdW6TZPENr8B4,62441
43
+ asteroid_odyssey/agents_v2_gen/api/files_api.py,sha256=jcIgHi2b6g49eh07bVd99LdWXGpZuN0czmrWoxayqSQ,35517
44
+ asteroid_odyssey/agents_v2_gen/models/__init__.py,sha256=xjB5hYPR0x4Tul9qvGYE1GHbcV8_rukGasojBKeB1IY,11073
45
+ asteroid_odyssey/agents_v2_gen/models/agent_list200_response.py,sha256=09DlBwTk0VSWPgfLewU9HkNncyrz1ij2I7PxtaYQC8o,3249
46
+ asteroid_odyssey/agents_v2_gen/models/agents_agent_base.py,sha256=XfW4gpuvynUZ1JJn1ovnLBcM25fB_Ctgnm7VO1NoiNg,2955
47
+ asteroid_odyssey/agents_v2_gen/models/agents_agent_execute_agent_request.py,sha256=BDOK7pn3RTNIlmSTFspgtxpTy8AQa0MC0pJp9-b_VgI,4245
48
+ asteroid_odyssey/agents_v2_gen/models/agents_agent_execute_agent_response.py,sha256=iPx3FB9Che9HSG5DBvCq4SUZonxch-R7XkxlXe9qqvM,2661
49
+ asteroid_odyssey/agents_v2_gen/models/agents_agent_sort_field.py,sha256=vxZxy30RGb858YI2WH8Z1U_vV9yRzKnaCCRAJj9Xek0,780
50
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_action_name.py,sha256=NT6N_rccFXAMxCKxoPVVQhS5GVPVVysP8lRD53B4d4g,3147
51
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity.py,sha256=ZaqHV8COfTp_uCk6zQcyAigsaZwpm1RloaPeC6oQ4-g,3228
52
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_completed_info.py,sha256=c5l6ZxFjC6Ls_FedPgn6kz8jTS4vfGZK3SSH5YyfyWI,26403
53
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_completed_payload.py,sha256=Mqj-jehnNVGsnimLLrA8gnPepUlxOoc8vR5urHIGyWM,4002
54
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_failed_payload.py,sha256=ODI7ITkecfd2mFiRIt8zM1xd1jclso4687_devJZPVs,3484
55
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_started_info.py,sha256=isHHsViPhoDVEo6zRXDAzQURfiELz5X7dJwV-7yuVeI,16963
56
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_action_started_payload.py,sha256=FWDYKyFYQrmLDF6BMg_X6KtNN2AtXMX2doHuY0Do-HI,3873
57
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_file_added_payload.py,sha256=ZwoVj55vRP3hLEgP6YCjNeUU7jo34XXuxuoJbaOPOvY,3820
58
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_generic_payload.py,sha256=ClyP-v4Ck3zq7ns6hNb6ZosxOn4Kd2raLQSJWIjDPmM,2986
59
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_payload_union.py,sha256=bUTqlQzUOfkK7RWMCWqw57qzg4HXUq1Jb1Uy7ZWcqD8,21779
60
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_playwright_script_generated_payload.py,sha256=VLtpJynT9Ov2I5qW0bdDvvPYVCRbrMACvIqBTrIJ1hs,4332
61
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_reasoning_payload.py,sha256=eRIZ54HaiUNDbUACmiEShc32FNO8Auu3MAJRyFoUVYs,3006
62
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_status_changed_payload.py,sha256=WQeZCuXGDQRYohFXj99D7Krvc_uOewMr3Y3TA02xyuk,6248
63
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_step_completed_payload.py,sha256=TxWr78dmHY3DZ88yXci1AmVtetSzMWn8nFEnhGmZuEQ,3076
64
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_step_started_payload.py,sha256=mSzcUN46hbTFuxPrVLeQL0wZ9aXVsBS68djbrquQ7o0,3064
65
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_transitioned_node_payload.py,sha256=Za7hC7rkjt7LqGsEhywCu9XtwXI7W4nnafFg1E59tDI,3867
66
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_user_message_received_payload.py,sha256=thhGRBVaAo5bMtwLisOeTbhJd0EUaiZvE3-fzsb0aeY,3170
67
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_activity_workflow_updated_payload.py,sha256=wmAQhvbDonf0-yT32fVnAowp6i_oRseYfTOsEBHodUk,3729
68
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_awaiting_confirmation_payload.py,sha256=ebQJgeBSCQpLM_Z601NFSg8xQF9b5MsvGVY59dgCWW4,2595
69
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_cancel_reason.py,sha256=oOJGrFL0N4BYFQLcT8WfBCbhk2ccyly733vqwEd-Ewc,843
70
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_cancelled_payload.py,sha256=1rU132jiPc4Ol2S8VqzAn0SDglL6UjcSNDpP-QHuD9Q,2667
71
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_comment.py,sha256=yPq0I7_YCoHZQkV1vfUgkKotJCbDVCw2woUcYB-oBgs,3519
72
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_completed_payload.py,sha256=1Ca4Xvr6L7tj1faEmLeWMFJdKP5_GmWsRQy1EvrxlI8,3060
73
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_element_file_upload_completed_details.py,sha256=1snXxE6gAILCwVSKborLGS5X5YbuEj_vdEt1BYVFbHw,3082
74
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_execution_result.py,sha256=HHPCn5OP0MtH_NUh4QnN0Crq227vxVD3vTDngV12ilc,3560
75
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_ext_api_call_completed_details.py,sha256=-HKJ0FTzX7uyo5J4TuFXqiwvKFgaRVS_FpiC2JLmemo,3476
76
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_ext_get_mail_completed_details.py,sha256=EUcy_L7suF7GwAmG0FUnb22-o3J7vG-n5IgO8x9q_IU,3123
77
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_failed_payload.py,sha256=wbP_Z7ATkE6s8gwSBkYtWJ_GORM74rT4608znA26sZc,2966
78
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_file_list_completed_details.py,sha256=7HT4SLGnjBeBQ9e4-Ly260PHt1ZqYWZbqwe1HxOc5oE,3026
79
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_file_read_completed_details.py,sha256=4LVTrL7iS2yfE4JAMXNeCxAPaVfgJSKVqih_T6Vgb5I,3352
80
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_file_stage_completed_details.py,sha256=aowoJrFg-jwZQ3ImE1WRdMR-8gS2qo4bxrBavbQSCbk,3032
81
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_human_label.py,sha256=kjFJmgimqWECegmLpeiomykYdupyvw67s3OXS5vNutg,3218
82
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_list_item.py,sha256=04WyY7ZgFGV8iJxBaiYLvJKGaQJX7zxY5XK5eN72hCc,7415
83
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_llm_call_purpose.py,sha256=ZyMEExVLDmrRDU25GWEePHAnDhKFEgJmUaU4h7ij2lU,1065
84
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_llm_call_started_details.py,sha256=18pbGktwRxtLhvGm58uAvihD9Ve3hKrWrsrPzMfhAGY,3104
85
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_nav_to_completed_details.py,sha256=x3FB2vujx1Kedlplfe6jaZ6KhchFuX0KCliZbGgUDzE,3036
86
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_nav_to_started_details.py,sha256=lphdKOrjjT08uNkk4LEHEOcZZuxgx7M_yDtGsK0Nybo,2942
87
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_node_details.py,sha256=ER2CJB4e_zIJyBlDxoi-oh3DyOEdzG7lQKo_GWLZ-KI,2779
88
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_obs_snapshot_with_selectors_completed_details.py,sha256=K8E5epBkFfqqkDWjfaiZZFjCfLqMt396mWtEdArUMAg,3137
89
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_paused_payload.py,sha256=slW-OsLyXs3JyDE9Zx8YGIU2y0msgoKCbHDG8IkYG8k,2539
90
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_rules_details.py,sha256=6QJ_XkLzSlgxxJqEjnM2jKzgbMkskHqdNSWG4ri_eNk,2531
91
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scratchpad_read_completed_details.py,sha256=O-uAgkiTNSMMO6mXOREsdigyXaYDMdm0X6OAr0LuqaM,3232
92
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scratchpad_read_started_details.py,sha256=LHzefgHTPiQGvo97t5fz4e8EM6P7ZpdSllFe4kzB82g,3261
93
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scratchpad_write_completed_details.py,sha256=-ktkWvB7F9JolKMtc6cAsZFsAm2hcAyxsbicVWphVa0,3633
94
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scratchpad_write_started_details.py,sha256=Wc7H4oUeZQrgPtyBtvJRTsAwT4T3Bw0RPvrA57jMXoE,3269
95
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_script_hybrid_playwright_completed_details.py,sha256=MGkJf5BsCaMGIKCa3t1p1QvMwLAN4DvkydUzajrG3u8,3448
96
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_script_hybrid_playwright_started_details.py,sha256=RAIS0GZu3HfLr2J0pgBJMRjYH7_m0q8krvrpVkHyKpk,3128
97
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_script_pad_run_function_completed_details.py,sha256=VzmtRheJNRdSwC7eTFmcQMbie8iF4oSuZAA1NkLNX5A,3436
98
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_script_playwright_completed_details.py,sha256=asMLJqKvtwxOmKTDxoVolSthM3-iYo2y20qe9F0843c,3410
99
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_script_playwright_started_details.py,sha256=pPvKZwP6On90isiWWuGVfJsXG-Z2Q0bZK2f3EYUCsAg,3090
100
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_read_completed_details.py,sha256=pBxpEg8tJJFZUu_A0t42K0S_OnORBuHiLcgk4EBi4rg,3014
101
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_read_started_details.py,sha256=BRRyOYYpp3vrbt6Nevs6ii0QRs5_vt_5dzyqAR2tyAs,3082
102
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_run_function_started_details.py,sha256=JeAR9md01kMYdV95cN0V3kyB5bumh-ijBioPltdVWCg,3419
103
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_search_replace_completed_details.py,sha256=ESxQ2d2zJPIBRuMBKE_dK2wzXikMfNn9qeOPA1UpRpk,3873
104
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_search_replace_started_details.py,sha256=dVrKojDR6OZcLYndQUnEdMTOYDqLc8oAP9tPZovUwtU,3266
105
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_scriptpad_write_completed_details.py,sha256=vF088dn0Tqu7K6BNFlknBOcCoyy5SaLJ4sfuw6kpnOA,3450
106
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_sort_field.py,sha256=KVc_CoONxPHD8MQ2x9T5Y9ejbQYzdv0j1e07cZeWe6I,818
107
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_status.py,sha256=xGM7e94JQGqf9tA4nl0hpmJWFLTIyLhPDLR-bnx_QuY,977
108
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_terminal_payload.py,sha256=InBz7gXuGozbEOkNFAcomTW--B36D6JxhxqM4EwwEoc,3351
109
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_transition_details.py,sha256=v9DuY5uODsDIO49hxUcn8gfUv7fED7G6Nz2Qf95iT2o,2755
110
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_update_type.py,sha256=2oVD53MapRhp93RB9fBDltn9ZWlR0rNApk-dLR5P-Rg,803
111
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_user_messages_add_text_body.py,sha256=RvfuJaVRDkEunpPBdLBVEfj7muuIokoQXHxZJ_o1FHE,2583
112
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_util_get_datetime_completed_details.py,sha256=jcgZw6TjVGrrUcr2Zslo4Q7qKFr3VQS1FMqT7z-Ap8Y,3407
113
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_util_get_datetime_started_details.py,sha256=hReMWYIPNZxHIM5MfzQbMt4MFGQHgVhwuh5qxEjoaJg,3112
114
+ asteroid_odyssey/agents_v2_gen/models/agents_execution_workflow_update.py,sha256=qSvecAMSzPL9ELr3qyUhpjbnXtILOovkcOn8OT9KpII,4424
115
+ asteroid_odyssey/agents_v2_gen/models/agents_files_file.py,sha256=nw4_8muCPxjAaRkjXNtM3iD-_IBwOjjX223q9pq7R5s,3613
116
+ asteroid_odyssey/agents_v2_gen/models/agents_files_temp_file.py,sha256=XjavH68R-o3d_EuVRaFNbnaJZXoiaSMMeIornmk2LJA,2552
117
+ asteroid_odyssey/agents_v2_gen/models/agents_files_temp_files_response.py,sha256=NpcTPzxlBi4N9NIJOedRCJQey_ODcO9jJ0jKY_Wmz6o,3127
118
+ asteroid_odyssey/agents_v2_gen/models/agents_graph_models_nodes_properties_playwright_script_llm_var.py,sha256=m9PSQs4BBSM6aO-akyK4_qdYGjHuc5Kv8akT9XMWfyI,3019
119
+ asteroid_odyssey/agents_v2_gen/models/agents_graph_models_nodes_properties_playwright_script_llm_var_type.py,sha256=lu_J1UrE9WKhzNJV34kVDxKxsjV3fvFBJjnnB0LsgIE,914
120
+ asteroid_odyssey/agents_v2_gen/models/agents_graph_models_transitions_transition_type.py,sha256=QnUO0ARjDeBRhPdRiR2emGrSkD8lIJnNgpzG7OHzeTg,882
121
+ asteroid_odyssey/agents_v2_gen/models/common_bad_request_error_body.py,sha256=cZQcZH6c2RmQleZe57-mfUsCKW74lGGtVMWbJFGc1ho,2889
122
+ asteroid_odyssey/agents_v2_gen/models/common_error.py,sha256=to8zl1yPqcf8hRXEZeOrhuA_jWhmpaMmly5Y_Xl129k,2551
123
+ asteroid_odyssey/agents_v2_gen/models/common_forbidden_error_body.py,sha256=9yADAujD_9eTW4BtZ7oYifmFCDTpAw-j1jEEJhwdAVs,2885
124
+ asteroid_odyssey/agents_v2_gen/models/common_not_found_error_body.py,sha256=BAVAweVD5ltGL2lWfdDNwaq82CI4iVkPVE_E9JfEpi8,2881
125
+ asteroid_odyssey/agents_v2_gen/models/common_os_error.py,sha256=5hF0Q4D2sYdRe-F-mDT1FmD5yH4PcbKRlm8VkqDtBC4,2483
126
+ asteroid_odyssey/agents_v2_gen/models/common_sort_direction.py,sha256=UBW99PM3QRGRRE7dB5OSBhmhogmsXQQsrw66j0fg_xc,763
127
+ asteroid_odyssey/agents_v2_gen/models/executions_list200_response.py,sha256=hmZBiOEUKpzEptDcElwgNwhCwSnXFJsrBbb9w2amGiM,3302
128
+ asteroid_odyssey/agents_v2_gen/models/version.py,sha256=Vjiri_a5CcDJ1lSziRqif5HuFpaxneVDLIB1r8SFIkE,707
129
+ asteroid_odyssey-1.3.8.dist-info/METADATA,sha256=CgC3RezOclwF6timGiFyaLtJHInS2dDHFf-sWwBDFtY,7108
130
+ asteroid_odyssey-1.3.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
131
+ asteroid_odyssey-1.3.8.dist-info/top_level.txt,sha256=h4T6NKscnThJ4Nhzors2NKlJeZzepnM7XvDgsnfi5HA,17
132
+ asteroid_odyssey-1.3.8.dist-info/RECORD,,