fix(agents): classify codex deactivated workspace

This commit is contained in:
Alex Tang
2026-05-15 12:36:32 +08:00
committed by Altay
parent 1d5b5db4d2
commit a488cbe695
4 changed files with 13 additions and 0 deletions

View File

@@ -858,6 +858,7 @@ Docs: https://docs.openclaw.ai
- CLI: route `plugins list --json` through the parsed command fast path and cover it in response budgets so plugin JSON inventory avoids full CLI registration work.
- Control UI/Overview: render recent session rows through the shared session display resolver so label/displayName priority, key-equivalent labels, and channel fallbacks stay consistent with the chat selector. (#50696) Thanks @Maple778 and @BunsDev.
- Gateway/network: keep OpenClaw-installed undici dispatchers on HTTP/1.1 and treat destroyed HTTP/2 session errors as recoverable network teardown, preventing `ERR_HTTP2_INVALID_SESSION` from crashing active gateway turns. Fixes #81627. (#81838) Thanks @joshavant.
- Codex/failover: classify `deactivated_workspace` as a permanent auth failure so configured fallback models can advance when a Codex workspace is deactivated.
- Memory/daily-files: widen the daily-memory file matcher used by Dreaming, rem-backfill, rem-harness, the doctor sweep, and short-term promotion so `memory/YYYY-MM-DD-<slug>.md` files written by the bundled session-memory hook (and any future slugged variants) are discovered alongside the date-only `memory/YYYY-MM-DD.md` shape. Date extraction still uses the leading `YYYY-MM-DD` capture group, so per-day ingestion/promotion semantics are unchanged for existing date-only files; slugged files now flow through the same paths instead of being silently skipped. Fixes #69536. Thanks @jack-stormentswe.
- macOS/Gateway: fail managed LaunchAgent stop and restart when the configured gateway port remains busy after cleanup instead of reporting success while a listener survives. Fixes #73132. Thanks @BunsDev.
- Telegram: reuse the sticky IPv4 Bot API transport for periodic getMe health checks, so IPv4-working hosts with broken IPv6 egress stop logging repeated probe timeouts. Fixes #76852. (#76856) Thanks @SymbolStar.

View File

@@ -943,6 +943,15 @@ describe("failover-error", () => {
);
});
it("Codex deactivated workspace marker returns auth_permanent", () => {
expect(resolveFailoverReasonFromError({ message: "deactivated_workspace" })).toBe(
"auth_permanent",
);
expect(resolveFailoverReasonFromError({ message: "deactivated workspace" })).toBe(
"auth_permanent",
);
});
it("403 OpenRouter 'Key limit exceeded' returns billing (model fallback trigger)", () => {
// GitHub: openclaw/openclaw#53849 — OpenRouter returns 403 with "Key limit exceeded"
// when the monthly key spending limit is reached. This must trigger billing failover

View File

@@ -88,6 +88,8 @@ describe("isAuthPermanentErrorMessage", () => {
"OAuth authentication is currently not allowed for this organization",
"API_KEY_REVOKED",
"api_key_deleted",
"deactivated_workspace",
"deactivated workspace",
],
expected: true,
},

View File

@@ -7,6 +7,7 @@ const PERIODIC_USAGE_LIMIT_RE =
const HIGH_CONFIDENCE_AUTH_PERMANENT_PATTERNS = [
/api[_ ]?key[_ ]?(?:revoked|deactivated|deleted)/i,
/deactivated[_ ]workspace/i,
"key has been disabled",
"key has been revoked",
"account has been deactivated",