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.
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/CHANGELOG.md +31 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/Dockerfile +1 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/Makefile +12 -2
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/PKG-INFO +5 -4
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/docs/api.md +85 -29
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/pyproject.toml +6 -4
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/__init__.py +2 -0
- agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/__main__.py +12 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/agent_config.py +35 -8
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/README.md +21 -21
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/__init__.py +3 -5
- agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/connectors/bundle.py +93 -0
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/definitions.py +152 -109
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/executor.py +11 -12
- {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
- agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/connectors/generate/authoring.py +359 -0
- {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
- {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
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/materialize.py +7 -18
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/custom_events.py +16 -9
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/error_reporting.py +44 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_oauth.py +68 -45
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/mcp_tools.py +204 -79
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/memory_appbound.py +10 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/models.py +85 -5
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/progress.py +7 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/runtime.py +52 -10
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/secure_wrapper.py +115 -29
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/__init__.py +0 -2
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/aer.py +64 -15
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/base.py +1 -0
- {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
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/tool.py +112 -37
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/structured_logging.py +33 -4
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/toolpod_handlers.py +4 -2
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tracing/__init__.py +6 -0
- agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/tracing/conversation.py +155 -0
- agent_engine_runner_shared-0.11.12/src/agent_engine_runner_shared/tracing/exporters.py +863 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tracing/setup.py +113 -14
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/utils.py +1 -8
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/__init__.py +2 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/activity.py +3 -2
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/client.py +68 -24
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/context.py +74 -4
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/README.md +5 -3
- agent_engine_runner_shared-0.11.12/tests/corpus/fetch_corpus.py +78 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/manifest.json +102 -100
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/test_api_corpus.py +83 -40
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/pact/test_oe_provider_verification.py +9 -1
- agent_engine_runner_shared-0.11.12/tests/unit/connectors/fixtures/auth_cases.yaml +178 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/fixtures/jira.tool_defs.yaml +1 -2
- agent_engine_runner_shared-0.11.12/tests/unit/connectors/test_auth.py +112 -0
- agent_engine_runner_shared-0.11.12/tests/unit/connectors/test_bundle.py +99 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_core.py +29 -71
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_create_tool.py +218 -41
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_generate.py +537 -63
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/test_materialize.py +27 -100
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_a2a_registration.py +2 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_cancelled_turn.py +42 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_capability_advertise.py +2 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_chunk_delivery_reliability.py +13 -3
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_durable_attempt.py +72 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_llm_invocation_signal.py +3 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_metadata_payload.py +1 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_policy_denied.py +3 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_session_finish.py +62 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_timeout_signal.py +70 -8
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_trace_context.py +1 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_agent_config.py +83 -22
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_drain.py +2 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_durable_oauth.py +3 -3
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_durable_proxies.py +1 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_emit_custom_event.py +46 -10
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_emit_progress.py +65 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_error_reporting.py +81 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_graph_warm.py +1 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_hitl_interrupt.py +1 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_http_retry.py +2 -2
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_llm_routing.py +81 -0
- agent_engine_runner_shared-0.11.12/tests/unit/test_mcp_era_compat.py +352 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_oauth.py +89 -36
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_oauth_cli.py +93 -38
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_tools.py +197 -171
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_memory_appbound.py +18 -0
- agent_engine_runner_shared-0.11.12/tests/unit/test_platform_tracing_exporter.py +608 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_models.py +72 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_secure_wrapper.py +134 -3
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_health.py +47 -3
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_structured_logging.py +172 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tls_client_integration.py +3 -1
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool.py +155 -12
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_api_error.py +30 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_server_startup.py +81 -109
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_toolpod_handlers.py +6 -0
- agent_engine_runner_shared-0.11.12/tests/unit/test_trace_conversation.py +210 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tracing_exporter.py +3 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tracing_retry.py +46 -11
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_client.py +115 -2
- agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/__main__.py +0 -12
- agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/connectors/bundle.py +0 -194
- agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/connectors/generate/authoring.py +0 -202
- agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/server/function.py +0 -304
- agent_engine_runner_shared-0.11.10/src/agent_engine_runner_shared/tracing/exporters.py +0 -410
- agent_engine_runner_shared-0.11.10/tests/corpus/fetch_corpus.py +0 -52
- agent_engine_runner_shared-0.11.10/tests/unit/connectors/test_bundle.py +0 -174
- agent_engine_runner_shared-0.11.10/tests/unit/test_function_mode.py +0 -858
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/LICENSE +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/README.md +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/pydoc-markdown.yml +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/pyrightconfig.json +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/scripts/agentic-vendored-wheel-check.sh +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/a2a.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/a2a_auth.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/async_utils.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/caller_trace.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/checkpoint_workspace.py +0 -0
- {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
- {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
- {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
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/connectors/runtime.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/db_config.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/db_naming.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/execution.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/generated/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/hooks.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/http_path.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/launcher.py +0 -0
- {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
- {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
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/memory.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/metrics.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/node_logger.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/owner_callback.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/py.typed +0 -0
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/auth.py +0 -0
- {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
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/cors.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/drain.py +0 -0
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/metadata.py +0 -0
- {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
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/server/query.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/span_kinds.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/span_names.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/startup_state.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/tls_client.py +0 -0
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/types.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/attempt.py +0 -0
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/heartbeat.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/memory.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/protojson.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/src/agent_engine_runner_shared/workflow/settlement.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/conftest.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/.gitignore +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/corpus/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/mock_embedder.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_a2a_trace_propagation.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_runtime.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_secure_async.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_secure_sync.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/integration/test_tracing_otlp_wire_format.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/pact/conftest.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/connectors/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_a2a.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_a2a_auth.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_build_agent_span.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_chunk_emission.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_aer_workspace_scope.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_async_utils.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_atlas_dns.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_call_interrupt.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_call_interrupt_contract.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_checkpoint_workspace.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_cors.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_create_memory_client_headers.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_custom_headers_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_custom_headers_models.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_db_naming.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_debug_hook.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_drain_contract.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_durable_guardrail_review.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_execution.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_extract_turn_messages.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_format_llm_error.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_guardrails_protocol.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_hooks.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_http_path.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_launcher.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_launcher_reports.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_listen_host.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_llm_credential_classification.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_mcp_oauth_secret.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_memory_search_metadata.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_memory_writer_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_metadata.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_metrics.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_models.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_no_lc_imports.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_node_logger.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_oe_url.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_owner_callback.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_owner_url.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_payload_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_query_routes.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_request_id_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_resume_payload.py +0 -0
- {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
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_checkpoint_workspace.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_custom_memory.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_memory_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_runtime_register_tool.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_secure_llm_proxy.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_auth.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_shutdown.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_server_startup_failures.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_session_filesystem_isolation.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_session_finish_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_shared_client.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_thinking_tokens.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tls_client.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_token_capture.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_authorization.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_cancellation_boundary.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_deserialization.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_log_redaction.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_memory_ownership.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/test_tool_trace_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_activity.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_attempt.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_cancelled_history.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_context.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_heartbeat.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_memory.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_protojson.py +0 -0
- {agent_engine_runner_shared-0.11.10 → agent_engine_runner_shared-0.11.12}/tests/unit/workflow/test_protojson_helpers.py +0 -0
- {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-
|
|
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.
|
|
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.
|
|
9
|
-
Requires-Dist: agent-engine-sdk==0.11.
|
|
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==
|
|
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
|
|
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
|
|
2402
|
-
|
|
2403
|
-
|
|
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
|
|
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
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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==
|
|
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.
|
|
30
|
+
"agent-engine-sdk==0.11.12",
|
|
29
31
|
# Memory models and the MemoryClient HTTP client
|
|
30
|
-
"agent-engine-sdk-memory==0.11.
|
|
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(
|
|
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
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
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
|
-
#
|
|
456
|
-
# The shared Go parser rejects the key for
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
|
10
|
+
process derives its own view from the same manifest. Resolution in
|
|
9
11
|
`resolve_runtime_bundle`:
|
|
10
12
|
|
|
11
|
-
1.
|
|
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
|
-
|
|
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
|
-
|
|
42
|
-
env: JIRA_TOKEN
|
|
40
|
+
bearer: JIRA_TOKEN
|
|
43
41
|
```
|
|
44
42
|
|
|
45
|
-
|
|
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
|
-
|
|
50
|
-
provider_type: github
|
|
49
|
+
provider: github
|
|
51
50
|
scopes: [repo]
|
|
52
51
|
```
|
|
53
52
|
|
|
54
|
-
`
|
|
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
|
|
58
|
-
|
|
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
|
-
|
|
65
|
-
|
|
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
|
|
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
|
+
)
|