-
-
-
-
- {rawCommand ? (
-
-
+
+
+
+
+ {runtimeWarningMessage ? (
+
+ {runtimeWarningMessage}
+
+ ) : null}
+ {runtimeWarningDetail ? (
+
+ {runtimeWarningDetail}
+
+ ) : null}
- ) : (
-
-
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
+ {rawCommand ? (
+
{heading}
- {preview && - {preview}}
-
-
-
-
- {displayText}
+ {preview && (
+
+
+ {" "}
+ - {preview}
+
+ }
+ />
+
+
+ {rawCommand}
+
+
+
+ )}
-
-
- )}
+
+ ) : (
+
+
+
+
+ {heading}
+
+ {preview && - {preview}}
+
+
+
+
+ {displayText}
+
+
+
+ )}
+
-
- {hasChangedFiles && !previewIsChangedFiles && (
-
- {workEntry.changedFiles?.slice(0, 4).map((filePath) => {
- const displayPath = formatWorkspaceRelativePath(filePath, workspaceRoot);
- return (
-
- {displayPath}
+ {hasChangedFiles && !previewIsChangedFiles && (
+
+ {workEntry.changedFiles?.slice(0, 4).map((filePath) => {
+ const displayPath = formatWorkspaceRelativePath(filePath, workspaceRoot);
+ return (
+
+ {displayPath}
+
+ );
+ })}
+ {(workEntry.changedFiles?.length ?? 0) > 4 && (
+
+ +{(workEntry.changedFiles?.length ?? 0) - 4}
- );
- })}
- {(workEntry.changedFiles?.length ?? 0) > 4 && (
-
- +{(workEntry.changedFiles?.length ?? 0) - 4}
-
- )}
-
- )}
-
+ )}
+
+ )}
+
+
);
});
diff --git a/apps/web/src/session-logic.test.ts b/apps/web/src/session-logic.test.ts
index baf384d6af2..02dbd32b2d2 100644
--- a/apps/web/src/session-logic.test.ts
+++ b/apps/web/src/session-logic.test.ts
@@ -653,6 +653,29 @@ describe("deriveWorkLogEntries", () => {
expect(entries[0]?.tone).toBe("error");
});
+ it("keeps runtime warning rows generic while preserving message and structured details", () => {
+ const detail = { code: "slow_provider", retryInSeconds: 5 };
+ const activities: OrchestrationThreadActivity[] = [
+ makeActivity({
+ id: "runtime-warning",
+ createdAt: "2026-02-23T00:00:03.000Z",
+ kind: "runtime.warning",
+ summary: "Runtime Warning",
+ tone: "info",
+ payload: {
+ message: "Provider got slow",
+ detail,
+ },
+ }),
+ ];
+
+ const [entry] = deriveWorkLogEntries(activities, undefined);
+ expect(entry?.label).toBe("Runtime Warning");
+ expect(entry?.detail).toBeUndefined();
+ expect(entry?.runtimeWarningMessage).toBe("Provider got slow");
+ expect(entry?.runtimeWarningDetail).toEqual(detail);
+ });
+
it("filters by turn id when provided", () => {
const activities: OrchestrationThreadActivity[] = [
makeActivity({ id: "turn-1", turnId: "turn-1", summary: "Tool call", kind: "tool.started" }),
diff --git a/apps/web/src/session-logic.ts b/apps/web/src/session-logic.ts
index a7767672fa1..15d7ded33db 100644
--- a/apps/web/src/session-logic.ts
+++ b/apps/web/src/session-logic.ts
@@ -52,6 +52,8 @@ export interface WorkLogEntry {
createdAt: string;
label: string;
detail?: string;
+ runtimeWarningMessage?: string;
+ runtimeWarningDetail?: unknown;
command?: string;
rawCommand?: string;
changedFiles?: ReadonlyArray
;
@@ -530,6 +532,12 @@ function toDerivedWorkLogEntry(activity: OrchestrationThreadActivity): DerivedWo
payload.detail.length > 0
? payload.detail
: null;
+ const runtimeWarningMessage =
+ activity.kind === "runtime.warning" &&
+ typeof payload?.message === "string" &&
+ payload.message.length > 0
+ ? payload.message
+ : null;
const taskLabel = taskSummary || taskDetailAsLabel;
const detail = isTaskActivity
? !taskDetailAsLabel &&
@@ -538,12 +546,14 @@ function toDerivedWorkLogEntry(activity: OrchestrationThreadActivity): DerivedWo
payload.detail.length > 0
? stripTrailingExitCode(payload.detail).output
: null
- : extractToolDetail(payload, title ?? activity.summary);
+ : activity.kind === "runtime.warning"
+ ? null
+ : extractToolDetail(payload, title ?? activity.summary);
const toolCallId = isTaskActivity ? null : extractToolCallId(payload);
const entry: DerivedWorkLogEntry = {
id: activity.id,
createdAt: activity.createdAt,
- label: taskLabel || activity.summary,
+ label: activity.kind === "runtime.warning" ? activity.summary : taskLabel || activity.summary,
tone:
activity.kind === "task.progress"
? "thinking"
@@ -557,6 +567,12 @@ function toDerivedWorkLogEntry(activity: OrchestrationThreadActivity): DerivedWo
if (detail) {
entry.detail = detail;
}
+ if (runtimeWarningMessage) {
+ entry.runtimeWarningMessage = runtimeWarningMessage;
+ }
+ if (activity.kind === "runtime.warning" && payload?.detail !== undefined) {
+ entry.runtimeWarningDetail = payload.detail;
+ }
if (commandPreview.command) {
entry.command = commandPreview.command;
}