Spaces:
Running
Running
File size: 1,930 Bytes
0157ac7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | """CLI event types and status-line mapping for transcript / UI updates."""
from collections.abc import Callable
from typing import Any
# Status message prefixes used to filter our own messages (ignore echo)
STATUS_MESSAGE_PREFIXES = (
"β³",
"π",
"π§",
"β
",
"β",
"π",
"π€",
"π",
"π",
"π",
)
# Event types that update the transcript (frozenset for O(1) membership)
TRANSCRIPT_EVENT_TYPES = frozenset(
{
"thinking_start",
"thinking_delta",
"thinking_chunk",
"thinking_stop",
"text_start",
"text_delta",
"text_chunk",
"text_stop",
"tool_use_start",
"tool_use_delta",
"tool_use_stop",
"tool_use",
"tool_result",
"block_stop",
"error",
}
)
# Event type -> (emoji, label) for status updates (O(1) lookup)
_EVENT_STATUS_MAP: dict[str, tuple[str, str]] = {
"thinking_start": ("π§ ", "Claude is thinking..."),
"thinking_delta": ("π§ ", "Claude is thinking..."),
"thinking_chunk": ("π§ ", "Claude is thinking..."),
"text_start": ("π§ ", "Claude is working..."),
"text_delta": ("π§ ", "Claude is working..."),
"text_chunk": ("π§ ", "Claude is working..."),
"tool_result": ("β³", "Executing tools..."),
}
def get_status_for_event(
ptype: str,
parsed: dict[str, Any],
format_status_fn: Callable[..., str],
) -> str | None:
"""Return status string for event type, or None if no status update needed."""
entry = _EVENT_STATUS_MAP.get(ptype)
if entry is not None:
emoji, label = entry
return format_status_fn(emoji, label)
if ptype in ("tool_use_start", "tool_use_delta", "tool_use"):
if parsed.get("name") == "Task":
return format_status_fn("π€", "Subagent working...")
return format_status_fn("β³", "Executing tools...")
return None
|