plato-sdk-v2 2.2.2__tar.gz → 2.2.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.2.2 → plato_sdk_v2-2.2.3}/PKG-INFO +1 -1
- plato_sdk_v2-2.2.3/VERSION +1 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/agents/runner.py +26 -15
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/worlds/base.py +1 -0
- plato_sdk_v2-2.2.3/plato/worlds/runner.py +480 -0
- plato_sdk_v2-2.2.2/VERSION +0 -1
- plato_sdk_v2-2.2.2/plato/worlds/runner.py +0 -261
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/.claude/agents/sim-creator.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/.gitignore +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/.sandbox.yaml +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/BUILDING_SIMS.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/README.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/ci/CLAUDE.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/ci/deploy.sh +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/ci/lint.sh +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/ci/setup.sh +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/ci/version-bump.sh +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/AGENT_SPEC.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/CLI.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/GENERATING_SIM_SDKS.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/SIMULATOR_LIFECYCLE.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/SIM_CREATOR.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/cli/agent.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/cli/flows.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/cli/pm.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/cli/sandbox.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/cli/sims.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/cli/world.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/sim-creation-pipeline.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skill-restructure-plan.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-config/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-creator/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-debugger/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-flow-audit/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-flow-clear/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-flow-run/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-research/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-review/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-snapshot/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-submit/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/skills/sim-validate/SKILL.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/testcommit +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/docs/unit.sh +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/backup.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/cleanup.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/close.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/close_async.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/create.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/create_batch.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/create_simulator.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_active_session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_flows.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_job_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_job_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_public_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_simulators.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_state.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/reset.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/score.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/env/update_simulator.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/queue/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/queue/get_vms.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/queue/get_workers.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/archive_session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_sessions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/set_session_output.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/update_session_public.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/register.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/import_agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/close.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/execute.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/make.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/public_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/reset.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/set_date.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/state.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/pypi/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/pypi/download_package.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/pypi/package_index.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/create.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/deploy.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/handle_import.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/list_releases.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/releases/update.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/close.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/execute.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/make.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/reset.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/set_date.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/state.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/user/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/v2/user/get_current_user.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/version/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/api/version/check.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/client.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/errors.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/models/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_generated/py.typed +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/cli.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/instruction.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/parser.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/python.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/agents/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/agents/base.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/agents/build.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/agents/config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/agents/logging.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/agents/trajectory.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/create_agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/delete_agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/get_agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/list_agents.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/agents/lookup_agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/auth/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/callback/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/callback/push_agent_logs.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/callback/update_agent_status.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/callback/upload_artifacts.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/callback/upload_logs_zip.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/callback/upload_trajectory.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/default/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/default/health.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/jobs/launch_job.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/registry/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/runtimes/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/runtimes/create_runtime.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/runtimes/get_runtime.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/runtimes/test_runtime.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/secrets/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/secrets/create_secret.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/secrets/delete_secret.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/secrets/get_secret.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/secrets/list_secrets.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/secrets/update_secret.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/sessions/get_session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/status/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/templates/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/templates/create_template.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/templates/delete_template.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/templates/get_template.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/templates/list_templates.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/templates/update_template.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/trajectories/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/worlds/create_world.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/worlds/delete_world.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/worlds/get_world.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/api/worlds/list_worlds.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/client.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/errors.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/models/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/chronos/py.typed +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/py.typed +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/sims/README.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/sims/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/sims/agent_helpers.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/sims/cli.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/sims/generate_clients.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/sims/registry.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/audit_ui.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/main.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/pm.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/sandbox.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/sim.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/ssh.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/utils.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/verify.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli/world.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/cli.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/examples/doordash_tasks.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/examples/loadtest.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/examples/test_env.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/examples/test_env_custom_browser.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/examples/test_env_sync.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/examples/test_reuse_env.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/examples/test_run.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/exceptions.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/README.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/background.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/content.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/options.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/options.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/package.json +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/flow_executor.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/models/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/models/build_models.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/models/env.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/models/flow.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/models/sandbox.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/models/task.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/sandbox_sdk.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/sdk.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/sync_env.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/sync_flow_executor.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/sync_sdk.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v1/utils/proxytunnel.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/async_/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/async_/artifact.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/async_/client.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/async_/environment.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/async_/flow_executor.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/async_/session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/models.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/sync/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/sync/artifact.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/sync/client.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/sync/environment.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/sync/flow_executor.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/sync/session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/types.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/utils/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/utils/db_cleanup.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/utils/models.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/v2/utils/proxy_tunnel.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/worlds/README.md +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/worlds/build_hook.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/plato/worlds/config.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/pyproject.toml +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/scripts/get_all_artifact_targets.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/integration/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/integration/conftest.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/integration/test_browser_agent.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/integration/test_chronos_callback.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/integration/test_cleanup_snapshot.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/integration/test_code_world.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/integration/test_harbor_agent_runner.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/sims/__init__.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/sims/conftest.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/sims/test_agent_helpers.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/test_heartbeat_keepalive.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/test_session_serialization.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/test_set_date.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/test_v2_imports.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/test_v2_multisim_integration.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/test_v2_session.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/tests/test_version.py +0 -0
- {plato_sdk_v2-2.2.2 → plato_sdk_v2-2.2.3}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.2.3
|
|
@@ -6,6 +6,7 @@ import asyncio
|
|
|
6
6
|
import json
|
|
7
7
|
import logging
|
|
8
8
|
import os
|
|
9
|
+
import platform
|
|
9
10
|
import tempfile
|
|
10
11
|
from pathlib import Path
|
|
11
12
|
|
|
@@ -62,21 +63,29 @@ async def run_agent(
|
|
|
62
63
|
# Build docker command
|
|
63
64
|
docker_cmd = ["docker", "run", "--rm"]
|
|
64
65
|
|
|
65
|
-
#
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
66
|
+
# Determine if we need host networking:
|
|
67
|
+
# - Required on Linux without iptables for connectivity
|
|
68
|
+
# - Skip on macOS where --network=host doesn't work properly
|
|
69
|
+
use_host_network = False
|
|
70
|
+
is_macos = platform.system() == "Darwin"
|
|
71
|
+
|
|
72
|
+
if not is_macos:
|
|
73
|
+
try:
|
|
74
|
+
proc = await asyncio.create_subprocess_exec(
|
|
75
|
+
"iptables",
|
|
76
|
+
"-L",
|
|
77
|
+
"-n",
|
|
78
|
+
stdout=asyncio.subprocess.DEVNULL,
|
|
79
|
+
stderr=asyncio.subprocess.DEVNULL,
|
|
80
|
+
)
|
|
81
|
+
await proc.wait()
|
|
82
|
+
has_iptables = proc.returncode == 0
|
|
83
|
+
except (FileNotFoundError, PermissionError):
|
|
84
|
+
has_iptables = False
|
|
85
|
+
|
|
86
|
+
use_host_network = not has_iptables
|
|
87
|
+
|
|
88
|
+
if use_host_network:
|
|
80
89
|
docker_cmd.extend(["--network=host", "--add-host=localhost:127.0.0.1"])
|
|
81
90
|
|
|
82
91
|
docker_cmd.extend(
|
|
@@ -96,6 +105,8 @@ async def run_agent(
|
|
|
96
105
|
docker_cmd.extend(["-e", f"{key.upper()}={value}"])
|
|
97
106
|
|
|
98
107
|
docker_cmd.append(image)
|
|
108
|
+
|
|
109
|
+
# Pass instruction via CLI arg (agents expect --instruction flag)
|
|
99
110
|
docker_cmd.extend(["--instruction", instruction])
|
|
100
111
|
|
|
101
112
|
# Run container and stream output
|
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
"""World runner - discovers and runs Plato worlds."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import json
|
|
7
|
+
import logging
|
|
8
|
+
import os
|
|
9
|
+
import platform
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Annotated
|
|
12
|
+
|
|
13
|
+
import typer
|
|
14
|
+
|
|
15
|
+
from plato.worlds.config import EnvConfig, RunConfig
|
|
16
|
+
|
|
17
|
+
app = typer.Typer(
|
|
18
|
+
name="plato-world-runner",
|
|
19
|
+
help="Run Plato worlds",
|
|
20
|
+
no_args_is_help=True,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def discover_worlds() -> None:
|
|
27
|
+
"""Discover and load installed world packages via entry points.
|
|
28
|
+
|
|
29
|
+
World packages declare entry points in pyproject.toml:
|
|
30
|
+
[project.entry-points."plato.worlds"]
|
|
31
|
+
code = "code_world:CodeWorld"
|
|
32
|
+
|
|
33
|
+
This function loads all such entry points, triggering registration.
|
|
34
|
+
"""
|
|
35
|
+
import importlib.metadata
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
eps = importlib.metadata.entry_points(group="plato.worlds")
|
|
39
|
+
except TypeError:
|
|
40
|
+
# Python < 3.10 compatibility
|
|
41
|
+
eps = importlib.metadata.entry_points().get("plato.worlds", [])
|
|
42
|
+
|
|
43
|
+
for ep in eps:
|
|
44
|
+
try:
|
|
45
|
+
ep.load()
|
|
46
|
+
logger.debug(f"Loaded world: {ep.name}")
|
|
47
|
+
except Exception as e:
|
|
48
|
+
logger.warning(f"Failed to load world '{ep.name}': {e}")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
async def run_world(world_name: str, config: RunConfig) -> None:
|
|
52
|
+
"""Run a world by name with the given configuration.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
world_name: Name of the world to run
|
|
56
|
+
config: Run configuration (should be the world's typed config class)
|
|
57
|
+
|
|
58
|
+
Raises:
|
|
59
|
+
ValueError: If world not found
|
|
60
|
+
"""
|
|
61
|
+
discover_worlds()
|
|
62
|
+
|
|
63
|
+
from plato.worlds.base import get_registered_worlds, get_world
|
|
64
|
+
|
|
65
|
+
world_cls = get_world(world_name)
|
|
66
|
+
if world_cls is None:
|
|
67
|
+
available = list(get_registered_worlds().keys())
|
|
68
|
+
raise ValueError(f"World '{world_name}' not found. Available: {available}")
|
|
69
|
+
|
|
70
|
+
world = world_cls()
|
|
71
|
+
await world.run(config)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@app.command()
|
|
75
|
+
def run(
|
|
76
|
+
world: Annotated[str, typer.Option("--world", "-w", help="World name to run")],
|
|
77
|
+
config: Annotated[Path, typer.Option("--config", "-c", help="Path to config JSON file")],
|
|
78
|
+
verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Enable verbose logging")] = False,
|
|
79
|
+
) -> None:
|
|
80
|
+
"""Run a world with the given configuration."""
|
|
81
|
+
# Setup logging
|
|
82
|
+
log_level = logging.DEBUG if verbose else logging.INFO
|
|
83
|
+
logging.basicConfig(
|
|
84
|
+
level=log_level,
|
|
85
|
+
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
if not config.exists():
|
|
89
|
+
typer.echo(f"Error: Config file not found: {config}", err=True)
|
|
90
|
+
raise typer.Exit(1)
|
|
91
|
+
|
|
92
|
+
# Discover worlds first to get config class
|
|
93
|
+
discover_worlds()
|
|
94
|
+
|
|
95
|
+
from plato.worlds.base import get_registered_worlds, get_world
|
|
96
|
+
|
|
97
|
+
world_cls = get_world(world)
|
|
98
|
+
if world_cls is None:
|
|
99
|
+
available = list(get_registered_worlds().keys())
|
|
100
|
+
typer.echo(f"Error: World '{world}' not found. Available: {available}", err=True)
|
|
101
|
+
raise typer.Exit(1)
|
|
102
|
+
|
|
103
|
+
# Load config using the world's typed config class
|
|
104
|
+
config_class = world_cls.get_config_class()
|
|
105
|
+
run_config = config_class.from_file(config)
|
|
106
|
+
|
|
107
|
+
try:
|
|
108
|
+
world_instance = world_cls()
|
|
109
|
+
asyncio.run(world_instance.run(run_config))
|
|
110
|
+
except Exception as e:
|
|
111
|
+
logger.exception(f"World execution failed: {e}")
|
|
112
|
+
raise typer.Exit(1)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@app.command("list")
|
|
116
|
+
def list_worlds(
|
|
117
|
+
verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Enable verbose logging")] = False,
|
|
118
|
+
) -> None:
|
|
119
|
+
"""List available worlds."""
|
|
120
|
+
if verbose:
|
|
121
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
122
|
+
|
|
123
|
+
discover_worlds()
|
|
124
|
+
|
|
125
|
+
from plato.worlds.base import get_registered_worlds
|
|
126
|
+
|
|
127
|
+
worlds = get_registered_worlds()
|
|
128
|
+
if not worlds:
|
|
129
|
+
typer.echo("No worlds found.")
|
|
130
|
+
return
|
|
131
|
+
|
|
132
|
+
typer.echo("Available worlds:")
|
|
133
|
+
for name, cls in worlds.items():
|
|
134
|
+
desc = getattr(cls, "description", "") or ""
|
|
135
|
+
version = cls.get_version()
|
|
136
|
+
typer.echo(f" {name} (v{version}): {desc}")
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
async def _build_agent_image(
|
|
140
|
+
agent_name: str,
|
|
141
|
+
agents_dir: Path,
|
|
142
|
+
plato_client_root: Path | None = None,
|
|
143
|
+
) -> bool:
|
|
144
|
+
"""Build a local agent Docker image.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
agent_name: Name of the agent (e.g., "openhands")
|
|
148
|
+
agents_dir: Directory containing agent subdirectories
|
|
149
|
+
plato_client_root: Root of plato-client repo (for dev builds), or None for prod builds
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
True if build succeeded, False otherwise
|
|
153
|
+
"""
|
|
154
|
+
import subprocess
|
|
155
|
+
|
|
156
|
+
# Resolve paths to absolute
|
|
157
|
+
agents_dir = agents_dir.expanduser().resolve()
|
|
158
|
+
agent_path = agents_dir / agent_name
|
|
159
|
+
dockerfile_path = agent_path / "Dockerfile"
|
|
160
|
+
|
|
161
|
+
if not dockerfile_path.exists():
|
|
162
|
+
logger.warning(f"No Dockerfile found for agent '{agent_name}' at {dockerfile_path}")
|
|
163
|
+
return False
|
|
164
|
+
|
|
165
|
+
image_tag = f"{agent_name}:latest"
|
|
166
|
+
|
|
167
|
+
# Determine build context and target
|
|
168
|
+
if plato_client_root:
|
|
169
|
+
plato_client_root = plato_client_root.expanduser().resolve()
|
|
170
|
+
|
|
171
|
+
if plato_client_root and plato_client_root.exists():
|
|
172
|
+
# Dev build from plato-client root (includes local python-sdk)
|
|
173
|
+
build_context = str(plato_client_root)
|
|
174
|
+
dockerfile_abs = str(dockerfile_path)
|
|
175
|
+
target = "dev"
|
|
176
|
+
logger.info(f"Building {image_tag} (dev mode from {build_context})...")
|
|
177
|
+
else:
|
|
178
|
+
# Prod build from agent directory
|
|
179
|
+
build_context = str(agent_path)
|
|
180
|
+
dockerfile_abs = str(dockerfile_path)
|
|
181
|
+
target = "prod"
|
|
182
|
+
logger.info(f"Building {image_tag} (prod mode from {build_context})...")
|
|
183
|
+
|
|
184
|
+
cmd = [
|
|
185
|
+
"docker",
|
|
186
|
+
"build",
|
|
187
|
+
"--target",
|
|
188
|
+
target,
|
|
189
|
+
"-t",
|
|
190
|
+
image_tag,
|
|
191
|
+
"-f",
|
|
192
|
+
dockerfile_abs,
|
|
193
|
+
]
|
|
194
|
+
|
|
195
|
+
# Use native platform for local dev on ARM Macs (avoids slow emulation)
|
|
196
|
+
if platform.machine() == "arm64":
|
|
197
|
+
cmd.extend(["--build-arg", "PLATFORM=linux/arm64"])
|
|
198
|
+
|
|
199
|
+
cmd.append(build_context)
|
|
200
|
+
|
|
201
|
+
logger.debug(f"Build command: {' '.join(cmd)}")
|
|
202
|
+
|
|
203
|
+
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
204
|
+
|
|
205
|
+
if result.returncode != 0:
|
|
206
|
+
logger.error(f"Failed to build {image_tag}:\n{result.stderr}")
|
|
207
|
+
return False
|
|
208
|
+
|
|
209
|
+
logger.info(f"Successfully built {image_tag}")
|
|
210
|
+
return True
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def _extract_agent_images_from_config(config_data: dict) -> list[str]:
|
|
214
|
+
"""Extract agent image names from config data.
|
|
215
|
+
|
|
216
|
+
Args:
|
|
217
|
+
config_data: Raw config dictionary
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
List of image names (without tags) that are local (not from a registry)
|
|
221
|
+
"""
|
|
222
|
+
images = []
|
|
223
|
+
|
|
224
|
+
# Check agents section
|
|
225
|
+
agents = config_data.get("agents", {})
|
|
226
|
+
for agent_config in agents.values():
|
|
227
|
+
if isinstance(agent_config, dict):
|
|
228
|
+
image = agent_config.get("image", "")
|
|
229
|
+
# Only include local images (no registry prefix like ghcr.io/)
|
|
230
|
+
if image and "/" not in image.split(":")[0]:
|
|
231
|
+
# Extract name without tag
|
|
232
|
+
name = image.split(":")[0]
|
|
233
|
+
if name not in images:
|
|
234
|
+
images.append(name)
|
|
235
|
+
|
|
236
|
+
# Also check direct coder/verifier fields
|
|
237
|
+
for field in ["coder", "verifier"]:
|
|
238
|
+
agent_config = config_data.get(field, {})
|
|
239
|
+
if isinstance(agent_config, dict):
|
|
240
|
+
image = agent_config.get("image", "")
|
|
241
|
+
if image and "/" not in image.split(":")[0]:
|
|
242
|
+
name = image.split(":")[0]
|
|
243
|
+
if name not in images:
|
|
244
|
+
images.append(name)
|
|
245
|
+
|
|
246
|
+
return images
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
async def _run_dev(
|
|
250
|
+
world_name: str,
|
|
251
|
+
config_path: Path,
|
|
252
|
+
env_timeout: int = 600,
|
|
253
|
+
chronos_url: str | None = None,
|
|
254
|
+
api_key: str | None = None,
|
|
255
|
+
agents_dir: Path | None = None,
|
|
256
|
+
) -> None:
|
|
257
|
+
"""Run a world locally with automatic environment creation.
|
|
258
|
+
|
|
259
|
+
This mimics what Chronos does but runs locally for debugging:
|
|
260
|
+
1. Load and parse the config
|
|
261
|
+
2. Build local agent images if --agents-dir is provided
|
|
262
|
+
3. Create Plato session with all environments
|
|
263
|
+
4. Optionally initialize Chronos logging for callbacks
|
|
264
|
+
5. Run the world with the session attached
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
world_name: Name of the world to run
|
|
268
|
+
config_path: Path to the config JSON file
|
|
269
|
+
env_timeout: Timeout for environment creation (seconds)
|
|
270
|
+
chronos_url: Optional Chronos base URL for sending log events
|
|
271
|
+
api_key: Optional Plato API key (used for Chronos session creation)
|
|
272
|
+
agents_dir: Optional directory containing agent source code
|
|
273
|
+
"""
|
|
274
|
+
from uuid import uuid4
|
|
275
|
+
|
|
276
|
+
from plato.v2 import AsyncPlato
|
|
277
|
+
from plato.worlds.base import get_world
|
|
278
|
+
|
|
279
|
+
discover_worlds()
|
|
280
|
+
|
|
281
|
+
world_cls = get_world(world_name)
|
|
282
|
+
if world_cls is None:
|
|
283
|
+
from plato.worlds.base import get_registered_worlds
|
|
284
|
+
|
|
285
|
+
available = list(get_registered_worlds().keys())
|
|
286
|
+
raise ValueError(f"World '{world_name}' not found. Available: {available}")
|
|
287
|
+
|
|
288
|
+
# Load config
|
|
289
|
+
config_class = world_cls.get_config_class()
|
|
290
|
+
with open(config_path) as f:
|
|
291
|
+
config_data = json.load(f)
|
|
292
|
+
|
|
293
|
+
# Parse the config to get typed access
|
|
294
|
+
run_config = config_class._from_dict(config_data.copy())
|
|
295
|
+
|
|
296
|
+
# Build local agent images if agents_dir is provided
|
|
297
|
+
if agents_dir:
|
|
298
|
+
# Resolve agents_dir to absolute path
|
|
299
|
+
agents_dir = agents_dir.expanduser().resolve()
|
|
300
|
+
agent_images = _extract_agent_images_from_config(config_data)
|
|
301
|
+
if agent_images:
|
|
302
|
+
logger.info(f"Building local agent images: {agent_images}")
|
|
303
|
+
# Determine if we're in a plato-client repo for dev builds
|
|
304
|
+
# (agents_dir is something like /path/to/plato-client/agents)
|
|
305
|
+
plato_client_root = agents_dir.parent if agents_dir.name == "agents" else None
|
|
306
|
+
for agent_name in agent_images:
|
|
307
|
+
success = await _build_agent_image(agent_name, agents_dir, plato_client_root)
|
|
308
|
+
if not success:
|
|
309
|
+
raise RuntimeError(f"Failed to build agent image: {agent_name}")
|
|
310
|
+
else:
|
|
311
|
+
logger.info("No local agent images found in config")
|
|
312
|
+
|
|
313
|
+
# Get environment configs from the parsed config
|
|
314
|
+
env_configs: list[EnvConfig] = run_config.get_envs()
|
|
315
|
+
|
|
316
|
+
# Create Plato client
|
|
317
|
+
plato = AsyncPlato()
|
|
318
|
+
session = None
|
|
319
|
+
|
|
320
|
+
# Initialize Chronos logging if URL provided
|
|
321
|
+
chronos_session_id: str | None = None
|
|
322
|
+
if chronos_url:
|
|
323
|
+
from plato.agents import init_logging
|
|
324
|
+
|
|
325
|
+
chronos_session_id = f"dev-{uuid4().hex[:8]}"
|
|
326
|
+
callback_url = f"{chronos_url.rstrip('/')}/api/v1/callback"
|
|
327
|
+
init_logging(
|
|
328
|
+
callback_url=callback_url,
|
|
329
|
+
session_id=chronos_session_id,
|
|
330
|
+
)
|
|
331
|
+
logger.info(f"Chronos logging enabled: {callback_url} (session: {chronos_session_id})")
|
|
332
|
+
|
|
333
|
+
# Update run_config with session info for agents
|
|
334
|
+
run_config.session_id = chronos_session_id
|
|
335
|
+
run_config.callback_url = callback_url
|
|
336
|
+
|
|
337
|
+
try:
|
|
338
|
+
if env_configs:
|
|
339
|
+
logger.info(f"Creating {len(env_configs)} environments...")
|
|
340
|
+
session = await plato.sessions.create(envs=env_configs, timeout=env_timeout)
|
|
341
|
+
logger.info(f"Created Plato session: {session.session_id}")
|
|
342
|
+
logger.info(f"Environments: {[e.alias for e in session.envs]}")
|
|
343
|
+
|
|
344
|
+
# Serialize and add to config
|
|
345
|
+
serialized = session.dump()
|
|
346
|
+
run_config.plato_session = serialized
|
|
347
|
+
else:
|
|
348
|
+
logger.info("No environments defined for this world")
|
|
349
|
+
|
|
350
|
+
# Run the world
|
|
351
|
+
logger.info(f"Starting world '{world_name}'...")
|
|
352
|
+
world_instance = world_cls()
|
|
353
|
+
await world_instance.run(run_config)
|
|
354
|
+
|
|
355
|
+
finally:
|
|
356
|
+
# Cleanup
|
|
357
|
+
if session:
|
|
358
|
+
logger.info("Closing Plato session...")
|
|
359
|
+
await session.close()
|
|
360
|
+
await plato.close()
|
|
361
|
+
|
|
362
|
+
# Reset logging
|
|
363
|
+
if chronos_url:
|
|
364
|
+
from plato.agents import reset_logging
|
|
365
|
+
|
|
366
|
+
reset_logging()
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
def _setup_colored_logging(verbose: bool = False) -> None:
|
|
370
|
+
"""Setup colored logging with filtered noisy loggers."""
|
|
371
|
+
log_level = logging.DEBUG if verbose else logging.INFO
|
|
372
|
+
|
|
373
|
+
# Define colors for different log levels
|
|
374
|
+
colors = {
|
|
375
|
+
"DEBUG": "\033[36m", # Cyan
|
|
376
|
+
"INFO": "\033[32m", # Green
|
|
377
|
+
"WARNING": "\033[33m", # Yellow
|
|
378
|
+
"ERROR": "\033[31m", # Red
|
|
379
|
+
"CRITICAL": "\033[35m", # Magenta
|
|
380
|
+
}
|
|
381
|
+
reset = "\033[0m"
|
|
382
|
+
|
|
383
|
+
class ColoredFormatter(logging.Formatter):
|
|
384
|
+
def format(self, record: logging.LogRecord) -> str:
|
|
385
|
+
color = colors.get(record.levelname, "")
|
|
386
|
+
record.levelname = f"{color}{record.levelname}{reset}"
|
|
387
|
+
record.name = f"\033[34m{record.name}{reset}" # Blue for logger name
|
|
388
|
+
return super().format(record)
|
|
389
|
+
|
|
390
|
+
# Create handler with colored formatter
|
|
391
|
+
handler = logging.StreamHandler()
|
|
392
|
+
handler.setFormatter(
|
|
393
|
+
ColoredFormatter(
|
|
394
|
+
"%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
|
395
|
+
datefmt="%H:%M:%S",
|
|
396
|
+
)
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
# Configure root logger
|
|
400
|
+
root_logger = logging.getLogger()
|
|
401
|
+
root_logger.setLevel(log_level)
|
|
402
|
+
root_logger.handlers = [handler]
|
|
403
|
+
|
|
404
|
+
# Silence noisy HTTP loggers
|
|
405
|
+
for noisy_logger in ["httpcore", "httpx", "urllib3", "hpack"]:
|
|
406
|
+
logging.getLogger(noisy_logger).setLevel(logging.WARNING)
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
@app.command("dev")
|
|
410
|
+
def dev(
|
|
411
|
+
world: Annotated[str, typer.Option("--world", "-w", help="World name to run")],
|
|
412
|
+
config: Annotated[Path, typer.Option("--config", "-c", help="Path to config JSON file")],
|
|
413
|
+
env_timeout: Annotated[int, typer.Option("--env-timeout", help="Timeout for environment creation (seconds)")] = 600,
|
|
414
|
+
chronos_url: Annotated[
|
|
415
|
+
str | None, typer.Option("--chronos-url", help="Chronos base URL for log events (e.g., http://localhost:8000)")
|
|
416
|
+
] = None,
|
|
417
|
+
api_key: Annotated[str | None, typer.Option("--api-key", help="Plato API key for Chronos authentication")] = None,
|
|
418
|
+
agents_dir: Annotated[
|
|
419
|
+
Path | None,
|
|
420
|
+
typer.Option("--agents-dir", "-a", help="Directory containing agent source code (builds local images)"),
|
|
421
|
+
] = None,
|
|
422
|
+
verbose: Annotated[bool, typer.Option("--verbose", "-v", help="Enable verbose logging")] = False,
|
|
423
|
+
) -> None:
|
|
424
|
+
"""Run a world locally for development/debugging.
|
|
425
|
+
|
|
426
|
+
This creates Plato environments automatically (like Chronos does)
|
|
427
|
+
and runs the world with the session attached.
|
|
428
|
+
|
|
429
|
+
Optionally sends log events to a Chronos server for real-time monitoring.
|
|
430
|
+
|
|
431
|
+
Example config.json:
|
|
432
|
+
{
|
|
433
|
+
"instruction": "Create a git repo and upload files to S3",
|
|
434
|
+
"coder": {
|
|
435
|
+
"image": "openhands:latest",
|
|
436
|
+
"config": {"model_name": "gemini/gemini-3-flash-preview"}
|
|
437
|
+
},
|
|
438
|
+
"secrets": {
|
|
439
|
+
"gemini_api_key": "..."
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
Environment variables:
|
|
444
|
+
PLATO_API_KEY: API key for Plato (required)
|
|
445
|
+
|
|
446
|
+
Examples:
|
|
447
|
+
# Basic usage
|
|
448
|
+
plato-world-runner dev -w code -c config.json
|
|
449
|
+
|
|
450
|
+
# With local agent builds (from plato-client repo)
|
|
451
|
+
plato-world-runner dev -w code -c config.json --agents-dir ~/plato-client/agents
|
|
452
|
+
|
|
453
|
+
# With Chronos logging
|
|
454
|
+
plato-world-runner dev -w code -c config.json --chronos-url http://localhost:8000
|
|
455
|
+
"""
|
|
456
|
+
# Setup colored logging with filtered noisy loggers
|
|
457
|
+
_setup_colored_logging(verbose)
|
|
458
|
+
|
|
459
|
+
if not config.exists():
|
|
460
|
+
typer.echo(f"Error: Config file not found: {config}", err=True)
|
|
461
|
+
raise typer.Exit(1)
|
|
462
|
+
|
|
463
|
+
if not os.environ.get("PLATO_API_KEY"):
|
|
464
|
+
typer.echo("Error: PLATO_API_KEY environment variable required", err=True)
|
|
465
|
+
raise typer.Exit(1)
|
|
466
|
+
|
|
467
|
+
try:
|
|
468
|
+
asyncio.run(_run_dev(world, config, env_timeout, chronos_url, api_key, agents_dir))
|
|
469
|
+
except Exception as e:
|
|
470
|
+
logger.exception(f"World execution failed: {e}")
|
|
471
|
+
raise typer.Exit(1)
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
def main() -> None:
|
|
475
|
+
"""CLI entry point."""
|
|
476
|
+
app()
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
if __name__ == "__main__":
|
|
480
|
+
main()
|
plato_sdk_v2-2.2.2/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.2.2
|