fix(channels): copy configurable dict before injecting run-scoped fields

When configurable was already a plain dict, _resolve_run_params mutated
  it in place, leaking checkpoint_ns and thread_id back into the shared
  session config. Always copy via dict() before mutating to prevent
  cross-user or cross-channel config pollution.
This commit is contained in:
Willem Jiang 2026-05-02 22:07:49 +08:00
parent f77dcf9c23
commit 2276efbc4b

View File

@ -590,9 +590,7 @@ class ChannelManager:
)
configurable = run_config.get("configurable")
if isinstance(configurable, dict):
pass
elif isinstance(configurable, Mapping):
if isinstance(configurable, Mapping):
configurable = dict(configurable)
else:
configurable = {}