diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx
index 610710fa7..ff4d32a99 100644
--- a/app/(admin)/settings/admin-settings-client.tsx
+++ b/app/(admin)/settings/admin-settings-client.tsx
@@ -2225,7 +2225,7 @@ export function AdminSettingsClient() {
enabled: false,
baseUrl: DEFAULT_OPENCLAW_CHAT_BASE_URL,
token: "",
- timeoutMs: 180_000,
+ timeoutMs: 600_000,
});
const [openClawChatTokenConfigured, setOpenClawChatTokenConfigured] =
useState(false);
@@ -2518,8 +2518,8 @@ export function AdminSettingsClient() {
String(raw.baseUrl || "").trim() || DEFAULT_OPENCLAW_CHAT_BASE_URL,
token: "",
timeoutMs: Math.min(
- 300_000,
- Math.max(5_000, Math.round(Number(raw.timeoutMs) || 180_000))
+ 600_000,
+ Math.max(5_000, Math.round(Number(raw.timeoutMs) || 600_000))
),
});
setOpenClawChatTokenConfigured(
@@ -4372,8 +4372,8 @@ export function AdminSettingsClient() {
openClawChatConfig.baseUrl.trim() || DEFAULT_OPENCLAW_CHAT_BASE_URL,
token: openClawChatConfig.token.trim(),
timeoutMs: Math.min(
- 300_000,
- Math.max(5_000, Math.round(Number(openClawChatConfig.timeoutMs) || 180_000))
+ 600_000,
+ Math.max(5_000, Math.round(Number(openClawChatConfig.timeoutMs) || 600_000))
),
};
@@ -12694,11 +12694,11 @@ export function AdminSettingsClient() {
setOpenClawChatConfig((prev) => ({
...prev,
- timeoutMs: Number(event.target.value) || 180000,
+ timeoutMs: Number(event.target.value) || 600000,
}))
}
type="number"
diff --git a/lib/openclaw-chat/config.ts b/lib/openclaw-chat/config.ts
index ec9f80518..80dc078c8 100644
--- a/lib/openclaw-chat/config.ts
+++ b/lib/openclaw-chat/config.ts
@@ -20,9 +20,9 @@ export type AdminOpenClawChatConfig = Omit & {
tokenPreview: string;
};
-const DEFAULT_TIMEOUT_MS = 180_000;
+const DEFAULT_TIMEOUT_MS = 600_000;
const MIN_TIMEOUT_MS = 5_000;
-const MAX_TIMEOUT_MS = 300_000;
+const MAX_TIMEOUT_MS = 600_000;
function readRecord(value: unknown): Record {
return value && typeof value === "object" && !Array.isArray(value)
diff --git a/playwright.helpers.config.ts b/playwright.helpers.config.ts
index 93fbef56d..04be7311c 100644
--- a/playwright.helpers.config.ts
+++ b/playwright.helpers.config.ts
@@ -16,6 +16,7 @@ export default defineConfig({
/routes\/clawd-request-lifecycle\.test\.ts/,
/routes\/canvas-skill-tag-order\.test\.ts/,
/routes\/openclaw-client-errors\.test\.ts/,
+ /routes\/openclaw-config\.test\.ts/,
/routes\/openclaw-durable-task-state\.test\.ts/,
/routes\/openclaw-request-state\.test\.ts/,
/routes\/openclaw-video-attachments\.test\.ts/,
diff --git a/tests/routes/openclaw-config.test.ts b/tests/routes/openclaw-config.test.ts
new file mode 100644
index 000000000..5d87bfa53
--- /dev/null
+++ b/tests/routes/openclaw-config.test.ts
@@ -0,0 +1,14 @@
+import { expect, test } from "@playwright/test";
+import { normalizeOpenClawChatConfig } from "@/lib/openclaw-chat/config";
+
+test.describe("OpenClaw chat timeout config", () => {
+ test("defaults long-running tasks to ten minutes", () => {
+ expect(normalizeOpenClawChatConfig({}).timeoutMs).toBe(600_000);
+ });
+
+ test("caps configured timeouts at ten minutes", () => {
+ expect(
+ normalizeOpenClawChatConfig({ timeoutMs: 900_000 }).timeoutMs
+ ).toBe(600_000);
+ });
+});