plato-sdk-v2 2.6.1__py3-none-any.whl → 2.7.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 (32) hide show
  1. plato/_generated/__init__.py +1 -1
  2. plato/_generated/api/v2/__init__.py +2 -1
  3. plato/_generated/api/v2/networks/__init__.py +23 -0
  4. plato/_generated/api/v2/networks/add_member.py +75 -0
  5. plato/_generated/api/v2/networks/create_network.py +70 -0
  6. plato/_generated/api/v2/networks/delete_network.py +68 -0
  7. plato/_generated/api/v2/networks/get_network.py +69 -0
  8. plato/_generated/api/v2/networks/list_members.py +69 -0
  9. plato/_generated/api/v2/networks/list_networks.py +74 -0
  10. plato/_generated/api/v2/networks/remove_member.py +73 -0
  11. plato/_generated/api/v2/networks/update_member.py +80 -0
  12. plato/_generated/api/v2/sessions/__init__.py +4 -0
  13. plato/_generated/api/v2/sessions/add_ssh_key.py +81 -0
  14. plato/_generated/api/v2/sessions/connect_network.py +89 -0
  15. plato/_generated/models/__init__.py +150 -24
  16. plato/v1/cli/agent.py +45 -52
  17. plato/v1/cli/chronos.py +46 -58
  18. plato/v1/cli/main.py +14 -25
  19. plato/v1/cli/pm.py +37 -92
  20. plato/v1/cli/proxy.py +343 -0
  21. plato/v1/cli/sandbox.py +305 -385
  22. plato/v1/cli/ssh.py +12 -167
  23. plato/v1/cli/verify.py +79 -55
  24. plato/v1/cli/world.py +13 -12
  25. plato/v2/async_/client.py +24 -2
  26. plato/v2/async_/session.py +48 -0
  27. plato/v2/sync/client.py +24 -2
  28. plato/v2/sync/session.py +48 -0
  29. {plato_sdk_v2-2.6.1.dist-info → plato_sdk_v2-2.7.0.dist-info}/METADATA +1 -1
  30. {plato_sdk_v2-2.6.1.dist-info → plato_sdk_v2-2.7.0.dist-info}/RECORD +32 -20
  31. {plato_sdk_v2-2.6.1.dist-info → plato_sdk_v2-2.7.0.dist-info}/WHEEL +0 -0
  32. {plato_sdk_v2-2.6.1.dist-info → plato_sdk_v2-2.7.0.dist-info}/entry_points.txt +0 -0
plato/v2/sync/client.py CHANGED
@@ -30,6 +30,7 @@ class SessionManager:
30
30
  envs: list[EnvFromSimulator | EnvFromArtifact | EnvFromResource] | None = None,
31
31
  task: str | None = None,
32
32
  timeout: int = 1800,
33
+ connect_network: bool = True,
33
34
  ) -> Session:
34
35
  """Create a new session.
35
36
 
@@ -39,6 +40,7 @@ class SessionManager:
39
40
  envs: List of environment configurations (use Env.simulator(), Env.artifact(), or Env.resource())
40
41
  task: Task public ID to create session from
41
42
  timeout: VM timeout in seconds
43
+ connect_network: If True, automatically connect all VMs to a WireGuard network
42
44
 
43
45
  Returns:
44
46
  A new Session instance with all environments ready
@@ -57,19 +59,22 @@ class SessionManager:
57
59
  >>>
58
60
  >>> # From task
59
61
  >>> session = plato.sessions.create(task="abc123")
62
+ >>>
63
+ >>> # With networking enabled automatically
64
+ >>> session = plato.sessions.create(envs=[...], connect_network=True)
60
65
  """
61
66
  if envs is not None and task is not None:
62
67
  raise ValueError("Cannot specify both envs and task")
63
68
 
64
69
  if task is not None:
65
- return Session.from_task(
70
+ session = Session.from_task(
66
71
  http_client=self._http,
67
72
  api_key=self._api_key,
68
73
  task_id=task,
69
74
  timeout=timeout,
70
75
  )
71
76
  elif envs is not None:
72
- return Session.from_envs(
77
+ session = Session.from_envs(
73
78
  http_client=self._http,
74
79
  api_key=self._api_key,
75
80
  envs=envs,
@@ -78,6 +83,23 @@ class SessionManager:
78
83
  else:
79
84
  raise ValueError("Must specify either envs or task")
80
85
 
86
+ if connect_network:
87
+ try:
88
+ session.connect_network()
89
+ except Exception:
90
+ # Clean up session if network connection fails
91
+ import logging
92
+
93
+ logging.getLogger(__name__).info(f"Network connection failed, closing session {session.session_id}")
94
+ try:
95
+ session.close()
96
+ logging.getLogger(__name__).info(f"Session {session.session_id} closed")
97
+ except Exception as close_err:
98
+ logging.getLogger(__name__).warning(f"Failed to close session: {close_err}")
99
+ raise
100
+
101
+ return session
102
+
81
103
 
82
104
  class Plato:
83
105
  """Synchronous Plato client for v2 API.
plato/v2/sync/session.py CHANGED
@@ -23,6 +23,7 @@ if TYPE_CHECKING:
23
23
  from plato._generated.api.v2.jobs import get_flows as jobs_get_flows
24
24
  from plato._generated.api.v2.jobs import public_url as jobs_public_url
25
25
  from plato._generated.api.v2.sessions import close as sessions_close
26
+ from plato._generated.api.v2.sessions import connect_network as sessions_connect_network
26
27
  from plato._generated.api.v2.sessions import disk_snapshot as sessions_disk_snapshot
27
28
  from plato._generated.api.v2.sessions import evaluate as sessions_evaluate
28
29
  from plato._generated.api.v2.sessions import execute as sessions_execute
@@ -42,6 +43,7 @@ from plato._generated.models import (
42
43
  AppApiV2SchemasSessionHeartbeatResponse,
43
44
  AppApiV2SchemasSessionSetupSandboxRequest,
44
45
  AppApiV2SchemasSessionSetupSandboxResponse,
46
+ ConnectNetworkRequest,
45
47
  CreateDiskSnapshotRequest,
46
48
  CreateDiskSnapshotResponse,
47
49
  CreateSessionFromEnvs,
@@ -125,6 +127,15 @@ class Session:
125
127
  self._heartbeat_stop = threading.Event()
126
128
  self._heartbeat_interval = 30
127
129
  self._envs: list[Environment] | None = None
130
+ self._network_host_only: bool = False # True if WireGuard not available (no VM-to-VM mesh)
131
+
132
+ @property
133
+ def network_host_only(self) -> bool:
134
+ """True if network is using host-only routing (WireGuard not available in VM).
135
+
136
+ When True, external SSH access works but VM-to-VM mesh networking does not.
137
+ """
138
+ return self._network_host_only
128
139
 
129
140
  @property
130
141
  def session_id(self) -> str:
@@ -661,6 +672,43 @@ class Session:
661
672
  x_api_key=self._api_key,
662
673
  )
663
674
 
675
+ def connect_network(self, host_only: bool = False) -> dict:
676
+ """Connect all VMs in this session to a WireGuard network.
677
+
678
+ Creates a full mesh WireGuard network between all VMs in the session.
679
+ Must be called after all environments are ready. This method is idempotent -
680
+ calling it multiple times will not reconnect already-connected VMs.
681
+
682
+ Args:
683
+ host_only: If True, force WireGuard to run on the worker instead of
684
+ inside the VM. Useful for VMs without WireGuard tools or
685
+ for testing worker-side WireGuard.
686
+
687
+ Returns:
688
+ Dict with:
689
+ - success: bool - True if all VMs connected successfully
690
+ - session_id: str - The session ID
691
+ - subnet: str - The network subnet (e.g., "10.100.0.0/24")
692
+ - results: dict[str, bool] - Success status per job_id
693
+
694
+ Raises:
695
+ RuntimeError: If session is closed or network connection fails.
696
+ """
697
+ self._check_closed()
698
+
699
+ # Server returns 500 with error detail if network connection fails
700
+ result = sessions_connect_network.sync(
701
+ client=self._http,
702
+ session_id=self.session_id,
703
+ body=ConnectNetworkRequest(host_only=host_only),
704
+ x_api_key=self._api_key,
705
+ )
706
+
707
+ # Track if any VMs are using host-only routing (no VM-to-VM mesh)
708
+ self._network_host_only = result.get("host_only", False)
709
+
710
+ return result
711
+
664
712
  def login(
665
713
  self,
666
714
  browser: Browser,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plato-sdk-v2
3
- Version: 2.6.1
3
+ Version: 2.7.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=-vi0WFWBl1r0SP4-d---XUK4RxKbzlq5cyc2SWzsUFg,738
3
+ plato/_generated/__init__.py,sha256=ArsWKBXOUO2pG4Aw-LwyGEbT7Ho0xuFvEQtiQeT1FSw,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
@@ -195,7 +195,7 @@ plato/_generated/api/v1/testcases/get_testcases_in_set.py,sha256=TJK2KHmGC5lNmBP
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
197
197
  plato/_generated/api/v1/testcases/version_bump_testcase.py,sha256=r3qz7DibOQTKmoG0CrPWX_WItgDyOoh5B2H4degsRcU,1719
198
- plato/_generated/api/v2/__init__.py,sha256=zIqxxyRSSO2cKhoUyLRswhAotuowKI9C3zYcBxLbDtI,301
198
+ plato/_generated/api/v2/__init__.py,sha256=G_S71KQf7zyaDyhtoptxywAVH-2vYrqAw0qRMYzkV8I,327
199
199
  plato/_generated/api/v2/agents/__init__.py,sha256=rPyICBqm0_7PzGQYry5Kl9UzeFsLrt4Nu6gjIkpu_EA,401
200
200
  plato/_generated/api/v2/agents/get_agent_ecr_token.py,sha256=bV36MuyEmgCoFaggPYWxyOuhydSV3Adcq7Z4nUHvrxs,2058
201
201
  plato/_generated/api/v2/agents/get_agent_schema.py,sha256=Ax1bKnq5rXvrfGi-lY5GG2GCr0l7nVD1HNUFmMjuh2s,2453
@@ -235,6 +235,15 @@ plato/_generated/api/v2/jobs/snapshot.py,sha256=WSll40eYa2Z7sCo2ACs5GpWZJVRxyLNK
235
235
  plato/_generated/api/v2/jobs/snapshot_store.py,sha256=9iQAG_JKe3hwJanmmJPJfi84wXbBkwB5FOR_TUCATl0,2791
236
236
  plato/_generated/api/v2/jobs/state.py,sha256=IvDkNv59mFtfp9wJ9ZTE_DLby7cQk6v9b7Ph3dVws8U,1667
237
237
  plato/_generated/api/v2/jobs/wait_for_ready.py,sha256=FgnXDErXBGC99VmimImXIRfWLHlswgO25hDk_Wrul8c,2758
238
+ plato/_generated/api/v2/networks/__init__.py,sha256=ntTf4dcQ2Fni6UWDZZZvjGqi3RgLNsFUKl-p6bbEzSA,367
239
+ plato/_generated/api/v2/networks/add_member.py,sha256=H2l6B76YvXqSm2UTcGtCIjqM_Mf9HbUups00uYA-EwQ,1921
240
+ plato/_generated/api/v2/networks/create_network.py,sha256=il0_JIg1mljRN5kj1BCNrA6YWk9H30IMJXV6eqb88Bw,1813
241
+ plato/_generated/api/v2/networks/delete_network.py,sha256=9hF2ucSfVgCZ-uPGjyjMBAImPaVbnIJBQdOHO8xp3eU,1550
242
+ plato/_generated/api/v2/networks/get_network.py,sha256=l4e4hIxPQZQS_Oeck69eGrj2CuqTK2WRvMbs92jfty8,1676
243
+ plato/_generated/api/v2/networks/list_members.py,sha256=0Egqn9zbXFDC_Ggubx67MI3j89evtz_budqjfMIEx3g,1643
244
+ plato/_generated/api/v2/networks/list_networks.py,sha256=i_vZb5snAtbxFxQv-Bea7JBk0QYDyG50Ww-j728P6gg,1797
245
+ plato/_generated/api/v2/networks/remove_member.py,sha256=13NhQRBZ_s_i0nY65Mgm4HTgSgW0W_1Bh68Ou4wX3kk,1671
246
+ plato/_generated/api/v2/networks/update_member.py,sha256=-ZOeq7T8BYNghcEHoaRPoccSJI_drqgxhkC760fz6-8,2105
238
247
  plato/_generated/api/v2/pypi/__init__.py,sha256=hNYOun8oIzY9NTT2JEqa7iuOcDHBlidN_EaaCnhsBCs,246
239
248
  plato/_generated/api/v2/pypi/download_package.py,sha256=stBfbwaaYnDmHeOugwvQN8EFK3yVO7Xh3DLOKGdjCB8,1356
240
249
  plato/_generated/api/v2/pypi/get_package_schema.py,sha256=-3JA_M7WEQ4TvwtJVLyiQpdxogD2vBCtx5cTzrd0v6I,1866
@@ -250,9 +259,11 @@ plato/_generated/api/v2/releases/handle_import.py,sha256=ByBl6tHDKMXD0Ic_C4jpokx
250
259
  plato/_generated/api/v2/releases/list_releases.py,sha256=ebNZc45ooGrKT-1lZ6mIjruTO8zwngz5G9edS6DB7lc,2149
251
260
  plato/_generated/api/v2/releases/prep_release_assigned_testcases.py,sha256=B171O7xqXZm1AEXGhSfPNobBsqQRINxX4gYBU-TTwEg,2668
252
261
  plato/_generated/api/v2/releases/update.py,sha256=aEz9dbnvRg5pAp1jkTZpwUjKxpOOn-xXktPeNVKpruI,1956
253
- plato/_generated/api/v2/sessions/__init__.py,sha256=9wc7AdI8_exFzqzTkiYiC1OyFW-Jv3iCXZpk_DoO4Ok,1117
262
+ plato/_generated/api/v2/sessions/__init__.py,sha256=zH6GgESh7WyjauJh1FVHCeTZXeLJJUxmSNkd3PTT570,1197
263
+ plato/_generated/api/v2/sessions/add_ssh_key.py,sha256=JDaw5B1hHodH43DUoZ7FrO1_ECWacjinia4-DbU0jGo,2198
254
264
  plato/_generated/api/v2/sessions/checkpoint.py,sha256=Kd8NSIeuC41cRB4Y3j_L0yNIU_WVRjkBIL72pRqoRTc,2933
255
265
  plato/_generated/api/v2/sessions/close.py,sha256=cPA4HhPULg9EEKdBcMjRJ64NUI474BcztHPCGk8W3Z0,1718
266
+ plato/_generated/api/v2/sessions/connect_network.py,sha256=CorUkSBoDOgUelYmt2ohrDjXLksiDR5u0n1BKqVFHOY,2489
256
267
  plato/_generated/api/v2/sessions/disk_snapshot.py,sha256=nHMXEPctQgiCqziXlvhw2FxgPKOC6VVvKEPXzVGWk5Y,2875
257
268
  plato/_generated/api/v2/sessions/evaluate.py,sha256=X1JU1m4MLbHXk_2kjQ_QezBol63o80zKIb0OlDaNkmI,2077
258
269
  plato/_generated/api/v2/sessions/execute.py,sha256=_jHXYeSsuYnOItZLdCeJ5Fxx5YNEAA7jWRcrXndA880,1979
@@ -282,7 +293,7 @@ plato/_generated/api/v2/user/__init__.py,sha256=yMh1Gn9VpKHQMQCmJdpeDPA9Ek9PBgP0
282
293
  plato/_generated/api/v2/user/get_current_user.py,sha256=tvamtbWTEkeeNUBLSPqZIcCGqKVadQM3DVcezsWP22U,1814
283
294
  plato/_generated/api/version/__init__.py,sha256=dQXTYrXjD1RZcvWwnlqXWAZ-eAV-V-6JSNuY7uaca7o,70
284
295
  plato/_generated/api/version/check.py,sha256=HTVNw0oi9gbvX4pOVoH4y4JywCxdl1pJTCk2PjJFwJ4,778
285
- plato/_generated/models/__init__.py,sha256=6hl9VvbtRkF5MBLcnuWdI2N26mBKPKV0opn7rqtWJy4,155575
296
+ plato/_generated/models/__init__.py,sha256=r3iq2AruILqV7k_okJt2JHBRYKKRByLsFOaKuJB91VQ,159482
286
297
  plato/_sims_generator/__init__.py,sha256=Km4QOl9wxjQ5dgpdhk9QnBFJFFc9eq3rPbMWIQRjIn0,1602
287
298
  plato/_sims_generator/cli.py,sha256=mzolN-dxfMkVAdA-vC0esnai-cGg-i4ozOw8dACefV4,2709
288
299
  plato/_sims_generator/instruction.py,sha256=Na9M-jIdBPhp_fLuBPTicoFnWriRyi8YiZ-eQBj64HI,6644
@@ -411,15 +422,16 @@ plato/v1/sync_env.py,sha256=UIfDpx3nPHBNWzahSddvol0SvfK9vU4mr3MOIOPCGr8,24878
411
422
  plato/v1/sync_flow_executor.py,sha256=kgvNYOtA9FHeNfP7qb8ZPUIlTsfIss_Z98W8uX5veck,19233
412
423
  plato/v1/sync_sdk.py,sha256=2sedg1QJiSxr1I3kCyfaLAnlAgHlbblc3QQP_47O30k,25697
413
424
  plato/v1/cli/__init__.py,sha256=om4b7PxgsoI7rEwuQelmQkqPdhMVn53_5qEN8kvksYw,105
414
- plato/v1/cli/agent.py,sha256=EbmEKWCMC5DJjmVDrYuwGenhIDgPjie8hdwrDOTSXaY,43766
415
- plato/v1/cli/chronos.py,sha256=fevRWbEcpHH9GzxpAx5CdKB1b52hN8q2PnO7BZldpgY,27389
416
- plato/v1/cli/main.py,sha256=iKUz6Mu-4-dgr29qOUmDqBaumOCzNQKZsHAalVtaH0Q,6932
417
- plato/v1/cli/pm.py,sha256=TIvXBIWFDjr4s1girMMCuvHWQJkjpmsS-igAamddIWE,49746
418
- plato/v1/cli/sandbox.py,sha256=jhTney-Pr8bGmWIXOjVIMtZJ7v7uIoRnuh3wfG7weRg,98718
419
- plato/v1/cli/ssh.py,sha256=enrf7Y01ZeRIyHDEX0Yt7up5zEe7MCvE9u8SP4Oqiz4,6926
425
+ plato/v1/cli/agent.py,sha256=r5Eh2e2-rUIGjK5uevnGKqScABtFK-Spomrrytj-3og,44053
426
+ plato/v1/cli/chronos.py,sha256=lzFY0nomP1AY14i8oc8OvWOdq9ydCiE3dN2XrSupvA4,27827
427
+ plato/v1/cli/main.py,sha256=Yqy1vn4sGyAWKNpDVcLl9pbzkMn89tYVBIxFU30ZtPk,6905
428
+ plato/v1/cli/pm.py,sha256=t14gBRAks1TYxPQLj9x4rgJAGudn47vLH8M0Cd2ocVU,48701
429
+ plato/v1/cli/proxy.py,sha256=WmCt0R9Gos1q0FZTQSsbloNC3-Cnx6Yb60RZF1BzC18,12178
430
+ plato/v1/cli/sandbox.py,sha256=hEcI0Ve5UahYwIlyB7djuyb41JfWVtg-m2NivC36kJA,98859
431
+ plato/v1/cli/ssh.py,sha256=9ypjn5kQuaTcVjsWMDIUDyehXRH9fauk_z-C3mXzYJ8,2381
420
432
  plato/v1/cli/utils.py,sha256=ba7Crv4OjDmgCv4SeB8UeZDin-iOdQw_3N6fd-g5XVk,4572
421
- plato/v1/cli/verify.py,sha256=7QmQwfOOkr8a51f8xfVIr2zif7wGl2E8HOZTbOaIoV0,20671
422
- plato/v1/cli/world.py,sha256=05onBuwVQOJ0PV9lEIZQkl80SZWeTOtHWEDd49P3Xkk,8709
433
+ plato/v1/cli/verify.py,sha256=D-hyiCBPL_G_9uTIEugUsq_B9y6mRVAUWILpfUx4YAo,22814
434
+ plato/v1/cli/world.py,sha256=whl49KUJe23pw7CbjBq37Z1MHGOEoXtBmXnQCLPDpCs,8825
423
435
  plato/v1/cli/templates/world-runner.Dockerfile,sha256=p59nPCAOUgphSiOpWA3eteRXUWTmZV6n57zn3dWUoYM,932
424
436
  plato/v1/examples/doordash_tasks.py,sha256=8Sz9qx-vTmiOAiCAbrDRvZGsA1qQQBr1KHbxXdjr7OI,23233
425
437
  plato/v1/examples/loadtest.py,sha256=ZsQYNN_fZjE7CbrbVJb4KDc0OLaH7b66iPrEHDhuw0U,5609
@@ -470,17 +482,17 @@ plato/v2/types.py,sha256=MrHiE8AobOegeTfoKKHZ5JTccaFfS3-EW0arV7q8S5c,3533
470
482
  plato/v2/async_/__init__.py,sha256=rq9olvr4PuI6sY535IsLT4kg9YX_sGYrrY6SA991xk8,654
471
483
  plato/v2/async_/artifact.py,sha256=JBWVQeVaZhkU2qn_knyzyA7wd5iQ8qxfLQ_l9GPhgYs,1217
472
484
  plato/v2/async_/chronos.py,sha256=WeqYF3HIKs7hV9LNZb2GlDS1yP6b422DZKtNuPxdL34,12394
473
- plato/v2/async_/client.py,sha256=GVgAgNN5gsDME8iV0zxqnwbsVS93J6cknOcq_VXwYN8,4209
485
+ plato/v2/async_/client.py,sha256=IhiEiwbLNPBr9JJilw4uz7MLKXY_rUZpYGYC1dX-UfA,5186
474
486
  plato/v2/async_/environment.py,sha256=M5IeWYLwREOIyuS2zqgBSqHE_x66_OZXrevA9Rkc8Is,5825
475
487
  plato/v2/async_/flow_executor.py,sha256=Tl4nRu1ZPWJFNNxyTGy-PxvebZEUD18ZDaz8T2chtzU,14188
476
- plato/v2/async_/session.py,sha256=ssTEFgfpDQElQEmeKulLWKLoW-wA3m_nI3UvEWb9lB0,36749
488
+ plato/v2/async_/session.py,sha256=sXNmHXU9MU9H4_eNd-pRfBjEZh96SOWREPJh5JpyB84,38775
477
489
  plato/v2/sync/__init__.py,sha256=6Hzc5k34WnHTUMPWrIefnL4P5YEoJMRLOmYDO7LxGg8,405
478
490
  plato/v2/sync/artifact.py,sha256=wTLC-tugG128wLvh-JqNPb0zsw5FXEJlZNahurSWink,1169
479
491
  plato/v2/sync/chronos.py,sha256=ChXpasjRzAZjoYTimpPqYydnwEk-IgdxR0SDXDOZbUM,12078
480
- plato/v2/sync/client.py,sha256=Q9fS1BF4KxTMMnceMwCMlb5dNFZ6LA4gsXWNLgsL2eE,3870
492
+ plato/v2/sync/client.py,sha256=cA2ifI8BMlB-WAOog6G0BxuFEnDqnEXi5CIUJXEHBnE,4829
481
493
  plato/v2/sync/environment.py,sha256=WnDzbyEHpwCSEP8XnfNSjIYS7rt7lYR4HGJjzprZmTQ,5066
482
494
  plato/v2/sync/flow_executor.py,sha256=N41-WCWIJVcCR2UmPUEiK7roNacYoeONkRXpR7lUgT8,13941
483
- plato/v2/sync/session.py,sha256=jc71bZFb-1m4QTtU4V00OkNH8fHac3jyWTwq-uOK-BE,28409
495
+ plato/v2/sync/session.py,sha256=okXqF-CjMmA82WRy2zPXaGidbovgjAENSqiuvE4_jKE,30420
484
496
  plato/v2/utils/__init__.py,sha256=XLeFFsjXkm9g2raMmo7Wt4QN4hhCrNZDJKnpffJ4LtM,38
485
497
  plato/v2/utils/db_cleanup.py,sha256=lnI5lsMHNHpG85Y99MaE4Rzc3618piuzhvH-uXO1zIc,8702
486
498
  plato/v2/utils/models.py,sha256=PwehSSnIRG-tM3tWL1PzZEH77ZHhIAZ9R0UPs6YknbM,1441
@@ -491,7 +503,7 @@ plato/worlds/base.py,sha256=-RR71bSxEFI5yydtrtq-AAbuw98CIjvmrbztqzB9oIc,31041
491
503
  plato/worlds/build_hook.py,sha256=KSoW0kqa5b7NyZ7MYOw2qsZ_2FkWuz0M3Ru7AKOP7Qw,3486
492
504
  plato/worlds/config.py,sha256=O1lUXzxp-Z_M7izslT8naXgE6XujjzwYFFrDDzUOueI,12736
493
505
  plato/worlds/runner.py,sha256=r9B2BxBae8_dM7y5cJf9xhThp_I1Qvf_tlPq2rs8qC8,4013
494
- plato_sdk_v2-2.6.1.dist-info/METADATA,sha256=k75QQnrgiZGJItMu0V86deiGRwyshWevF66gZl6QNa0,8652
495
- plato_sdk_v2-2.6.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
496
- plato_sdk_v2-2.6.1.dist-info/entry_points.txt,sha256=upGMbJCx6YWUTKrPoYvYUYfFCqYr75nHDwhA-45m6p8,136
497
- plato_sdk_v2-2.6.1.dist-info/RECORD,,
506
+ plato_sdk_v2-2.7.0.dist-info/METADATA,sha256=-42a-9UgtVuRD6KfkM1Wy1uaCbICSh7uGgxLKuCj7xs,8652
507
+ plato_sdk_v2-2.7.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
508
+ plato_sdk_v2-2.7.0.dist-info/entry_points.txt,sha256=upGMbJCx6YWUTKrPoYvYUYfFCqYr75nHDwhA-45m6p8,136
509
+ plato_sdk_v2-2.7.0.dist-info/RECORD,,