plato-sdk-v2 2.3.6__tar.gz → 2.3.7__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.6 → plato_sdk_v2-2.3.7}/PKG-INFO +1 -1
- plato_sdk_v2-2.3.7/VERSION +1 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/agents/otel.py +67 -87
- plato_sdk_v2-2.3.7/plato/agents/runner.py +183 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/worlds/base.py +87 -92
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/worlds/runner.py +33 -15
- plato_sdk_v2-2.3.6/VERSION +0 -1
- plato_sdk_v2-2.3.6/plato/agents/runner.py +0 -346
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/.claude/agents/sim-creator.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/.gitignore +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/.sandbox.yaml +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/BUILDING_SIMS.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/README.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/ci/CLAUDE.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/ci/deploy.sh +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/ci/lint.sh +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/ci/setup.sh +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/ci/version-bump.sh +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/AGENT_SPEC.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/CLI.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/GENERATING_SIM_SDKS.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/SIMULATOR_LIFECYCLE.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/SIM_CREATOR.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/cli/agent.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/cli/flows.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/cli/pm.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/cli/sandbox.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/cli/sims.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/cli/world.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/sim-creation-pipeline.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skill-restructure-plan.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-config/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-creator/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-debugger/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-flow-audit/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-flow-clear/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-flow-run/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-research/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-review/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-snapshot/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-submit/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/skills/sim-validate/SKILL.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/testcommit +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/docs/unit.sh +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/backup.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/cleanup.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/close.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/close_async.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/create.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/create_batch.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/create_simulator.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_active_session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_flows.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_job_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_job_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_public_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_simulators.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_state.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/reset.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/score.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/env/update_simulator.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/queue/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/queue/get_vms.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/queue/get_workers.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/archive_session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_sessions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/set_session_output.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/update_session_public.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/register.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/import_agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/cluster/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/close.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/execute.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/make.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/public_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/reset.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/set_date.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/state.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/pypi/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/pypi/download_package.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/pypi/package_index.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/create.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/deploy.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/handle_import.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/list_releases.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/releases/update.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/close.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/execute.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/make.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/reset.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/set_date.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/state.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/user/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/v2/user/get_current_user.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/version/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/api/version/check.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/client.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/errors.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_generated/py.typed +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/cli.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/instruction.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/parser.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/python.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/agents/artifacts.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/agents/base.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/agents/build.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/agents/config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/agents/trajectory.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/create_agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/delete_agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/get_agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/get_agent_schema.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/get_agent_versions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/list_agents.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/agents/lookup_agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/auth/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/default/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/default/health.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/jobs/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/jobs/launch_job.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/registry/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/runtimes/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/runtimes/create_runtime.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/runtimes/get_runtime.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/runtimes/test_runtime.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/secrets/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/secrets/create_secret.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/secrets/delete_secret.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/secrets/get_secret.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/secrets/list_secrets.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/secrets/update_secret.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/sessions/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/sessions/get_session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/sessions/get_session_logs.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/sessions/list_sessions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/status/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/templates/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/templates/create_template.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/templates/delete_template.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/templates/get_template.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/templates/list_templates.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/templates/update_template.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/trajectories/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/worlds/create_world.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/worlds/delete_world.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/worlds/get_world.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/api/worlds/list_worlds.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/client.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/errors.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/chronos/py.typed +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/py.typed +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/sims/README.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/sims/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/sims/agent_helpers.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/sims/cli.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/sims/generate_clients.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/sims/registry.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/audit_ui.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/main.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/pm.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/sandbox.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/ssh.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/utils.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/verify.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli/world.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/cli.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/examples/doordash_tasks.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/examples/loadtest.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/examples/test_env.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/examples/test_env_custom_browser.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/examples/test_env_sync.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/examples/test_reuse_env.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/examples/test_run.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/exceptions.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/README.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/background.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/content.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/options.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/options.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/package.json +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/models/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/models/build_models.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/models/env.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/models/flow.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/models/sandbox.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/models/task.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/sandbox_sdk.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/sdk.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/sync_env.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/sync_flow_executor.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/sync_sdk.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v1/utils/proxytunnel.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/async_/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/async_/artifact.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/async_/client.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/async_/environment.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/async_/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/async_/session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/models.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/sync/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/sync/artifact.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/sync/client.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/sync/environment.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/sync/flow_executor.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/sync/session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/types.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/utils/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/utils/db_cleanup.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/utils/models.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/v2/utils/proxy_tunnel.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/worlds/README.md +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/worlds/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/worlds/build_hook.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/plato/worlds/config.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/pyproject.toml +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/scripts/get_all_artifact_targets.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/integration/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/integration/conftest.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/integration/test_browser_agent.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/integration/test_chronos_callback.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/integration/test_cleanup_snapshot.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/integration/test_code_world.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/integration/test_harbor_agent_runner.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/sims/__init__.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/sims/conftest.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/sims/test_agent_helpers.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/test_heartbeat_keepalive.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/test_session_serialization.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/test_set_date.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/test_v2_imports.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/test_v2_multisim_integration.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/test_v2_session.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/tests/test_version.py +0 -0
- {plato_sdk_v2-2.3.6 → plato_sdk_v2-2.3.7}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.3.7
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""OpenTelemetry integration for Plato agents and worlds.
|
|
2
2
|
|
|
3
|
-
Provides tracing
|
|
4
|
-
|
|
3
|
+
Provides tracing utilities using OpenTelemetry SDK. Traces are sent directly
|
|
4
|
+
to the Chronos OTLP endpoint.
|
|
5
5
|
|
|
6
6
|
Usage:
|
|
7
7
|
from plato.agents.otel import init_tracing, get_tracer, shutdown_tracing
|
|
@@ -19,11 +19,6 @@ Usage:
|
|
|
19
19
|
span.set_attribute("key", "value")
|
|
20
20
|
# ... do work ...
|
|
21
21
|
|
|
22
|
-
# All Python logging is automatically sent to Chronos
|
|
23
|
-
import logging
|
|
24
|
-
logger = logging.getLogger(__name__)
|
|
25
|
-
logger.info("This will appear in the trajectory viewer!")
|
|
26
|
-
|
|
27
22
|
# Cleanup
|
|
28
23
|
shutdown_tracing()
|
|
29
24
|
"""
|
|
@@ -39,74 +34,42 @@ _module_logger = logging.getLogger(__name__)
|
|
|
39
34
|
|
|
40
35
|
# Global state
|
|
41
36
|
_tracer_provider = None
|
|
42
|
-
_logging_handler = None
|
|
43
37
|
_initialized = False
|
|
38
|
+
_log_handler = None
|
|
44
39
|
|
|
45
40
|
|
|
46
|
-
class
|
|
47
|
-
"""Logging handler that
|
|
41
|
+
class OTelSpanLogHandler(logging.Handler):
|
|
42
|
+
"""Logging handler that creates OTel spans for log messages.
|
|
48
43
|
|
|
49
|
-
|
|
50
|
-
- span.type: "log"
|
|
51
|
-
- log.level: DEBUG/INFO/WARNING/ERROR/CRITICAL
|
|
52
|
-
- content: the log message
|
|
53
|
-
- source: the logger name
|
|
44
|
+
Converts Python log records to OTel spans with log attributes.
|
|
54
45
|
"""
|
|
55
46
|
|
|
56
|
-
def __init__(self,
|
|
57
|
-
super().__init__()
|
|
58
|
-
self.
|
|
59
|
-
# Filter out noisy loggers
|
|
60
|
-
self._ignored_loggers = {
|
|
61
|
-
"httpx",
|
|
62
|
-
"httpcore",
|
|
63
|
-
"urllib3",
|
|
64
|
-
"asyncio",
|
|
65
|
-
"opentelemetry",
|
|
66
|
-
"plato.agents.otel", # Avoid recursion
|
|
67
|
-
}
|
|
47
|
+
def __init__(self, tracer: Tracer, level: int = logging.INFO):
|
|
48
|
+
super().__init__(level)
|
|
49
|
+
self.tracer = tracer
|
|
68
50
|
|
|
69
51
|
def emit(self, record: logging.LogRecord) -> None:
|
|
70
52
|
"""Emit a log record as an OTel span."""
|
|
71
|
-
# Skip ignored loggers
|
|
72
|
-
logger_name = record.name
|
|
73
|
-
for ignored in self._ignored_loggers:
|
|
74
|
-
if logger_name.startswith(ignored):
|
|
75
|
-
return
|
|
76
|
-
|
|
77
53
|
try:
|
|
78
|
-
tracer = trace.get_tracer(self._tracer_name)
|
|
79
|
-
|
|
80
|
-
# Format the message
|
|
81
|
-
try:
|
|
82
|
-
msg = self.format(record)
|
|
83
|
-
except Exception:
|
|
84
|
-
msg = record.getMessage()
|
|
85
|
-
|
|
86
54
|
# Create a span for the log message
|
|
87
|
-
with tracer.start_as_current_span(
|
|
88
|
-
f"log.{record.levelname.lower()}",
|
|
89
|
-
end_on_exit=True,
|
|
90
|
-
) as span:
|
|
91
|
-
span.set_attribute("span.type", "log")
|
|
55
|
+
with self.tracer.start_as_current_span(f"log.{record.levelname.lower()}") as span:
|
|
92
56
|
span.set_attribute("log.level", record.levelname)
|
|
93
|
-
span.set_attribute("
|
|
94
|
-
span.set_attribute("
|
|
57
|
+
span.set_attribute("log.message", record.getMessage())
|
|
58
|
+
span.set_attribute("log.logger", record.name)
|
|
59
|
+
span.set_attribute("source", "world")
|
|
60
|
+
span.set_attribute("content", record.getMessage()[:1000])
|
|
95
61
|
|
|
96
|
-
# Add extra context if available
|
|
97
62
|
if record.funcName:
|
|
98
63
|
span.set_attribute("log.function", record.funcName)
|
|
99
|
-
if record.pathname:
|
|
100
|
-
span.set_attribute("log.file", record.pathname)
|
|
101
64
|
if record.lineno:
|
|
102
|
-
span.set_attribute("log.
|
|
65
|
+
span.set_attribute("log.lineno", record.lineno)
|
|
103
66
|
|
|
104
|
-
#
|
|
105
|
-
if record.
|
|
106
|
-
span.
|
|
67
|
+
# Mark errors
|
|
68
|
+
if record.levelno >= logging.ERROR:
|
|
69
|
+
span.set_attribute("error", True)
|
|
107
70
|
|
|
108
71
|
except Exception:
|
|
109
|
-
# Don't let logging
|
|
72
|
+
# Don't let logging errors crash the application
|
|
110
73
|
pass
|
|
111
74
|
|
|
112
75
|
|
|
@@ -114,66 +77,77 @@ def init_tracing(
|
|
|
114
77
|
service_name: str,
|
|
115
78
|
session_id: str,
|
|
116
79
|
otlp_endpoint: str,
|
|
117
|
-
|
|
118
|
-
|
|
80
|
+
parent_trace_id: str | None = None,
|
|
81
|
+
parent_span_id: str | None = None,
|
|
119
82
|
) -> None:
|
|
120
|
-
"""Initialize OpenTelemetry tracing
|
|
83
|
+
"""Initialize OpenTelemetry tracing.
|
|
121
84
|
|
|
122
85
|
Args:
|
|
123
86
|
service_name: Name of the service (e.g., world name or agent name)
|
|
124
87
|
session_id: Chronos session ID (added as resource attribute)
|
|
125
88
|
otlp_endpoint: Chronos OTLP endpoint (e.g., http://chronos/api/otel)
|
|
126
|
-
|
|
127
|
-
|
|
89
|
+
parent_trace_id: Optional parent trace ID for linking (hex string)
|
|
90
|
+
parent_span_id: Optional parent span ID for linking (hex string)
|
|
128
91
|
"""
|
|
129
|
-
global _tracer_provider,
|
|
92
|
+
global _tracer_provider, _initialized, _log_handler
|
|
130
93
|
|
|
131
94
|
if _initialized:
|
|
132
95
|
_module_logger.debug("Tracing already initialized")
|
|
133
96
|
return
|
|
134
97
|
|
|
135
98
|
try:
|
|
99
|
+
from opentelemetry import context as context_api
|
|
136
100
|
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
|
|
137
101
|
OTLPSpanExporter,
|
|
138
102
|
)
|
|
139
103
|
from opentelemetry.sdk.resources import Resource
|
|
140
104
|
from opentelemetry.sdk.trace import TracerProvider
|
|
141
|
-
from opentelemetry.sdk.trace.export import
|
|
105
|
+
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
|
|
106
|
+
from opentelemetry.trace import NonRecordingSpan, SpanContext, TraceFlags
|
|
142
107
|
|
|
143
108
|
# Create resource with session ID
|
|
144
109
|
resource = Resource.create(
|
|
145
110
|
{
|
|
146
111
|
"service.name": service_name,
|
|
147
|
-
"session.id": session_id,
|
|
112
|
+
"plato.session.id": session_id,
|
|
148
113
|
}
|
|
149
114
|
)
|
|
150
115
|
|
|
151
116
|
# Create tracer provider
|
|
152
117
|
_tracer_provider = TracerProvider(resource=resource)
|
|
153
118
|
|
|
154
|
-
# Add OTLP exporter pointing to Chronos
|
|
119
|
+
# Add OTLP exporter pointing to Chronos (use SimpleSpanProcessor for immediate export)
|
|
155
120
|
otlp_exporter = OTLPSpanExporter(endpoint=f"{otlp_endpoint.rstrip('/')}/v1/traces")
|
|
156
|
-
_tracer_provider.add_span_processor(
|
|
121
|
+
_tracer_provider.add_span_processor(SimpleSpanProcessor(otlp_exporter))
|
|
157
122
|
|
|
158
123
|
# Set as global tracer provider
|
|
159
124
|
trace.set_tracer_provider(_tracer_provider)
|
|
160
125
|
|
|
161
|
-
|
|
126
|
+
# If parent context is provided, set it as the current context
|
|
127
|
+
# This allows new spans to automatically link to the parent
|
|
128
|
+
if parent_trace_id and parent_span_id:
|
|
129
|
+
parent_context = SpanContext(
|
|
130
|
+
trace_id=int(parent_trace_id, 16),
|
|
131
|
+
span_id=int(parent_span_id, 16),
|
|
132
|
+
is_remote=True,
|
|
133
|
+
trace_flags=TraceFlags(0x01), # Sampled
|
|
134
|
+
)
|
|
135
|
+
parent_span = NonRecordingSpan(parent_context)
|
|
136
|
+
ctx = trace.set_span_in_context(parent_span)
|
|
137
|
+
context_api.attach(ctx)
|
|
138
|
+
print(f"[OTel] Using parent context: trace_id={parent_trace_id}, span_id={parent_span_id}")
|
|
139
|
+
|
|
140
|
+
# Add OTel logging handler to capture world logs
|
|
141
|
+
tracer = trace.get_tracer(service_name)
|
|
142
|
+
_log_handler = OTelSpanLogHandler(tracer, level=logging.INFO)
|
|
143
|
+
|
|
144
|
+
# Add handler to plato.worlds loggers
|
|
145
|
+
plato_worlds_logger = logging.getLogger("plato.worlds")
|
|
146
|
+
plato_worlds_logger.addHandler(_log_handler)
|
|
162
147
|
|
|
163
|
-
|
|
164
|
-
if capture_logging:
|
|
165
|
-
_logging_handler = OTelLoggingHandler()
|
|
166
|
-
_logging_handler.setLevel(log_level)
|
|
167
|
-
# Add to root logger to capture all logs
|
|
168
|
-
logging.getLogger().addHandler(_logging_handler)
|
|
148
|
+
_initialized = True
|
|
169
149
|
|
|
170
|
-
# Use print to ensure this shows regardless of logging config
|
|
171
150
|
print(f"[OTel] Tracing initialized: service={service_name}, session={session_id}, endpoint={otlp_endpoint}")
|
|
172
|
-
_module_logger.info(
|
|
173
|
-
f"OTel tracing initialized: service={service_name}, "
|
|
174
|
-
f"session={session_id}, endpoint={otlp_endpoint}, "
|
|
175
|
-
f"capture_logging={capture_logging}"
|
|
176
|
-
)
|
|
177
151
|
|
|
178
152
|
except ImportError as e:
|
|
179
153
|
print(f"[OTel] OpenTelemetry SDK not installed: {e}")
|
|
@@ -184,16 +158,17 @@ def init_tracing(
|
|
|
184
158
|
|
|
185
159
|
|
|
186
160
|
def shutdown_tracing() -> None:
|
|
187
|
-
"""Shutdown the tracer provider
|
|
188
|
-
global _tracer_provider,
|
|
161
|
+
"""Shutdown the tracer provider and flush spans."""
|
|
162
|
+
global _tracer_provider, _initialized, _log_handler
|
|
189
163
|
|
|
190
|
-
# Remove
|
|
191
|
-
if
|
|
164
|
+
# Remove log handler
|
|
165
|
+
if _log_handler:
|
|
192
166
|
try:
|
|
193
|
-
logging.getLogger(
|
|
167
|
+
plato_worlds_logger = logging.getLogger("plato.worlds")
|
|
168
|
+
plato_worlds_logger.removeHandler(_log_handler)
|
|
194
169
|
except Exception:
|
|
195
170
|
pass
|
|
196
|
-
|
|
171
|
+
_log_handler = None
|
|
197
172
|
|
|
198
173
|
if _tracer_provider:
|
|
199
174
|
try:
|
|
@@ -229,6 +204,8 @@ def instrument(service_name: str = "plato-agent") -> Tracer:
|
|
|
229
204
|
Reads the following env vars:
|
|
230
205
|
- OTEL_EXPORTER_OTLP_ENDPOINT: Chronos OTLP endpoint (required for tracing)
|
|
231
206
|
- SESSION_ID: Chronos session ID (default: "local")
|
|
207
|
+
- OTEL_TRACE_ID: Parent trace ID for linking spans (optional)
|
|
208
|
+
- OTEL_PARENT_SPAN_ID: Parent span ID for linking spans (optional)
|
|
232
209
|
|
|
233
210
|
If OTEL_EXPORTER_OTLP_ENDPOINT is not set, returns a no-op tracer.
|
|
234
211
|
|
|
@@ -242,17 +219,20 @@ def instrument(service_name: str = "plato-agent") -> Tracer:
|
|
|
242
219
|
|
|
243
220
|
otel_endpoint = os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
244
221
|
session_id = os.environ.get("SESSION_ID", "local")
|
|
222
|
+
parent_trace_id = os.environ.get("OTEL_TRACE_ID")
|
|
223
|
+
parent_span_id = os.environ.get("OTEL_PARENT_SPAN_ID")
|
|
245
224
|
|
|
246
225
|
if not otel_endpoint:
|
|
247
226
|
# Return default tracer (no-op if no provider configured)
|
|
248
227
|
return trace.get_tracer(service_name)
|
|
249
228
|
|
|
250
|
-
# Initialize tracing
|
|
229
|
+
# Initialize tracing with parent context if provided
|
|
251
230
|
init_tracing(
|
|
252
231
|
service_name=service_name,
|
|
253
232
|
session_id=session_id,
|
|
254
233
|
otlp_endpoint=otel_endpoint,
|
|
255
|
-
|
|
234
|
+
parent_trace_id=parent_trace_id,
|
|
235
|
+
parent_span_id=parent_span_id,
|
|
256
236
|
)
|
|
257
237
|
|
|
258
238
|
return trace.get_tracer(service_name)
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"""Agent runner - run agents in Docker containers.
|
|
2
|
+
|
|
3
|
+
Agents emit their own OTel spans for trajectory events. This runner:
|
|
4
|
+
1. Runs agents in Docker containers
|
|
5
|
+
2. Streams stdout/stderr for logging
|
|
6
|
+
3. Passes OTel environment variables for trace context propagation
|
|
7
|
+
4. Uploads artifacts to S3 when complete
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import asyncio
|
|
13
|
+
import json
|
|
14
|
+
import logging
|
|
15
|
+
import os
|
|
16
|
+
import platform
|
|
17
|
+
import tempfile
|
|
18
|
+
|
|
19
|
+
from opentelemetry import trace
|
|
20
|
+
|
|
21
|
+
from plato.agents.artifacts import upload_artifacts
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
async def run_agent(
|
|
27
|
+
image: str,
|
|
28
|
+
config: dict,
|
|
29
|
+
secrets: dict[str, str],
|
|
30
|
+
instruction: str,
|
|
31
|
+
workspace: str,
|
|
32
|
+
logs_dir: str | None = None,
|
|
33
|
+
pull: bool = True,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""Run an agent in a Docker container.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
image: Docker image URI
|
|
39
|
+
config: Agent configuration dict
|
|
40
|
+
secrets: Secret values (API keys, etc.)
|
|
41
|
+
instruction: Task instruction for the agent
|
|
42
|
+
workspace: Host directory to mount as /workspace
|
|
43
|
+
logs_dir: Host directory for logs (temp dir if None)
|
|
44
|
+
pull: Whether to pull the image first
|
|
45
|
+
|
|
46
|
+
Note: Agents handle their own OTel tracing. This runner only passes
|
|
47
|
+
the trace context (TRACEPARENT) so agent spans link to the parent step.
|
|
48
|
+
"""
|
|
49
|
+
logs_dir = logs_dir or tempfile.mkdtemp(prefix="agent_logs_")
|
|
50
|
+
|
|
51
|
+
# Get session info from environment variables
|
|
52
|
+
session_id = os.environ.get("SESSION_ID")
|
|
53
|
+
otel_url = os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
54
|
+
upload_url = os.environ.get("UPLOAD_URL")
|
|
55
|
+
|
|
56
|
+
# Pull image if requested
|
|
57
|
+
if pull:
|
|
58
|
+
pull_proc = await asyncio.create_subprocess_exec(
|
|
59
|
+
"docker",
|
|
60
|
+
"pull",
|
|
61
|
+
image,
|
|
62
|
+
stdout=asyncio.subprocess.PIPE,
|
|
63
|
+
stderr=asyncio.subprocess.STDOUT,
|
|
64
|
+
)
|
|
65
|
+
await pull_proc.wait()
|
|
66
|
+
|
|
67
|
+
# Setup
|
|
68
|
+
os.makedirs(os.path.join(logs_dir, "agent"), exist_ok=True)
|
|
69
|
+
config_file = tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False)
|
|
70
|
+
json.dump(config, config_file)
|
|
71
|
+
config_file.close()
|
|
72
|
+
|
|
73
|
+
try:
|
|
74
|
+
# Build docker command
|
|
75
|
+
docker_cmd = ["docker", "run", "--rm", "--privileged"]
|
|
76
|
+
|
|
77
|
+
# Determine if we need host networking
|
|
78
|
+
use_host_network = False
|
|
79
|
+
is_macos = platform.system() == "Darwin"
|
|
80
|
+
|
|
81
|
+
if not is_macos:
|
|
82
|
+
try:
|
|
83
|
+
proc = await asyncio.create_subprocess_exec(
|
|
84
|
+
"iptables",
|
|
85
|
+
"-L",
|
|
86
|
+
"-n",
|
|
87
|
+
stdout=asyncio.subprocess.DEVNULL,
|
|
88
|
+
stderr=asyncio.subprocess.DEVNULL,
|
|
89
|
+
)
|
|
90
|
+
await proc.wait()
|
|
91
|
+
has_iptables = proc.returncode == 0
|
|
92
|
+
except (FileNotFoundError, PermissionError):
|
|
93
|
+
has_iptables = False
|
|
94
|
+
|
|
95
|
+
use_host_network = not has_iptables
|
|
96
|
+
|
|
97
|
+
if use_host_network:
|
|
98
|
+
docker_cmd.extend(["--network=host", "--add-host=localhost:127.0.0.1"])
|
|
99
|
+
|
|
100
|
+
docker_cmd.extend(
|
|
101
|
+
[
|
|
102
|
+
"-v",
|
|
103
|
+
f"{workspace}:/workspace",
|
|
104
|
+
"-v",
|
|
105
|
+
f"{logs_dir}:/logs",
|
|
106
|
+
"-v",
|
|
107
|
+
f"{config_file.name}:/config.json:ro",
|
|
108
|
+
"-v",
|
|
109
|
+
"/var/run/docker.sock:/var/run/docker.sock",
|
|
110
|
+
"-w",
|
|
111
|
+
"/workspace",
|
|
112
|
+
]
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Pass session info to agent
|
|
116
|
+
if otel_url:
|
|
117
|
+
traces_endpoint = f"{otel_url.rstrip('/')}/v1/traces"
|
|
118
|
+
docker_cmd.extend(["-e", f"OTEL_EXPORTER_OTLP_ENDPOINT={otel_url}"])
|
|
119
|
+
docker_cmd.extend(["-e", f"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT={traces_endpoint}"])
|
|
120
|
+
docker_cmd.extend(["-e", "OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf"])
|
|
121
|
+
if session_id:
|
|
122
|
+
docker_cmd.extend(["-e", f"SESSION_ID={session_id}"])
|
|
123
|
+
if upload_url:
|
|
124
|
+
docker_cmd.extend(["-e", f"UPLOAD_URL={upload_url}"])
|
|
125
|
+
|
|
126
|
+
# Pass trace context to agent for parent linking
|
|
127
|
+
# Agent spans will be children of the current step span
|
|
128
|
+
current_span = trace.get_current_span()
|
|
129
|
+
span_context = current_span.get_span_context()
|
|
130
|
+
if span_context.is_valid:
|
|
131
|
+
trace_id = format(span_context.trace_id, "032x")
|
|
132
|
+
span_id = format(span_context.span_id, "016x")
|
|
133
|
+
# W3C Trace Context format for TRACEPARENT
|
|
134
|
+
traceparent = f"00-{trace_id}-{span_id}-01"
|
|
135
|
+
docker_cmd.extend(
|
|
136
|
+
[
|
|
137
|
+
"-e",
|
|
138
|
+
f"TRACEPARENT={traceparent}",
|
|
139
|
+
"-e",
|
|
140
|
+
f"OTEL_TRACE_ID={trace_id}",
|
|
141
|
+
"-e",
|
|
142
|
+
f"OTEL_PARENT_SPAN_ID={span_id}",
|
|
143
|
+
]
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
for key, value in secrets.items():
|
|
147
|
+
docker_cmd.extend(["-e", f"{key.upper()}={value}"])
|
|
148
|
+
|
|
149
|
+
docker_cmd.append(image)
|
|
150
|
+
|
|
151
|
+
# Pass instruction via CLI arg
|
|
152
|
+
docker_cmd.extend(["--instruction", instruction])
|
|
153
|
+
|
|
154
|
+
# Run container - agents emit their own OTel spans
|
|
155
|
+
process = await asyncio.create_subprocess_exec(
|
|
156
|
+
*docker_cmd,
|
|
157
|
+
stdout=asyncio.subprocess.PIPE,
|
|
158
|
+
stderr=asyncio.subprocess.STDOUT,
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
# Capture output for error reporting
|
|
162
|
+
output_lines: list[str] = []
|
|
163
|
+
assert process.stdout is not None
|
|
164
|
+
while True:
|
|
165
|
+
line = await process.stdout.readline()
|
|
166
|
+
if not line:
|
|
167
|
+
break
|
|
168
|
+
decoded_line = line.decode().rstrip()
|
|
169
|
+
output_lines.append(decoded_line)
|
|
170
|
+
|
|
171
|
+
await process.wait()
|
|
172
|
+
|
|
173
|
+
exit_code = process.returncode or 0
|
|
174
|
+
if exit_code != 0:
|
|
175
|
+
error_context = "\n".join(output_lines[-50:]) if output_lines else "No output captured"
|
|
176
|
+
raise RuntimeError(f"Agent failed with exit code {exit_code}\n\nAgent output:\n{error_context}")
|
|
177
|
+
|
|
178
|
+
finally:
|
|
179
|
+
os.unlink(config_file.name)
|
|
180
|
+
|
|
181
|
+
# Upload artifacts if we have upload URL configured
|
|
182
|
+
if upload_url:
|
|
183
|
+
await upload_artifacts(upload_url, logs_dir)
|