agent-engine-runner-shared 0.11.13__tar.gz → 0.11.14__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 (259) hide show
  1. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/CHANGELOG.md +6 -0
  2. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/PKG-INFO +3 -3
  3. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/pyproject.toml +3 -3
  4. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/tracing/setup.py +26 -19
  5. agent_engine_runner_shared-0.11.14/tests/unit/test_platform_trace_payload_parity.py +124 -0
  6. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_platform_tracing_exporter.py +68 -21
  7. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/Dockerfile +0 -0
  8. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/LICENSE +0 -0
  9. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/Makefile +0 -0
  10. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/README.md +0 -0
  11. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/docs/api.md +0 -0
  12. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/pydoc-markdown.yml +0 -0
  13. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/pyrightconfig.json +0 -0
  14. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/scripts/agentic-vendored-wheel-check.sh +0 -0
  15. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/__init__.py +0 -0
  16. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/__main__.py +0 -0
  17. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/a2a.py +0 -0
  18. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/a2a_auth.py +0 -0
  19. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/agent_config.py +0 -0
  20. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/async_utils.py +0 -0
  21. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/caller_trace.py +0 -0
  22. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/checkpoint_workspace.py +0 -0
  23. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/README.md +0 -0
  24. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/__init__.py +0 -0
  25. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/bundle.py +0 -0
  26. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/create_tool.py +0 -0
  27. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/definitions.py +0 -0
  28. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/executor.py +0 -0
  29. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/README.md +0 -0
  30. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/__init__.py +0 -0
  31. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/authoring.py +0 -0
  32. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/catalog.py +0 -0
  33. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/modes.py +0 -0
  34. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/naming.py +0 -0
  35. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/parameters.py +0 -0
  36. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/security.py +0 -0
  37. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/generate/spec.py +0 -0
  38. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/materialize.py +0 -0
  39. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/connectors/runtime.py +0 -0
  40. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/context.py +0 -0
  41. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/custom_events.py +0 -0
  42. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/db_config.py +0 -0
  43. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/db_naming.py +0 -0
  44. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/error_reporting.py +0 -0
  45. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/execution.py +0 -0
  46. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/__init__.py +0 -0
  47. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/__init__.py +0 -0
  48. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/__init__.py +0 -0
  49. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/activity_pb2.py +0 -0
  50. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/activity_pb2.pyi +0 -0
  51. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/common_pb2.py +0 -0
  52. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/common_pb2.pyi +0 -0
  53. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/runtime_pb2.py +0 -0
  54. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/runtime_pb2.pyi +0 -0
  55. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/state_pb2.py +0 -0
  56. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/generated/workflow/v1/state_pb2.pyi +0 -0
  57. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/guardrails_evaluator/__init__.py +0 -0
  58. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/guardrails_evaluator/core.py +0 -0
  59. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/guardrails_evaluator/regex.py +0 -0
  60. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/hooks.py +0 -0
  61. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/http_path.py +0 -0
  62. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/launcher.py +0 -0
  63. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/mcp_oauth.py +0 -0
  64. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/mcp_oauth_cache_lock.py +0 -0
  65. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/mcp_oauth_cache_name.py +0 -0
  66. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/mcp_oauth_cli.py +0 -0
  67. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/mcp_oauth_secret.py +0 -0
  68. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/mcp_tools.py +0 -0
  69. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/memory.py +0 -0
  70. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/memory_appbound.py +0 -0
  71. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/metrics.py +0 -0
  72. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/models.py +0 -0
  73. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/node_logger.py +0 -0
  74. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/owner_callback.py +0 -0
  75. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/progress.py +0 -0
  76. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/py.typed +0 -0
  77. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/runtime.py +0 -0
  78. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/secure_llm_proxy.py +0 -0
  79. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/secure_wrapper.py +0 -0
  80. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/__init__.py +0 -0
  81. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/aer.py +0 -0
  82. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/atlas_dns.py +0 -0
  83. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/auth.py +0 -0
  84. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/base.py +0 -0
  85. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/call_interrupt.py +0 -0
  86. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/callback_delivery.py +0 -0
  87. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/chunk_types.py +0 -0
  88. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/cors.py +0 -0
  89. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/drain.py +0 -0
  90. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/graph_warm.py +0 -0
  91. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/http_retry.py +0 -0
  92. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/metadata.py +0 -0
  93. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/oe_url.py +0 -0
  94. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/owner_url.py +0 -0
  95. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/query.py +0 -0
  96. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/server/tool.py +0 -0
  97. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/span_kinds.py +0 -0
  98. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/span_names.py +0 -0
  99. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/startup_state.py +0 -0
  100. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/structured_logging.py +0 -0
  101. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/tls_client.py +0 -0
  102. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/tool_api_error.py +0 -0
  103. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/tool_memory_ownership.py +0 -0
  104. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/toolpod_handlers.py +0 -0
  105. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/tracing/__init__.py +0 -0
  106. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/tracing/conversation.py +0 -0
  107. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/tracing/exporters.py +0 -0
  108. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/types.py +0 -0
  109. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/utils.py +0 -0
  110. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/__init__.py +0 -0
  111. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/activity.py +0 -0
  112. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/attempt.py +0 -0
  113. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/cancelled_history.py +0 -0
  114. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/client.py +0 -0
  115. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/context.py +0 -0
  116. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/heartbeat.py +0 -0
  117. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/memory.py +0 -0
  118. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/protojson.py +0 -0
  119. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/src/agent_engine_runner_shared/workflow/settlement.py +0 -0
  120. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/__init__.py +0 -0
  121. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/conftest.py +0 -0
  122. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/corpus/.gitignore +0 -0
  123. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/corpus/README.md +0 -0
  124. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/corpus/__init__.py +0 -0
  125. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/corpus/fetch_corpus.py +0 -0
  126. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/corpus/manifest.json +0 -0
  127. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/corpus/test_api_corpus.py +0 -0
  128. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/integration/__init__.py +0 -0
  129. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/integration/mock_embedder.py +0 -0
  130. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/integration/test_a2a_trace_propagation.py +0 -0
  131. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/integration/test_runtime.py +0 -0
  132. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/integration/test_secure_async.py +0 -0
  133. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/integration/test_secure_sync.py +0 -0
  134. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/integration/test_tracing_otlp_wire_format.py +0 -0
  135. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/pact/conftest.py +0 -0
  136. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/pact/test_oe_provider_verification.py +0 -0
  137. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/__init__.py +0 -0
  138. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/__init__.py +0 -0
  139. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/fixtures/auth_cases.yaml +0 -0
  140. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/fixtures/jira.tool_defs.yaml +0 -0
  141. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/test_auth.py +0 -0
  142. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/test_bundle.py +0 -0
  143. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/test_core.py +0 -0
  144. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/test_create_tool.py +0 -0
  145. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/test_generate.py +0 -0
  146. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/connectors/test_materialize.py +0 -0
  147. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_a2a.py +0 -0
  148. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_a2a_auth.py +0 -0
  149. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_a2a_registration.py +0 -0
  150. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_build_agent_span.py +0 -0
  151. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_cancelled_turn.py +0 -0
  152. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_capability_advertise.py +0 -0
  153. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_chunk_delivery_reliability.py +0 -0
  154. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_chunk_emission.py +0 -0
  155. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_durable_attempt.py +0 -0
  156. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_llm_invocation_signal.py +0 -0
  157. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_metadata_payload.py +0 -0
  158. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_policy_denied.py +0 -0
  159. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_session_finish.py +0 -0
  160. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_timeout_signal.py +0 -0
  161. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_trace_context.py +0 -0
  162. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_aer_workspace_scope.py +0 -0
  163. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_agent_config.py +0 -0
  164. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_async_utils.py +0 -0
  165. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_atlas_dns.py +0 -0
  166. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_call_interrupt.py +0 -0
  167. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_call_interrupt_contract.py +0 -0
  168. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_checkpoint_workspace.py +0 -0
  169. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_cors.py +0 -0
  170. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_create_memory_client_headers.py +0 -0
  171. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_custom_headers_context.py +0 -0
  172. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_custom_headers_models.py +0 -0
  173. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_db_naming.py +0 -0
  174. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_debug_hook.py +0 -0
  175. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_drain.py +0 -0
  176. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_drain_contract.py +0 -0
  177. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_durable_guardrail_review.py +0 -0
  178. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_durable_oauth.py +0 -0
  179. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_durable_proxies.py +0 -0
  180. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_emit_custom_event.py +0 -0
  181. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_emit_progress.py +0 -0
  182. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_error_reporting.py +0 -0
  183. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_execution.py +0 -0
  184. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_extract_turn_messages.py +0 -0
  185. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_format_llm_error.py +0 -0
  186. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_graph_warm.py +0 -0
  187. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_guardrails_protocol.py +0 -0
  188. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_hitl_interrupt.py +0 -0
  189. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_hooks.py +0 -0
  190. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_http_path.py +0 -0
  191. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_http_retry.py +0 -0
  192. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_launcher.py +0 -0
  193. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_launcher_reports.py +0 -0
  194. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_listen_host.py +0 -0
  195. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_llm_credential_classification.py +0 -0
  196. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_llm_routing.py +0 -0
  197. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_mcp_era_compat.py +0 -0
  198. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_mcp_oauth.py +0 -0
  199. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_mcp_oauth_cli.py +0 -0
  200. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_mcp_oauth_secret.py +0 -0
  201. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_mcp_tools.py +0 -0
  202. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_memory_appbound.py +0 -0
  203. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_memory_search_metadata.py +0 -0
  204. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_memory_writer_context.py +0 -0
  205. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_metadata.py +0 -0
  206. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_metrics.py +0 -0
  207. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_models.py +0 -0
  208. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_no_lc_imports.py +0 -0
  209. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_node_logger.py +0 -0
  210. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_oe_url.py +0 -0
  211. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_owner_callback.py +0 -0
  212. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_owner_url.py +0 -0
  213. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_payload_context.py +0 -0
  214. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_query_routes.py +0 -0
  215. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_request_id_context.py +0 -0
  216. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_resume_payload.py +0 -0
  217. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_runtime_build_context_from_sources.py +0 -0
  218. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_runtime_checkpoint_workspace.py +0 -0
  219. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_runtime_custom_memory.py +0 -0
  220. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_runtime_memory_context.py +0 -0
  221. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_runtime_models.py +0 -0
  222. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_runtime_register_tool.py +0 -0
  223. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_secure_llm_proxy.py +0 -0
  224. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_secure_wrapper.py +0 -0
  225. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_server_auth.py +0 -0
  226. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_server_health.py +0 -0
  227. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_server_shutdown.py +0 -0
  228. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_server_startup_failures.py +0 -0
  229. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_session_filesystem_isolation.py +0 -0
  230. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_session_finish_context.py +0 -0
  231. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_shared_client.py +0 -0
  232. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_structured_logging.py +0 -0
  233. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_thinking_tokens.py +0 -0
  234. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tls_client.py +0 -0
  235. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tls_client_integration.py +0 -0
  236. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_token_capture.py +0 -0
  237. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool.py +0 -0
  238. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_api_error.py +0 -0
  239. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_authorization.py +0 -0
  240. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_cancellation_boundary.py +0 -0
  241. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_deserialization.py +0 -0
  242. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_log_redaction.py +0 -0
  243. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_memory_ownership.py +0 -0
  244. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_server_startup.py +0 -0
  245. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tool_trace_context.py +0 -0
  246. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_toolpod_handlers.py +0 -0
  247. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_trace_conversation.py +0 -0
  248. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tracing_exporter.py +0 -0
  249. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/test_tracing_retry.py +0 -0
  250. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_activity.py +0 -0
  251. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_attempt.py +0 -0
  252. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_cancelled_history.py +0 -0
  253. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_client.py +0 -0
  254. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_context.py +0 -0
  255. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_heartbeat.py +0 -0
  256. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_memory.py +0 -0
  257. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_protojson.py +0 -0
  258. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_protojson_helpers.py +0 -0
  259. {agent_engine_runner_shared-0.11.13 → agent_engine_runner_shared-0.11.14}/tests/unit/workflow/test_settlement.py +0 -0
@@ -8,6 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8
8
  ## [Unreleased]
9
9
 
10
10
  ### Changed
11
+ - Spans go to the platform trace endpoint (`POST /internal/traces`) by default
12
+ whenever `OE_URL` is set, so the OE can redact PII in them. `AGENTIC_TRACE_EXPORTER`
13
+ no longer needs to be `1`; set it to `0` or `false` to keep the direct MongoDB
14
+ path, which stores spans without redaction. `0.11.14` is the Python floor
15
+ for span redaction. Earlier releases write spans straight to MongoDB unless
16
+ `AGENTIC_TRACE_EXPORTER=1`, and the platform cannot detect this.
11
17
  - **Breaking:** the connector `tool.yaml` `auth` block no longer takes `type`.
12
18
  It names exactly one credential: `bearer: <secret>`, `basic: {username,
13
19
  password}`, `api_keys: [{env, location, name, prefix}]`, or
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agent-engine-runner-shared
3
- Version: 0.11.13
3
+ Version: 0.11.14
4
4
  Summary: Runner SDK - Framework-agnostic agent runtime
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.11
8
- Requires-Dist: agent-engine-sdk-memory==0.11.13
9
- Requires-Dist: agent-engine-sdk==0.11.13
8
+ Requires-Dist: agent-engine-sdk-memory==0.11.14
9
+ Requires-Dist: agent-engine-sdk==0.11.14
10
10
  Requires-Dist: fastapi>=0.141.1
11
11
  Requires-Dist: filelock>=3.0.0
12
12
  Requires-Dist: httpx-sse>=0.4.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agent-engine-runner-shared"
3
- version = "0.11.13"
3
+ version = "0.11.14"
4
4
  description = "Runner SDK - Framework-agnostic agent runtime"
5
5
  readme = "README.md"
6
6
  license = {text = "Apache-2.0"}
@@ -27,9 +27,9 @@ dependencies = [
27
27
  "jsonschema>=4.26.0",
28
28
  "sentry-sdk>=2.27.0",
29
29
  # BaseAgent protocol and AgentInput/AgentEvent models
30
- "agent-engine-sdk==0.11.13",
30
+ "agent-engine-sdk==0.11.14",
31
31
  # Memory models and the MemoryClient HTTP client
32
- "agent-engine-sdk-memory==0.11.13",
32
+ "agent-engine-sdk-memory==0.11.14",
33
33
  # Required for checkpoint message decoding (query/sessions endpoints)
34
34
  "msgpack>=1.0.0",
35
35
  # Required by guardrails_evaluator/regex.py for advanced regex matching
@@ -63,16 +63,17 @@ _retry_thread: Optional[threading.Thread] = None
63
63
  # clients.
64
64
  _tracing_mongo_client: Optional["MongoClient"] = None
65
65
 
66
- # Platform trace-exporter state. The exporter is off by default and enabled
67
- # per workspace with the flag named by `_PLATFORM_TRACE_EXPORTER_ENV`; when on
68
- # (and OE_URL is set) the guest sends spans to the OE instead of writing
69
- # MongoDB directly. `_platform_exporter` is retained so /health can report its
70
- # recent export results and shutdown can reset it.
66
+ # Platform trace-exporter state. The exporter is on whenever OE_URL is set; the
67
+ # flag named by `_PLATFORM_TRACE_EXPORTER_ENV` only turns it off. When on, the
68
+ # guest sends spans to the OE instead of writing MongoDB directly.
69
+ # `_platform_exporter` is retained so /health can report its recent export
70
+ # results and shutdown can reset it.
71
71
  _platform_exporter: Optional[PlatformSpanExporter] = None
72
72
  _platform_exporter_attached: bool = False
73
73
 
74
- # Feature flag: route runner spans to the OE platform trace endpoint. Off by
75
- # default, so an unset value keeps the MongoDB trace-store path. Deliberately
74
+ # Opt-out for routing runner spans to the OE platform trace endpoint. Unset
75
+ # means on. Setting it to "0" or "false" keeps the MongoDB trace-store path: the
76
+ # OE never sees those spans, so PII redaction cannot apply to them. Deliberately
76
77
  # avoids the reserved tenant-secret prefix, which a workspace secret cannot use
77
78
  # (pkg/tenantsecrets), so a workspace can set this one directly.
78
79
  _PLATFORM_TRACE_EXPORTER_ENV = "AGENTIC_TRACE_EXPORTER"
@@ -146,13 +147,12 @@ def _otlp_endpoint_configured() -> bool:
146
147
  def platform_trace_exporter_enabled() -> bool:
147
148
  """Whether the OE platform trace exporter is enabled.
148
149
 
149
- Off by default: the flag gates the rollout, so an unset (or unrecognized)
150
- value keeps the MongoDB trace-store path. A workspace enables it by setting
151
- the env var named by ``_PLATFORM_TRACE_EXPORTER_ENV`` to ``1`` or ``true``.
152
- It is only half the condition — the exporter also needs ``OE_URL`` to know
153
- where to send spans.
150
+ On unless the env var named by ``_PLATFORM_TRACE_EXPORTER_ENV`` is ``0`` or
151
+ ``false``. Any other value, including an unrecognized one, keeps it on so a
152
+ typo cannot silently route spans past the OE. It is only half the
153
+ condition — the exporter also needs ``OE_URL`` to know where to send spans.
154
154
  """
155
- return os.getenv(_PLATFORM_TRACE_EXPORTER_ENV, "").strip().lower() in ("1", "true")
155
+ return os.getenv(_PLATFORM_TRACE_EXPORTER_ENV, "").strip().lower() not in ("0", "false")
156
156
 
157
157
 
158
158
  class ExecutionContextSpanProcessor(SpanProcessor):
@@ -237,13 +237,20 @@ def setup_tracing(
237
237
 
238
238
  provider.add_span_processor(ExecutionContextSpanProcessor())
239
239
 
240
- # Destination: the OE platform trace endpoint when the feature flag is on
241
- # and OE_URL is set, otherwise the caller-supplied MongoDB collection. With
242
- # the flag on the OE is the platform trace path and takes precedence — a
243
- # guest with both must not keep writing MongoDB directly.
240
+ # Destination: the OE platform trace endpoint whenever OE_URL is set,
241
+ # otherwise the caller-supplied MongoDB collection. The OE is the platform
242
+ # trace path and takes precedence — a guest with both must not keep writing
243
+ # MongoDB directly.
244
244
  oe_url = os.getenv("OE_URL", "").strip()
245
245
  otlp_configured = _otlp_endpoint_configured()
246
- if oe_url and platform_trace_exporter_enabled():
246
+ use_platform = bool(oe_url) and platform_trace_exporter_enabled()
247
+ if oe_url and not use_platform:
248
+ logger.warning(
249
+ "Tracing: %s disables the platform trace exporter; spans go to the "
250
+ "trace store without PII redaction",
251
+ _PLATFORM_TRACE_EXPORTER_ENV,
252
+ )
253
+ if use_platform:
247
254
  _attach_platform_exporter(provider, oe_url)
248
255
  elif mongodb_collection is not None:
249
256
  provider.add_span_processor(BatchSpanProcessor(MongoDBSpanExporter(mongodb_collection)))
@@ -399,7 +406,7 @@ def tracing_status() -> dict[str, str]:
399
406
 
400
407
  ``platform_exporter`` is ``attached`` (spans are sent to the OE),
401
408
  ``degraded`` (the most recent export did not fully succeed), or
402
- ``disabled`` (the feature flag is off or OE_URL unset; OTLP may still be
409
+ ``disabled`` (the opt-out is set or OE_URL unset; OTLP may still be
403
410
  configured).
404
411
  """
405
412
  if _platform_exporter_attached:
@@ -0,0 +1,124 @@
1
+ """The Python platform exporter sends the payload the TypeScript one sends.
2
+
3
+ Both runner test suites decode their own request and compare it with the shared
4
+ fixture, so a field one runner drops or renames fails here instead of in the OE.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ from pathlib import Path
11
+
12
+ from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import ExportTraceServiceRequest
13
+ from opentelemetry.proto.trace.v1.trace_pb2 import Span as ProtoSpan
14
+ from opentelemetry.proto.trace.v1.trace_pb2 import Status as ProtoStatus
15
+ from opentelemetry.sdk.resources import Resource
16
+ from opentelemetry.sdk.trace import ReadableSpan
17
+ from opentelemetry.sdk.trace.export import SpanExportResult
18
+ from opentelemetry.trace import SpanContext, SpanKind, Status, StatusCode, TraceFlags
19
+
20
+ from agent_engine_runner_shared.tracing.exporters import PlatformSpanExporter
21
+
22
+ _FIXTURE = (
23
+ Path(__file__).resolve().parents[5] / "shared-test-fixtures" / "runner_trace_payload.json"
24
+ )
25
+
26
+
27
+ _PROJECT_KEY = "agentic_platform.project_id" # open-source-refs:ignore — data contract
28
+
29
+
30
+ class _Response:
31
+ status_code = 200
32
+ headers: dict = {}
33
+ content = b""
34
+
35
+
36
+ class _Client:
37
+ def __init__(self) -> None:
38
+ self.bodies: list[bytes] = []
39
+
40
+ async def post(self, url, *, content, headers, timeout):
41
+ self.bodies.append(content)
42
+ return _Response()
43
+
44
+
45
+ def _fixed_span() -> ReadableSpan:
46
+ return ReadableSpan(
47
+ name="agent.run",
48
+ context=SpanContext(
49
+ trace_id=0x0AF7651916CD43DD8448EB211C80319C,
50
+ span_id=0xB7AD6B7169203331,
51
+ is_remote=False,
52
+ trace_flags=TraceFlags(1),
53
+ ),
54
+ parent=SpanContext(
55
+ trace_id=0x0AF7651916CD43DD8448EB211C80319C,
56
+ span_id=0x00F067AA0BA902B7,
57
+ is_remote=False,
58
+ ),
59
+ resource=Resource({"service.name": "runner-sdk", _PROJECT_KEY: "proj-1"}),
60
+ attributes={
61
+ "session.id": "sess-1",
62
+ "execution.id": "exec-1",
63
+ "thread.id": "sess-1",
64
+ "workspace.id": "ws-1",
65
+ "llm.token_count.total": 42,
66
+ "custom.flag": True,
67
+ "ratio": 0.5,
68
+ "user.note": "contact jane@x.com",
69
+ },
70
+ kind=SpanKind.INTERNAL,
71
+ status=Status(StatusCode.OK),
72
+ start_time=1700000000000000001,
73
+ end_time=1700000001500000002,
74
+ )
75
+
76
+
77
+ def _any_value(value):
78
+ return getattr(value, value.WhichOneof("value"))
79
+
80
+
81
+ def _attributes(pairs) -> dict:
82
+ return {pair.key: _any_value(pair.value) for pair in pairs}
83
+
84
+
85
+ def _normalize(body: bytes) -> dict:
86
+ request = ExportTraceServiceRequest()
87
+ request.ParseFromString(body)
88
+ spans = []
89
+ for resource_spans in request.resource_spans:
90
+ resource = _attributes(resource_spans.resource.attributes)
91
+ for scope_spans in resource_spans.scope_spans:
92
+ for span in scope_spans.spans:
93
+ spans.append(
94
+ {
95
+ "trace_id": span.trace_id.hex(),
96
+ "span_id": span.span_id.hex(),
97
+ "parent_span_id": span.parent_span_id.hex(),
98
+ "name": span.name,
99
+ "kind": ProtoSpan.SpanKind.Name(span.kind),
100
+ "start_time_unix_nano": str(span.start_time_unix_nano),
101
+ "end_time_unix_nano": str(span.end_time_unix_nano),
102
+ "status_code": ProtoStatus.StatusCode.Name(span.status.code),
103
+ "attributes": _attributes(span.attributes),
104
+ "resource": resource,
105
+ }
106
+ )
107
+ return {"spans": spans}
108
+
109
+
110
+ def test_platform_payload_matches_the_shared_fixture():
111
+ client = _Client()
112
+
113
+ async def factory(_base: str):
114
+ return client
115
+
116
+ exporter = PlatformSpanExporter(
117
+ "http://oe:8000", client_factory=factory, cert_mtimes=lambda: None
118
+ )
119
+
120
+ assert exporter.export([_fixed_span()]) == SpanExportResult.SUCCESS
121
+
122
+ expected = json.loads(_FIXTURE.read_text())
123
+ assert len(client.bodies) == 1
124
+ assert _normalize(client.bodies[0]) == {"spans": expected["spans"]}
@@ -622,23 +622,22 @@ def isolated_tracing(monkeypatch):
622
622
  tracing_setup.shutdown_tracing()
623
623
 
624
624
 
625
- @pytest.mark.parametrize("value", ["1", "true", "TRUE", " true "])
626
- def test_platform_trace_exporter_enabled_accepts_truthy_values(monkeypatch, value):
625
+ @pytest.mark.parametrize("value", ["", "1", "true", "TRUE", "yes", "off", "garbage"])
626
+ def test_platform_trace_exporter_enabled_by_default_and_on_other_values(monkeypatch, value):
627
+ monkeypatch.delenv(_PLATFORM_FLAG, raising=False)
628
+ assert tracing_setup.platform_trace_exporter_enabled() is True
627
629
  monkeypatch.setenv(_PLATFORM_FLAG, value)
628
630
  assert tracing_setup.platform_trace_exporter_enabled() is True
629
631
 
630
632
 
631
- @pytest.mark.parametrize("value", ["", "0", "false", "no", "on"])
632
- def test_platform_trace_exporter_disabled_by_default_and_on_other_values(monkeypatch, value):
633
- monkeypatch.delenv(_PLATFORM_FLAG, raising=False)
634
- assert tracing_setup.platform_trace_exporter_enabled() is False
633
+ @pytest.mark.parametrize("value", ["0", "false", "FALSE", " false "])
634
+ def test_platform_trace_exporter_opt_out_values(monkeypatch, value):
635
635
  monkeypatch.setenv(_PLATFORM_FLAG, value)
636
636
  assert tracing_setup.platform_trace_exporter_enabled() is False
637
637
 
638
638
 
639
- def test_setup_tracing_installs_platform_exporter_when_flagged(monkeypatch, isolated_tracing):
639
+ def test_setup_tracing_installs_platform_exporter_by_default(monkeypatch, isolated_tracing):
640
640
  monkeypatch.setenv("OE_URL", "http://oe:8000")
641
- monkeypatch.setenv(_PLATFORM_FLAG, "1")
642
641
 
643
642
  isolated_tracing.setup_tracing(service_name="svc-platform")
644
643
 
@@ -650,9 +649,8 @@ def test_setup_tracing_installs_platform_exporter_when_flagged(monkeypatch, isol
650
649
  }
651
650
 
652
651
 
653
- def test_setup_tracing_flag_prefers_oe_url_over_a_mongodb_collection(monkeypatch, isolated_tracing):
652
+ def test_setup_tracing_prefers_oe_url_over_a_mongodb_collection(monkeypatch, isolated_tracing):
654
653
  monkeypatch.setenv("OE_URL", "http://oe:8000")
655
- monkeypatch.setenv(_PLATFORM_FLAG, "1")
656
654
  collection = MagicMock()
657
655
 
658
656
  isolated_tracing.setup_tracing(service_name="svc-both", mongodb_collection=collection)
@@ -661,13 +659,15 @@ def test_setup_tracing_flag_prefers_oe_url_over_a_mongodb_collection(monkeypatch
661
659
  assert isolated_tracing._mongodb_exporter_attached is False
662
660
 
663
661
 
664
- def test_setup_tracing_oe_url_without_flag_keeps_mongodb(monkeypatch, isolated_tracing):
665
- # The flag is off by default: a live runner with OE_URL set must keep
666
- # writing MongoDB directly, not silently switch to the platform exporter.
662
+ def test_setup_tracing_opt_out_keeps_mongodb_and_warns(monkeypatch, isolated_tracing, caplog):
663
+ # AGENTIC_TRACE_EXPORTER=0 keeps the direct MongoDB path. Those spans skip
664
+ # the OE, so the opt-out must say so in the log.
667
665
  monkeypatch.setenv("OE_URL", "http://oe:8000")
666
+ monkeypatch.setenv(_PLATFORM_FLAG, "0")
668
667
  collection = MagicMock()
669
668
 
670
- isolated_tracing.setup_tracing(service_name="svc-default", mongodb_collection=collection)
669
+ with caplog.at_level("WARNING"):
670
+ isolated_tracing.setup_tracing(service_name="svc-optout", mongodb_collection=collection)
671
671
 
672
672
  assert isolated_tracing._platform_exporter_attached is False
673
673
  assert isolated_tracing._mongodb_exporter_attached is True
@@ -675,6 +675,7 @@ def test_setup_tracing_oe_url_without_flag_keeps_mongodb(monkeypatch, isolated_t
675
675
  "database_exporter": "attached",
676
676
  "platform_exporter": "disabled",
677
677
  }
678
+ assert "without PII redaction" in caplog.text
678
679
 
679
680
 
680
681
  def test_setup_tracing_without_oe_url_uses_mongodb(isolated_tracing):
@@ -729,6 +730,53 @@ def test_platform_exporter_status_degrades_on_partial_success_and_recovers(isola
729
730
  assert isolated_tracing.tracing_status()["platform_exporter"] == "attached"
730
731
 
731
732
 
733
+ def test_platform_exporter_unreachable_oe_loses_spans_and_reports_degraded(isolated_tracing):
734
+ # No Mongo fallback: while the OE is unreachable the batch is lost, and
735
+ # /health must say so rather than report attached.
736
+ import httpx
737
+
738
+ clock = _Clock()
739
+
740
+ def handler(_body):
741
+ return httpx.ConnectError("oe unreachable")
742
+
743
+ exporter, client = _exporter(handler, clock=clock, sleep=clock.advance)
744
+ isolated_tracing._platform_exporter = exporter
745
+ isolated_tracing._platform_exporter_attached = True
746
+
747
+ assert exporter.export(_make_spans(2)) == SpanExportResult.FAILURE
748
+
749
+ assert len(client.requests) > 1
750
+ assert exporter.last_error is not None
751
+ assert isolated_tracing.tracing_status()["platform_exporter"] == "degraded"
752
+ assert isolated_tracing._mongodb_exporter_attached is False
753
+
754
+
755
+ def test_platform_exporter_sustained_503_backpressure_degrades_then_recovers(isolated_tracing):
756
+ # The OE answers 503 + Retry-After when its 16-slot admission semaphore is
757
+ # full. The exporter retries within its deadline, drops the batch when the
758
+ # OE stays saturated, and recovers on the next clean export.
759
+ clock = _Clock()
760
+ saturated = {"on": True}
761
+
762
+ def handler(_body):
763
+ if saturated["on"]:
764
+ return _Response(503, headers={"Retry-After": "1"})
765
+ return _Response(200)
766
+
767
+ exporter, client = _exporter(handler, clock=clock, sleep=clock.advance)
768
+ isolated_tracing._platform_exporter = exporter
769
+ isolated_tracing._platform_exporter_attached = True
770
+
771
+ assert exporter.export(_make_spans(1)) == SpanExportResult.FAILURE
772
+ assert len(client.requests) > 1
773
+ assert isolated_tracing.tracing_status()["platform_exporter"] == "degraded"
774
+
775
+ saturated["on"] = False
776
+ assert exporter.export(_make_spans(1)) == SpanExportResult.SUCCESS
777
+ assert isolated_tracing.tracing_status()["platform_exporter"] == "attached"
778
+
779
+
732
780
  def test_force_flush_tracing_is_true_when_uninitialized(isolated_tracing):
733
781
  assert isolated_tracing.force_flush_tracing() is True
734
782
 
@@ -748,8 +796,8 @@ def _capture_runtime_setup_calls(monkeypatch) -> list[dict]:
748
796
  return calls
749
797
 
750
798
 
751
- def test_runtime_setup_tracing_skips_the_mongo_store_when_flagged(monkeypatch):
752
- """With the platform exporter flagged on and OE_URL set, the guest routes
799
+ def test_runtime_setup_tracing_skips_the_mongo_store_by_default(monkeypatch):
800
+ """With OE_URL set and the opt-out unset, the guest routes
753
801
  spans to the OE and must not open the trace-store Mongo connection — the
754
802
  double-write this change exists to prevent."""
755
803
  import pymongo
@@ -757,7 +805,6 @@ def test_runtime_setup_tracing_skips_the_mongo_store_when_flagged(monkeypatch):
757
805
  import agent_engine_runner_shared.tracing as tracing_pkg
758
806
 
759
807
  monkeypatch.setenv("OE_URL", "http://oe:8000")
760
- monkeypatch.setenv(_PLATFORM_FLAG, "1")
761
808
 
762
809
  setup_calls: list[dict] = []
763
810
  monkeypatch.setattr(tracing_pkg, "setup_tracing", lambda **kwargs: setup_calls.append(kwargs))
@@ -782,13 +829,13 @@ def test_runtime_setup_tracing_skips_the_mongo_store_when_flagged(monkeypatch):
782
829
  assert setup_calls == [{"service_name": "svc"}]
783
830
 
784
831
 
785
- def test_runtime_keeps_mongodb_path_when_flag_off(monkeypatch):
786
- """A live runner (OE_URL set) without the flag must not take the OE path."""
832
+ def test_runtime_keeps_mongodb_path_when_opted_out(monkeypatch):
833
+ """AGENTIC_TRACE_EXPORTER=0 must not take the OE path."""
787
834
  calls = _capture_runtime_setup_calls(monkeypatch)
788
835
  monkeypatch.setenv("OE_URL", "http://oe:8000")
789
- monkeypatch.delenv(_PLATFORM_FLAG, raising=False)
836
+ monkeypatch.setenv(_PLATFORM_FLAG, "0")
790
837
 
791
- TenantRuntime(app_name="svc-default")
838
+ TenantRuntime(app_name="svc-optout")
792
839
 
793
840
  # The MongoDB path passes the collection kwarg; the OE path does not.
794
841
  assert len(calls) == 1