plato-sdk-v2 2.7.0__tar.gz → 2.7.1__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.7.0 → plato_sdk_v2-2.7.1}/PKG-INFO +1 -1
  2. plato_sdk_v2-2.7.1/VERSION +1 -0
  3. plato_sdk_v2-2.7.1/docs/skills/trajectory-analysis/SKILL.md +226 -0
  4. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/pm.py +92 -6
  5. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/sandbox.py +116 -40
  6. plato_sdk_v2-2.7.0/VERSION +0 -1
  7. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/.claude/agents/sim-creator.md +0 -0
  8. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/.gitignore +0 -0
  9. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/BUILDING_SIMS.md +0 -0
  10. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/README.md +0 -0
  11. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/ci/CLAUDE.md +0 -0
  12. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/ci/deploy.sh +0 -0
  13. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/ci/lint.sh +0 -0
  14. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/ci/setup.sh +0 -0
  15. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/ci/version-bump.sh +0 -0
  16. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/AGENT_SPEC.md +0 -0
  17. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/CLI.md +0 -0
  18. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/GENERATING_SIM_SDKS.md +0 -0
  19. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/SIMULATOR_LIFECYCLE.md +0 -0
  20. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/SIM_CREATOR.md +0 -0
  21. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/cli/agent.md +0 -0
  22. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/cli/flows.md +0 -0
  23. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/cli/pm.md +0 -0
  24. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/cli/sandbox.md +0 -0
  25. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/cli/sims.md +0 -0
  26. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/cli/world.md +0 -0
  27. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/sim-creation-pipeline.md +0 -0
  28. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skill-restructure-plan.md +0 -0
  29. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
  30. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-config/SKILL.md +0 -0
  31. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-creator/SKILL.md +0 -0
  32. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-debugger/SKILL.md +0 -0
  33. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-flow-audit/SKILL.md +0 -0
  34. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-flow-clear/SKILL.md +0 -0
  35. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
  36. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-flow-run/SKILL.md +0 -0
  37. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-research/SKILL.md +0 -0
  38. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-review/SKILL.md +0 -0
  39. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
  40. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
  41. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
  42. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
  43. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-snapshot/SKILL.md +0 -0
  44. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-submit/SKILL.md +0 -0
  45. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/skills/sim-validate/SKILL.md +0 -0
  46. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/testcommit +0 -0
  47. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/docs/unit.sh +0 -0
  48. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/examples/test.py +0 -0
  49. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/examples/test_proxy_ssh.py +0 -0
  50. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/__init__.py +0 -0
  51. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/__init__.py +0 -0
  52. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/__init__.py +0 -0
  53. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/__init__.py +0 -0
  54. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
  55. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
  56. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
  57. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
  58. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
  59. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/__init__.py +0 -0
  60. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
  61. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
  62. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
  63. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
  64. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
  65. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
  66. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
  67. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/__init__.py +0 -0
  68. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/backup.py +0 -0
  69. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/cleanup.py +0 -0
  70. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/close.py +0 -0
  71. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/close_async.py +0 -0
  72. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/create.py +0 -0
  73. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/create_batch.py +0 -0
  74. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/create_simulator.py +0 -0
  75. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
  76. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
  77. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
  78. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_active_session.py +0 -0
  79. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
  80. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
  81. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_flows.py +0 -0
  82. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
  83. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_job_info.py +0 -0
  84. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_job_status.py +0 -0
  85. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
  86. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
  87. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_public_url.py +0 -0
  88. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
  89. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_simulators.py +0 -0
  90. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_state.py +0 -0
  91. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
  92. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
  93. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
  94. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/reset.py +0 -0
  95. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/score.py +0 -0
  96. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
  97. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/env/update_simulator.py +0 -0
  98. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/__init__.py +0 -0
  99. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
  100. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
  101. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
  102. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
  103. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
  104. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
  105. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
  106. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
  107. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/__init__.py +0 -0
  108. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
  109. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
  110. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
  111. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
  112. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
  113. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
  114. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
  115. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
  116. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
  117. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
  118. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
  119. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
  120. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
  121. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
  122. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/jobs/__init__.py +0 -0
  123. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
  124. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
  125. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
  126. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
  127. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
  128. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/__init__.py +0 -0
  129. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
  130. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
  131. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
  132. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
  133. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
  134. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
  135. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
  136. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
  137. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
  138. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
  139. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
  140. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
  141. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
  142. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/queue/__init__.py +0 -0
  143. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
  144. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
  145. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/queue/get_vms.py +0 -0
  146. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/queue/get_workers.py +0 -0
  147. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
  148. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
  149. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
  150. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
  151. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
  152. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
  153. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
  154. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
  155. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
  156. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
  157. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
  158. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
  159. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/__init__.py +0 -0
  160. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
  161. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/archive_session.py +0 -0
  162. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
  163. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
  164. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
  165. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
  166. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
  167. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
  168. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
  169. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
  170. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
  171. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
  172. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
  173. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
  174. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
  175. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
  176. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
  177. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_session.py +0 -0
  178. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
  179. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_sessions.py +0 -0
  180. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
  181. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
  182. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
  183. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
  184. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
  185. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/set_session_output.py +0 -0
  186. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/update_session_public.py +0 -0
  187. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
  188. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/__init__.py +0 -0
  189. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
  190. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
  191. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
  192. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
  193. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
  194. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
  195. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
  196. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
  197. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
  198. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
  199. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
  200. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
  201. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
  202. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
  203. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
  204. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
  205. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
  206. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
  207. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
  208. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/register.py +0 -0
  209. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
  210. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
  211. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
  212. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/__init__.py +0 -0
  213. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
  214. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
  215. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
  216. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
  217. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
  218. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
  219. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
  220. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
  221. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
  222. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
  223. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
  224. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
  225. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
  226. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
  227. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
  228. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
  229. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
  230. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
  231. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
  232. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
  233. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
  234. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
  235. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
  236. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
  237. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
  238. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
  239. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
  240. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
  241. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
  242. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
  243. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/__init__.py +0 -0
  244. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/__init__.py +0 -0
  245. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
  246. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
  247. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
  248. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/import_agent.py +0 -0
  249. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
  250. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
  251. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
  252. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
  253. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
  254. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos/__init__.py +0 -0
  255. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
  256. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
  257. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
  258. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
  259. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
  260. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
  261. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
  262. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/cluster/__init__.py +0 -0
  263. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
  264. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/__init__.py +0 -0
  265. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
  266. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/close.py +0 -0
  267. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
  268. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
  269. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
  270. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/execute.py +0 -0
  271. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
  272. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
  273. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
  274. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/make.py +0 -0
  275. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/public_url.py +0 -0
  276. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/reset.py +0 -0
  277. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/set_date.py +0 -0
  278. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
  279. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
  280. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
  281. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/state.py +0 -0
  282. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
  283. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/__init__.py +0 -0
  284. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/add_member.py +0 -0
  285. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/create_network.py +0 -0
  286. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/delete_network.py +0 -0
  287. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/get_network.py +0 -0
  288. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/list_members.py +0 -0
  289. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/list_networks.py +0 -0
  290. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/remove_member.py +0 -0
  291. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/networks/update_member.py +0 -0
  292. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/pypi/__init__.py +0 -0
  293. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/pypi/download_package.py +0 -0
  294. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
  295. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/pypi/package_index.py +0 -0
  296. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
  297. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
  298. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/__init__.py +0 -0
  299. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/create.py +0 -0
  300. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/deploy.py +0 -0
  301. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/get.py +0 -0
  302. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
  303. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/handle_import.py +0 -0
  304. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/list_releases.py +0 -0
  305. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
  306. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/releases/update.py +0 -0
  307. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/__init__.py +0 -0
  308. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/add_ssh_key.py +0 -0
  309. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
  310. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/close.py +0 -0
  311. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/connect_network.py +0 -0
  312. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
  313. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
  314. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/execute.py +0 -0
  315. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
  316. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
  317. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
  318. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
  319. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
  320. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
  321. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
  322. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
  323. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
  324. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
  325. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
  326. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
  327. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
  328. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/make.py +0 -0
  329. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/reset.py +0 -0
  330. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/set_date.py +0 -0
  331. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
  332. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
  333. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
  334. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/state.py +0 -0
  335. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
  336. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
  337. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/user/__init__.py +0 -0
  338. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/v2/user/get_current_user.py +0 -0
  339. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/version/__init__.py +0 -0
  340. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/api/version/check.py +0 -0
  341. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/client.py +0 -0
  342. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/errors.py +0 -0
  343. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/models/__init__.py +0 -0
  344. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_generated/py.typed +0 -0
  345. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/__init__.py +0 -0
  346. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/cli.py +0 -0
  347. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/instruction.py +0 -0
  348. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/parser.py +0 -0
  349. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/python.py +0 -0
  350. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
  351. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
  352. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
  353. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
  354. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
  355. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
  356. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
  357. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
  358. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
  359. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/__init__.py +0 -0
  360. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/artifacts.py +0 -0
  361. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/base.py +0 -0
  362. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/build.py +0 -0
  363. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/config.py +0 -0
  364. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/otel.py +0 -0
  365. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/runner.py +0 -0
  366. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/agents/trajectory.py +0 -0
  367. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/__init__.py +0 -0
  368. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/__init__.py +0 -0
  369. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/admin/__init__.py +0 -0
  370. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py +0 -0
  371. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py +0 -0
  372. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py +0 -0
  373. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py +0 -0
  374. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py +0 -0
  375. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/__init__.py +0 -0
  376. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/create_agent.py +0 -0
  377. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/delete_agent.py +0 -0
  378. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/get_agent.py +0 -0
  379. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/get_agent_schema.py +0 -0
  380. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/get_agent_versions.py +0 -0
  381. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/list_agents.py +0 -0
  382. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/agents/lookup_agent.py +0 -0
  383. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/auth/__init__.py +0 -0
  384. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
  385. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
  386. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
  387. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/checkpoints/__init__.py +0 -0
  388. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/checkpoints/list_checkpoints.py +0 -0
  389. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/checkpoints/preview_checkpoint.py +0 -0
  390. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/default/__init__.py +0 -0
  391. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/default/health.py +0 -0
  392. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/events/__init__.py +0 -0
  393. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/events/get_session_event.py +0 -0
  394. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/events/list_session_events.py +0 -0
  395. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/jobs/__init__.py +0 -0
  396. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/jobs/launch_job.py +0 -0
  397. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/otel/__init__.py +0 -0
  398. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py +0 -0
  399. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py +0 -0
  400. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/registry/__init__.py +0 -0
  401. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
  402. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
  403. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
  404. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
  405. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
  406. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
  407. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/runtimes/__init__.py +0 -0
  408. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/runtimes/create_runtime.py +0 -0
  409. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
  410. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/runtimes/get_runtime.py +0 -0
  411. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/runtimes/get_runtime_logs.py +0 -0
  412. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
  413. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/runtimes/test_runtime.py +0 -0
  414. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/secrets/__init__.py +0 -0
  415. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/secrets/create_secret.py +0 -0
  416. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/secrets/delete_secret.py +0 -0
  417. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/secrets/get_secret.py +0 -0
  418. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/secrets/list_secrets.py +0 -0
  419. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/secrets/update_secret.py +0 -0
  420. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/__init__.py +0 -0
  421. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/close_session.py +0 -0
  422. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/complete_session.py +0 -0
  423. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/create_session.py +0 -0
  424. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/get_session.py +0 -0
  425. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/get_session_bash_logs_download.py +0 -0
  426. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/get_session_envs.py +0 -0
  427. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/get_session_live_logs.py +0 -0
  428. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/get_session_logs.py +0 -0
  429. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
  430. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/get_session_status.py +0 -0
  431. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/list_sessions.py +0 -0
  432. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/list_tags.py +0 -0
  433. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/sessions/update_session_tags.py +0 -0
  434. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/status/__init__.py +0 -0
  435. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
  436. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
  437. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/templates/__init__.py +0 -0
  438. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/templates/create_template.py +0 -0
  439. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/templates/delete_template.py +0 -0
  440. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/templates/get_template.py +0 -0
  441. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/templates/list_templates.py +0 -0
  442. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/templates/update_template.py +0 -0
  443. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/trajectories/__init__.py +0 -0
  444. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
  445. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
  446. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/worlds/__init__.py +0 -0
  447. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/worlds/create_world.py +0 -0
  448. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/worlds/delete_world.py +0 -0
  449. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/worlds/get_world.py +0 -0
  450. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/api/worlds/list_worlds.py +0 -0
  451. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/client.py +0 -0
  452. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/errors.py +0 -0
  453. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/models/__init__.py +0 -0
  454. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/chronos/py.typed +0 -0
  455. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/py.typed +0 -0
  456. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/sims/README.md +0 -0
  457. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/sims/__init__.py +0 -0
  458. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/sims/agent_helpers.py +0 -0
  459. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/sims/cli.py +0 -0
  460. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/sims/generate_clients.py +0 -0
  461. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/sims/registry.py +0 -0
  462. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/__init__.py +0 -0
  463. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/audit_ui.py +0 -0
  464. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/__init__.py +0 -0
  465. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/agent.py +0 -0
  466. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/chronos.py +0 -0
  467. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/main.py +0 -0
  468. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/proxy.py +0 -0
  469. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/ssh.py +0 -0
  470. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/templates/world-runner.Dockerfile +0 -0
  471. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/utils.py +0 -0
  472. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/verify.py +0 -0
  473. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli/world.py +0 -0
  474. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/cli.py +0 -0
  475. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/config.py +0 -0
  476. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/examples/doordash_tasks.py +0 -0
  477. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/examples/loadtest.py +0 -0
  478. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/examples/test_env.py +0 -0
  479. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/examples/test_env_custom_browser.py +0 -0
  480. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/examples/test_env_sync.py +0 -0
  481. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/examples/test_reuse_env.py +0 -0
  482. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/examples/test_run.py +0 -0
  483. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/exceptions.py +0 -0
  484. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/README.md +0 -0
  485. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
  486. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/background.js +0 -0
  487. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
  488. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/content.js +0 -0
  489. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
  490. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
  491. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
  492. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/options.html +0 -0
  493. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/options.js +0 -0
  494. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
  495. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/package.json +0 -0
  496. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
  497. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
  498. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
  499. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
  500. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
  501. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
  502. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
  503. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
  504. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
  505. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
  506. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
  507. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
  508. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
  509. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
  510. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
  511. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
  512. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
  513. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/flow_executor.py +0 -0
  514. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/models/__init__.py +0 -0
  515. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/models/build_models.py +0 -0
  516. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/models/env.py +0 -0
  517. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/models/flow.py +0 -0
  518. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/models/sandbox.py +0 -0
  519. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/models/task.py +0 -0
  520. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/sandbox_sdk.py +0 -0
  521. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/sdk.py +0 -0
  522. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/sync_env.py +0 -0
  523. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/sync_flow_executor.py +0 -0
  524. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/sync_sdk.py +0 -0
  525. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v1/utils/proxytunnel.py +0 -0
  526. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/__init__.py +0 -0
  527. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/async_/__init__.py +0 -0
  528. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/async_/artifact.py +0 -0
  529. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/async_/chronos.py +0 -0
  530. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/async_/client.py +0 -0
  531. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/async_/environment.py +0 -0
  532. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/async_/flow_executor.py +0 -0
  533. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/async_/session.py +0 -0
  534. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/models.py +0 -0
  535. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/sync/__init__.py +0 -0
  536. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/sync/artifact.py +0 -0
  537. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/sync/chronos.py +0 -0
  538. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/sync/client.py +0 -0
  539. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/sync/environment.py +0 -0
  540. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/sync/flow_executor.py +0 -0
  541. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/sync/session.py +0 -0
  542. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/types.py +0 -0
  543. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/utils/__init__.py +0 -0
  544. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/utils/db_cleanup.py +0 -0
  545. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/utils/models.py +0 -0
  546. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/v2/utils/proxy_tunnel.py +0 -0
  547. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/worlds/README.md +0 -0
  548. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/worlds/__init__.py +0 -0
  549. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/worlds/base.py +0 -0
  550. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/worlds/build_hook.py +0 -0
  551. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/worlds/config.py +0 -0
  552. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/plato/worlds/runner.py +0 -0
  553. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/pyproject.toml +0 -0
  554. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/scripts/get_all_artifact_targets.py +0 -0
  555. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/__init__.py +0 -0
  556. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/integration/__init__.py +0 -0
  557. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/integration/conftest.py +0 -0
  558. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/integration/test_browser_agent.py +0 -0
  559. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/integration/test_chronos_callback.py +0 -0
  560. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/integration/test_cleanup_snapshot.py +0 -0
  561. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/integration/test_code_world.py +0 -0
  562. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/integration/test_harbor_agent_runner.py +0 -0
  563. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/sims/__init__.py +0 -0
  564. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/sims/conftest.py +0 -0
  565. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/sims/test_agent_helpers.py +0 -0
  566. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/test_heartbeat_keepalive.py +0 -0
  567. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/test_session_serialization.py +0 -0
  568. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/test_set_date.py +0 -0
  569. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/test_v2_imports.py +0 -0
  570. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/test_v2_multisim_integration.py +0 -0
  571. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/test_v2_session.py +0 -0
  572. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/tests/test_version.py +0 -0
  573. {plato_sdk_v2-2.7.0 → plato_sdk_v2-2.7.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plato-sdk-v2
3
- Version: 2.7.0
3
+ Version: 2.7.1
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.1
@@ -0,0 +1,226 @@
1
+ ---
2
+ name: trajectory-analysis
3
+ description: Analyzes Plato session trajectories from Chronos API. Shows visual flow diagram, backtracks, issues, and diagnostic summary. Usage: /trajectory-analysis <session_id>
4
+ allowed-tools: Bash, Read
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Trajectory Analysis
9
+
10
+ Analyze a Plato session to visualize the execution flow and identify issues.
11
+
12
+ ## API Key
13
+
14
+ ```bash
15
+ CHRONOS_API_KEY="pk_user_xhAO5_6DuDXAAz4nIK4AI-gVOaxl6ADDngZYCcURqFw"
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ The user provides a session ID as the argument. Extract it from the input (it's a UUID like `6ae416d1-83c2-4b0d-8d09-4a5e3faf8007`).
21
+
22
+ ## Execution
23
+
24
+ Run this analysis in order:
25
+
26
+ ### 1. Fetch and Parse Logs
27
+
28
+ ```bash
29
+ SESSION_ID="{session_id}"
30
+ CHRONOS_API_KEY="pk_user_xhAO5_6DuDXAAz4nIK4AI-gVOaxl6ADDngZYCcURqFw"
31
+
32
+ curl -s -H "X-API-Key: $CHRONOS_API_KEY" \
33
+ "https://chronos.plato.so/api/sessions/$SESSION_ID/logs" > /tmp/trajectory_logs.json
34
+ ```
35
+
36
+ ### 2. Get Session Overview
37
+
38
+ ```bash
39
+ echo "=== Session: $SESSION_ID ==="
40
+ jq -r '.logs[] | select(.name == "world_reset") | .attributes | "Sim: \(.sim_name)\nGitHub: \(.github_url)\nTotal Steps: \(.total_steps)"' /tmp/trajectory_logs.json | head -3
41
+ ```
42
+
43
+ ### 3. Get Raw Step Data
44
+
45
+ ```bash
46
+ jq -r '.logs[] | select(.name | test("^step_[0-9]+$")) | "\(.attributes["plato.step.number"])|\(.attributes["plato.step.observation"])"' /tmp/trajectory_logs.json
47
+ ```
48
+
49
+ ### 4. Get Backtrack Details (FULL - no truncation)
50
+
51
+ ```bash
52
+ jq -r '.logs[] | select(.name | test("execute_step")) | select(.attributes.backtrack_to) | "BACKTRACK: \(.attributes.step_name) -> \(.attributes.backtrack_to)\nREASON: \(.attributes.backtrack_reason)"' /tmp/trajectory_logs.json
53
+ ```
54
+
55
+ ### 5. Get Errors
56
+
57
+ ```bash
58
+ jq -r '[.logs[] | select(.attributes["log.level"] == "ERROR")] | .[] | .attributes["log.message"]' /tmp/trajectory_logs.json
59
+ ```
60
+
61
+ ### 6. Get Verification Results
62
+
63
+ ```bash
64
+ jq -r '.logs[] | select(.name | test("^verify_")) | "\(.attributes.step_name)|\(.attributes.all_passed)|\(.attributes.verifier_count)"' /tmp/trajectory_logs.json
65
+ ```
66
+
67
+ ## Output Format - Visual Diagrams
68
+
69
+ After gathering the data, present it visually. **NEVER truncate or crop any text - show full reasons.**
70
+
71
+ ### Header Box
72
+
73
+ ```
74
+ ╔══════════════════════════════════════════════════════════════════╗
75
+ ║ SESSION TRAJECTORY ANALYSIS ║
76
+ ╠══════════════════════════════════════════════════════════════════╣
77
+ ║ Session: {session_id} ║
78
+ ║ Sim: {sim_name} ║
79
+ ║ GitHub: {github_url} ║
80
+ ╚══════════════════════════════════════════════════════════════════╝
81
+ ```
82
+
83
+ ### Flow Diagram
84
+
85
+ Draw the actual flow with boxes and arrows. Show backtracks as return arrows.
86
+
87
+ **For a successful linear flow:**
88
+ ```
89
+ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
90
+ │ research │───▶│ config │───▶│ sandbox │───▶│ worker │───▶ ...
91
+ └──────────┘ └──────────┘ └──────────┘ └──────────┘
92
+ ✓ ✓ ✓ ✓
93
+ ```
94
+
95
+ **For a flow with backtracks:**
96
+ ```
97
+ ┌──────────┐ ┌──────────┐ ┌──────────┐
98
+ │ research │───▶│ config │───▶│ sandbox │
99
+ └──────────┘ └──────────┘ └──────────┘
100
+ ✓ ✓ ✗
101
+ ▲ │
102
+ │ BACKTRACK │
103
+ └───────────────┘
104
+
105
+ ┌──────────┐ ┌──────────┐ ┌──────────┐
106
+ ───▶│ config │───▶│ sandbox │───▶│ worker │───▶ ...
107
+ └──────────┘ └──────────┘ └──────────┘
108
+ ✓ ✓ ✓
109
+ ```
110
+
111
+ ### Step-by-Step Timeline
112
+
113
+ ```
114
+ STEP 1 ══════════════════════════════════════════════════════════════
115
+ ┌─────────────────────────────────────────────────────────────────────┐
116
+ │ research [✓] │
117
+ │ ─────────────────────────────────────────────────────────────── │
118
+ │ Status: PASSED │
119
+ │ Next: config │
120
+ │ Verify: 2 verifiers passed │
121
+ └─────────────────────────────────────────────────────────────────────┘
122
+
123
+
124
+ STEP 2 ══════════════════════════════════════════════════════════════
125
+ ┌─────────────────────────────────────────────────────────────────────┐
126
+ │ config [✓] │
127
+ │ ─────────────────────────────────────────────────────────────── │
128
+ │ Status: PASSED │
129
+ │ Next: sandbox │
130
+ │ Verify: 1 verifier passed │
131
+ └─────────────────────────────────────────────────────────────────────┘
132
+
133
+
134
+ STEP 3 ══════════════════════════════════════════════════════════════
135
+ ┌─────────────────────────────────────────────────────────────────────┐
136
+ │ sandbox [✗] │
137
+ │ ─────────────────────────────────────────────────────────────── │
138
+ │ Status: BACKTRACK → config │
139
+ │ │
140
+ │ ┌─ ISSUE ────────────────────────────────────────────────────────┐ │
141
+ │ │ {FULL backtrack reason here - never truncate} │ │
142
+ │ │ {continue on multiple lines if needed} │ │
143
+ │ └────────────────────────────────────────────────────────────────┘ │
144
+ └─────────────────────────────────────────────────────────────────────┘
145
+
146
+ ┌─────────┘
147
+ │ RETRY
148
+
149
+ STEP 4 ══════════════════════════════════════════════════════════════
150
+ ...
151
+ ```
152
+
153
+ ### Issues Summary Box
154
+
155
+ ```
156
+ ╔══════════════════════════════════════════════════════════════════╗
157
+ ║ ISSUES FOUND ║
158
+ ╠══════════════════════════════════════════════════════════════════╣
159
+ ║ ║
160
+ ║ ⚠️ BACKTRACK at Step 3: sandbox → config ║
161
+ ║ ───────────────────────────────────────────────────────────── ║
162
+ ║ {FULL reason - show everything, wrap lines as needed} ║
163
+ ║ {line 2 of reason} ║
164
+ ║ {line 3 of reason} ║
165
+ ║ ║
166
+ ╚══════════════════════════════════════════════════════════════════╝
167
+ ```
168
+
169
+ ### Verification Summary
170
+
171
+ ```
172
+ ┌─ VERIFICATIONS ─────────────────────────────────────────────────────┐
173
+ │ │
174
+ │ research ✓ PASSED (2 verifiers) │
175
+ │ config ✓ PASSED (1 verifier) │
176
+ │ config ✓ PASSED (1 verifier) ← retry │
177
+ │ sandbox ✓ PASSED (5 verifiers) │
178
+ │ │
179
+ └─────────────────────────────────────────────────────────────────────┘
180
+ ```
181
+
182
+ ### Summary Stats
183
+
184
+ ```
185
+ ┌─ SUMMARY ───────────────────────────────────────────────────────────┐
186
+ │ │
187
+ │ Total Steps Executed: 5 │
188
+ │ Backtracks: 1 │
189
+ │ Current Position: worker_setup │
190
+ │ Overall Status: IN PROGRESS │
191
+ │ │
192
+ └─────────────────────────────────────────────────────────────────────┘
193
+ ```
194
+
195
+ ### Recommendations Box (if issues found)
196
+
197
+ ```
198
+ ╔══════════════════════════════════════════════════════════════════╗
199
+ ║ RECOMMENDATIONS ║
200
+ ╠══════════════════════════════════════════════════════════════════╣
201
+ ║ ║
202
+ ║ Based on: "port 8888 vs port 80" in backtrack reason ║
203
+ ║ ║
204
+ ║ → The router expects traffic on port 80 but nginx/app is ║
205
+ ║ listening on port 8888 ║
206
+ ║ ║
207
+ ║ → Fix: Update nginx.conf to listen on port 80, or update ║
208
+ ║ docker-compose.yml healthcheck to match the actual port ║
209
+ ║ ║
210
+ ╚══════════════════════════════════════════════════════════════════╝
211
+ ```
212
+
213
+ ## Common Issue Patterns
214
+
215
+ Use these to generate recommendations:
216
+
217
+ | Pattern in Reason | Likely Cause | Recommendation |
218
+ |-------------------|--------------|----------------|
219
+ | "port" mismatch | nginx/app not listening on expected port | Check vm_port from router token, update nginx.conf to listen on correct port |
220
+ | "heartbeat" | VM crashed or became unresponsive | Check container health, resource limits, increase healthcheck timeouts |
221
+ | "worker" errors | Database audit setup failed | Verify DB credentials, check worker logs, ensure DB is ready |
222
+ | "mutations" | Login generates DB changes | Add tables/columns to audit_ignore_tables in plato-config.yml |
223
+ | "verify" fail | Step requirements not met | Check verifier output for specific missing requirements |
224
+ | "manifest unknown" | GHCR image auth failed | Switch to Docker Hub image instead of ghcr.io |
225
+ | "timeout" | Operation took too long | Increase timeout values, check for slow startup |
226
+ | "connection refused" | Service not running | Check docker logs, verify service started |
@@ -6,10 +6,12 @@ import os
6
6
  import re
7
7
  import shutil
8
8
  import tempfile
9
+ from datetime import datetime, timedelta
9
10
  from pathlib import Path
10
11
 
11
12
  import httpx
12
13
  import typer
14
+ import yaml
13
15
  from rich.table import Table
14
16
 
15
17
  from plato._generated.api.v1.env import get_simulator_by_name, get_simulators
@@ -25,6 +27,7 @@ from plato._generated.models import (
25
27
  AddReviewRequest,
26
28
  AppApiV1SimulatorRoutesUpdateSimulatorRequest,
27
29
  Authentication,
30
+ Flow,
28
31
  Outcome,
29
32
  ReviewType,
30
33
  UpdateStatusRequest,
@@ -41,6 +44,7 @@ from plato.v1.cli.utils import (
41
44
  )
42
45
  from plato.v1.cli.verify import pm_verify_app
43
46
  from plato.v2.async_.client import AsyncPlato
47
+ from plato.v2.async_.flow_executor import FlowExecutor
44
48
  from plato.v2.types import Env
45
49
 
46
50
  # =============================================================================
@@ -282,6 +286,17 @@ def review_base(
282
286
  "--skip-review",
283
287
  help="Run login flow and check state, but skip interactive review. For automated verification.",
284
288
  ),
289
+ local: str = typer.Option(
290
+ None,
291
+ "--local",
292
+ "-l",
293
+ help="Path to a local flow YAML file to run instead of the default login flow.",
294
+ ),
295
+ clock: str = typer.Option(
296
+ None,
297
+ "--clock",
298
+ help="Set fake browser time (ISO format or offset like '-30d' for 30 days ago).",
299
+ ),
285
300
  ):
286
301
  """Review base/environment artifact for a simulator.
287
302
 
@@ -373,16 +388,87 @@ def review_base(
373
388
  playwright = await async_playwright().start()
374
389
  browser = await playwright.chromium.launch(headless=False)
375
390
 
376
- try:
377
- login_result = await session.login(browser, dataset="base")
378
- page = list(login_result.pages.values())[0] if login_result.pages else None
379
- console.print("[green]✅ Logged into environment[/green]")
380
- except Exception as e:
381
- console.print(f"[yellow]⚠️ Login error: {e}[/yellow]")
391
+ # Install fake clock if requested
392
+ fake_time = None
393
+ if clock:
394
+ # Parse clock option: ISO format or offset like '-30d'
395
+ if clock.startswith("-") and clock[-1] in "dhms":
396
+ # Offset format: -30d, -1h, -30m, -60s
397
+ unit = clock[-1]
398
+ amount = int(clock[1:-1])
399
+ if unit == "d":
400
+ fake_time = datetime.now() - timedelta(days=amount)
401
+ elif unit == "h":
402
+ fake_time = datetime.now() - timedelta(hours=amount)
403
+ elif unit == "m":
404
+ fake_time = datetime.now() - timedelta(minutes=amount)
405
+ elif unit == "s":
406
+ fake_time = datetime.now() - timedelta(seconds=amount)
407
+ else:
408
+ # ISO format
409
+ fake_time = datetime.fromisoformat(clock)
410
+
411
+ console.print(f"[cyan]Setting fake browser time to:[/cyan] {fake_time.isoformat()}")
412
+
413
+ if local:
414
+ # Use local flow file instead of default login
415
+ local_path = Path(local)
416
+ if not local_path.exists():
417
+ console.print(f"[red]❌ Local flow file not found: {local}[/red]")
418
+ raise typer.Exit(1)
419
+
420
+ console.print(f"[cyan]Loading local flow from: {local}[/cyan]")
421
+ with open(local_path) as f:
422
+ flow_dict = yaml.safe_load(f)
423
+
424
+ # Find login flow (or first flow if only one)
425
+ flows = flow_dict.get("flows", [])
426
+ if not flows:
427
+ console.print("[red]❌ No flows found in flow file[/red]")
428
+ raise typer.Exit(1)
429
+
430
+ # Try to find 'login' flow, otherwise use first flow
431
+ flow_data = next((f for f in flows if f.get("name") == "login"), flows[0])
432
+ flow = Flow.model_validate(flow_data)
433
+ console.print(f"[cyan]Running flow: {flow.name}[/cyan]")
434
+
435
+ # Create page and navigate to public URL
382
436
  page = await browser.new_page()
437
+
438
+ # Install fake clock if requested
439
+ if fake_time:
440
+ await page.clock.install(time=fake_time)
441
+ console.print(f"[green]✅ Fake clock installed: {fake_time.isoformat()}[/green]")
442
+
383
443
  if public_url:
384
444
  await page.goto(public_url)
385
445
 
446
+ # Execute the flow
447
+ try:
448
+ executor = FlowExecutor(page, flow)
449
+ await executor.execute()
450
+ console.print("[green]✅ Local flow executed successfully[/green]")
451
+ except Exception as e:
452
+ console.print(f"[yellow]⚠️ Flow execution error: {e}[/yellow]")
453
+ else:
454
+ # Use default login via session.login()
455
+ if fake_time:
456
+ console.print("[yellow]⚠️ --clock with default login may not work correctly.[/yellow]")
457
+ console.print("[yellow] Use --local with a flow file for reliable clock testing.[/yellow]")
458
+ try:
459
+ login_result = await session.login(browser, dataset="base")
460
+ page = list(login_result.pages.values())[0] if login_result.pages else None
461
+ console.print("[green]✅ Logged into environment[/green]")
462
+ except Exception as e:
463
+ console.print(f"[yellow]⚠️ Login error: {e}[/yellow]")
464
+ page = await browser.new_page()
465
+ # Install fake clock on fallback page
466
+ if fake_time:
467
+ await page.clock.install(time=fake_time)
468
+ console.print(f"[green]✅ Fake clock installed: {fake_time.isoformat()}[/green]")
469
+ if public_url:
470
+ await page.goto(public_url)
471
+
386
472
  # ALWAYS check state after login to verify no mutations
387
473
  console.print("\n[cyan]Checking environment state after login...[/cyan]")
388
474
  has_mutations = False
@@ -1,5 +1,6 @@
1
1
  """Sandbox CLI commands for Plato."""
2
2
 
3
+ import asyncio
3
4
  import base64
4
5
  import io
5
6
  import json
@@ -13,11 +14,12 @@ import tempfile
13
14
  import time
14
15
  from datetime import datetime, timezone
15
16
  from pathlib import Path
16
- from urllib.parse import quote
17
+ from urllib.parse import quote, quote_plus
17
18
 
18
19
  import typer
19
20
  import yaml
20
21
  from rich.logging import RichHandler
22
+ from sqlalchemy import create_engine, text
21
23
 
22
24
  from plato._generated.api.v1.gitea import (
23
25
  create_simulator_repository,
@@ -82,6 +84,7 @@ from plato.v1.cli.verify import sandbox_verify_app
82
84
  from plato.v2.async_.flow_executor import FlowExecutor
83
85
  from plato.v2.sync.client import Plato as PlatoV2
84
86
  from plato.v2.types import Env, SimConfigCompute
87
+ from plato.v2.utils.proxy_tunnel import ProxyTunnel, find_free_port
85
88
 
86
89
  # UUID pattern for detecting artifact IDs in colon notation
87
90
  UUID_PATTERN = re.compile(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", re.IGNORECASE)
@@ -141,7 +144,6 @@ def sandbox_start(
141
144
  disk: int = typer.Option(10240, "--disk", help="Disk in MB (blank VM)"),
142
145
  # Common options
143
146
  timeout: int = typer.Option(1800, "--timeout", help="VM lifetime in seconds (default: 30 minutes)"),
144
- no_reset: bool = typer.Option(False, "--no-reset", help="Skip initial reset after ready"),
145
147
  connect_network: bool = typer.Option(
146
148
  True, "--network/--no-network", help="Connect VMs to WireGuard network for SSH access (default: enabled)"
147
149
  ),
@@ -377,11 +379,8 @@ def sandbox_start(
377
379
  if not json_output:
378
380
  console.print(f"[yellow]Could not get public URL: {e}[/yellow]")
379
381
 
380
- # Reset environment unless --no-reset
381
- if not no_reset:
382
- if not json_output:
383
- console.print("[cyan]Resetting environment...[/cyan]")
384
- session.reset()
382
+ # Note: We don't reset here - start just launches the sandbox.
383
+ # Reset is a separate action the user can take later if needed.
385
384
 
386
385
  # Setup SSH for ALL modes (so you can SSH into any sandbox)
387
386
  ssh_private_key_path = None
@@ -1770,13 +1769,10 @@ def sandbox_clear_audit(
1770
1769
  -j, --json: Output results as JSON instead of formatted text
1771
1770
  """
1772
1771
  state = require_sandbox_state()
1772
+ job_id = state.get("job_id")
1773
1773
 
1774
- # Get SSH info
1775
- ssh_host = state.get("ssh_host")
1776
- ssh_config_path = state.get("ssh_config_path")
1777
-
1778
- if not ssh_host or not ssh_config_path:
1779
- console.print("[red]❌ SSH not configured. Missing ssh_host or ssh_config_path in .sandbox.yaml[/red]")
1774
+ if not job_id:
1775
+ console.print("[red]❌ No job_id found in .sandbox.yaml[/red]")
1780
1776
  raise typer.Exit(1)
1781
1777
 
1782
1778
  # Find plato-config.yml
@@ -1813,43 +1809,99 @@ def sandbox_clear_audit(
1813
1809
 
1814
1810
  results = []
1815
1811
 
1816
- for name, db_config in db_listeners:
1812
+ def _execute_db_cleanup(name: str, db_config: dict, local_port: int) -> dict:
1813
+ """Execute DB cleanup using sync SQLAlchemy (called after tunnel is up)."""
1817
1814
  db_type = db_config.get("db_type", "postgresql").lower()
1818
1815
  db_user = db_config.get("db_user", "postgres" if db_type == "postgresql" else "root")
1819
1816
  db_password = db_config.get("db_password", "")
1820
1817
  db_database = db_config.get("db_database", "postgres")
1821
1818
 
1822
- if not json_output:
1823
- console.print(f"[cyan]Clearing audit_log for listener '{name}' ({db_type})...[/cyan]")
1819
+ # Build SQLAlchemy URL based on db_type (sync drivers)
1820
+ user = quote_plus(db_user)
1821
+ password = quote_plus(db_password)
1822
+ database = quote_plus(db_database)
1824
1823
 
1825
- # Build SQL command based on db_type
1826
- # Use docker exec since psql/mysql aren't installed on the VM directly
1827
1824
  if db_type == "postgresql":
1828
- # Find the postgres container and truncate all audit_log tables across all schemas
1829
- # Use $body$ delimiter instead of $$ to avoid shell expansion
1830
- truncate_sql = "DO \\$body\\$ DECLARE r RECORD; BEGIN FOR r IN SELECT schemaname FROM pg_tables WHERE tablename = 'audit_log' LOOP EXECUTE format('TRUNCATE TABLE %I.audit_log RESTART IDENTITY CASCADE', r.schemaname); END LOOP; END \\$body\\$;"
1831
- sql_cmd = f"CONTAINER=$(docker ps --format '{{{{.Names}}}}\\t{{{{.Image}}}}' | grep -i postgres | head -1 | cut -f1) && docker exec $CONTAINER psql -U {db_user} -d {db_database} -c \"{truncate_sql}\""
1825
+ db_url = f"postgresql+psycopg2://{user}:{password}@127.0.0.1:{local_port}/{database}"
1832
1826
  elif db_type in ("mysql", "mariadb"):
1833
- # Find the mysql/mariadb container and exec into it
1834
- # Use mariadb client (mysql is a symlink or may not exist in newer mariadb images)
1835
- sql_cmd = f"CONTAINER=$(docker ps --format '{{{{.Names}}}}\\t{{{{.Image}}}}' | grep -iE 'mysql|mariadb' | head -1 | cut -f1) && docker exec $CONTAINER mariadb -u {db_user} -p'{db_password}' {db_database} -e 'SET FOREIGN_KEY_CHECKS=0; DELETE FROM audit_log; SET FOREIGN_KEY_CHECKS=1;'"
1827
+ db_url = f"mysql+pymysql://{user}:{password}@127.0.0.1:{local_port}/{database}"
1836
1828
  else:
1837
- if not json_output:
1838
- console.print(f"[yellow]⚠ Unsupported db_type '{db_type}' for listener '{name}'[/yellow]")
1839
- results.append({"listener": name, "success": False, "error": f"Unsupported db_type: {db_type}"})
1840
- continue
1829
+ return {"listener": name, "success": False, "error": f"Unsupported db_type: {db_type}"}
1830
+
1831
+ engine = create_engine(db_url, pool_pre_ping=True)
1832
+ tables_truncated = []
1833
+
1834
+ with engine.begin() as conn:
1835
+ if db_type == "postgresql":
1836
+ # Find and truncate audit_log tables in all schemas
1837
+ result = conn.execute(text("SELECT schemaname, tablename FROM pg_tables WHERE tablename = 'audit_log'"))
1838
+ tables = result.fetchall()
1839
+ for schema, table in tables:
1840
+ conn.execute(text(f"TRUNCATE TABLE {schema}.{table} RESTART IDENTITY CASCADE"))
1841
+ tables_truncated.append(f"{schema}.{table}")
1842
+
1843
+ elif db_type in ("mysql", "mariadb"):
1844
+ # Find and delete from audit_log tables
1845
+ result = conn.execute(
1846
+ text(
1847
+ "SELECT table_schema, table_name FROM information_schema.tables "
1848
+ "WHERE table_name = 'audit_log' AND table_schema = DATABASE()"
1849
+ )
1850
+ )
1851
+ tables = result.fetchall()
1852
+ conn.execute(text("SET FOREIGN_KEY_CHECKS = 0"))
1853
+ for schema, table in tables:
1854
+ conn.execute(text(f"DELETE FROM `{table}`"))
1855
+ tables_truncated.append(table)
1856
+ conn.execute(text("SET FOREIGN_KEY_CHECKS = 1"))
1857
+
1858
+ engine.dispose()
1859
+ return {"listener": name, "success": True, "tables_truncated": tables_truncated}
1860
+
1861
+ async def clear_audit_via_tunnel(name: str, db_config: dict) -> dict:
1862
+ """Clear audit_log by connecting via proxy tunnel."""
1863
+ db_type = db_config.get("db_type", "postgresql").lower()
1864
+ db_port = db_config.get("db_port", 5432 if db_type == "postgresql" else 3306)
1865
+
1866
+ if not json_output:
1867
+ console.print(f"[cyan]Clearing audit_log for listener '{name}' ({db_type})...[/cyan]")
1841
1868
 
1842
- # Run via SSH
1843
- ret, stdout, stderr = _run_ssh_command(ssh_config_path, ssh_host, sql_cmd)
1869
+ # Find a free local port for the tunnel
1870
+ local_port = find_free_port()
1844
1871
 
1845
- if ret == 0:
1846
- if not json_output:
1847
- console.print(f"[green]✅ Cleared audit_log for '{name}'[/green]")
1848
- results.append({"listener": name, "success": True})
1849
- else:
1872
+ # Create tunnel and connect
1873
+ tunnel = ProxyTunnel(
1874
+ env_id=job_id,
1875
+ db_port=db_port,
1876
+ temp_password="newpass",
1877
+ host_port=local_port,
1878
+ )
1879
+
1880
+ try:
1881
+ await tunnel.start()
1882
+
1883
+ # Run sync DB cleanup in a thread to avoid blocking the event loop
1884
+ result = await asyncio.to_thread(_execute_db_cleanup, name, db_config, local_port)
1885
+
1886
+ if result["success"]:
1887
+ tables_truncated = result.get("tables_truncated", [])
1888
+ if not json_output:
1889
+ console.print(f"[green]✅ Cleared audit_log for '{name}' ({len(tables_truncated)} tables)[/green]")
1890
+ return result
1891
+
1892
+ except Exception as e:
1850
1893
  if not json_output:
1851
- console.print(f"[red]❌ Failed to clear audit_log for '{name}': {stderr}[/red]")
1852
- results.append({"listener": name, "success": False, "error": stderr})
1894
+ console.print(f"[red]❌ Failed to clear audit_log for '{name}': {e}[/red]")
1895
+ return {"listener": name, "success": False, "error": str(e)}
1896
+ finally:
1897
+ await tunnel.stop()
1898
+
1899
+ # Run async cleanup for each listener
1900
+ async def run_all():
1901
+ tasks = [clear_audit_via_tunnel(name, db_config) for name, db_config in db_listeners]
1902
+ return await asyncio.gather(*tasks)
1903
+
1904
+ results = asyncio.run(run_all())
1853
1905
 
1854
1906
  # Call state API to refresh in-memory mutation cache
1855
1907
  session_id = state.get("session_id")
@@ -2300,9 +2352,33 @@ def sandbox_start_services(
2300
2352
  if not json_output:
2301
2353
  console.print(f"[green]✓ Code cloned to {repo_dir}[/green]")
2302
2354
 
2303
- # Step 6: Start services
2355
+ # Step 6: Authenticate ECR
2356
+ if not json_output:
2357
+ console.print("[cyan]Step 6: Authenticating Docker with ECR...[/cyan]")
2358
+
2359
+ ecr_registry = "383806609161.dkr.ecr.us-west-1.amazonaws.com"
2360
+ ecr_token_result = subprocess.run(
2361
+ ["aws", "ecr", "get-login-password", "--region", "us-west-1"],
2362
+ capture_output=True,
2363
+ text=True,
2364
+ )
2365
+ if ecr_token_result.returncode != 0:
2366
+ console.print(f"[red]❌ Failed to get ECR token: {ecr_token_result.stderr}[/red]")
2367
+ raise typer.Exit(1)
2368
+
2369
+ ecr_token = ecr_token_result.stdout.strip()
2370
+ docker_login_cmd = f"echo '{ecr_token}' | docker login --username AWS --password-stdin {ecr_registry}"
2371
+ ret, stdout, stderr = _run_ssh_command(ssh_config_path, ssh_host, docker_login_cmd)
2372
+ if ret != 0:
2373
+ console.print(f"[red]❌ Failed to authenticate Docker with ECR: {stderr}[/red]")
2374
+ raise typer.Exit(1)
2375
+
2376
+ if not json_output:
2377
+ console.print("[green]✓ Docker authenticated with ECR[/green]")
2378
+
2379
+ # Step 7: Start services
2304
2380
  if not json_output:
2305
- console.print("[cyan]Step 6: Starting services...[/cyan]")
2381
+ console.print("[cyan]Step 7: Starting services...[/cyan]")
2306
2382
 
2307
2383
  services_started = start_services_on_vm(repo_dir)
2308
2384
 
@@ -1 +0,0 @@
1
- 2.7.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes