plato-sdk-v2 2.3.7__tar.gz → 2.3.10__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.7 → plato_sdk_v2-2.3.10}/PKG-INFO +1 -2
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/README.md +0 -1
- plato_sdk_v2-2.3.10/VERSION +1 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/otel.py +16 -6
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/runner.py +18 -5
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/models/__init__.py +9 -1
- plato_sdk_v2-2.3.10/plato/v1/cli/chronos.py +219 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/main.py +2 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/sandbox.py +5 -2
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/ssh.py +21 -14
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/utils.py +32 -12
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/worlds/base.py +16 -0
- plato_sdk_v2-2.3.7/VERSION +0 -1
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/.claude/agents/sim-creator.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/.gitignore +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/.sandbox.yaml +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/BUILDING_SIMS.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/ci/CLAUDE.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/ci/deploy.sh +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/ci/lint.sh +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/ci/setup.sh +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/ci/version-bump.sh +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/AGENT_SPEC.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/CLI.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/GENERATING_SIM_SDKS.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/SIMULATOR_LIFECYCLE.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/SIM_CREATOR.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/cli/agent.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/cli/flows.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/cli/pm.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/cli/sandbox.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/cli/sims.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/cli/world.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/sim-creation-pipeline.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skill-restructure-plan.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-config/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-creator/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-debugger/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-flow-audit/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-flow-clear/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-flow-run/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-research/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-review/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-snapshot/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-submit/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/skills/sim-validate/SKILL.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/testcommit +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/docs/unit.sh +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/backup.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/cleanup.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/close.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/close_async.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/create.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/create_batch.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/create_simulator.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_active_session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_flows.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_job_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_job_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_public_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_simulators.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_state.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/reset.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/score.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/env/update_simulator.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/queue/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/queue/get_vms.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/queue/get_workers.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/archive_session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_sessions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/set_session_output.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/update_session_public.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/register.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/import_agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/close.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/execute.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/make.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/public_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/reset.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/set_date.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/state.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/pypi/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/pypi/download_package.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/pypi/package_index.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/create.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/deploy.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/handle_import.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/list_releases.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/releases/update.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/close.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/execute.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/make.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/reset.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/set_date.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/state.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/user/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/v2/user/get_current_user.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/version/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/api/version/check.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/client.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/errors.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_generated/py.typed +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/cli.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/instruction.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/parser.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/python.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/artifacts.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/base.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/build.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/agents/trajectory.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/create_agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/delete_agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/get_agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/list_agents.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/agents/lookup_agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/auth/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/default/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/default/health.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/jobs/launch_job.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/registry/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/runtimes/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/runtimes/create_runtime.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/runtimes/get_runtime.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/runtimes/test_runtime.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/secrets/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/secrets/create_secret.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/secrets/delete_secret.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/secrets/get_secret.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/secrets/list_secrets.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/secrets/update_secret.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/sessions/get_session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/status/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/templates/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/templates/create_template.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/templates/delete_template.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/templates/get_template.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/templates/list_templates.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/templates/update_template.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/trajectories/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/worlds/create_world.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/worlds/delete_world.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/worlds/get_world.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/api/worlds/list_worlds.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/client.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/errors.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/chronos/py.typed +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/py.typed +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/sims/README.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/sims/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/sims/agent_helpers.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/sims/cli.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/sims/generate_clients.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/sims/registry.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/audit_ui.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/pm.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/verify.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli/world.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/cli.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/examples/doordash_tasks.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/examples/loadtest.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/examples/test_env.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/examples/test_env_custom_browser.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/examples/test_env_sync.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/examples/test_reuse_env.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/examples/test_run.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/exceptions.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/README.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/background.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/content.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/options.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/options.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/package.json +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/models/build_models.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/models/env.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/models/flow.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/models/sandbox.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/models/task.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/sandbox_sdk.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/sdk.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/sync_env.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/sync_flow_executor.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/sync_sdk.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v1/utils/proxytunnel.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/async_/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/async_/artifact.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/async_/client.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/async_/environment.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/async_/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/async_/session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/models.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/sync/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/sync/artifact.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/sync/client.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/sync/environment.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/sync/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/sync/session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/types.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/utils/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/utils/db_cleanup.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/utils/models.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/v2/utils/proxy_tunnel.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/worlds/README.md +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/worlds/build_hook.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/worlds/config.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/plato/worlds/runner.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/pyproject.toml +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/scripts/get_all_artifact_targets.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/integration/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/integration/conftest.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/integration/test_browser_agent.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/integration/test_chronos_callback.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/integration/test_cleanup_snapshot.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/integration/test_code_world.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/integration/test_harbor_agent_runner.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/sims/__init__.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/sims/conftest.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/sims/test_agent_helpers.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/test_heartbeat_keepalive.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/test_session_serialization.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/test_set_date.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/test_v2_imports.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/test_v2_multisim_integration.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/test_v2_session.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/tests/test_version.py +0 -0
- {plato_sdk_v2-2.3.7 → plato_sdk_v2-2.3.10}/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.10
|
|
4
4
|
Summary: Python SDK for the Plato API
|
|
5
5
|
Author-email: Plato <support@plato.so>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -47,7 +47,6 @@ Description-Content-Type: text/markdown
|
|
|
47
47
|
|
|
48
48
|
# Plato Python SDK
|
|
49
49
|
|
|
50
|
-
|
|
51
50
|
Python SDK for the Plato platform. Uses [Harbor](https://harborframework.com) for agent execution.
|
|
52
51
|
|
|
53
52
|
## Installation
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.3.10
|
|
@@ -51,6 +51,8 @@ class OTelSpanLogHandler(logging.Handler):
|
|
|
51
51
|
def emit(self, record: logging.LogRecord) -> None:
|
|
52
52
|
"""Emit a log record as an OTel span."""
|
|
53
53
|
try:
|
|
54
|
+
# Debug: print that we're emitting a log span
|
|
55
|
+
print(f"[OTel] Emitting log span: {record.name} - {record.getMessage()[:100]}")
|
|
54
56
|
# Create a span for the log message
|
|
55
57
|
with self.tracer.start_as_current_span(f"log.{record.levelname.lower()}") as span:
|
|
56
58
|
span.set_attribute("log.level", record.levelname)
|
|
@@ -137,13 +139,18 @@ def init_tracing(
|
|
|
137
139
|
context_api.attach(ctx)
|
|
138
140
|
print(f"[OTel] Using parent context: trace_id={parent_trace_id}, span_id={parent_span_id}")
|
|
139
141
|
|
|
140
|
-
# Add OTel logging handler to capture
|
|
142
|
+
# Add OTel logging handler to capture logs from plato SDK
|
|
141
143
|
tracer = trace.get_tracer(service_name)
|
|
142
144
|
_log_handler = OTelSpanLogHandler(tracer, level=logging.INFO)
|
|
143
145
|
|
|
144
|
-
# Add handler to plato
|
|
145
|
-
|
|
146
|
-
|
|
146
|
+
# Add handler to plato loggers (worlds and agents)
|
|
147
|
+
# Set level to INFO to ensure logs propagate from child loggers
|
|
148
|
+
plato_logger = logging.getLogger("plato")
|
|
149
|
+
plato_logger.setLevel(logging.INFO)
|
|
150
|
+
plato_logger.addHandler(_log_handler)
|
|
151
|
+
print(
|
|
152
|
+
f"[OTel] Added log handler to 'plato' logger (level={plato_logger.level}, handlers={len(plato_logger.handlers)})"
|
|
153
|
+
)
|
|
147
154
|
|
|
148
155
|
_initialized = True
|
|
149
156
|
|
|
@@ -164,8 +171,8 @@ def shutdown_tracing() -> None:
|
|
|
164
171
|
# Remove log handler
|
|
165
172
|
if _log_handler:
|
|
166
173
|
try:
|
|
167
|
-
|
|
168
|
-
|
|
174
|
+
plato_logger = logging.getLogger("plato")
|
|
175
|
+
plato_logger.removeHandler(_log_handler)
|
|
169
176
|
except Exception:
|
|
170
177
|
pass
|
|
171
178
|
_log_handler = None
|
|
@@ -222,8 +229,11 @@ def instrument(service_name: str = "plato-agent") -> Tracer:
|
|
|
222
229
|
parent_trace_id = os.environ.get("OTEL_TRACE_ID")
|
|
223
230
|
parent_span_id = os.environ.get("OTEL_PARENT_SPAN_ID")
|
|
224
231
|
|
|
232
|
+
print(f"[OTel] instrument() called: service={service_name}, endpoint={otel_endpoint}, session={session_id}")
|
|
233
|
+
|
|
225
234
|
if not otel_endpoint:
|
|
226
235
|
# Return default tracer (no-op if no provider configured)
|
|
236
|
+
print("[OTel] No OTEL_EXPORTER_OTLP_ENDPOINT set, returning no-op tracer")
|
|
227
237
|
return trace.get_tracer(service_name)
|
|
228
238
|
|
|
229
239
|
# Initialize tracing with parent context if provided
|
|
@@ -152,21 +152,34 @@ async def run_agent(
|
|
|
152
152
|
docker_cmd.extend(["--instruction", instruction])
|
|
153
153
|
|
|
154
154
|
# Run container - agents emit their own OTel spans
|
|
155
|
+
# Use large limit to handle agents that output long lines (e.g., JSON with file contents)
|
|
155
156
|
process = await asyncio.create_subprocess_exec(
|
|
156
157
|
*docker_cmd,
|
|
157
158
|
stdout=asyncio.subprocess.PIPE,
|
|
158
159
|
stderr=asyncio.subprocess.STDOUT,
|
|
160
|
+
limit=100 * 1024 * 1024, # 100MB buffer limit
|
|
159
161
|
)
|
|
160
162
|
|
|
161
|
-
# Capture output for error reporting
|
|
163
|
+
# Capture output for error reporting using chunked reads to handle large lines
|
|
162
164
|
output_lines: list[str] = []
|
|
163
165
|
assert process.stdout is not None
|
|
166
|
+
buffer = ""
|
|
164
167
|
while True:
|
|
165
|
-
|
|
166
|
-
|
|
168
|
+
try:
|
|
169
|
+
chunk = await process.stdout.read(65536)
|
|
170
|
+
except Exception:
|
|
171
|
+
break
|
|
172
|
+
if not chunk:
|
|
167
173
|
break
|
|
168
|
-
|
|
169
|
-
|
|
174
|
+
buffer += chunk.decode(errors="replace")
|
|
175
|
+
|
|
176
|
+
while "\n" in buffer:
|
|
177
|
+
line, buffer = buffer.split("\n", 1)
|
|
178
|
+
output_lines.append(line)
|
|
179
|
+
|
|
180
|
+
# Handle any remaining content in buffer
|
|
181
|
+
if buffer.strip():
|
|
182
|
+
output_lines.append(buffer)
|
|
170
183
|
|
|
171
184
|
await process.wait()
|
|
172
185
|
|
|
@@ -10,10 +10,18 @@ from pydantic import AwareDatetime, BaseModel, ConfigDict, Field
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class AgentConfig(BaseModel):
|
|
13
|
+
"""Agent config - supports multiple formats.
|
|
14
|
+
|
|
15
|
+
New format: agent + version (version optional, defaults to latest)
|
|
16
|
+
Legacy format: agent_id (public_id)
|
|
17
|
+
"""
|
|
18
|
+
|
|
13
19
|
model_config = ConfigDict(
|
|
14
20
|
extra="allow",
|
|
15
21
|
)
|
|
16
|
-
|
|
22
|
+
agent: Annotated[str | None, Field(title="Agent")] = None
|
|
23
|
+
version: Annotated[str | None, Field(title="Version")] = None
|
|
24
|
+
agent_id: Annotated[str | None, Field(title="Agent Id")] = None # backwards compat
|
|
17
25
|
config: Annotated[dict[str, Any] | None, Field(title="Config")] = {}
|
|
18
26
|
|
|
19
27
|
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"""Plato Chronos CLI - Launch and manage Chronos jobs."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
import typer
|
|
9
|
+
|
|
10
|
+
from plato.v1.cli.utils import console
|
|
11
|
+
|
|
12
|
+
chronos_app = typer.Typer(help="Chronos job management commands.")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@chronos_app.command()
|
|
16
|
+
def launch(
|
|
17
|
+
config: Path = typer.Argument(
|
|
18
|
+
...,
|
|
19
|
+
help="Path to job config JSON file",
|
|
20
|
+
exists=True,
|
|
21
|
+
readable=True,
|
|
22
|
+
),
|
|
23
|
+
chronos_url: str = typer.Option(
|
|
24
|
+
None,
|
|
25
|
+
"--url",
|
|
26
|
+
"-u",
|
|
27
|
+
envvar="CHRONOS_URL",
|
|
28
|
+
help="Chronos API URL (default: https://chronos.plato.so)",
|
|
29
|
+
),
|
|
30
|
+
api_key: str = typer.Option(
|
|
31
|
+
None,
|
|
32
|
+
"--api-key",
|
|
33
|
+
"-k",
|
|
34
|
+
envvar="PLATO_API_KEY",
|
|
35
|
+
help="Plato API key for authentication",
|
|
36
|
+
),
|
|
37
|
+
wait: bool = typer.Option(
|
|
38
|
+
False,
|
|
39
|
+
"--wait",
|
|
40
|
+
"-w",
|
|
41
|
+
help="Wait for job completion and stream logs",
|
|
42
|
+
),
|
|
43
|
+
):
|
|
44
|
+
"""
|
|
45
|
+
Launch a Chronos job from a config file.
|
|
46
|
+
|
|
47
|
+
The config file should be a JSON file with the following structure:
|
|
48
|
+
|
|
49
|
+
\b
|
|
50
|
+
{
|
|
51
|
+
"world_package": "plato-world-structured-execution",
|
|
52
|
+
"world_version": "0.1.13", // optional, uses latest if not specified
|
|
53
|
+
"world_config": { ... },
|
|
54
|
+
"agent_configs": {
|
|
55
|
+
"skill_runner": {
|
|
56
|
+
"agent_id": "claude-code:2.1.5",
|
|
57
|
+
"config": { ... }
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"secret_ids": [1, 2, 3] // IDs of secrets from Chronos
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
Examples:
|
|
64
|
+
plato chronos launch config.json
|
|
65
|
+
plato chronos launch config.json --wait
|
|
66
|
+
plato chronos launch config.json --url https://chronos.example.com
|
|
67
|
+
"""
|
|
68
|
+
import httpx
|
|
69
|
+
|
|
70
|
+
from plato.chronos.api.jobs import launch_job
|
|
71
|
+
from plato.chronos.models import AgentConfig, LaunchJobRequest
|
|
72
|
+
|
|
73
|
+
# Set defaults
|
|
74
|
+
if not chronos_url:
|
|
75
|
+
chronos_url = "https://chronos.plato.so"
|
|
76
|
+
|
|
77
|
+
if not api_key:
|
|
78
|
+
console.print("[red]❌ No API key provided[/red]")
|
|
79
|
+
console.print("Set PLATO_API_KEY environment variable or use --api-key")
|
|
80
|
+
raise typer.Exit(1)
|
|
81
|
+
|
|
82
|
+
# Load config
|
|
83
|
+
try:
|
|
84
|
+
with open(config) as f:
|
|
85
|
+
job_config = json.load(f)
|
|
86
|
+
except json.JSONDecodeError as e:
|
|
87
|
+
console.print(f"[red]❌ Invalid JSON in config file: {e}[/red]")
|
|
88
|
+
raise typer.Exit(1)
|
|
89
|
+
|
|
90
|
+
# Validate required fields
|
|
91
|
+
if "world_package" not in job_config:
|
|
92
|
+
console.print("[red]❌ Missing required field: world_package[/red]")
|
|
93
|
+
raise typer.Exit(1)
|
|
94
|
+
|
|
95
|
+
if "agent_configs" not in job_config:
|
|
96
|
+
console.print("[red]❌ Missing required field: agent_configs[/red]")
|
|
97
|
+
raise typer.Exit(1)
|
|
98
|
+
|
|
99
|
+
# Build agent configs - supports both formats:
|
|
100
|
+
# - {"agent": "claude-code", "version": "2.1.5"} (new)
|
|
101
|
+
# - {"agent_id": "ag_xxxxx"} (backwards compat)
|
|
102
|
+
agent_configs = {}
|
|
103
|
+
for slot_name, agent_cfg in job_config.get("agent_configs", {}).items():
|
|
104
|
+
if "agent" not in agent_cfg and "agent_id" not in agent_cfg:
|
|
105
|
+
console.print(f"[red]❌ Missing 'agent' or 'agent_id' for slot: {slot_name}[/red]")
|
|
106
|
+
raise typer.Exit(1)
|
|
107
|
+
|
|
108
|
+
config_kwargs = {"config": agent_cfg.get("config", {})}
|
|
109
|
+
if "agent" in agent_cfg:
|
|
110
|
+
config_kwargs["agent"] = agent_cfg["agent"]
|
|
111
|
+
config_kwargs["version"] = agent_cfg.get("version")
|
|
112
|
+
else:
|
|
113
|
+
config_kwargs["agent_id"] = agent_cfg["agent_id"]
|
|
114
|
+
|
|
115
|
+
agent_configs[slot_name] = AgentConfig(**config_kwargs)
|
|
116
|
+
|
|
117
|
+
# Build request
|
|
118
|
+
request = LaunchJobRequest(
|
|
119
|
+
world_package=job_config["world_package"],
|
|
120
|
+
world_version=job_config.get("world_version"),
|
|
121
|
+
world_config=job_config.get("world_config"),
|
|
122
|
+
agent_configs=agent_configs,
|
|
123
|
+
secret_ids=job_config.get("secret_ids"),
|
|
124
|
+
runtime_artifact_id=job_config.get("runtime_artifact_id"),
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
console.print("[blue]🚀 Launching job...[/blue]")
|
|
128
|
+
console.print(f" World: {request.world_package}")
|
|
129
|
+
if request.world_version:
|
|
130
|
+
console.print(f" Version: {request.world_version}")
|
|
131
|
+
console.print(f" Agents: {list(agent_configs.keys())}")
|
|
132
|
+
|
|
133
|
+
try:
|
|
134
|
+
with httpx.Client(base_url=chronos_url, timeout=60) as client:
|
|
135
|
+
response = launch_job.sync(client, request, x_api_key=api_key)
|
|
136
|
+
|
|
137
|
+
console.print("\n[green]✅ Job launched successfully![/green]")
|
|
138
|
+
console.print(f" Session ID: {response.session_id}")
|
|
139
|
+
console.print(f" Plato Session: {response.plato_session_id}")
|
|
140
|
+
console.print(f" Status: {response.status}")
|
|
141
|
+
console.print(f"\n[dim]View at: {chronos_url}/sessions/{response.session_id}[/dim]")
|
|
142
|
+
|
|
143
|
+
if wait:
|
|
144
|
+
console.print("\n[yellow]--wait not yet implemented[/yellow]")
|
|
145
|
+
|
|
146
|
+
except Exception as e:
|
|
147
|
+
console.print(f"[red]❌ Failed to launch job: {e}[/red]")
|
|
148
|
+
raise typer.Exit(1)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@chronos_app.command()
|
|
152
|
+
def example(
|
|
153
|
+
world: str = typer.Argument(
|
|
154
|
+
"structured-execution",
|
|
155
|
+
help="World to generate example config for",
|
|
156
|
+
),
|
|
157
|
+
output: Path = typer.Option(
|
|
158
|
+
None,
|
|
159
|
+
"--output",
|
|
160
|
+
"-o",
|
|
161
|
+
help="Output file path (prints to stdout if not specified)",
|
|
162
|
+
),
|
|
163
|
+
):
|
|
164
|
+
"""
|
|
165
|
+
Generate an example job config file.
|
|
166
|
+
|
|
167
|
+
Examples:
|
|
168
|
+
plato chronos example
|
|
169
|
+
plato chronos example structured-execution -o config.json
|
|
170
|
+
"""
|
|
171
|
+
examples = {
|
|
172
|
+
"structured-execution": {
|
|
173
|
+
"world_package": "plato-world-structured-execution",
|
|
174
|
+
"world_version": "0.1.13",
|
|
175
|
+
"world_config": {
|
|
176
|
+
"sim_name": "my-sim",
|
|
177
|
+
"github_url": "https://github.com/example/repo",
|
|
178
|
+
"max_attempts": 3,
|
|
179
|
+
"use_backtrack": True,
|
|
180
|
+
"skill_runner": {
|
|
181
|
+
"image": "claude-code:2.1.5",
|
|
182
|
+
"config": {"model_name": "anthropic/claude-sonnet-4-20250514", "max_turns": 100},
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
"agent_configs": {
|
|
186
|
+
"skill_runner": {
|
|
187
|
+
"agent": "claude-code",
|
|
188
|
+
"version": "2.1.5",
|
|
189
|
+
"config": {"model_name": "anthropic/claude-sonnet-4-20250514", "max_turns": 100},
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"secret_ids": [],
|
|
193
|
+
"_comment": "Add secret IDs from Chronos. Secrets should include: plato_api_key, anthropic_api_key (or claude_oauth_credentials for the agent)",
|
|
194
|
+
},
|
|
195
|
+
"code-world": {
|
|
196
|
+
"world_package": "plato-world-code",
|
|
197
|
+
"world_config": {"task": "Fix the bug in src/main.py", "repo_url": "https://github.com/example/repo"},
|
|
198
|
+
"agent_configs": {
|
|
199
|
+
"coder": {"agent": "claude-code", "config": {"model_name": "anthropic/claude-sonnet-4-20250514"}}
|
|
200
|
+
},
|
|
201
|
+
"secret_ids": [],
|
|
202
|
+
"_comment": "version is optional - uses latest if not specified",
|
|
203
|
+
},
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if world not in examples:
|
|
207
|
+
console.print(f"[red]❌ Unknown world: {world}[/red]")
|
|
208
|
+
console.print(f"Available examples: {list(examples.keys())}")
|
|
209
|
+
raise typer.Exit(1)
|
|
210
|
+
|
|
211
|
+
example_config = examples[world]
|
|
212
|
+
json_output = json.dumps(example_config, indent=2)
|
|
213
|
+
|
|
214
|
+
if output:
|
|
215
|
+
with open(output, "w") as f:
|
|
216
|
+
f.write(json_output)
|
|
217
|
+
console.print(f"[green]✅ Example config written to {output}[/green]")
|
|
218
|
+
else:
|
|
219
|
+
console.print(json_output)
|
|
@@ -9,6 +9,7 @@ import typer
|
|
|
9
9
|
from dotenv import load_dotenv
|
|
10
10
|
|
|
11
11
|
from plato.v1.cli.agent import agent_app
|
|
12
|
+
from plato.v1.cli.chronos import chronos_app
|
|
12
13
|
from plato.v1.cli.pm import pm_app
|
|
13
14
|
from plato.v1.cli.sandbox import sandbox_app
|
|
14
15
|
from plato.v1.cli.utils import console
|
|
@@ -71,6 +72,7 @@ app.add_typer(sandbox_app, name="sandbox")
|
|
|
71
72
|
app.add_typer(pm_app, name="pm")
|
|
72
73
|
app.add_typer(agent_app, name="agent")
|
|
73
74
|
app.add_typer(world_app, name="world")
|
|
75
|
+
app.add_typer(chronos_app, name="chronos")
|
|
74
76
|
|
|
75
77
|
|
|
76
78
|
# =============================================================================
|
|
@@ -131,6 +131,9 @@ def sandbox_start(
|
|
|
131
131
|
timeout: int = typer.Option(1800, "--timeout", help="VM lifetime in seconds (default: 30 minutes)"),
|
|
132
132
|
no_reset: bool = typer.Option(False, "--no-reset", help="Skip initial reset after ready"),
|
|
133
133
|
json_output: bool = typer.Option(False, "--json", "-j", help="Output as JSON"),
|
|
134
|
+
working_dir: Path = typer.Option(
|
|
135
|
+
None, "--working-dir", "-w", help="Working directory for .sandbox.yaml and .plato/"
|
|
136
|
+
),
|
|
134
137
|
):
|
|
135
138
|
"""
|
|
136
139
|
Start a sandbox environment.
|
|
@@ -377,7 +380,7 @@ def sandbox_start(
|
|
|
377
380
|
console.print("[cyan] Generating SSH key pair...[/cyan]")
|
|
378
381
|
|
|
379
382
|
base_url = os.getenv("PLATO_BASE_URL", "https://plato.so")
|
|
380
|
-
ssh_info = setup_ssh_for_sandbox(base_url, job_id, username=ssh_username)
|
|
383
|
+
ssh_info = setup_ssh_for_sandbox(base_url, job_id, username=ssh_username, working_dir=working_dir)
|
|
381
384
|
ssh_host = ssh_info["ssh_host"]
|
|
382
385
|
ssh_config_path = ssh_info["config_path"]
|
|
383
386
|
ssh_private_key_path = ssh_info["private_key_path"]
|
|
@@ -489,7 +492,7 @@ def sandbox_start(
|
|
|
489
492
|
# Add heartbeat PID
|
|
490
493
|
if heartbeat_pid:
|
|
491
494
|
state["heartbeat_pid"] = heartbeat_pid
|
|
492
|
-
save_sandbox_state(state)
|
|
495
|
+
save_sandbox_state(state, working_dir)
|
|
493
496
|
|
|
494
497
|
# Close the plato client (heartbeat process keeps session alive)
|
|
495
498
|
plato.close()
|
|
@@ -9,21 +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:
|
|
12
|
+
def get_plato_dir(working_dir: Path | str | None = None) -> Path:
|
|
13
13
|
"""Get the directory for plato config/SSH files.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
Args:
|
|
16
|
+
working_dir: If provided, returns working_dir/.plato (for container/agent use).
|
|
17
|
+
If None, returns ~/.plato (local development).
|
|
17
18
|
"""
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return workspace / ".plato"
|
|
19
|
+
if working_dir is not None:
|
|
20
|
+
return Path(working_dir) / ".plato"
|
|
21
21
|
return Path.home() / ".plato"
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
def get_next_sandbox_number() -> int:
|
|
24
|
+
def get_next_sandbox_number(working_dir: Path | str | None = None) -> int:
|
|
25
25
|
"""Find next available sandbox number by checking existing config files."""
|
|
26
|
-
plato_dir = get_plato_dir()
|
|
26
|
+
plato_dir = get_plato_dir(working_dir)
|
|
27
27
|
if not plato_dir.exists():
|
|
28
28
|
return 1
|
|
29
29
|
|
|
@@ -41,13 +41,13 @@ def get_next_sandbox_number() -> int:
|
|
|
41
41
|
return max_num + 1
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def generate_ssh_key_pair(sandbox_num: int) -> tuple[str, str]:
|
|
44
|
+
def generate_ssh_key_pair(sandbox_num: int, working_dir: Path | str | None = None) -> tuple[str, str]:
|
|
45
45
|
"""
|
|
46
46
|
Generate a new ed25519 SSH key pair for a specific sandbox.
|
|
47
47
|
|
|
48
48
|
Returns (public_key_str, private_key_path).
|
|
49
49
|
"""
|
|
50
|
-
plato_dir = get_plato_dir()
|
|
50
|
+
plato_dir = get_plato_dir(working_dir)
|
|
51
51
|
plato_dir.mkdir(mode=0o700, exist_ok=True)
|
|
52
52
|
|
|
53
53
|
private_key_path = plato_dir / f"ssh_{sandbox_num}_key"
|
|
@@ -136,6 +136,7 @@ def create_ssh_config(
|
|
|
136
136
|
username: str,
|
|
137
137
|
private_key_path: str,
|
|
138
138
|
sandbox_num: int,
|
|
139
|
+
working_dir: Path | str | None = None,
|
|
139
140
|
) -> str:
|
|
140
141
|
"""
|
|
141
142
|
Create a temporary SSH config file for a specific sandbox.
|
|
@@ -172,7 +173,7 @@ def create_ssh_config(
|
|
|
172
173
|
TCPKeepAlive yes
|
|
173
174
|
"""
|
|
174
175
|
|
|
175
|
-
plato_dir = get_plato_dir()
|
|
176
|
+
plato_dir = get_plato_dir(working_dir)
|
|
176
177
|
plato_dir.mkdir(mode=0o700, exist_ok=True)
|
|
177
178
|
|
|
178
179
|
config_path = plato_dir / f"ssh_{sandbox_num}.conf"
|
|
@@ -182,7 +183,12 @@ def create_ssh_config(
|
|
|
182
183
|
return str(config_path)
|
|
183
184
|
|
|
184
185
|
|
|
185
|
-
def setup_ssh_for_sandbox(
|
|
186
|
+
def setup_ssh_for_sandbox(
|
|
187
|
+
base_url: str,
|
|
188
|
+
job_public_id: str,
|
|
189
|
+
username: str = "plato",
|
|
190
|
+
working_dir: Path | str | None = None,
|
|
191
|
+
) -> dict:
|
|
186
192
|
"""
|
|
187
193
|
Set up SSH access for a sandbox - generates keys and creates config.
|
|
188
194
|
|
|
@@ -190,14 +196,14 @@ def setup_ssh_for_sandbox(base_url: str, job_public_id: str, username: str = "pl
|
|
|
190
196
|
|
|
191
197
|
Returns dict with: ssh_host, config_path, public_key, private_key_path
|
|
192
198
|
"""
|
|
193
|
-
sandbox_num = get_next_sandbox_number()
|
|
199
|
+
sandbox_num = get_next_sandbox_number(working_dir)
|
|
194
200
|
ssh_host = f"sandbox-{sandbox_num}"
|
|
195
201
|
|
|
196
202
|
# Choose random port between 2200 and 2299
|
|
197
203
|
local_port = random.randint(2200, 2299)
|
|
198
204
|
|
|
199
205
|
# Generate SSH key pair
|
|
200
|
-
public_key, private_key_path = generate_ssh_key_pair(sandbox_num)
|
|
206
|
+
public_key, private_key_path = generate_ssh_key_pair(sandbox_num, working_dir)
|
|
201
207
|
|
|
202
208
|
# Create SSH config file
|
|
203
209
|
config_path = create_ssh_config(
|
|
@@ -208,6 +214,7 @@ def setup_ssh_for_sandbox(base_url: str, job_public_id: str, username: str = "pl
|
|
|
208
214
|
username=username,
|
|
209
215
|
private_key_path=private_key_path,
|
|
210
216
|
sandbox_num=sandbox_num,
|
|
217
|
+
working_dir=working_dir,
|
|
211
218
|
)
|
|
212
219
|
|
|
213
220
|
return {
|
|
@@ -15,32 +15,52 @@ console = Console()
|
|
|
15
15
|
SANDBOX_FILE = ".sandbox.yaml"
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
def get_sandbox_state() -> dict | None:
|
|
19
|
-
"""Read sandbox state from .sandbox.yaml
|
|
20
|
-
|
|
18
|
+
def get_sandbox_state(working_dir: Path | str | None = None) -> dict | None:
|
|
19
|
+
"""Read sandbox state from .sandbox.yaml.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
working_dir: Directory containing .sandbox.yaml. If None, uses cwd.
|
|
23
|
+
"""
|
|
24
|
+
base_dir = Path(working_dir) if working_dir else Path.cwd()
|
|
25
|
+
sandbox_file = base_dir / SANDBOX_FILE
|
|
21
26
|
if not sandbox_file.exists():
|
|
22
27
|
return None
|
|
23
28
|
with open(sandbox_file) as f:
|
|
24
29
|
return yaml.safe_load(f)
|
|
25
30
|
|
|
26
31
|
|
|
27
|
-
def save_sandbox_state(state: dict) -> None:
|
|
28
|
-
"""Save sandbox state to .sandbox.yaml
|
|
29
|
-
|
|
32
|
+
def save_sandbox_state(state: dict, working_dir: Path | str | None = None) -> None:
|
|
33
|
+
"""Save sandbox state to .sandbox.yaml.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
state: State dict to save.
|
|
37
|
+
working_dir: Directory to save .sandbox.yaml in. If None, uses cwd.
|
|
38
|
+
"""
|
|
39
|
+
base_dir = Path(working_dir) if working_dir else Path.cwd()
|
|
40
|
+
sandbox_file = base_dir / SANDBOX_FILE
|
|
30
41
|
with open(sandbox_file, "w") as f:
|
|
31
42
|
yaml.dump(state, f, default_flow_style=False)
|
|
32
43
|
|
|
33
44
|
|
|
34
|
-
def remove_sandbox_state() -> None:
|
|
35
|
-
"""Remove .sandbox.yaml
|
|
36
|
-
|
|
45
|
+
def remove_sandbox_state(working_dir: Path | str | None = None) -> None:
|
|
46
|
+
"""Remove .sandbox.yaml.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
working_dir: Directory containing .sandbox.yaml. If None, uses cwd.
|
|
50
|
+
"""
|
|
51
|
+
base_dir = Path(working_dir) if working_dir else Path.cwd()
|
|
52
|
+
sandbox_file = base_dir / SANDBOX_FILE
|
|
37
53
|
if sandbox_file.exists():
|
|
38
54
|
sandbox_file.unlink()
|
|
39
55
|
|
|
40
56
|
|
|
41
|
-
def require_sandbox_state() -> dict:
|
|
42
|
-
"""Get sandbox state or exit with error.
|
|
43
|
-
|
|
57
|
+
def require_sandbox_state(working_dir: Path | str | None = None) -> dict:
|
|
58
|
+
"""Get sandbox state or exit with error.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
working_dir: Directory containing .sandbox.yaml. If None, uses cwd.
|
|
62
|
+
"""
|
|
63
|
+
state = get_sandbox_state(working_dir)
|
|
44
64
|
if not state:
|
|
45
65
|
console.print("[red]No sandbox found in current directory[/red]")
|
|
46
66
|
console.print("\n[yellow]Start a sandbox with:[/yellow]")
|
|
@@ -28,6 +28,17 @@ from plato.agents.otel import (
|
|
|
28
28
|
|
|
29
29
|
logger = logging.getLogger(__name__)
|
|
30
30
|
|
|
31
|
+
|
|
32
|
+
def _get_plato_version() -> str:
|
|
33
|
+
"""Get the installed plato SDK version."""
|
|
34
|
+
try:
|
|
35
|
+
from importlib.metadata import version
|
|
36
|
+
|
|
37
|
+
return version("plato")
|
|
38
|
+
except Exception:
|
|
39
|
+
return "unknown"
|
|
40
|
+
|
|
41
|
+
|
|
31
42
|
# Global registry of worlds
|
|
32
43
|
_WORLD_REGISTRY: dict[str, type[BaseWorld]] = {}
|
|
33
44
|
|
|
@@ -673,6 +684,11 @@ The following services are available for your use:
|
|
|
673
684
|
else:
|
|
674
685
|
logger.debug("No otel_url in config - OTel tracing disabled")
|
|
675
686
|
|
|
687
|
+
# Log version info (goes to OTel after init_tracing)
|
|
688
|
+
plato_version = _get_plato_version()
|
|
689
|
+
world_version = self.get_version()
|
|
690
|
+
self.logger.info(f"World version: {world_version}, Plato SDK version: {plato_version}")
|
|
691
|
+
|
|
676
692
|
# Connect to Plato session if configured (for heartbeats)
|
|
677
693
|
await self._connect_plato_session()
|
|
678
694
|
|
plato_sdk_v2-2.3.7/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.3.7
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|