v0.36.0 - Jul 16, 2026
·
27 commits
to main
since this release
What's New
- Agent Memory multitenancy (
sap_cloud_sdk.agent_memory): per-tenant binding support — the runtime provisions one dedicated service instance per tenant and mounts it at/etc/secrets/appfnd/hana-agent-memory/<tenant-subdomain>/. EachAgentMemoryClientloads credentials from the correct binding at construction time.AccessStrategyenum with two values:SUBSCRIBER(default) andPROVIDER. Configured once atcreate_client()— not per individual method call.create_client(access_strategy=..., tenant=...)—SUBSCRIBERwithtenant="acme-corp"loads the subscriber binding;PROVIDERloads the default binding._load_config_for_instance(instance)inconfig.py— loads any named binding instance from/etc/secrets/appfnd/hana-agent-memory/<instance>/orCLOUD_SDK_CFG_HANA_AGENT_MEMORY_<INSTANCE>_*env vars.- Simplified
AgentMemoryClient: single_transportfield; strategy and tenant validated at construction; no per-call overrides on individual methods. logger.warning()emitted at construction whenAccessStrategy.PROVIDERis used, surfacing the no-isolation risk.
Breaking Changes
⚠️ Important: Existing calls tocreate_client()with no args will raiseAgentMemoryValidationError— the default strategy isSUBSCRIBERand requires atenant. Individual methods no longer acceptaccess_strategyortenantparameters.
Migration:
# Before
client = create_client()
client.list_memories(agent_id="x", invoker_id="u")
# After — subscriber (bindings provisioned per tenant at runtime)
client = create_client(tenant="my-subdomain")
client.list_memories(agent_id="x", invoker_id="u")
# After — provider (no tenant isolation, emits logger.warning)
client = create_client(access_strategy=AccessStrategy.PROVIDER)
client.list_memories(agent_id="x", invoker_id="u")