plato-sdk-v2 2.2.4__tar.gz → 2.3.11__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.4 → plato_sdk_v2-2.3.11}/PKG-INFO +4 -1
- plato_sdk_v2-2.3.11/VERSION +1 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/SIMULATOR_LIFECYCLE.md +1 -2
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/SIM-CREATION-ARCHITECTURE.md +1 -9
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-debugger/SKILL.md +1 -15
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-sandbox-services/SKILL.md +0 -1
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/agents/__init__.py +25 -13
- plato_sdk_v2-2.3.11/plato/agents/artifacts.py +108 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/agents/config.py +2 -7
- plato_sdk_v2-2.3.11/plato/agents/otel.py +248 -0
- plato_sdk_v2-2.3.11/plato/agents/runner.py +196 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/models/__init__.py +9 -1
- plato_sdk_v2-2.3.11/plato/v1/cli/chronos.py +219 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/main.py +2 -2
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/pm.py +3 -3
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/sandbox.py +200 -52
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/ssh.py +28 -9
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/utils.py +32 -12
- plato_sdk_v2-2.3.11/plato/v1/cli/verify.py +685 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/async_/environment.py +31 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/async_/session.py +33 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/sync/environment.py +31 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/sync/session.py +33 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/worlds/README.md +2 -1
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/worlds/__init__.py +3 -1
- plato_sdk_v2-2.3.11/plato/worlds/base.py +766 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/worlds/config.py +42 -3
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/worlds/runner.py +171 -52
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/pyproject.toml +4 -0
- plato_sdk_v2-2.3.11/tests/integration/test_chronos_callback.py +182 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/uv.lock +1696 -1575
- plato_sdk_v2-2.2.4/.sandbox.yaml +0 -11
- plato_sdk_v2-2.2.4/VERSION +0 -1
- plato_sdk_v2-2.2.4/plato/agents/logging.py +0 -401
- plato_sdk_v2-2.2.4/plato/agents/runner.py +0 -161
- plato_sdk_v2-2.2.4/plato/chronos/api/callback/__init__.py +0 -11
- plato_sdk_v2-2.2.4/plato/chronos/api/callback/push_agent_logs.py +0 -61
- plato_sdk_v2-2.2.4/plato/chronos/api/callback/update_agent_status.py +0 -57
- plato_sdk_v2-2.2.4/plato/chronos/api/callback/upload_artifacts.py +0 -59
- plato_sdk_v2-2.2.4/plato/chronos/api/callback/upload_logs_zip.py +0 -57
- plato_sdk_v2-2.2.4/plato/chronos/api/callback/upload_trajectory.py +0 -57
- plato_sdk_v2-2.2.4/plato/v1/cli/sim.py +0 -11
- plato_sdk_v2-2.2.4/plato/v1/cli/verify.py +0 -1269
- plato_sdk_v2-2.2.4/plato/worlds/base.py +0 -436
- plato_sdk_v2-2.2.4/tests/integration/test_chronos_callback.py +0 -409
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/.claude/agents/sim-creator.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/.gitignore +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/BUILDING_SIMS.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/README.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/ci/CLAUDE.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/ci/deploy.sh +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/ci/lint.sh +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/ci/setup.sh +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/ci/version-bump.sh +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/AGENT_SPEC.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/CLI.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/GENERATING_SIM_SDKS.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/SIM_CREATOR.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/cli/agent.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/cli/flows.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/cli/pm.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/cli/sandbox.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/cli/sims.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/cli/world.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/sim-creation-pipeline.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skill-restructure-plan.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-config/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-creator/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-flow-audit/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-flow-clear/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-flow-run/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-research/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-review/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-snapshot/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-submit/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/skills/sim-validate/SKILL.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/testcommit +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/docs/unit.sh +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/backup.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/cleanup.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/close.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/close_async.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/create.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/create_batch.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/create_simulator.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_active_session.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_flows.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_job_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_job_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_public_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_simulators.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_state.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/reset.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/score.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/env/update_simulator.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/queue/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/queue/get_vms.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/queue/get_workers.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/archive_session.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_session.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_sessions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/set_session_output.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/update_session_public.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/register.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/import_agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/close.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/execute.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/make.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/public_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/reset.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/set_date.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/state.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/pypi/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/pypi/download_package.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/pypi/package_index.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/create.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/deploy.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/handle_import.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/list_releases.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/releases/update.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/close.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/execute.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/make.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/reset.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/set_date.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/state.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/user/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/v2/user/get_current_user.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/version/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/api/version/check.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/client.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/errors.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/models/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_generated/py.typed +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/cli.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/instruction.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/parser.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/python.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/agents/base.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/agents/build.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/agents/trajectory.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/create_agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/delete_agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/get_agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/list_agents.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/agents/lookup_agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/auth/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/default/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/default/health.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/jobs/launch_job.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/registry/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/runtimes/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/runtimes/create_runtime.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/runtimes/get_runtime.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/runtimes/test_runtime.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/secrets/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/secrets/create_secret.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/secrets/delete_secret.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/secrets/get_secret.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/secrets/list_secrets.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/secrets/update_secret.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/sessions/get_session.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/status/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/templates/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/templates/create_template.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/templates/delete_template.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/templates/get_template.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/templates/list_templates.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/templates/update_template.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/trajectories/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/worlds/create_world.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/worlds/delete_world.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/worlds/get_world.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/api/worlds/list_worlds.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/client.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/errors.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/chronos/py.typed +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/py.typed +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/sims/README.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/sims/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/sims/agent_helpers.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/sims/cli.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/sims/generate_clients.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/sims/registry.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/audit_ui.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli/world.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/cli.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/config.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/examples/doordash_tasks.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/examples/loadtest.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/examples/test_env.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/examples/test_env_custom_browser.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/examples/test_env_sync.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/examples/test_reuse_env.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/examples/test_run.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/exceptions.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/README.md +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/background.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/content.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/options.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/options.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/package.json +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/flow_executor.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/models/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/models/build_models.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/models/env.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/models/flow.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/models/sandbox.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/models/task.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/sandbox_sdk.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/sdk.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/sync_env.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/sync_flow_executor.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/sync_sdk.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v1/utils/proxytunnel.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/async_/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/async_/artifact.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/async_/client.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/async_/flow_executor.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/models.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/sync/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/sync/artifact.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/sync/client.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/sync/flow_executor.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/types.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/utils/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/utils/db_cleanup.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/utils/models.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/v2/utils/proxy_tunnel.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/plato/worlds/build_hook.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/scripts/get_all_artifact_targets.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/integration/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/integration/conftest.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/integration/test_browser_agent.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/integration/test_cleanup_snapshot.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/integration/test_code_world.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/integration/test_harbor_agent_runner.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/sims/__init__.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/sims/conftest.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/sims/test_agent_helpers.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/test_heartbeat_keepalive.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/test_session_serialization.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/test_set_date.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/test_v2_imports.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/test_v2_multisim_integration.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/test_v2_session.py +0 -0
- {plato_sdk_v2-2.2.4 → plato_sdk_v2-2.3.11}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plato-sdk-v2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.11
|
|
4
4
|
Summary: Python SDK for the Plato API
|
|
5
5
|
Author-email: Plato <support@plato.so>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -21,6 +21,9 @@ Requires-Dist: google-genai>=1.0.0
|
|
|
21
21
|
Requires-Dist: httpx>=0.25.0
|
|
22
22
|
Requires-Dist: jinja2>=3.1.0
|
|
23
23
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
24
|
+
Requires-Dist: opentelemetry-api>=1.20.0
|
|
25
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20.0
|
|
26
|
+
Requires-Dist: opentelemetry-sdk>=1.20.0
|
|
24
27
|
Requires-Dist: pydantic-settings>=2.12.0
|
|
25
28
|
Requires-Dist: pydantic>=2.0.0
|
|
26
29
|
Requires-Dist: python-dotenv>=1.2.1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.3.11
|
|
@@ -425,9 +425,8 @@ plato sandbox start --from-config # or --simulator
|
|
|
425
425
|
|
|
426
426
|
### Docker Compose Not Starting
|
|
427
427
|
|
|
428
|
-
Use the user docker socket:
|
|
429
428
|
```bash
|
|
430
|
-
|
|
429
|
+
docker compose up -d
|
|
431
430
|
```
|
|
432
431
|
|
|
433
432
|
### Login Flow Failing
|
|
@@ -343,16 +343,9 @@ ssh -F ~/.plato/ssh_42.conf sandbox-42
|
|
|
343
343
|
### CRITICAL: Two Docker Sockets on VM
|
|
344
344
|
|
|
345
345
|
```bash
|
|
346
|
-
#
|
|
347
|
-
docker ps # Shows only plato-worker
|
|
348
|
-
|
|
349
|
-
# App socket - has actual app containers (db, app, proxy)
|
|
350
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
351
|
-
docker ps # Shows kimai-db, kimai-app, kimai-nginx, etc.
|
|
346
|
+
docker ps # Shows all containers including db, app, proxy
|
|
352
347
|
```
|
|
353
348
|
|
|
354
|
-
**Always use the app socket for debugging!**
|
|
355
|
-
|
|
356
349
|
### Code Path on VM
|
|
357
350
|
|
|
358
351
|
```
|
|
@@ -361,7 +354,6 @@ docker ps # Shows kimai-db, kimai-app, kimai-nginx, etc.
|
|
|
361
354
|
|
|
362
355
|
```bash
|
|
363
356
|
# On VM: iterate fast
|
|
364
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
365
357
|
cd /home/plato/worktree/{sim_name}/base
|
|
366
358
|
docker compose down && docker compose up -d
|
|
367
359
|
docker compose logs -f
|
|
@@ -40,17 +40,6 @@ sim_path: "/path/to/sim"
|
|
|
40
40
|
|
|
41
41
|
### CRITICAL: Two Docker Sockets
|
|
42
42
|
|
|
43
|
-
The VM has **two Docker sockets**:
|
|
44
|
-
|
|
45
|
-
| Socket | Contains | When to Use |
|
|
46
|
-
|--------|----------|-------------|
|
|
47
|
-
| Default | `plato-worker` only | Never for debugging app |
|
|
48
|
-
| `/var/run/docker-user.sock` | App containers (db, app, proxy) | **Always use this** |
|
|
49
|
-
|
|
50
|
-
**Always export before running docker commands:**
|
|
51
|
-
```bash
|
|
52
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
53
|
-
```
|
|
54
43
|
|
|
55
44
|
### CRITICAL: Code Path
|
|
56
45
|
|
|
@@ -69,10 +58,7 @@ Instead, iterate directly on the VM:
|
|
|
69
58
|
# 1. SSH into VM
|
|
70
59
|
ssh -F {ssh_config} sandbox-{id}
|
|
71
60
|
|
|
72
|
-
# 2.
|
|
73
|
-
export DOCKER_HOST=unix:///var/run/docker-user.sock
|
|
74
|
-
|
|
75
|
-
# 3. Go to code directory
|
|
61
|
+
# 2. Go to code directory
|
|
76
62
|
cd /home/plato/worktree/{sim_name}/base
|
|
77
63
|
|
|
78
64
|
# 4. Edit files directly
|
|
@@ -20,8 +20,9 @@ Trajectory (ATIF):
|
|
|
20
20
|
- Trajectory: ATIF trajectory model
|
|
21
21
|
- Step, Agent, ToolCall, etc.: ATIF components
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
-
|
|
23
|
+
OTel Tracing:
|
|
24
|
+
- instrument: Initialize OTel tracing from environment
|
|
25
|
+
- get_tracer: Get a tracer for creating spans
|
|
25
26
|
|
|
26
27
|
Example (direct execution):
|
|
27
28
|
from plato.agents import BaseAgent, AgentConfig, Secret, register_agent
|
|
@@ -80,14 +81,25 @@ __all__ = [
|
|
|
80
81
|
"Metrics",
|
|
81
82
|
"FinalMetrics",
|
|
82
83
|
"SCHEMA_VERSION",
|
|
83
|
-
#
|
|
84
|
-
"
|
|
85
|
-
"span",
|
|
86
|
-
"log_event",
|
|
84
|
+
# Artifacts
|
|
85
|
+
"zip_directory",
|
|
87
86
|
"upload_artifacts",
|
|
88
|
-
"
|
|
87
|
+
"upload_artifact",
|
|
88
|
+
"upload_to_s3",
|
|
89
|
+
# OTel tracing
|
|
90
|
+
"init_tracing",
|
|
91
|
+
"instrument",
|
|
92
|
+
"shutdown_tracing",
|
|
93
|
+
"get_tracer",
|
|
94
|
+
"is_initialized",
|
|
89
95
|
]
|
|
90
96
|
|
|
97
|
+
from plato.agents.artifacts import (
|
|
98
|
+
upload_artifact,
|
|
99
|
+
upload_artifacts,
|
|
100
|
+
upload_to_s3,
|
|
101
|
+
zip_directory,
|
|
102
|
+
)
|
|
91
103
|
from plato.agents.base import (
|
|
92
104
|
BaseAgent,
|
|
93
105
|
ConfigT,
|
|
@@ -97,12 +109,12 @@ from plato.agents.base import (
|
|
|
97
109
|
)
|
|
98
110
|
from plato.agents.build import BuildConfig, load_build_config
|
|
99
111
|
from plato.agents.config import AgentConfig, Secret
|
|
100
|
-
from plato.agents.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
112
|
+
from plato.agents.otel import (
|
|
113
|
+
get_tracer,
|
|
114
|
+
init_tracing,
|
|
115
|
+
instrument,
|
|
116
|
+
is_initialized,
|
|
117
|
+
shutdown_tracing,
|
|
106
118
|
)
|
|
107
119
|
from plato.agents.runner import run_agent
|
|
108
120
|
from plato.agents.trajectory import (
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""Artifact upload utilities for Plato agents and worlds.
|
|
2
|
+
|
|
3
|
+
These functions upload artifacts directly to S3 using presigned URLs.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import io
|
|
9
|
+
import logging
|
|
10
|
+
import zipfile
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
import httpx
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def zip_directory(dir_path: str) -> bytes:
|
|
19
|
+
"""Zip an entire directory.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
dir_path: Path to the directory
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Zip file contents as bytes.
|
|
26
|
+
"""
|
|
27
|
+
path = Path(dir_path)
|
|
28
|
+
buffer = io.BytesIO()
|
|
29
|
+
|
|
30
|
+
with zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED) as zf:
|
|
31
|
+
for file_path in path.rglob("*"):
|
|
32
|
+
if file_path.is_file():
|
|
33
|
+
arcname = file_path.relative_to(path)
|
|
34
|
+
zf.write(file_path, arcname)
|
|
35
|
+
|
|
36
|
+
buffer.seek(0)
|
|
37
|
+
return buffer.read()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def upload_to_s3(upload_url: str, data: bytes, content_type: str = "application/octet-stream") -> bool:
|
|
41
|
+
"""Upload data directly to S3 using a presigned URL.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
upload_url: Presigned S3 PUT URL
|
|
45
|
+
data: Raw bytes to upload
|
|
46
|
+
content_type: MIME type of the content
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
True if successful, False otherwise
|
|
50
|
+
"""
|
|
51
|
+
if not upload_url:
|
|
52
|
+
logger.warning("No upload URL provided")
|
|
53
|
+
return False
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
async with httpx.AsyncClient(timeout=120.0) as client:
|
|
57
|
+
response = await client.put(
|
|
58
|
+
upload_url,
|
|
59
|
+
content=data,
|
|
60
|
+
headers={"Content-Type": content_type},
|
|
61
|
+
)
|
|
62
|
+
if response.status_code in (200, 201, 204):
|
|
63
|
+
logger.info(f"Uploaded {len(data)} bytes to S3")
|
|
64
|
+
return True
|
|
65
|
+
else:
|
|
66
|
+
logger.warning(f"S3 upload failed: {response.status_code} {response.text}")
|
|
67
|
+
return False
|
|
68
|
+
except Exception as e:
|
|
69
|
+
logger.warning(f"Failed to upload to S3: {e}")
|
|
70
|
+
return False
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
async def upload_artifacts(upload_url: str, dir_path: str) -> bool:
|
|
74
|
+
"""Upload a directory as a zip directly to S3.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
upload_url: Presigned S3 PUT URL
|
|
78
|
+
dir_path: Path to the directory to upload
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
True if successful, False otherwise
|
|
82
|
+
"""
|
|
83
|
+
try:
|
|
84
|
+
zip_data = zip_directory(dir_path)
|
|
85
|
+
logger.info(f"Zipped directory: {len(zip_data)} bytes")
|
|
86
|
+
except Exception as e:
|
|
87
|
+
logger.warning(f"Failed to zip directory: {e}")
|
|
88
|
+
return False
|
|
89
|
+
|
|
90
|
+
return await upload_to_s3(upload_url, zip_data, "application/zip")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
async def upload_artifact(
|
|
94
|
+
upload_url: str,
|
|
95
|
+
data: bytes,
|
|
96
|
+
content_type: str = "application/octet-stream",
|
|
97
|
+
) -> bool:
|
|
98
|
+
"""Upload an artifact directly to S3.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
upload_url: Presigned S3 PUT URL
|
|
102
|
+
data: Raw bytes of the artifact
|
|
103
|
+
content_type: MIME type of the content
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
True if successful, False otherwise
|
|
107
|
+
"""
|
|
108
|
+
return await upload_to_s3(upload_url, data, content_type)
|
|
@@ -21,7 +21,6 @@ import json
|
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
from typing import Any
|
|
23
23
|
|
|
24
|
-
from pydantic import Field
|
|
25
24
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
26
25
|
|
|
27
26
|
|
|
@@ -57,8 +56,6 @@ class AgentConfig(BaseSettings):
|
|
|
57
56
|
|
|
58
57
|
Attributes:
|
|
59
58
|
logs_dir: Directory for agent logs and trajectory output.
|
|
60
|
-
checkpoint_paths: Directories to watch for checkpoint triggers (for workspace tracking).
|
|
61
|
-
checkpoint_debounce_ms: Debounce interval for checkpoints.
|
|
62
59
|
"""
|
|
63
60
|
|
|
64
61
|
model_config = SettingsConfigDict(
|
|
@@ -68,8 +65,6 @@ class AgentConfig(BaseSettings):
|
|
|
68
65
|
)
|
|
69
66
|
|
|
70
67
|
logs_dir: str = "/logs"
|
|
71
|
-
checkpoint_paths: list[str] = Field(default_factory=list)
|
|
72
|
-
checkpoint_debounce_ms: int = 500
|
|
73
68
|
|
|
74
69
|
@classmethod
|
|
75
70
|
def get_field_secrets(cls) -> dict[str, Secret]:
|
|
@@ -97,7 +92,7 @@ class AgentConfig(BaseSettings):
|
|
|
97
92
|
secrets = []
|
|
98
93
|
|
|
99
94
|
# Skip internal fields
|
|
100
|
-
internal_fields = {"logs_dir"
|
|
95
|
+
internal_fields = {"logs_dir"}
|
|
101
96
|
|
|
102
97
|
for field_name, prop_schema in properties.items():
|
|
103
98
|
if field_name in internal_fields:
|
|
@@ -140,7 +135,7 @@ class AgentConfig(BaseSettings):
|
|
|
140
135
|
def get_config_dict(self) -> dict[str, Any]:
|
|
141
136
|
"""Extract non-secret config values as a dict."""
|
|
142
137
|
secrets_map = self.get_field_secrets()
|
|
143
|
-
internal_fields = {"logs_dir"
|
|
138
|
+
internal_fields = {"logs_dir"}
|
|
144
139
|
|
|
145
140
|
result: dict[str, Any] = {}
|
|
146
141
|
for field_name in self.model_fields:
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"""OpenTelemetry integration for Plato agents and worlds.
|
|
2
|
+
|
|
3
|
+
Provides tracing utilities using OpenTelemetry SDK. Traces are sent directly
|
|
4
|
+
to the Chronos OTLP endpoint.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
from plato.agents.otel import init_tracing, get_tracer, shutdown_tracing
|
|
8
|
+
|
|
9
|
+
# Initialize tracing (sends to Chronos OTLP endpoint)
|
|
10
|
+
init_tracing(
|
|
11
|
+
service_name="my-world",
|
|
12
|
+
session_id="session-123",
|
|
13
|
+
otlp_endpoint="http://chronos/api/otel",
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# Create spans
|
|
17
|
+
tracer = get_tracer()
|
|
18
|
+
with tracer.start_as_current_span("my-operation") as span:
|
|
19
|
+
span.set_attribute("key", "value")
|
|
20
|
+
# ... do work ...
|
|
21
|
+
|
|
22
|
+
# Cleanup
|
|
23
|
+
shutdown_tracing()
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
import logging
|
|
29
|
+
|
|
30
|
+
from opentelemetry import trace
|
|
31
|
+
from opentelemetry.trace import Tracer
|
|
32
|
+
|
|
33
|
+
_module_logger = logging.getLogger(__name__)
|
|
34
|
+
|
|
35
|
+
# Global state
|
|
36
|
+
_tracer_provider = None
|
|
37
|
+
_initialized = False
|
|
38
|
+
_log_handler = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class OTelSpanLogHandler(logging.Handler):
|
|
42
|
+
"""Logging handler that creates OTel spans for log messages.
|
|
43
|
+
|
|
44
|
+
Converts Python log records to OTel spans with log attributes.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def __init__(self, tracer: Tracer, level: int = logging.INFO):
|
|
48
|
+
super().__init__(level)
|
|
49
|
+
self.tracer = tracer
|
|
50
|
+
|
|
51
|
+
def emit(self, record: logging.LogRecord) -> None:
|
|
52
|
+
"""Emit a log record as an OTel span."""
|
|
53
|
+
try:
|
|
54
|
+
# Debug: print that we're emitting a log span
|
|
55
|
+
print(f"[OTel] Emitting log span: {record.name} - {record.getMessage()[:100]}")
|
|
56
|
+
# Create a span for the log message
|
|
57
|
+
with self.tracer.start_as_current_span(f"log.{record.levelname.lower()}") as span:
|
|
58
|
+
span.set_attribute("log.level", record.levelname)
|
|
59
|
+
span.set_attribute("log.message", record.getMessage())
|
|
60
|
+
span.set_attribute("log.logger", record.name)
|
|
61
|
+
span.set_attribute("source", "world")
|
|
62
|
+
span.set_attribute("content", record.getMessage()[:1000])
|
|
63
|
+
|
|
64
|
+
if record.funcName:
|
|
65
|
+
span.set_attribute("log.function", record.funcName)
|
|
66
|
+
if record.lineno:
|
|
67
|
+
span.set_attribute("log.lineno", record.lineno)
|
|
68
|
+
|
|
69
|
+
# Mark errors
|
|
70
|
+
if record.levelno >= logging.ERROR:
|
|
71
|
+
span.set_attribute("error", True)
|
|
72
|
+
|
|
73
|
+
except Exception:
|
|
74
|
+
# Don't let logging errors crash the application
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def init_tracing(
|
|
79
|
+
service_name: str,
|
|
80
|
+
session_id: str,
|
|
81
|
+
otlp_endpoint: str,
|
|
82
|
+
parent_trace_id: str | None = None,
|
|
83
|
+
parent_span_id: str | None = None,
|
|
84
|
+
) -> None:
|
|
85
|
+
"""Initialize OpenTelemetry tracing.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
service_name: Name of the service (e.g., world name or agent name)
|
|
89
|
+
session_id: Chronos session ID (added as resource attribute)
|
|
90
|
+
otlp_endpoint: Chronos OTLP endpoint (e.g., http://chronos/api/otel)
|
|
91
|
+
parent_trace_id: Optional parent trace ID for linking (hex string)
|
|
92
|
+
parent_span_id: Optional parent span ID for linking (hex string)
|
|
93
|
+
"""
|
|
94
|
+
global _tracer_provider, _initialized, _log_handler
|
|
95
|
+
|
|
96
|
+
if _initialized:
|
|
97
|
+
_module_logger.debug("Tracing already initialized")
|
|
98
|
+
return
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
from opentelemetry import context as context_api
|
|
102
|
+
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
|
|
103
|
+
OTLPSpanExporter,
|
|
104
|
+
)
|
|
105
|
+
from opentelemetry.sdk.resources import Resource
|
|
106
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
107
|
+
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
|
|
108
|
+
from opentelemetry.trace import NonRecordingSpan, SpanContext, TraceFlags
|
|
109
|
+
|
|
110
|
+
# Create resource with session ID
|
|
111
|
+
resource = Resource.create(
|
|
112
|
+
{
|
|
113
|
+
"service.name": service_name,
|
|
114
|
+
"plato.session.id": session_id,
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Create tracer provider
|
|
119
|
+
_tracer_provider = TracerProvider(resource=resource)
|
|
120
|
+
|
|
121
|
+
# Add OTLP exporter pointing to Chronos (use SimpleSpanProcessor for immediate export)
|
|
122
|
+
otlp_exporter = OTLPSpanExporter(endpoint=f"{otlp_endpoint.rstrip('/')}/v1/traces")
|
|
123
|
+
_tracer_provider.add_span_processor(SimpleSpanProcessor(otlp_exporter))
|
|
124
|
+
|
|
125
|
+
# Set as global tracer provider
|
|
126
|
+
trace.set_tracer_provider(_tracer_provider)
|
|
127
|
+
|
|
128
|
+
# If parent context is provided, set it as the current context
|
|
129
|
+
# This allows new spans to automatically link to the parent
|
|
130
|
+
if parent_trace_id and parent_span_id:
|
|
131
|
+
parent_context = SpanContext(
|
|
132
|
+
trace_id=int(parent_trace_id, 16),
|
|
133
|
+
span_id=int(parent_span_id, 16),
|
|
134
|
+
is_remote=True,
|
|
135
|
+
trace_flags=TraceFlags(0x01), # Sampled
|
|
136
|
+
)
|
|
137
|
+
parent_span = NonRecordingSpan(parent_context)
|
|
138
|
+
ctx = trace.set_span_in_context(parent_span)
|
|
139
|
+
context_api.attach(ctx)
|
|
140
|
+
print(f"[OTel] Using parent context: trace_id={parent_trace_id}, span_id={parent_span_id}")
|
|
141
|
+
|
|
142
|
+
# Add OTel logging handler to capture logs from plato SDK
|
|
143
|
+
tracer = trace.get_tracer(service_name)
|
|
144
|
+
_log_handler = OTelSpanLogHandler(tracer, level=logging.INFO)
|
|
145
|
+
|
|
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
|
+
)
|
|
154
|
+
|
|
155
|
+
_initialized = True
|
|
156
|
+
|
|
157
|
+
print(f"[OTel] Tracing initialized: service={service_name}, session={session_id}, endpoint={otlp_endpoint}")
|
|
158
|
+
|
|
159
|
+
except ImportError as e:
|
|
160
|
+
print(f"[OTel] OpenTelemetry SDK not installed: {e}")
|
|
161
|
+
_module_logger.warning(f"OpenTelemetry SDK not installed: {e}")
|
|
162
|
+
except Exception as e:
|
|
163
|
+
print(f"[OTel] Failed to initialize tracing: {e}")
|
|
164
|
+
_module_logger.error(f"Failed to initialize tracing: {e}")
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def shutdown_tracing() -> None:
|
|
168
|
+
"""Shutdown the tracer provider and flush spans."""
|
|
169
|
+
global _tracer_provider, _initialized, _log_handler
|
|
170
|
+
|
|
171
|
+
# Remove log handler
|
|
172
|
+
if _log_handler:
|
|
173
|
+
try:
|
|
174
|
+
plato_logger = logging.getLogger("plato")
|
|
175
|
+
plato_logger.removeHandler(_log_handler)
|
|
176
|
+
except Exception:
|
|
177
|
+
pass
|
|
178
|
+
_log_handler = None
|
|
179
|
+
|
|
180
|
+
if _tracer_provider:
|
|
181
|
+
try:
|
|
182
|
+
_tracer_provider.shutdown()
|
|
183
|
+
_module_logger.info("OTel tracing shutdown complete")
|
|
184
|
+
except Exception as e:
|
|
185
|
+
_module_logger.warning(f"Error shutting down tracer: {e}")
|
|
186
|
+
|
|
187
|
+
_tracer_provider = None
|
|
188
|
+
_initialized = False
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def get_tracer(name: str = "plato") -> Tracer:
|
|
192
|
+
"""Get a tracer instance.
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
name: Tracer name (default: "plato")
|
|
196
|
+
|
|
197
|
+
Returns:
|
|
198
|
+
OpenTelemetry Tracer
|
|
199
|
+
"""
|
|
200
|
+
return trace.get_tracer(name)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def is_initialized() -> bool:
|
|
204
|
+
"""Check if OTel tracing is initialized."""
|
|
205
|
+
return _initialized
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def instrument(service_name: str = "plato-agent") -> Tracer:
|
|
209
|
+
"""Initialize OTel tracing from environment variables.
|
|
210
|
+
|
|
211
|
+
Reads the following env vars:
|
|
212
|
+
- OTEL_EXPORTER_OTLP_ENDPOINT: Chronos OTLP endpoint (required for tracing)
|
|
213
|
+
- SESSION_ID: Chronos session ID (default: "local")
|
|
214
|
+
- OTEL_TRACE_ID: Parent trace ID for linking spans (optional)
|
|
215
|
+
- OTEL_PARENT_SPAN_ID: Parent span ID for linking spans (optional)
|
|
216
|
+
|
|
217
|
+
If OTEL_EXPORTER_OTLP_ENDPOINT is not set, returns a no-op tracer.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
service_name: Name of the service for traces
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
OpenTelemetry Tracer
|
|
224
|
+
"""
|
|
225
|
+
import os
|
|
226
|
+
|
|
227
|
+
otel_endpoint = os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
228
|
+
session_id = os.environ.get("SESSION_ID", "local")
|
|
229
|
+
parent_trace_id = os.environ.get("OTEL_TRACE_ID")
|
|
230
|
+
parent_span_id = os.environ.get("OTEL_PARENT_SPAN_ID")
|
|
231
|
+
|
|
232
|
+
print(f"[OTel] instrument() called: service={service_name}, endpoint={otel_endpoint}, session={session_id}")
|
|
233
|
+
|
|
234
|
+
if not otel_endpoint:
|
|
235
|
+
# Return default tracer (no-op if no provider configured)
|
|
236
|
+
print("[OTel] No OTEL_EXPORTER_OTLP_ENDPOINT set, returning no-op tracer")
|
|
237
|
+
return trace.get_tracer(service_name)
|
|
238
|
+
|
|
239
|
+
# Initialize tracing with parent context if provided
|
|
240
|
+
init_tracing(
|
|
241
|
+
service_name=service_name,
|
|
242
|
+
session_id=session_id,
|
|
243
|
+
otlp_endpoint=otel_endpoint,
|
|
244
|
+
parent_trace_id=parent_trace_id,
|
|
245
|
+
parent_span_id=parent_span_id,
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
return trace.get_tracer(service_name)
|