fix: extend code agent timeout recovery
This commit is contained in:
@@ -22,8 +22,8 @@ const expectedBlockedGuardCommand = `${guardCommand} --expect-blocked`;
|
||||
const digestPattern = /^sha256:[a-f0-9]{64}$/u;
|
||||
const commitPattern = /^[a-f0-9]{7,40}$/u;
|
||||
const minCodeAgentFrontendTimeoutMs = 35000;
|
||||
const defaultCodeAgentBackendTimeoutMs = 600000;
|
||||
const minCodeAgentBackendTimeoutMs = 600000;
|
||||
const defaultCodeAgentBackendTimeoutMs = 1200000;
|
||||
const minCodeAgentBackendTimeoutMs = 1200000;
|
||||
|
||||
export function normalizeCommit(value) {
|
||||
if (typeof value !== "string") return "unknown";
|
||||
@@ -915,12 +915,12 @@ function summarizeCloudWebBuildFreshness(distFreshness, artifactCloudWeb) {
|
||||
}
|
||||
|
||||
async function inspectCodeAgentTimeoutReadiness(repoRoot) {
|
||||
const [appSource, chatSource] = await Promise.all([
|
||||
const [appSource, cloudApiEntrySource] = await Promise.all([
|
||||
readFile(path.join(repoRoot, "web/hwlab-cloud-web/app.mjs"), "utf8"),
|
||||
readFile(path.join(repoRoot, "internal/cloud/code-agent-chat.mjs"), "utf8")
|
||||
readFile(path.join(repoRoot, "cmd/hwlab-cloud-api/main.mjs"), "utf8")
|
||||
]);
|
||||
const frontendTimeoutMs = numericSourceConstant(appSource, "DEFAULT_CODE_AGENT_TIMEOUT_MS");
|
||||
const backendTimeoutMs = numericSourceConstant(chatSource, "DEFAULT_CODE_AGENT_TIMEOUT_MS");
|
||||
const backendTimeoutMs = parseTimeoutFallbackMs(cloudApiEntrySource, "HWLAB_CODE_AGENT_TIMEOUT_MS");
|
||||
const frontendReady = Number.isInteger(frontendTimeoutMs) && frontendTimeoutMs >= minCodeAgentFrontendTimeoutMs;
|
||||
const backendReady = Number.isInteger(backendTimeoutMs) && backendTimeoutMs >= minCodeAgentBackendTimeoutMs;
|
||||
const transportWaitsForBackend = Number.isInteger(frontendTimeoutMs) && Number.isInteger(backendTimeoutMs) && frontendTimeoutMs > backendTimeoutMs;
|
||||
@@ -943,6 +943,13 @@ function numericSourceConstant(source, name) {
|
||||
return Number.parseInt(match[1].replace(/_/gu, ""), 10);
|
||||
}
|
||||
|
||||
function parseTimeoutFallbackMs(source, envName) {
|
||||
const escaped = envName.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
||||
const match = source.match(new RegExp(`parseTimeout\\(process\\.env\\.${escaped},\\s*([0-9_]+)`, "u"));
|
||||
if (!match) return null;
|
||||
return Number.parseInt(match[1].replace(/_/gu, ""), 10);
|
||||
}
|
||||
|
||||
async function inspectM3IoSourceReadiness(repoRoot) {
|
||||
const files = await listTrackedFiles(repoRoot);
|
||||
const candidateFiles = files.filter((file) =>
|
||||
|
||||
@@ -13,8 +13,8 @@ import {
|
||||
|
||||
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
||||
const expectedPorts = Object.freeze({ frontend: 16666, api: 16667 });
|
||||
const codeAgentBackendTimeoutMs = "600000";
|
||||
const codeAgentTransportTimeoutMs = "660000";
|
||||
const codeAgentBackendTimeoutMs = "1200000";
|
||||
const codeAgentTransportTimeoutMs = "1260000";
|
||||
const legacyPublicPorts = new Set([6666, 6667]);
|
||||
const duplicateMappingAllowed = new Set(["hwlab-box-simu", "hwlab-gateway-simu"]);
|
||||
const tomlBareKeyPattern = /^[A-Za-z0-9_-]+$/u;
|
||||
|
||||
@@ -23,7 +23,7 @@ const webRoot = path.join(repoRoot, "web/hwlab-cloud-web");
|
||||
const defaultLiveUrl = "http://74.48.78.17:16666/";
|
||||
const helpOwner = "codex_1779444232735_1";
|
||||
const legacyFailureWindowMs = 4500;
|
||||
const codeAgentLongTimeoutMs = 600000;
|
||||
const codeAgentLongTimeoutMs = 1800000;
|
||||
const localAgentFixtureDelayMs = 5200;
|
||||
const codeAgentE2ePrompts = Object.freeze([
|
||||
{
|
||||
@@ -2657,7 +2657,8 @@ function hasCodeAgentLongTimeoutContract(files) {
|
||||
const app = files.app;
|
||||
return (
|
||||
/DEFAULT_API_TIMEOUT_MS\s*=\s*4500/u.test(app) &&
|
||||
/DEFAULT_CODE_AGENT_TIMEOUT_MS\s*=\s*600000/u.test(app) &&
|
||||
/DEFAULT_CODE_AGENT_TIMEOUT_MS\s*=\s*1800000/u.test(app) &&
|
||||
/MAX_CODE_AGENT_TIMEOUT_MS\s*=\s*2400000/u.test(app) &&
|
||||
/DEFAULT_CODE_AGENT_SUBMIT_TIMEOUT_MS\s*=\s*60000/u.test(app) &&
|
||||
/async function sendAgentMessage[\s\S]*?fetchJson\("\/v1\/agent\/chat"[\s\S]*?timeoutMs:\s*CODE_AGENT_SUBMIT_TIMEOUT_MS/u.test(app) &&
|
||||
/async function sendAgentMessage[\s\S]*?shortConnection:\s*true/u.test(app) &&
|
||||
@@ -2782,7 +2783,8 @@ function hasCodeAgentConversationUxStates({ app, styles }) {
|
||||
!/function\s+messageAttributionPanel\s*\(/u.test(app) &&
|
||||
!/codeAgentAttributionFromMessage/u.test(app) &&
|
||||
/DEFAULT_API_TIMEOUT_MS\s*=\s*4500/u.test(app) &&
|
||||
/DEFAULT_CODE_AGENT_TIMEOUT_MS\s*=\s*600000/u.test(app) &&
|
||||
/DEFAULT_CODE_AGENT_TIMEOUT_MS\s*=\s*1800000/u.test(app) &&
|
||||
/MAX_CODE_AGENT_TIMEOUT_MS\s*=\s*2400000/u.test(app) &&
|
||||
/timeoutMs:\s*CODE_AGENT_SUBMIT_TIMEOUT_MS/u.test(app) &&
|
||||
/HWLAB_CLOUD_WEB_CONFIG/u.test(app) &&
|
||||
/正在处理这次 Code Agent 请求/u.test(app) &&
|
||||
|
||||
Reference in New Issue
Block a user