fix(agent): keep reset generation out of external conversation ID (#2818)

Fixes #2814

After a session reset, keep the reset generation marker out of provider-facing external conversation state so Runner plugins start a new remote conversation.
This commit is contained in:
huanghuoguoguo
2026-10-30 10:21:33 +08:00
committed by GitHub
parent 98a242320b
commit 70fb56e274
2 changed files with 4 additions and 3 deletions
@@ -188,7 +188,7 @@ class PersistentStateStore:
except json.JSONDecodeError:
pass # Skip invalid JSON
# Seed external.conversation_id from event.conversation_id if not set
# Seed the host conversation ID only before the conversation is reset.
if self._check_scope_enabled('conversation', binding) and event.conversation_id:
if 'external.conversation_id' not in snapshot['conversation']:
from .context_reset import get_reset_generation
@@ -196,7 +196,8 @@ class PersistentStateStore:
generation = await get_reset_generation(
self._db_engine, event.workspace_id, event.bot_id, event.conversation_id
)
snapshot['conversation']['external.conversation_id'] = generation or event.conversation_id
if generation is None:
snapshot['conversation']['external.conversation_id'] = event.conversation_id
return snapshot
@@ -153,7 +153,7 @@ async def test_reset_starts_new_external_runner_conversation(context_service):
snapshot = await store.build_snapshot_from_event(event, binding, descriptor)
generation = await get_reset_generation(engine, 'w', 'b', 'person_u')
assert isinstance(generation, str) and generation and generation not in {'remote-old', 'person_u'}
assert snapshot['conversation']['external.conversation_id'] == generation
assert 'external.conversation_id' not in snapshot['conversation']
@pytest.mark.asyncio