plato-sdk-v2 2.5.0__py3-none-any.whl → 2.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 (50) hide show
  1. plato/_generated/__init__.py +1 -1
  2. plato/_generated/api/v1/evals/get_scores_by_user.py +7 -0
  3. plato/_generated/api/v1/testcases/get_testcases.py +14 -0
  4. plato/_generated/api/v2/sessions/setup_sandbox.py +2 -2
  5. plato/_generated/models/__init__.py +42 -2
  6. plato/chronos/api/admin/__init__.py +17 -0
  7. plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py +57 -0
  8. plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py +67 -0
  9. plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py +67 -0
  10. plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py +67 -0
  11. plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py +67 -0
  12. plato/chronos/api/agents/list_agents.py +5 -5
  13. plato/chronos/api/checkpoints/__init__.py +8 -0
  14. plato/chronos/api/checkpoints/list_checkpoints.py +52 -0
  15. plato/chronos/api/checkpoints/preview_checkpoint.py +74 -0
  16. plato/chronos/api/events/__init__.py +8 -0
  17. plato/chronos/api/events/get_session_event.py +68 -0
  18. plato/chronos/api/events/list_session_events.py +62 -0
  19. plato/chronos/api/jobs/launch_job.py +8 -2
  20. plato/chronos/api/otel/__init__.py +8 -0
  21. plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py +56 -0
  22. plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py +49 -0
  23. plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +5 -5
  24. plato/chronos/api/runtimes/__init__.py +2 -1
  25. plato/chronos/api/runtimes/get_runtime_logs.py +61 -0
  26. plato/chronos/api/sessions/__init__.py +24 -1
  27. plato/chronos/api/sessions/close_session.py +66 -0
  28. plato/chronos/api/sessions/complete_session.py +74 -0
  29. plato/chronos/api/sessions/create_session.py +69 -0
  30. plato/chronos/api/sessions/get_session.py +20 -2
  31. plato/chronos/api/sessions/get_session_bash_logs_download.py +61 -0
  32. plato/chronos/api/sessions/get_session_envs.py +62 -0
  33. plato/chronos/api/sessions/get_session_live_logs.py +62 -0
  34. plato/chronos/api/sessions/get_session_logs.py +3 -3
  35. plato/chronos/api/sessions/get_session_status.py +62 -0
  36. plato/chronos/api/sessions/list_sessions.py +20 -2
  37. plato/chronos/api/sessions/list_tags.py +80 -0
  38. plato/chronos/api/sessions/update_session_tags.py +68 -0
  39. plato/chronos/models/__init__.py +241 -196
  40. plato/v1/cli/chronos.py +62 -0
  41. plato/v2/__init__.py +8 -0
  42. plato/v2/async_/__init__.py +4 -0
  43. plato/v2/async_/chronos.py +419 -0
  44. plato/v2/sync/__init__.py +3 -0
  45. plato/v2/sync/chronos.py +419 -0
  46. plato/worlds/base.py +12 -2
  47. {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/METADATA +1 -1
  48. {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/RECORD +50 -23
  49. {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/WHEEL +0 -0
  50. {plato_sdk_v2-2.5.0.dist-info → plato_sdk_v2-2.6.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,419 @@
1
+ """Plato SDK v2 - Synchronous Chronos Client.
2
+
3
+ Provides high-level APIs for managing Chronos sessions and jobs programmatically.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import logging
9
+ import os
10
+ import time
11
+ from typing import Any
12
+
13
+ import httpx
14
+ from dotenv import load_dotenv
15
+
16
+ from plato.chronos.api.jobs import launch_job
17
+ from plato.chronos.api.sessions import (
18
+ close_session,
19
+ complete_session,
20
+ get_session,
21
+ get_session_envs,
22
+ get_session_logs,
23
+ get_session_status,
24
+ list_sessions,
25
+ list_tags,
26
+ update_session_tags,
27
+ )
28
+ from plato.chronos.models import (
29
+ CompleteSessionRequest,
30
+ LaunchJobRequest,
31
+ LaunchJobResponse,
32
+ RuntimeConfig,
33
+ SessionEnvsResponse,
34
+ SessionListResponse,
35
+ SessionLogsResponse,
36
+ SessionResponse,
37
+ SessionStatusResponse,
38
+ TagsListResponse,
39
+ UpdateTagsRequest,
40
+ WorldConfig,
41
+ )
42
+
43
+ load_dotenv()
44
+
45
+ logger = logging.getLogger(__name__)
46
+
47
+ DEFAULT_CHRONOS_URL = "https://chronos.plato.so"
48
+ DEFAULT_TIMEOUT = 120.0
49
+
50
+
51
+ class ChronosSession:
52
+ """Wrapper for a Chronos session with convenient methods.
53
+
54
+ Provides methods to check status, get logs, update tags, and stop the session.
55
+ """
56
+
57
+ def __init__(
58
+ self,
59
+ http_client: httpx.Client,
60
+ api_key: str,
61
+ session_id: str,
62
+ plato_session_id: str | None = None,
63
+ ):
64
+ self._http = http_client
65
+ self._api_key = api_key
66
+ self._session_id = session_id
67
+ self._plato_session_id = plato_session_id
68
+
69
+ @property
70
+ def session_id(self) -> str:
71
+ """Get the Chronos session public ID."""
72
+ return self._session_id
73
+
74
+ @property
75
+ def plato_session_id(self) -> str | None:
76
+ """Get the underlying Plato session ID."""
77
+ return self._plato_session_id
78
+
79
+ def get_status(self) -> SessionStatusResponse:
80
+ """Get the current status of the session (lightweight).
81
+
82
+ Returns:
83
+ SessionStatusResponse with status and status_reason.
84
+ """
85
+ return get_session_status.sync(
86
+ client=self._http,
87
+ public_id=self._session_id,
88
+ x_api_key=self._api_key,
89
+ )
90
+
91
+ def get_details(self) -> SessionResponse:
92
+ """Get full session details including trajectory and world config.
93
+
94
+ Returns:
95
+ SessionResponse with full session details.
96
+ """
97
+ return get_session.sync(
98
+ client=self._http,
99
+ public_id=self._session_id,
100
+ x_api_key=self._api_key,
101
+ )
102
+
103
+ def get_envs(self) -> SessionEnvsResponse:
104
+ """Get environment information for this session.
105
+
106
+ Returns:
107
+ SessionEnvsResponse with list of environments.
108
+ """
109
+ return get_session_envs.sync(
110
+ client=self._http,
111
+ public_id=self._session_id,
112
+ x_api_key=self._api_key,
113
+ )
114
+
115
+ def get_logs(
116
+ self,
117
+ limit: int = 10000,
118
+ ) -> SessionLogsResponse:
119
+ """Get logs for this session.
120
+
121
+ Args:
122
+ limit: Maximum number of log entries to return.
123
+
124
+ Returns:
125
+ SessionLogsResponse with log entries.
126
+ """
127
+ return get_session_logs.sync(
128
+ client=self._http,
129
+ public_id=self._session_id,
130
+ limit=limit,
131
+ x_api_key=self._api_key,
132
+ )
133
+
134
+ def update_tags(self, tags: list[str]) -> SessionResponse:
135
+ """Update tags for this session.
136
+
137
+ Args:
138
+ tags: List of tags (use '.' for hierarchy, '_' instead of '-').
139
+
140
+ Returns:
141
+ Updated SessionResponse.
142
+ """
143
+ # Normalize tags
144
+ normalized = [tag.replace("-", "_").replace(":", ".").replace(" ", "_") for tag in tags]
145
+ request = UpdateTagsRequest(tags=normalized)
146
+ return update_session_tags.sync(
147
+ client=self._http,
148
+ public_id=self._session_id,
149
+ body=request,
150
+ x_api_key=self._api_key,
151
+ )
152
+
153
+ def stop(self, error_message: str = "Cancelled by user") -> SessionResponse:
154
+ """Stop/cancel this session.
155
+
156
+ Args:
157
+ error_message: Reason for stopping.
158
+
159
+ Returns:
160
+ Updated SessionResponse.
161
+ """
162
+ request = CompleteSessionRequest(
163
+ status="cancelled",
164
+ error_message=error_message,
165
+ )
166
+ return complete_session.sync(
167
+ client=self._http,
168
+ public_id=self._session_id,
169
+ body=request,
170
+ x_api_key=self._api_key,
171
+ )
172
+
173
+ def complete(
174
+ self,
175
+ status: str = "completed",
176
+ exit_code: int | None = None,
177
+ error_message: str | None = None,
178
+ ) -> SessionResponse:
179
+ """Mark session as completed or failed.
180
+
181
+ Args:
182
+ status: Final status ('completed', 'failed', or 'cancelled').
183
+ exit_code: Optional exit code from world runner.
184
+ error_message: Error message if failed.
185
+
186
+ Returns:
187
+ Updated SessionResponse.
188
+ """
189
+ request = CompleteSessionRequest(
190
+ status=status,
191
+ exit_code=exit_code,
192
+ error_message=error_message,
193
+ )
194
+ return complete_session.sync(
195
+ client=self._http,
196
+ public_id=self._session_id,
197
+ body=request,
198
+ x_api_key=self._api_key,
199
+ )
200
+
201
+ def close(self) -> None:
202
+ """Close the Plato session (release VM resources).
203
+
204
+ Note: This closes the underlying Plato session, not just the Chronos record.
205
+ """
206
+ close_session.sync(
207
+ client=self._http,
208
+ public_id=self._session_id,
209
+ x_api_key=self._api_key,
210
+ )
211
+
212
+ def wait_until_complete(
213
+ self,
214
+ timeout: float = 3600.0,
215
+ poll_interval: float = 5.0,
216
+ ) -> SessionResponse:
217
+ """Wait until the session reaches a terminal state.
218
+
219
+ Args:
220
+ timeout: Maximum time to wait in seconds.
221
+ poll_interval: Time between status checks.
222
+
223
+ Returns:
224
+ Final SessionResponse.
225
+
226
+ Raises:
227
+ TimeoutError: If session doesn't complete within timeout.
228
+ """
229
+ terminal_statuses = {"completed", "failed", "cancelled", "error"}
230
+ elapsed = 0.0
231
+
232
+ while elapsed < timeout:
233
+ status_response = self.get_status()
234
+ if status_response.status in terminal_statuses:
235
+ return self.get_details()
236
+
237
+ time.sleep(poll_interval)
238
+ elapsed += poll_interval
239
+
240
+ raise TimeoutError(f"Session {self._session_id} did not complete within {timeout} seconds")
241
+
242
+ def __repr__(self) -> str:
243
+ return f"ChronosSession(session_id={self._session_id!r})"
244
+
245
+
246
+ class Chronos:
247
+ """Synchronous client for Chronos job management API.
248
+
249
+ Provides high-level methods for launching jobs, managing sessions,
250
+ and monitoring job status.
251
+
252
+ Usage:
253
+ from plato.v2.sync import Chronos
254
+
255
+ with Chronos() as chronos:
256
+ # Launch a job
257
+ session = chronos.launch(
258
+ world_package="plato-world-computer-use",
259
+ world_config={"task": "Navigate to google.com"},
260
+ tags=["test", "project.my_project"],
261
+ )
262
+
263
+ # Wait for completion
264
+ result = session.wait_until_complete()
265
+ print(f"Status: {result.status}")
266
+
267
+ # Or poll manually
268
+ while True:
269
+ status = session.get_status()
270
+ if status.status in ("completed", "failed"):
271
+ break
272
+ time.sleep(5)
273
+ """
274
+
275
+ def __init__(
276
+ self,
277
+ api_key: str | None = None,
278
+ base_url: str | None = None,
279
+ timeout: float = DEFAULT_TIMEOUT,
280
+ ):
281
+ """Initialize the Chronos client.
282
+
283
+ Args:
284
+ api_key: Plato API key. Falls back to PLATO_API_KEY env var.
285
+ base_url: Chronos API base URL. Falls back to CHRONOS_URL env var.
286
+ timeout: Request timeout in seconds.
287
+ """
288
+ resolved_api_key = api_key or os.environ.get("PLATO_API_KEY")
289
+ if not resolved_api_key:
290
+ raise ValueError("API key required. Set PLATO_API_KEY or pass api_key=")
291
+ self._api_key: str = resolved_api_key
292
+
293
+ url = base_url or os.environ.get("CHRONOS_URL", DEFAULT_CHRONOS_URL)
294
+ self.base_url = url.rstrip("/")
295
+ self.timeout = timeout
296
+
297
+ self._http = httpx.Client(
298
+ base_url=self.base_url,
299
+ timeout=httpx.Timeout(timeout),
300
+ )
301
+
302
+ def launch(
303
+ self,
304
+ world_package: str,
305
+ world_config: dict[str, Any] | None = None,
306
+ runtime_artifact_id: str | None = None,
307
+ tags: list[str] | None = None,
308
+ ) -> ChronosSession:
309
+ """Launch a new Chronos job.
310
+
311
+ Args:
312
+ world_package: World package name with optional version
313
+ (e.g., "plato-world-computer-use:0.1.0").
314
+ world_config: Configuration passed to the world runner.
315
+ runtime_artifact_id: Optional runtime artifact ID for cached environment.
316
+ tags: Optional tags for organizing sessions (use '.' for hierarchy).
317
+
318
+ Returns:
319
+ ChronosSession for monitoring and managing the job.
320
+
321
+ Example:
322
+ session = chronos.launch(
323
+ world_package="plato-world-computer-use",
324
+ world_config={
325
+ "task": "Navigate to google.com",
326
+ "agents": [{"name": "computer-use", "version": "latest"}],
327
+ },
328
+ tags=["project.my_project", "env.dev"],
329
+ )
330
+ """
331
+ # Normalize tags
332
+ normalized_tags = None
333
+ if tags:
334
+ normalized_tags = [tag.replace("-", "_").replace(":", ".").replace(" ", "_") for tag in tags]
335
+
336
+ request = LaunchJobRequest(
337
+ world=WorldConfig(
338
+ package=world_package,
339
+ config=world_config,
340
+ ),
341
+ runtime=RuntimeConfig(artifact_id=runtime_artifact_id) if runtime_artifact_id else None,
342
+ tags=normalized_tags,
343
+ )
344
+
345
+ response: LaunchJobResponse = launch_job.sync(
346
+ client=self._http,
347
+ body=request,
348
+ x_api_key=self._api_key,
349
+ )
350
+
351
+ logger.info(f"Launched Chronos job: {response.session_id}")
352
+
353
+ return ChronosSession(
354
+ http_client=self._http,
355
+ api_key=self.api_key,
356
+ session_id=response.session_id,
357
+ plato_session_id=response.plato_session_id,
358
+ )
359
+
360
+ def get_session(self, session_id: str) -> ChronosSession:
361
+ """Get a ChronosSession wrapper for an existing session.
362
+
363
+ Args:
364
+ session_id: The Chronos session public ID.
365
+
366
+ Returns:
367
+ ChronosSession for the specified session.
368
+ """
369
+ # Verify the session exists by fetching status
370
+ get_session_status.sync(
371
+ client=self._http,
372
+ public_id=session_id,
373
+ x_api_key=self._api_key,
374
+ )
375
+
376
+ return ChronosSession(
377
+ http_client=self._http,
378
+ api_key=self.api_key,
379
+ session_id=session_id,
380
+ )
381
+
382
+ def list_sessions(
383
+ self,
384
+ tag: str | None = None,
385
+ ) -> SessionListResponse:
386
+ """List Chronos sessions.
387
+
388
+ Args:
389
+ tag: Filter by tag (fuzzy substring match).
390
+
391
+ Returns:
392
+ SessionListResponse with list of sessions.
393
+ """
394
+ return list_sessions.sync(
395
+ client=self._http,
396
+ tag=tag,
397
+ x_api_key=self._api_key,
398
+ )
399
+
400
+ def list_tags(self) -> TagsListResponse:
401
+ """List all unique tags across sessions.
402
+
403
+ Returns:
404
+ TagsListResponse with list of tags.
405
+ """
406
+ return list_tags.sync(
407
+ client=self._http,
408
+ x_api_key=self._api_key,
409
+ )
410
+
411
+ def close(self) -> None:
412
+ """Close the underlying HTTP client."""
413
+ self._http.close()
414
+
415
+ def __enter__(self) -> Chronos:
416
+ return self
417
+
418
+ def __exit__(self, *args: Any) -> None:
419
+ self.close()
plato/worlds/base.py CHANGED
@@ -155,11 +155,11 @@ class BaseWorld(ABC, Generic[ConfigT]):
155
155
 
156
156
  @classmethod
157
157
  def get_schema(cls) -> dict:
158
- """Get full schema including world config, agents, and secrets."""
158
+ """Get full schema including world config, agents, secrets, and envs."""
159
159
  config_class = cls.get_config_class()
160
160
  schema = config_class.get_json_schema()
161
161
 
162
- return {
162
+ result = {
163
163
  "$schema": "https://json-schema.org/draft/2020-12/schema",
164
164
  "type": "object",
165
165
  "properties": schema.get("properties", {}),
@@ -169,6 +169,16 @@ class BaseWorld(ABC, Generic[ConfigT]):
169
169
  "envs": schema.get("envs", []),
170
170
  }
171
171
 
172
+ # Include env_list if present (for worlds with arbitrary environment lists)
173
+ if "env_list" in schema:
174
+ result["env_list"] = schema["env_list"]
175
+
176
+ # Include $defs if present (for nested type references)
177
+ if "$defs" in schema:
178
+ result["$defs"] = schema["$defs"]
179
+
180
+ return result
181
+
172
182
  @abstractmethod
173
183
  async def reset(self) -> Observation:
174
184
  """Setup the world and return initial observation.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plato-sdk-v2
3
- Version: 2.5.0
3
+ Version: 2.6.0
4
4
  Summary: Python SDK for the Plato API
5
5
  Author-email: Plato <support@plato.so>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  plato/__init__.py,sha256=a9E0KS1602GWHHStnf7wDEuvPCvh2GpPh0Sf8oKZx5Q,1795
2
2
  plato/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- plato/_generated/__init__.py,sha256=8BNQD2tT98Nrl8jP97bIzUxFTkb1681a1kbJExyZYuo,738
3
+ plato/_generated/__init__.py,sha256=-vi0WFWBl1r0SP4-d---XUK4RxKbzlq5cyc2SWzsUFg,738
4
4
  plato/_generated/client.py,sha256=_oMKXyAShQVddCaIKnfB2zPkRsDlCwLp-N3RFoKq_v8,5489
5
5
  plato/_generated/errors.py,sha256=goTGrZ4rrujGZ-BoOonoyaGwdGDkGO6GyeubIkQVv9E,4197
6
6
  plato/_generated/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -54,7 +54,7 @@ plato/_generated/api/v1/evals/__init__.py,sha256=TNqMltP6UwzIoFB087RwkXprggoaLWt
54
54
  plato/_generated/api/v1/evals/create_test_case_review.py,sha256=QE9eFypoTSAqUC8C0Rmt8OXwS8Ak9cz63Ocm6v_In84,1854
55
55
  plato/_generated/api/v1/evals/evaluate_python.py,sha256=RRW6rd2-WRAsWD3mJ1Vt4TGiinJ445x_rVqahUJUZyE,1657
56
56
  plato/_generated/api/v1/evals/get_all_test_case_reviews.py,sha256=w1qGc3BnpcPS6pFSUvMSF_aN7EYl7HF5YwKzVDkibg4,1703
57
- plato/_generated/api/v1/evals/get_scores_by_user.py,sha256=C5z4BVTPOsJLOy-_5kdFYlxeV0uAzGxIdP6946N6RtE,2545
57
+ plato/_generated/api/v1/evals/get_scores_by_user.py,sha256=_NZkKBQT_BBrIIYXsUGV47DNcNLHv6aqJNfzDqHZyf4,2725
58
58
  plato/_generated/api/v1/evals/get_scoring.py,sha256=766R2m7a-mb38bHbpO1RPQviKxPbb6oq0-s2_QX0Eic,985
59
59
  plato/_generated/api/v1/evals/get_test_case_review.py,sha256=-HHRPTfLVVUT7X4bYrg9FyvXR3Ve4N9dCSJYPG80w0w,1683
60
60
  plato/_generated/api/v1/evals/human_in_the_loop_scoring.py,sha256=wmCt80j96Ca75IlblHV8SjUvulkDS_DJ6O43mspBYWM,1939
@@ -190,7 +190,7 @@ plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py,sha2
190
190
  plato/_generated/api/v1/testcases/get_testcase.py,sha256=EydIk-2zdS6XT9-btLWCE5i-N2lT7AlAe5amQQJNn-c,866
191
191
  plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py,sha256=pkrFamV66L_pDj6e7UDf0dDgqA1_Zf8Dz8Jki-ajLtI,1974
192
192
  plato/_generated/api/v1/testcases/get_testcase_sets.py,sha256=NSqnYWvj_G3ivnuuV797g85NGzHXi3z-UlvvRoFMwRM,1375
193
- plato/_generated/api/v1/testcases/get_testcases.py,sha256=04J0JflxL27zhWPl0RMpSQV8te6fHt-c-z-YX3UPjB8,5283
193
+ plato/_generated/api/v1/testcases/get_testcases.py,sha256=AjsC2aw1VJOtGEe-Km36uVktdxR6IRahhbHCjeAUxcY,5756
194
194
  plato/_generated/api/v1/testcases/get_testcases_in_set.py,sha256=TJK2KHmGC5lNmBPoAXbZ6FktUael9v8Ecl4M8XAhceg,1501
195
195
  plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py,sha256=bbtE5PWIA9X0EkyrSXE8YN0gp6x6sfno0rc02AK_-l0,1521
196
196
  plato/_generated/api/v1/testcases/update_testcase.py,sha256=-kTW31ioDzQvr2AmOv9gHL7jN6K9qhGyjnJfNHETwhA,1699
@@ -272,7 +272,7 @@ plato/_generated/api/v2/sessions/log_job_mutation.py,sha256=6x8rSFCbd3u3p3jms62X
272
272
  plato/_generated/api/v2/sessions/make.py,sha256=1FP7rCbjT62T8Of9otByl6L0p-VwwsruoaK--vYUUx0,2081
273
273
  plato/_generated/api/v2/sessions/reset.py,sha256=L8s2E_8wMq0hkNGNKrCx8gHTm-1KXltlzfHVI5sY14U,1941
274
274
  plato/_generated/api/v2/sessions/set_date.py,sha256=jbw3KVBI5TngHGBMavFawjNudRutAC0eb8jEbsSJdkw,2278
275
- plato/_generated/api/v2/sessions/setup_sandbox.py,sha256=gAb_jC69U_zroOSkJihYdFdhW6UCIL6EapBWAbzTprY,3160
275
+ plato/_generated/api/v2/sessions/setup_sandbox.py,sha256=FtxC3NXFPpITupyBYlRtsMfP64vXYuKq23pwACT9v0U,3162
276
276
  plato/_generated/api/v2/sessions/snapshot.py,sha256=JDtrpRJGVjo4naTCJzWNNc4lCgZuCirfNcULH8Xk97Q,2650
277
277
  plato/_generated/api/v2/sessions/snapshot_store.py,sha256=4p08pCr2EWHQu2LqjIkRtlicTaFyfa7f39f8w0NRfeg,2978
278
278
  plato/_generated/api/v2/sessions/state.py,sha256=XecKyoItKQGwCOx_IO_VcnXh5rdpC6hCUSGJdxlEi7E,2328
@@ -282,7 +282,7 @@ plato/_generated/api/v2/user/__init__.py,sha256=yMh1Gn9VpKHQMQCmJdpeDPA9Ek9PBgP0
282
282
  plato/_generated/api/v2/user/get_current_user.py,sha256=tvamtbWTEkeeNUBLSPqZIcCGqKVadQM3DVcezsWP22U,1814
283
283
  plato/_generated/api/version/__init__.py,sha256=dQXTYrXjD1RZcvWwnlqXWAZ-eAV-V-6JSNuY7uaca7o,70
284
284
  plato/_generated/api/version/check.py,sha256=HTVNw0oi9gbvX4pOVoH4y4JywCxdl1pJTCk2PjJFwJ4,778
285
- plato/_generated/models/__init__.py,sha256=VGsTMYUCCqa7r_tl5m--dwjy7viYAN20nU2HhVAibcU,154130
285
+ plato/_generated/models/__init__.py,sha256=6hl9VvbtRkF5MBLcnuWdI2N26mBKPKV0opn7rqtWJy4,155575
286
286
  plato/_sims_generator/__init__.py,sha256=Km4QOl9wxjQ5dgpdhk9QnBFJFFc9eq3rPbMWIQRjIn0,1602
287
287
  plato/_sims_generator/cli.py,sha256=mzolN-dxfMkVAdA-vC0esnai-cGg-i4ozOw8dACefV4,2709
288
288
  plato/_sims_generator/instruction.py,sha256=Na9M-jIdBPhp_fLuBPTicoFnWriRyi8YiZ-eQBj64HI,6644
@@ -310,33 +310,49 @@ plato/chronos/client.py,sha256=YcOGtHWERyOD9z8LKt8bRMVL0cEwL2hiAP4qQgdZlUI,5495
310
310
  plato/chronos/errors.py,sha256=xqQIQB43nAL5urF8qc_1KUJql7KCnspULOFHLNnf83M,4199
311
311
  plato/chronos/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
312
312
  plato/chronos/api/__init__.py,sha256=e1IO2-7hMVNtiwyZKQIwIW9LpgcPb5os48Wjxk6G3EY,43
313
+ plato/chronos/api/admin/__init__.py,sha256=pvUWoZqnT2cQTNfZn4EH1OKTpYg3dc4iXUvUeSUmRqI,501
314
+ plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py,sha256=LhPrN7xw9K3Dcs2p7wiRG7WwOpc0k0uB5ndF79_nIRg,1329
315
+ plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py,sha256=K1PoATmHHw6u_6BLe8qnIQH7QHyRgbncNB6CdDoRWm4,1531
316
+ plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py,sha256=uUVj5XD6v2xWDj6xUvK2cO17qM4HkxTqjxW8QZFqE6Q,1546
317
+ plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py,sha256=SCWLEQ40q7jKL_7H9EAtTSYC24IeFHMQy1DSm1Wg9VQ,1539
318
+ plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py,sha256=p9RZUCpUS-ZGt9qIZ1ujVBM5N1A8UhY38T9v_wBIN2U,1531
313
319
  plato/chronos/api/agents/__init__.py,sha256=IaeIt8ge51rKVkR0wQzW6m0xJE74hFPxeothe2CuQhs,300
314
320
  plato/chronos/api/agents/create_agent.py,sha256=G8LR1KlWOCfmZ71Sl0seo7aRYmG7_nokZKoIRV6ysnw,1418
315
321
  plato/chronos/api/agents/delete_agent.py,sha256=fuL8Ip8veUXpOhSYxX_74S0zM_kZsTX61KosiFyhRWo,1241
316
322
  plato/chronos/api/agents/get_agent.py,sha256=o61fxCyYpTe6-3SC2RAebp3kW8rgEOWSN_NCph_iMUc,1358
317
323
  plato/chronos/api/agents/get_agent_schema.py,sha256=t66UCalfuHExr3MmUcZdE_inGvfFerE8MC7iR14edsY,1769
318
324
  plato/chronos/api/agents/get_agent_versions.py,sha256=mVLFvOrAwoyR9Jnu4F26EhNv08zGbXywiohr6hojxMY,1496
319
- plato/chronos/api/agents/list_agents.py,sha256=jtzD0wFmlHPDFqrChCLCG5m6LkLuxNlZk4EboRpcAYA,1253
325
+ plato/chronos/api/agents/list_agents.py,sha256=OcycIUUc8yTGAhmpr2qhU2-2qIbvAtKko6l7cgmcKes,1343
320
326
  plato/chronos/api/agents/lookup_agent.py,sha256=DOGfrOK6Lh6ULMqRmf4zRQHlDXMhYenidx8wcZx4caY,1766
321
327
  plato/chronos/api/auth/__init__.py,sha256=6qao3xT8yw9-WTpUlv4tVtpWhL2EycQd3I2WKQ5p9Lk,284
322
328
  plato/chronos/api/auth/debug_auth_api_auth_debug_get.py,sha256=L1RWyQ1w7V8dyhOAU2VQlT9x0jkeng3eIvZDOv9Gl2w,881
323
329
  plato/chronos/api/auth/get_auth_status_api_auth_status_get.py,sha256=i9JzH9vPeswvbWtBAkMikepbNAyNK8jpTcALU6ScG5s,1379
324
330
  plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py,sha256=w9zz7ivQpYKvV6FPIEuNHfI5BOl9bu3FYbJ5ADEuTPc,1210
331
+ plato/chronos/api/checkpoints/__init__.py,sha256=i-soJMj3EFoUvjWog_AyJXwoGf9K51CjArd0uDeXJ98,138
332
+ plato/chronos/api/checkpoints/list_checkpoints.py,sha256=ONcbX5vSOl_PX6_uNP5Rm2iWxCkat39OgJOxX-i16Lk,1172
333
+ plato/chronos/api/checkpoints/preview_checkpoint.py,sha256=UDcWupD0dC5KCGdcCUX4mtEI4yL6fivOr8_yyrCfiFo,2210
325
334
  plato/chronos/api/default/__init__.py,sha256=TCF1Fl95ZyiR9-xHzf_R2A6TNb7k59N1VfSI5PAj4Pg,72
326
335
  plato/chronos/api/default/health.py,sha256=PvBLZXdYptL9d5_BEmzUsbUjQJTNGw5E4AFryPYiruw,781
336
+ plato/chronos/api/events/__init__.py,sha256=jG6BaEeIDQFAlLjzCrAXaoG-2GV_Q9GDm1cu86mx9C4,142
337
+ plato/chronos/api/events/get_session_event.py,sha256=hxgelY_gZ3ZIBJDBN7xF0aQYmpi5QnxvZ-NyFV8dZfU,1573
338
+ plato/chronos/api/events/list_session_events.py,sha256=-u4qi7_eNmC8Mxg0paDIrZ4IzwasAjBX8Nj43haWGcA,1495
327
339
  plato/chronos/api/jobs/__init__.py,sha256=JP76_irfuFV31HOgazh7Y81GSkcunJP_eYWX8Pqq1U0,80
328
- plato/chronos/api/jobs/launch_job.py,sha256=K66_nEGdfH5L-LlXdaSJAftxhq_th69IjScZ4P_On6I,1457
340
+ plato/chronos/api/jobs/launch_job.py,sha256=mdCxUpyUVI5NS9mctllRUbNOe7yVSunupnoh4RJYuNQ,1711
341
+ plato/chronos/api/otel/__init__.py,sha256=w_DyYdNLj6xHi260C-HK9TJcZau0PJLOqey3qVwO9Wg,266
342
+ plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py,sha256=s7xGuLD-TEYsUx56icdoBNiACaCo4Pcm8QDSuc74vSA,1294
343
+ plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py,sha256=XvEe6XBB672qZ_d9IkD9dhxehK-H07yGxqKPaZG-EXA,1074
329
344
  plato/chronos/api/registry/__init__.py,sha256=gPN-3oENHUrwaiacYt1_jI7HQ6gGe9i-34-Smb-0KHg,819
330
345
  plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py,sha256=FOtVolBNmRuhgaCmL_d3cGvx81lVoz0WXQRP_-qArHM,1443
331
346
  plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py,sha256=TjYCZcIc6Bc0iS1E2MMPAK-yDUX_zijT8g7We7dNcQI,1176
332
347
  plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py,sha256=RM-1MDYaG8B9iRl93KBG4tVjWJAHA08X6lSwjzk8fkw,1697
333
348
  plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py,sha256=07MKXi5-d8Qk8cKRdVW2AZoeeksX7OpTgFR9bkJni0Y,1206
334
- plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py,sha256=gzRRPfHGzhczL1Xi274cg-oLwUzqdS2B7JkzhHNZKEw,1121
349
+ plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py,sha256=3rACHpvv2P7gooHcNH4sU82pCSPIWH0f17lmQyGdEyU,1031
335
350
  plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py,sha256=g9KHZ2ZLJnhS5uCb55K7ez5plpfGL88o-pcdLMDgrRg,1010
336
- plato/chronos/api/runtimes/__init__.py,sha256=fO9UYFKrk66Xf9eV7FZO3Wv2VH6FN56Y_uNyPgSEpro,228
351
+ plato/chronos/api/runtimes/__init__.py,sha256=_887oqgAfMazmoU-tTbOQ4k-k6E0PW004bdFxTM117M,270
337
352
  plato/chronos/api/runtimes/create_runtime.py,sha256=D37d2nMqyTxT8r_9faPWI-E18pAVjLlh0hCgBf0L6wQ,1524
338
353
  plato/chronos/api/runtimes/delete_runtime.py,sha256=x_z2naim1cLW1ko99jWRkGoyawiIfv66Jt6d8pgEGt4,1261
339
354
  plato/chronos/api/runtimes/get_runtime.py,sha256=8mL2tgFwAml30RHcURjr9Tz4H4Yo-r0cSGHuL741ZZM,1394
355
+ plato/chronos/api/runtimes/get_runtime_logs.py,sha256=ruyMDqSFDUAB84EjudwEt--0qItU7njyYUL-UrSYKTo,1347
340
356
  plato/chronos/api/runtimes/list_runtimes.py,sha256=8o1NMWHEH8dINK9qZhMlxyBU0ygqSmyN7HigYkIwqa8,1271
341
357
  plato/chronos/api/runtimes/test_runtime.py,sha256=AfN_gVPQ991m1op3W6Lm64qG_CqarHgJK0bttJm09SU,1626
342
358
  plato/chronos/api/secrets/__init__.py,sha256=BfB4AiGt54zgcrmm-C57lbKY3DI8p1YnG2yuys3ie1A,222
@@ -345,11 +361,20 @@ plato/chronos/api/secrets/delete_secret.py,sha256=LWzJ78lT9C5NNhlaq8JJ4HcKzCVoj5
345
361
  plato/chronos/api/secrets/get_secret.py,sha256=c4WzODFGHINAmdz8EWejECdlY9ezkWraUGWrwVuTPRA,1356
346
362
  plato/chronos/api/secrets/list_secrets.py,sha256=_FT1VNok1STthEbjjGWmyGxjkRDvvDD_awU3xkjC1ak,1301
347
363
  plato/chronos/api/secrets/update_secret.py,sha256=049iqznfUWpZVHVsw5y1c06KddX5Ou4keYiADyuLqjg,1550
348
- plato/chronos/api/sessions/__init__.py,sha256=hF6a5a8sR5BUScqI6oDqDET8dhiiXKIAIzjUlGV9Yow,220
349
- plato/chronos/api/sessions/get_session.py,sha256=T_dn4vC5_WU0rTpiHIKEoxRdxAXr5Cjw_K8PFgauHng,1374
350
- plato/chronos/api/sessions/get_session_logs.py,sha256=o8lgdQfAvzOFYT8vtQUT1FGKH0Cr2uS3HeF8uIA0bP8,1656
364
+ plato/chronos/api/sessions/__init__.py,sha256=hKnXWZFpuB6yTkgkBlN_BMp0cdDqsFWTPLeXIZxd1eY,679
365
+ plato/chronos/api/sessions/close_session.py,sha256=lGmWkSfh-9ul1nVzYSn0Ymck3ntm0UG0m4Jm0d1lU1A,1552
366
+ plato/chronos/api/sessions/complete_session.py,sha256=F_iYyBAj_iin-492vHAVA0CCSz-lwtpmU0hPVBNc9Gw,1912
367
+ plato/chronos/api/sessions/create_session.py,sha256=p0PaUQLnWzhsekKUnQM5KiU8b68vldjR90Z8fn17gUo,1812
368
+ plato/chronos/api/sessions/get_session.py,sha256=_7TR8g1oFyKPQc0n94BmFScXQDkmXvP5mWRW94jMvm8,1961
369
+ plato/chronos/api/sessions/get_session_bash_logs_download.py,sha256=0WMxNC5XFVtMuCbIZxtEiUUQW9B4BihwSHkWUTD2YhU,1325
370
+ plato/chronos/api/sessions/get_session_envs.py,sha256=N73sE-oYRbBVk4JsXkrbVtNda1B8gRCMSyxX5N_EAxA,1464
371
+ plato/chronos/api/sessions/get_session_live_logs.py,sha256=3H5MHwYBr5mzQxBNEx54UOOOyc2tFLXC3iyOob_drIU,1433
372
+ plato/chronos/api/sessions/get_session_logs.py,sha256=mH9EZ2dD22U4KPEMwCp6RRbJ8k-ZhmSOF9bx8XgWVMc,1662
351
373
  plato/chronos/api/sessions/get_session_logs_download.py,sha256=u1VKN9_ya5HviQvuj47Bjxb8TdTRrVjGZ-xhh34j5JE,1491
352
- plato/chronos/api/sessions/list_sessions.py,sha256=rR0quFEC9XoC39MbgGSEmeypzzYLOrnAmB3h_7TZXsU,1271
374
+ plato/chronos/api/sessions/get_session_status.py,sha256=pka9CNYW1DwfB5xxo8ffbfJ3sDQBhxOnNL7-J0pCyVY,1476
375
+ plato/chronos/api/sessions/list_sessions.py,sha256=xYZq1Iz0gi81vZbTyuLvxK0yoW0FAhRG9OG6g43AY60,1928
376
+ plato/chronos/api/sessions/list_tags.py,sha256=zMIHZhCH5o0Mspz9Z9eX_dUEwBRsQs2rhlhQLGZUuCM,2002
377
+ plato/chronos/api/sessions/update_session_tags.py,sha256=mJuhBoqK6bIvtGI2KAgEt_wq1s5Yv4WYu29m1JNjq_w,1596
353
378
  plato/chronos/api/status/__init__.py,sha256=LUmI3D_ynVMsnkWJI-6rm5ZuWjZypULrBKQDfh2uq-Y,184
354
379
  plato/chronos/api/status/get_status_api_status_get.py,sha256=3l7KaWkxZI7GUIJaxJjNsAA1WSP6z4TxL6uRooqNFDs,951
355
380
  plato/chronos/api/status/get_version_info_api_version_get.py,sha256=CzFsUMDH2BIxVg0plECsXRrwtSE73ORAutNsmD6u1Zc,937
@@ -367,7 +392,7 @@ plato/chronos/api/worlds/create_world.py,sha256=H6yl5QIazNXgryOR5rvscSIMf8Y9kjc6
367
392
  plato/chronos/api/worlds/delete_world.py,sha256=UETu3Zk0e2VkDdAyMilv1ev-0g_j-oujH1Dc8DBqQOc,1239
368
393
  plato/chronos/api/worlds/get_world.py,sha256=eHTM1U5JiNTaZwYLh7x4QVBoRQeI5kaJ9o6xSi4-nos,1356
369
394
  plato/chronos/api/worlds/list_worlds.py,sha256=hBAuGb69tlasyn-kV_LNr9x6Rr7SHhST5hXJn1uqMf8,1253
370
- plato/chronos/models/__init__.py,sha256=t9Kn9qwMBm2S9qs9weF0-CBCg4o1-u_W_3kDFQb-aDU,21328
395
+ plato/chronos/models/__init__.py,sha256=9eWjOOgT7WULPFpO_b_qCP-k_vMdest-Y2-JsBF7KS4,22646
371
396
  plato/sims/README.md,sha256=FIbJhNVNAV-SO6dq_cXX3Rg0C7HdQCfEY9YxGlkCmsM,6902
372
397
  plato/sims/__init__.py,sha256=tnoCGKZwNx6h22tEWLujdpLv6K4PpFU2RnDOhL1o-Uc,1494
373
398
  plato/sims/agent_helpers.py,sha256=kITvQywoTCS8mGhro3jZWuPJHDlje-UZujhjoahqhd0,10291
@@ -387,7 +412,7 @@ plato/v1/sync_flow_executor.py,sha256=kgvNYOtA9FHeNfP7qb8ZPUIlTsfIss_Z98W8uX5vec
387
412
  plato/v1/sync_sdk.py,sha256=2sedg1QJiSxr1I3kCyfaLAnlAgHlbblc3QQP_47O30k,25697
388
413
  plato/v1/cli/__init__.py,sha256=om4b7PxgsoI7rEwuQelmQkqPdhMVn53_5qEN8kvksYw,105
389
414
  plato/v1/cli/agent.py,sha256=EbmEKWCMC5DJjmVDrYuwGenhIDgPjie8hdwrDOTSXaY,43766
390
- plato/v1/cli/chronos.py,sha256=uSgvj9uvBElBWP5me30OhH5eFVvFtH8TxvcIPEie3gA,25601
415
+ plato/v1/cli/chronos.py,sha256=S6_PKDsZt55XDVFKPxJY5FQBfoYePLpZq3JTnNN75rY,27430
391
416
  plato/v1/cli/main.py,sha256=iKUz6Mu-4-dgr29qOUmDqBaumOCzNQKZsHAalVtaH0Q,6932
392
417
  plato/v1/cli/pm.py,sha256=TIvXBIWFDjr4s1girMMCuvHWQJkjpmsS-igAamddIWE,49746
393
418
  plato/v1/cli/sandbox.py,sha256=jhTney-Pr8bGmWIXOjVIMtZJ7v7uIoRnuh3wfG7weRg,98718
@@ -439,17 +464,19 @@ plato/v1/models/flow.py,sha256=bkleb7-OR6V5tzPtggf0ZJhHZQwnktCYr1C-ONpRzwE,6920
439
464
  plato/v1/models/sandbox.py,sha256=yRN036G91tFAXGxU1ni7zCU1o7U1N8nI0mjLlBRDoSk,3478
440
465
  plato/v1/models/task.py,sha256=QXwdFpDM_NLjRpQSK6duibXJXFAPZ8-PpyuLWZC5o4I,4897
441
466
  plato/v1/utils/proxytunnel.py,sha256=N1MshFY3Pu3d19cTU619-e-gP2_j-89CEcld7lCoiGk,5706
442
- plato/v2/__init__.py,sha256=YUzdRnXsL61ey-LOoR-HZGYgfGKBxnuMtFIu-D0VB8E,1662
467
+ plato/v2/__init__.py,sha256=Adlul2CFMdyAPMP7ziGO3R_PO66sH7PsmGe4id0rTCs,2000
443
468
  plato/v2/models.py,sha256=41EJPdbAsW-gARVND0cg4jqpzQuYlrbAW9hF8WI8kX4,2369
444
469
  plato/v2/types.py,sha256=MrHiE8AobOegeTfoKKHZ5JTccaFfS3-EW0arV7q8S5c,3533
445
- plato/v2/async_/__init__.py,sha256=zcNwuX2XD-WkUCFLvXtdRqFmCgeuY3-D4zGTRVwsAFI,484
470
+ plato/v2/async_/__init__.py,sha256=rq9olvr4PuI6sY535IsLT4kg9YX_sGYrrY6SA991xk8,654
446
471
  plato/v2/async_/artifact.py,sha256=JBWVQeVaZhkU2qn_knyzyA7wd5iQ8qxfLQ_l9GPhgYs,1217
472
+ plato/v2/async_/chronos.py,sha256=WeqYF3HIKs7hV9LNZb2GlDS1yP6b422DZKtNuPxdL34,12394
447
473
  plato/v2/async_/client.py,sha256=GVgAgNN5gsDME8iV0zxqnwbsVS93J6cknOcq_VXwYN8,4209
448
474
  plato/v2/async_/environment.py,sha256=M5IeWYLwREOIyuS2zqgBSqHE_x66_OZXrevA9Rkc8Is,5825
449
475
  plato/v2/async_/flow_executor.py,sha256=Tl4nRu1ZPWJFNNxyTGy-PxvebZEUD18ZDaz8T2chtzU,14188
450
476
  plato/v2/async_/session.py,sha256=ssTEFgfpDQElQEmeKulLWKLoW-wA3m_nI3UvEWb9lB0,36749
451
- plato/v2/sync/__init__.py,sha256=_WigxuehCC8A2yRy4mSaMQmIZhS0Gch4hhZC1VHyYXs,310
477
+ plato/v2/sync/__init__.py,sha256=6Hzc5k34WnHTUMPWrIefnL4P5YEoJMRLOmYDO7LxGg8,405
452
478
  plato/v2/sync/artifact.py,sha256=wTLC-tugG128wLvh-JqNPb0zsw5FXEJlZNahurSWink,1169
479
+ plato/v2/sync/chronos.py,sha256=ChXpasjRzAZjoYTimpPqYydnwEk-IgdxR0SDXDOZbUM,12078
453
480
  plato/v2/sync/client.py,sha256=Q9fS1BF4KxTMMnceMwCMlb5dNFZ6LA4gsXWNLgsL2eE,3870
454
481
  plato/v2/sync/environment.py,sha256=WnDzbyEHpwCSEP8XnfNSjIYS7rt7lYR4HGJjzprZmTQ,5066
455
482
  plato/v2/sync/flow_executor.py,sha256=N41-WCWIJVcCR2UmPUEiK7roNacYoeONkRXpR7lUgT8,13941
@@ -460,11 +487,11 @@ plato/v2/utils/models.py,sha256=PwehSSnIRG-tM3tWL1PzZEH77ZHhIAZ9R0UPs6YknbM,1441
460
487
  plato/v2/utils/proxy_tunnel.py,sha256=8ZTd0jCGSfIHMvSv1fgEyacuISWnGPHLPbDglWroTzY,10463
461
488
  plato/worlds/README.md,sha256=XFOkEA3cNNcrWkk-Cxnsl-zn-y0kvUENKQRSqFKpdqw,5479
462
489
  plato/worlds/__init__.py,sha256=nwuEerEkP2TSfadPiOMcUE3p6u1vhaS7ZxfTh2zNcF8,2217
463
- plato/worlds/base.py,sha256=1O3iKilXlr56mUPVovHY_BjM3S8T57FrotF4895qv5Y,30675
490
+ plato/worlds/base.py,sha256=8skzeNlufimvXdWBKVAjmgkZ3xGGt0ijRnu6darPxsk,31017
464
491
  plato/worlds/build_hook.py,sha256=KSoW0kqa5b7NyZ7MYOw2qsZ_2FkWuz0M3Ru7AKOP7Qw,3486
465
492
  plato/worlds/config.py,sha256=OJtBygnVACQl_kGF8iLofTIk8zMu8tTCNYav6lHdwNI,12874
466
493
  plato/worlds/runner.py,sha256=r9B2BxBae8_dM7y5cJf9xhThp_I1Qvf_tlPq2rs8qC8,4013
467
- plato_sdk_v2-2.5.0.dist-info/METADATA,sha256=B5O9klRDioab0Ay7I_0V0q-yNvWes23frcHXt-3rGbU,8652
468
- plato_sdk_v2-2.5.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
469
- plato_sdk_v2-2.5.0.dist-info/entry_points.txt,sha256=upGMbJCx6YWUTKrPoYvYUYfFCqYr75nHDwhA-45m6p8,136
470
- plato_sdk_v2-2.5.0.dist-info/RECORD,,
494
+ plato_sdk_v2-2.6.0.dist-info/METADATA,sha256=_c1ttshrdw9fnmaXOO3-tEVSHGWz24tWl6s33A9viGw,8652
495
+ plato_sdk_v2-2.6.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
496
+ plato_sdk_v2-2.6.0.dist-info/entry_points.txt,sha256=upGMbJCx6YWUTKrPoYvYUYfFCqYr75nHDwhA-45m6p8,136
497
+ plato_sdk_v2-2.6.0.dist-info/RECORD,,