fix: improve Code Agent long request UX

This commit is contained in:
unidesk-code-queue-runner
2026-05-24 01:04:52 +00:00
parent 282da213f7
commit 542d6de6dc
6 changed files with 545 additions and 28 deletions
@@ -9,6 +9,7 @@ import {
parseSmokeArgs,
runDevCloudWorkbenchLayoutSmoke,
runDevCloudWorkbenchQuickPromptsFixtureSmoke,
runDevCloudWorkbenchSlowBlockerFixtureSmoke,
runDevCloudWorkbenchStaticSmoke,
runDevCloudWorkbenchTimeoutFixtureSmoke,
sanitizeAgentChatBody
@@ -671,6 +672,32 @@ test("local Code Agent timeout fixture keeps failed UI state, trace evidence, an
assert.equal(timeoutCheck.observations.ui.completedMessageVisible, false);
});
test("local slow structured blocker fixture preserves trace, pending state, and retry input", async () => {
const report = await runDevCloudWorkbenchSlowBlockerFixtureSmoke({
responseDelayMs: 5200
});
if (report.status === "skip") {
assert.match(report.summary, /Playwright is unavailable/u);
return;
}
assert.equal(report.status, "pass", JSON.stringify(report.blockers, null, 2));
assert.equal(report.evidenceLevel, "SOURCE");
assert.equal(report.devLive, false);
const blockerCheck = report.checks.find((check) => check.id === "local-agent-fixture-slow-structured-blocker");
assert.equal(blockerCheck?.status, "pass");
assert.equal(blockerCheck.observations.ui.agentChatStatus, "Runner 受阻");
assert.equal(blockerCheck.observations.ui.failedMessageVisible, true);
assert.equal(blockerCheck.observations.ui.failedMessageHasTrace, true);
assert.equal(blockerCheck.observations.ui.retryInputPreserved, true);
assert.equal(blockerCheck.observations.ui.retryInputValue, "列出你能使用的所有skill");
assert.equal(blockerCheck.observations.prompt.legacyWindow.permanentFailureAround4500ms, false);
assert.equal(blockerCheck.observations.prompt.legacyWindow.pendingChineseVisible, true);
assert.equal(blockerCheck.observations.prompt.response.error.code, "skills_unavailable");
assert.equal(blockerCheck.observations.prompt.classification.blocker, "runner-blocked");
});
test("Code Agent quick prompt fixture fills input, does not autosend writes, and fits mobile", async () => {
const report = await runDevCloudWorkbenchQuickPromptsFixtureSmoke();
if (report.status === "skip") {