Team Ai
Apppublic

Yash030/claude-code-proxy

sourceHugging Faceupdated 5mo agoView on Hugging Face
2likes
node_event_pipeline.py104 linesDownload Raw Back to messaging
1"""CLI event handling for a single queued node (transcript + session + errors)."""2 3from __future__ import annotations4 5from collections.abc import Awaitable, Callable6from typing import Any7 8from loguru import logger9 10from .cli_event_constants import TRANSCRIPT_EVENT_TYPES, get_status_for_event11from .platforms.base import SessionManagerInterface12from .safe_diagnostics import text_len_hint13from .session import SessionStore14from .transcript import TranscriptBuffer15from .trees.queue_manager import MessageState, MessageTree16 17 18async def handle_session_info_event(19    event_data: dict[str, Any],20    tree: MessageTree | None,21    node_id: str,22    captured_session_id: str | None,23    temp_session_id: str | None,24    *,25    cli_manager: SessionManagerInterface,26    session_store: SessionStore,27) -> tuple[str | None, str | None]:28    """Handle session_info event; return updated (captured_session_id, temp_session_id)."""29    if event_data.get("type") != "session_info":30        return captured_session_id, temp_session_id31 32    real_session_id = event_data.get("session_id")33    if not real_session_id or not temp_session_id:34        return captured_session_id, temp_session_id35 36    await cli_manager.register_real_session_id(temp_session_id, real_session_id)37    if tree and real_session_id:38        await tree.update_state(39            node_id,40            MessageState.IN_PROGRESS,41            session_id=real_session_id,42        )43        session_store.save_tree(tree.root_id, tree.to_dict())44 45    return real_session_id, None46 47 48async def process_parsed_cli_event(49    parsed: dict[str, Any],50    transcript: TranscriptBuffer,51    update_ui: Callable[..., Awaitable[None]],52    last_status: str | None,53    had_transcript_events: bool,54    tree: MessageTree | None,55    node_id: str,56    captured_session_id: str | None,57    *,58    session_store: SessionStore,59    format_status: Callable[..., str],60    propagate_error_to_children: Callable[[str, str, str], Awaitable[None]],61    log_messaging_error_details: bool = False,62) -> tuple[str | None, bool]:63    """Process a single parsed CLI event. Returns (last_status, had_transcript_events)."""64    ptype = parsed.get("type") or ""65 66    if ptype in TRANSCRIPT_EVENT_TYPES:67        transcript.apply(parsed)68        had_transcript_events = True69 70    status = get_status_for_event(ptype, parsed, format_status)71    if status is not None:72        await update_ui(status)73        last_status = status74    elif ptype == "block_stop":75        await update_ui(last_status, force=True)76    elif ptype == "complete":77        if not had_transcript_events:78            transcript.apply({"type": "text_chunk", "text": "Done."})79        logger.info("HANDLER: Task complete, updating UI")80        await update_ui(format_status("✅", "Complete"), force=True)81        if tree and captured_session_id:82            await tree.update_state(83                node_id,84                MessageState.COMPLETED,85                session_id=captured_session_id,86            )87            session_store.save_tree(tree.root_id, tree.to_dict())88    elif ptype == "error":89        error_msg = parsed.get("message", "Unknown error")90        if log_messaging_error_details:91            logger.error("HANDLER: Error event received: {}", error_msg)92        else:93            em = error_msg if isinstance(error_msg, str) else str(error_msg)94            logger.error(95                "HANDLER: Error event received: message_chars={}",96                text_len_hint(em),97            )98        logger.info("HANDLER: Updating UI with error status")99        await update_ui(format_status("❌", "Error"), force=True)100        if tree:101            await propagate_error_to_children(node_id, error_msg, "Parent task failed")102 103    return last_status, had_transcript_events104