diff --git a/backend/src/agent/app.py b/backend/src/agent/app.py index da7f73ca..c52c3141 100644 --- a/backend/src/agent/app.py +++ b/backend/src/agent/app.py @@ -49,6 +49,7 @@ from src.agent.langgraph_setup import create_agent from src.agent.middleware import log_tool_event from src.agent.tools import get_tools_for_query from src.core.auth.jwt import decode_token +from src.core.cot_logger import seed_trace_id from src.core.logger import logger JWT_SECRET = os.getenv("JWT_SECRET", "super-secret-key") @@ -162,6 +163,7 @@ async def agent_handler( # noqa: C901 — intentionally complex C4 orchestratio try: # ── Resolve conversation ID early (needed for file persistence) ── conv_id = conversation_id or str(uuid.uuid4()) + _trace_id = seed_trace_id() is_resume = action in ("confirm", "deny") logger.reason( "Agent handler invoked", @@ -237,11 +239,12 @@ async def agent_handler( # noqa: C901 — intentionally complex C4 orchestratio "metadata": {"type": "error", "code": "STREAM_CLEANUP_TIMEOUT"}, }) return + # Capture tool_name BEFORE handle_resume pops the pending confirmation + pending_pre = _pending_confirmations.get(conv_id, {}) if conv_id else {} + tool_name = pending_pre.get("tool_name", "") if pending_pre else "" async for chunk in handle_resume(conv_id, action, user_jwt_str, env_id): yield chunk - # Build descriptive title from pending confirmation info - pending = _pending_confirmations.get(conv_id, {}) if conv_id else {} - tool_name = pending.get("tool_name", "") if pending else "" + # Build descriptive title from captured tool_name title = f"{'✅' if action == 'confirm' else '⏹️'} {tool_name or 'Операция'}" if tool_name else f"HITL: {action}" await save_conversation(conv_id or str(uuid.uuid4()), title, user_id) return diff --git a/backend/src/agent/run.py b/backend/src/agent/run.py index 485dd173..ca0cbfec 100644 --- a/backend/src/agent/run.py +++ b/backend/src/agent/run.py @@ -12,6 +12,7 @@ import os import socket import httpx +from src.core.cot_logger import seed_trace_id from src.core.logger import logger FASTAPI_URL = os.getenv("FASTAPI_URL", "http://localhost:8000") @@ -85,6 +86,8 @@ if __name__ == "__main__": from src.agent.context import set_service_jwt from src.agent.langgraph_setup import configure_from_api, init_checkpointer + seed_trace_id() # Seed trace for agent startup lifecycle + # Propagate SERVICE_JWT to ContextVar for tool calls service_token = os.getenv("SERVICE_JWT", "") if service_token: