fix: surface AgentRun event payload summaries
This commit is contained in:
+109
-15
@@ -873,24 +873,118 @@ function normalizeRunnerJobItems(data: unknown): Record<string, unknown>[] {
|
||||
}
|
||||
|
||||
function normalizeEventItems(data: unknown): Record<string, unknown>[] {
|
||||
return arrayRecords(record(data).items ?? data).map((item) => ({
|
||||
seq: item.seq,
|
||||
type: item.type,
|
||||
status: item.status ?? item.phase,
|
||||
phase: item.phase,
|
||||
commandId: item.commandId,
|
||||
summary: item.summary ?? item.outputSummary ?? item.text ?? "",
|
||||
}));
|
||||
return arrayRecords(record(data).items ?? data).map((item) => {
|
||||
const payload = record(item.payload);
|
||||
return {
|
||||
seq: item.seq,
|
||||
type: item.type,
|
||||
status: agentRunEventStatus(item, payload),
|
||||
phase: item.phase ?? payload.phase,
|
||||
commandId: agentRunEventCommandId(item, payload),
|
||||
summary: agentRunEventSummary(item, payload),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function normalizeLogItems(data: unknown): Record<string, unknown>[] {
|
||||
return arrayRecords(record(data).items ?? data).map((item) => ({
|
||||
seq: item.seq,
|
||||
type: item.type ?? item.role ?? "output",
|
||||
status: item.status ?? item.phase ?? "",
|
||||
commandId: item.commandId ?? "",
|
||||
summary: item.summary ?? item.text ?? item.content ?? item.output ?? "",
|
||||
}));
|
||||
return arrayRecords(record(data).items ?? data).map((item) => {
|
||||
const payload = record(item.payload);
|
||||
return {
|
||||
seq: item.seq,
|
||||
type: item.type ?? item.role ?? "output",
|
||||
status: agentRunEventStatus(item, payload),
|
||||
commandId: agentRunEventCommandId(item, payload),
|
||||
summary: agentRunEventSummary(item, payload),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function agentRunEventCommandId(item: Record<string, unknown>, payload: Record<string, unknown>): string {
|
||||
return stringOrNull(item.commandId)
|
||||
?? stringOrNull(payload.commandId)
|
||||
?? stringOrNull(record(payload.summary).commandId)
|
||||
?? "-";
|
||||
}
|
||||
|
||||
function agentRunEventStatus(item: Record<string, unknown>, payload: Record<string, unknown>): string {
|
||||
return stringOrNull(item.status)
|
||||
?? stringOrNull(item.phase)
|
||||
?? stringOrNull(payload.status)
|
||||
?? stringOrNull(payload.phase)
|
||||
?? stringOrNull(payload.failureKind)
|
||||
?? (item.type === "error" ? "error" : "");
|
||||
}
|
||||
|
||||
function agentRunEventSummary(item: Record<string, unknown>, payload: Record<string, unknown>): string {
|
||||
const type = stringOrNull(item.type);
|
||||
const parts: string[] = [];
|
||||
const push = (value: unknown): void => {
|
||||
const text = eventText(value);
|
||||
if (text !== null && !parts.includes(text)) parts.push(text);
|
||||
};
|
||||
|
||||
if (type === "error") {
|
||||
push(payload.failureKind);
|
||||
const error = record(payload.error);
|
||||
push(error.message);
|
||||
push(error.additionalDetails);
|
||||
if (payload.willRetry === true) push("willRetry=true");
|
||||
}
|
||||
|
||||
if (type === "backend_status") {
|
||||
push(payload.phase);
|
||||
push(formatCountField("tools", record(payload.tools).count));
|
||||
push(formatCountField("bundles", record(payload.bundles).count));
|
||||
push(formatCountField("promptRefs", record(payload.promptRefs).count));
|
||||
push(payload.jobName);
|
||||
push(payload.namespace);
|
||||
}
|
||||
|
||||
if (type === "tool_call") {
|
||||
push(payload.summary);
|
||||
push(payload.toolName);
|
||||
push(payload.command);
|
||||
const exitCode = payload.exitCode;
|
||||
if (exitCode !== undefined && exitCode !== null) push(`exit=${String(exitCode)}`);
|
||||
push(payload.outputSummary);
|
||||
}
|
||||
|
||||
if (type === "command_output") {
|
||||
push(payload.summary);
|
||||
push(payload.text);
|
||||
}
|
||||
|
||||
if (type === "assistant_message") {
|
||||
push(payload.summary);
|
||||
push(payload.text);
|
||||
}
|
||||
|
||||
push(item.summary);
|
||||
push(item.outputSummary);
|
||||
push(item.text);
|
||||
push(payload.summary);
|
||||
push(payload.outputSummary);
|
||||
push(payload.text);
|
||||
push(payload.message);
|
||||
push(payload.reason);
|
||||
|
||||
return parts.join("; ");
|
||||
}
|
||||
|
||||
function eventText(value: unknown): string | null {
|
||||
const direct = stringOrNull(value);
|
||||
if (direct !== null && direct.trim().length > 0) return direct.trim();
|
||||
const nested = record(value);
|
||||
return stringOrNull(nested.text)
|
||||
?? stringOrNull(nested.message)
|
||||
?? stringOrNull(nested.reason)
|
||||
?? stringOrNull(nested.summary);
|
||||
}
|
||||
|
||||
function formatCountField(label: string, value: unknown): string | null {
|
||||
if (typeof value === "number" && Number.isFinite(value)) return `${label}=${value}`;
|
||||
if (typeof value === "string" && value.length > 0) return `${label}=${value}`;
|
||||
return null;
|
||||
}
|
||||
|
||||
function renderResourceTable(items: Record<string, unknown>[], wide: boolean): string {
|
||||
|
||||
Reference in New Issue
Block a user