plato-sdk-v2 2.8.6__tar.gz → 2.8.8__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 (615) hide show
  1. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/PKG-INFO +1 -1
  2. plato_sdk_v2-2.8.8/VERSION +1 -0
  3. plato_sdk_v2-2.8.8/examples/preview_local_dev.py +250 -0
  4. plato_sdk_v2-2.8.8/examples/snapshot_docker_image.py +115 -0
  5. plato_sdk_v2-2.8.8/examples/snapshot_local_dev.py +206 -0
  6. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/models/__init__.py +20 -8
  7. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/chronos.py +76 -13
  8. plato_sdk_v2-2.8.8/plato/cli/compose.py +1379 -0
  9. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/main.py +4 -0
  10. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/pm.py +2 -1
  11. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/sandbox.py +62 -14
  12. plato_sdk_v2-2.8.8/plato/cli/session.py +492 -0
  13. plato_sdk_v2-2.8.8/plato/v2/async_/environment.py +768 -0
  14. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/async_/session.py +45 -0
  15. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/environment.py +6 -0
  16. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/sandbox.py +235 -37
  17. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/session.py +9 -0
  18. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/types.py +46 -15
  19. plato_sdk_v2-2.8.6/VERSION +0 -1
  20. plato_sdk_v2-2.8.6/plato/v2/async_/environment.py +0 -196
  21. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/.claude/agents/sim-creator.md +0 -0
  22. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/.gitignore +0 -0
  23. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/BUILDING_SIMS.md +0 -0
  24. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/README.md +0 -0
  25. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/ci/CLAUDE.md +0 -0
  26. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/ci/deploy.sh +0 -0
  27. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/ci/lint.sh +0 -0
  28. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/ci/setup.sh +0 -0
  29. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/ci/version-bump.sh +0 -0
  30. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/AGENT_SPEC.md +0 -0
  31. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/CLI.md +0 -0
  32. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/GENERATING_SIM_SDKS.md +0 -0
  33. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/SIMULATOR_LIFECYCLE.md +0 -0
  34. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/SIM_CREATOR.md +0 -0
  35. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/cli/agent.md +0 -0
  36. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/cli/flows.md +0 -0
  37. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/cli/pm.md +0 -0
  38. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/cli/sandbox.md +0 -0
  39. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/cli/sims.md +0 -0
  40. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/cli/world.md +0 -0
  41. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/sim-creation-pipeline.md +0 -0
  42. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skill-restructure-plan.md +0 -0
  43. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
  44. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-config/SKILL.md +0 -0
  45. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-creator/SKILL.md +0 -0
  46. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-debugger/SKILL.md +0 -0
  47. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-audit/SKILL.md +0 -0
  48. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-clear/SKILL.md +0 -0
  49. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
  50. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-run/SKILL.md +0 -0
  51. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-research/SKILL.md +0 -0
  52. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-review/SKILL.md +0 -0
  53. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
  54. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
  55. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
  56. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
  57. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-snapshot/SKILL.md +0 -0
  58. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-submit/SKILL.md +0 -0
  59. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/sim-validate/SKILL.md +0 -0
  60. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/skills/trajectory-analysis/SKILL.md +0 -0
  61. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/testcommit +0 -0
  62. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/docs/unit.sh +0 -0
  63. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/examples/test_session_isolation.py +0 -0
  64. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/examples/test_session_network.py +0 -0
  65. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/__init__.py +0 -0
  66. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/__init__.py +0 -0
  67. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/__init__.py +0 -0
  68. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/__init__.py +0 -0
  69. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
  70. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
  71. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
  72. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
  73. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
  74. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/__init__.py +0 -0
  75. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
  76. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
  77. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
  78. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
  79. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
  80. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
  81. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
  82. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/__init__.py +0 -0
  83. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/backup.py +0 -0
  84. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/cleanup.py +0 -0
  85. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/close.py +0 -0
  86. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/close_async.py +0 -0
  87. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/create.py +0 -0
  88. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/create_batch.py +0 -0
  89. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/create_simulator.py +0 -0
  90. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
  91. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
  92. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
  93. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_active_session.py +0 -0
  94. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
  95. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
  96. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_flows.py +0 -0
  97. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
  98. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_job_info.py +0 -0
  99. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_job_status.py +0 -0
  100. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
  101. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
  102. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_public_url.py +0 -0
  103. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
  104. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_simulators.py +0 -0
  105. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_state.py +0 -0
  106. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
  107. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
  108. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
  109. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/reset.py +0 -0
  110. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/score.py +0 -0
  111. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
  112. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/update_simulator.py +0 -0
  113. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/__init__.py +0 -0
  114. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
  115. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
  116. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
  117. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
  118. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
  119. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
  120. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
  121. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
  122. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/__init__.py +0 -0
  123. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
  124. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
  125. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
  126. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
  127. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
  128. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
  129. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
  130. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
  131. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
  132. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
  133. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
  134. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
  135. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
  136. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
  137. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/__init__.py +0 -0
  138. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
  139. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
  140. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
  141. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
  142. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
  143. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/__init__.py +0 -0
  144. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
  145. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
  146. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
  147. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
  148. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
  149. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
  150. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
  151. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
  152. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
  153. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
  154. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
  155. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
  156. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
  157. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/__init__.py +0 -0
  158. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
  159. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
  160. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_vms.py +0 -0
  161. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_workers.py +0 -0
  162. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
  163. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
  164. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
  165. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
  166. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
  167. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
  168. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
  169. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
  170. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
  171. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
  172. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
  173. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
  174. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/__init__.py +0 -0
  175. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
  176. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/archive_session.py +0 -0
  177. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
  178. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
  179. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
  180. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
  181. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
  182. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
  183. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
  184. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
  185. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
  186. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
  187. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
  188. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
  189. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
  190. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
  191. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
  192. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_session.py +0 -0
  193. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
  194. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_sessions.py +0 -0
  195. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
  196. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
  197. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
  198. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
  199. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
  200. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/set_session_output.py +0 -0
  201. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/update_session_public.py +0 -0
  202. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
  203. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/upload_review_screenshot.py +0 -0
  204. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/__init__.py +0 -0
  205. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
  206. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
  207. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
  208. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
  209. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
  210. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
  211. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
  212. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
  213. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
  214. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
  215. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
  216. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
  217. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
  218. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
  219. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
  220. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
  221. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
  222. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
  223. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
  224. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/register.py +0 -0
  225. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
  226. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
  227. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
  228. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/__init__.py +0 -0
  229. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
  230. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
  231. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
  232. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
  233. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/assign_testcases_to_work_order_item.py +0 -0
  234. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
  235. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
  236. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
  237. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
  238. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
  239. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
  240. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
  241. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
  242. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
  243. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
  244. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
  245. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
  246. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
  247. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
  248. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
  249. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
  250. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
  251. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
  252. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
  253. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
  254. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
  255. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
  256. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
  257. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
  258. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
  259. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
  260. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/__init__.py +0 -0
  261. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/__init__.py +0 -0
  262. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/__init__.py +0 -0
  263. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/clear_all.py +0 -0
  264. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/clear_single_cache.py +0 -0
  265. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/delete_key.py +0 -0
  266. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/get_stats.py +0 -0
  267. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/list_cache_names.py +0 -0
  268. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/__init__.py +0 -0
  269. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
  270. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
  271. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
  272. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/import_agent.py +0 -0
  273. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
  274. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
  275. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
  276. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
  277. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
  278. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos/__init__.py +0 -0
  279. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
  280. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
  281. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
  282. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
  283. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
  284. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
  285. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
  286. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/cluster/__init__.py +0 -0
  287. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
  288. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/__init__.py +0 -0
  289. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
  290. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/close.py +0 -0
  291. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
  292. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
  293. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
  294. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/execute.py +0 -0
  295. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
  296. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
  297. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/heartbeat.py +0 -0
  298. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
  299. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/make.py +0 -0
  300. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/public_url.py +0 -0
  301. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/rdp_url.py +0 -0
  302. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/reset.py +0 -0
  303. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/set_date.py +0 -0
  304. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
  305. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
  306. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
  307. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/state.py +0 -0
  308. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
  309. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/__init__.py +0 -0
  310. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/add_member.py +0 -0
  311. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/create_network.py +0 -0
  312. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/delete_network.py +0 -0
  313. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/get_network.py +0 -0
  314. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/list_members.py +0 -0
  315. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/list_networks.py +0 -0
  316. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/remove_member.py +0 -0
  317. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/update_member.py +0 -0
  318. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/__init__.py +0 -0
  319. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/download_package.py +0 -0
  320. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
  321. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/package_index.py +0 -0
  322. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
  323. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
  324. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/__init__.py +0 -0
  325. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/create.py +0 -0
  326. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/deploy.py +0 -0
  327. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/get.py +0 -0
  328. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
  329. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/handle_import.py +0 -0
  330. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/list_releases.py +0 -0
  331. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
  332. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/prep_release_from_work_order.py +0 -0
  333. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/update.py +0 -0
  334. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/__init__.py +0 -0
  335. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/add_job.py +0 -0
  336. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/add_ssh_key.py +0 -0
  337. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
  338. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/close.py +0 -0
  339. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/connect_network.py +0 -0
  340. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
  341. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
  342. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/execute.py +0 -0
  343. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
  344. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
  345. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
  346. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_rdp_url.py +0 -0
  347. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
  348. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
  349. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
  350. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
  351. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
  352. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
  353. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
  354. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
  355. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
  356. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
  357. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/make.py +0 -0
  358. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/remove_job.py +0 -0
  359. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/reset.py +0 -0
  360. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/set_date.py +0 -0
  361. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
  362. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
  363. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
  364. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/state.py +0 -0
  365. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
  366. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
  367. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/user/__init__.py +0 -0
  368. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/user/get_current_user.py +0 -0
  369. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/__init__.py +0 -0
  370. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/archive_work_order.py +0 -0
  371. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/archive_work_order_item.py +0 -0
  372. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/create_work_order.py +0 -0
  373. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/create_work_order_item.py +0 -0
  374. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/get_work_order.py +0 -0
  375. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/list_work_orders.py +0 -0
  376. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/version/__init__.py +0 -0
  377. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/api/version/check.py +0 -0
  378. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/client.py +0 -0
  379. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/errors.py +0 -0
  380. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_generated/py.typed +0 -0
  381. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/__init__.py +0 -0
  382. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/cli.py +0 -0
  383. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/instruction.py +0 -0
  384. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/parser.py +0 -0
  385. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/python.py +0 -0
  386. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
  387. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
  388. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
  389. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
  390. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
  391. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
  392. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
  393. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
  394. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
  395. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/__init__.py +0 -0
  396. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/artifacts.py +0 -0
  397. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/base.py +0 -0
  398. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/build.py +0 -0
  399. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/config.py +0 -0
  400. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/otel.py +0 -0
  401. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/runner.py +0 -0
  402. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/agents/trajectory.py +0 -0
  403. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/__init__.py +0 -0
  404. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/__init__.py +0 -0
  405. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/__init__.py +0 -0
  406. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py +0 -0
  407. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py +0 -0
  408. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py +0 -0
  409. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py +0 -0
  410. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py +0 -0
  411. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/__init__.py +0 -0
  412. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/create_agent.py +0 -0
  413. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/delete_agent.py +0 -0
  414. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/get_agent.py +0 -0
  415. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/get_agent_schema.py +0 -0
  416. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/get_agent_versions.py +0 -0
  417. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/list_agents.py +0 -0
  418. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/lookup_agent.py +0 -0
  419. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/__init__.py +0 -0
  420. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
  421. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
  422. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
  423. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/checkpoints/__init__.py +0 -0
  424. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/checkpoints/list_checkpoints.py +0 -0
  425. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/checkpoints/preview_checkpoint.py +0 -0
  426. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/default/__init__.py +0 -0
  427. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/default/health.py +0 -0
  428. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/events/__init__.py +0 -0
  429. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/events/get_session_event.py +0 -0
  430. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/events/list_session_events.py +0 -0
  431. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/jobs/__init__.py +0 -0
  432. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/jobs/launch_job.py +0 -0
  433. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/otel/__init__.py +0 -0
  434. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py +0 -0
  435. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py +0 -0
  436. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/__init__.py +0 -0
  437. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
  438. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
  439. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
  440. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
  441. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
  442. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
  443. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/__init__.py +0 -0
  444. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/create_runtime.py +0 -0
  445. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
  446. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/get_runtime.py +0 -0
  447. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/get_runtime_logs.py +0 -0
  448. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
  449. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/test_runtime.py +0 -0
  450. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/__init__.py +0 -0
  451. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/create_secret.py +0 -0
  452. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/delete_secret.py +0 -0
  453. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/get_secret.py +0 -0
  454. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/list_secrets.py +0 -0
  455. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/update_secret.py +0 -0
  456. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/__init__.py +0 -0
  457. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/close_session.py +0 -0
  458. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/complete_session.py +0 -0
  459. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/create_session.py +0 -0
  460. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session.py +0 -0
  461. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_bash_logs_download.py +0 -0
  462. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_envs.py +0 -0
  463. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_live_logs.py +0 -0
  464. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_logs.py +0 -0
  465. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
  466. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_status.py +0 -0
  467. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/list_session_creators.py +0 -0
  468. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/list_sessions.py +0 -0
  469. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/list_tags.py +0 -0
  470. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/update_session_tags.py +0 -0
  471. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/status/__init__.py +0 -0
  472. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
  473. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
  474. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/__init__.py +0 -0
  475. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/create_template.py +0 -0
  476. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/delete_template.py +0 -0
  477. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/get_template.py +0 -0
  478. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/list_templates.py +0 -0
  479. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/update_template.py +0 -0
  480. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/trajectories/__init__.py +0 -0
  481. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
  482. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
  483. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/__init__.py +0 -0
  484. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/create_world.py +0 -0
  485. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/delete_world.py +0 -0
  486. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/get_world.py +0 -0
  487. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/list_worlds.py +0 -0
  488. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/client.py +0 -0
  489. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/errors.py +0 -0
  490. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/models/__init__.py +0 -0
  491. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/chronos/py.typed +0 -0
  492. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/__init__.py +0 -0
  493. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/agent.py +0 -0
  494. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/audit_ui.py +0 -0
  495. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/proxy.py +0 -0
  496. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/utils.py +0 -0
  497. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/verify.py +0 -0
  498. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/cli/world.py +0 -0
  499. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/py.typed +0 -0
  500. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/sims/README.md +0 -0
  501. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/sims/__init__.py +0 -0
  502. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/sims/agent_helpers.py +0 -0
  503. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/sims/cli.py +0 -0
  504. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/sims/generate_clients.py +0 -0
  505. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/sims/registry.py +0 -0
  506. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/__init__.py +0 -0
  507. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/audit_ui.py +0 -0
  508. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/__init__.py +0 -0
  509. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/agent.py +0 -0
  510. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/chronos.py +0 -0
  511. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/main.py +0 -0
  512. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/pm.py +0 -0
  513. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/proxy.py +0 -0
  514. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/sandbox.py +0 -0
  515. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/ssh.py +0 -0
  516. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/templates/world-runner.Dockerfile +0 -0
  517. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/utils.py +0 -0
  518. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/verify.py +0 -0
  519. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli/world.py +0 -0
  520. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/cli.py +0 -0
  521. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/config.py +0 -0
  522. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/examples/doordash_tasks.py +0 -0
  523. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/examples/loadtest.py +0 -0
  524. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_env.py +0 -0
  525. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_env_custom_browser.py +0 -0
  526. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_env_sync.py +0 -0
  527. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_reuse_env.py +0 -0
  528. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_run.py +0 -0
  529. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/exceptions.py +0 -0
  530. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/README.md +0 -0
  531. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
  532. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/background.js +0 -0
  533. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
  534. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/content.js +0 -0
  535. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
  536. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
  537. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
  538. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/options.html +0 -0
  539. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/options.js +0 -0
  540. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
  541. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/package.json +0 -0
  542. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
  543. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
  544. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
  545. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
  546. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
  547. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
  548. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
  549. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
  550. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
  551. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
  552. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
  553. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
  554. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
  555. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
  556. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
  557. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
  558. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
  559. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/flow_executor.py +0 -0
  560. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/models/__init__.py +0 -0
  561. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/models/build_models.py +0 -0
  562. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/models/env.py +0 -0
  563. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/models/flow.py +0 -0
  564. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/models/sandbox.py +0 -0
  565. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/models/task.py +0 -0
  566. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/sandbox_sdk.py +0 -0
  567. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/sdk.py +0 -0
  568. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/sync_env.py +0 -0
  569. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/sync_flow_executor.py +0 -0
  570. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/sync_sdk.py +0 -0
  571. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v1/utils/proxytunnel.py +0 -0
  572. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/__init__.py +0 -0
  573. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/async_/__init__.py +0 -0
  574. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/async_/artifact.py +0 -0
  575. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/async_/chronos.py +0 -0
  576. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/async_/client.py +0 -0
  577. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/async_/flow_executor.py +0 -0
  578. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/models.py +0 -0
  579. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/__init__.py +0 -0
  580. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/artifact.py +0 -0
  581. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/chronos.py +0 -0
  582. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/client.py +0 -0
  583. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/sync/flow_executor.py +0 -0
  584. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/utils/__init__.py +0 -0
  585. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/utils/db_cleanup.py +0 -0
  586. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/utils/gateway_tunnel.py +0 -0
  587. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/utils/models.py +0 -0
  588. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/v2/utils/proxy_tunnel.py +0 -0
  589. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/worlds/README.md +0 -0
  590. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/worlds/__init__.py +0 -0
  591. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/worlds/base.py +0 -0
  592. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/worlds/build_hook.py +0 -0
  593. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/worlds/config.py +0 -0
  594. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/plato/worlds/runner.py +0 -0
  595. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/pyproject.toml +0 -0
  596. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/scripts/get_all_artifact_targets.py +0 -0
  597. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/__init__.py +0 -0
  598. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/integration/__init__.py +0 -0
  599. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/integration/conftest.py +0 -0
  600. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/integration/test_browser_agent.py +0 -0
  601. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/integration/test_chronos_callback.py +0 -0
  602. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/integration/test_cleanup_snapshot.py +0 -0
  603. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/integration/test_code_world.py +0 -0
  604. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/integration/test_harbor_agent_runner.py +0 -0
  605. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/sims/__init__.py +0 -0
  606. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/sims/conftest.py +0 -0
  607. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/sims/test_agent_helpers.py +0 -0
  608. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/test_heartbeat_keepalive.py +0 -0
  609. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/test_session_serialization.py +0 -0
  610. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/test_set_date.py +0 -0
  611. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/test_v2_imports.py +0 -0
  612. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/test_v2_multisim_integration.py +0 -0
  613. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/test_v2_session.py +0 -0
  614. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/tests/test_version.py +0 -0
  615. {plato_sdk_v2-2.8.6 → plato_sdk_v2-2.8.8}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plato-sdk-v2
3
- Version: 2.8.6
3
+ Version: 2.8.8
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.8.8
@@ -0,0 +1,250 @@
1
+ #!/usr/bin/env python3
2
+ """Start a preview local development environment.
3
+
4
+ This example:
5
+ 1. Starts a blank VM with sufficient resources
6
+ 2. Clones the plato repo via SSH with a deploy key
7
+ 3. Checks out the preview-deployments branch
8
+ 4. Starts docker-compose with the preview config
9
+ 5. Waits for user input before closing
10
+
11
+ Usage:
12
+ export PLATO_API_KEY=your-key
13
+ python preview_local_dev.py
14
+ """
15
+
16
+ import logging
17
+ import os
18
+ import sys
19
+ import time
20
+
21
+ from dotenv import load_dotenv
22
+
23
+ from plato.v2 import Env, Plato
24
+ from plato.v2.types import SimConfigCompute
25
+
26
+ load_dotenv()
27
+
28
+ logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
29
+ logger = logging.getLogger(__name__)
30
+
31
+ # GitHub repo to clone
32
+ GITHUB_REPO = "git@github.com:useplato/plato.git"
33
+ GITHUB_BRANCH = "preview-deployments"
34
+
35
+ # SSH deploy key for cloning useplato/plato (ed25519)
36
+ SSH_PRIVATE_KEY = """-----BEGIN OPENSSH PRIVATE KEY-----
37
+ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
38
+ QyNTUxOQAAACCzSn8opb8nWXEZ8yEv3WQG8P+vVbZGwgEDjhbmSSqIsgAAAJhF9JNKRfST
39
+ SgAAAAtzc2gtZWQyNTUxOQAAACCzSn8opb8nWXEZ8yEv3WQG8P+vVbZGwgEDjhbmSSqIsg
40
+ AAAEC5AlVUuWLCtviqAI8iI+8A4LTeDiNgjL6zlGk6NJp16bNKfyilvydZcRnzIS/dZAbw
41
+ /69VtkbCAQOOFuZJKoiyAAAAD3BsYXRvLXZtLWRlcGxveQECAwQFBg==
42
+ -----END OPENSSH PRIVATE KEY-----"""
43
+
44
+
45
+ def execute_and_log(session, command: str, description: str, timeout: int = 60) -> bool:
46
+ """Execute a command and log the result. Returns True on success."""
47
+ logger.info(f"{description}...")
48
+ result = session.execute(command, timeout=timeout)
49
+ for job_id, res in result.results.items():
50
+ if res.exit_code != 0:
51
+ logger.error(f" Failed (exit {res.exit_code}): {res.stderr[:500] if res.stderr else 'no stderr'}")
52
+ return False
53
+ if res.stdout and len(res.stdout.strip()) > 0:
54
+ # Show first few lines of output
55
+ lines = res.stdout.strip().split("\n")
56
+ if len(lines) <= 5:
57
+ for line in lines:
58
+ logger.info(f" {line}")
59
+ else:
60
+ for line in lines[:3]:
61
+ logger.info(f" {line}")
62
+ logger.info(f" ... ({len(lines) - 3} more lines)")
63
+ return True
64
+
65
+
66
+ def main():
67
+ api_key = os.environ.get("PLATO_API_KEY")
68
+ if not api_key:
69
+ logger.error("PLATO_API_KEY not set")
70
+ return 1
71
+
72
+ logger.info("=" * 70)
73
+ logger.info("PREVIEW LOCAL DEV ENVIRONMENT")
74
+ logger.info("=" * 70)
75
+ logger.info(f"Repo: {GITHUB_REPO}")
76
+ logger.info(f"Branch: {GITHUB_BRANCH}")
77
+ logger.info("")
78
+
79
+ plato = Plato()
80
+ session = None
81
+
82
+ try:
83
+ # Create a blank VM with enough resources for docker-compose
84
+ logger.info("Creating session with blank VM...")
85
+ start_time = time.time()
86
+
87
+ session = plato.sessions.create(
88
+ envs=[
89
+ Env.resource(
90
+ simulator="preview-dev",
91
+ sim_config=SimConfigCompute(
92
+ cpus=4,
93
+ memory=8192, # 8GB RAM for docker
94
+ disk=20480, # 20GB disk for docker images
95
+ ),
96
+ alias="dev",
97
+ )
98
+ ],
99
+ timeout=600,
100
+ connect_network=True,
101
+ )
102
+
103
+ elapsed = time.time() - start_time
104
+ logger.info(f"Session created in {elapsed:.1f}s: {session.session_id}")
105
+
106
+ env = session.envs[0]
107
+ logger.info(f"Environment: {env.job_id}")
108
+ logger.info(f"Public URL: {env.public_url}")
109
+ logger.info("")
110
+
111
+ # Start heartbeat to keep session alive
112
+ session.start_heartbeat()
113
+
114
+ # Setup Docker overlay (faster than vfs)
115
+ logger.info("Setting up Docker overlay storage...")
116
+ session.setup_sandbox(timeout=120)
117
+ logger.info(" Docker overlay setup complete")
118
+
119
+ # Setup SSH key for git clone
120
+ if not execute_and_log(session, "mkdir -p /root/.ssh && chmod 700 /root/.ssh", "Creating SSH directory"):
121
+ return 1
122
+
123
+ # Write the SSH private key
124
+ escaped_key = SSH_PRIVATE_KEY.replace("'", "'\\''")
125
+ if not execute_and_log(
126
+ session,
127
+ f"echo '{escaped_key}' > /root/.ssh/plato_deploy && chmod 600 /root/.ssh/plato_deploy",
128
+ "Writing SSH deploy key",
129
+ ):
130
+ return 1
131
+
132
+ # Add GitHub to known hosts
133
+ if not execute_and_log(
134
+ session,
135
+ "ssh-keyscan -t ed25519 github.com >> /root/.ssh/known_hosts 2>/dev/null",
136
+ "Adding GitHub to known hosts",
137
+ ):
138
+ return 1
139
+
140
+ # Clone the repo with deploy key
141
+ logger.info(f"Cloning {GITHUB_REPO}...")
142
+ clone_cmd = f'GIT_SSH_COMMAND="ssh -i /root/.ssh/plato_deploy -o StrictHostKeyChecking=no" git clone --depth 1 -b {GITHUB_BRANCH} {GITHUB_REPO} /root/plato'
143
+ clone_result = session.execute(clone_cmd, timeout=300)
144
+ for job_id, res in clone_result.results.items():
145
+ if res.exit_code != 0:
146
+ logger.error(f" git clone failed: {res.stderr}")
147
+ return 1
148
+ logger.info(" git clone completed successfully")
149
+
150
+ # Configure git to use deploy key for future operations
151
+ if not execute_and_log(
152
+ session,
153
+ 'cd /root/plato && git config core.sshCommand "ssh -i /root/.ssh/plato_deploy -o StrictHostKeyChecking=no"',
154
+ "Configuring git SSH",
155
+ ):
156
+ return 1
157
+
158
+ # Start docker-compose with preview config
159
+ logger.info("Starting docker-compose (this may take a few minutes for first build)...")
160
+ compose_result = session.execute(
161
+ "cd /root/plato/local-dev && docker compose -f docker-compose.preview.yml up -d --build",
162
+ timeout=900, # 15 minutes for first build
163
+ )
164
+ for job_id, res in compose_result.results.items():
165
+ if res.exit_code != 0:
166
+ logger.warning(f" docker-compose may have issues: {res.stderr[:500] if res.stderr else ''}")
167
+ # Don't fail - might still be starting
168
+ else:
169
+ logger.info(" docker-compose started")
170
+
171
+ # Wait a bit for services to initialize
172
+ logger.info("Waiting for services to initialize (60s)...")
173
+ session.execute("sleep 60", timeout=120)
174
+
175
+ # Check running containers
176
+ logger.info("Checking running containers...")
177
+ execute_and_log(session, "docker ps --format 'table {{.Names}}\t{{.Status}}'", "Container status")
178
+
179
+ # Check if nginx is healthy
180
+ logger.info("Checking nginx health...")
181
+ health_result = session.execute("curl -sf http://localhost:8080/health || echo 'not ready'", timeout=30)
182
+ for job_id, res in health_result.results.items():
183
+ if "not ready" in (res.stdout or ""):
184
+ logger.warning(" Nginx not ready yet - services may still be starting")
185
+ else:
186
+ logger.info(" Nginx is healthy!")
187
+
188
+ # Print access info
189
+ logger.info("")
190
+ logger.info("=" * 70)
191
+ logger.info("PREVIEW ENVIRONMENT READY")
192
+ logger.info("=" * 70)
193
+ logger.info(f"Session ID: {session.session_id}")
194
+ logger.info(f"Job ID: {env.job_id}")
195
+ logger.info("")
196
+ logger.info("Access URLs:")
197
+ logger.info(f" Public URL: {env.public_url}")
198
+ logger.info(f" Connect URL: https://{env.job_id}.connect.plato.so")
199
+ logger.info(f" API (via connect): https://{env.job_id}--8080.connect.plato.so")
200
+ logger.info("")
201
+ logger.info("SSH access (if network connected):")
202
+ logger.info(" SSH to VM: plato sandbox ssh (from directory with .plato/state.json)")
203
+ logger.info("")
204
+ logger.info("Docker compose logs:")
205
+ logger.info(" docker compose -f docker-compose.preview.yml logs -f")
206
+ logger.info("")
207
+ logger.info("=" * 70)
208
+ logger.info("Press Enter to stop the session and clean up...")
209
+ logger.info("=" * 70)
210
+
211
+ # Wait for user input
212
+ try:
213
+ input()
214
+ except EOFError:
215
+ # Running non-interactively, wait forever
216
+ logger.info("Running non-interactively. Press Ctrl+C to stop.")
217
+ try:
218
+ while True:
219
+ time.sleep(60)
220
+ except KeyboardInterrupt:
221
+ pass
222
+
223
+ logger.info("")
224
+ logger.info("Shutting down...")
225
+ return 0
226
+
227
+ except KeyboardInterrupt:
228
+ logger.info("\nInterrupted by user")
229
+ return 0
230
+
231
+ except Exception as e:
232
+ logger.error(f"Error: {e}")
233
+ import traceback
234
+
235
+ traceback.print_exc()
236
+ return 1
237
+
238
+ finally:
239
+ if session:
240
+ logger.info("Closing session...")
241
+ try:
242
+ session.close()
243
+ except Exception as e:
244
+ logger.warning(f"Error closing session: {e}")
245
+ plato.close()
246
+ logger.info("Done.")
247
+
248
+
249
+ if __name__ == "__main__":
250
+ sys.exit(main())
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env python3
2
+ """Snapshot a custom Docker base image.
3
+
4
+ This example starts a blank VM with a custom Docker image (e.g., computer-use agent)
5
+ and creates a snapshot using the snapshot-store pipeline.
6
+
7
+ Usage:
8
+ export PLATO_API_KEY=your-key
9
+ python snapshot_docker_image.py
10
+ """
11
+
12
+ import logging
13
+ import os
14
+
15
+ from dotenv import load_dotenv
16
+
17
+ from plato.v2 import Env, Plato
18
+ from plato.v2.types import SimConfigCompute
19
+
20
+ load_dotenv()
21
+
22
+ logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
23
+ logger = logging.getLogger(__name__)
24
+
25
+ # Custom Docker image to snapshot
26
+ DOCKER_IMAGE = "383806609161.dkr.ecr.us-west-1.amazonaws.com/agents/plato/computer-use:1.3.0"
27
+
28
+ # Simulator name for the snapshot artifact
29
+ SIMULATOR_NAME = "computer-use-agent"
30
+
31
+
32
+ def main():
33
+ api_key = os.environ.get("PLATO_API_KEY")
34
+ if not api_key:
35
+ logger.error("PLATO_API_KEY not set")
36
+ return 1
37
+
38
+ logger.info("=" * 70)
39
+ logger.info("SNAPSHOT DOCKER IMAGE EXAMPLE")
40
+ logger.info("=" * 70)
41
+ logger.info(f"Docker image: {DOCKER_IMAGE}")
42
+ logger.info(f"Simulator name: {SIMULATOR_NAME}")
43
+ logger.info("")
44
+
45
+ plato = Plato()
46
+ session = None
47
+
48
+ try:
49
+ # Create a blank VM with custom Docker image
50
+ logger.info("Creating session with custom Docker image...")
51
+ session = plato.from_envs(
52
+ envs=[
53
+ Env.resource(
54
+ simulator=SIMULATOR_NAME,
55
+ sim_config=SimConfigCompute(
56
+ cpus=4,
57
+ memory=8192,
58
+ disk=20480,
59
+ ),
60
+ docker_image_url=DOCKER_IMAGE,
61
+ alias="agent",
62
+ )
63
+ ],
64
+ timeout=600,
65
+ )
66
+
67
+ logger.info(f"Session created: {session.session_id}")
68
+ logger.info(f"Environment: {session.envs[0].job_id}")
69
+
70
+ # Wait for VM to be fully ready
71
+ logger.info("Waiting for VM to be ready...")
72
+ session.wait_until_ready(timeout=300)
73
+
74
+ # Optionally run some setup commands
75
+ logger.info("Running setup commands...")
76
+ result = session.execute("uname -a && df -h", timeout=30)
77
+ for job_id, res in result.results.items():
78
+ logger.info(f" {job_id}: {res.stdout[:200] if res.stdout else '(no output)'}")
79
+
80
+ # Create disk snapshot (disk-only, uses snapshot-store for chunk-based dedup)
81
+ logger.info("Creating disk snapshot...")
82
+ snapshot_result = session.disk_snapshot(
83
+ override_service=SIMULATOR_NAME,
84
+ override_version="1.3.0",
85
+ override_dataset="base",
86
+ )
87
+
88
+ for job_id, info in snapshot_result.results.items():
89
+ if info.artifact_id:
90
+ logger.info(f" {job_id}: artifact_id={info.artifact_id}")
91
+ else:
92
+ logger.error(f" {job_id}: snapshot failed - {info.error}")
93
+
94
+ logger.info("")
95
+ logger.info("SUCCESS: Snapshot created!")
96
+ logger.info("You can now use this artifact with:")
97
+ logger.info(f' Env.simulator("{SIMULATOR_NAME}", tag="1.3.0")')
98
+ return 0
99
+
100
+ except Exception as e:
101
+ logger.error(f"Error: {e}")
102
+ import traceback
103
+
104
+ traceback.print_exc()
105
+ return 1
106
+
107
+ finally:
108
+ if session:
109
+ logger.info("Closing session...")
110
+ session.close()
111
+ plato.close()
112
+
113
+
114
+ if __name__ == "__main__":
115
+ exit(main())
@@ -0,0 +1,206 @@
1
+ #!/usr/bin/env python3
2
+ """Snapshot a local development environment.
3
+
4
+ This example:
5
+ 1. Starts a blank VM
6
+ 2. Clones the plato repo via SSH with a deploy key
7
+ 3. Starts local dev docker-compose
8
+ 4. Waits for user confirmation before snapshotting
9
+ 5. Creates a disk snapshot
10
+
11
+ Usage:
12
+ export PLATO_API_KEY=your-key
13
+ python snapshot_local_dev.py
14
+ """
15
+
16
+ import logging
17
+ import os
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
+ # Simulator name for the snapshot
31
+ SIMULATOR_NAME = "plato-local-dev"
32
+
33
+ # GitHub repo to clone
34
+ GITHUB_REPO = "git@github.com:useplato/plato.git"
35
+ GITHUB_BRANCH = "preview-deployments"
36
+
37
+ # SSH deploy key for cloning useplato/plato (ed25519)
38
+ SSH_PRIVATE_KEY = """-----BEGIN OPENSSH PRIVATE KEY-----
39
+ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
40
+ QyNTUxOQAAACCzSn8opb8nWXEZ8yEv3WQG8P+vVbZGwgEDjhbmSSqIsgAAAJhF9JNKRfST
41
+ SgAAAAtzc2gtZWQyNTUxOQAAACCzSn8opb8nWXEZ8yEv3WQG8P+vVbZGwgEDjhbmSSqIsg
42
+ AAAEC5AlVUuWLCtviqAI8iI+8A4LTeDiNgjL6zlGk6NJp16bNKfyilvydZcRnzIS/dZAbw
43
+ /69VtkbCAQOOFuZJKoiyAAAAD3BsYXRvLXZtLWRlcGxveQECAwQFBg==
44
+ -----END OPENSSH PRIVATE KEY-----"""
45
+
46
+
47
+ def main():
48
+ api_key = os.environ.get("PLATO_API_KEY")
49
+ if not api_key:
50
+ logger.error("PLATO_API_KEY not set")
51
+ return 1
52
+
53
+ logger.info("=" * 70)
54
+ logger.info("SNAPSHOT LOCAL DEV ENVIRONMENT")
55
+ logger.info("=" * 70)
56
+ logger.info(f"Repo: {GITHUB_REPO}")
57
+ logger.info(f"Simulator: {SIMULATOR_NAME}")
58
+ logger.info("")
59
+
60
+ plato = Plato()
61
+ session = None
62
+
63
+ try:
64
+ # Create a blank VM with enough resources for docker-compose
65
+ logger.info("Creating session with blank VM...")
66
+ session = plato.sessions.create(
67
+ envs=[
68
+ Env.resource(
69
+ simulator=SIMULATOR_NAME,
70
+ sim_config=SimConfigCompute(
71
+ cpus=2,
72
+ memory=4096,
73
+ disk=8192, # 8GB for docker images
74
+ ),
75
+ alias="dev",
76
+ )
77
+ ],
78
+ timeout=7200, # 2 hours
79
+ connect_network=True,
80
+ )
81
+
82
+ logger.info(f"Session created: {session.session_id}")
83
+ env = session.envs[0]
84
+ logger.info(f"Environment: {env.job_id}")
85
+
86
+ # Setup SSH key for git clone
87
+ logger.info("Setting up SSH key for GitHub...")
88
+ session.execute("mkdir -p /root/.ssh && chmod 700 /root/.ssh", timeout=30)
89
+
90
+ # Write the SSH private key
91
+ escaped_key = SSH_PRIVATE_KEY.replace("'", "'\\''")
92
+ session.execute(
93
+ f"echo '{escaped_key}' > /root/.ssh/plato_deploy && chmod 600 /root/.ssh/plato_deploy",
94
+ timeout=30,
95
+ )
96
+
97
+ # Add GitHub to known hosts
98
+ session.execute(
99
+ "ssh-keyscan -t ed25519 github.com >> /root/.ssh/known_hosts 2>/dev/null",
100
+ timeout=30,
101
+ )
102
+
103
+ # Clone the repo with deploy key
104
+ logger.info(f"Cloning {GITHUB_REPO} (branch: {GITHUB_BRANCH})...")
105
+ clone_cmd = f'GIT_SSH_COMMAND="ssh -i /root/.ssh/plato_deploy -o StrictHostKeyChecking=no" git clone --depth 1 -b {GITHUB_BRANCH} {GITHUB_REPO} /root/plato'
106
+ clone_result = session.execute(clone_cmd, timeout=300)
107
+ for job_id, res in clone_result.results.items():
108
+ if res.exit_code != 0:
109
+ logger.error(f" git clone failed: {res.stderr}")
110
+ return 1
111
+ logger.info(" git clone completed successfully")
112
+
113
+ # Configure git to use deploy key for future operations
114
+ session.execute(
115
+ 'cd /root/plato && git config core.sshCommand "ssh -i /root/.ssh/plato_deploy -o StrictHostKeyChecking=no"',
116
+ timeout=30,
117
+ )
118
+
119
+ # Start docker-compose with preview config
120
+ logger.info("Starting docker-compose (this may take a few minutes for first build)...")
121
+ compose_result = session.execute(
122
+ "cd /root/plato/local-dev && docker compose -f docker-compose.preview.yml up -d --build",
123
+ timeout=900, # 15 minutes for first build
124
+ )
125
+ for job_id, res in compose_result.results.items():
126
+ if res.exit_code != 0:
127
+ logger.warning(f" docker-compose may have issues: {res.stderr[:500] if res.stderr else ''}")
128
+ else:
129
+ logger.info(" docker-compose started")
130
+
131
+ # Wait for services to initialize
132
+ logger.info("Waiting for services to initialize (60s)...")
133
+ session.execute("sleep 60", timeout=120)
134
+
135
+ # Check running containers
136
+ logger.info("Checking running containers...")
137
+ check_result = session.execute("docker ps --format 'table {{.Names}}\\t{{.Status}}'", timeout=30)
138
+ for job_id, res in check_result.results.items():
139
+ if res.stdout:
140
+ for line in res.stdout.strip().split("\n"):
141
+ logger.info(f" {line}")
142
+
143
+ # Check if nginx is healthy
144
+ logger.info("Checking nginx health...")
145
+ health_result = session.execute("curl -sf http://localhost:8080/health || echo 'not ready'", timeout=30)
146
+ for job_id, res in health_result.results.items():
147
+ if "not ready" in (res.stdout or ""):
148
+ logger.warning(" Nginx not ready yet - services may still be starting")
149
+ else:
150
+ logger.info(" Nginx is healthy!")
151
+
152
+ # Wait for user confirmation before snapshotting
153
+ logger.info("")
154
+ logger.info("=" * 70)
155
+ logger.info("ENVIRONMENT READY - WAITING FOR CONFIRMATION")
156
+ logger.info("=" * 70)
157
+ logger.info(f"Session ID: {session.session_id}")
158
+ logger.info(f"Job ID: {env.job_id}")
159
+ logger.info("")
160
+ logger.info("Please verify the environment is set up correctly.")
161
+ logger.info("Press Enter to create the disk snapshot, or Ctrl+C to abort...")
162
+ logger.info("=" * 70)
163
+
164
+ try:
165
+ input()
166
+ except EOFError:
167
+ # Running non-interactively, wait for Ctrl+C
168
+ logger.info("Running non-interactively. Press Ctrl+C to abort or wait 60s to continue...")
169
+ time.sleep(60)
170
+
171
+ # Create disk snapshot (uses snapshot-store for chunk-based dedup)
172
+ logger.info("Creating disk snapshot...")
173
+ snapshot_result = session.disk_snapshot(
174
+ override_service=SIMULATOR_NAME,
175
+ override_version="dev",
176
+ override_dataset="local",
177
+ )
178
+
179
+ for job_id, info in snapshot_result.results.items():
180
+ if info.artifact_id:
181
+ logger.info(f" {job_id}: artifact_id={info.artifact_id}")
182
+ else:
183
+ logger.error(f" {job_id}: snapshot failed - {info.error}")
184
+
185
+ logger.info("")
186
+ logger.info("SUCCESS: Disk snapshot created!")
187
+ logger.info("You can now use this artifact with:")
188
+ logger.info(f' Env.simulator("{SIMULATOR_NAME}", tag="dev", dataset="local")')
189
+ return 0
190
+
191
+ except Exception as e:
192
+ logger.error(f"Error: {e}")
193
+ import traceback
194
+
195
+ traceback.print_exc()
196
+ return 1
197
+
198
+ finally:
199
+ if session:
200
+ logger.info("Closing session...")
201
+ session.close()
202
+ plato.close()
203
+
204
+
205
+ if __name__ == "__main__":
206
+ exit(main())
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: tmp97yexy9o.json
3
- # timestamp: 2026-02-02T07:59:03+00:00
2
+ # filename: tmpu23ownyz.json
3
+ # timestamp: 2026-02-02T20:25:20+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1206,6 +1206,11 @@ class RootfsStorageBackend(Enum):
1206
1206
  blockdiff_disk = "blockdiff_disk"
1207
1207
 
1208
1208
 
1209
+ class RootfsStorageBackend1(Enum):
1210
+ snapshot_store = "snapshot-store"
1211
+ snapshot_store_disk = "snapshot-store-disk"
1212
+
1213
+
1209
1214
  class EnvFromSimulator(BaseModel):
1210
1215
  model_config = ConfigDict(
1211
1216
  extra="allow",
@@ -1218,9 +1223,13 @@ class EnvFromSimulator(BaseModel):
1218
1223
  """
1219
1224
  Simulator/service name
1220
1225
  """
1221
- tag: Annotated[str | None, Field(title="Tag")] = "latest"
1226
+ tag: Annotated[str | None, Field(title="Tag")] = None
1227
+ """
1228
+ Artifact tag. If neither tag nor version provided, defaults to 'latest'.
1229
+ """
1230
+ version: Annotated[str | None, Field(title="Version")] = None
1222
1231
  """
1223
- Artifact tag (defaults to 'latest')
1232
+ Artifact version (git_hash). If provided, looks up by version instead of tag.
1224
1233
  """
1225
1234
  dataset: Annotated[str | None, Field(title="Dataset")] = None
1226
1235
  """
@@ -1872,7 +1881,7 @@ class NodeBuildConfig(BaseModel):
1872
1881
  SSH public key for VM access. Derived from private key if not set.
1873
1882
  """
1874
1883
  default_image: Annotated[str | None, Field(title="Default Image")] = (
1875
- "383806609161.dkr.ecr.us-west-1.amazonaws.com/vm/rootfs/plato-ubuntu-22.04:1.1.0"
1884
+ "383806609161.dkr.ecr.us-west-1.amazonaws.com/vm/rootfs/plato-ubuntu-22.04:2.0.0"
1876
1885
  )
1877
1886
  """
1878
1887
  Default VM image URL with tag (e.g., 'ecr-url/repo:tag').
@@ -2099,9 +2108,9 @@ class NodeSnapshotStoreConfig(BaseModel):
2099
2108
  """
2100
2109
  Postgres DSN for snapshot-store metadata.
2101
2110
  """
2102
- cache_mb: Annotated[int | None, Field(title="Cache Mb")] = 0
2111
+ cache_mb: Annotated[int | None, Field(title="Cache Mb")] = 10240
2103
2112
  """
2104
- Snapshot-store userspace decompressed page cache size in MB (0 to disable). This cache deduplicates pages by content hash across all manifests. For memory mounts (mount-mem): direct_io is disabled by default, so the kernel page cache already handles caching and deduplication for mmap'd files. Multiple VMs restoring from the same snapshot share kernel-cached pages automatically. The userspace cache is redundant here. For disk mounts (mount-tree): direct_io is enabled by default for overlay write coherency, bypassing the kernel cache. However, the userspace cache only helps for unmodified base image pages read by multiple VMs. Since disk workloads involve frequent writes (logs, temp files, databases), written pages are served from the overlay and bypass this cache entirely. The benefit is marginal for typical workloads. Recommendation: Leave at 0 for most deployments.
2113
+ Snapshot-store userspace decompressed page cache size in MB (0 to disable). This cache deduplicates pages by content hash across all manifests. For memory mounts (mount-mem): direct_io is disabled by default, so the kernel page cache already handles caching and deduplication for mmap'd files. Multiple VMs restoring from the same snapshot share kernel-cached pages automatically. The userspace cache is less beneficial here but can still help. For disk mounts (mount-tree): direct_io is enabled by default for overlay write coherency, bypassing the kernel cache. The userspace cache is important here for read-heavy workloads (Docker builds, package installs, etc.) that read many base image pages. Without caching, every read goes through FUSE decompression. Recommendation: 512MB for most deployments, increase for heavy disk I/O workloads.
2105
2114
  """
2106
2115
  compression_workers: Annotated[int | None, Field(title="Compression Workers")] = 1
2107
2116
  """
@@ -4617,7 +4626,10 @@ class EnvFromResource(BaseModel):
4617
4626
  """
4618
4627
  Custom Docker image URL (ECR). If not set, uses default from settings.
4619
4628
  """
4620
- rootfs_storage_backend: Annotated[RootfsStorageBackend | str | None, Field(title="Rootfs Storage Backend")] = None
4629
+ rootfs_storage_backend: Annotated[
4630
+ RootfsStorageBackend | RootfsStorageBackend1 | str | None,
4631
+ Field(title="Rootfs Storage Backend"),
4632
+ ] = None
4621
4633
  """
4622
4634
  Storage backend for rootfs ('sparse-s3' or 'snapshot-store'). If not set, uses default.
4623
4635
  """