plato-sdk-v2 2.8.7__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.
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/PKG-INFO +1 -1
- plato_sdk_v2-2.8.8/VERSION +1 -0
- plato_sdk_v2-2.8.8/examples/preview_local_dev.py +250 -0
- plato_sdk_v2-2.8.8/examples/snapshot_docker_image.py +115 -0
- plato_sdk_v2-2.8.8/examples/snapshot_local_dev.py +206 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/models/__init__.py +20 -8
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/chronos.py +76 -13
- plato_sdk_v2-2.8.8/plato/cli/compose.py +1379 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/main.py +4 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/sandbox.py +62 -14
- plato_sdk_v2-2.8.8/plato/cli/session.py +492 -0
- plato_sdk_v2-2.8.8/plato/v2/async_/environment.py +768 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/async_/session.py +45 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/environment.py +6 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/sandbox.py +235 -37
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/session.py +9 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/types.py +46 -15
- plato_sdk_v2-2.8.7/VERSION +0 -1
- plato_sdk_v2-2.8.7/plato/v2/async_/environment.py +0 -196
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/.claude/agents/sim-creator.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/.gitignore +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/BUILDING_SIMS.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/README.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/ci/CLAUDE.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/ci/deploy.sh +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/ci/lint.sh +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/ci/setup.sh +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/ci/version-bump.sh +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/AGENT_SPEC.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/CLI.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/GENERATING_SIM_SDKS.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/SIMULATOR_LIFECYCLE.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/SIM_CREATOR.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/cli/agent.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/cli/flows.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/cli/pm.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/cli/sandbox.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/cli/sims.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/cli/world.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/sim-creation-pipeline.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skill-restructure-plan.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-config/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-creator/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-debugger/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-audit/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-clear/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-flow-run/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-research/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-review/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-snapshot/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-submit/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/sim-validate/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/skills/trajectory-analysis/SKILL.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/testcommit +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/docs/unit.sh +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/examples/test_session_isolation.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/examples/test_session_network.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/backup.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/cleanup.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/close.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/close_async.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/create.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/create_batch.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/create_simulator.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_active_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_flows.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_job_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_job_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_public_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_simulators.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_state.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/reset.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/score.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/env/update_simulator.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_vms.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/queue/get_workers.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/archive_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_sessions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/set_session_output.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/update_session_public.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/session/upload_review_screenshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/register.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/assign_testcases_to_work_order_item.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/clear_all.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/clear_single_cache.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/delete_key.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/get_stats.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/admin/cache/list_cache_names.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/import_agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/close.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/execute.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/heartbeat.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/make.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/public_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/rdp_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/reset.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/set_date.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/state.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/add_member.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/create_network.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/delete_network.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/get_network.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/list_members.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/list_networks.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/remove_member.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/networks/update_member.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/download_package.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/package_index.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/create.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/deploy.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/handle_import.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/list_releases.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/prep_release_from_work_order.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/releases/update.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/add_job.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/add_ssh_key.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/close.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/connect_network.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/execute.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_rdp_url.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/make.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/remove_job.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/reset.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/set_date.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/state.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/user/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/user/get_current_user.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/archive_work_order.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/archive_work_order_item.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/create_work_order.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/create_work_order_item.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/get_work_order.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/v2/work_orders/list_work_orders.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/version/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/api/version/check.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/client.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/errors.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_generated/py.typed +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/cli.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/instruction.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/parser.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/python.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/artifacts.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/base.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/build.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/otel.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/runner.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/agents/trajectory.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/create_agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/delete_agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/get_agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/list_agents.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/agents/lookup_agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/checkpoints/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/checkpoints/list_checkpoints.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/checkpoints/preview_checkpoint.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/default/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/default/health.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/events/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/events/get_session_event.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/events/list_session_events.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/jobs/launch_job.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/otel/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/create_runtime.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/get_runtime.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/get_runtime_logs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/runtimes/test_runtime.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/create_secret.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/delete_secret.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/get_secret.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/list_secrets.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/secrets/update_secret.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/close_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/complete_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/create_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_bash_logs_download.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_envs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_live_logs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/get_session_status.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/list_session_creators.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/list_tags.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/sessions/update_session_tags.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/status/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/create_template.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/delete_template.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/get_template.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/list_templates.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/templates/update_template.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/trajectories/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/create_world.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/delete_world.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/get_world.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/api/worlds/list_worlds.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/client.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/errors.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/models/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/chronos/py.typed +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/audit_ui.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/pm.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/proxy.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/utils.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/verify.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/cli/world.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/py.typed +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/sims/README.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/sims/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/sims/agent_helpers.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/sims/cli.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/sims/generate_clients.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/sims/registry.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/audit_ui.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/chronos.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/main.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/pm.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/proxy.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/sandbox.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/ssh.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/templates/world-runner.Dockerfile +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/utils.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/verify.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli/world.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/cli.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/examples/doordash_tasks.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/examples/loadtest.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_env.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_env_custom_browser.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_env_sync.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_reuse_env.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/examples/test_run.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/exceptions.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/README.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/background.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/content.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/options.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/options.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/package.json +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/flow_executor.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/models/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/models/build_models.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/models/env.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/models/flow.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/models/sandbox.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/models/task.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/sandbox_sdk.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/sdk.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/sync_env.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/sync_flow_executor.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/sync_sdk.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v1/utils/proxytunnel.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/async_/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/async_/artifact.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/async_/chronos.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/async_/client.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/async_/flow_executor.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/models.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/artifact.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/chronos.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/client.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/sync/flow_executor.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/utils/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/utils/db_cleanup.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/utils/gateway_tunnel.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/utils/models.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/v2/utils/proxy_tunnel.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/worlds/README.md +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/worlds/base.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/worlds/build_hook.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/worlds/config.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/plato/worlds/runner.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/pyproject.toml +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/scripts/get_all_artifact_targets.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/integration/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/integration/conftest.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/integration/test_browser_agent.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/integration/test_chronos_callback.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/integration/test_cleanup_snapshot.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/integration/test_code_world.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/integration/test_harbor_agent_runner.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/sims/__init__.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/sims/conftest.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/sims/test_agent_helpers.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/test_heartbeat_keepalive.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/test_session_serialization.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/test_set_date.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/test_v2_imports.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/test_v2_multisim_integration.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/test_v2_session.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/tests/test_version.py +0 -0
- {plato_sdk_v2-2.8.7 → plato_sdk_v2-2.8.8}/uv.lock +0 -0
|
@@ -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:
|
|
3
|
-
# timestamp: 2026-02-
|
|
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")] =
|
|
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
|
|
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:
|
|
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")] =
|
|
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
|
|
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[
|
|
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
|
"""
|