plato-sdk-v2 2.3.1__tar.gz → 2.3.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.3.1 → plato_sdk_v2-2.3.3}/PKG-INFO +3 -1
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/README.md +2 -0
- plato_sdk_v2-2.3.3/VERSION +1 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/SIMULATOR_LIFECYCLE.md +1 -2
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/SIM-CREATION-ARCHITECTURE.md +1 -9
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-debugger/SKILL.md +1 -15
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-sandbox-services/SKILL.md +0 -1
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/agents/__init__.py +4 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/agents/logging.py +114 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/agents/runner.py +2 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/main.py +0 -2
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/sandbox.py +192 -50
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/ssh.py +16 -4
- plato_sdk_v2-2.3.3/plato/v1/cli/verify.py +685 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/worlds/__init__.py +3 -1
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/worlds/base.py +276 -2
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/worlds/config.py +38 -1
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/worlds/runner.py +97 -45
- plato_sdk_v2-2.3.1/VERSION +0 -1
- plato_sdk_v2-2.3.1/plato/v1/cli/sim.py +0 -11
- plato_sdk_v2-2.3.1/plato/v1/cli/verify.py +0 -1269
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/.claude/agents/sim-creator.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/.gitignore +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/.sandbox.yaml +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/BUILDING_SIMS.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/ci/CLAUDE.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/ci/deploy.sh +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/ci/lint.sh +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/ci/setup.sh +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/ci/version-bump.sh +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/AGENT_SPEC.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/CLI.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/GENERATING_SIM_SDKS.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/SIM_CREATOR.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/cli/agent.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/cli/flows.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/cli/pm.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/cli/sandbox.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/cli/sims.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/cli/world.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/sim-creation-pipeline.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skill-restructure-plan.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-config/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-creator/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-flow-audit/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-flow-clear/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-flow-run/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-research/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-review/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-snapshot/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-submit/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/skills/sim-validate/SKILL.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/testcommit +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/docs/unit.sh +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/backup.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/cleanup.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/close.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/close_async.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/create.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/create_batch.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/create_simulator.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_active_session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_flows.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_job_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_job_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_public_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_simulators.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_state.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/reset.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/score.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/env/update_simulator.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/queue/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/queue/get_vms.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/queue/get_workers.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/archive_session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_sessions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/set_session_output.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/update_session_public.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/register.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/import_agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/close.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/execute.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/make.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/public_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/reset.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/set_date.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/state.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/pypi/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/pypi/download_package.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/pypi/package_index.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/create.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/deploy.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/handle_import.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/list_releases.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/releases/update.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/close.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/execute.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/make.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/reset.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/set_date.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/state.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/user/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/v2/user/get_current_user.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/version/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/api/version/check.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/client.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/errors.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_generated/py.typed +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/cli.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/instruction.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/parser.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/python.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/agents/base.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/agents/build.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/agents/config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/agents/trajectory.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/create_agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/delete_agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/get_agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/list_agents.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/agents/lookup_agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/auth/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/callback/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/callback/push_agent_logs.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/callback/update_agent_status.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/callback/upload_artifacts.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/callback/upload_logs_zip.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/callback/upload_trajectory.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/default/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/default/health.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/jobs/launch_job.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/registry/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/runtimes/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/runtimes/create_runtime.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/runtimes/get_runtime.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/runtimes/test_runtime.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/secrets/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/secrets/create_secret.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/secrets/delete_secret.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/secrets/get_secret.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/secrets/list_secrets.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/secrets/update_secret.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/sessions/get_session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/status/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/templates/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/templates/create_template.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/templates/delete_template.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/templates/get_template.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/templates/list_templates.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/templates/update_template.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/trajectories/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/worlds/create_world.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/worlds/delete_world.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/worlds/get_world.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/api/worlds/list_worlds.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/client.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/errors.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/chronos/py.typed +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/py.typed +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/sims/README.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/sims/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/sims/agent_helpers.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/sims/cli.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/sims/generate_clients.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/sims/registry.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/audit_ui.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/pm.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/utils.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli/world.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/cli.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/config.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/examples/doordash_tasks.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/examples/loadtest.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/examples/test_env.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/examples/test_env_custom_browser.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/examples/test_env_sync.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/examples/test_reuse_env.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/examples/test_run.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/exceptions.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/README.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/background.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/content.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/options.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/options.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/package.json +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/models/build_models.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/models/env.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/models/flow.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/models/sandbox.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/models/task.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/sandbox_sdk.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/sdk.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/sync_env.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/sync_flow_executor.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/sync_sdk.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v1/utils/proxytunnel.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/async_/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/async_/artifact.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/async_/client.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/async_/environment.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/async_/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/async_/session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/models.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/sync/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/sync/artifact.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/sync/client.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/sync/environment.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/sync/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/sync/session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/types.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/utils/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/utils/db_cleanup.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/utils/models.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/v2/utils/proxy_tunnel.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/worlds/README.md +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/plato/worlds/build_hook.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/pyproject.toml +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/scripts/get_all_artifact_targets.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/integration/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/integration/conftest.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/integration/test_browser_agent.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/integration/test_chronos_callback.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/integration/test_cleanup_snapshot.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/integration/test_code_world.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/integration/test_harbor_agent_runner.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/sims/__init__.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/sims/conftest.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/sims/test_agent_helpers.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/test_heartbeat_keepalive.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/test_session_serialization.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/test_set_date.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/test_v2_imports.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/test_v2_multisim_integration.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/test_v2_session.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/tests/test_version.py +0 -0
- {plato_sdk_v2-2.3.1 → plato_sdk_v2-2.3.3}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plato-sdk-v2
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.3
|
|
4
4
|
Summary: Python SDK for the Plato API
|
|
5
5
|
Author-email: Plato <support@plato.so>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,6 +44,8 @@ Description-Content-Type: text/markdown
|
|
|
44
44
|
|
|
45
45
|
# Plato Python SDK
|
|
46
46
|
|
|
47
|
+
|
|
48
|
+
|
|
47
49
|
Python SDK for the Plato platform. Uses [Harbor](https://harborframework.com) for agent execution.
|
|
48
50
|
|
|
49
51
|
## Installation
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.3.3
|
|
@@ -425,9 +425,8 @@ plato sandbox start --from-config # or --simulator
|
|
|
425
425
|
|
|
426
426
|
### Docker Compose Not Starting
|
|
427
427
|
|
|
428
|
-
Use the user docker socket:
|
|
429
428
|
```bash
|
|
430
|
-
|
|
429
|
+
docker compose up -d
|
|
431
430
|
```
|
|
432
431
|
|
|
433
432
|
### Login Flow Failing
|
|
@@ -343,16 +343,9 @@ ssh -F ~/.plato/ssh_42.conf sandbox-42
|
|
|
343
343
|
### CRITICAL: Two Docker Sockets on VM
|
|
344
344
|
|
|
345
345
|
```bash
|
|
346
|
-
#
|
|
347
|
-
docker ps # Shows only plato-worker
|
|
348
|
-
|
|
349
|
-
# App socket - has actual app containers (db, app, proxy)
|
|
350
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
351
|
-
docker ps # Shows kimai-db, kimai-app, kimai-nginx, etc.
|
|
346
|
+
docker ps # Shows all containers including db, app, proxy
|
|
352
347
|
```
|
|
353
348
|
|
|
354
|
-
**Always use the app socket for debugging!**
|
|
355
|
-
|
|
356
349
|
### Code Path on VM
|
|
357
350
|
|
|
358
351
|
```
|
|
@@ -361,7 +354,6 @@ docker ps # Shows kimai-db, kimai-app, kimai-nginx, etc.
|
|
|
361
354
|
|
|
362
355
|
```bash
|
|
363
356
|
# On VM: iterate fast
|
|
364
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
365
357
|
cd /home/plato/worktree/{sim_name}/base
|
|
366
358
|
docker compose down && docker compose up -d
|
|
367
359
|
docker compose logs -f
|
|
@@ -40,17 +40,6 @@ sim_path: "/path/to/sim"
|
|
|
40
40
|
|
|
41
41
|
### CRITICAL: Two Docker Sockets
|
|
42
42
|
|
|
43
|
-
The VM has **two Docker sockets**:
|
|
44
|
-
|
|
45
|
-
| Socket | Contains | When to Use |
|
|
46
|
-
|--------|----------|-------------|
|
|
47
|
-
| Default | `plato-worker` only | Never for debugging app |
|
|
48
|
-
| `/var/run/docker-user.sock` | App containers (db, app, proxy) | **Always use this** |
|
|
49
|
-
|
|
50
|
-
**Always export before running docker commands:**
|
|
51
|
-
```bash
|
|
52
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
53
|
-
```
|
|
54
43
|
|
|
55
44
|
### CRITICAL: Code Path
|
|
56
45
|
|
|
@@ -69,10 +58,7 @@ Instead, iterate directly on the VM:
|
|
|
69
58
|
# 1. SSH into VM
|
|
70
59
|
ssh -F {ssh_config} sandbox-{id}
|
|
71
60
|
|
|
72
|
-
# 2.
|
|
73
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
74
|
-
|
|
75
|
-
# 3. Go to code directory
|
|
61
|
+
# 2. Go to code directory
|
|
76
62
|
cd /home/plato/worktree/{sim_name}/base
|
|
77
63
|
|
|
78
64
|
# 4. Edit files directly
|
|
@@ -85,6 +85,8 @@ __all__ = [
|
|
|
85
85
|
"span",
|
|
86
86
|
"log_event",
|
|
87
87
|
"upload_artifacts",
|
|
88
|
+
"upload_artifact",
|
|
89
|
+
"upload_checkpoint",
|
|
88
90
|
"reset_logging",
|
|
89
91
|
]
|
|
90
92
|
|
|
@@ -102,7 +104,9 @@ from plato.agents.logging import (
|
|
|
102
104
|
log_event,
|
|
103
105
|
reset_logging,
|
|
104
106
|
span,
|
|
107
|
+
upload_artifact,
|
|
105
108
|
upload_artifacts,
|
|
109
|
+
upload_checkpoint,
|
|
106
110
|
)
|
|
107
111
|
from plato.agents.runner import run_agent
|
|
108
112
|
from plato.agents.trajectory import (
|
|
@@ -399,3 +399,117 @@ async def upload_artifacts(dir_path: str) -> str | None:
|
|
|
399
399
|
except Exception as e:
|
|
400
400
|
logger.warning(f"Failed to upload artifacts: {e}")
|
|
401
401
|
return None
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
# =============================================================================
|
|
405
|
+
# Artifact Upload (Generic)
|
|
406
|
+
# =============================================================================
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
async def upload_artifact(
|
|
410
|
+
data: bytes,
|
|
411
|
+
artifact_type: str,
|
|
412
|
+
filename: str | None = None,
|
|
413
|
+
extra: dict[str, Any] | None = None,
|
|
414
|
+
) -> dict[str, Any] | None:
|
|
415
|
+
"""Upload an artifact to Chronos.
|
|
416
|
+
|
|
417
|
+
Artifacts are stored in S3 and linked to the session in the database.
|
|
418
|
+
|
|
419
|
+
Args:
|
|
420
|
+
data: Raw bytes of the artifact
|
|
421
|
+
artifact_type: Type of artifact (e.g., "state", "logs", "trajectory")
|
|
422
|
+
filename: Optional filename for the artifact
|
|
423
|
+
extra: Optional extra data to store with the artifact
|
|
424
|
+
|
|
425
|
+
Returns:
|
|
426
|
+
Dict with artifact_id and s3_url if successful, None otherwise.
|
|
427
|
+
"""
|
|
428
|
+
chronos = _ChronosLogger._instance
|
|
429
|
+
if not chronos or not chronos.enabled:
|
|
430
|
+
return None
|
|
431
|
+
|
|
432
|
+
try:
|
|
433
|
+
data_base64 = base64.b64encode(data).decode("utf-8")
|
|
434
|
+
logger.info(f"Uploading artifact: type={artifact_type}, size={len(data)} bytes")
|
|
435
|
+
except Exception as e:
|
|
436
|
+
logger.warning(f"Failed to encode artifact: {e}")
|
|
437
|
+
return None
|
|
438
|
+
|
|
439
|
+
try:
|
|
440
|
+
async with httpx.AsyncClient(timeout=120.0) as client:
|
|
441
|
+
response = await client.post(
|
|
442
|
+
f"{chronos.callback_url}/artifact",
|
|
443
|
+
json={
|
|
444
|
+
"session_id": chronos.session_id,
|
|
445
|
+
"artifact_type": artifact_type,
|
|
446
|
+
"data_base64": data_base64,
|
|
447
|
+
"filename": filename,
|
|
448
|
+
"extra": extra or {},
|
|
449
|
+
},
|
|
450
|
+
)
|
|
451
|
+
if response.status_code == 200:
|
|
452
|
+
result = response.json()
|
|
453
|
+
logger.info(f"Uploaded artifact: {result}")
|
|
454
|
+
return result
|
|
455
|
+
else:
|
|
456
|
+
logger.warning(f"Failed to upload artifact: {response.status_code} {response.text}")
|
|
457
|
+
return None
|
|
458
|
+
except Exception as e:
|
|
459
|
+
logger.warning(f"Failed to upload artifact: {e}")
|
|
460
|
+
return None
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
# =============================================================================
|
|
464
|
+
# Checkpoint Upload
|
|
465
|
+
# =============================================================================
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
async def upload_checkpoint(
|
|
469
|
+
step_number: int,
|
|
470
|
+
env_snapshots: dict[str, str],
|
|
471
|
+
state_artifact_id: str | None = None,
|
|
472
|
+
extra: dict[str, Any] | None = None,
|
|
473
|
+
) -> dict[str, Any] | None:
|
|
474
|
+
"""Upload checkpoint data to Chronos.
|
|
475
|
+
|
|
476
|
+
A checkpoint includes:
|
|
477
|
+
- Environment snapshots (artifact IDs per env alias)
|
|
478
|
+
- State artifact (git bundle of /state directory)
|
|
479
|
+
- Extra data (step number, timestamp, etc.)
|
|
480
|
+
|
|
481
|
+
Args:
|
|
482
|
+
step_number: The step number when this checkpoint was created
|
|
483
|
+
env_snapshots: Dict mapping env alias to artifact_id
|
|
484
|
+
state_artifact_id: Artifact ID of the state bundle (from upload_artifact)
|
|
485
|
+
extra: Optional additional data
|
|
486
|
+
|
|
487
|
+
Returns:
|
|
488
|
+
Dict with checkpoint_id if successful, None otherwise.
|
|
489
|
+
"""
|
|
490
|
+
chronos = _ChronosLogger._instance
|
|
491
|
+
if not chronos or not chronos.enabled:
|
|
492
|
+
return None
|
|
493
|
+
|
|
494
|
+
try:
|
|
495
|
+
async with httpx.AsyncClient(timeout=60.0) as client:
|
|
496
|
+
response = await client.post(
|
|
497
|
+
f"{chronos.callback_url}/checkpoint",
|
|
498
|
+
json={
|
|
499
|
+
"session_id": chronos.session_id,
|
|
500
|
+
"step_number": step_number,
|
|
501
|
+
"env_snapshots": env_snapshots,
|
|
502
|
+
"state_artifact_id": state_artifact_id,
|
|
503
|
+
"extra": extra or {},
|
|
504
|
+
},
|
|
505
|
+
)
|
|
506
|
+
if response.status_code == 200:
|
|
507
|
+
result = response.json()
|
|
508
|
+
logger.info(f"Uploaded checkpoint: step={step_number}, checkpoint_id={result.get('checkpoint_id')}")
|
|
509
|
+
return result
|
|
510
|
+
else:
|
|
511
|
+
logger.warning(f"Failed to upload checkpoint: {response.status_code} {response.text}")
|
|
512
|
+
return None
|
|
513
|
+
except Exception as e:
|
|
514
|
+
logger.warning(f"Failed to upload checkpoint: {e}")
|
|
515
|
+
return None
|
|
@@ -11,7 +11,6 @@ from dotenv import load_dotenv
|
|
|
11
11
|
from plato.v1.cli.agent import agent_app
|
|
12
12
|
from plato.v1.cli.pm import pm_app
|
|
13
13
|
from plato.v1.cli.sandbox import sandbox_app
|
|
14
|
-
from plato.v1.cli.sim import sim_app
|
|
15
14
|
from plato.v1.cli.utils import console
|
|
16
15
|
from plato.v1.cli.world import world_app
|
|
17
16
|
|
|
@@ -70,7 +69,6 @@ app = typer.Typer(help="[bold blue]Plato CLI[/bold blue] - Manage Plato environm
|
|
|
70
69
|
# Register sub-apps
|
|
71
70
|
app.add_typer(sandbox_app, name="sandbox")
|
|
72
71
|
app.add_typer(pm_app, name="pm")
|
|
73
|
-
app.add_typer(sim_app, name="sim")
|
|
74
72
|
app.add_typer(agent_app, name="agent")
|
|
75
73
|
app.add_typer(world_app, name="world")
|
|
76
74
|
|
|
@@ -516,7 +516,6 @@ def sandbox_start(
|
|
|
516
516
|
console.print(f" [cyan]Public URL:[/cyan] {display_url}")
|
|
517
517
|
if ssh_host and ssh_config_path:
|
|
518
518
|
console.print(f" [cyan]SSH:[/cyan] ssh -F {ssh_config_path} {ssh_host}")
|
|
519
|
-
console.print(" [cyan]Docker:[/cyan] export DOCKER_HOST=unix:///var/run/docker-user.sock")
|
|
520
519
|
console.print(f"\n[dim]State saved to {SANDBOX_FILE}[/dim]")
|
|
521
520
|
|
|
522
521
|
except Exception as e:
|
|
@@ -1737,6 +1736,148 @@ def sandbox_state_cmd(
|
|
|
1737
1736
|
raise typer.Exit(1)
|
|
1738
1737
|
|
|
1739
1738
|
|
|
1739
|
+
@sandbox_app.command(name="clear-audit")
|
|
1740
|
+
def sandbox_clear_audit(
|
|
1741
|
+
config_path: Path | None = typer.Option(None, "--config-path", help="Path to plato-config.yml"),
|
|
1742
|
+
dataset: str = typer.Option("base", "--dataset", "-d", help="Dataset name"),
|
|
1743
|
+
json_output: bool = typer.Option(False, "--json", "-j", help="Output as JSON"),
|
|
1744
|
+
):
|
|
1745
|
+
"""
|
|
1746
|
+
Clear the audit_log table(s) in the sandbox database.
|
|
1747
|
+
|
|
1748
|
+
Truncates all audit_log tables to reset mutation tracking. Use this after
|
|
1749
|
+
initial setup/login to clear any mutations before running a clean login flow.
|
|
1750
|
+
|
|
1751
|
+
REQUIRES:
|
|
1752
|
+
|
|
1753
|
+
.sandbox.yaml in current directory (created by 'plato sandbox start')
|
|
1754
|
+
plato-config.yml with database listener config
|
|
1755
|
+
|
|
1756
|
+
USAGE:
|
|
1757
|
+
|
|
1758
|
+
plato sandbox clear-audit # Uses plato-config.yml in cwd
|
|
1759
|
+
plato sandbox clear-audit -d base # Specify dataset
|
|
1760
|
+
plato sandbox clear-audit --json # JSON output
|
|
1761
|
+
|
|
1762
|
+
WORKFLOW POSITION:
|
|
1763
|
+
|
|
1764
|
+
1. plato sandbox start -c
|
|
1765
|
+
2. plato sandbox start-services
|
|
1766
|
+
3. plato sandbox start-worker --wait
|
|
1767
|
+
4. (agent does initial login/setup, generating mutations)
|
|
1768
|
+
5. plato sandbox clear-audit ← you are here
|
|
1769
|
+
6. plato sandbox flow ← clean login flow
|
|
1770
|
+
7. plato sandbox state --verify-no-mutations ← should pass now
|
|
1771
|
+
8. plato sandbox snapshot
|
|
1772
|
+
"""
|
|
1773
|
+
state = require_sandbox_state()
|
|
1774
|
+
|
|
1775
|
+
# Get SSH info
|
|
1776
|
+
ssh_host = state.get("ssh_host")
|
|
1777
|
+
ssh_config_path = state.get("ssh_config_path")
|
|
1778
|
+
|
|
1779
|
+
if not ssh_host or not ssh_config_path:
|
|
1780
|
+
console.print("[red]❌ SSH not configured. Missing ssh_host or ssh_config_path in .sandbox.yaml[/red]")
|
|
1781
|
+
raise typer.Exit(1)
|
|
1782
|
+
|
|
1783
|
+
# Find plato-config.yml
|
|
1784
|
+
if not config_path:
|
|
1785
|
+
config_path = Path.cwd() / "plato-config.yml"
|
|
1786
|
+
if not config_path.exists():
|
|
1787
|
+
config_path = Path.cwd() / "plato-config.yaml"
|
|
1788
|
+
if not config_path.exists():
|
|
1789
|
+
console.print("[red]❌ plato-config.yml not found[/red]")
|
|
1790
|
+
raise typer.Exit(1)
|
|
1791
|
+
|
|
1792
|
+
with open(config_path) as f:
|
|
1793
|
+
plato_config = yaml.safe_load(f)
|
|
1794
|
+
|
|
1795
|
+
# Get dataset config
|
|
1796
|
+
datasets = plato_config.get("datasets", {})
|
|
1797
|
+
if dataset not in datasets:
|
|
1798
|
+
console.print(f"[red]❌ Dataset '{dataset}' not found[/red]")
|
|
1799
|
+
raise typer.Exit(1)
|
|
1800
|
+
|
|
1801
|
+
dataset_config = datasets[dataset]
|
|
1802
|
+
listeners = dataset_config.get("listeners", {})
|
|
1803
|
+
|
|
1804
|
+
# Find DB listeners
|
|
1805
|
+
db_listeners = []
|
|
1806
|
+
for name, listener in listeners.items():
|
|
1807
|
+
if isinstance(listener, dict) and listener.get("type") == "db":
|
|
1808
|
+
db_listeners.append((name, listener))
|
|
1809
|
+
|
|
1810
|
+
if not db_listeners:
|
|
1811
|
+
console.print("[red]❌ No database listeners found in plato-config.yml[/red]")
|
|
1812
|
+
console.print("[yellow]Expected: datasets.<dataset>.listeners.<name>.type = 'db'[/yellow]")
|
|
1813
|
+
raise typer.Exit(1)
|
|
1814
|
+
|
|
1815
|
+
results = []
|
|
1816
|
+
|
|
1817
|
+
for name, db_config in db_listeners:
|
|
1818
|
+
db_type = db_config.get("db_type", "postgresql").lower()
|
|
1819
|
+
db_host = db_config.get("db_host", "127.0.0.1")
|
|
1820
|
+
db_port = db_config.get("db_port", 5432 if db_type == "postgresql" else 3306)
|
|
1821
|
+
db_user = db_config.get("db_user", "postgres" if db_type == "postgresql" else "root")
|
|
1822
|
+
db_password = db_config.get("db_password", "")
|
|
1823
|
+
db_database = db_config.get("db_database", "postgres")
|
|
1824
|
+
|
|
1825
|
+
if not json_output:
|
|
1826
|
+
console.print(f"[cyan]Clearing audit_log for listener '{name}' ({db_type})...[/cyan]")
|
|
1827
|
+
|
|
1828
|
+
# Build SQL command based on db_type
|
|
1829
|
+
if db_type == "postgresql":
|
|
1830
|
+
sql_cmd = f"PGPASSWORD='{db_password}' psql -h {db_host} -p {db_port} -U {db_user} -d {db_database} -c 'TRUNCATE TABLE audit_log RESTART IDENTITY CASCADE'"
|
|
1831
|
+
elif db_type in ("mysql", "mariadb"):
|
|
1832
|
+
sql_cmd = f"mysql -h {db_host} -P {db_port} -u {db_user} -p'{db_password}' {db_database} -e 'SET FOREIGN_KEY_CHECKS=0; DELETE FROM audit_log; SET FOREIGN_KEY_CHECKS=1;'"
|
|
1833
|
+
else:
|
|
1834
|
+
if not json_output:
|
|
1835
|
+
console.print(f"[yellow]⚠ Unsupported db_type '{db_type}' for listener '{name}'[/yellow]")
|
|
1836
|
+
results.append({"listener": name, "success": False, "error": f"Unsupported db_type: {db_type}"})
|
|
1837
|
+
continue
|
|
1838
|
+
|
|
1839
|
+
# Run via SSH
|
|
1840
|
+
ret, stdout, stderr = _run_ssh_command(ssh_config_path, ssh_host, sql_cmd)
|
|
1841
|
+
|
|
1842
|
+
if ret == 0:
|
|
1843
|
+
if not json_output:
|
|
1844
|
+
console.print(f"[green]✅ Cleared audit_log for '{name}'[/green]")
|
|
1845
|
+
results.append({"listener": name, "success": True})
|
|
1846
|
+
else:
|
|
1847
|
+
if not json_output:
|
|
1848
|
+
console.print(f"[red]❌ Failed to clear audit_log for '{name}': {stderr}[/red]")
|
|
1849
|
+
results.append({"listener": name, "success": False, "error": stderr})
|
|
1850
|
+
|
|
1851
|
+
# Call state API to refresh in-memory mutation cache
|
|
1852
|
+
session_id = state.get("session_id")
|
|
1853
|
+
api_key = require_api_key()
|
|
1854
|
+
if session_id:
|
|
1855
|
+
if not json_output:
|
|
1856
|
+
console.print("[dim]Refreshing state cache...[/dim]")
|
|
1857
|
+
try:
|
|
1858
|
+
with get_http_client() as client:
|
|
1859
|
+
sessions_state.sync(
|
|
1860
|
+
client=client,
|
|
1861
|
+
session_id=session_id,
|
|
1862
|
+
x_api_key=api_key,
|
|
1863
|
+
)
|
|
1864
|
+
except Exception as e:
|
|
1865
|
+
if not json_output:
|
|
1866
|
+
console.print(f"[yellow]⚠ Failed to refresh state cache: {e}[/yellow]")
|
|
1867
|
+
|
|
1868
|
+
if json_output:
|
|
1869
|
+
console.print(json.dumps({"results": results}))
|
|
1870
|
+
else:
|
|
1871
|
+
# Summary
|
|
1872
|
+
success_count = sum(1 for r in results if r["success"])
|
|
1873
|
+
total = len(results)
|
|
1874
|
+
if success_count == total:
|
|
1875
|
+
console.print(f"\n[green]✅ All {total} audit logs cleared successfully[/green]")
|
|
1876
|
+
else:
|
|
1877
|
+
console.print(f"\n[yellow]⚠ {success_count}/{total} audit logs cleared[/yellow]")
|
|
1878
|
+
raise typer.Exit(1)
|
|
1879
|
+
|
|
1880
|
+
|
|
1740
1881
|
@sandbox_app.command(name="audit-ui")
|
|
1741
1882
|
def sandbox_audit_ui():
|
|
1742
1883
|
"""
|
|
@@ -1786,31 +1927,24 @@ def sandbox_audit_ui():
|
|
|
1786
1927
|
|
|
1787
1928
|
|
|
1788
1929
|
def _copy_files_respecting_gitignore(src_dir: Path, dst_dir: Path) -> None:
|
|
1789
|
-
"""Copy files from src to dst
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
def
|
|
1798
|
-
"""Check if
|
|
1799
|
-
|
|
1800
|
-
# Skip .git
|
|
1801
|
-
if
|
|
1802
|
-
return
|
|
1803
|
-
#
|
|
1804
|
-
|
|
1805
|
-
result = subprocess.run(
|
|
1806
|
-
["git", "check-ignore", "-q", str(file_path)],
|
|
1807
|
-
cwd=src_dir,
|
|
1808
|
-
capture_output=True,
|
|
1809
|
-
)
|
|
1810
|
-
# git check-ignore returns 0 if path IS ignored, 1 if NOT ignored
|
|
1811
|
-
return result.returncode != 0
|
|
1812
|
-
except Exception:
|
|
1930
|
+
"""Copy files from src to dst, skipping .git/ and .plato-hub.json.
|
|
1931
|
+
|
|
1932
|
+
Note: This function intentionally does NOT respect .gitignore because
|
|
1933
|
+
start-services needs to copy all workspace files to the VM, including
|
|
1934
|
+
config files that might be gitignored locally (like docker-compose.yml
|
|
1935
|
+
in a 'base/' directory).
|
|
1936
|
+
"""
|
|
1937
|
+
|
|
1938
|
+
def should_skip(rel_path: Path) -> bool:
|
|
1939
|
+
"""Check if path should be skipped."""
|
|
1940
|
+
parts = rel_path.parts
|
|
1941
|
+
# Skip anything inside .git/ directory
|
|
1942
|
+
if ".git" in parts:
|
|
1943
|
+
return True
|
|
1944
|
+
# Skip .plato-hub.json
|
|
1945
|
+
if rel_path.name == ".plato-hub.json":
|
|
1813
1946
|
return True
|
|
1947
|
+
return False
|
|
1814
1948
|
|
|
1815
1949
|
# Walk through source directory
|
|
1816
1950
|
for src_path in src_dir.rglob("*"):
|
|
@@ -1820,8 +1954,8 @@ def _copy_files_respecting_gitignore(src_dir: Path, dst_dir: Path) -> None:
|
|
|
1820
1954
|
if str(rel_path) == ".":
|
|
1821
1955
|
continue
|
|
1822
1956
|
|
|
1823
|
-
# Check if should
|
|
1824
|
-
if
|
|
1957
|
+
# Check if should skip
|
|
1958
|
+
if should_skip(rel_path):
|
|
1825
1959
|
continue
|
|
1826
1960
|
|
|
1827
1961
|
dst_path = dst_dir / rel_path
|
|
@@ -2007,6 +2141,34 @@ def sandbox_start_services(
|
|
|
2007
2141
|
|
|
2008
2142
|
try:
|
|
2009
2143
|
with get_http_client() as client:
|
|
2144
|
+
|
|
2145
|
+
def start_services_on_vm(repo_dir: str) -> list[dict[str, str]]:
|
|
2146
|
+
"""Start docker compose services on the VM."""
|
|
2147
|
+
services_started: list[dict[str, str]] = []
|
|
2148
|
+
for svc_name, svc_config in services_config.items():
|
|
2149
|
+
svc_type = svc_config.get("type", "")
|
|
2150
|
+
if svc_type == "docker-compose":
|
|
2151
|
+
compose_file = svc_config.get("file", "docker-compose.yml")
|
|
2152
|
+
compose_cmd = f"cd {repo_dir} && docker compose -f {compose_file} up -d"
|
|
2153
|
+
|
|
2154
|
+
if not json_output:
|
|
2155
|
+
console.print(f"[cyan] Starting docker compose service: {svc_name}...[/cyan]")
|
|
2156
|
+
|
|
2157
|
+
ret, stdout, stderr = _run_ssh_command(ssh_config_path, ssh_host, compose_cmd)
|
|
2158
|
+
if ret != 0:
|
|
2159
|
+
console.print(f"[red]❌ Failed to start service '{svc_name}': {stderr}[/red]")
|
|
2160
|
+
raise typer.Exit(1)
|
|
2161
|
+
|
|
2162
|
+
services_started.append({"name": svc_name, "type": "docker-compose", "file": compose_file})
|
|
2163
|
+
if not json_output:
|
|
2164
|
+
console.print(f"[green] ✓ Started docker compose service: {svc_name}[/green]")
|
|
2165
|
+
else:
|
|
2166
|
+
if not json_output:
|
|
2167
|
+
console.print(
|
|
2168
|
+
f"[yellow] ⚠ Skipped service '{svc_name}' (unknown type: {svc_type})[/yellow]"
|
|
2169
|
+
)
|
|
2170
|
+
return services_started
|
|
2171
|
+
|
|
2010
2172
|
# Step 1: Get Gitea credentials
|
|
2011
2173
|
if not json_output:
|
|
2012
2174
|
console.print("[cyan]Step 1: Getting Gitea credentials...[/cyan]")
|
|
@@ -2064,6 +2226,8 @@ def sandbox_start_services(
|
|
|
2064
2226
|
if not json_output:
|
|
2065
2227
|
console.print("[cyan]Step 4: Pushing code to hub...[/cyan]")
|
|
2066
2228
|
|
|
2229
|
+
repo_dir = f"/home/plato/worktree/{service_name}"
|
|
2230
|
+
|
|
2067
2231
|
with tempfile.TemporaryDirectory(prefix="plato-hub-") as temp_dir:
|
|
2068
2232
|
temp_repo = Path(temp_dir) / "repo"
|
|
2069
2233
|
|
|
@@ -2148,8 +2312,6 @@ def sandbox_start_services(
|
|
|
2148
2312
|
if not json_output:
|
|
2149
2313
|
console.print("[cyan]Step 5: Cloning repo on VM...[/cyan]")
|
|
2150
2314
|
|
|
2151
|
-
repo_dir = f"/home/plato/worktree/{service_name}"
|
|
2152
|
-
|
|
2153
2315
|
# Create worktree directory
|
|
2154
2316
|
_run_ssh_command(ssh_config_path, ssh_host, "mkdir -p /home/plato/worktree")
|
|
2155
2317
|
|
|
@@ -2170,27 +2332,7 @@ def sandbox_start_services(
|
|
|
2170
2332
|
if not json_output:
|
|
2171
2333
|
console.print("[cyan]Step 6: Starting services...[/cyan]")
|
|
2172
2334
|
|
|
2173
|
-
services_started =
|
|
2174
|
-
for svc_name, svc_config in services_config.items():
|
|
2175
|
-
svc_type = svc_config.get("type", "")
|
|
2176
|
-
if svc_type == "docker-compose":
|
|
2177
|
-
compose_file = svc_config.get("file", "docker-compose.yml")
|
|
2178
|
-
compose_cmd = f"cd {repo_dir} && DOCKER_HOST=unix:///var/run/docker-user.sock docker compose -f {compose_file} up -d"
|
|
2179
|
-
|
|
2180
|
-
if not json_output:
|
|
2181
|
-
console.print(f"[cyan] Starting docker compose service: {svc_name}...[/cyan]")
|
|
2182
|
-
|
|
2183
|
-
ret, stdout, stderr = _run_ssh_command(ssh_config_path, ssh_host, compose_cmd)
|
|
2184
|
-
if ret != 0:
|
|
2185
|
-
console.print(f"[red]❌ Failed to start service '{svc_name}': {stderr}[/red]")
|
|
2186
|
-
raise typer.Exit(1)
|
|
2187
|
-
|
|
2188
|
-
services_started.append({"name": svc_name, "type": "docker-compose", "file": compose_file})
|
|
2189
|
-
if not json_output:
|
|
2190
|
-
console.print(f"[green] ✓ Started docker compose service: {svc_name}[/green]")
|
|
2191
|
-
else:
|
|
2192
|
-
if not json_output:
|
|
2193
|
-
console.print(f"[yellow] ⚠ Skipped service '{svc_name}' (unknown type: {svc_type})[/yellow]")
|
|
2335
|
+
services_started = start_services_on_vm(repo_dir)
|
|
2194
2336
|
|
|
2195
2337
|
# Output results
|
|
2196
2338
|
if json_output:
|
|
@@ -9,9 +9,21 @@ from cryptography.hazmat.primitives import serialization
|
|
|
9
9
|
from cryptography.hazmat.primitives.asymmetric import ed25519
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
def get_plato_dir() -> Path:
|
|
13
|
+
"""Get the directory for plato config/SSH files.
|
|
14
|
+
|
|
15
|
+
Uses /workspace/.plato if /workspace exists (container environment),
|
|
16
|
+
otherwise uses ~/.plato (local development).
|
|
17
|
+
"""
|
|
18
|
+
workspace = Path("/workspace")
|
|
19
|
+
if workspace.exists() and workspace.is_dir():
|
|
20
|
+
return workspace / ".plato"
|
|
21
|
+
return Path.home() / ".plato"
|
|
22
|
+
|
|
23
|
+
|
|
12
24
|
def get_next_sandbox_number() -> int:
|
|
13
|
-
"""Find next available sandbox number by checking existing config files
|
|
14
|
-
plato_dir =
|
|
25
|
+
"""Find next available sandbox number by checking existing config files."""
|
|
26
|
+
plato_dir = get_plato_dir()
|
|
15
27
|
if not plato_dir.exists():
|
|
16
28
|
return 1
|
|
17
29
|
|
|
@@ -35,7 +47,7 @@ def generate_ssh_key_pair(sandbox_num: int) -> tuple[str, str]:
|
|
|
35
47
|
|
|
36
48
|
Returns (public_key_str, private_key_path).
|
|
37
49
|
"""
|
|
38
|
-
plato_dir =
|
|
50
|
+
plato_dir = get_plato_dir()
|
|
39
51
|
plato_dir.mkdir(mode=0o700, exist_ok=True)
|
|
40
52
|
|
|
41
53
|
private_key_path = plato_dir / f"ssh_{sandbox_num}_key"
|
|
@@ -160,7 +172,7 @@ def create_ssh_config(
|
|
|
160
172
|
TCPKeepAlive yes
|
|
161
173
|
"""
|
|
162
174
|
|
|
163
|
-
plato_dir =
|
|
175
|
+
plato_dir = get_plato_dir()
|
|
164
176
|
plato_dir.mkdir(mode=0o700, exist_ok=True)
|
|
165
177
|
|
|
166
178
|
config_path = plato_dir / f"ssh_{sandbox_num}.conf"
|