From d7a8d9a1c7412ef9e76e82644e0611f2ed6f46ac Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 13 Dec 2025 15:29:39 +0000 Subject: [PATCH] fix(browser): default control url uses 18791 --- README.md | 2 +- apps/macos/Sources/Clawdis/ConfigSettings.swift | 6 +++--- docs/configuration.md | 4 ++-- docs/mac/browser.md | 12 ++++++------ src/browser/config.test.ts | 12 ++++++------ src/browser/constants.ts | 3 +-- src/config/config.ts | 2 +- src/cron/service.test.ts | 1 + 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 4dfc33a6d..e741665c6 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ Optional: enable/configure clawd’s dedicated browser control (defaults are alr { browser: { enabled: true, - controlUrl: "http://127.0.0.1:18790", + controlUrl: "http://127.0.0.1:18791", color: "#FF4500" } } diff --git a/apps/macos/Sources/Clawdis/ConfigSettings.swift b/apps/macos/Sources/Clawdis/ConfigSettings.swift index cf6e25332..c6ec3b510 100644 --- a/apps/macos/Sources/Clawdis/ConfigSettings.swift +++ b/apps/macos/Sources/Clawdis/ConfigSettings.swift @@ -20,7 +20,7 @@ struct ConfigSettings: View { // clawd browser settings (stored in ~/.clawdis/clawdis.json under "browser") @State private var browserEnabled: Bool = true - @State private var browserControlUrl: String = "http://127.0.0.1:18790" + @State private var browserControlUrl: String = "http://127.0.0.1:18791" @State private var browserColorHex: String = "#FF4500" @State private var browserAttachOnly: Bool = false @@ -137,7 +137,7 @@ struct ConfigSettings: View { HStack(spacing: 8) { Text("Control URL") - TextField("http://127.0.0.1:18790", text: self.$browserControlUrl) + TextField("http://127.0.0.1:18791", text: self.$browserControlUrl) .textFieldStyle(.roundedBorder) .frame(width: 320) .disabled(!self.browserEnabled) @@ -168,7 +168,7 @@ struct ConfigSettings: View { .help("When enabled, the browser server will only connect if the clawd browser is already running.") Text( - "Clawd uses a separate Chrome profile and ports (default 18790/18791) so it won’t interfere with your daily browser." + "Clawd uses a separate Chrome profile and ports (default 18791/18792) so it won’t interfere with your daily browser." ) .font(.footnote) .foregroundStyle(.secondary) diff --git a/docs/configuration.md b/docs/configuration.md index 69d8844c6..5b8c8f776 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -109,14 +109,14 @@ Clawdis can start a **dedicated, isolated** Chrome/Chromium instance for clawd a Defaults: - enabled: `true` -- control URL: `http://127.0.0.1:18790` (CDP uses `18791`) +- control URL: `http://127.0.0.1:18791` (CDP uses `18792`) - profile color: `#FF4500` (lobster-orange) ```json5 { browser: { enabled: true, - controlUrl: "http://127.0.0.1:18790", + controlUrl: "http://127.0.0.1:18791", color: "#FF4500", // Advanced: // headless: false, diff --git a/docs/mac/browser.md b/docs/mac/browser.md index 40a4987a9..e3b56c8aa 100644 --- a/docs/mac/browser.md +++ b/docs/mac/browser.md @@ -23,7 +23,7 @@ Add a dedicated settings section (preferably under **Tools** or its own “Brows - **Enable clawd browser** (`default: on`) - When off: no browser is launched, and browser tools return “disabled”. -- **Browser control URL** (`default: http://127.0.0.1:18790`) +- **Browser control URL** (`default: http://127.0.0.1:18791`) - Interpreted as the base URL of the local/remote browser-control server. - If the URL host is not loopback, Clawdis must **not** attempt to launch a local browser; it only connects. - **Accent color** (`default: #FF4500`, “lobster-orange”) @@ -38,12 +38,13 @@ Optional (advanced, can be hidden behind Debug initially): Clawdis already uses: - Gateway WebSocket: `18789` - WebChat HTTP: `18788` +- Bridge (voice/iris): `18790` For the clawd browser-control server, use “family” ports: -- Browser control HTTP API: `18790` (gateway + 1) -- Browser CDP/debugging port: `18791` (control + 1) +- Browser control HTTP API: `18791` (bridge + 1) +- Browser CDP/debugging port: `18792` (control + 1) -The user usually only configures the **control URL** (port `18790`). CDP is an internal detail. +The user usually only configures the **control URL** (port `18791`). CDP is an internal detail. ## Browser isolation guarantees (non-negotiable) @@ -55,7 +56,7 @@ The user usually only configures the **control URL** (port `18790`). CDP is an i 2) **Dedicated ports** - Never use `9222` (reserved for ad-hoc dev workflows; avoids colliding with `agent-tools/browser-tools`). - - Default ports are `18790/18791` unless overridden. + - Default ports are `18791/18792` unless overridden. 3) **Named tab/page management** - The agent must be able to enumerate and target tabs deterministically (by stable `targetId` or equivalent), not “last tab”. @@ -147,4 +148,3 @@ The agent should not assume tabs are ephemeral. It should: - Cross-device “sync” of tabs between Mac and Pi. - Sharing the user’s logged-in Chrome sessions automatically. - General-purpose web scraping; this is primarily for “close-the-loop” verification and interaction. - diff --git a/src/browser/config.test.ts b/src/browser/config.test.ts index 9dc83d19f..a954f0b6c 100644 --- a/src/browser/config.test.ts +++ b/src/browser/config.test.ts @@ -8,8 +8,8 @@ describe("browser config", () => { it("defaults to enabled with loopback control url and lobster-orange color", () => { const resolved = resolveBrowserConfig(undefined); expect(resolved.enabled).toBe(true); - expect(resolved.controlPort).toBe(18790); - expect(resolved.cdpPort).toBe(18791); + expect(resolved.controlPort).toBe(18791); + expect(resolved.cdpPort).toBe(18792); expect(resolved.controlHost).toBe("127.0.0.1"); expect(resolved.color).toBe("#FF4500"); expect(shouldStartLocalBrowserServer(resolved)).toBe(true); @@ -17,7 +17,7 @@ describe("browser config", () => { it("normalizes hex colors", () => { const resolved = resolveBrowserConfig({ - controlUrl: "http://localhost:18790", + controlUrl: "http://localhost:18791", color: "ff4500", }); expect(resolved.color).toBe("#FF4500"); @@ -25,7 +25,7 @@ describe("browser config", () => { it("falls back to default color for invalid hex", () => { const resolved = resolveBrowserConfig({ - controlUrl: "http://localhost:18790", + controlUrl: "http://localhost:18791", color: "#GGGGGG", }); expect(resolved.color).toBe("#FF4500"); @@ -33,7 +33,7 @@ describe("browser config", () => { it("treats non-loopback control urls as remote", () => { const resolved = resolveBrowserConfig({ - controlUrl: "http://example.com:18790", + controlUrl: "http://example.com:18791", }); expect(shouldStartLocalBrowserServer(resolved)).toBe(false); }); @@ -48,7 +48,7 @@ describe("browser config", () => { it("rejects unsupported protocols", () => { expect(() => - resolveBrowserConfig({ controlUrl: "ws://127.0.0.1:18790" }), + resolveBrowserConfig({ controlUrl: "ws://127.0.0.1:18791" }), ).toThrow(/must be http/i); }); }); diff --git a/src/browser/constants.ts b/src/browser/constants.ts index 7f7bfee1a..041a3e6ce 100644 --- a/src/browser/constants.ts +++ b/src/browser/constants.ts @@ -1,5 +1,4 @@ export const DEFAULT_CLAWD_BROWSER_ENABLED = true; -export const DEFAULT_CLAWD_BROWSER_CONTROL_URL = "http://127.0.0.1:18790"; -export const DEFAULT_CLAWD_BROWSER_CDP_PORT = 18791; +export const DEFAULT_CLAWD_BROWSER_CONTROL_URL = "http://127.0.0.1:18791"; export const DEFAULT_CLAWD_BROWSER_COLOR = "#FF4500"; export const DEFAULT_CLAWD_BROWSER_PROFILE_NAME = "clawd"; diff --git a/src/config/config.ts b/src/config/config.ts index 16c7936bf..103209e71 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -51,7 +51,7 @@ export type WebChatConfig = { export type BrowserConfig = { enabled?: boolean; - /** Base URL of the clawd browser control server. Default: http://127.0.0.1:18790 */ + /** Base URL of the clawd browser control server. Default: http://127.0.0.1:18791 */ controlUrl?: string; /** Accent color for the clawd browser profile (hex). Default: #FF4500 */ color?: string; diff --git a/src/cron/service.test.ts b/src/cron/service.test.ts index 6e723fcf6..de9fb73f8 100644 --- a/src/cron/service.test.ts +++ b/src/cron/service.test.ts @@ -148,6 +148,7 @@ describe("CronService", () => { vi.setSystemTime(new Date("2025-12-13T00:00:01.000Z")); await vi.runOnlyPendingTimersAsync(); + await cron.list({ includeDisabled: true }); expect(enqueueSystemEvent).toHaveBeenCalledWith( "Cron (error): last output",