feat: add code agent status summary

This commit is contained in:
unidesk-code-queue-runner
2026-05-23 14:52:21 +00:00
parent 2fa7c894d3
commit e295def55f
10 changed files with 759 additions and 6 deletions
+43 -1
View File
@@ -73,6 +73,8 @@ const requiredWebAssets = Object.freeze([
"index.html",
"styles.css",
"app.mjs",
"code-agent-facts.mjs",
"code-agent-status.mjs",
"live-status.mjs",
"runtime.mjs",
"gate-summary.mjs",
@@ -83,7 +85,7 @@ const requiredWebAssets = Object.freeze([
"third_party/marked/LICENSE"
]);
const liveIdentityWebAssets = Object.freeze(["index.html", "styles.css", "app.mjs", "live-status.mjs", "wiring-status.mjs"]);
const liveIdentityWebAssets = Object.freeze(["index.html", "styles.css", "app.mjs", "code-agent-facts.mjs", "code-agent-status.mjs", "live-status.mjs", "wiring-status.mjs"]);
const chineseWorkbenchLabels = Object.freeze([
"HWLAB 云工作台",
@@ -534,6 +536,18 @@ function runStaticSmoke() {
evidence: ["服务受阻 or legacy BLOCKED 凭证缺口", "provider_unavailable classifier", "completed -> dev-live guard", "default workspace hides credential internals"]
});
addCheck(checks, blockers, "code-agent-status-summary", hasCodeAgentStatusSummaryContract(files), "Code Agent area has a compact collapsible status summary for fallback, one-shot, read-only session, skill CLI control, blockers, trace, and current deployed revision.", {
blocker: "observability_blocker",
evidence: [
"code-agent-summary",
"fallback-text-chat-only",
"stateless-one-shot",
"read-only-session-tools",
"skill-cli-api-control",
"当前部署 revision"
]
});
addCheck(checks, blockers, "default-workspace-sanitized", defaultWorkspaceIsSanitized(files), "Default user workspace hides raw blocker codes, internal route markers, and credential reference material.", {
blocker: "observability_blocker",
evidence: defaultHomepageForbiddenTerms
@@ -1632,6 +1646,8 @@ function readStaticFiles() {
html: readText("web/hwlab-cloud-web/index.html"),
styles: readText("web/hwlab-cloud-web/styles.css"),
app: readText("web/hwlab-cloud-web/app.mjs"),
codeAgentFacts: readText("web/hwlab-cloud-web/code-agent-facts.mjs"),
codeAgentStatus: readText("web/hwlab-cloud-web/code-agent-status.mjs"),
liveStatus: readText("web/hwlab-cloud-web/live-status.mjs"),
wiringStatus: readText("web/hwlab-cloud-web/wiring-status.mjs"),
runtime: readText("web/hwlab-cloud-web/runtime.mjs"),
@@ -2464,6 +2480,32 @@ function hasCodeAgentLongTimeoutContract(app) {
);
}
function hasCodeAgentStatusSummaryContract({ html, app, styles, codeAgentStatus }) {
return (
/id=["']code-agent-summary["']/u.test(html) &&
/id=["']code-agent-summary-label["']/u.test(html) &&
/id=["']code-agent-summary-capability["']/u.test(html) &&
/id=["']code-agent-summary-trace["']/u.test(html) &&
/function\s+renderCodeAgentSummary\s*\(/u.test(app) &&
/classifyCodeAgentStatusSummary/u.test(app) &&
/currentCodeAgentStatusSummary/u.test(app) &&
/codeAgent\.status/u.test(app) &&
/当前部署 revision/u.test(app) &&
/fallback-text-chat-only/u.test(codeAgentStatus) &&
/stateless-one-shot/u.test(codeAgentStatus) &&
/read-only-session-tools/u.test(codeAgentStatus) &&
/skill-cli-api-control/u.test(codeAgentStatus) &&
/currentDeploymentRevision/u.test(codeAgentStatus) &&
/unsafeGreenForNonReady/u.test(codeAgentStatus) &&
/provider_config_blocked/u.test(codeAgentStatus) &&
!/sourceMain|SOURCE main|待部署 commit|targetCommit/u.test(codeAgentStatus) &&
/\.code-agent-summary\s*\{/u.test(styles) &&
/\.tone-border-warn/u.test(styles) &&
/\.tone-border-blocked/u.test(styles) &&
/\.tone-border-ok/u.test(styles)
);
}
function hasCodeAgentConversationUxStates({ app, styles }) {
const submitBody = functionBody(app, "initCommandBar");
return (