fix: block code agent non-2xx readiness
This commit is contained in:
@@ -1469,7 +1469,10 @@ async function validateDevCloudWorkbenchLiveReport(report, label, raw) {
|
||||
);
|
||||
}
|
||||
assertObject(journey.observations.ui, `${label}.live-code-agent-browser-journey.ui`);
|
||||
assert.equal(journey.observations.ui.agentChatStatus, "已回复", `${label}.live-code-agent-browser-journey.ui.agentChatStatus`);
|
||||
assert.ok(
|
||||
["已回复", "DEV-LIVE 回复"].includes(journey.observations.ui.agentChatStatus),
|
||||
`${label}.live-code-agent-browser-journey.ui.agentChatStatus`
|
||||
);
|
||||
assert.equal(journey.observations.ui.completedMessageVisible, true, `${label}.live-code-agent-browser-journey.ui.completedMessageVisible`);
|
||||
assert.equal(journey.observations.ui.failedMessageVisible, false, `${label}.live-code-agent-browser-journey.ui.failedMessageVisible`);
|
||||
|
||||
@@ -1480,24 +1483,26 @@ async function validateDevCloudWorkbenchLiveReport(report, label, raw) {
|
||||
assert.equal(report.safety[field], false, `${label}.safety.${field}`);
|
||||
}
|
||||
assert.equal(report.safety.liveMode, "browser-user-journey-with-code-agent-post", `${label}.safety.liveMode`);
|
||||
assert.deepEqual(
|
||||
report.safety.retainedApiFields,
|
||||
["status", "provider", "model", "backend", "traceId", "hasReply", "error.code", "error.missingEnv"],
|
||||
`${label}.safety.retainedApiFields`
|
||||
);
|
||||
assertCodeAgentRetainedApiFields(report.safety.retainedApiFields, `${label}.safety.retainedApiFields`);
|
||||
assertString(report.safety.statement, `${label}.safety.statement`);
|
||||
assertFreshDevCloudWorkbenchLiveEvidence(report, label, raw, journey);
|
||||
}
|
||||
|
||||
function assertDevCloudWorkbenchCodeAgentBlocked(report, label, journey) {
|
||||
const response = journey.observations.response;
|
||||
assert.equal(response.status, "failed", `${label}.live-code-agent-browser-journey.response.status`);
|
||||
assert.ok(["failed", "blocked"].includes(response.status), `${label}.live-code-agent-browser-journey.response.status`);
|
||||
assert.equal(response.hasReply, false, `${label}.live-code-agent-browser-journey.response.hasReply`);
|
||||
assertObject(response.error, `${label}.live-code-agent-browser-journey.response.error`);
|
||||
assert.ok(
|
||||
["provider_unavailable", "untrusted_completion"].includes(response.error.code),
|
||||
["provider_unavailable", "provider_blocked", "untrusted_completion"].includes(response.error.code),
|
||||
`${label}.live-code-agent-browser-journey.response.error.code`
|
||||
);
|
||||
if (response.error.providerStatus !== null && response.error.providerStatus !== undefined) {
|
||||
assert.ok(
|
||||
Number.isInteger(response.error.providerStatus) && response.error.providerStatus >= 100 && response.error.providerStatus <= 599,
|
||||
`${label}.live-code-agent-browser-journey.response.error.providerStatus`
|
||||
);
|
||||
}
|
||||
for (const field of ["provider", "model", "backend", "traceId"]) {
|
||||
assertString(response[field], `${label}.live-code-agent-browser-journey.response.${field}`);
|
||||
}
|
||||
@@ -1510,7 +1515,10 @@ function assertDevCloudWorkbenchCodeAgentBlocked(report, label, journey) {
|
||||
}
|
||||
|
||||
assertObject(journey.observations.ui, `${label}.live-code-agent-browser-journey.ui`);
|
||||
assert.equal(journey.observations.ui.agentChatStatus, "发送失败", `${label}.live-code-agent-browser-journey.ui.agentChatStatus`);
|
||||
assert.ok(
|
||||
["发送失败", "BLOCKED 凭证缺口"].includes(journey.observations.ui.agentChatStatus),
|
||||
`${label}.live-code-agent-browser-journey.ui.agentChatStatus`
|
||||
);
|
||||
assert.equal(journey.observations.ui.completedMessageVisible, false, `${label}.live-code-agent-browser-journey.ui.completedMessageVisible`);
|
||||
assert.equal(journey.observations.ui.failedMessageVisible, true, `${label}.live-code-agent-browser-journey.ui.failedMessageVisible`);
|
||||
assertBlockers(report.blockers, `${label}.blockers`);
|
||||
@@ -1524,14 +1532,23 @@ function assertDevCloudWorkbenchCodeAgentBlocked(report, label, journey) {
|
||||
assert.equal(report.safety[field], false, `${label}.safety.${field}`);
|
||||
}
|
||||
assert.equal(report.safety.liveMode, "browser-user-journey-with-code-agent-post", `${label}.safety.liveMode`);
|
||||
assert.deepEqual(
|
||||
report.safety.retainedApiFields,
|
||||
["status", "provider", "model", "backend", "traceId", "hasReply", "error.code", "error.missingEnv"],
|
||||
`${label}.safety.retainedApiFields`
|
||||
);
|
||||
assertCodeAgentRetainedApiFields(report.safety.retainedApiFields, `${label}.safety.retainedApiFields`);
|
||||
assertString(report.safety.statement, `${label}.safety.statement`);
|
||||
}
|
||||
|
||||
function assertCodeAgentRetainedApiFields(value, label) {
|
||||
assertArray(value, label);
|
||||
for (const field of ["status", "provider", "model", "backend", "traceId", "hasReply", "error.code", "error.missingEnv"]) {
|
||||
assert.ok(value.includes(field), `${label} missing ${field}`);
|
||||
}
|
||||
for (const field of value) {
|
||||
assert.ok(
|
||||
["status", "provider", "model", "backend", "traceId", "hasReply", "error.code", "error.missingEnv", "error.providerStatus"].includes(field),
|
||||
`${label} contains unexpected retained field ${field}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function assertDevCloudWorkbenchDeploymentPreflight(report, label, checks) {
|
||||
for (const requiredCheck of [
|
||||
"live-runtime-current-main",
|
||||
@@ -1727,9 +1744,9 @@ function assertFreshDevCloudWorkbenchLiveEvidence(report, label, raw, journey) {
|
||||
|
||||
const journeyText = JSON.stringify(journey.observations);
|
||||
assert.equal(
|
||||
/provider_unavailable|OPENAI_API_KEY/u.test(journeyText),
|
||||
/provider_unavailable|OPENAI_API_KEY|providerStatus|provider HTTP|HTTP 502/u.test(journeyText),
|
||||
false,
|
||||
`${label}.live-code-agent-browser-journey must not mix provider_unavailable or OPENAI_API_KEY blockers into accepted evidence`
|
||||
`${label}.live-code-agent-browser-journey must not mix provider_unavailable, OPENAI_API_KEY, or providerStatus blockers into accepted evidence`
|
||||
);
|
||||
|
||||
assertAcceptedCodeAgentPayload(
|
||||
|
||||
Reference in New Issue
Block a user