feat: add code agent status summary
This commit is contained in:
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user