plato-sdk-v2 2.3.4__tar.gz → 2.3.5__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.
Files changed (539) hide show
  1. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/PKG-INFO +4 -2
  2. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/README.md +0 -1
  3. plato_sdk_v2-2.3.5/VERSION +1 -0
  4. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/agents/__init__.py +24 -16
  5. plato_sdk_v2-2.3.5/plato/agents/artifacts.py +108 -0
  6. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/agents/config.py +2 -7
  7. plato_sdk_v2-2.3.5/plato/agents/otel.py +258 -0
  8. plato_sdk_v2-2.3.5/plato/agents/runner.py +346 -0
  9. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/worlds/README.md +2 -1
  10. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/worlds/base.py +111 -78
  11. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/worlds/config.py +5 -3
  12. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/worlds/runner.py +31 -19
  13. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/pyproject.toml +4 -0
  14. plato_sdk_v2-2.3.5/tests/integration/test_chronos_callback.py +182 -0
  15. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/uv.lock +1696 -1575
  16. plato_sdk_v2-2.3.4/VERSION +0 -1
  17. plato_sdk_v2-2.3.4/plato/agents/logging.py +0 -515
  18. plato_sdk_v2-2.3.4/plato/agents/runner.py +0 -191
  19. plato_sdk_v2-2.3.4/plato/chronos/api/callback/__init__.py +0 -11
  20. plato_sdk_v2-2.3.4/plato/chronos/api/callback/push_agent_logs.py +0 -61
  21. plato_sdk_v2-2.3.4/plato/chronos/api/callback/update_agent_status.py +0 -57
  22. plato_sdk_v2-2.3.4/plato/chronos/api/callback/upload_artifacts.py +0 -59
  23. plato_sdk_v2-2.3.4/plato/chronos/api/callback/upload_logs_zip.py +0 -57
  24. plato_sdk_v2-2.3.4/plato/chronos/api/callback/upload_trajectory.py +0 -57
  25. plato_sdk_v2-2.3.4/tests/integration/test_chronos_callback.py +0 -409
  26. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/.claude/agents/sim-creator.md +0 -0
  27. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/.gitignore +0 -0
  28. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/.sandbox.yaml +0 -0
  29. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/BUILDING_SIMS.md +0 -0
  30. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/ci/CLAUDE.md +0 -0
  31. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/ci/deploy.sh +0 -0
  32. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/ci/lint.sh +0 -0
  33. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/ci/setup.sh +0 -0
  34. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/ci/version-bump.sh +0 -0
  35. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/AGENT_SPEC.md +0 -0
  36. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/CLI.md +0 -0
  37. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/GENERATING_SIM_SDKS.md +0 -0
  38. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/SIMULATOR_LIFECYCLE.md +0 -0
  39. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/SIM_CREATOR.md +0 -0
  40. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/cli/agent.md +0 -0
  41. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/cli/flows.md +0 -0
  42. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/cli/pm.md +0 -0
  43. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/cli/sandbox.md +0 -0
  44. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/cli/sims.md +0 -0
  45. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/cli/world.md +0 -0
  46. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/sim-creation-pipeline.md +0 -0
  47. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skill-restructure-plan.md +0 -0
  48. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/SIM-CREATION-ARCHITECTURE.md +0 -0
  49. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-config/SKILL.md +0 -0
  50. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-creator/SKILL.md +0 -0
  51. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-debugger/SKILL.md +0 -0
  52. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-flow-audit/SKILL.md +0 -0
  53. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-flow-clear/SKILL.md +0 -0
  54. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-flow-mutations/SKILL.md +0 -0
  55. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-flow-run/SKILL.md +0 -0
  56. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-research/SKILL.md +0 -0
  57. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-review/SKILL.md +0 -0
  58. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-sandbox-login/SKILL.md +0 -0
  59. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-sandbox-services/SKILL.md +0 -0
  60. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-sandbox-start/SKILL.md +0 -0
  61. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-sandbox-worker/SKILL.md +0 -0
  62. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-snapshot/SKILL.md +0 -0
  63. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-submit/SKILL.md +0 -0
  64. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/skills/sim-validate/SKILL.md +0 -0
  65. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/testcommit +0 -0
  66. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/docs/unit.sh +0 -0
  67. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/__init__.py +0 -0
  68. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/__init__.py +0 -0
  69. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/__init__.py +0 -0
  70. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/__init__.py +0 -0
  71. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/agent_artifacts/__init__.py +0 -0
  72. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/agent_artifacts/archive_agent_artifact.py +0 -0
  73. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/agent_artifacts/create_agent_artifact.py +0 -0
  74. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/agent_artifacts/get_agent_artifact_by_public_id.py +0 -0
  75. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/agent_artifacts/get_agent_artifacts.py +0 -0
  76. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/__init__.py +0 -0
  77. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/cleanup_stale_vms.py +0 -0
  78. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/get_dispatchers.py +0 -0
  79. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/get_nodes_status.py +0 -0
  80. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/get_snapshot_lineage.py +0 -0
  81. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/get_snapshots_status.py +0 -0
  82. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/pause_resume_dispatchers.py +0 -0
  83. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/cluster/prefetch_snapshot.py +0 -0
  84. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/__init__.py +0 -0
  85. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/backup.py +0 -0
  86. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/cleanup.py +0 -0
  87. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/close.py +0 -0
  88. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/close_async.py +0 -0
  89. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/create.py +0 -0
  90. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/create_batch.py +0 -0
  91. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/create_simulator.py +0 -0
  92. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/evaluate_session.py +0 -0
  93. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/generate_mutations.py +0 -0
  94. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/generate_mutations_single.py +0 -0
  95. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_active_session.py +0 -0
  96. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_app_sim_worker_info.py +0 -0
  97. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_cdp_url.py +0 -0
  98. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_flows.py +0 -0
  99. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_interface_worker_info.py +0 -0
  100. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_job_info.py +0 -0
  101. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_job_status.py +0 -0
  102. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_job_worker_info.py +0 -0
  103. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_proxy_url.py +0 -0
  104. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_public_url.py +0 -0
  105. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_simulator_by_name.py +0 -0
  106. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_simulators.py +0 -0
  107. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_state.py +0 -0
  108. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/get_worker_ready.py +0 -0
  109. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/log_state_mutation.py +0 -0
  110. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/rescore_simulator_sessions.py +0 -0
  111. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/reset.py +0 -0
  112. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/score.py +0 -0
  113. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/send_heartbeat.py +0 -0
  114. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/env/update_simulator.py +0 -0
  115. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/__init__.py +0 -0
  116. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/create_test_case_review.py +0 -0
  117. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/evaluate_python.py +0 -0
  118. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/get_all_test_case_reviews.py +0 -0
  119. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/get_scores_by_user.py +0 -0
  120. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/get_scoring.py +0 -0
  121. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/get_test_case_review.py +0 -0
  122. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/human_in_the_loop_scoring.py +0 -0
  123. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/evals/start_eval_from_git.py +0 -0
  124. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/__init__.py +0 -0
  125. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/create_gitea_repository.py +0 -0
  126. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/create_simulator_repository.py +0 -0
  127. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/delete_gitea_repository.py +0 -0
  128. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_accessible_simulators.py +0 -0
  129. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_gitea_credentials.py +0 -0
  130. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_gitea_repository.py +0 -0
  131. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_my_gitea_info.py +0 -0
  132. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_my_repositories.py +0 -0
  133. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_repository_branches.py +0 -0
  134. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_repository_contents.py +0 -0
  135. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_simulator_file_content.py +0 -0
  136. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_simulator_repository.py +0 -0
  137. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_simulator_repository_branches.py +0 -0
  138. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/gitea/get_simulator_repository_contents.py +0 -0
  139. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/jobs/__init__.py +0 -0
  140. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/jobs/get_job_by_id.py +0 -0
  141. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/jobs/get_jobs_by_group_id.py +0 -0
  142. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/jobs/get_keepalive_jobs.py +0 -0
  143. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/jobs/list_jobs.py +0 -0
  144. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/jobs/update_job_status.py +0 -0
  145. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/__init__.py +0 -0
  146. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/create_annotator_assignment.py +0 -0
  147. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/create_org_api_key.py +0 -0
  148. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/create_org_policy.py +0 -0
  149. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/delete_org_api_key.py +0 -0
  150. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/delete_org_policy.py +0 -0
  151. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/get_annotator_assignments.py +0 -0
  152. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/get_org_api_key_policies.py +0 -0
  153. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/get_org_api_keys.py +0 -0
  154. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/get_org_policies.py +0 -0
  155. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/get_organization_concurrency_status.py +0 -0
  156. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/get_organization_members.py +0 -0
  157. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/update_annotator_assignment_stage.py +0 -0
  158. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/organization/update_organization_concurrency_limit.py +0 -0
  159. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/queue/__init__.py +0 -0
  160. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/queue/get_queue_status.py +0 -0
  161. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/queue/get_vm_detail.py +0 -0
  162. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/queue/get_vms.py +0 -0
  163. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/queue/get_workers.py +0 -0
  164. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/__init__.py +0 -0
  165. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/checkpoint_vm.py +0 -0
  166. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/close_vm.py +0 -0
  167. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/create_vm.py +0 -0
  168. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/execute_ssh_command.py +0 -0
  169. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/get_operation_events.py +0 -0
  170. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/healthy_services.py +0 -0
  171. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/healthy_worker.py +0 -0
  172. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/save_vm_snapshot.py +0 -0
  173. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/setup_root_access.py +0 -0
  174. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/setup_sandbox.py +0 -0
  175. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/sandbox/start_worker.py +0 -0
  176. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/__init__.py +0 -0
  177. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/analyze_labels.py +0 -0
  178. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/archive_session.py +0 -0
  179. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/archive_session_logs_endpoint.py +0 -0
  180. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/create_from_labels.py +0 -0
  181. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/create_session_from_browser.py +0 -0
  182. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/create_session_from_env_recording.py +0 -0
  183. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/create_session_from_har.py +0 -0
  184. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_env_recording.py +0 -0
  185. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_grouped_replay_sessions.py +0 -0
  186. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_logs_status.py +0 -0
  187. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_network_requests.py +0 -0
  188. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_next_session_for_annotator.py +0 -0
  189. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_public_benchmark_sessions.py +0 -0
  190. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_replay_score_data.py +0 -0
  191. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_rrweb_actions.py +0 -0
  192. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_rrweb_events.py +0 -0
  193. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_screen_recording.py +0 -0
  194. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_session.py +0 -0
  195. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_session_replays.py +0 -0
  196. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_sessions.py +0 -0
  197. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_sessions_for_archival.py +0 -0
  198. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/get_ui_events.py +0 -0
  199. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/restore_session_logs.py +0 -0
  200. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/score_session_with_config.py +0 -0
  201. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/search_sessions_by_ids.py +0 -0
  202. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/set_session_output.py +0 -0
  203. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/update_session_public.py +0 -0
  204. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/session/update_session_testcase.py +0 -0
  205. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/__init__.py +0 -0
  206. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/add_simulator_review.py +0 -0
  207. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/batch_create_test_cases.py +0 -0
  208. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/batch_get_artifact_metadata.py +0 -0
  209. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_all_simulators_info.py +0 -0
  210. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_db_config.py +0 -0
  211. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_env_flows.py +0 -0
  212. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_plato_config.py +0 -0
  213. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_sessions_batch_by_job_groups.py +0 -0
  214. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_sessions_by_job_group.py +0 -0
  215. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_simulator_by_name.py +0 -0
  216. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_simulator_id.py +0 -0
  217. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_simulator_info.py +0 -0
  218. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_simulator_version_details.py +0 -0
  219. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_simulator_versions.py +0 -0
  220. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_start_path.py +0 -0
  221. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/get_version_by_tag.py +0 -0
  222. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/list_simulators.py +0 -0
  223. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/list_simulators_by_org.py +0 -0
  224. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/list_simulators_status.py +0 -0
  225. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/register.py +0 -0
  226. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/update_simulator.py +0 -0
  227. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/update_simulator_status.py +0 -0
  228. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/simulator/update_tag.py +0 -0
  229. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/__init__.py +0 -0
  230. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/archive_organization_test_case_assignments.py +0 -0
  231. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/archive_organization_testcase.py +0 -0
  232. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/archive_testcase.py +0 -0
  233. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/assign_testcase_to_organizations.py +0 -0
  234. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/auto_verify_testcase.py +0 -0
  235. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/bulk_archive_testcases.py +0 -0
  236. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/convert_text_to_structured_data.py +0 -0
  237. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/create_testcase.py +0 -0
  238. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/create_testcase_set.py +0 -0
  239. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/delete_testcase_set.py +0 -0
  240. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/filter_human_recorder_testcases.py +0 -0
  241. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/generate_outcome_schema.py +0 -0
  242. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/generate_prediction.py +0 -0
  243. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/generate_prediction_from_steps.py +0 -0
  244. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/generate_scoring_config_from_sessions.py +0 -0
  245. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/generate_state_mutations_config_route.py +0 -0
  246. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_human_recorder_tab_counts.py +0 -0
  247. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_human_recorder_testcases.py +0 -0
  248. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_merged_mutations.py +0 -0
  249. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_mutation_groups_for_testcase.py +0 -0
  250. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_next_testcase_for_scoring.py +0 -0
  251. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_organization_test_case_assignments.py +0 -0
  252. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_testcase.py +0 -0
  253. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_testcase_metadata_for_scoring.py +0 -0
  254. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_testcase_sets.py +0 -0
  255. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_testcases.py +0 -0
  256. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/get_testcases_in_set.py +0 -0
  257. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/mark_organization_test_case_completed.py +0 -0
  258. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/update_testcase.py +0 -0
  259. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v1/testcases/version_bump_testcase.py +0 -0
  260. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/__init__.py +0 -0
  261. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/__init__.py +0 -0
  262. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/get_agent_ecr_token.py +0 -0
  263. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/get_agent_schema.py +0 -0
  264. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/get_agent_versions.py +0 -0
  265. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/import_agent.py +0 -0
  266. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/list_docker_agents.py +0 -0
  267. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/lookup_agent_version.py +0 -0
  268. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/agents/register_docker_agent.py +0 -0
  269. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/artifacts/__init__.py +0 -0
  270. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/artifacts/get_artifact.py +0 -0
  271. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos/__init__.py +0 -0
  272. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos/launch_job.py +0 -0
  273. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos_packages/__init__.py +0 -0
  274. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos_packages/get_package_versions.py +0 -0
  275. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos_packages/list_chronos_packages.py +0 -0
  276. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos_packages/lookup_package_version.py +0 -0
  277. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos_packages/register_chronos_package.py +0 -0
  278. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/chronos_packages/upload_chronos_package.py +0 -0
  279. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/cluster/__init__.py +0 -0
  280. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/cluster/get_node_config.py +0 -0
  281. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/__init__.py +0 -0
  282. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/checkpoint.py +0 -0
  283. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/close.py +0 -0
  284. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/connect_routing_info.py +0 -0
  285. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/connect_url.py +0 -0
  286. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/disk_snapshot.py +0 -0
  287. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/execute.py +0 -0
  288. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/get_flows.py +0 -0
  289. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/get_plato_config.py +0 -0
  290. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/log_for_job.py +0 -0
  291. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/make.py +0 -0
  292. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/public_url.py +0 -0
  293. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/reset.py +0 -0
  294. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/set_date.py +0 -0
  295. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/setup_sandbox.py +0 -0
  296. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/snapshot.py +0 -0
  297. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/snapshot_store.py +0 -0
  298. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/state.py +0 -0
  299. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/jobs/wait_for_ready.py +0 -0
  300. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/pypi/__init__.py +0 -0
  301. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/pypi/download_package.py +0 -0
  302. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/pypi/get_package_schema.py +0 -0
  303. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/pypi/package_index.py +0 -0
  304. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/pypi/simple_index.py +0 -0
  305. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/pypi/upload_package.py +0 -0
  306. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/__init__.py +0 -0
  307. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/create.py +0 -0
  308. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/deploy.py +0 -0
  309. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/get.py +0 -0
  310. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/handle_get_existing_public_ids.py +0 -0
  311. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/handle_import.py +0 -0
  312. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/list_releases.py +0 -0
  313. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/prep_release_assigned_testcases.py +0 -0
  314. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/releases/update.py +0 -0
  315. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/__init__.py +0 -0
  316. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/checkpoint.py +0 -0
  317. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/close.py +0 -0
  318. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/disk_snapshot.py +0 -0
  319. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/evaluate.py +0 -0
  320. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/execute.py +0 -0
  321. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_connect_url.py +0 -0
  322. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_presigned_url.py +0 -0
  323. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_public_url.py +0 -0
  324. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_s3_content.py +0 -0
  325. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_session_details.py +0 -0
  326. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_session_documents.py +0 -0
  327. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_session_flows.py +0 -0
  328. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_session_logs.py +0 -0
  329. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/get_session_plato_config.py +0 -0
  330. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/heartbeat.py +0 -0
  331. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/list_jobs.py +0 -0
  332. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/list_sessions.py +0 -0
  333. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/log_job_mutation.py +0 -0
  334. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/make.py +0 -0
  335. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/reset.py +0 -0
  336. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/set_date.py +0 -0
  337. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/setup_sandbox.py +0 -0
  338. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/snapshot.py +0 -0
  339. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/snapshot_store.py +0 -0
  340. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/state.py +0 -0
  341. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/upload_session_documents.py +0 -0
  342. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/sessions/wait_for_ready.py +0 -0
  343. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/user/__init__.py +0 -0
  344. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/v2/user/get_current_user.py +0 -0
  345. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/version/__init__.py +0 -0
  346. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/api/version/check.py +0 -0
  347. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/client.py +0 -0
  348. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/errors.py +0 -0
  349. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/models/__init__.py +0 -0
  350. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_generated/py.typed +0 -0
  351. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/__init__.py +0 -0
  352. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/cli.py +0 -0
  353. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/instruction.py +0 -0
  354. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/parser.py +0 -0
  355. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/python.py +0 -0
  356. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/instruction/helpers.py.jinja +0 -0
  357. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/instruction/init.py.jinja +0 -0
  358. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/python/api_init.py.jinja +0 -0
  359. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/python/client.py.jinja +0 -0
  360. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/python/endpoint.py.jinja +0 -0
  361. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/python/errors.py.jinja +0 -0
  362. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/python/package_init.py.jinja +0 -0
  363. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/python/tag_init.py.jinja +0 -0
  364. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/_sims_generator/templates/python/version_init.py.jinja +0 -0
  365. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/agents/base.py +0 -0
  366. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/agents/build.py +0 -0
  367. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/agents/trajectory.py +0 -0
  368. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/__init__.py +0 -0
  369. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/__init__.py +0 -0
  370. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/__init__.py +0 -0
  371. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/create_agent.py +0 -0
  372. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/delete_agent.py +0 -0
  373. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/get_agent.py +0 -0
  374. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/get_agent_schema.py +0 -0
  375. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/get_agent_versions.py +0 -0
  376. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/list_agents.py +0 -0
  377. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/agents/lookup_agent.py +0 -0
  378. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/auth/__init__.py +0 -0
  379. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/auth/debug_auth_api_auth_debug_get.py +0 -0
  380. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/auth/get_auth_status_api_auth_status_get.py +0 -0
  381. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/auth/get_current_user_route_api_auth_me_get.py +0 -0
  382. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/default/__init__.py +0 -0
  383. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/default/health.py +0 -0
  384. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/jobs/__init__.py +0 -0
  385. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/jobs/launch_job.py +0 -0
  386. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/registry/__init__.py +0 -0
  387. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/registry/get_agent_schema_api_registry_agents__agent_name__schema_get.py +0 -0
  388. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/registry/get_agent_versions_api_registry_agents__agent_name__versions_get.py +0 -0
  389. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/registry/get_world_schema_api_registry_worlds__package_name__schema_get.py +0 -0
  390. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/registry/get_world_versions_api_registry_worlds__package_name__versions_get.py +0 -0
  391. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/registry/list_registry_agents_api_registry_agents_get.py +0 -0
  392. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/registry/list_registry_worlds_api_registry_worlds_get.py +0 -0
  393. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/runtimes/__init__.py +0 -0
  394. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/runtimes/create_runtime.py +0 -0
  395. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/runtimes/delete_runtime.py +0 -0
  396. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/runtimes/get_runtime.py +0 -0
  397. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/runtimes/list_runtimes.py +0 -0
  398. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/runtimes/test_runtime.py +0 -0
  399. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/secrets/__init__.py +0 -0
  400. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/secrets/create_secret.py +0 -0
  401. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/secrets/delete_secret.py +0 -0
  402. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/secrets/get_secret.py +0 -0
  403. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/secrets/list_secrets.py +0 -0
  404. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/secrets/update_secret.py +0 -0
  405. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/sessions/__init__.py +0 -0
  406. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/sessions/get_session.py +0 -0
  407. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/sessions/get_session_logs.py +0 -0
  408. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/sessions/get_session_logs_download.py +0 -0
  409. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/sessions/list_sessions.py +0 -0
  410. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/status/__init__.py +0 -0
  411. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/status/get_status_api_status_get.py +0 -0
  412. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/status/get_version_info_api_version_get.py +0 -0
  413. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/templates/__init__.py +0 -0
  414. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/templates/create_template.py +0 -0
  415. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/templates/delete_template.py +0 -0
  416. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/templates/get_template.py +0 -0
  417. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/templates/list_templates.py +0 -0
  418. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/templates/update_template.py +0 -0
  419. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/trajectories/__init__.py +0 -0
  420. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/trajectories/get_trajectory.py +0 -0
  421. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/trajectories/list_trajectories.py +0 -0
  422. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/worlds/__init__.py +0 -0
  423. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/worlds/create_world.py +0 -0
  424. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/worlds/delete_world.py +0 -0
  425. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/worlds/get_world.py +0 -0
  426. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/api/worlds/list_worlds.py +0 -0
  427. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/client.py +0 -0
  428. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/errors.py +0 -0
  429. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/models/__init__.py +0 -0
  430. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/chronos/py.typed +0 -0
  431. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/py.typed +0 -0
  432. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/sims/README.md +0 -0
  433. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/sims/__init__.py +0 -0
  434. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/sims/agent_helpers.py +0 -0
  435. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/sims/cli.py +0 -0
  436. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/sims/generate_clients.py +0 -0
  437. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/sims/registry.py +0 -0
  438. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/__init__.py +0 -0
  439. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/audit_ui.py +0 -0
  440. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/__init__.py +0 -0
  441. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/agent.py +0 -0
  442. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/main.py +0 -0
  443. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/pm.py +0 -0
  444. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/sandbox.py +0 -0
  445. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/ssh.py +0 -0
  446. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/utils.py +0 -0
  447. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/verify.py +0 -0
  448. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli/world.py +0 -0
  449. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/cli.py +0 -0
  450. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/config.py +0 -0
  451. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/examples/doordash_tasks.py +0 -0
  452. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/examples/loadtest.py +0 -0
  453. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/examples/test_env.py +0 -0
  454. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/examples/test_env_custom_browser.py +0 -0
  455. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/examples/test_env_sync.py +0 -0
  456. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/examples/test_reuse_env.py +0 -0
  457. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/examples/test_run.py +0 -0
  458. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/exceptions.py +0 -0
  459. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/README.md +0 -0
  460. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/api-client.js +0 -0
  461. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/background.js +0 -0
  462. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/build-sdk.js +0 -0
  463. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/content.js +0 -0
  464. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/manifest.json +0 -0
  465. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/offscreen.html +0 -0
  466. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/offscreen.js +0 -0
  467. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/options.html +0 -0
  468. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/options.js +0 -0
  469. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/package-lock.json +0 -0
  470. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/package.json +0 -0
  471. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js +0 -0
  472. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/plato-sdk-bundle.js.map +0 -0
  473. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/popup.html +0 -0
  474. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/popup.js +0 -0
  475. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/review-panel.html +0 -0
  476. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/review-panel.js +0 -0
  477. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/review-success.html +0 -0
  478. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/review-success.js +0 -0
  479. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/session-active.html +0 -0
  480. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/session-active.js +0 -0
  481. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/session-ended.html +0 -0
  482. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/session-ended.js +0 -0
  483. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/session-setup.html +0 -0
  484. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/session-setup.js +0 -0
  485. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/sessions.html +0 -0
  486. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/sessions.js +0 -0
  487. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/extensions/envgen-recorder/styles.css +0 -0
  488. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/flow_executor.py +0 -0
  489. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/models/__init__.py +0 -0
  490. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/models/build_models.py +0 -0
  491. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/models/env.py +0 -0
  492. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/models/flow.py +0 -0
  493. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/models/sandbox.py +0 -0
  494. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/models/task.py +0 -0
  495. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/sandbox_sdk.py +0 -0
  496. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/sdk.py +0 -0
  497. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/sync_env.py +0 -0
  498. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/sync_flow_executor.py +0 -0
  499. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/sync_sdk.py +0 -0
  500. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v1/utils/proxytunnel.py +0 -0
  501. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/__init__.py +0 -0
  502. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/async_/__init__.py +0 -0
  503. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/async_/artifact.py +0 -0
  504. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/async_/client.py +0 -0
  505. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/async_/environment.py +0 -0
  506. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/async_/flow_executor.py +0 -0
  507. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/async_/session.py +0 -0
  508. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/models.py +0 -0
  509. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/sync/__init__.py +0 -0
  510. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/sync/artifact.py +0 -0
  511. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/sync/client.py +0 -0
  512. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/sync/environment.py +0 -0
  513. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/sync/flow_executor.py +0 -0
  514. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/sync/session.py +0 -0
  515. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/types.py +0 -0
  516. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/utils/__init__.py +0 -0
  517. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/utils/db_cleanup.py +0 -0
  518. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/utils/models.py +0 -0
  519. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/v2/utils/proxy_tunnel.py +0 -0
  520. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/worlds/__init__.py +0 -0
  521. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/plato/worlds/build_hook.py +0 -0
  522. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/scripts/get_all_artifact_targets.py +0 -0
  523. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/__init__.py +0 -0
  524. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/integration/__init__.py +0 -0
  525. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/integration/conftest.py +0 -0
  526. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/integration/test_browser_agent.py +0 -0
  527. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/integration/test_cleanup_snapshot.py +0 -0
  528. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/integration/test_code_world.py +0 -0
  529. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/integration/test_harbor_agent_runner.py +0 -0
  530. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/sims/__init__.py +0 -0
  531. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/sims/conftest.py +0 -0
  532. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/sims/test_agent_helpers.py +0 -0
  533. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/test_heartbeat_keepalive.py +0 -0
  534. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/test_session_serialization.py +0 -0
  535. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/test_set_date.py +0 -0
  536. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/test_v2_imports.py +0 -0
  537. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/test_v2_multisim_integration.py +0 -0
  538. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/tests/test_v2_session.py +0 -0
  539. {plato_sdk_v2-2.3.4 → plato_sdk_v2-2.3.5}/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.4
3
+ Version: 2.3.5
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
@@ -45,7 +48,6 @@ Description-Content-Type: text/markdown
45
48
  # Plato Python SDK
46
49
 
47
50
 
48
-
49
51
  Python SDK for the Plato platform. Uses [Harbor](https://harborframework.com) for agent execution.
50
52
 
51
53
  ## Installation
@@ -1,7 +1,6 @@
1
1
  # Plato Python SDK
2
2
 
3
3
 
4
-
5
4
  Python SDK for the Plato platform. Uses [Harbor](https://harborframework.com) for agent execution.
6
5
 
7
6
  ## Installation
@@ -0,0 +1 @@
1
+ 2.3.5
@@ -20,8 +20,9 @@ Trajectory (ATIF):
20
20
  - Trajectory: ATIF trajectory model
21
21
  - Step, Agent, ToolCall, etc.: ATIF components
22
22
 
23
- Callback:
24
- - ChronosCallback: Utility for Chronos communication
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,16 +81,25 @@ __all__ = [
80
81
  "Metrics",
81
82
  "FinalMetrics",
82
83
  "SCHEMA_VERSION",
83
- # Logging
84
- "init_logging",
85
- "span",
86
- "log_event",
84
+ # Artifacts
85
+ "zip_directory",
87
86
  "upload_artifacts",
88
87
  "upload_artifact",
89
- "upload_checkpoint",
90
- "reset_logging",
88
+ "upload_to_s3",
89
+ # OTel tracing
90
+ "init_tracing",
91
+ "instrument",
92
+ "shutdown_tracing",
93
+ "get_tracer",
94
+ "is_initialized",
91
95
  ]
92
96
 
97
+ from plato.agents.artifacts import (
98
+ upload_artifact,
99
+ upload_artifacts,
100
+ upload_to_s3,
101
+ zip_directory,
102
+ )
93
103
  from plato.agents.base import (
94
104
  BaseAgent,
95
105
  ConfigT,
@@ -99,14 +109,12 @@ from plato.agents.base import (
99
109
  )
100
110
  from plato.agents.build import BuildConfig, load_build_config
101
111
  from plato.agents.config import AgentConfig, Secret
102
- from plato.agents.logging import (
103
- init_logging,
104
- log_event,
105
- reset_logging,
106
- span,
107
- upload_artifact,
108
- upload_artifacts,
109
- upload_checkpoint,
112
+ from plato.agents.otel import (
113
+ get_tracer,
114
+ init_tracing,
115
+ instrument,
116
+ is_initialized,
117
+ shutdown_tracing,
110
118
  )
111
119
  from plato.agents.runner import run_agent
112
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", "checkpoint_paths", "checkpoint_debounce_ms"}
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", "checkpoint_paths", "checkpoint_debounce_ms"}
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,258 @@
1
+ """OpenTelemetry integration for Plato agents and worlds.
2
+
3
+ Provides tracing and logging utilities using OpenTelemetry SDK. Traces and logs
4
+ are sent directly 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
+ # 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
+ # Cleanup
28
+ shutdown_tracing()
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import logging
34
+
35
+ from opentelemetry import trace
36
+ from opentelemetry.trace import Tracer
37
+
38
+ _module_logger = logging.getLogger(__name__)
39
+
40
+ # Global state
41
+ _tracer_provider = None
42
+ _logging_handler = None
43
+ _initialized = False
44
+
45
+
46
+ class OTelLoggingHandler(logging.Handler):
47
+ """Logging handler that emits OTel spans for log messages.
48
+
49
+ Each log message becomes a span with:
50
+ - span.type: "log"
51
+ - log.level: DEBUG/INFO/WARNING/ERROR/CRITICAL
52
+ - content: the log message
53
+ - source: the logger name
54
+ """
55
+
56
+ def __init__(self, tracer_name: str = "plato.logging"):
57
+ super().__init__()
58
+ self._tracer_name = tracer_name
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
+ }
68
+
69
+ def emit(self, record: logging.LogRecord) -> None:
70
+ """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
+ 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
+ # 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")
92
+ span.set_attribute("log.level", record.levelname)
93
+ span.set_attribute("content", msg)
94
+ span.set_attribute("source", logger_name)
95
+
96
+ # Add extra context if available
97
+ if record.funcName:
98
+ span.set_attribute("log.function", record.funcName)
99
+ if record.pathname:
100
+ span.set_attribute("log.file", record.pathname)
101
+ if record.lineno:
102
+ span.set_attribute("log.line", record.lineno)
103
+
104
+ # If there's an exception, record it
105
+ if record.exc_info and record.exc_info[1]:
106
+ span.record_exception(record.exc_info[1])
107
+
108
+ except Exception:
109
+ # Don't let logging failures break the application
110
+ pass
111
+
112
+
113
+ def init_tracing(
114
+ service_name: str,
115
+ session_id: str,
116
+ otlp_endpoint: str,
117
+ capture_logging: bool = True,
118
+ log_level: int = logging.INFO,
119
+ ) -> None:
120
+ """Initialize OpenTelemetry tracing and optionally capture Python logging.
121
+
122
+ Args:
123
+ service_name: Name of the service (e.g., world name or agent name)
124
+ session_id: Chronos session ID (added as resource attribute)
125
+ otlp_endpoint: Chronos OTLP endpoint (e.g., http://chronos/api/otel)
126
+ capture_logging: If True, install handler to capture Python logs as OTel spans
127
+ log_level: Minimum log level to capture (default: INFO)
128
+ """
129
+ global _tracer_provider, _logging_handler, _initialized
130
+
131
+ if _initialized:
132
+ _module_logger.debug("Tracing already initialized")
133
+ return
134
+
135
+ try:
136
+ from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
137
+ OTLPSpanExporter,
138
+ )
139
+ from opentelemetry.sdk.resources import Resource
140
+ from opentelemetry.sdk.trace import TracerProvider
141
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
142
+
143
+ # Create resource with session ID
144
+ resource = Resource.create(
145
+ {
146
+ "service.name": service_name,
147
+ "session.id": session_id,
148
+ }
149
+ )
150
+
151
+ # Create tracer provider
152
+ _tracer_provider = TracerProvider(resource=resource)
153
+
154
+ # Add OTLP exporter pointing to Chronos
155
+ otlp_exporter = OTLPSpanExporter(endpoint=f"{otlp_endpoint.rstrip('/')}/v1/traces")
156
+ _tracer_provider.add_span_processor(BatchSpanProcessor(otlp_exporter))
157
+
158
+ # Set as global tracer provider
159
+ trace.set_tracer_provider(_tracer_provider)
160
+
161
+ _initialized = True
162
+
163
+ # Install logging handler to capture Python logs
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)
169
+
170
+ # Use print to ensure this shows regardless of logging config
171
+ 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
+
178
+ except ImportError as e:
179
+ print(f"[OTel] OpenTelemetry SDK not installed: {e}")
180
+ _module_logger.warning(f"OpenTelemetry SDK not installed: {e}")
181
+ except Exception as e:
182
+ print(f"[OTel] Failed to initialize tracing: {e}")
183
+ _module_logger.error(f"Failed to initialize tracing: {e}")
184
+
185
+
186
+ def shutdown_tracing() -> None:
187
+ """Shutdown the tracer provider, flush spans, and remove logging handler."""
188
+ global _tracer_provider, _logging_handler, _initialized
189
+
190
+ # Remove logging handler first
191
+ if _logging_handler:
192
+ try:
193
+ logging.getLogger().removeHandler(_logging_handler)
194
+ except Exception:
195
+ pass
196
+ _logging_handler = None
197
+
198
+ if _tracer_provider:
199
+ try:
200
+ _tracer_provider.shutdown()
201
+ _module_logger.info("OTel tracing shutdown complete")
202
+ except Exception as e:
203
+ _module_logger.warning(f"Error shutting down tracer: {e}")
204
+
205
+ _tracer_provider = None
206
+ _initialized = False
207
+
208
+
209
+ def get_tracer(name: str = "plato") -> Tracer:
210
+ """Get a tracer instance.
211
+
212
+ Args:
213
+ name: Tracer name (default: "plato")
214
+
215
+ Returns:
216
+ OpenTelemetry Tracer
217
+ """
218
+ return trace.get_tracer(name)
219
+
220
+
221
+ def is_initialized() -> bool:
222
+ """Check if OTel tracing is initialized."""
223
+ return _initialized
224
+
225
+
226
+ def instrument(service_name: str = "plato-agent") -> Tracer:
227
+ """Initialize OTel tracing from environment variables.
228
+
229
+ Reads the following env vars:
230
+ - OTEL_EXPORTER_OTLP_ENDPOINT: Chronos OTLP endpoint (required for tracing)
231
+ - SESSION_ID: Chronos session ID (default: "local")
232
+
233
+ If OTEL_EXPORTER_OTLP_ENDPOINT is not set, returns a no-op tracer.
234
+
235
+ Args:
236
+ service_name: Name of the service for traces
237
+
238
+ Returns:
239
+ OpenTelemetry Tracer
240
+ """
241
+ import os
242
+
243
+ otel_endpoint = os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT")
244
+ session_id = os.environ.get("SESSION_ID", "local")
245
+
246
+ if not otel_endpoint:
247
+ # Return default tracer (no-op if no provider configured)
248
+ return trace.get_tracer(service_name)
249
+
250
+ # Initialize tracing
251
+ init_tracing(
252
+ service_name=service_name,
253
+ session_id=session_id,
254
+ otlp_endpoint=otel_endpoint,
255
+ capture_logging=True,
256
+ )
257
+
258
+ return trace.get_tracer(service_name)