+
+ 当前运行
+ ${escapeHtml(runStatusLabel)}
+
+
${escapeHtml(currentRun.summary || currentRun.status_summary || "主 Agent 会先给你一张确认卡,再继续执行。")}
+
+ ${currentRun.run_status === "needs_confirmation" ? `
+ 确认执行
+ 取消本轮
+ ` : ""}
+ ${canRetryCurrentRun ? `重新执行` : ""}
+ ${hasResultPayload ? `查看结果` : ""}
+ ${recommendedAction?.action ? `${escapeHtml(recommendedAction.label || "继续这个任务")}` : ""}
+
+
${escapeHtml(currentRun.title || currentRun.plan?.goal || "主 Agent 任务")}
diff --git a/web/storyforge-web-v4/tests/workbench-pages.test.mjs b/web/storyforge-web-v4/tests/workbench-pages.test.mjs
index c11f53d..7c14183 100644
--- a/web/storyforge-web-v4/tests/workbench-pages.test.mjs
+++ b/web/storyforge-web-v4/tests/workbench-pages.test.mjs
@@ -594,6 +594,14 @@ test("oneliner runtime shows grouped run health summary above the current run ca
assert.match(runtime, /safeArray\(runs\)\.filter\(\(item\) => item\.run_status === "needs_confirmation"\)\.length/);
});
+test("oneliner runtime exposes a compact mobile task strip for the current run", () => {
+ const runtime = extractBetween(APP, "function renderOneLinerRunsHtml()", "function renderOneLinerMessagesHtml()");
+ assert.match(runtime, /mobile-only compact-summary-row/);
+ assert.match(runtime, /mobile-only mobile-flow-focus-card/);
+ assert.match(runtime, /当前运行/);
+ assert.match(runtime, /继续这个任务/);
+});
+
test("opening a main agent run result keeps that run selected in the floating runtime", () => {
const resultAction = extractBetween(APP, "function openCurrentOneLinerRunResultAction(runId = \"\")", "function openConfirmOneLinerRunAction(runId = \"\")");
assert.match(resultAction, /appState\.selectedOnelinerRunId = currentRun\.id/);