Skip to content

v0.36.0 - Jul 16, 2026

Choose a tag to compare

@cassiofariasmachado cassiofariasmachado released this 16 Jul 18:53
· 27 commits to main since this release
eb6648d

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>/. Each AgentMemoryClient loads credentials from the correct binding at construction time.
    • AccessStrategy enum with two values: SUBSCRIBER (default) and PROVIDER. Configured once at create_client() — not per individual method call.
    • create_client(access_strategy=..., tenant=...)SUBSCRIBER with tenant="acme-corp" loads the subscriber binding; PROVIDER loads the default binding.
    • _load_config_for_instance(instance) in config.py — loads any named binding instance from /etc/secrets/appfnd/hana-agent-memory/<instance>/ or CLOUD_SDK_CFG_HANA_AGENT_MEMORY_<INSTANCE>_* env vars.
    • Simplified AgentMemoryClient: single _transport field; strategy and tenant validated at construction; no per-call overrides on individual methods.
    • logger.warning() emitted at construction when AccessStrategy.PROVIDER is used, surfacing the no-isolation risk.

Breaking Changes

⚠️ Important: Existing calls to create_client() with no args will raise AgentMemoryValidationError — the default strategy is SUBSCRIBER and requires a tenant. Individual methods no longer accept access_strategy or tenant parameters.

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")

Contributors