Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6e8eba6
fix(runner): reassemble AG-UI streaming deltas in acp_get_session_status
Apr 30, 2026
e940dd0
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] Apr 30, 2026
de3d92f
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] Apr 30, 2026
f8f02a7
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] Apr 30, 2026
261f12e
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 2, 2026
81cc21d
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 2, 2026
d4b6911
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 3, 2026
55af0fa
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 3, 2026
aa0558d
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 4, 2026
3431bc0
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 5, 2026
99513a6
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 5, 2026
2ef6c56
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 5, 2026
2e8be90
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 5, 2026
1eac836
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 5, 2026
fdfedf8
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 7, 2026
0ea53d2
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 7, 2026
3a07b5f
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 7, 2026
e2300ce
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 7, 2026
7a71652
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 7, 2026
1ed912b
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 7, 2026
2ad826b
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 7, 2026
2a0a000
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 8, 2026
8dcfa00
Merge branch 'main' into fix/session-status-message-extraction
mergify[bot] May 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -401,22 +401,61 @@ async def acp_get_session_status(args: dict) -> dict:
events = api_client.get_session_events(
session_name=session_name,
)
# Extract text messages from AG-UI events
# Two event patterns exist depending on session state:
#
# 1. Streaming deltas (active sessions):
# TEXT_MESSAGE_START -> role, messageId
# TEXT_MESSAGE_CONTENT -> delta (text chunk), messageId
# TEXT_MESSAGE_END -> messageId
#
# 2. MESSAGES_SNAPSHOT (completed sessions):
# Contains a full "messages" array with role + content
#
# Try streaming deltas first; fall back to snapshots.
msg_roles: dict[str, str] = {}
msg_deltas: dict[str, list[str]] = {}
messages = []
last_snapshot = None
for event in events:
event_type = event.get("type", "")
if event_type == "TEXT_MESSAGE_CONTENT" and event.get("text"):
messages.append(
{
"role": event.get("role", "assistant"),
"text": event["text"][:500],
}
)
etype = event.get("type", "")
mid = event.get("messageId", "")
if etype == "TEXT_MESSAGE_START" and mid:
msg_roles[mid] = event.get("role", "assistant")
msg_deltas[mid] = []
elif etype == "TEXT_MESSAGE_CONTENT" and mid:
if "delta" in event:
msg_deltas.setdefault(mid, []).append(event["delta"])
elif etype == "TEXT_MESSAGE_END" and mid:
if mid in msg_deltas:
full_text = "".join(msg_deltas.pop(mid))
if full_text.strip():
messages.append(
{
"role": msg_roles.pop(mid, "assistant"),
"text": full_text[:500],
}
)
elif etype == "MESSAGES_SNAPSHOT":
last_snapshot = event

# Fall back to MESSAGES_SNAPSHOT if no streaming deltas found
if not messages and last_snapshot:
for msg in last_snapshot.get("messages", []):
role = msg.get("role", "")
content = msg.get("content", "")
if role in ("user", "assistant") and isinstance(content, str) and content.strip():
messages.append(
{
"role": role,
"text": content[:500],
}
)

# Return only the last N messages
result["recentMessages"] = messages[-max_messages:]
result["totalMessages"] = len(messages)
except Exception as events_err:
logger.debug(f"Could not fetch events for {session_name}: {events_err}")
logger.warning(f"Could not fetch events for {session_name}: {events_err}")
result["recentMessages"] = []
result["totalMessages"] = 0

Expand Down
Loading