plato-sdk-v2 2.6.1__tar.gz → 2.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/PKG-INFO +1 -1
  2. plato_sdk_v2-2.7.0/VERSION +1 -0
  3. plato_sdk_v2-2.7.0/examples/test.py +236 -0
  4. plato_sdk_v2-2.7.0/examples/test_proxy_ssh.py +152 -0
  5. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/__init__.py +1 -1
  6. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/__init__.py +2 -1
  7. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/__init__.py +23 -0
  8. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/add_member.py +75 -0
  9. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/create_network.py +70 -0
  10. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/delete_network.py +68 -0
  11. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/get_network.py +69 -0
  12. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/list_members.py +69 -0
  13. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/list_networks.py +74 -0
  14. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/remove_member.py +73 -0
  15. plato_sdk_v2-2.7.0/plato/_generated/api/v2/networks/update_member.py +80 -0
  16. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/__init__.py +4 -0
  17. plato_sdk_v2-2.7.0/plato/_generated/api/v2/sessions/add_ssh_key.py +81 -0
  18. plato_sdk_v2-2.7.0/plato/_generated/api/v2/sessions/connect_network.py +89 -0
  19. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/models/__init__.py +150 -24
  20. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/agent.py +45 -52
  21. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/chronos.py +46 -58
  22. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/main.py +14 -25
  23. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/pm.py +37 -92
  24. plato_sdk_v2-2.7.0/plato/v1/cli/proxy.py +343 -0
  25. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/sandbox.py +305 -385
  26. plato_sdk_v2-2.7.0/plato/v1/cli/ssh.py +71 -0
  27. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/verify.py +79 -55
  28. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/world.py +13 -12
  29. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/async_/client.py +24 -2
  30. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/async_/session.py +48 -0
  31. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/sync/client.py +24 -2
  32. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/sync/session.py +48 -0
  33. plato_sdk_v2-2.6.1/VERSION +0 -1
  34. plato_sdk_v2-2.6.1/plato/v1/cli/ssh.py +0 -226
  35. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/.claude/agents/sim-creator.md +0 -0
  36. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/.gitignore +0 -0
  37. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/BUILDING_SIMS.md +0 -0
  38. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/README.md +0 -0
  39. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/ci/CLAUDE.md +0 -0
  40. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/ci/deploy.sh +0 -0
  41. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/ci/lint.sh +0 -0
  42. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/ci/setup.sh +0 -0
  43. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/ci/version-bump.sh +0 -0
  44. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/AGENT_SPEC.md +0 -0
  45. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/CLI.md +0 -0
  46. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/GENERATING_SIM_SDKS.md +0 -0
  47. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/SIMULATOR_LIFECYCLE.md +0 -0
  48. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/SIM_CREATOR.md +0 -0
  49. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/cli/agent.md +0 -0
  50. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/cli/flows.md +0 -0
  51. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/cli/pm.md +0 -0
  52. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/cli/sandbox.md +0 -0
  53. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/cli/sims.md +0 -0
  54. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/cli/world.md +0 -0
  55. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/sim-creation-pipeline.md +0 -0
  56. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skill-restructure-plan.md +0 -0
  57. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
  58. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-config/SKILL.md +0 -0
  59. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-creator/SKILL.md +0 -0
  60. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-debugger/SKILL.md +0 -0
  61. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-flow-audit/SKILL.md +0 -0
  62. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-flow-clear/SKILL.md +0 -0
  63. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
  64. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-flow-run/SKILL.md +0 -0
  65. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-research/SKILL.md +0 -0
  66. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-review/SKILL.md +0 -0
  67. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
  68. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
  69. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
  70. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
  71. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-snapshot/SKILL.md +0 -0
  72. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-submit/SKILL.md +0 -0
  73. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/skills/sim-validate/SKILL.md +0 -0
  74. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/testcommit +0 -0
  75. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/docs/unit.sh +0 -0
  76. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/__init__.py +0 -0
  77. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/__init__.py +0 -0
  78. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/__init__.py +0 -0
  79. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
  80. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
  81. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
  82. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
  83. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
  84. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/__init__.py +0 -0
  85. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
  86. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
  87. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
  88. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
  89. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
  90. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
  91. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
  92. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/__init__.py +0 -0
  93. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/backup.py +0 -0
  94. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/cleanup.py +0 -0
  95. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/close.py +0 -0
  96. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/close_async.py +0 -0
  97. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/create.py +0 -0
  98. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/create_batch.py +0 -0
  99. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/create_simulator.py +0 -0
  100. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
  101. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
  102. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
  103. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_active_session.py +0 -0
  104. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
  105. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
  106. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_flows.py +0 -0
  107. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
  108. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_job_info.py +0 -0
  109. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_job_status.py +0 -0
  110. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
  111. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
  112. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_public_url.py +0 -0
  113. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
  114. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_simulators.py +0 -0
  115. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_state.py +0 -0
  116. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
  117. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
  118. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
  119. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/reset.py +0 -0
  120. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/score.py +0 -0
  121. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
  122. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/env/update_simulator.py +0 -0
  123. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/__init__.py +0 -0
  124. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
  125. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
  126. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
  127. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
  128. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
  129. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
  130. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
  131. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
  132. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/__init__.py +0 -0
  133. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
  134. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
  135. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
  136. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
  137. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
  138. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
  139. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
  140. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
  141. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
  142. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
  143. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
  144. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
  145. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
  146. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
  147. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/jobs/__init__.py +0 -0
  148. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
  149. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
  150. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
  151. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
  152. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
  153. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/__init__.py +0 -0
  154. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
  155. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
  156. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
  157. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
  158. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
  159. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
  160. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
  161. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
  162. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
  163. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
  164. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
  165. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
  166. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
  167. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/queue/__init__.py +0 -0
  168. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
  169. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
  170. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/queue/get_vms.py +0 -0
  171. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/queue/get_workers.py +0 -0
  172. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
  173. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
  174. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
  175. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
  176. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
  177. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
  178. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
  179. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
  180. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
  181. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
  182. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
  183. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
  184. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/__init__.py +0 -0
  185. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
  186. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/archive_session.py +0 -0
  187. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
  188. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
  189. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
  190. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
  191. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
  192. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
  193. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
  194. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
  195. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
  196. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
  197. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
  198. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
  199. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
  200. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
  201. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
  202. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_session.py +0 -0
  203. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
  204. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_sessions.py +0 -0
  205. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
  206. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
  207. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
  208. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
  209. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
  210. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/set_session_output.py +0 -0
  211. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/update_session_public.py +0 -0
  212. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
  213. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/__init__.py +0 -0
  214. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
  215. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
  216. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
  217. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
  218. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
  219. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
  220. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
  221. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
  222. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
  223. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
  224. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
  225. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
  226. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
  227. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
  228. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
  229. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
  230. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
  231. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
  232. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
  233. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/register.py +0 -0
  234. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
  235. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
  236. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
  237. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/__init__.py +0 -0
  238. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
  239. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
  240. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
  241. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
  242. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
  243. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
  244. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
  245. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
  246. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
  247. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
  248. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
  249. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
  250. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
  251. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
  252. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
  253. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
  254. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
  255. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
  256. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
  257. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
  258. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
  259. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
  260. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
  261. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
  262. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
  263. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
  264. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
  265. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
  266. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
  267. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
  268. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/__init__.py +0 -0
  269. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
  270. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
  271. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
  272. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/import_agent.py +0 -0
  273. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
  274. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
  275. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
  276. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
  277. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
  278. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos/__init__.py +0 -0
  279. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
  280. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
  281. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
  282. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
  283. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
  284. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
  285. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
  286. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/cluster/__init__.py +0 -0
  287. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
  288. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/__init__.py +0 -0
  289. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
  290. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/close.py +0 -0
  291. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
  292. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
  293. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
  294. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/execute.py +0 -0
  295. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
  296. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
  297. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
  298. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/make.py +0 -0
  299. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/public_url.py +0 -0
  300. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/reset.py +0 -0
  301. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/set_date.py +0 -0
  302. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
  303. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
  304. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
  305. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/state.py +0 -0
  306. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
  307. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/pypi/__init__.py +0 -0
  308. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/pypi/download_package.py +0 -0
  309. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
  310. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/pypi/package_index.py +0 -0
  311. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
  312. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
  313. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/__init__.py +0 -0
  314. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/create.py +0 -0
  315. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/deploy.py +0 -0
  316. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/get.py +0 -0
  317. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
  318. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/handle_import.py +0 -0
  319. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/list_releases.py +0 -0
  320. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
  321. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/releases/update.py +0 -0
  322. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
  323. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/close.py +0 -0
  324. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
  325. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
  326. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/execute.py +0 -0
  327. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
  328. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
  329. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
  330. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
  331. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
  332. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
  333. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
  334. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
  335. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
  336. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
  337. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
  338. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
  339. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
  340. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/make.py +0 -0
  341. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/reset.py +0 -0
  342. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/set_date.py +0 -0
  343. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
  344. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
  345. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
  346. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/state.py +0 -0
  347. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
  348. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
  349. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/user/__init__.py +0 -0
  350. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/v2/user/get_current_user.py +0 -0
  351. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/version/__init__.py +0 -0
  352. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/api/version/check.py +0 -0
  353. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/client.py +0 -0
  354. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/errors.py +0 -0
  355. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_generated/py.typed +0 -0
  356. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/__init__.py +0 -0
  357. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/cli.py +0 -0
  358. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/instruction.py +0 -0
  359. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/parser.py +0 -0
  360. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/python.py +0 -0
  361. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
  362. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
  363. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
  364. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
  365. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
  366. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
  367. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
  368. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
  369. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
  370. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/__init__.py +0 -0
  371. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/artifacts.py +0 -0
  372. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/base.py +0 -0
  373. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/build.py +0 -0
  374. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/config.py +0 -0
  375. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/otel.py +0 -0
  376. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/runner.py +0 -0
  377. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/agents/trajectory.py +0 -0
  378. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/__init__.py +0 -0
  379. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/__init__.py +0 -0
  380. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/admin/__init__.py +0 -0
  381. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py +0 -0
  382. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py +0 -0
  383. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py +0 -0
  384. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py +0 -0
  385. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py +0 -0
  386. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/__init__.py +0 -0
  387. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/create_agent.py +0 -0
  388. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/delete_agent.py +0 -0
  389. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/get_agent.py +0 -0
  390. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/get_agent_schema.py +0 -0
  391. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/get_agent_versions.py +0 -0
  392. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/list_agents.py +0 -0
  393. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/agents/lookup_agent.py +0 -0
  394. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/auth/__init__.py +0 -0
  395. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
  396. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
  397. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
  398. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/checkpoints/__init__.py +0 -0
  399. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/checkpoints/list_checkpoints.py +0 -0
  400. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/checkpoints/preview_checkpoint.py +0 -0
  401. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/default/__init__.py +0 -0
  402. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/default/health.py +0 -0
  403. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/events/__init__.py +0 -0
  404. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/events/get_session_event.py +0 -0
  405. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/events/list_session_events.py +0 -0
  406. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/jobs/__init__.py +0 -0
  407. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/jobs/launch_job.py +0 -0
  408. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/otel/__init__.py +0 -0
  409. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py +0 -0
  410. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py +0 -0
  411. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/registry/__init__.py +0 -0
  412. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
  413. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
  414. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
  415. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
  416. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
  417. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
  418. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/runtimes/__init__.py +0 -0
  419. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/runtimes/create_runtime.py +0 -0
  420. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
  421. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/runtimes/get_runtime.py +0 -0
  422. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/runtimes/get_runtime_logs.py +0 -0
  423. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
  424. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/runtimes/test_runtime.py +0 -0
  425. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/secrets/__init__.py +0 -0
  426. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/secrets/create_secret.py +0 -0
  427. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/secrets/delete_secret.py +0 -0
  428. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/secrets/get_secret.py +0 -0
  429. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/secrets/list_secrets.py +0 -0
  430. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/secrets/update_secret.py +0 -0
  431. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/__init__.py +0 -0
  432. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/close_session.py +0 -0
  433. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/complete_session.py +0 -0
  434. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/create_session.py +0 -0
  435. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/get_session.py +0 -0
  436. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/get_session_bash_logs_download.py +0 -0
  437. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/get_session_envs.py +0 -0
  438. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/get_session_live_logs.py +0 -0
  439. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/get_session_logs.py +0 -0
  440. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
  441. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/get_session_status.py +0 -0
  442. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/list_sessions.py +0 -0
  443. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/list_tags.py +0 -0
  444. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/sessions/update_session_tags.py +0 -0
  445. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/status/__init__.py +0 -0
  446. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
  447. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
  448. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/templates/__init__.py +0 -0
  449. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/templates/create_template.py +0 -0
  450. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/templates/delete_template.py +0 -0
  451. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/templates/get_template.py +0 -0
  452. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/templates/list_templates.py +0 -0
  453. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/templates/update_template.py +0 -0
  454. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/trajectories/__init__.py +0 -0
  455. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
  456. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
  457. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/worlds/__init__.py +0 -0
  458. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/worlds/create_world.py +0 -0
  459. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/worlds/delete_world.py +0 -0
  460. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/worlds/get_world.py +0 -0
  461. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/api/worlds/list_worlds.py +0 -0
  462. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/client.py +0 -0
  463. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/errors.py +0 -0
  464. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/models/__init__.py +0 -0
  465. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/chronos/py.typed +0 -0
  466. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/py.typed +0 -0
  467. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/sims/README.md +0 -0
  468. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/sims/__init__.py +0 -0
  469. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/sims/agent_helpers.py +0 -0
  470. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/sims/cli.py +0 -0
  471. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/sims/generate_clients.py +0 -0
  472. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/sims/registry.py +0 -0
  473. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/__init__.py +0 -0
  474. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/audit_ui.py +0 -0
  475. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/__init__.py +0 -0
  476. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/templates/world-runner.Dockerfile +0 -0
  477. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli/utils.py +0 -0
  478. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/cli.py +0 -0
  479. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/config.py +0 -0
  480. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/examples/doordash_tasks.py +0 -0
  481. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/examples/loadtest.py +0 -0
  482. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/examples/test_env.py +0 -0
  483. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/examples/test_env_custom_browser.py +0 -0
  484. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/examples/test_env_sync.py +0 -0
  485. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/examples/test_reuse_env.py +0 -0
  486. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/examples/test_run.py +0 -0
  487. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/exceptions.py +0 -0
  488. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/README.md +0 -0
  489. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
  490. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/background.js +0 -0
  491. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
  492. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/content.js +0 -0
  493. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
  494. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
  495. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
  496. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/options.html +0 -0
  497. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/options.js +0 -0
  498. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
  499. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/package.json +0 -0
  500. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
  501. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
  502. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
  503. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
  504. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
  505. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
  506. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
  507. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
  508. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
  509. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
  510. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
  511. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
  512. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
  513. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
  514. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
  515. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
  516. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
  517. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/flow_executor.py +0 -0
  518. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/models/__init__.py +0 -0
  519. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/models/build_models.py +0 -0
  520. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/models/env.py +0 -0
  521. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/models/flow.py +0 -0
  522. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/models/sandbox.py +0 -0
  523. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/models/task.py +0 -0
  524. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/sandbox_sdk.py +0 -0
  525. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/sdk.py +0 -0
  526. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/sync_env.py +0 -0
  527. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/sync_flow_executor.py +0 -0
  528. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/sync_sdk.py +0 -0
  529. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v1/utils/proxytunnel.py +0 -0
  530. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/__init__.py +0 -0
  531. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/async_/__init__.py +0 -0
  532. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/async_/artifact.py +0 -0
  533. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/async_/chronos.py +0 -0
  534. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/async_/environment.py +0 -0
  535. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/async_/flow_executor.py +0 -0
  536. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/models.py +0 -0
  537. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/sync/__init__.py +0 -0
  538. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/sync/artifact.py +0 -0
  539. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/sync/chronos.py +0 -0
  540. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/sync/environment.py +0 -0
  541. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/sync/flow_executor.py +0 -0
  542. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/types.py +0 -0
  543. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/utils/__init__.py +0 -0
  544. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/utils/db_cleanup.py +0 -0
  545. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/utils/models.py +0 -0
  546. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/v2/utils/proxy_tunnel.py +0 -0
  547. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/worlds/README.md +0 -0
  548. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/worlds/__init__.py +0 -0
  549. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/worlds/base.py +0 -0
  550. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/worlds/build_hook.py +0 -0
  551. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/worlds/config.py +0 -0
  552. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/plato/worlds/runner.py +0 -0
  553. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/pyproject.toml +0 -0
  554. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/scripts/get_all_artifact_targets.py +0 -0
  555. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/__init__.py +0 -0
  556. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/integration/__init__.py +0 -0
  557. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/integration/conftest.py +0 -0
  558. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/integration/test_browser_agent.py +0 -0
  559. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/integration/test_chronos_callback.py +0 -0
  560. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/integration/test_cleanup_snapshot.py +0 -0
  561. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/integration/test_code_world.py +0 -0
  562. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/integration/test_harbor_agent_runner.py +0 -0
  563. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/sims/__init__.py +0 -0
  564. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/sims/conftest.py +0 -0
  565. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/sims/test_agent_helpers.py +0 -0
  566. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/test_heartbeat_keepalive.py +0 -0
  567. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/test_session_serialization.py +0 -0
  568. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/test_set_date.py +0 -0
  569. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/test_v2_imports.py +0 -0
  570. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/test_v2_multisim_integration.py +0 -0
  571. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/test_v2_session.py +0 -0
  572. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/tests/test_version.py +0 -0
  573. {plato_sdk_v2-2.6.1 → plato_sdk_v2-2.7.0}/uv.lock +0 -0
@@ -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
@@ -0,0 +1 @@
1
+ 2.7.0
@@ -0,0 +1,236 @@
1
+ """Simple example of creating two VMs from resources with a network.
2
+
3
+ This script demonstrates:
4
+ 1. Creating a Plato session with two VMs from resources
5
+ 2. Waiting for VMs to be ready (worker allocation)
6
+ 3. Connecting VMs to WireGuard network via connect_network endpoint
7
+ 4. Testing VM-to-VM TCP connectivity with Redis over WireGuard
8
+
9
+ Run with: python test.py
10
+ Requires: PLATO_API_KEY environment variable
11
+ """
12
+
13
+ import logging
14
+ import os
15
+ import time
16
+
17
+ from dotenv import load_dotenv
18
+
19
+ from plato.v2 import Env, Plato
20
+ from plato.v2.types import SimConfigCompute
21
+
22
+ load_dotenv()
23
+
24
+ logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
25
+ logger = logging.getLogger(__name__)
26
+
27
+
28
+ def main():
29
+ # Check for API key
30
+ if not os.environ.get("PLATO_API_KEY"):
31
+ logger.error("PLATO_API_KEY environment variable not set")
32
+ return
33
+
34
+ plato = Plato()
35
+ session = None
36
+
37
+ try:
38
+ logger.info("=" * 60)
39
+ logger.info("WIREGUARD NETWORK TCP (REDIS) CONNECTIVITY TEST")
40
+ logger.info("=" * 60)
41
+
42
+ # 1. Define resource configurations for the VMs
43
+ vm1_config = SimConfigCompute(cpus=2, memory=4096, disk=10000)
44
+ vm2_config = SimConfigCompute(cpus=2, memory=4096, disk=10000)
45
+
46
+ # 2. Create session with two VMs from resources
47
+ logger.info("[1/8] Creating session with two VMs...")
48
+ session = plato.sessions.create(
49
+ envs=[
50
+ Env.resource("vm1", sim_config=vm1_config, alias="vm1"),
51
+ Env.resource("vm2", sim_config=vm2_config, alias="vm2"),
52
+ ],
53
+ timeout=600,
54
+ )
55
+
56
+ logger.info(f"Session created: {session.session_id}")
57
+ logger.info(f"Environments: {len(session.envs)}")
58
+
59
+ # Get env references
60
+ vm1 = session.envs[0] if session.envs[0].alias == "vm1" else session.envs[1]
61
+ vm2 = session.envs[1] if session.envs[0].alias == "vm1" else session.envs[0]
62
+
63
+ for env in session.envs:
64
+ logger.info(f" - {env.alias}: job_id={env.job_id}")
65
+
66
+ # 3. Connect VMs to WireGuard network
67
+ logger.info("[2/8] Connecting VMs to WireGuard network...")
68
+
69
+ connect_result = session.connect_network()
70
+ logger.info(f" Network connected: success={connect_result.get('success')}")
71
+ logger.info(f" Subnet: {connect_result.get('subnet')}")
72
+ for job_id, success in connect_result.get("results", {}).items():
73
+ logger.info(f" {job_id}: {'OK' if success else 'FAILED'}")
74
+
75
+ # 4. Get WireGuard IPs
76
+ logger.info("[3/8] Getting WireGuard IPs...")
77
+
78
+ vm1_wg_ip = vm1.execute("ip -4 addr show wg0 | grep inet | awk '{print $2}' | cut -d/ -f1").stdout.strip()
79
+ vm2_wg_ip = vm2.execute("ip -4 addr show wg0 | grep inet | awk '{print $2}' | cut -d/ -f1").stdout.strip()
80
+
81
+ logger.info(f" vm1 WireGuard IP: {vm1_wg_ip}")
82
+ logger.info(f" vm2 WireGuard IP: {vm2_wg_ip}")
83
+
84
+ # 5. Install Redis on both VMs
85
+ logger.info("[4/8] Installing Redis on VMs...")
86
+
87
+ # Install Redis on vm1
88
+ logger.info(" Installing Redis on vm1...")
89
+ vm1.execute("apt-get update -qq && apt-get install -y -qq redis-server", timeout=120)
90
+
91
+ # Install Redis on vm2
92
+ logger.info(" Installing Redis on vm2...")
93
+ vm2.execute("apt-get update -qq && apt-get install -y -qq redis-server", timeout=120)
94
+
95
+ # 6. Configure and start Redis servers
96
+ logger.info("[5/8] Configuring and starting Redis servers...")
97
+
98
+ # Configure Redis on vm1 to bind to all interfaces
99
+ vm1.execute("sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' /etc/redis/redis.conf")
100
+ vm1.execute("sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis/redis.conf")
101
+ vm1.execute("systemctl restart redis-server")
102
+ logger.info(" Redis started on vm1 (port 6379)")
103
+
104
+ # Configure Redis on vm2 to bind to all interfaces
105
+ vm2.execute("sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' /etc/redis/redis.conf")
106
+ vm2.execute("sed -i 's/^protected-mode yes/protected-mode no/' /etc/redis/redis.conf")
107
+ vm2.execute("systemctl restart redis-server")
108
+ logger.info(" Redis started on vm2 (port 6379)")
109
+
110
+ # Give Redis time to start
111
+ time.sleep(2)
112
+
113
+ # Verify Redis is running locally
114
+ vm1_redis_check = vm1.execute("redis-cli ping")
115
+ vm2_redis_check = vm2.execute("redis-cli ping")
116
+
117
+ if "PONG" in vm1_redis_check.stdout:
118
+ logger.info(" OK: vm1 Redis responding locally")
119
+ else:
120
+ logger.error(f" FAIL: vm1 Redis not responding: {vm1_redis_check.stdout}")
121
+ return
122
+
123
+ if "PONG" in vm2_redis_check.stdout:
124
+ logger.info(" OK: vm2 Redis responding locally")
125
+ else:
126
+ logger.error(f" FAIL: vm2 Redis not responding: {vm2_redis_check.stdout}")
127
+ return
128
+
129
+ # 7. Set keys on each Redis
130
+ logger.info("[6/8] Setting Redis keys...")
131
+
132
+ vm1.execute("redis-cli SET hostname vm1")
133
+ vm1.execute("redis-cli SET message 'Hello from VM1'")
134
+ logger.info(" Set keys on vm1: hostname=vm1, message='Hello from VM1'")
135
+
136
+ vm2.execute("redis-cli SET hostname vm2")
137
+ vm2.execute("redis-cli SET message 'Hello from VM2'")
138
+ logger.info(" Set keys on vm2: hostname=vm2, message='Hello from VM2'")
139
+
140
+ # 8. Test TCP connectivity - connect to remote Redis over WireGuard
141
+ logger.info("[7/8] Testing TCP connectivity (Redis over WireGuard)...")
142
+
143
+ # Test vm1 -> vm2's Redis
144
+ logger.info(f" Testing TCP from vm1 to vm2 Redis ({vm2_wg_ip}:6379)...")
145
+
146
+ vm1_to_vm2_ping = vm1.execute(f"redis-cli -h {vm2_wg_ip} ping")
147
+ vm1_to_vm2_hostname = vm1.execute(f"redis-cli -h {vm2_wg_ip} GET hostname")
148
+ vm1_to_vm2_message = vm1.execute(f"redis-cli -h {vm2_wg_ip} GET message")
149
+
150
+ if "PONG" in vm1_to_vm2_ping.stdout:
151
+ logger.info(" OK: vm1 -> vm2 Redis PING successful")
152
+ else:
153
+ logger.error(f" FAIL: vm1 -> vm2 Redis PING failed: {vm1_to_vm2_ping.stdout} {vm1_to_vm2_ping.stderr}")
154
+
155
+ if "vm2" in vm1_to_vm2_hostname.stdout:
156
+ logger.info(f" OK: vm1 -> vm2 Redis GET hostname = {vm1_to_vm2_hostname.stdout.strip()}")
157
+ else:
158
+ logger.error(f" FAIL: vm1 -> vm2 Redis GET hostname failed: {vm1_to_vm2_hostname.stdout}")
159
+
160
+ if "Hello from VM2" in vm1_to_vm2_message.stdout:
161
+ logger.info(f" OK: vm1 -> vm2 Redis GET message = {vm1_to_vm2_message.stdout.strip()}")
162
+ else:
163
+ logger.error(f" FAIL: vm1 -> vm2 Redis GET message failed: {vm1_to_vm2_message.stdout}")
164
+
165
+ # Test vm2 -> vm1's Redis
166
+ logger.info(f" Testing TCP from vm2 to vm1 Redis ({vm1_wg_ip}:6379)...")
167
+
168
+ vm2_to_vm1_ping = vm2.execute(f"redis-cli -h {vm1_wg_ip} ping")
169
+ vm2_to_vm1_hostname = vm2.execute(f"redis-cli -h {vm1_wg_ip} GET hostname")
170
+ vm2_to_vm1_message = vm2.execute(f"redis-cli -h {vm1_wg_ip} GET message")
171
+
172
+ if "PONG" in vm2_to_vm1_ping.stdout:
173
+ logger.info(" OK: vm2 -> vm1 Redis PING successful")
174
+ else:
175
+ logger.error(f" FAIL: vm2 -> vm1 Redis PING failed: {vm2_to_vm1_ping.stdout} {vm2_to_vm1_ping.stderr}")
176
+
177
+ if "vm1" in vm2_to_vm1_hostname.stdout:
178
+ logger.info(f" OK: vm2 -> vm1 Redis GET hostname = {vm2_to_vm1_hostname.stdout.strip()}")
179
+ else:
180
+ logger.error(f" FAIL: vm2 -> vm1 Redis GET hostname failed: {vm2_to_vm1_hostname.stdout}")
181
+
182
+ if "Hello from VM1" in vm2_to_vm1_message.stdout:
183
+ logger.info(f" OK: vm2 -> vm1 Redis GET message = {vm2_to_vm1_message.stdout.strip()}")
184
+ else:
185
+ logger.error(f" FAIL: vm2 -> vm1 Redis GET message failed: {vm2_to_vm1_message.stdout}")
186
+
187
+ # 9. Test ping connectivity as sanity check
188
+ logger.info("[8/8] Testing ping connectivity...")
189
+
190
+ ping_result = vm1.execute(f"ping -c 3 -W 5 {vm2_wg_ip}")
191
+ if ping_result.exit_code == 0:
192
+ logger.info(" OK: vm1 -> vm2 ping successful!")
193
+ else:
194
+ logger.error(" FAIL: vm1 -> vm2 ping failed!")
195
+
196
+ # Summary
197
+ logger.info("")
198
+ logger.info("=" * 60)
199
+ logger.info("TEST SUMMARY")
200
+ logger.info("=" * 60)
201
+ logger.info(f"Session ID: {session.session_id}")
202
+ logger.info(f"vm1 WireGuard IP: {vm1_wg_ip}")
203
+ logger.info(f"vm2 WireGuard IP: {vm2_wg_ip}")
204
+
205
+ # Final connectivity check
206
+ tcp_ok = (
207
+ "PONG" in vm1_to_vm2_ping.stdout
208
+ and "vm2" in vm1_to_vm2_hostname.stdout
209
+ and "PONG" in vm2_to_vm1_ping.stdout
210
+ and "vm1" in vm2_to_vm1_hostname.stdout
211
+ )
212
+
213
+ if tcp_ok:
214
+ logger.info("RESULT: WireGuard TCP (Redis) connectivity WORKING!")
215
+ else:
216
+ logger.error("RESULT: WireGuard TCP (Redis) connectivity FAILED!")
217
+
218
+ logger.info("=" * 60)
219
+
220
+ except Exception as e:
221
+ logger.error(f"ERROR: {e}")
222
+ import traceback
223
+
224
+ traceback.print_exc()
225
+ raise
226
+
227
+ finally:
228
+ if session:
229
+ logger.info("Closing session...")
230
+ session.close()
231
+ plato.close()
232
+ logger.info("Cleanup complete.")
233
+
234
+
235
+ if __name__ == "__main__":
236
+ main()
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env python3
2
+ """Test SSH via WireGuard proxy gateway.
3
+
4
+ Creates a blank VM, connects it to the WireGuard network, and tests SSH access
5
+ through the proxy gateway.
6
+
7
+ Usage:
8
+ export PLATO_API_KEY=your-key
9
+ export PLATO_PROXY_HOST=gateway.plato.so
10
+ export PLATO_PROXY_PORT=443
11
+ python test_proxy_ssh.py
12
+ """
13
+
14
+ import logging
15
+ import os
16
+ import subprocess
17
+ import sys
18
+ import time
19
+
20
+ from dotenv import load_dotenv
21
+
22
+ from plato.v2 import Env, Plato
23
+ from plato.v2.types import SimConfigCompute
24
+
25
+ load_dotenv()
26
+
27
+ logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
28
+ logger = logging.getLogger(__name__)
29
+
30
+
31
+ def test_ssh_connection(job_id: str, proxy_host: str, proxy_port: int) -> bool:
32
+ """Test SSH connection via proxy gateway."""
33
+ sni = f"{job_id}--22.{proxy_host}"
34
+
35
+ # Use openssl s_client to test TLS connection
36
+ cmd = ["openssl", "s_client", "-connect", f"{proxy_host}:{proxy_port}", "-servername", sni, "-verify_quiet"]
37
+
38
+ logger.info(f"Testing TLS connection to {proxy_host}:{proxy_port} with SNI={sni}")
39
+
40
+ try:
41
+ result = subprocess.run(cmd, input=b"", capture_output=True, timeout=10)
42
+ if b"CONNECTED" in result.stderr or result.returncode == 0:
43
+ logger.info("TLS connection successful!")
44
+ return True
45
+ else:
46
+ logger.error(f"TLS connection failed: {result.stderr.decode()[:200]}")
47
+ return False
48
+ except subprocess.TimeoutExpired:
49
+ logger.error("TLS connection timed out")
50
+ return False
51
+ except Exception as e:
52
+ logger.error(f"TLS connection error: {e}")
53
+ return False
54
+
55
+
56
+ def main():
57
+ # Check environment
58
+ api_key = os.environ.get("PLATO_API_KEY")
59
+ if not api_key:
60
+ logger.error("PLATO_API_KEY not set")
61
+ return 1
62
+
63
+ proxy_host = os.environ.get("PLATO_PROXY_HOST", "gateway.plato.so")
64
+ proxy_port = int(os.environ.get("PLATO_PROXY_PORT", "443"))
65
+
66
+ logger.info("=" * 60)
67
+ logger.info("WIREGUARD PROXY SSH TEST")
68
+ logger.info("=" * 60)
69
+ logger.info(f"Proxy: {proxy_host}:{proxy_port}")
70
+
71
+ plato = Plato()
72
+ session = None
73
+
74
+ try:
75
+ # 1. Create blank VM
76
+ logger.info("[1/4] Creating blank VM...")
77
+ vm_config = SimConfigCompute(cpus=2, memory=2048, disk=10000)
78
+
79
+ session = plato.sessions.create(
80
+ envs=[Env.resource("test-vm", sim_config=vm_config, alias="test-vm")],
81
+ timeout=600,
82
+ )
83
+
84
+ job_id = session.envs[0].job_id
85
+ logger.info(f" Session: {session.session_id}")
86
+ logger.info(f" Job ID: {job_id}")
87
+
88
+ # 2. Connect to WireGuard network
89
+ logger.info("[2/4] Connecting to WireGuard network...")
90
+ result = session.connect_network()
91
+
92
+ success = result.get("success", False)
93
+ subnet = result.get("subnet", "unknown")
94
+
95
+ logger.info(f" Success: {success}")
96
+ logger.info(f" Subnet: {subnet}")
97
+
98
+ if not success:
99
+ logger.error("Failed to connect network!")
100
+ return 1
101
+
102
+ # 3. Get WireGuard IP from VM
103
+ logger.info("[3/4] Getting VM WireGuard IP...")
104
+ vm = session.envs[0]
105
+ wg_ip = vm.execute("ip -4 addr show wg0 | grep inet | awk '{print $2}' | cut -d/ -f1").stdout.strip()
106
+ logger.info(f" VM WireGuard IP: {wg_ip}")
107
+
108
+ # 4. Test SSH via proxy
109
+ logger.info("[4/4] Testing SSH via proxy gateway...")
110
+ ssh_ok = test_ssh_connection(job_id, proxy_host, proxy_port)
111
+
112
+ # Summary
113
+ logger.info("")
114
+ logger.info("=" * 60)
115
+ logger.info("RESULTS")
116
+ logger.info("=" * 60)
117
+ logger.info(f"Job ID: {job_id}")
118
+ logger.info(f"WireGuard IP: {wg_ip}")
119
+ logger.info(f"SSH Test: {'PASS' if ssh_ok else 'FAIL'}")
120
+ logger.info("")
121
+ logger.info("To SSH manually:")
122
+ logger.info(f" export PLATO_PROXY_HOST={proxy_host}")
123
+ logger.info(f" export PLATO_PROXY_PORT={proxy_port}")
124
+ logger.info(f" plato ssh {job_id} --no-verify")
125
+ logger.info("")
126
+ logger.info("Session alive for 600 seconds. Press Ctrl+C to exit early.")
127
+ logger.info("=" * 60)
128
+
129
+ # Keep alive for manual testing
130
+ try:
131
+ time.sleep(600)
132
+ except KeyboardInterrupt:
133
+ logger.info("\nInterrupted")
134
+
135
+ return 0 if ssh_ok else 1
136
+
137
+ except Exception as e:
138
+ logger.error(f"Error: {e}")
139
+ import traceback
140
+
141
+ traceback.print_exc()
142
+ return 1
143
+
144
+ finally:
145
+ if session:
146
+ logger.info("Closing session...")
147
+ session.close()
148
+ plato.close()
149
+
150
+
151
+ if __name__ == "__main__":
152
+ sys.exit(main())
@@ -1,4 +1,4 @@
1
- """Plato API SDK - v0.41.4"""
1
+ """Plato API SDK - v0.37.2"""
2
2
 
3
3
  from . import api, errors, models
4
4
  from .client import AsyncClient, Client
@@ -1,6 +1,6 @@
1
1
  """API version module."""
2
2
 
3
- from . import agents, artifacts, chronos, chronos_packages, cluster, jobs, pypi, releases, sessions, user
3
+ from . import agents, artifacts, chronos, chronos_packages, cluster, jobs, networks, pypi, releases, sessions, user
4
4
 
5
5
  __all__ = [
6
6
  "agents",
@@ -9,6 +9,7 @@ __all__ = [
9
9
  "chronos_packages",
10
10
  "cluster",
11
11
  "jobs",
12
+ "networks",
12
13
  "pypi",
13
14
  "releases",
14
15
  "sessions",
@@ -0,0 +1,23 @@
1
+ """API endpoints."""
2
+
3
+ from . import (
4
+ add_member,
5
+ create_network,
6
+ delete_network,
7
+ get_network,
8
+ list_members,
9
+ list_networks,
10
+ remove_member,
11
+ update_member,
12
+ )
13
+
14
+ __all__ = [
15
+ "list_networks",
16
+ "create_network",
17
+ "get_network",
18
+ "delete_network",
19
+ "list_members",
20
+ "add_member",
21
+ "update_member",
22
+ "remove_member",
23
+ ]
@@ -0,0 +1,75 @@
1
+ """Add Member"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ import httpx
8
+
9
+ from plato._generated.errors import raise_for_status
10
+ from plato._generated.models import AddMemberRequest, NetworkMemberResponse
11
+
12
+
13
+ def _build_request_args(
14
+ session_id: str,
15
+ body: AddMemberRequest,
16
+ authorization: str | None = None,
17
+ x_api_key: str | None = None,
18
+ ) -> dict[str, Any]:
19
+ """Build request arguments."""
20
+ url = f"/api/v2/networks/{session_id}/members"
21
+
22
+ headers: dict[str, str] = {}
23
+ if authorization is not None:
24
+ headers["authorization"] = authorization
25
+ if x_api_key is not None:
26
+ headers["X-API-Key"] = x_api_key
27
+
28
+ return {
29
+ "method": "POST",
30
+ "url": url,
31
+ "json": body.model_dump(mode="json", exclude_none=True),
32
+ "headers": headers,
33
+ }
34
+
35
+
36
+ def sync(
37
+ client: httpx.Client,
38
+ session_id: str,
39
+ body: AddMemberRequest,
40
+ authorization: str | None = None,
41
+ x_api_key: str | None = None,
42
+ ) -> NetworkMemberResponse:
43
+ """Add a member (job/VM) to a network."""
44
+
45
+ request_args = _build_request_args(
46
+ session_id=session_id,
47
+ body=body,
48
+ authorization=authorization,
49
+ x_api_key=x_api_key,
50
+ )
51
+
52
+ response = client.request(**request_args)
53
+ raise_for_status(response)
54
+ return NetworkMemberResponse.model_validate(response.json())
55
+
56
+
57
+ async def asyncio(
58
+ client: httpx.AsyncClient,
59
+ session_id: str,
60
+ body: AddMemberRequest,
61
+ authorization: str | None = None,
62
+ x_api_key: str | None = None,
63
+ ) -> NetworkMemberResponse:
64
+ """Add a member (job/VM) to a network."""
65
+
66
+ request_args = _build_request_args(
67
+ session_id=session_id,
68
+ body=body,
69
+ authorization=authorization,
70
+ x_api_key=x_api_key,
71
+ )
72
+
73
+ response = await client.request(**request_args)
74
+ raise_for_status(response)
75
+ return NetworkMemberResponse.model_validate(response.json())
@@ -0,0 +1,70 @@
1
+ """Create Network"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ import httpx
8
+
9
+ from plato._generated.errors import raise_for_status
10
+ from plato._generated.models import CreateNetworkRequest, CreateNetworkResponse
11
+
12
+
13
+ def _build_request_args(
14
+ body: CreateNetworkRequest,
15
+ authorization: str | None = None,
16
+ x_api_key: str | None = None,
17
+ ) -> dict[str, Any]:
18
+ """Build request arguments."""
19
+ url = "/api/v2/networks/"
20
+
21
+ headers: dict[str, str] = {}
22
+ if authorization is not None:
23
+ headers["authorization"] = authorization
24
+ if x_api_key is not None:
25
+ headers["X-API-Key"] = x_api_key
26
+
27
+ return {
28
+ "method": "POST",
29
+ "url": url,
30
+ "json": body.model_dump(mode="json", exclude_none=True),
31
+ "headers": headers,
32
+ }
33
+
34
+
35
+ def sync(
36
+ client: httpx.Client,
37
+ body: CreateNetworkRequest,
38
+ authorization: str | None = None,
39
+ x_api_key: str | None = None,
40
+ ) -> CreateNetworkResponse:
41
+ """Create a new isolated network for a session."""
42
+
43
+ request_args = _build_request_args(
44
+ body=body,
45
+ authorization=authorization,
46
+ x_api_key=x_api_key,
47
+ )
48
+
49
+ response = client.request(**request_args)
50
+ raise_for_status(response)
51
+ return CreateNetworkResponse.model_validate(response.json())
52
+
53
+
54
+ async def asyncio(
55
+ client: httpx.AsyncClient,
56
+ body: CreateNetworkRequest,
57
+ authorization: str | None = None,
58
+ x_api_key: str | None = None,
59
+ ) -> CreateNetworkResponse:
60
+ """Create a new isolated network for a session."""
61
+
62
+ request_args = _build_request_args(
63
+ body=body,
64
+ authorization=authorization,
65
+ x_api_key=x_api_key,
66
+ )
67
+
68
+ response = await client.request(**request_args)
69
+ raise_for_status(response)
70
+ return CreateNetworkResponse.model_validate(response.json())
@@ -0,0 +1,68 @@
1
+ """Delete Network"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ import httpx
8
+
9
+ from plato._generated.errors import raise_for_status
10
+
11
+
12
+ def _build_request_args(
13
+ session_id: str,
14
+ authorization: str | None = None,
15
+ x_api_key: str | None = None,
16
+ ) -> dict[str, Any]:
17
+ """Build request arguments."""
18
+ url = f"/api/v2/networks/{session_id}"
19
+
20
+ headers: dict[str, str] = {}
21
+ if authorization is not None:
22
+ headers["authorization"] = authorization
23
+ if x_api_key is not None:
24
+ headers["X-API-Key"] = x_api_key
25
+
26
+ return {
27
+ "method": "DELETE",
28
+ "url": url,
29
+ "headers": headers,
30
+ }
31
+
32
+
33
+ def sync(
34
+ client: httpx.Client,
35
+ session_id: str,
36
+ authorization: str | None = None,
37
+ x_api_key: str | None = None,
38
+ ) -> dict[str, Any]:
39
+ """Delete/terminate a network."""
40
+
41
+ request_args = _build_request_args(
42
+ session_id=session_id,
43
+ authorization=authorization,
44
+ x_api_key=x_api_key,
45
+ )
46
+
47
+ response = client.request(**request_args)
48
+ raise_for_status(response)
49
+ return response.json()
50
+
51
+
52
+ async def asyncio(
53
+ client: httpx.AsyncClient,
54
+ session_id: str,
55
+ authorization: str | None = None,
56
+ x_api_key: str | None = None,
57
+ ) -> dict[str, Any]:
58
+ """Delete/terminate a network."""
59
+
60
+ request_args = _build_request_args(
61
+ session_id=session_id,
62
+ authorization=authorization,
63
+ x_api_key=x_api_key,
64
+ )
65
+
66
+ response = await client.request(**request_args)
67
+ raise_for_status(response)
68
+ return response.json()