plato-sdk-v2 2.7.1__tar.gz → 2.7.3__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.7.1 → plato_sdk_v2-2.7.3}/PKG-INFO +1 -1
- plato_sdk_v2-2.7.3/VERSION +1 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/pm.py +77 -27
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/utils/db_cleanup.py +7 -9
- plato_sdk_v2-2.7.3/plato/v2/utils/gateway_tunnel.py +221 -0
- plato_sdk_v2-2.7.1/VERSION +0 -1
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/.claude/agents/sim-creator.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/.gitignore +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/BUILDING_SIMS.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/README.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/ci/CLAUDE.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/ci/deploy.sh +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/ci/lint.sh +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/ci/setup.sh +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/ci/version-bump.sh +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/AGENT_SPEC.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/CLI.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/GENERATING_SIM_SDKS.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/SIMULATOR_LIFECYCLE.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/SIM_CREATOR.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/cli/agent.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/cli/flows.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/cli/pm.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/cli/sandbox.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/cli/sims.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/cli/world.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/sim-creation-pipeline.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skill-restructure-plan.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-config/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-creator/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-debugger/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-flow-audit/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-flow-clear/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-flow-run/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-research/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-review/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-snapshot/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-submit/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/sim-validate/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/skills/trajectory-analysis/SKILL.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/testcommit +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/docs/unit.sh +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/examples/test.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/examples/test_proxy_ssh.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/backup.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/cleanup.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/close.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/close_async.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/create.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/create_batch.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/create_simulator.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_active_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_flows.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_job_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_job_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_public_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_simulators.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_state.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/reset.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/score.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/env/update_simulator.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/queue/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/queue/get_vms.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/queue/get_workers.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/archive_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_sessions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/set_session_output.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/update_session_public.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/register.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/import_agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/close.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/execute.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/make.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/public_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/reset.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/set_date.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/state.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/add_member.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/create_network.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/delete_network.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/get_network.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/list_members.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/list_networks.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/remove_member.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/networks/update_member.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/pypi/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/pypi/download_package.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/pypi/package_index.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/create.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/deploy.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/handle_import.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/list_releases.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/releases/update.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/add_ssh_key.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/close.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/connect_network.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/execute.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/make.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/reset.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/set_date.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/state.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/user/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v2/user/get_current_user.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/version/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/version/check.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/client.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/errors.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/models/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/py.typed +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/cli.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/instruction.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/parser.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/python.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/artifacts.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/base.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/build.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/otel.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/runner.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/agents/trajectory.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/admin/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/admin/clear_database_api_admin_clear_db_post.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/admin/sync_agents_api_admin_sync_agents_post.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/admin/sync_all_api_admin_sync_all_post.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/admin/sync_runtimes_api_admin_sync_runtimes_post.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/admin/sync_worlds_api_admin_sync_worlds_post.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/create_agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/delete_agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/get_agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/list_agents.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/agents/lookup_agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/auth/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/checkpoints/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/checkpoints/list_checkpoints.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/checkpoints/preview_checkpoint.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/default/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/default/health.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/events/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/events/get_session_event.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/events/list_session_events.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/jobs/launch_job.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/otel/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/otel/get_session_traces_api_otel_sessions__session_id__traces_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/otel/receive_traces_api_otel_v1_traces_post.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/registry/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/runtimes/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/runtimes/create_runtime.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/runtimes/get_runtime.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/runtimes/get_runtime_logs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/runtimes/test_runtime.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/secrets/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/secrets/create_secret.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/secrets/delete_secret.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/secrets/get_secret.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/secrets/list_secrets.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/secrets/update_secret.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/close_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/complete_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/create_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/get_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/get_session_bash_logs_download.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/get_session_envs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/get_session_live_logs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/get_session_status.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/list_tags.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/sessions/update_session_tags.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/status/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/templates/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/templates/create_template.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/templates/delete_template.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/templates/get_template.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/templates/list_templates.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/templates/update_template.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/trajectories/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/worlds/create_world.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/worlds/delete_world.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/worlds/get_world.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/api/worlds/list_worlds.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/client.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/errors.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/models/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/chronos/py.typed +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/py.typed +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/sims/README.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/sims/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/sims/agent_helpers.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/sims/cli.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/sims/generate_clients.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/sims/registry.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/audit_ui.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/chronos.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/main.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/proxy.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/sandbox.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/ssh.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/templates/world-runner.Dockerfile +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/utils.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/verify.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli/world.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/cli.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/examples/doordash_tasks.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/examples/loadtest.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/examples/test_env.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/examples/test_env_custom_browser.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/examples/test_env_sync.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/examples/test_reuse_env.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/examples/test_run.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/exceptions.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/README.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/background.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/content.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/options.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/options.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/package.json +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/flow_executor.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/models/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/models/build_models.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/models/env.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/models/flow.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/models/sandbox.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/models/task.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/sandbox_sdk.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/sdk.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/sync_env.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/sync_flow_executor.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/sync_sdk.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v1/utils/proxytunnel.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/async_/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/async_/artifact.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/async_/chronos.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/async_/client.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/async_/environment.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/async_/flow_executor.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/async_/session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/models.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/sync/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/sync/artifact.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/sync/chronos.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/sync/client.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/sync/environment.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/sync/flow_executor.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/sync/session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/types.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/utils/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/utils/models.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/v2/utils/proxy_tunnel.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/worlds/README.md +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/worlds/base.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/worlds/build_hook.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/worlds/config.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/worlds/runner.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/pyproject.toml +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/scripts/get_all_artifact_targets.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/integration/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/integration/conftest.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/integration/test_browser_agent.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/integration/test_chronos_callback.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/integration/test_cleanup_snapshot.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/integration/test_code_world.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/integration/test_harbor_agent_runner.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/sims/__init__.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/sims/conftest.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/sims/test_agent_helpers.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/test_heartbeat_keepalive.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/test_session_serialization.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/test_set_date.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/test_v2_imports.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/test_v2_multisim_integration.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/test_v2_session.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/tests/test_version.py +0 -0
- {plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.7.3
|
|
@@ -544,9 +544,19 @@ def review_base(
|
|
|
544
544
|
console.print(f"[bold red]📋 Most Recent Base Review: REJECTED[/bold red] ({timestamp})")
|
|
545
545
|
else:
|
|
546
546
|
console.print(f"[bold green]📋 Most Recent Base Review: PASSED[/bold green] ({timestamp})")
|
|
547
|
-
comments
|
|
548
|
-
|
|
549
|
-
|
|
547
|
+
# Handle both old 'comments' field and new 'sim_comments' structure
|
|
548
|
+
sim_comments = recent_review.get("sim_comments")
|
|
549
|
+
if sim_comments:
|
|
550
|
+
console.print("[yellow]Reviewer Comments:[/yellow]")
|
|
551
|
+
for i, item in enumerate(sim_comments, 1):
|
|
552
|
+
comment_text = item.get("comment", "")
|
|
553
|
+
if comment_text:
|
|
554
|
+
console.print(f" {i}. {comment_text}")
|
|
555
|
+
else:
|
|
556
|
+
# Fallback to old comments field
|
|
557
|
+
comments = recent_review.get("comments")
|
|
558
|
+
if comments:
|
|
559
|
+
console.print(f"[yellow]Reviewer Comments:[/yellow] {comments}")
|
|
550
560
|
|
|
551
561
|
console.print()
|
|
552
562
|
|
|
@@ -752,8 +762,6 @@ def review_data(
|
|
|
752
762
|
simulator, artifact, require_artifact=False, command_name="review data"
|
|
753
763
|
)
|
|
754
764
|
|
|
755
|
-
# Determine target URL based on simulator
|
|
756
|
-
target_url = f"https://{simulator_name}.web.plato.so"
|
|
757
765
|
console.print(f"[cyan]Simulator:[/cyan] {simulator_name}")
|
|
758
766
|
|
|
759
767
|
# Fetch simulator config and get artifact ID if not provided
|
|
@@ -802,21 +810,21 @@ def review_data(
|
|
|
802
810
|
is_installed = "site-packages" in str(package_dir)
|
|
803
811
|
|
|
804
812
|
if is_installed:
|
|
805
|
-
extension_source_path = package_dir / "extensions" / "
|
|
813
|
+
extension_source_path = package_dir / "extensions" / "data-review"
|
|
806
814
|
else:
|
|
807
815
|
repo_root = package_dir.parent.parent.parent # plato-client/
|
|
808
|
-
extension_source_path = repo_root / "extensions" / "
|
|
816
|
+
extension_source_path = repo_root / "extensions" / "data-review"
|
|
809
817
|
|
|
810
818
|
# Fallback to env var
|
|
811
819
|
if not extension_source_path.exists():
|
|
812
820
|
plato_client_dir_env = os.getenv("PLATO_CLIENT_DIR")
|
|
813
821
|
if plato_client_dir_env:
|
|
814
|
-
env_path = Path(plato_client_dir_env) / "extensions" / "
|
|
822
|
+
env_path = Path(plato_client_dir_env) / "extensions" / "data-review"
|
|
815
823
|
if env_path.exists():
|
|
816
824
|
extension_source_path = env_path
|
|
817
825
|
|
|
818
826
|
if not extension_source_path.exists():
|
|
819
|
-
console.print("[red]❌
|
|
827
|
+
console.print("[red]❌ Data Review extension not found[/red]")
|
|
820
828
|
console.print(f"\n[yellow]Expected location:[/yellow] {extension_source_path}")
|
|
821
829
|
raise typer.Exit(1)
|
|
822
830
|
|
|
@@ -829,14 +837,44 @@ def review_data(
|
|
|
829
837
|
console.print(f"[green]✅ Extension copied to: {extension_path}[/green]")
|
|
830
838
|
|
|
831
839
|
async def _review_data():
|
|
840
|
+
base_url = _get_base_url()
|
|
841
|
+
plato = AsyncPlato(api_key=api_key, base_url=base_url)
|
|
842
|
+
session = None
|
|
832
843
|
playwright = None
|
|
833
844
|
browser = None
|
|
834
845
|
|
|
835
846
|
try:
|
|
847
|
+
# Check if we have an artifact ID to create a session
|
|
848
|
+
if not artifact_id:
|
|
849
|
+
console.print("[red]❌ No artifact ID available. Cannot create session.[/red]")
|
|
850
|
+
console.print("[yellow]Specify artifact with: plato pm review data -s simulator:artifact_id[/yellow]")
|
|
851
|
+
raise typer.Exit(1)
|
|
852
|
+
|
|
853
|
+
# Create session with artifact
|
|
854
|
+
console.print(f"[cyan]Creating {simulator_name} environment with artifact {artifact_id}...[/cyan]")
|
|
855
|
+
session = await plato.sessions.create(
|
|
856
|
+
envs=[Env.artifact(artifact_id)],
|
|
857
|
+
timeout=300,
|
|
858
|
+
)
|
|
859
|
+
console.print(f"[green]✅ Session created: {session.session_id}[/green]")
|
|
860
|
+
|
|
861
|
+
# Reset environment
|
|
862
|
+
console.print("[cyan]Resetting environment...[/cyan]")
|
|
863
|
+
await session.reset()
|
|
864
|
+
console.print("[green]✅ Environment reset complete![/green]")
|
|
865
|
+
|
|
866
|
+
# Get public URL
|
|
867
|
+
public_urls = await session.get_public_url()
|
|
868
|
+
first_alias = session.envs[0].alias if session.envs else None
|
|
869
|
+
public_url = public_urls.get(first_alias) if first_alias else None
|
|
870
|
+
if not public_url and public_urls:
|
|
871
|
+
public_url = list(public_urls.values())[0]
|
|
872
|
+
console.print(f"[cyan]Public URL:[/cyan] {public_url}")
|
|
873
|
+
|
|
836
874
|
user_data_dir = Path.home() / ".plato" / "chrome-data"
|
|
837
875
|
user_data_dir.mkdir(parents=True, exist_ok=True)
|
|
838
876
|
|
|
839
|
-
console.print("[cyan]Launching Chrome with
|
|
877
|
+
console.print("[cyan]Launching Chrome with Data Review extension...[/cyan]")
|
|
840
878
|
|
|
841
879
|
from playwright.async_api import async_playwright
|
|
842
880
|
|
|
@@ -877,13 +915,14 @@ def review_data(
|
|
|
877
915
|
else:
|
|
878
916
|
console.print("[yellow]⚠️ Could not find extension ID. Please set API key manually.[/yellow]")
|
|
879
917
|
|
|
880
|
-
#
|
|
881
|
-
console.print(
|
|
918
|
+
# Navigate to public URL (user logs in manually with displayed credentials)
|
|
919
|
+
console.print("[cyan]Opening environment...[/cyan]")
|
|
882
920
|
main_page = await browser.new_page()
|
|
883
|
-
|
|
884
|
-
|
|
921
|
+
if public_url:
|
|
922
|
+
await main_page.goto(public_url)
|
|
923
|
+
console.print(f"[green]✅ Loaded: {public_url}[/green]")
|
|
885
924
|
|
|
886
|
-
#
|
|
925
|
+
# Use options page to set API key
|
|
887
926
|
if extension_id:
|
|
888
927
|
options_page = await browser.new_page()
|
|
889
928
|
try:
|
|
@@ -907,17 +946,16 @@ def review_data(
|
|
|
907
946
|
await options_page.close()
|
|
908
947
|
|
|
909
948
|
# Bring main page to front
|
|
910
|
-
|
|
949
|
+
if main_page:
|
|
950
|
+
await main_page.bring_to_front()
|
|
911
951
|
|
|
912
952
|
console.print()
|
|
913
953
|
console.print("[bold]Instructions:[/bold]")
|
|
914
|
-
console.print(" 1. Click the
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
console.print(" 3. Use the extension to record and submit reviews")
|
|
920
|
-
console.print(" 4. When done, press Control-C to exit")
|
|
954
|
+
console.print(" 1. Click the Data Review extension icon to open the sidebar")
|
|
955
|
+
console.print(f" 2. Enter '{simulator_name}' as the simulator name and click Start Review")
|
|
956
|
+
console.print(" 3. Take screenshots and add comments for any issues")
|
|
957
|
+
console.print(" 4. Select Pass or Reject and submit the review")
|
|
958
|
+
console.print(" 5. When done, press Control-C to exit")
|
|
921
959
|
|
|
922
960
|
# Show recent review if available
|
|
923
961
|
if recent_review:
|
|
@@ -930,10 +968,20 @@ def review_data(
|
|
|
930
968
|
else:
|
|
931
969
|
console.print(f"[bold green]📋 Most Recent Data Review: PASSED[/bold green] ({timestamp})")
|
|
932
970
|
|
|
933
|
-
comments
|
|
934
|
-
|
|
971
|
+
# Handle both old 'comments' field and new 'sim_comments' structure
|
|
972
|
+
sim_comments = recent_review.get("sim_comments")
|
|
973
|
+
if sim_comments:
|
|
935
974
|
console.print("\n[yellow]Reviewer Comments:[/yellow]")
|
|
936
|
-
|
|
975
|
+
for i, item in enumerate(sim_comments, 1):
|
|
976
|
+
comment_text = item.get("comment", "")
|
|
977
|
+
if comment_text:
|
|
978
|
+
console.print(f" {i}. {comment_text}")
|
|
979
|
+
else:
|
|
980
|
+
# Fallback to old comments field
|
|
981
|
+
comments = recent_review.get("comments")
|
|
982
|
+
if comments:
|
|
983
|
+
console.print("\n[yellow]Reviewer Comments:[/yellow]")
|
|
984
|
+
console.print(f" {comments}")
|
|
937
985
|
console.print("=" * 60)
|
|
938
986
|
|
|
939
987
|
console.print()
|
|
@@ -954,6 +1002,8 @@ def review_data(
|
|
|
954
1002
|
|
|
955
1003
|
finally:
|
|
956
1004
|
try:
|
|
1005
|
+
if session:
|
|
1006
|
+
await session.close()
|
|
957
1007
|
if browser:
|
|
958
1008
|
await browser.close()
|
|
959
1009
|
if playwright:
|
|
@@ -961,7 +1011,7 @@ def review_data(
|
|
|
961
1011
|
if temp_ext_dir.exists():
|
|
962
1012
|
shutil.rmtree(temp_ext_dir, ignore_errors=True)
|
|
963
1013
|
except Exception as e:
|
|
964
|
-
console.print(f"[yellow]⚠️
|
|
1014
|
+
console.print(f"[yellow]⚠️ Cleanup error: {e}[/yellow]")
|
|
965
1015
|
|
|
966
1016
|
handle_async(_review_data())
|
|
967
1017
|
|
|
@@ -12,6 +12,7 @@ from sqlalchemy.ext.asyncio import create_async_engine
|
|
|
12
12
|
|
|
13
13
|
from plato._generated.api.v1.simulator import get_db_config
|
|
14
14
|
from plato._generated.models import DbConfigResponse
|
|
15
|
+
from plato.v2.utils.gateway_tunnel import GatewayTunnel, find_free_port
|
|
15
16
|
from plato.v2.utils.models import (
|
|
16
17
|
ApiCleanupResult,
|
|
17
18
|
DatabaseCleanupResult,
|
|
@@ -19,12 +20,10 @@ from plato.v2.utils.models import (
|
|
|
19
20
|
EnvironmentInfo,
|
|
20
21
|
SessionCleanupResult,
|
|
21
22
|
)
|
|
22
|
-
from plato.v2.utils.proxy_tunnel import
|
|
23
|
+
from plato.v2.utils.proxy_tunnel import make_db_url
|
|
23
24
|
|
|
24
25
|
logger = logging.getLogger(__name__)
|
|
25
26
|
|
|
26
|
-
TEMP_PASSWORD = "newpass"
|
|
27
|
-
|
|
28
27
|
|
|
29
28
|
class DatabaseCleaner:
|
|
30
29
|
"""Handles database audit_log cleanup operations."""
|
|
@@ -145,14 +144,13 @@ class DatabaseCleaner:
|
|
|
145
144
|
config: DbConfigResponse,
|
|
146
145
|
local_port: int,
|
|
147
146
|
) -> DatabaseCleanupResult:
|
|
148
|
-
"""Connect to a single DB via tunnel and truncate audit_log tables."""
|
|
147
|
+
"""Connect to a single DB via gateway tunnel and truncate audit_log tables."""
|
|
149
148
|
db_port = config.db_port
|
|
150
149
|
|
|
151
|
-
tunnel =
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
host_port=local_port,
|
|
150
|
+
tunnel = GatewayTunnel(
|
|
151
|
+
job_id=job_id,
|
|
152
|
+
remote_port=db_port,
|
|
153
|
+
local_port=local_port,
|
|
156
154
|
)
|
|
157
155
|
|
|
158
156
|
try:
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"""TLS + SNI gateway tunnel for database connections.
|
|
2
|
+
|
|
3
|
+
Routes traffic through gateway.plato.so:443 using SNI-based routing,
|
|
4
|
+
replacing the deprecated HTTP CONNECT proxy approach.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import asyncio
|
|
10
|
+
import logging
|
|
11
|
+
import os
|
|
12
|
+
import socket
|
|
13
|
+
import ssl
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
# Default gateway configuration
|
|
18
|
+
DEFAULT_GATEWAY_HOST = "gateway.plato.so"
|
|
19
|
+
DEFAULT_GATEWAY_PORT = 443
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_gateway_config() -> tuple[str, int]:
|
|
23
|
+
"""Get gateway host and port from environment or defaults.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
Tuple of (host, port) for the gateway.
|
|
27
|
+
"""
|
|
28
|
+
host = os.environ.get("PLATO_GATEWAY_HOST", DEFAULT_GATEWAY_HOST)
|
|
29
|
+
port = int(os.environ.get("PLATO_GATEWAY_PORT", str(DEFAULT_GATEWAY_PORT)))
|
|
30
|
+
return host, port
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def find_free_port(start_port: int = 55432) -> int:
|
|
34
|
+
"""Find the first available TCP port starting from start_port."""
|
|
35
|
+
port = start_port
|
|
36
|
+
while port < 65535:
|
|
37
|
+
try:
|
|
38
|
+
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
39
|
+
s.bind(("127.0.0.1", port))
|
|
40
|
+
return port
|
|
41
|
+
except OSError:
|
|
42
|
+
port += 1
|
|
43
|
+
raise RuntimeError(f"No free port found starting from {start_port}")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class GatewayTunnel:
|
|
47
|
+
"""Async TLS + SNI gateway tunnel for database connections.
|
|
48
|
+
|
|
49
|
+
Routes local connections through gateway.plato.so using SNI-based routing.
|
|
50
|
+
This replaces the deprecated HTTP CONNECT proxy tunnel.
|
|
51
|
+
|
|
52
|
+
Usage:
|
|
53
|
+
tunnel = GatewayTunnel(job_id="abc123", remote_port=5432, local_port=55432)
|
|
54
|
+
await tunnel.start()
|
|
55
|
+
# Connect to localhost:55432 to reach the VM's port 5432
|
|
56
|
+
await tunnel.stop()
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
def __init__(
|
|
60
|
+
self,
|
|
61
|
+
job_id: str,
|
|
62
|
+
remote_port: int,
|
|
63
|
+
local_port: int,
|
|
64
|
+
gateway_host: str | None = None,
|
|
65
|
+
gateway_port: int | None = None,
|
|
66
|
+
verify_ssl: bool = True,
|
|
67
|
+
):
|
|
68
|
+
"""Initialize the gateway tunnel.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
job_id: The job/environment ID to connect to.
|
|
72
|
+
remote_port: Port on the VM to forward to.
|
|
73
|
+
local_port: Local port to listen on.
|
|
74
|
+
gateway_host: Gateway hostname (default: from env or gateway.plato.so).
|
|
75
|
+
gateway_port: Gateway port (default: from env or 443).
|
|
76
|
+
verify_ssl: Whether to verify SSL certificates.
|
|
77
|
+
"""
|
|
78
|
+
self.job_id = job_id
|
|
79
|
+
self.remote_port = remote_port
|
|
80
|
+
self.local_port = local_port
|
|
81
|
+
self.verify_ssl = verify_ssl
|
|
82
|
+
|
|
83
|
+
# Get gateway config
|
|
84
|
+
default_host, default_port = get_gateway_config()
|
|
85
|
+
self.gateway_host = gateway_host or default_host
|
|
86
|
+
self.gateway_port = gateway_port or default_port
|
|
87
|
+
|
|
88
|
+
# SNI for routing: {job_id}--{port}.gateway.plato.so
|
|
89
|
+
self.sni = f"{job_id}--{remote_port}.{self.gateway_host}"
|
|
90
|
+
|
|
91
|
+
self._server: asyncio.AbstractServer | None = None
|
|
92
|
+
self._client_tasks: set[asyncio.Task] = set()
|
|
93
|
+
|
|
94
|
+
async def _open_gateway_connection(
|
|
95
|
+
self,
|
|
96
|
+
timeout: float = 30.0,
|
|
97
|
+
) -> tuple[asyncio.StreamReader, asyncio.StreamWriter]:
|
|
98
|
+
"""Open a TLS connection to the gateway with SNI routing.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
Tuple of (reader, writer) for the gateway connection.
|
|
102
|
+
"""
|
|
103
|
+
# Create SSL context
|
|
104
|
+
ssl_ctx = ssl.create_default_context()
|
|
105
|
+
if not self.verify_ssl:
|
|
106
|
+
ssl_ctx.check_hostname = False
|
|
107
|
+
ssl_ctx.verify_mode = ssl.CERT_NONE
|
|
108
|
+
|
|
109
|
+
# Connect with TLS, using SNI for routing
|
|
110
|
+
reader, writer = await asyncio.wait_for(
|
|
111
|
+
asyncio.open_connection(
|
|
112
|
+
self.gateway_host,
|
|
113
|
+
self.gateway_port,
|
|
114
|
+
ssl=ssl_ctx,
|
|
115
|
+
server_hostname=self.sni, # SNI determines which VM/port to route to
|
|
116
|
+
),
|
|
117
|
+
timeout=timeout,
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
# Enable TCP keepalive
|
|
121
|
+
sock = writer.get_extra_info("socket")
|
|
122
|
+
if isinstance(sock, socket.socket):
|
|
123
|
+
try:
|
|
124
|
+
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
|
125
|
+
# macOS/BSD keepalive idle time
|
|
126
|
+
TCP_KEEPALIVE = getattr(socket, "TCP_KEEPALIVE", 0x10)
|
|
127
|
+
sock.setsockopt(socket.IPPROTO_TCP, TCP_KEEPALIVE, 30)
|
|
128
|
+
except OSError:
|
|
129
|
+
pass # Best effort
|
|
130
|
+
|
|
131
|
+
return reader, writer
|
|
132
|
+
|
|
133
|
+
async def _pipe(
|
|
134
|
+
self,
|
|
135
|
+
src: asyncio.StreamReader,
|
|
136
|
+
dst: asyncio.StreamWriter,
|
|
137
|
+
) -> None:
|
|
138
|
+
"""Forward data from src to dst until EOF."""
|
|
139
|
+
try:
|
|
140
|
+
while True:
|
|
141
|
+
data = await src.read(65536)
|
|
142
|
+
if not data:
|
|
143
|
+
break
|
|
144
|
+
dst.write(data)
|
|
145
|
+
await dst.drain()
|
|
146
|
+
except (ConnectionResetError, BrokenPipeError, OSError):
|
|
147
|
+
pass
|
|
148
|
+
finally:
|
|
149
|
+
try:
|
|
150
|
+
dst.close()
|
|
151
|
+
await dst.wait_closed()
|
|
152
|
+
except Exception:
|
|
153
|
+
pass
|
|
154
|
+
|
|
155
|
+
async def _handle_client(
|
|
156
|
+
self,
|
|
157
|
+
client_reader: asyncio.StreamReader,
|
|
158
|
+
client_writer: asyncio.StreamWriter,
|
|
159
|
+
) -> None:
|
|
160
|
+
"""Handle a single client connection by forwarding through gateway."""
|
|
161
|
+
task = asyncio.current_task()
|
|
162
|
+
if task:
|
|
163
|
+
self._client_tasks.add(task)
|
|
164
|
+
|
|
165
|
+
try:
|
|
166
|
+
# Connect to gateway via TLS with SNI
|
|
167
|
+
gateway_reader, gateway_writer = await self._open_gateway_connection()
|
|
168
|
+
|
|
169
|
+
# Bidirectional forwarding
|
|
170
|
+
await asyncio.gather(
|
|
171
|
+
self._pipe(client_reader, gateway_writer),
|
|
172
|
+
self._pipe(gateway_reader, client_writer),
|
|
173
|
+
)
|
|
174
|
+
except Exception as e:
|
|
175
|
+
logger.warning(f"Gateway tunnel error: {e}")
|
|
176
|
+
try:
|
|
177
|
+
client_writer.close()
|
|
178
|
+
await client_writer.wait_closed()
|
|
179
|
+
except Exception:
|
|
180
|
+
pass
|
|
181
|
+
finally:
|
|
182
|
+
if task:
|
|
183
|
+
self._client_tasks.discard(task)
|
|
184
|
+
|
|
185
|
+
async def start(self) -> None:
|
|
186
|
+
"""Start the gateway tunnel server."""
|
|
187
|
+
logger.info(
|
|
188
|
+
f"Starting gateway tunnel: localhost:{self.local_port} -> "
|
|
189
|
+
f"{self.job_id}:{self.remote_port} via {self.gateway_host}"
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
self._server = await asyncio.start_server(
|
|
193
|
+
self._handle_client,
|
|
194
|
+
host="127.0.0.1",
|
|
195
|
+
port=self.local_port,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# Small delay to ensure binding is settled
|
|
199
|
+
await asyncio.sleep(0.1)
|
|
200
|
+
|
|
201
|
+
if not self._server.sockets:
|
|
202
|
+
raise RuntimeError("Gateway tunnel failed to start: no listening sockets")
|
|
203
|
+
|
|
204
|
+
logger.info(f"Gateway tunnel established on port {self.local_port}")
|
|
205
|
+
|
|
206
|
+
async def stop(self) -> None:
|
|
207
|
+
"""Stop the gateway tunnel server."""
|
|
208
|
+
if self._server is not None:
|
|
209
|
+
logger.info("Stopping gateway tunnel")
|
|
210
|
+
|
|
211
|
+
# Stop accepting new connections
|
|
212
|
+
self._server.close()
|
|
213
|
+
await self._server.wait_closed()
|
|
214
|
+
self._server = None
|
|
215
|
+
|
|
216
|
+
# Cancel active client tasks
|
|
217
|
+
for t in list(self._client_tasks):
|
|
218
|
+
t.cancel()
|
|
219
|
+
self._client_tasks.clear()
|
|
220
|
+
|
|
221
|
+
logger.info("Gateway tunnel stopped")
|
plato_sdk_v2-2.7.1/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.7.1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/agent_artifacts/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py
RENAMED
|
File without changes
|
{plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_dispatchers.py
RENAMED
|
File without changes
|
{plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_nodes_status.py
RENAMED
|
File without changes
|
{plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py
RENAMED
|
File without changes
|
{plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/get_snapshots_status.py
RENAMED
|
File without changes
|
|
File without changes
|
{plato_sdk_v2-2.7.1 → plato_sdk_v2-2.7.3}/plato/_generated/api/v1/cluster/prefetch_snapshot.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|