agent-engine-runner-shared 0.11.8__tar.gz → 0.11.9__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.8 → agent_engine_runner_shared-0.11.9}/PKG-INFO +4 -4
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/docs/api.md +30 -5
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/pyproject.toml +4 -4
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/README.md +22 -1
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/bundle.py +5 -3
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/definitions.py +22 -5
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/executor.py +29 -5
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/authoring.py +3 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/security.py +1 -1
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/runtime.py +7 -1
- agent_engine_runner_shared-0.11.9/src/agent_engine_runner_shared/generated/workflow/v1/activity_pb2.py +61 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/activity_pb2.pyi +13 -2
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/state_pb2.py +4 -4
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/state_pb2.pyi +4 -2
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/mcp_tools.py +32 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/models.py +8 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/secure_llm_proxy.py +36 -6
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/secure_wrapper.py +8 -1
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/aer.py +584 -230
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/callback_delivery.py +18 -3
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/drain.py +20 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/__init__.py +8 -0
- agent_engine_runner_shared-0.11.9/src/agent_engine_runner_shared/workflow/cancelled_history.py +268 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/client.py +33 -4
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/settlement.py +14 -1
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/connectors/test_bundle.py +19 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/connectors/test_core.py +84 -1
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/connectors/test_generate.py +25 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/connectors/test_materialize.py +12 -0
- agent_engine_runner_shared-0.11.9/tests/unit/test_aer_cancelled_turn.py +374 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_chunk_delivery_reliability.py +48 -1
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_durable_attempt.py +446 -20
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_session_finish.py +30 -9
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_drain.py +14 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_durable_guardrail_review.py +58 -2
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_mcp_tools.py +146 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_server_startup.py +90 -1
- agent_engine_runner_shared-0.11.9/tests/unit/workflow/test_cancelled_history.py +347 -0
- agent_engine_runner_shared-0.11.8/src/agent_engine_runner_shared/generated/workflow/v1/activity_pb2.py +0 -59
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/CHANGELOG.md +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/Dockerfile +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/LICENSE +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/Makefile +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/README.md +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/pydoc-markdown.yml +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/pyrightconfig.json +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/scripts/agentic-vendored-wheel-check.sh +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/__main__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/a2a.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/a2a_auth.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/agent_config.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/async_utils.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/checkpoint_workspace.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/create_tool.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/README.md +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/catalog.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/modes.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/naming.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/parameters.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/generate/spec.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/connectors/materialize.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/custom_events.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/db_config.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/db_naming.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/error_reporting.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/execution.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/common_pb2.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/common_pb2.pyi +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/runtime_pb2.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/generated/workflow/v1/runtime_pb2.pyi +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/guardrails_evaluator/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/guardrails_evaluator/core.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/guardrails_evaluator/regex.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/hooks.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/http_path.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/launcher.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/mcp_oauth.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/mcp_oauth_cache_lock.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/mcp_oauth_cache_name.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/mcp_oauth_cli.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/mcp_oauth_secret.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/memory.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/memory_appbound.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/metrics.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/node_logger.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/owner_callback.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/progress.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/py.typed +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/runtime.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/auth.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/base.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/call_interrupt.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/chunk_types.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/cors.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/function.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/graph_warm.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/http_retry.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/metadata.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/oe_url.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/owner_url.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/query.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/server/tool.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/span_kinds.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/span_names.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/structured_logging.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/tls_client.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/tool_api_error.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/tool_memory_ownership.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/toolpod_handlers.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/tracing/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/tracing/exporters.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/tracing/setup.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/types.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/utils.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/activity.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/attempt.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/heartbeat.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/memory.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/src/agent_engine_runner_shared/workflow/protojson.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/conftest.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/corpus/.gitignore +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/corpus/README.md +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/corpus/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/corpus/fetch_corpus.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/corpus/manifest.json +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/corpus/test_api_corpus.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/integration/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/integration/mock_embedder.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/integration/test_a2a_trace_propagation.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/integration/test_runtime.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/integration/test_secure_async.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/integration/test_secure_sync.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/integration/test_tracing_otlp_wire_format.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/pact/conftest.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/pact/test_oe_provider_verification.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/connectors/__init__.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/connectors/fixtures/jira.tool_defs.yaml +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/connectors/test_create_tool.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_a2a.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_a2a_auth.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_a2a_registration.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_build_agent_span.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_capability_advertise.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_chunk_emission.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_llm_invocation_signal.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_metadata_payload.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_policy_denied.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_timeout_signal.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_trace_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_aer_workspace_scope.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_agent_config.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_async_utils.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_call_interrupt.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_call_interrupt_contract.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_checkpoint_workspace.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_cors.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_create_memory_client_headers.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_custom_headers_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_custom_headers_models.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_db_naming.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_debug_hook.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_drain_contract.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_durable_proxies.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_emit_custom_event.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_emit_progress.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_error_reporting.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_execution.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_extract_turn_messages.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_format_llm_error.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_function_mode.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_graph_warm.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_guardrails_protocol.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_hitl_interrupt.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_hooks.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_http_path.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_http_retry.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_launcher.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_listen_host.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_llm_credential_classification.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_llm_routing.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_mcp_oauth.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_mcp_oauth_cli.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_mcp_oauth_secret.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_memory_appbound.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_memory_search_metadata.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_memory_writer_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_metadata.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_metrics.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_models.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_no_lc_imports.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_node_logger.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_oe_url.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_owner_callback.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_owner_url.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_payload_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_query_routes.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_request_id_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_resume_payload.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_runtime_build_context_from_sources.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_runtime_checkpoint_workspace.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_runtime_custom_memory.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_runtime_memory_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_runtime_models.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_runtime_register_tool.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_secure_llm_proxy.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_secure_wrapper.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_server_auth.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_server_health.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_server_shutdown.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_session_filesystem_isolation.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_session_finish_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_structured_logging.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_thinking_tokens.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tls_client.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tls_client_integration.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_token_capture.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_api_error.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_authorization.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_cancellation_boundary.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_deserialization.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_log_redaction.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_memory_ownership.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tool_trace_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_toolpod_handlers.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tracing_exporter.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/test_tracing_retry.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_activity.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_attempt.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_client.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_context.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_heartbeat.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_memory.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_protojson.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_protojson_helpers.py +0 -0
- {agent_engine_runner_shared-0.11.8 → agent_engine_runner_shared-0.11.9}/tests/unit/workflow/test_settlement.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agent-engine-runner-shared
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.9
|
|
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.9
|
|
9
|
+
Requires-Dist: agent-engine-sdk==0.11.9
|
|
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
|
|
@@ -20,7 +20,7 @@ Requires-Dist: python-dotenv>=1.0.0
|
|
|
20
20
|
Requires-Dist: pyyaml>=6.0
|
|
21
21
|
Requires-Dist: regex>=2026.4.4
|
|
22
22
|
Requires-Dist: sentry-sdk>=2.27.0
|
|
23
|
-
Requires-Dist: starlette>=1.
|
|
23
|
+
Requires-Dist: starlette>=1.7.0
|
|
24
24
|
Requires-Dist: uvicorn>=0.32.0
|
|
25
25
|
Provides-Extra: debug
|
|
26
26
|
Requires-Dist: debugpy>=1.8.0; extra == 'debug'
|
|
@@ -166,6 +166,7 @@
|
|
|
166
166
|
* [register\_guardrail\_policy\_engine](#agent_engine_runner_shared.guardrails_evaluator.core.register_guardrail_policy_engine)
|
|
167
167
|
* [evaluate\_guardrail\_check](#agent_engine_runner_shared.guardrails_evaluator.core.evaluate_guardrail_check)
|
|
168
168
|
* [agent\_engine\_runner\_shared.secure\_llm\_proxy](#agent_engine_runner_shared.secure_llm_proxy)
|
|
169
|
+
* [GuardrailReviewPending](#agent_engine_runner_shared.secure_llm_proxy.GuardrailReviewPending)
|
|
169
170
|
* [guardrail\_review\_wait\_id](#agent_engine_runner_shared.secure_llm_proxy.guardrail_review_wait_id)
|
|
170
171
|
* [SecureLLMProxy](#agent_engine_runner_shared.secure_llm_proxy.SecureLLMProxy)
|
|
171
172
|
* [step\_counter](#agent_engine_runner_shared.secure_llm_proxy.SecureLLMProxy.step_counter)
|
|
@@ -181,6 +182,7 @@
|
|
|
181
182
|
* [raise\_for\_oe\_rejection](#agent_engine_runner_shared.secure_wrapper.raise_for_oe_rejection)
|
|
182
183
|
* [ToolCallTimeoutError](#agent_engine_runner_shared.secure_wrapper.ToolCallTimeoutError)
|
|
183
184
|
* [OperationalStepAllocator](#agent_engine_runner_shared.secure_wrapper.OperationalStepAllocator)
|
|
185
|
+
* [allocation\_count](#agent_engine_runner_shared.secure_wrapper.OperationalStepAllocator.allocation_count)
|
|
184
186
|
* [ExternalAPICallError](#agent_engine_runner_shared.secure_wrapper.ExternalAPICallError)
|
|
185
187
|
* [LLMInvocationError](#agent_engine_runner_shared.secure_wrapper.LLMInvocationError)
|
|
186
188
|
* [request\_oe\_approval](#agent_engine_runner_shared.secure_wrapper.request_oe_approval)
|
|
@@ -2623,6 +2625,16 @@ The proxy packages intercepted invoke_llm requests for the Orchestration Engine
|
|
|
2623
2625
|
and unwraps the streamed OE relay back into sdk-core models. The OE owns
|
|
2624
2626
|
approval, routing, live SSE relay, and final audit/result recording.
|
|
2625
2627
|
|
|
2628
|
+
<a id="agent_engine_runner_shared.secure_llm_proxy.GuardrailReviewPending"></a>
|
|
2629
|
+
|
|
2630
|
+
## GuardrailReviewPending
|
|
2631
|
+
|
|
2632
|
+
```python
|
|
2633
|
+
class GuardrailReviewPending(Exception)
|
|
2634
|
+
```
|
|
2635
|
+
|
|
2636
|
+
A recorded halt whose adapter emits its native wait after the LLM call.
|
|
2637
|
+
|
|
2626
2638
|
<a id="agent_engine_runner_shared.secure_llm_proxy.guardrail_review_wait_id"></a>
|
|
2627
2639
|
|
|
2628
2640
|
#### guardrail\_review\_wait\_id
|
|
@@ -2691,11 +2703,14 @@ Collect streamed sdk-core chunks into a final sdk-core LLMResponse.
|
|
|
2691
2703
|
#### stream
|
|
2692
2704
|
|
|
2693
2705
|
```python
|
|
2694
|
-
def stream(
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2706
|
+
def stream(
|
|
2707
|
+
messages: list[Message],
|
|
2708
|
+
step: int | None = None,
|
|
2709
|
+
stop: list[str] | None = None,
|
|
2710
|
+
options: LLMInvocationOptions | None = None,
|
|
2711
|
+
activity_key: str | None = None,
|
|
2712
|
+
pending_review: GuardrailReviewPending | None = None
|
|
2713
|
+
) -> Iterator[LLMStreamChunk]
|
|
2699
2714
|
```
|
|
2700
2715
|
|
|
2701
2716
|
Stream invoke_llm chunks through OE approval and OE-owned SSE relay.
|
|
@@ -2818,6 +2833,16 @@ Process-local operational step_number mint for one AER execution.
|
|
|
2818
2833
|
Shared by SecureToolWrapper and SecureLLMProxy so parallel tools and LLM
|
|
2819
2834
|
calls cannot collide under a single AER. Not a multi-OE authority.
|
|
2820
2835
|
|
|
2836
|
+
<a id="agent_engine_runner_shared.secure_wrapper.OperationalStepAllocator.allocation_count"></a>
|
|
2837
|
+
|
|
2838
|
+
#### allocation\_count
|
|
2839
|
+
|
|
2840
|
+
```python
|
|
2841
|
+
def allocation_count() -> int
|
|
2842
|
+
```
|
|
2843
|
+
|
|
2844
|
+
Count minted request slots independently of replayed step watermarks.
|
|
2845
|
+
|
|
2821
2846
|
<a id="agent_engine_runner_shared.secure_wrapper.ExternalAPICallError"></a>
|
|
2822
2847
|
|
|
2823
2848
|
## ExternalAPICallError
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agent-engine-runner-shared"
|
|
3
|
-
version = "0.11.
|
|
3
|
+
version = "0.11.9"
|
|
4
4
|
description = "Runner SDK - Framework-agnostic agent runtime"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "Apache-2.0"}
|
|
@@ -11,7 +11,7 @@ dependencies = [
|
|
|
11
11
|
# floor: older starlette rebuilds url.path from the Host header with no
|
|
12
12
|
# validation, which can disagree with scope["path"]. The
|
|
13
13
|
# Host-validating _HOST_RE landed in starlette 1.4.1.
|
|
14
|
-
"starlette>=1.
|
|
14
|
+
"starlette>=1.7.0",
|
|
15
15
|
"uvicorn>=0.32.0",
|
|
16
16
|
"pydantic>=2.0.0",
|
|
17
17
|
"protobuf>=6.33.6,<7",
|
|
@@ -23,9 +23,9 @@ dependencies = [
|
|
|
23
23
|
"jsonschema>=4.26.0",
|
|
24
24
|
"sentry-sdk>=2.27.0",
|
|
25
25
|
# BaseAgent protocol and AgentInput/AgentEvent models
|
|
26
|
-
"agent-engine-sdk==0.11.
|
|
26
|
+
"agent-engine-sdk==0.11.9",
|
|
27
27
|
# Memory models and the MemoryClient HTTP client
|
|
28
|
-
"agent-engine-sdk-memory==0.11.
|
|
28
|
+
"agent-engine-sdk-memory==0.11.9",
|
|
29
29
|
# Required for checkpoint message decoding (query/sessions endpoints)
|
|
30
30
|
"msgpack>=1.0.0",
|
|
31
31
|
# Required by guardrails_evaluator/regex.py for advanced regex matching
|
|
@@ -42,6 +42,25 @@ auth:
|
|
|
42
42
|
env: JIRA_TOKEN
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
For delegated OAuth, replace that auth block with an explicit provider binding:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
auth:
|
|
49
|
+
type: oauth
|
|
50
|
+
provider_type: github
|
|
51
|
+
scopes: [repo]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`provider_type` is the key of a provider configured for the project, independent
|
|
55
|
+
of the resource API's base URL. The scopes apply to every exposed operation in
|
|
56
|
+
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
|
|
59
|
+
stops the HTTP call; OAuth never falls back to a tenant environment secret.
|
|
60
|
+
Existing static auth modes continue to use their configured environment bindings.
|
|
61
|
+
Catalog regeneration preserves the authored OAuth binding and records only
|
|
62
|
+
secret-free Bearer presentation in the catalog.
|
|
63
|
+
|
|
45
64
|
The pre-materialized index paths are relative to the index and must remain inside its
|
|
46
65
|
directory. AER loads the schemas as ordinary remote tools. Tool Pod startup loads the
|
|
47
66
|
same materialized view and owns one `ConnectorExecutor` per connector.
|
|
@@ -52,7 +71,9 @@ same materialized view and owns one `ConnectorExecutor` per connector.
|
|
|
52
71
|
|
|
53
72
|
Own one `ConnectorExecutor(definitions)` per connector in a Tool Pod process. Call
|
|
54
73
|
`execute(tool_name, arguments, env=tenant_secrets)` after authorization; the environment
|
|
55
|
-
mapping is request-local and defaults to the tenant-owned process environment
|
|
74
|
+
mapping is request-local and defaults to the tenant-owned process environment for
|
|
75
|
+
static auth. OAuth additionally requires `authorization=ToolAuthorization(...)`;
|
|
76
|
+
the Tool Pod supplies it from request context and the executor never retains it. Close
|
|
56
77
|
the executor at shutdown after in-flight calls finish, or use it as a context manager.
|
|
57
78
|
|
|
58
79
|
The compiled format is the stable `source`, `auth`, `tools`, `params` and
|
|
@@ -95,14 +95,16 @@ class BundledTool:
|
|
|
95
95
|
|
|
96
96
|
@property
|
|
97
97
|
def registration_metadata(self) -> dict[str, Any]:
|
|
98
|
-
"""Return
|
|
98
|
+
"""Return detached AER/Tool Pod policy, with delegated binding outside the schema."""
|
|
99
99
|
operation = self.operation
|
|
100
|
+
auth = self.connector.definitions.auth
|
|
101
|
+
delegated = auth if auth is not None and auth.type == "oauth" else None
|
|
100
102
|
return {
|
|
101
103
|
"name": operation.name,
|
|
102
104
|
"description": operation.description.strip() or f"REST connector tool {operation.name}",
|
|
103
105
|
"is_local": False,
|
|
104
|
-
"provider_type": None,
|
|
105
|
-
"scopes": [],
|
|
106
|
+
"provider_type": delegated.provider_type if delegated else None,
|
|
107
|
+
"scopes": list(delegated.scopes) if delegated else [],
|
|
106
108
|
"network": self.network,
|
|
107
109
|
"timeout_seconds": DEFAULT_EXECUTION_TIMEOUT_SECONDS,
|
|
108
110
|
"redact_fields": [],
|
|
@@ -162,8 +162,14 @@ class Credential(_Model):
|
|
|
162
162
|
|
|
163
163
|
|
|
164
164
|
class Auth(_Model):
|
|
165
|
-
type: Literal["none", "bearer", "api_key", "basic", "api_keys"] = Field(
|
|
166
|
-
default="none", description="Static auth presentation"
|
|
165
|
+
type: Literal["none", "bearer", "api_key", "basic", "api_keys", "oauth"] = Field(
|
|
166
|
+
default="none", description="Static auth presentation or request-local delegated OAuth"
|
|
167
|
+
)
|
|
168
|
+
provider_type: str | None = Field(
|
|
169
|
+
default=None, description="Project-scoped Broker provider key"
|
|
170
|
+
)
|
|
171
|
+
scopes: list[str] = Field(
|
|
172
|
+
default_factory=list, description="Connector-wide delegated permissions"
|
|
167
173
|
)
|
|
168
174
|
env: str | None = Field(default=None, description="Tenant secret environment reference")
|
|
169
175
|
header: str | None = Field(default=None, description="API key header name")
|
|
@@ -189,12 +195,23 @@ class Auth(_Model):
|
|
|
189
195
|
"api_key": {"type", "env", "header", "location", "name", "prefix", "headers"},
|
|
190
196
|
"basic": {"type", "username_env", "password_env", "headers"},
|
|
191
197
|
"api_keys": {"type", "credentials", "headers"},
|
|
198
|
+
"oauth": {"type", "provider_type", "scopes", "headers"},
|
|
192
199
|
}[self.type]
|
|
193
200
|
if configured - allowed:
|
|
194
201
|
raise ValueError(f"{self.type} auth contains fields for another auth type")
|
|
195
202
|
|
|
196
203
|
credential_headers: set[str] = set()
|
|
197
|
-
if self.type == "
|
|
204
|
+
if self.type == "oauth":
|
|
205
|
+
if not self.provider_type or any(
|
|
206
|
+
ord(character) <= 32 or ord(character) >= 127 for character in self.provider_type
|
|
207
|
+
):
|
|
208
|
+
raise ValueError("OAuth auth requires an explicit provider key without whitespace")
|
|
209
|
+
if len(set(self.scopes)) != len(self.scopes) or any(
|
|
210
|
+
re.fullmatch(r"[!\x23-\x5B\x5D-\x7E]+", scope) is None for scope in self.scopes
|
|
211
|
+
):
|
|
212
|
+
raise ValueError("OAuth scopes must be unique OAuth scope tokens")
|
|
213
|
+
credential_headers.add("authorization")
|
|
214
|
+
elif self.type == "bearer":
|
|
198
215
|
if not _validate_secret_env(self.env):
|
|
199
216
|
raise ValueError("bearer auth requires one tenant secret env")
|
|
200
217
|
credential_headers.add("authorization")
|
|
@@ -235,7 +252,7 @@ class Auth(_Model):
|
|
|
235
252
|
|
|
236
253
|
def header_name(self) -> str | None:
|
|
237
254
|
"""Return the single generated auth header, when this auth shape has one."""
|
|
238
|
-
if self.type
|
|
255
|
+
if self.type in ("bearer", "oauth"):
|
|
239
256
|
return "Authorization"
|
|
240
257
|
if self.type == "api_key":
|
|
241
258
|
if (self.location or "header") == "header":
|
|
@@ -244,7 +261,7 @@ class Auth(_Model):
|
|
|
244
261
|
|
|
245
262
|
def header_names(self) -> set[str]:
|
|
246
263
|
"""List auth-controlled headers so model parameters cannot collide with them."""
|
|
247
|
-
if self.type in ("bearer", "basic"):
|
|
264
|
+
if self.type in ("bearer", "basic", "oauth"):
|
|
248
265
|
names = {"authorization"}
|
|
249
266
|
elif self.type == "api_key" and (header_name := self.header_name()):
|
|
250
267
|
names = {header_name.lower()}
|
|
@@ -27,6 +27,7 @@ from agent_engine_runner_shared.connectors.definitions import (
|
|
|
27
27
|
validate_segment,
|
|
28
28
|
validate_url,
|
|
29
29
|
)
|
|
30
|
+
from agent_engine_runner_shared.models import ToolAuthorization
|
|
30
31
|
from agent_engine_runner_shared.utils import tenant_env_vars
|
|
31
32
|
|
|
32
33
|
__all__ = ["DEFAULT_EXECUTION_TIMEOUT_SECONDS", "ConnectorExecutor"]
|
|
@@ -101,7 +102,11 @@ class ConnectorExecutor:
|
|
|
101
102
|
self._transport.close()
|
|
102
103
|
|
|
103
104
|
def _prepare_request(
|
|
104
|
-
self,
|
|
105
|
+
self,
|
|
106
|
+
tool: Operation,
|
|
107
|
+
arguments: dict[str, Any],
|
|
108
|
+
env: Mapping[str, str] | None,
|
|
109
|
+
authorization: ToolAuthorization | None,
|
|
105
110
|
) -> tuple[
|
|
106
111
|
httpx.URL,
|
|
107
112
|
dict[str, str],
|
|
@@ -178,7 +183,7 @@ class ConnectorExecutor:
|
|
|
178
183
|
]
|
|
179
184
|
if pairs:
|
|
180
185
|
headers["Cookie"] = "; ".join(pairs)
|
|
181
|
-
base_url, auth_query, has_path_auth = self._apply_auth(headers, query, env)
|
|
186
|
+
base_url, auth_query, has_path_auth = self._apply_auth(headers, query, env, authorization)
|
|
182
187
|
content, content_type = self._request_body(tool, arguments)
|
|
183
188
|
if content_type:
|
|
184
189
|
headers["Content-Type"] = content_type
|
|
@@ -200,8 +205,9 @@ class ConnectorExecutor:
|
|
|
200
205
|
headers: dict[str, str],
|
|
201
206
|
query: list[tuple[str, Any]],
|
|
202
207
|
env: Mapping[str, str] | None,
|
|
208
|
+
authorization: ToolAuthorization | None,
|
|
203
209
|
) -> tuple[str, list[tuple[str, str]], bool]:
|
|
204
|
-
"""
|
|
210
|
+
"""Attach explicit delegated authorization or the configured static credentials.
|
|
205
211
|
|
|
206
212
|
Query credentials are returned so same-origin redirects can preserve them.
|
|
207
213
|
Path-authenticated requests reject redirects because moving the credential
|
|
@@ -212,6 +218,18 @@ class ConnectorExecutor:
|
|
|
212
218
|
if not auth or auth.type == "none":
|
|
213
219
|
return base_url, [], False
|
|
214
220
|
|
|
221
|
+
if auth.type == "oauth":
|
|
222
|
+
# Delegated calls must never fall back to a process/tenant secret;
|
|
223
|
+
# the existing OE gate binds this authorization to the saved user.
|
|
224
|
+
token = authorization.token if authorization else None
|
|
225
|
+
if not token or any(
|
|
226
|
+
ord(character) <= 32 or ord(character) >= 127 for character in token
|
|
227
|
+
):
|
|
228
|
+
raise ValueError("delegated connector token is missing or invalid")
|
|
229
|
+
headers["Authorization"] = f"Bearer {token}"
|
|
230
|
+
headers.update(auth.headers or {})
|
|
231
|
+
return base_url, [], False
|
|
232
|
+
|
|
215
233
|
secrets = env if env is not None else tenant_env_vars()
|
|
216
234
|
auth_query: list[tuple[str, str]] = []
|
|
217
235
|
has_path_auth = False
|
|
@@ -304,13 +322,19 @@ class ConnectorExecutor:
|
|
|
304
322
|
return None, None
|
|
305
323
|
|
|
306
324
|
def execute(
|
|
307
|
-
self,
|
|
325
|
+
self,
|
|
326
|
+
name: str,
|
|
327
|
+
arguments: dict[str, Any],
|
|
328
|
+
*,
|
|
329
|
+
env: Mapping[str, str] | None = None,
|
|
330
|
+
authorization: ToolAuthorization | None = None,
|
|
308
331
|
) -> str:
|
|
309
332
|
"""Execute a named compiled operation and return bounded UTF-8 response text.
|
|
310
333
|
|
|
311
334
|
Invalid definitions/arguments/secrets raise ValueError before dispatch.
|
|
312
335
|
HTTP and transport failures use httpx exceptions understood by ToolAPIError.
|
|
313
336
|
Only GET/HEAD/OPTIONS retry 429/503; writes are never automatically replayed.
|
|
337
|
+
OAuth requires explicit request-local authorization; static modes ignore it.
|
|
314
338
|
"""
|
|
315
339
|
deadline = time.monotonic() + self._timeout_seconds
|
|
316
340
|
tool = self._operations.get(name)
|
|
@@ -318,7 +342,7 @@ class ConnectorExecutor:
|
|
|
318
342
|
raise ValueError("unknown connector tool")
|
|
319
343
|
try:
|
|
320
344
|
url, headers, content, auth_query, has_path_auth = self._prepare_request(
|
|
321
|
-
tool, arguments, env
|
|
345
|
+
tool, arguments, env, authorization
|
|
322
346
|
)
|
|
323
347
|
except RecursionError:
|
|
324
348
|
# Pathological nesting exhausts the interpreter stack in the
|
|
@@ -135,6 +135,9 @@ def _guidance_comment(base_url: str, auth: Auth | None) -> str:
|
|
|
135
135
|
granted = ", ".join(_quote(env) for env in envs)
|
|
136
136
|
lines.append(f"# secret grant {granted} to the tool sandbox under")
|
|
137
137
|
lines.append("# sandboxes.tool.secrets (sandboxes requires an agent block)")
|
|
138
|
+
elif auth is not None and auth.type == "oauth":
|
|
139
|
+
lines.append("# auth delegated OAuth; configure the named provider for this project")
|
|
140
|
+
lines.append("# secret none required in the tool sandbox; tokens are request-local")
|
|
138
141
|
else:
|
|
139
142
|
lines.append("# secret none required; this connector authenticates anonymously")
|
|
140
143
|
return "\n".join(lines) + "\n"
|
|
@@ -118,7 +118,7 @@ def _catalog_override(auth: Auth | None) -> dict[str, Any] | None:
|
|
|
118
118
|
return None
|
|
119
119
|
if auth.type == "none":
|
|
120
120
|
return {}
|
|
121
|
-
if auth.type
|
|
121
|
+
if auth.type in ("bearer", "oauth"):
|
|
122
122
|
return {"type": "bearer", **({"headers": auth.headers} if auth.headers else {})}
|
|
123
123
|
if auth.type == "basic":
|
|
124
124
|
return {"type": "basic", **({"headers": auth.headers} if auth.headers else {})}
|
|
@@ -9,6 +9,7 @@ from typing import Any, Callable, Iterator, Mapping
|
|
|
9
9
|
|
|
10
10
|
from agent_engine_runner_shared.connectors.bundle import BundledTool, ConnectorBundle
|
|
11
11
|
from agent_engine_runner_shared.connectors.executor import ConnectorExecutor
|
|
12
|
+
from agent_engine_runner_shared.context import get_current_authorization
|
|
12
13
|
|
|
13
14
|
__all__ = ["ConnectorToolRegistration", "ConnectorToolRuntime"]
|
|
14
15
|
|
|
@@ -68,11 +69,16 @@ class ConnectorToolRuntime:
|
|
|
68
69
|
|
|
69
70
|
@staticmethod
|
|
70
71
|
def _make_callable(executor: ConnectorExecutor, tool_name: str) -> Callable[..., str]:
|
|
72
|
+
"""Bind a tool name; capture credentials only when its invocation runs."""
|
|
73
|
+
|
|
71
74
|
def execute(**arguments: Any) -> str:
|
|
75
|
+
"""Execute with this worker's captured environment and delegated authorization."""
|
|
72
76
|
env = _current_connector_env.get()
|
|
73
77
|
if env is None:
|
|
74
78
|
raise RuntimeError("connector invocation environment is unavailable")
|
|
75
|
-
return executor.execute(
|
|
79
|
+
return executor.execute(
|
|
80
|
+
tool_name, arguments, env=env, authorization=get_current_authorization()
|
|
81
|
+
)
|
|
76
82
|
|
|
77
83
|
execute.__name__ = tool_name
|
|
78
84
|
return execute
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: workflow/v1/activity.proto
|
|
5
|
+
# Protobuf Python Version: 6.33.5
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
6,
|
|
15
|
+
33,
|
|
16
|
+
5,
|
|
17
|
+
'',
|
|
18
|
+
'workflow/v1/activity.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
|
|
26
|
+
from agent_engine_runner_shared.generated.workflow.v1 import common_pb2 as workflow_dot_v1_dot_common__pb2
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aworkflow/v1/activity.proto\x12\x1bmongodb.agentic.workflow.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x18workflow/v1/common.proto\"\x91\x04\n\x0f\x41\x63tivityCommand\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1d\n\nattempt_id\x18\x02 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x03 \x01(\x03R\x0c\x66\x65ncingToken\x12I\n\x08position\x18\x04 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.ActivityPositionR\x08position\x12N\n\ractivity_kind\x18\x05 \x01(\x0e\x32).mongodb.agentic.workflow.v1.ActivityKindR\x0c\x61\x63tivityKind\x12#\n\ractivity_name\x18\x06 \x01(\tR\x0c\x61\x63tivityName\x12=\n\x0esemantic_input\x18\x07 \x01(\x0b\x32\x16.google.protobuf.ValueR\rsemanticInput\x12_\n\x12on_unknown_outcome\x18\x08 \x01(\x0e\x32\x31.mongodb.agentic.workflow.v1.UnknownOutcomePolicyR\x10onUnknownOutcome\"\xd2\x01\n\x0f\x41\x63tivityContext\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1f\n\x0b\x61\x63tivity_id\x18\x02 \x01(\tR\nactivityId\x12\x1d\n\nattempt_id\x18\x03 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x04 \x01(\x03R\x0c\x66\x65ncingToken\"_\n\x12\x41\x63tivitySuspension\x12\x16\n\x06reason\x18\x01 \x01(\tR\x06reason\x12\x31\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x07\x63ontext\"@\n\x0bMemoryWrite\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12!\n\x0cpayload_json\x18\x02 \x01(\x0cR\x0bpayloadJson\"\xf0\x03\n\x0f\x41\x63tivityOutcome\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1f\n\x0b\x61\x63tivity_id\x18\x02 \x01(\tR\nactivityId\x12\x1d\n\nattempt_id\x18\x03 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x04 \x01(\x03R\x0c\x66\x65ncingToken\x12S\n\x0coutcome_kind\x18\x05 \x01(\x0e\x32\x30.mongodb.agentic.workflow.v1.ActivityOutcomeKindR\x0boutcomeKind\x12.\n\x06result\x18\x06 \x01(\x0b\x32\x16.google.protobuf.ValueR\x06result\x12@\n\x05\x65rror\x18\x07 \x01(\x0b\x32*.mongodb.agentic.workflow.v1.WorkflowErrorR\x05\x65rror\x12O\n\nsuspension\x18\x08 \x01(\x0b\x32/.mongodb.agentic.workflow.v1.ActivitySuspensionR\nsuspensionJ\x04\x08\t\x10\n\"\xa7\x02\n\x15\x41\x63tivityMemoryCommand\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1f\n\x0b\x61\x63tivity_id\x18\x02 \x01(\tR\nactivityId\x12\x1d\n\nattempt_id\x18\x03 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x04 \x01(\x03R\x0c\x66\x65ncingToken\x12M\n\rmemory_writes\x18\x05 \x03(\x0b\x32(.mongodb.agentic.workflow.v1.MemoryWriteR\x0cmemoryWrites\"\xe5\x02\n\x13StepSuspensionEntry\x12I\n\x08position\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.ActivityPositionR\x08position\x12N\n\ractivity_kind\x18\x02 \x01(\x0e\x32).mongodb.agentic.workflow.v1.ActivityKindR\x0c\x61\x63tivityKind\x12#\n\ractivity_name\x18\x03 \x01(\tR\x0c\x61\x63tivityName\x12=\n\x0esemantic_input\x18\x04 \x01(\x0b\x32\x16.google.protobuf.ValueR\rsemanticInput\x12O\n\nsuspension\x18\x05 \x01(\x0b\x32/.mongodb.agentic.workflow.v1.ActivitySuspensionR\nsuspension\"\xa6\x01\n\x11StepActivityEntry\x12I\n\x08position\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.ActivityPositionR\x08position\x12\x46\n\x07outcome\x18\x02 \x01(\x0b\x32,.mongodb.agentic.workflow.v1.ActivityOutcomeR\x07outcome\"\xf6\x01\n\x18\x41\x63tivityHeartbeatRequest\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1f\n\x0b\x61\x63tivity_id\x18\x02 \x01(\tR\nactivityId\x12\x1d\n\nattempt_id\x18\x03 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x04 \x01(\x03R\x0c\x66\x65ncingToken\x12\x19\n\x08owner_id\x18\x05 \x01(\tR\x07ownerId*v\n\x0c\x41\x63tivityKind\x12\x1d\n\x19\x41\x43TIVITY_KIND_UNSPECIFIED\x10\x00\x12\x15\n\x11\x41\x43TIVITY_KIND_LLM\x10\x01\x12\x16\n\x12\x41\x43TIVITY_KIND_TOOL\x10\x02\x12\x18\n\x14\x41\x43TIVITY_KIND_MEMORY\x10\x03*\xca\x01\n\x13\x41\x63tivityOutcomeKind\x12%\n!ACTIVITY_OUTCOME_KIND_UNSPECIFIED\x10\x00\x12#\n\x1f\x41\x43TIVITY_OUTCOME_KIND_COMPLETED\x10\x01\x12 \n\x1c\x41\x43TIVITY_OUTCOME_KIND_FAILED\x10\x02\x12 \n\x1c\x41\x43TIVITY_OUTCOME_KIND_DENIED\x10\x03\x12#\n\x1f\x41\x43TIVITY_OUTCOME_KIND_SUSPENDED\x10\x04*\x81\x01\n\x14UnknownOutcomePolicy\x12&\n\"UNKNOWN_OUTCOME_POLICY_UNSPECIFIED\x10\x00\x12\x1f\n\x1bUNKNOWN_OUTCOME_POLICY_FAIL\x10\x01\x12 \n\x1cUNKNOWN_OUTCOME_POLICY_RERUN\x10\x02\x42@Z>github.com/10gen/agentic-platform/proto/workflow/v1;workflowv1b\x06proto3')
|
|
30
|
+
|
|
31
|
+
_globals = globals()
|
|
32
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
33
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'workflow.v1.activity_pb2', _globals)
|
|
34
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
35
|
+
_globals['DESCRIPTOR']._loaded_options = None
|
|
36
|
+
_globals['DESCRIPTOR']._serialized_options = b'Z>github.com/10gen/agentic-platform/proto/workflow/v1;workflowv1'
|
|
37
|
+
_globals['_ACTIVITYKIND']._serialized_start=2598
|
|
38
|
+
_globals['_ACTIVITYKIND']._serialized_end=2716
|
|
39
|
+
_globals['_ACTIVITYOUTCOMEKIND']._serialized_start=2719
|
|
40
|
+
_globals['_ACTIVITYOUTCOMEKIND']._serialized_end=2921
|
|
41
|
+
_globals['_UNKNOWNOUTCOMEPOLICY']._serialized_start=2924
|
|
42
|
+
_globals['_UNKNOWNOUTCOMEPOLICY']._serialized_end=3053
|
|
43
|
+
_globals['_ACTIVITYCOMMAND']._serialized_start=116
|
|
44
|
+
_globals['_ACTIVITYCOMMAND']._serialized_end=645
|
|
45
|
+
_globals['_ACTIVITYCONTEXT']._serialized_start=648
|
|
46
|
+
_globals['_ACTIVITYCONTEXT']._serialized_end=858
|
|
47
|
+
_globals['_ACTIVITYSUSPENSION']._serialized_start=860
|
|
48
|
+
_globals['_ACTIVITYSUSPENSION']._serialized_end=955
|
|
49
|
+
_globals['_MEMORYWRITE']._serialized_start=957
|
|
50
|
+
_globals['_MEMORYWRITE']._serialized_end=1021
|
|
51
|
+
_globals['_ACTIVITYOUTCOME']._serialized_start=1024
|
|
52
|
+
_globals['_ACTIVITYOUTCOME']._serialized_end=1520
|
|
53
|
+
_globals['_ACTIVITYMEMORYCOMMAND']._serialized_start=1523
|
|
54
|
+
_globals['_ACTIVITYMEMORYCOMMAND']._serialized_end=1818
|
|
55
|
+
_globals['_STEPSUSPENSIONENTRY']._serialized_start=1821
|
|
56
|
+
_globals['_STEPSUSPENSIONENTRY']._serialized_end=2178
|
|
57
|
+
_globals['_STEPACTIVITYENTRY']._serialized_start=2181
|
|
58
|
+
_globals['_STEPACTIVITYENTRY']._serialized_end=2347
|
|
59
|
+
_globals['_ACTIVITYHEARTBEATREQUEST']._serialized_start=2350
|
|
60
|
+
_globals['_ACTIVITYHEARTBEATREQUEST']._serialized_end=2596
|
|
61
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -23,6 +23,12 @@ class ActivityOutcomeKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
|
23
23
|
ACTIVITY_OUTCOME_KIND_FAILED: _ClassVar[ActivityOutcomeKind]
|
|
24
24
|
ACTIVITY_OUTCOME_KIND_DENIED: _ClassVar[ActivityOutcomeKind]
|
|
25
25
|
ACTIVITY_OUTCOME_KIND_SUSPENDED: _ClassVar[ActivityOutcomeKind]
|
|
26
|
+
|
|
27
|
+
class UnknownOutcomePolicy(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
28
|
+
__slots__ = ()
|
|
29
|
+
UNKNOWN_OUTCOME_POLICY_UNSPECIFIED: _ClassVar[UnknownOutcomePolicy]
|
|
30
|
+
UNKNOWN_OUTCOME_POLICY_FAIL: _ClassVar[UnknownOutcomePolicy]
|
|
31
|
+
UNKNOWN_OUTCOME_POLICY_RERUN: _ClassVar[UnknownOutcomePolicy]
|
|
26
32
|
ACTIVITY_KIND_UNSPECIFIED: ActivityKind
|
|
27
33
|
ACTIVITY_KIND_LLM: ActivityKind
|
|
28
34
|
ACTIVITY_KIND_TOOL: ActivityKind
|
|
@@ -32,9 +38,12 @@ ACTIVITY_OUTCOME_KIND_COMPLETED: ActivityOutcomeKind
|
|
|
32
38
|
ACTIVITY_OUTCOME_KIND_FAILED: ActivityOutcomeKind
|
|
33
39
|
ACTIVITY_OUTCOME_KIND_DENIED: ActivityOutcomeKind
|
|
34
40
|
ACTIVITY_OUTCOME_KIND_SUSPENDED: ActivityOutcomeKind
|
|
41
|
+
UNKNOWN_OUTCOME_POLICY_UNSPECIFIED: UnknownOutcomePolicy
|
|
42
|
+
UNKNOWN_OUTCOME_POLICY_FAIL: UnknownOutcomePolicy
|
|
43
|
+
UNKNOWN_OUTCOME_POLICY_RERUN: UnknownOutcomePolicy
|
|
35
44
|
|
|
36
45
|
class ActivityCommand(_message.Message):
|
|
37
|
-
__slots__ = ("workflow_identity", "attempt_id", "fencing_token", "position", "activity_kind", "activity_name", "semantic_input")
|
|
46
|
+
__slots__ = ("workflow_identity", "attempt_id", "fencing_token", "position", "activity_kind", "activity_name", "semantic_input", "on_unknown_outcome")
|
|
38
47
|
WORKFLOW_IDENTITY_FIELD_NUMBER: _ClassVar[int]
|
|
39
48
|
ATTEMPT_ID_FIELD_NUMBER: _ClassVar[int]
|
|
40
49
|
FENCING_TOKEN_FIELD_NUMBER: _ClassVar[int]
|
|
@@ -42,6 +51,7 @@ class ActivityCommand(_message.Message):
|
|
|
42
51
|
ACTIVITY_KIND_FIELD_NUMBER: _ClassVar[int]
|
|
43
52
|
ACTIVITY_NAME_FIELD_NUMBER: _ClassVar[int]
|
|
44
53
|
SEMANTIC_INPUT_FIELD_NUMBER: _ClassVar[int]
|
|
54
|
+
ON_UNKNOWN_OUTCOME_FIELD_NUMBER: _ClassVar[int]
|
|
45
55
|
workflow_identity: _common_pb2.WorkflowIdentity
|
|
46
56
|
attempt_id: str
|
|
47
57
|
fencing_token: int
|
|
@@ -49,7 +59,8 @@ class ActivityCommand(_message.Message):
|
|
|
49
59
|
activity_kind: ActivityKind
|
|
50
60
|
activity_name: str
|
|
51
61
|
semantic_input: _struct_pb2.Value
|
|
52
|
-
|
|
62
|
+
on_unknown_outcome: UnknownOutcomePolicy
|
|
63
|
+
def __init__(self, workflow_identity: _Optional[_Union[_common_pb2.WorkflowIdentity, _Mapping]] = ..., attempt_id: _Optional[str] = ..., fencing_token: _Optional[int] = ..., position: _Optional[_Union[_common_pb2.ActivityPosition, _Mapping]] = ..., activity_kind: _Optional[_Union[ActivityKind, str]] = ..., activity_name: _Optional[str] = ..., semantic_input: _Optional[_Union[_struct_pb2.Value, _Mapping]] = ..., on_unknown_outcome: _Optional[_Union[UnknownOutcomePolicy, str]] = ...) -> None: ...
|
|
53
64
|
|
|
54
65
|
class ActivityContext(_message.Message):
|
|
55
66
|
__slots__ = ("workflow_identity", "activity_id", "attempt_id", "fencing_token")
|
|
@@ -27,7 +27,7 @@ from agent_engine_runner_shared.generated.workflow.v1 import activity_pb2 as wor
|
|
|
27
27
|
from agent_engine_runner_shared.generated.workflow.v1 import common_pb2 as workflow_dot_v1_dot_common__pb2
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17workflow/v1/state.proto\x12\x1bmongodb.agentic.workflow.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1aworkflow/v1/activity.proto\x1a\x18workflow/v1/common.proto\"\xbe\x06\n\x0fWorkflowMessage\x12<\n\x04role\x18\x01 \x01(\x0e\x32(.mongodb.agentic.workflow.v1.MessageRoleR\x04role\x12\x30\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x07\x63ontent\x12\x36\n\ntool_calls\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructR\ttoolCalls\x12%\n\x0ctool_call_id\x18\x04 \x01(\tH\x00R\ntoolCallId\x88\x01\x01\x12\x17\n\x04name\x18\x05 \x01(\tH\x01R\x04name\x88\x01\x01\x12\x13\n\x02id\x18\x06 \x01(\tH\x02R\x02id\x88\x01\x01\x12\x41\n\x0esource_message\x18\t \x01(\x0b\x32\x16.google.protobuf.ValueB\x02\x18\x01R\rsourceMessage\x12\x39\n\tartifacts\x18\n \x03(\x0b\x32\x17.google.protobuf.StructB\x02\x18\x01R\tartifacts\x12\x44\n\x11\x61\x64\x64itional_kwargs\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructR\x10\x61\x64\x64itionalKwargs\x12\x44\n\x11response_metadata\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructR\x10responseMetadata\x12\x1e\n\x08is_error\x18\r \x01(\x08H\x03R\x07isError\x88\x01\x01\x12;\n\rtool_artifact\x18\x0e \x01(\x0b\x32\x16.google.protobuf.ValueR\x0ctoolArtifact\x12\x46\n\x12platform_artifacts\x18\x0f \x03(\x0b\x32\x17.google.protobuf.StructR\x11platformArtifacts\x12\x45\n\x12invalid_tool_calls\x18\x10 \x03(\x0b\x32\x17.google.protobuf.StructR\x10invalidToolCallsB\x0f\n\r_tool_call_idB\x07\n\x05_nameB\x05\n\x03_idB\x0b\n\t_is_errorJ\x04\x08\x07\x10\x08J\x04\x08\x08\x10\t\"\x92\x02\n\rStateSnapshot\x12\x37\n\nproperties\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\nproperties\x12H\n\x08messages\x18\x02 \x03(\x0b\x32,.mongodb.agentic.workflow.v1.WorkflowMessageR\x08messages\x12\x38\n\x18message_encoding_version\x18\x03 \x01(\rR\x16messageEncodingVersion\x12\x44\n\x11replay_properties\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructR\x10replayProperties\"\xfc\x01\n\x18\x43ompleteExecutionCommand\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1d\n\nattempt_id\x18\x02 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x03 \x01(\x03R\x0c\x66\x65ncingToken\x12@\n\x05state\x18\x04 \x01(\x0b\x32*.mongodb.agentic.workflow.v1.StateSnapshotR\x05state\"\xdd\x03\n\x13\x46inalizeStepCommand\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1d\n\nattempt_id\x18\x02 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x03 \x01(\x03R\x0c\x66\x65ncingToken\x12@\n\x05state\x18\x04 \x01(\x0b\x32*.mongodb.agentic.workflow.v1.StateSnapshotR\x05state\x12!\n\x0cstep_ordinal\x18\x05 \x01(\x03R\x0bstepOrdinal\x12m\n\x1bobserved_activity_positions\x18\x06 \x03(\x0b\x32-.mongodb.agentic.workflow.v1.ActivityPositionR\x19observedActivityPositions\x12R\n\x0bsuspensions\x18\x07 \x03(\x0b\x32\x30.mongodb.agentic.workflow.v1.StepSuspensionEntryR\x0bsuspensions\"\
|
|
30
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17workflow/v1/state.proto\x12\x1bmongodb.agentic.workflow.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1aworkflow/v1/activity.proto\x1a\x18workflow/v1/common.proto\"\xbe\x06\n\x0fWorkflowMessage\x12<\n\x04role\x18\x01 \x01(\x0e\x32(.mongodb.agentic.workflow.v1.MessageRoleR\x04role\x12\x30\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x16.google.protobuf.ValueR\x07\x63ontent\x12\x36\n\ntool_calls\x18\x03 \x03(\x0b\x32\x17.google.protobuf.StructR\ttoolCalls\x12%\n\x0ctool_call_id\x18\x04 \x01(\tH\x00R\ntoolCallId\x88\x01\x01\x12\x17\n\x04name\x18\x05 \x01(\tH\x01R\x04name\x88\x01\x01\x12\x13\n\x02id\x18\x06 \x01(\tH\x02R\x02id\x88\x01\x01\x12\x41\n\x0esource_message\x18\t \x01(\x0b\x32\x16.google.protobuf.ValueB\x02\x18\x01R\rsourceMessage\x12\x39\n\tartifacts\x18\n \x03(\x0b\x32\x17.google.protobuf.StructB\x02\x18\x01R\tartifacts\x12\x44\n\x11\x61\x64\x64itional_kwargs\x18\x0b \x01(\x0b\x32\x17.google.protobuf.StructR\x10\x61\x64\x64itionalKwargs\x12\x44\n\x11response_metadata\x18\x0c \x01(\x0b\x32\x17.google.protobuf.StructR\x10responseMetadata\x12\x1e\n\x08is_error\x18\r \x01(\x08H\x03R\x07isError\x88\x01\x01\x12;\n\rtool_artifact\x18\x0e \x01(\x0b\x32\x16.google.protobuf.ValueR\x0ctoolArtifact\x12\x46\n\x12platform_artifacts\x18\x0f \x03(\x0b\x32\x17.google.protobuf.StructR\x11platformArtifacts\x12\x45\n\x12invalid_tool_calls\x18\x10 \x03(\x0b\x32\x17.google.protobuf.StructR\x10invalidToolCallsB\x0f\n\r_tool_call_idB\x07\n\x05_nameB\x05\n\x03_idB\x0b\n\t_is_errorJ\x04\x08\x07\x10\x08J\x04\x08\x08\x10\t\"\x92\x02\n\rStateSnapshot\x12\x37\n\nproperties\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\nproperties\x12H\n\x08messages\x18\x02 \x03(\x0b\x32,.mongodb.agentic.workflow.v1.WorkflowMessageR\x08messages\x12\x38\n\x18message_encoding_version\x18\x03 \x01(\rR\x16messageEncodingVersion\x12\x44\n\x11replay_properties\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructR\x10replayProperties\"\xfc\x01\n\x18\x43ompleteExecutionCommand\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1d\n\nattempt_id\x18\x02 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x03 \x01(\x03R\x0c\x66\x65ncingToken\x12@\n\x05state\x18\x04 \x01(\x0b\x32*.mongodb.agentic.workflow.v1.StateSnapshotR\x05state\"\xdd\x03\n\x13\x46inalizeStepCommand\x12Z\n\x11workflow_identity\x18\x01 \x01(\x0b\x32-.mongodb.agentic.workflow.v1.WorkflowIdentityR\x10workflowIdentity\x12\x1d\n\nattempt_id\x18\x02 \x01(\tR\tattemptId\x12#\n\rfencing_token\x18\x03 \x01(\x03R\x0c\x66\x65ncingToken\x12@\n\x05state\x18\x04 \x01(\x0b\x32*.mongodb.agentic.workflow.v1.StateSnapshotR\x05state\x12!\n\x0cstep_ordinal\x18\x05 \x01(\x03R\x0bstepOrdinal\x12m\n\x1bobserved_activity_positions\x18\x06 \x03(\x0b\x32-.mongodb.agentic.workflow.v1.ActivityPositionR\x19observedActivityPositions\x12R\n\x0bsuspensions\x18\x07 \x03(\x0b\x32\x30.mongodb.agentic.workflow.v1.StepSuspensionEntryR\x0bsuspensions\"\xce\x01\n\x14\x46inalizeStepResponse\x12H\n\x07\x65ntries\x18\x01 \x03(\x0b\x32..mongodb.agentic.workflow.v1.StepActivityEntryR\x07\x65ntries\x12@\n\x05\x65rror\x18\x02 \x01(\x0b\x32*.mongodb.agentic.workflow.v1.WorkflowErrorR\x05\x65rror\x12*\n\x11source_state_hash\x18\x03 \x01(\tR\x0fsourceStateHash*\x8e\x01\n\x0bMessageRole\x12\x1c\n\x18MESSAGE_ROLE_UNSPECIFIED\x10\x00\x12\x15\n\x11MESSAGE_ROLE_USER\x10\x01\x12\x1a\n\x16MESSAGE_ROLE_ASSISTANT\x10\x02\x12\x15\n\x11MESSAGE_ROLE_TOOL\x10\x03\x12\x17\n\x13MESSAGE_ROLE_SYSTEM\x10\x04\x42@Z>github.com/10gen/agentic-platform/proto/workflow/v1;workflowv1b\x06proto3')
|
|
31
31
|
|
|
32
32
|
_globals = globals()
|
|
33
33
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -39,8 +39,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
39
39
|
_globals['_WORKFLOWMESSAGE'].fields_by_name['source_message']._serialized_options = b'\030\001'
|
|
40
40
|
_globals['_WORKFLOWMESSAGE'].fields_by_name['artifacts']._loaded_options = None
|
|
41
41
|
_globals['_WORKFLOWMESSAGE'].fields_by_name['artifacts']._serialized_options = b'\030\001'
|
|
42
|
-
_globals['_MESSAGEROLE']._serialized_start=
|
|
43
|
-
_globals['_MESSAGEROLE']._serialized_end=
|
|
42
|
+
_globals['_MESSAGEROLE']._serialized_start=2195
|
|
43
|
+
_globals['_MESSAGEROLE']._serialized_end=2337
|
|
44
44
|
_globals['_WORKFLOWMESSAGE']._serialized_start=141
|
|
45
45
|
_globals['_WORKFLOWMESSAGE']._serialized_end=971
|
|
46
46
|
_globals['_STATESNAPSHOT']._serialized_start=974
|
|
@@ -50,5 +50,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
50
50
|
_globals['_FINALIZESTEPCOMMAND']._serialized_start=1506
|
|
51
51
|
_globals['_FINALIZESTEPCOMMAND']._serialized_end=1983
|
|
52
52
|
_globals['_FINALIZESTEPRESPONSE']._serialized_start=1986
|
|
53
|
-
_globals['_FINALIZESTEPRESPONSE']._serialized_end=
|
|
53
|
+
_globals['_FINALIZESTEPRESPONSE']._serialized_end=2192
|
|
54
54
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -98,9 +98,11 @@ class FinalizeStepCommand(_message.Message):
|
|
|
98
98
|
def __init__(self, workflow_identity: _Optional[_Union[_common_pb2.WorkflowIdentity, _Mapping]] = ..., attempt_id: _Optional[str] = ..., fencing_token: _Optional[int] = ..., state: _Optional[_Union[StateSnapshot, _Mapping]] = ..., step_ordinal: _Optional[int] = ..., observed_activity_positions: _Optional[_Iterable[_Union[_common_pb2.ActivityPosition, _Mapping]]] = ..., suspensions: _Optional[_Iterable[_Union[_activity_pb2.StepSuspensionEntry, _Mapping]]] = ...) -> None: ...
|
|
99
99
|
|
|
100
100
|
class FinalizeStepResponse(_message.Message):
|
|
101
|
-
__slots__ = ("entries", "error")
|
|
101
|
+
__slots__ = ("entries", "error", "source_state_hash")
|
|
102
102
|
ENTRIES_FIELD_NUMBER: _ClassVar[int]
|
|
103
103
|
ERROR_FIELD_NUMBER: _ClassVar[int]
|
|
104
|
+
SOURCE_STATE_HASH_FIELD_NUMBER: _ClassVar[int]
|
|
104
105
|
entries: _containers.RepeatedCompositeFieldContainer[_activity_pb2.StepActivityEntry]
|
|
105
106
|
error: _common_pb2.WorkflowError
|
|
106
|
-
|
|
107
|
+
source_state_hash: str
|
|
108
|
+
def __init__(self, entries: _Optional[_Iterable[_Union[_activity_pb2.StepActivityEntry, _Mapping]]] = ..., error: _Optional[_Union[_common_pb2.WorkflowError, _Mapping]] = ..., source_state_hash: _Optional[str] = ...) -> None: ...
|
|
@@ -43,6 +43,7 @@ class MCPToolBinding:
|
|
|
43
43
|
description: str
|
|
44
44
|
input_schema: dict[str, Any]
|
|
45
45
|
server_config: RuntimeMCPServerConfig
|
|
46
|
+
annotations: dict[str, Any] | None = None
|
|
46
47
|
|
|
47
48
|
|
|
48
49
|
class MCPToolResult(BaseModel):
|
|
@@ -177,6 +178,7 @@ async def discover_mcp_tools_async(config: RuntimeMCPConfig) -> list[MCPToolBind
|
|
|
177
178
|
description=tool.description or "",
|
|
178
179
|
input_schema=dict(tool.inputSchema),
|
|
179
180
|
server_config=server_config,
|
|
181
|
+
annotations=normalize_mcp_tool_annotations(getattr(tool, "annotations", None)),
|
|
180
182
|
)
|
|
181
183
|
)
|
|
182
184
|
|
|
@@ -397,6 +399,35 @@ def _run_coroutine_sync(
|
|
|
397
399
|
raise active_loop_error
|
|
398
400
|
|
|
399
401
|
|
|
402
|
+
def normalize_mcp_tool_annotations(value: Any) -> dict[str, Any] | None:
|
|
403
|
+
"""Return a JSON-safe copy of MCP ``Tool.annotations``, or ``None``.
|
|
404
|
+
|
|
405
|
+
Missing or malformed values stay missing. The SDK must not apply MCP client
|
|
406
|
+
defaults (``readOnlyHint: false``, ``destructiveHint: true``, …); applications
|
|
407
|
+
fail closed when hints are absent. Pydantic models are dumped with
|
|
408
|
+
``exclude_unset=True`` so SDK field defaults are not invented as server hints.
|
|
409
|
+
"""
|
|
410
|
+
|
|
411
|
+
if value is None:
|
|
412
|
+
return None
|
|
413
|
+
dumped: Any = value
|
|
414
|
+
model_dump = getattr(value, "model_dump", None)
|
|
415
|
+
if callable(model_dump):
|
|
416
|
+
try:
|
|
417
|
+
dumped = model_dump(mode="json", exclude_unset=True)
|
|
418
|
+
except Exception:
|
|
419
|
+
return None
|
|
420
|
+
if not isinstance(dumped, dict):
|
|
421
|
+
return None
|
|
422
|
+
try:
|
|
423
|
+
parsed = json.loads(json.dumps(dumped, allow_nan=False))
|
|
424
|
+
except (TypeError, ValueError):
|
|
425
|
+
return None
|
|
426
|
+
if not isinstance(parsed, dict):
|
|
427
|
+
return None
|
|
428
|
+
return parsed
|
|
429
|
+
|
|
430
|
+
|
|
400
431
|
def _ensure_json_safe(field_name: str, value: Any) -> None:
|
|
401
432
|
try:
|
|
402
433
|
json.dumps(value)
|
|
@@ -467,6 +498,7 @@ __all__ = [
|
|
|
467
498
|
"make_mcp_tool_pod_callable",
|
|
468
499
|
"make_sync_mcp_tool_callable",
|
|
469
500
|
"mcp_server_network_hosts",
|
|
501
|
+
"normalize_mcp_tool_annotations",
|
|
470
502
|
"normalize_mcp_tool_result",
|
|
471
503
|
"resolve_mcp_auth",
|
|
472
504
|
"resolve_mcp_headers",
|
|
@@ -1325,6 +1325,14 @@ class LLMPodStreamEvent(BaseModel):
|
|
|
1325
1325
|
class ExecutorCallbackRequest(BaseModel):
|
|
1326
1326
|
"""Callback from AER to OE when execution completes or suspends."""
|
|
1327
1327
|
|
|
1328
|
+
attempt_id: Optional[str] = Field(
|
|
1329
|
+
default=None,
|
|
1330
|
+
min_length=1,
|
|
1331
|
+
description="Originating durable attempt returned by StartAttempt",
|
|
1332
|
+
)
|
|
1333
|
+
attempt_fence: Optional[int] = Field(
|
|
1334
|
+
default=None, ge=1, description="Fence returned with the originating durable attempt"
|
|
1335
|
+
)
|
|
1328
1336
|
execution_id: str = Field(..., description="Execution identifier")
|
|
1329
1337
|
status: str = Field(..., description="Status: COMPLETED, SUSPENDED, ERROR")
|
|
1330
1338
|
suspend_generation: Optional[int] = Field(
|