agent-engine-runner-shared 0.11.10__tar.gz → 0.11.12__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 (266) hide show
  1. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/CHANGELOG.md +31 -0
  2. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/Dockerfile +1 -1
  3. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/Makefile +12 -2
  4. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/PKG-INFO +5 -4
  5. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/docs/api.md +85 -29
  6. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/pyproject.toml +6 -4
  7. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/__init__.py +2 -0
  8. agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/__main__.py +12 -0
  9. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/agent_config.py +35 -8
  10. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/README.md +21 -21
  11. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/__init__.py +3 -5
  12. agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/connectors/bundle.py +93 -0
  13. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/create_tool.py +37 -33
  14. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/definitions.py +152 -109
  15. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/executor.py +11 -12
  16. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/README.md +18 -9
  17. agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/connectors/generate/authoring.py +359 -0
  18. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/catalog.py +79 -29
  19. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/modes.py +101 -24
  20. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/security.py +89 -49
  21. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/materialize.py +7 -18
  22. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/custom_events.py +16 -9
  23. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/error_reporting.py +44 -1
  24. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_oauth.py +68 -45
  25. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_oauth_cli.py +54 -33
  26. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_tools.py +204 -79
  27. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/memory_appbound.py +10 -0
  28. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/models.py +85 -5
  29. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/progress.py +7 -0
  30. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/runtime.py +52 -10
  31. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/secure_llm_proxy.py +8 -4
  32. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/secure_wrapper.py +115 -29
  33. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/__init__.py +0 -2
  34. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/aer.py +64 -15
  35. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/base.py +1 -0
  36. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/chunk_types.py +7 -4
  37. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/http_retry.py +4 -5
  38. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/tool.py +112 -37
  39. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/structured_logging.py +33 -4
  40. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tool_api_error.py +14 -0
  41. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/toolpod_handlers.py +4 -2
  42. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tracing/__init__.py +6 -0
  43. agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/tracing/conversation.py +155 -0
  44. agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/tracing/exporters.py +863 -0
  45. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tracing/setup.py +113 -14
  46. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/utils.py +1 -8
  47. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/__init__.py +2 -0
  48. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/activity.py +3 -2
  49. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/client.py +68 -24
  50. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/context.py +74 -4
  51. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/README.md +5 -3
  52. agent_engine_runner_shared-0.11.12/tests/corpus/fetch_corpus.py +78 -0
  53. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/manifest.json +102 -100
  54. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/test_api_corpus.py +83 -40
  55. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/pact/test_oe_provider_verification.py +9 -1
  56. agent_engine_runner_shared-0.11.12/tests/unit/connectors/fixtures/auth_cases.yaml +178 -0
  57. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/fixtures/jira.tool_defs.yaml +1 -2
  58. agent_engine_runner_shared-0.11.12/tests/unit/connectors/test_auth.py +112 -0
  59. agent_engine_runner_shared-0.11.12/tests/unit/connectors/test_bundle.py +99 -0
  60. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_core.py +29 -71
  61. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_create_tool.py +218 -41
  62. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_generate.py +537 -63
  63. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_materialize.py +27 -100
  64. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_a2a_registration.py +2 -1
  65. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_cancelled_turn.py +42 -0
  66. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_capability_advertise.py +2 -1
  67. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_chunk_delivery_reliability.py +13 -3
  68. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_durable_attempt.py +72 -1
  69. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_llm_invocation_signal.py +3 -1
  70. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_metadata_payload.py +1 -0
  71. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_policy_denied.py +3 -1
  72. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_session_finish.py +62 -0
  73. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_timeout_signal.py +70 -8
  74. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_trace_context.py +1 -0
  75. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_agent_config.py +83 -22
  76. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_drain.py +2 -1
  77. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_durable_oauth.py +3 -3
  78. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_durable_proxies.py +1 -1
  79. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_emit_custom_event.py +46 -10
  80. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_emit_progress.py +65 -0
  81. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_error_reporting.py +81 -0
  82. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_graph_warm.py +1 -0
  83. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_hitl_interrupt.py +1 -0
  84. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_http_retry.py +2 -2
  85. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_llm_routing.py +81 -0
  86. agent_engine_runner_shared-0.11.12/tests/unit/test_mcp_era_compat.py +352 -0
  87. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_oauth.py +89 -36
  88. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_oauth_cli.py +93 -38
  89. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_tools.py +197 -171
  90. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_memory_appbound.py +18 -0
  91. agent_engine_runner_shared-0.11.12/tests/unit/test_platform_tracing_exporter.py +608 -0
  92. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_models.py +72 -0
  93. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_secure_wrapper.py +134 -3
  94. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_health.py +47 -3
  95. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_structured_logging.py +172 -1
  96. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tls_client_integration.py +3 -1
  97. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool.py +155 -12
  98. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_api_error.py +30 -0
  99. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_server_startup.py +81 -109
  100. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_toolpod_handlers.py +6 -0
  101. agent_engine_runner_shared-0.11.12/tests/unit/test_trace_conversation.py +210 -0
  102. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tracing_exporter.py +3 -0
  103. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tracing_retry.py +46 -11
  104. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_client.py +115 -2
  105. agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/__main__.py +0 -12
  106. agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/connectors/bundle.py +0 -194
  107. agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/connectors/generate/authoring.py +0 -202
  108. agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/server/function.py +0 -304
  109. agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/tracing/exporters.py +0 -410
  110. agent_engine_runner_shared-0.11.10/tests/corpus/fetch_corpus.py +0 -52
  111. agent_engine_runner_shared-0.11.10/tests/unit/connectors/test_bundle.py +0 -174
  112. agent_engine_runner_shared-0.11.10/tests/unit/test_function_mode.py +0 -858
  113. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/LICENSE +0 -0
  114. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/README.md +0 -0
  115. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/pydoc-markdown.yml +0 -0
  116. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/pyrightconfig.json +0 -0
  117. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/scripts/agentic-vendored-wheel-check.sh +0 -0
  118. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/a2a.py +0 -0
  119. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/a2a_auth.py +0 -0
  120. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/async_utils.py +0 -0
  121. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/caller_trace.py +0 -0
  122. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/checkpoint_workspace.py +0 -0
  123. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/__init__.py +0 -0
  124. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/naming.py +0 -0
  125. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/parameters.py +0 -0
  126. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/generate/spec.py +0 -0
  127. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/runtime.py +0 -0
  128. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/context.py +0 -0
  129. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/db_config.py +0 -0
  130. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/db_naming.py +0 -0
  131. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/execution.py +0 -0
  132. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/__init__.py +0 -0
  133. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/__init__.py +0 -0
  134. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/__init__.py +0 -0
  135. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/activity_pb2.py +0 -0
  136. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/activity_pb2.pyi +0 -0
  137. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/common_pb2.py +0 -0
  138. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/common_pb2.pyi +0 -0
  139. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/runtime_pb2.py +0 -0
  140. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/runtime_pb2.pyi +0 -0
  141. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/state_pb2.py +0 -0
  142. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/workflow/v1/state_pb2.pyi +0 -0
  143. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/guardrails_evaluator/__init__.py +0 -0
  144. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/guardrails_evaluator/core.py +0 -0
  145. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/guardrails_evaluator/regex.py +0 -0
  146. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/hooks.py +0 -0
  147. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/http_path.py +0 -0
  148. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/launcher.py +0 -0
  149. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_oauth_cache_lock.py +0 -0
  150. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_oauth_cache_name.py +0 -0
  151. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_oauth_secret.py +0 -0
  152. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/memory.py +0 -0
  153. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/metrics.py +0 -0
  154. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/node_logger.py +0 -0
  155. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/owner_callback.py +0 -0
  156. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/py.typed +0 -0
  157. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/atlas_dns.py +0 -0
  158. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/auth.py +0 -0
  159. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/call_interrupt.py +0 -0
  160. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/callback_delivery.py +0 -0
  161. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/cors.py +0 -0
  162. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/drain.py +0 -0
  163. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/graph_warm.py +0 -0
  164. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/metadata.py +0 -0
  165. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/oe_url.py +0 -0
  166. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/owner_url.py +0 -0
  167. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/query.py +0 -0
  168. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/span_kinds.py +0 -0
  169. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/span_names.py +0 -0
  170. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/startup_state.py +0 -0
  171. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tls_client.py +0 -0
  172. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tool_memory_ownership.py +0 -0
  173. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/types.py +0 -0
  174. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/attempt.py +0 -0
  175. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/cancelled_history.py +0 -0
  176. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/heartbeat.py +0 -0
  177. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/memory.py +0 -0
  178. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/protojson.py +0 -0
  179. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/settlement.py +0 -0
  180. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/__init__.py +0 -0
  181. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/conftest.py +0 -0
  182. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/.gitignore +0 -0
  183. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/__init__.py +0 -0
  184. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/__init__.py +0 -0
  185. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/mock_embedder.py +0 -0
  186. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_a2a_trace_propagation.py +0 -0
  187. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_runtime.py +0 -0
  188. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_secure_async.py +0 -0
  189. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_secure_sync.py +0 -0
  190. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_tracing_otlp_wire_format.py +0 -0
  191. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/pact/conftest.py +0 -0
  192. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/__init__.py +0 -0
  193. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/__init__.py +0 -0
  194. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_a2a.py +0 -0
  195. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_a2a_auth.py +0 -0
  196. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_build_agent_span.py +0 -0
  197. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_chunk_emission.py +0 -0
  198. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_workspace_scope.py +0 -0
  199. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_async_utils.py +0 -0
  200. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_atlas_dns.py +0 -0
  201. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_call_interrupt.py +0 -0
  202. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_call_interrupt_contract.py +0 -0
  203. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_checkpoint_workspace.py +0 -0
  204. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_cors.py +0 -0
  205. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_create_memory_client_headers.py +0 -0
  206. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_custom_headers_context.py +0 -0
  207. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_custom_headers_models.py +0 -0
  208. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_db_naming.py +0 -0
  209. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_debug_hook.py +0 -0
  210. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_drain_contract.py +0 -0
  211. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_durable_guardrail_review.py +0 -0
  212. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_execution.py +0 -0
  213. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_extract_turn_messages.py +0 -0
  214. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_format_llm_error.py +0 -0
  215. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_guardrails_protocol.py +0 -0
  216. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_hooks.py +0 -0
  217. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_http_path.py +0 -0
  218. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_launcher.py +0 -0
  219. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_launcher_reports.py +0 -0
  220. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_listen_host.py +0 -0
  221. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_llm_credential_classification.py +0 -0
  222. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_oauth_secret.py +0 -0
  223. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_memory_search_metadata.py +0 -0
  224. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_memory_writer_context.py +0 -0
  225. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_metadata.py +0 -0
  226. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_metrics.py +0 -0
  227. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_models.py +0 -0
  228. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_no_lc_imports.py +0 -0
  229. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_node_logger.py +0 -0
  230. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_oe_url.py +0 -0
  231. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_owner_callback.py +0 -0
  232. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_owner_url.py +0 -0
  233. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_payload_context.py +0 -0
  234. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_query_routes.py +0 -0
  235. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_request_id_context.py +0 -0
  236. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_resume_payload.py +0 -0
  237. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_build_context_from_sources.py +0 -0
  238. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_checkpoint_workspace.py +0 -0
  239. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_custom_memory.py +0 -0
  240. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_memory_context.py +0 -0
  241. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_register_tool.py +0 -0
  242. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_secure_llm_proxy.py +0 -0
  243. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_auth.py +0 -0
  244. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_shutdown.py +0 -0
  245. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_startup_failures.py +0 -0
  246. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_session_filesystem_isolation.py +0 -0
  247. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_session_finish_context.py +0 -0
  248. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_shared_client.py +0 -0
  249. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_thinking_tokens.py +0 -0
  250. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tls_client.py +0 -0
  251. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_token_capture.py +0 -0
  252. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_authorization.py +0 -0
  253. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_cancellation_boundary.py +0 -0
  254. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_deserialization.py +0 -0
  255. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_log_redaction.py +0 -0
  256. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_memory_ownership.py +0 -0
  257. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_trace_context.py +0 -0
  258. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_activity.py +0 -0
  259. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_attempt.py +0 -0
  260. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_cancelled_history.py +0 -0
  261. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_context.py +0 -0
  262. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_heartbeat.py +0 -0
  263. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_memory.py +0 -0
  264. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_protojson.py +0 -0
  265. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_protojson_helpers.py +0 -0
  266. {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_settlement.py +0 -0
@@ -8,6 +8,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8
8
  ## [Unreleased]
9
9
 
10
10
  ### Changed
11
+ - **Breaking:** the connector `tool.yaml` `auth` block no longer takes `type`.
12
+ It names exactly one credential: `bearer: <secret>`, `basic: {username,
13
+ password}`, `api_keys: [{env, location, name, prefix}]`, or
14
+ `provider: <OAuth app>` with optional `scopes`, plus optional `headers`; omit
15
+ the block for no credential. A block that still uses `type` or its fields
16
+ fails validation and names the key to use instead. `compile_catalog` and
17
+ `scaffold_tool_yaml` propose the block from the document's security schemes
18
+ and derive secret names from the connector name; `auth` now takes `none`,
19
+ `bearer`, `basic` or `api_keys`, and an OAuth document needs `provider`.
20
+ Generated catalogs record the credential kind without `type`.
21
+ `Auth.header_name()` and `Auth.credential_bindings()` are removed; read
22
+ `Auth.api_keys`. Regenerating a connector with no `auth` block compiles every
23
+ operation anonymously instead of from the OpenAPI document's security, so
24
+ operations the first compile skipped can appear as tools; they send no
25
+ credential.
26
+
27
+ ### Removed
28
+ - Removed the unused pre-materialized connector bundle override
29
+ (`AGENTIC_CONNECTOR_BUNDLE_PATH`) and the `load_connector_bundle` /
30
+ `CONNECTOR_BUNDLE_PATH_ENV` exports. Connectors resolve only from
31
+ `agent.yaml` and its local connector authoring files.
32
+
33
+ ### Changed
34
+ - Remote MCP servers now use MCP Python SDK 2.x (`mcp==2.3.0`). Each call
35
+ negotiates the protocol automatically: it probes `server/discover` and falls
36
+ back to the legacy `initialize` handshake, so servers on `2025-11-25` and
37
+ older keep working while `2026-07-28` servers are reached directly. Tool
38
+ result content keeps its wire field names (`mimeType`, `readOnlyHint`) and
39
+ failed HTTP calls keep reporting their status in error messages. OAuth caches
40
+ written by the previous SDK still load; new entries record the authorization
41
+ server's `issuer` when it provides one.
11
42
  - Reuse a process-wide keep-alive mTLS client for OE callbacks (tool
12
43
  execute/result, node events, progress and custom events) and drain callback
13
44
  response bodies so connections return to the pool; removes a full TLS
@@ -5,7 +5,7 @@
5
5
  # Usage: docker buildx build -t runner:latest -f packages/python/packages/agent-engine-runner-shared/Dockerfile .
6
6
 
7
7
  ARG BASE_TARGETPLATFORM=linux/amd64
8
- ARG RUNNER_BASE_IMAGE=664315256653.dkr.ecr.us-east-1.amazonaws.com/base/amazonlinux2023-python:v3.11-202610191636-2ff39c3@sha256:30ecac067fceafe43a5f0f5e80d1725b60708204dcd2fe3f176363417e2a2402
8
+ ARG RUNNER_BASE_IMAGE=664315256653.dkr.ecr.us-east-1.amazonaws.com/base/amazonlinux2023-python:v3.11-202610292259-5f96580@sha256:25c595ee77900889cc75ece11461542ab2b7251d3d0febf1b107b225ac7cac03
9
9
 
10
10
  FROM --platform=${BASE_TARGETPLATFORM} ghcr.io/astral-sh/uv@sha256:ff07b86af50d4d9391d9daf4ff89ce427bc544f9aae87057e69a1cc0aa369946 AS uv
11
11
 
@@ -13,6 +13,16 @@ PYDOC_MARKDOWN := uv tool run --from 'pydoc-markdown>=4.8' pydoc-markdown
13
13
  # pydoc-markdown emits trailing spaces on blank lines and an extra trailing
14
14
  # blank line; strip both so docs-check only fails on content changes.
15
15
  NORMALIZE_DOCS := perl -0pe 's/[^\S\n]+$$//mg; s/\n+\z/\n/'
16
+ # ruff formats the Python inside Markdown fences, so the generated reference has
17
+ # to go through it too. Without this stage the pre-commit ruff-format hook
18
+ # rewrites api.md and docs-check then fails on the unformatted generator output.
19
+ # Ruff runs from the uv workspace root so it resolves from the workspace lock,
20
+ # the same version the hook and CI pin.
21
+ # $(CURDIR) rather than $(abspath ...): abspath splits its argument on
22
+ # whitespace, so a checkout whose path contains a space would break. Both paths
23
+ # are quoted at the point of use for the same reason.
24
+ PYTHON_WORKSPACE := $(CURDIR)/../..
25
+ FORMAT_DOCS := uv run --directory "$(PYTHON_WORKSPACE)" ruff format --stdin-filename "$(CURDIR)/docs/api.md" -
16
26
 
17
27
  # Output path for the generated reference. Defaults to the committed file;
18
28
  # override (e.g. DOCS_OUT=/tmp/api.md) to generate elsewhere without clobbering
@@ -21,11 +31,11 @@ DOCS_OUT ?= docs/api.md
21
31
 
22
32
  # Regenerate API reference from docstrings.
23
33
  docs:
24
- $(PYDOC_MARKDOWN) pydoc-markdown.yml | $(NORMALIZE_DOCS) > $(DOCS_OUT)
34
+ $(PYDOC_MARKDOWN) pydoc-markdown.yml | $(NORMALIZE_DOCS) | $(FORMAT_DOCS) > $(DOCS_OUT)
25
35
 
26
36
  # CI: fail if docs/api.md is stale.
27
37
  docs-check:
28
- @$(PYDOC_MARKDOWN) pydoc-markdown.yml | $(NORMALIZE_DOCS) > /tmp/api-docs-check.md
38
+ @$(PYDOC_MARKDOWN) pydoc-markdown.yml | $(NORMALIZE_DOCS) | $(FORMAT_DOCS) > /tmp/api-docs-check.md
29
39
  @diff -u docs/api.md /tmp/api-docs-check.md || { \
30
40
  echo ""; \
31
41
  echo "ERROR: docs/api.md is stale. Run 'make docs' to regenerate."; \
@@ -1,18 +1,19 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agent-engine-runner-shared
3
- Version: 0.11.10
3
+ Version: 0.11.12
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.10
9
- Requires-Dist: agent-engine-sdk==0.11.10
8
+ Requires-Dist: agent-engine-sdk-memory==0.11.12
9
+ Requires-Dist: agent-engine-sdk==0.11.12
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
13
+ Requires-Dist: httpx2>=2.5.0
13
14
  Requires-Dist: httpx>=0.27.0
14
15
  Requires-Dist: jsonschema>=4.26.0
15
- Requires-Dist: mcp==1.27.0
16
+ Requires-Dist: mcp==2.3.0
16
17
  Requires-Dist: msgpack>=1.0.0
17
18
  Requires-Dist: protobuf<7,>=6.33.6
18
19
  Requires-Dist: pydantic>=2.0.0
@@ -6,6 +6,8 @@
6
6
  * [agent\_config](#agent_engine_runner_shared.runtime.TenantRuntime.agent_config)
7
7
  * [memory\_enabled](#agent_engine_runner_shared.runtime.TenantRuntime.memory_enabled)
8
8
  * [get\_agent](#agent_engine_runner_shared.runtime.TenantRuntime.get_agent)
9
+ * [build\_graph](#agent_engine_runner_shared.runtime.TenantRuntime.build_graph)
10
+ * [uses\_per\_invocation\_build](#agent_engine_runner_shared.runtime.TenantRuntime.uses_per_invocation_build)
9
11
  * [warm\_up\_agent](#agent_engine_runner_shared.runtime.TenantRuntime.warm_up_agent)
10
12
  * [memory\_engine](#agent_engine_runner_shared.runtime.TenantRuntime.memory_engine)
11
13
  * [memory\_writer](#agent_engine_runner_shared.runtime.TenantRuntime.memory_writer)
@@ -181,6 +183,7 @@
181
183
  * [PolicyDeniedException](#agent_engine_runner_shared.secure_wrapper.PolicyDeniedException)
182
184
  * [OERetryAfterError](#agent_engine_runner_shared.secure_wrapper.OERetryAfterError)
183
185
  * [ToolExecutionError](#agent_engine_runner_shared.secure_wrapper.ToolExecutionError)
186
+ * [ToolOutcomeUnknownError](#agent_engine_runner_shared.secure_wrapper.ToolOutcomeUnknownError)
184
187
  * [ToolPlatformError](#agent_engine_runner_shared.secure_wrapper.ToolPlatformError)
185
188
  * [TerminalExecutionError](#agent_engine_runner_shared.secure_wrapper.TerminalExecutionError)
186
189
  * [raise\_for\_oe\_rejection](#agent_engine_runner_shared.secure_wrapper.raise_for_oe_rejection)
@@ -347,7 +350,9 @@ Return the resolved agent.yaml Memory feature setting.
347
350
  #### get\_agent
348
351
 
349
352
  ```python
350
- def get_agent(callbacks: List[Any] | None = None) -> BaseAgent
353
+ def get_agent(callbacks: List[Any] | None = None,
354
+ *,
355
+ graph: Any = None) -> BaseAgent
351
356
  ```
352
357
 
353
358
  Get a BaseAgent instance from the registered App.
@@ -359,6 +364,9 @@ framework-specific graph building and callback adaptation.
359
364
 
360
365
  - `callbacks` - Framework-neutral callbacks for observability
361
366
  (e.g., NodeExecutionLogger)
367
+ - `graph` - A graph already built by ``build_graph`` for this
368
+ invocation (a per-execution agent). Only forwarded when
369
+ present, so an App that does not accept it keeps working.
362
370
 
363
371
 
364
372
  **Returns**:
@@ -370,6 +378,37 @@ framework-specific graph building and callback adaptation.
370
378
 
371
379
  - `RuntimeError` - If no App has been registered via register_and_run()
372
380
 
381
+ <a id="agent_engine_runner_shared.runtime.TenantRuntime.build_graph"></a>
382
+
383
+ #### build\_graph
384
+
385
+ ```python
386
+ async def build_graph(agent_input: Any = None, ctx: Any = None) -> Any
387
+ ```
388
+
389
+ Build the graph for this invocation before ``get_agent``.
390
+
391
+ The AER awaits this so a per-execution agent's builder -- which may do
392
+ its own async I/O -- runs off the build path. Returns ``None`` when the
393
+ registered App declares no per-execution build (every global agent),
394
+ which tells the caller to use the cached build path unchanged. A
395
+ context-free discovery call passes ``(None, None)``.
396
+
397
+ <a id="agent_engine_runner_shared.runtime.TenantRuntime.uses_per_invocation_build"></a>
398
+
399
+ #### uses\_per\_invocation\_build
400
+
401
+ ```python
402
+ def uses_per_invocation_build() -> bool
403
+ ```
404
+
405
+ Whether the registered App builds its graph per invocation.
406
+
407
+ True only for an App that opted into ``load_strategy="per-execution"``.
408
+ The Tool Pod reads this to decide whether a failed context-free
409
+ discovery build should keep the registrations the builder made before
410
+ it raised, rather than discarding them.
411
+
373
412
  <a id="agent_engine_runner_shared.runtime.TenantRuntime.warm_up_agent"></a>
374
413
 
375
414
  #### warm\_up\_agent
@@ -2398,9 +2437,9 @@ return parse(html)
2398
2437
  Runtime-transparent custom-event emission across Atlas Agent Engine runtimes.
2399
2438
 
2400
2439
  Authors call :func:`emit_custom_event` without knowing which runtime is
2401
- hosting the code (AER agent process vs Tool Pod / function mode). The active
2402
- runtime installs exactly one :class:`CustomEventTransport` before invoking
2403
- tenant code; the helper dispatches to that transport.
2440
+ hosting the code (AER agent process vs Tool Pod). The active runtime installs
2441
+ exactly one :class:`CustomEventTransport` before invoking tenant code; the
2442
+ helper dispatches to that transport.
2404
2443
 
2405
2444
  Atlas Agent Engine transports an opaque author-final JSON object as ``custom_event``.
2406
2445
  It does not interpret keys — customers who need a shaped vocabulary (e.g.
@@ -2532,7 +2571,7 @@ no transport is installed (outside an execution context).
2532
2571
  class OEHTTPCustomEventTransport()
2533
2572
  ```
2534
2573
 
2535
- Tool Pod / function-mode transport: POST final ``custom_event`` chunks to OE.
2574
+ Tool Pod transport: POST final ``custom_event`` chunks to OE.
2536
2575
 
2537
2576
  Delivery is awaited with a bounded timeout and is non-fatal: delivery
2538
2577
  failures are logged and swallowed so a progress event cannot fail the tool.
@@ -2548,10 +2587,10 @@ class FeatureOffCustomEventTransport()
2548
2587
  Fail closed when ``use_custom_parser`` is disabled.
2549
2588
 
2550
2589
  Runtime-neutral rejecting transport shared by AER streaming (when Atlas Agent Engine
2551
- does not subscribe to LangGraph ``custom``) and Tool Pod / function mode
2552
- (when OE POSTs would otherwise succeed while Gateway strips client
2553
- delivery). Authors must not observe a successful emit when the workspace
2554
- cannot deliver custom events to clients.
2590
+ does not subscribe to LangGraph ``custom``) and the Tool Pod (when OE POSTs
2591
+ would otherwise succeed while Gateway strips client delivery). Authors
2592
+ must not observe a successful emit when the workspace cannot deliver custom
2593
+ events to clients.
2555
2594
 
2556
2595
  <a id="agent_engine_runner_shared.custom_events.install_tool_custom_event_transport"></a>
2557
2596
 
@@ -2562,7 +2601,7 @@ def install_tool_custom_event_transport(
2562
2601
  *, enabled: bool = True) -> Token[Optional[CustomEventTransport]]
2563
2602
  ```
2564
2603
 
2565
- Install Tool Pod / function-mode custom-event transport; return reset token.
2604
+ Install the Tool Pod custom-event transport; return reset token.
2566
2605
 
2567
2606
  When ``enabled`` is false (workspace does not have ``use_custom_parser``),
2568
2607
  install a rejecting transport so emit fails closed instead of POSTing an
@@ -2817,6 +2856,19 @@ class ToolExecutionError(Exception)
2817
2856
 
2818
2857
  Raised when tool execution fails.
2819
2858
 
2859
+ <a id="agent_engine_runner_shared.secure_wrapper.ToolOutcomeUnknownError"></a>
2860
+
2861
+ ## ToolOutcomeUnknownError
2862
+
2863
+ ```python
2864
+ class ToolOutcomeUnknownError(ToolExecutionError)
2865
+ ```
2866
+
2867
+ The runner was lost while this durable tool call was in flight.
2868
+
2869
+ It may have taken effect and OE did not run it again. ``error`` is OE's
2870
+ message, written for the model reading it.
2871
+
2820
2872
  <a id="agent_engine_runner_shared.secure_wrapper.ToolPlatformError"></a>
2821
2873
 
2822
2874
  ## ToolPlatformError
@@ -2939,7 +2991,7 @@ def request_oe_approval(
2939
2991
  is_local: bool = True,
2940
2992
  metadata: Optional[Dict[str, Any]] = None,
2941
2993
  redact_fields: Optional[list[str]] = None,
2942
- provider_type: Optional[str] = None,
2994
+ provider: Optional[str] = None,
2943
2995
  scopes: Optional[list[str]] = None,
2944
2996
  tool_call_id: Optional[str] = None,
2945
2997
  custom_headers: Optional[Dict[str, str]] = None,
@@ -3125,22 +3177,22 @@ Clean up resources owned by this execution's wrapper.
3125
3177
  #### execute\_tool
3126
3178
 
3127
3179
  ```python
3128
- def execute_tool(
3129
- tool_name: str,
3130
- arguments: Dict[str, Any],
3131
- *,
3132
- metadata: Optional[Dict[str, Any]] = None,
3133
- provider_type: Optional[str] = None,
3134
- scopes: Optional[list[str]] = None,
3135
- tool_call_id: Optional[str] = None,
3136
- raw_on_interrupt: bool = False,
3137
- redact_fields: Optional[list[str]] = None,
3138
- is_local: bool = True,
3139
- local_executor: Optional[Callable[[], Any]] = None,
3140
- is_framework_control_flow: Optional[Callable[[BaseException],
3141
- bool]] = None,
3142
- call_channel_expected: bool = False,
3143
- on_unknown_outcome: Optional[UnknownOutcomePolicy] = None) -> Any
3180
+ def execute_tool(tool_name: str,
3181
+ arguments: Dict[str, Any],
3182
+ *,
3183
+ metadata: Optional[Dict[str, Any]] = None,
3184
+ provider: Optional[str] = None,
3185
+ scopes: Optional[list[str]] = None,
3186
+ tool_call_id: Optional[str] = None,
3187
+ raw_on_interrupt: bool = False,
3188
+ redact_fields: Optional[list[str]] = None,
3189
+ is_local: bool = True,
3190
+ local_executor: Optional[Callable[[], Any]] = None,
3191
+ is_framework_control_flow: Optional[Callable[[BaseException],
3192
+ bool]] = None,
3193
+ call_channel_expected: bool = False,
3194
+ on_unknown_outcome: Optional[UnknownOutcomePolicy] = None,
3195
+ owning_tool_call: Optional[OwningToolCall] = None) -> Any
3144
3196
  ```
3145
3197
 
3146
3198
  Execute a tool call through OE.
@@ -3168,6 +3220,10 @@ Its consent answer never becomes a tool result or Memory content.
3168
3220
  - `on_unknown_outcome` - What a retry does when the runner was lost while
3169
3221
  this tool was in flight in a durable workflow: ``"rerun"`` runs it
3170
3222
  again, ``"fail"`` refuses the retry.
3223
+ - `owning_tool_call` - The tool call or subagent this operation is performed
3224
+ for, when it is not itself a tool the model requested. In a durable
3225
+ workflow it runs alongside other activities, at a position derived
3226
+ from that call.
3171
3227
 
3172
3228
 
3173
3229
  **Returns**:
@@ -3195,7 +3251,7 @@ def create_secure_tool_function(
3195
3251
  allow_direct: bool = False,
3196
3252
  metadata: Optional[Dict[str, Any]] = None,
3197
3253
  is_local: bool = True,
3198
- provider_type: Optional[str] = None,
3254
+ provider: Optional[str] = None,
3199
3255
  scopes: Optional[list[str]] = None,
3200
3256
  response_format: Literal["content",
3201
3257
  "content_and_artifact"] = "content",
@@ -3891,7 +3947,7 @@ stdout output so the Local Dev UI can read the agent's logs.
3891
3947
  **Arguments**:
3892
3948
 
3893
3949
  - `app_name` - Application name for log file naming
3894
- - `mode` - Runtime mode (aer, tool, tool_function)
3950
+ - `mode` - Runtime mode (aer, tool)
3895
3951
  - `log_dir` - Directory for log files (default: ./logs)
3896
3952
  - `log_level` - Log level (default: from LOG_LEVEL env or INFO)
3897
3953
  - `backup_count` - Number of rotated backup files to keep
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agent-engine-runner-shared"
3
- version = "0.11.10"
3
+ version = "0.11.12"
4
4
  description = "Runner SDK - Framework-agnostic agent runtime"
5
5
  readme = "README.md"
6
6
  license = {text = "Apache-2.0"}
@@ -18,16 +18,18 @@ dependencies = [
18
18
  "pydantic>=2.0.0",
19
19
  "protobuf>=6.33.6,<7",
20
20
  "httpx>=0.27.0",
21
+ # MCP 2.x talks httpx2; the two clients install side by side.
22
+ "httpx2>=2.5.0",
21
23
  "httpx-sse>=0.4.0",
22
- "mcp==1.27.0",
24
+ "mcp==2.3.0",
23
25
  "python-dotenv>=1.0.0",
24
26
  "PyYAML>=6.0",
25
27
  "jsonschema>=4.26.0",
26
28
  "sentry-sdk>=2.27.0",
27
29
  # BaseAgent protocol and AgentInput/AgentEvent models
28
- "agent-engine-sdk==0.11.10",
30
+ "agent-engine-sdk==0.11.12",
29
31
  # Memory models and the MemoryClient HTTP client
30
- "agent-engine-sdk-memory==0.11.10",
32
+ "agent-engine-sdk-memory==0.11.12",
31
33
  # Required for checkpoint message decoding (query/sessions endpoints)
32
34
  "msgpack>=1.0.0",
33
35
  # Required by guardrails_evaluator/regex.py for advanced regex matching
@@ -96,6 +96,7 @@ from agent_engine_runner_shared.secure_wrapper import (
96
96
  TerminalExecutionError,
97
97
  ToolCallTimeoutError,
98
98
  ToolExecutionError,
99
+ ToolOutcomeUnknownError,
99
100
  ToolPlatformError,
100
101
  extract_usage,
101
102
  )
@@ -191,6 +192,7 @@ __all__ = [
191
192
  "TerminalExecutionError",
192
193
  "ToolCallTimeoutError",
193
194
  "ToolExecutionError",
195
+ "ToolOutcomeUnknownError",
194
196
  "ToolPlatformError",
195
197
  "ExternalAPICallError",
196
198
  # Utilities
@@ -0,0 +1,12 @@
1
+ """Generic platform entrypoint for the runner-shared image.
2
+
3
+ Dispatches via RUNNER_MODE (aer | tool) through
4
+ TenantRuntime.register_and_run(). Tool mode does not need a graph builder; aer
5
+ mode does, so user agents provide their own __main__.py for that case
6
+ (App.run() enforces the builder check there).
7
+ """
8
+
9
+ from agent_engine_runner_shared.runtime import TenantRuntime
10
+
11
+ if __name__ == "__main__":
12
+ TenantRuntime().register_and_run()
@@ -340,7 +340,20 @@ class RuntimeMCPServerConfig(BaseModel):
340
340
  default="streamable_http",
341
341
  description="MCP transport used to connect to the server.",
342
342
  )
343
- url: NonEmptyString = Field(description="Streamable HTTP endpoint for the MCP server.")
343
+ url: NonEmptyString | None = Field(
344
+ default=None,
345
+ description=(
346
+ "Streamable HTTP endpoint for the MCP server. An entry with no url names "
347
+ "a project OAuth app with its key, and the app's resource is the endpoint."
348
+ ),
349
+ )
350
+ scopes: list[NonEmptyString] = Field(
351
+ default_factory=list,
352
+ description=(
353
+ "Scopes requested from the OAuth app the entry names, instead of the "
354
+ "app's defaults. Refused beside a url."
355
+ ),
356
+ )
344
357
  headers: dict[str, str] = Field(
345
358
  default_factory=dict,
346
359
  description="Static non-secret HTTP headers sent to the MCP server.",
@@ -361,11 +374,25 @@ class RuntimeMCPServerConfig(BaseModel):
361
374
 
362
375
  @model_validator(mode="after")
363
376
  def validate_server_config(self) -> "RuntimeMCPServerConfig":
364
- parsed = urlparse(self.url)
365
- if parsed.scheme not in {"http", "https"} or parsed.hostname is None:
366
- raise ValueError("mcp server url must be an absolute http(s) URL")
367
- if parsed.scheme == "http" and self.auth.type != "none":
368
- raise ValueError("mcp server url must be https when auth.type is set")
377
+ if self.url is None:
378
+ # The app supplies the credential, so an auth block here could only
379
+ # disagree with it. auth has a default, so ask whether it was written.
380
+ if "auth" in self.model_fields_set:
381
+ raise ValueError(
382
+ "mcp server auth is not allowed without url; "
383
+ "an entry with no url names an OAuth app"
384
+ )
385
+ else:
386
+ if "scopes" in self.model_fields_set:
387
+ raise ValueError(
388
+ "mcp server scopes is not allowed with url; "
389
+ "scopes apply to an entry that names an OAuth app"
390
+ )
391
+ parsed = urlparse(self.url)
392
+ if parsed.scheme not in {"http", "https"} or parsed.hostname is None:
393
+ raise ValueError("mcp server url must be an absolute http(s) URL")
394
+ if parsed.scheme == "http" and self.auth.type != "none":
395
+ raise ValueError("mcp server url must be https when auth.type is set")
369
396
 
370
397
  forbidden_headers = sorted(
371
398
  header for header in self.headers if header.lower() in _FORBIDDEN_MCP_HEADER_KEYS
@@ -452,8 +479,8 @@ class RuntimeAgentConfig(BaseModel):
452
479
  a2a: A2AConfig = Field(default_factory=A2AConfig)
453
480
  mcp: RuntimeMCPConfig = Field(default_factory=RuntimeMCPConfig)
454
481
  required_secrets: SecretsConfig = Field(default_factory=SecretsConfig)
455
- # Python/LangGraph only: connector authoring files materialized at startup.
456
- # The shared Go parser rejects the key for TypeScript agents.
482
+ # LangGraph only: connector authoring files materialized at startup.
483
+ # The shared Go parser rejects the key for other frameworks.
457
484
  connectors: list[RuntimeConnectorReference] = Field(default_factory=list)
458
485
 
459
486
  def feature_enabled(
@@ -1,24 +1,23 @@
1
1
  # Compiled connector core
2
2
 
3
- This Python-only package implements definition loading, synchronous HTTP execution and
4
- opt-in registration. It is not exposed through the CLI. Connector tools use the existing
5
- AER → OE → Tool Pod execution path.
3
+ The Python and TypeScript Runner SDKs share this connector contract. The Python
4
+ implementation covers definition loading, synchronous HTTP execution, and opt-in
5
+ registration; the TypeScript implementation mirrors the same materialization,
6
+ registration, and execution contract. It is not exposed through the CLI. Connector
7
+ tools use the existing AER → OE → Tool Pod execution path.
6
8
 
7
9
  Runtime integration follows the platform's config → discover → register flow: each
8
- process derives its own view from the same manifest. Resolution order in
10
+ process derives its own view from the same manifest. Resolution in
9
11
  `resolve_runtime_bundle`:
10
12
 
11
- 1. A pre-materialized bundle published by the platform build, located via the
12
- platform-owned `AGENTIC_CONNECTOR_BUNDLE_PATH` environment variable (the
13
- deployment contract for hosted builds).
14
- 2. Otherwise, the `connectors` entries in `agent.yaml` are materialized in memory at
13
+ 1. The `connectors` entries in `agent.yaml` are materialized in memory at
15
14
  startup: each entry names a `tool.yaml` (resolved relative to `agent.yaml`) that
16
15
  selects operations from a local catalog file (resolved relative to the
17
16
  `tool.yaml`, contained within the agent workspace) and binds the endpoint and
18
17
  credential environment reference. Catalogs are local files only — HTTPS catalog
19
18
  references fail; there is no network fetch.
20
- 3. With neither configured, loading is an immediate no-op without filesystem or
21
- network access.
19
+ 2. With no connectors configured, loading is an immediate no-op without filesystem
20
+ or network access.
22
21
 
23
22
  ```yaml
24
23
  version: 1
@@ -38,32 +37,33 @@ source:
38
37
  expose:
39
38
  allow: [jiradc_getComments]
40
39
  auth:
41
- type: bearer
42
- env: JIRA_TOKEN
40
+ bearer: JIRA_TOKEN
43
41
  ```
44
42
 
45
- For delegated OAuth, replace that auth block with an explicit provider binding:
43
+ The block names exactly one of `bearer`, `basic`, `api_keys` or `provider`, by
44
+ workspace secret name or OAuth app; no block means no credential. For OAuth,
45
+ bind the project's OAuth app instead:
46
46
 
47
47
  ```yaml
48
48
  auth:
49
- type: oauth
50
- provider_type: github
49
+ provider: github
51
50
  scopes: [repo]
52
51
  ```
53
52
 
54
- `provider_type` is the key of a provider configured for the project, independent
53
+ `provider` names an OAuth app configured for the project, independent
55
54
  of the resource API's base URL. The scopes apply to every exposed operation in
56
55
  this connector. Registration carries this policy outside the model's argument
57
- schema. The Orchestration Engine resolves a credential for the saved application
58
- user and passes it to the Tool Pod for that invocation. A missing or invalid token
56
+ schema. The Orchestration Engine resolves a credential and passes it to the Tool
57
+ Pod for that invocation. The app's grant decides whose: an authorization code app
58
+ gives the saved application user's token, and a client credentials app gives the
59
+ project's shared token with no user and no consent. A missing or invalid token
59
60
  stops the HTTP call; OAuth never falls back to a tenant environment secret.
60
61
  Existing static auth modes continue to use their configured environment bindings.
61
62
  Catalog regeneration preserves the authored OAuth binding and records only
62
63
  secret-free Bearer presentation in the catalog.
63
64
 
64
- The pre-materialized index paths are relative to the index and must remain inside its
65
- directory. AER loads the schemas as ordinary remote tools. Tool Pod startup loads the
66
- same materialized view and owns one `ConnectorExecutor` per connector.
65
+ AER loads the materialized schemas as ordinary remote tools. Tool Pod startup
66
+ materializes the same view and owns one `ConnectorExecutor` per connector.
67
67
 
68
68
  `load_tool_defs(path)` reads a local compiled YAML artifact into `ToolDefinitions`.
69
69
  `tool_schemas()` returns detached name, description and `inputSchema` dictionaries.
@@ -1,15 +1,14 @@
1
- """Compiled OpenAPI connector core, bundle loading, and authoring materialization."""
1
+ """Compiled OpenAPI connector core and authoring materialization."""
2
2
 
3
3
  from agent_engine_runner_shared.connectors.bundle import (
4
- CONNECTOR_BUNDLE_PATH_ENV,
5
4
  BundledConnector,
6
5
  BundledTool,
7
6
  ConnectorBundle,
8
7
  ConnectorBundleError,
9
- load_connector_bundle,
10
8
  )
11
9
  from agent_engine_runner_shared.connectors.definitions import (
12
10
  Auth,
11
+ BasicAuth,
13
12
  Credential,
14
13
  ToolDefinitions,
15
14
  load_tool_defs,
@@ -33,7 +32,6 @@ from agent_engine_runner_shared.connectors.runtime import (
33
32
  )
34
33
 
35
34
  __all__ = [
36
- "CONNECTOR_BUNDLE_PATH_ENV",
37
35
  "BundledConnector",
38
36
  "BundledTool",
39
37
  "CompileResult",
@@ -46,9 +44,9 @@ __all__ = [
46
44
  "GenerateError",
47
45
  "MaterializeError",
48
46
  "Auth",
47
+ "BasicAuth",
49
48
  "ToolDefinitions",
50
49
  "compile_catalog",
51
- "load_connector_bundle",
52
50
  "load_tool_defs",
53
51
  "materialize_connectors",
54
52
  "regenerate_catalog",
@@ -0,0 +1,93 @@
1
+ """Validated runtime views shared by AER and Tool Pod connector registration.
2
+
3
+ The authoring materializer builds these objects from ``agent.yaml``,
4
+ ``tool.yaml``, and the local compiled catalog. AER consumes each tool's schema
5
+ and registration metadata; Tool Pod consumes the same views to bind executor
6
+ callables. Nothing here reads files or performs I/O.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from dataclasses import dataclass
12
+ from typing import Any
13
+ from urllib.parse import urlsplit
14
+
15
+ from agent_engine_runner_shared.connectors.definitions import (
16
+ Operation,
17
+ ToolDefinitions,
18
+ )
19
+ from agent_engine_runner_shared.connectors.executor import DEFAULT_EXECUTION_TIMEOUT_SECONDS
20
+
21
+ __all__ = [
22
+ "BundledConnector",
23
+ "BundledTool",
24
+ "ConnectorBundle",
25
+ "ConnectorBundleError",
26
+ ]
27
+
28
+
29
+ class ConnectorBundleError(ValueError):
30
+ """Raised when a connector bundle cannot be registered safely."""
31
+
32
+
33
+ @dataclass(frozen=True)
34
+ class BundledConnector:
35
+ """One validated compiled connector from the materialized runtime view."""
36
+
37
+ name: str
38
+ definitions: ToolDefinitions
39
+
40
+
41
+ @dataclass(frozen=True)
42
+ class BundledTool:
43
+ """One operation and the connector definitions needed to execute it."""
44
+
45
+ connector: BundledConnector
46
+ operation: Operation
47
+
48
+ @property
49
+ def schema(self) -> dict[str, Any]:
50
+ """Return a detached SDK-visible schema."""
51
+ return self.operation.model_dump(include={"name", "description", "inputSchema"})
52
+
53
+ @property
54
+ def network(self) -> list[str]:
55
+ """Return the single outbound host declared by this connector."""
56
+ hostname = urlsplit(self.connector.definitions.source.base_url).hostname
57
+ assert hostname is not None # ToolDefinitions validated the URL.
58
+ return [hostname]
59
+
60
+ @property
61
+ def registration_metadata(self) -> dict[str, Any]:
62
+ """Return detached AER/Tool Pod policy, with delegated binding outside the schema."""
63
+ operation = self.operation
64
+ auth = self.connector.definitions.auth
65
+ provider = auth.provider if auth is not None else None
66
+ return {
67
+ "name": operation.name,
68
+ "description": operation.description.strip() or f"REST connector tool {operation.name}",
69
+ "is_local": False,
70
+ "provider": provider,
71
+ "scopes": list(auth.scopes or []) if auth is not None and provider else [],
72
+ "network": self.network,
73
+ "timeout_seconds": DEFAULT_EXECUTION_TIMEOUT_SECONDS,
74
+ "redact_fields": [],
75
+ "connector": self.connector.name,
76
+ }
77
+
78
+
79
+ @dataclass(frozen=True)
80
+ class ConnectorBundle:
81
+ """Fully validated runtime bundle shared by AER and Tool Pod startup."""
82
+
83
+ connectors: tuple[BundledConnector, ...] = ()
84
+ tools: tuple[BundledTool, ...] = ()
85
+
86
+ def require_available_names(self, registered_names: set[str]) -> None:
87
+ """Reject all name collisions before a caller mutates its registry."""
88
+ collisions = sorted({tool.operation.name for tool in self.tools} & registered_names)
89
+ if collisions:
90
+ raise ConnectorBundleError(
91
+ "connector tool names collide with registered or reserved tools: "
92
+ + ", ".join(collisions)
93
+ )