fix(agent): stabilize post-merge release paths

This commit is contained in:
huanghuoguoguo
2026-08-04 17:04:40 +08:00
parent 5c5ed940a9
commit 444024c5b4
19 changed files with 319 additions and 57 deletions
@@ -90,6 +90,13 @@ class AgentRunOrchestrator:
execution_context = get_query_execution_context(execution_query)
if not isinstance(execution_context, ExecutionContext):
raise ValueError('Agent run requires a trusted ExecutionContext')
event_workspace_id = str(event.workspace_id or '').strip()
if event_workspace_id and event_workspace_id != execution_context.workspace_uuid:
raise ValueError('Agent event Workspace does not match its trusted ExecutionContext')
if not event_workspace_id:
event = event.model_copy(
update={'workspace_id': execution_context.workspace_uuid}
)
descriptor = await self.registry.get(
execution_context,
runner_id,
@@ -31,6 +31,7 @@ from .host_models import (
from .config_resolver import RunnerConfigResolver
from .resource_policy import ResourcePolicyProjector
from . import events as runner_events
from ...pipeline.pool import get_query_execution_context
from ...provider.tools.toolmgr import TOOL_SOURCE_REFS_QUERY_KEY
@@ -81,6 +82,7 @@ class QueryEntryAdapter:
# Build raw ref
raw_ref = cls._build_raw_ref(query)
execution_context = get_query_execution_context(query)
return AgentEventEnvelope(
event_id=event.event_id or str(query.query_id),
@@ -89,7 +91,7 @@ class QueryEntryAdapter:
source='host_adapter',
source_event_type=event.source_event_type,
bot_id=query.bot_uuid,
workspace_id=getattr(query, 'workspace_uuid', None),
workspace_id=execution_context.workspace_uuid,
conversation_id=conversation.conversation_id,
thread_id=conversation.thread_id,
actor=actor,
@@ -1566,6 +1566,11 @@ def _execution_context_from_tenant(context: TenantContext) -> ExecutionContext:
def _execution_context_from_query(query: pipeline_query.Query) -> ExecutionContext:
if isinstance(getattr(query, '_execution_context', None), ExecutionContext):
# Import lazily to keep the loader module independent during app boot.
from ....pipeline.pool import get_query_execution_context
return get_query_execution_context(query)
return _execution_context_from_tenant(
ExecutionContext(
instance_uuid=str(getattr(query, 'instance_uuid', '') or ''),