From 5ce0d518cf7cbc4d40ea1e8e5d52f2ea752e5ef7 Mon Sep 17 00:00:00 2001 From: syn Date: Mon, 1 Jun 2026 12:14:46 -0500 Subject: [PATCH 1/3] fix(kiloclaw): keep Control UI local on fresh installs --- .../(app)/claw/components/changelog-data.ts | 13 ++ pnpm-lock.yaml | 206 ++++++++---------- services/kiloclaw/Dockerfile | 8 +- .../kiloclaw/controller/src/proxy.test.ts | 4 + services/kiloclaw/controller/src/proxy.ts | 8 +- services/kiloclaw/e2e/docker-image-testing.md | 2 +- .../kiloclaw/plugins/kilo-chat/package.json | 4 +- .../kiloclaw-morning-briefing/package.json | 4 +- 8 files changed, 124 insertions(+), 125 deletions(-) diff --git a/apps/web/src/app/(app)/claw/components/changelog-data.ts b/apps/web/src/app/(app)/claw/components/changelog-data.ts index 79ee66fc74..a7ca17169f 100644 --- a/apps/web/src/app/(app)/claw/components/changelog-data.ts +++ b/apps/web/src/app/(app)/claw/components/changelog-data.ts @@ -10,6 +10,19 @@ export type ChangelogEntry = { // Newest entries first. Developers add new entries to the top of this array. export const CHANGELOG_ENTRIES: ChangelogEntry[] = [ + { + date: '2026-06-01', + description: 'Updated OpenClaw to 2026.5.26.', + category: 'feature', + deployHint: 'redeploy_suggested', + }, + { + date: '2026-06-01', + description: + 'Updated the controller so Control UI no longer requires device pairing on fresh installs.', + category: 'bugfix', + deployHint: 'redeploy_required', + }, { date: '2026-05-28', description: 'Updated OpenClaw to 2026.5.22.', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46f91c7716..b6daf90a92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -828,7 +828,7 @@ importers: version: 4.24.14(next@16.2.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) openai: specifier: 6.29.0 - version: 6.29.0(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + version: 6.29.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) p-limit: specifier: 'catalog:' version: 7.3.0 @@ -2279,8 +2279,8 @@ importers: specifier: '>=0.25.0' version: 0.27.4 openclaw: - specifier: 2026.5.22 - version: 2026.5.22(bufferutil@4.1.0)(utf-8-validate@6.0.6) + specifier: 2026.5.26 + version: 2026.5.26(bufferutil@4.1.0)(utf-8-validate@6.0.6) vitest: specifier: 'catalog:' version: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.5.2)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.4) @@ -2303,8 +2303,8 @@ importers: specifier: '>=0.25.0' version: 0.27.4 openclaw: - specifier: 2026.5.22 - version: 2026.5.22(bufferutil@4.1.0)(utf-8-validate@6.0.6) + specifier: 2026.5.26 + version: 2026.5.26(bufferutil@4.1.0)(utf-8-validate@6.0.6) vitest: specifier: 'catalog:' version: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.5.2)(@vitest/coverage-v8@4.1.6)(@vitest/ui@4.1.6)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.4) @@ -2939,10 +2939,6 @@ packages: resolution: {integrity: sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==} engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.973.8': - resolution: {integrity: sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.973.9': resolution: {integrity: sha512-kuBfgQVdcz5Bmapc4A13YbpVw/pXkesfhetcFYwbntqas8sF41OHyd4o28+/TG2ZQdHBsv90Lsu5y6oitvYCdg==} engines: {node: '>=20.0.0'} @@ -4051,22 +4047,22 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@earendil-works/pi-agent-core@0.75.4': - resolution: {integrity: sha512-cGYbysb4EqUf0B28OeqFq2ppm1XF3bYBOP71q9dv38yf/UJfzMjiXBeNelrcio+QWIoVrW+xzYm7sMzYIUc9Og==} + '@earendil-works/pi-agent-core@0.75.5': + resolution: {integrity: sha512-LHygOgsW2pgXKb3IkXkOAeZPovHr9VF+EixgXVsDNuB4jmhEOXgshy/zksZ7slkUAx10OQ9W1Ed/2jsnhd1NqA==} engines: {node: '>=22.19.0'} - '@earendil-works/pi-ai@0.75.4': - resolution: {integrity: sha512-m/w8Hh3vQ0rAycwJiJWdzkypkn4295f4eq/966lDRy8aX5sk6bgYXH8TQmL16TO7Uwc7MbJG0QoyFHgX8RqXUQ==} + '@earendil-works/pi-ai@0.75.5': + resolution: {integrity: sha512-zf1F5kXk1pqZeFShXOqq9ibUk8QdtRoLCDPAjO+hj44e3EUs9/GFO2qnhTC5+JA2uwVCx+WCNe1PiCjlBYWm5w==} engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-coding-agent@0.75.4': - resolution: {integrity: sha512-Fb+FRo08b5H9pYKbQJ708/5OKL0+K/yclhfCMEhrBzSPTZZ4c85nY1YsBo4qwL20ohBMlBezHMRuHzcJ1ylEoQ==} + '@earendil-works/pi-coding-agent@0.75.5': + resolution: {integrity: sha512-O3CCQDYy28D4uwtP6zZkdEwzHN6X22v49Sb0+SZTC7x37V/YfmogrWPiaFoWeoc2hmdKhSATI7ZAK5bQbJG5NA==} engines: {node: '>=22.19.0'} hasBin: true - '@earendil-works/pi-tui@0.75.4': - resolution: {integrity: sha512-PDhKU7u6fmEcvHUFHzrRwGc/Ytokj/hO+X4RPf+MWKEGpvg3B1vHv88Ee+Dy33004tYkQF5YeXV4btJZcp5x1g==} + '@earendil-works/pi-tui@0.75.5': + resolution: {integrity: sha512-LkXUM1/49pvzzeI39Y5wjBMlgafcCf67HCLhB9Z7yuXHy4XgT+VqxWcZVW5hBdhQsHZd0znjJotfGH1BzxMfiA==} engines: {node: '>=22.19.0'} '@egjs/hammerjs@2.0.17': @@ -4488,8 +4484,8 @@ packages: '@modelcontextprotocol/sdk': optional: true - '@google/genai@2.5.0': - resolution: {integrity: sha512-qDi3LLh9I3llJK0f9uV8kZ8EdT9oHPxGJJ9yOJ/i5YXYrVwRCs8jHo9x4e99uOeKYDvD3TZwT70p/H/LS3BixQ==} + '@google/genai@2.6.0': + resolution: {integrity: sha512-HjoW3mPuEn7pnuKABJl9VbDoWDSF4nbwYKYvYYor7YjPeDxrrBxHzu2d1Prcd+BAuC4w+85UP6y7ZdcrQAoO7g==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -5533,8 +5529,8 @@ packages: '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - '@openclaw/fs-safe@0.2.7': - resolution: {integrity: sha512-l/Yj3K2ChR/gI+bZo1wIe7rjKyTFwGOAw120cTCMRT8LZbVhJhTbiZLGIRBMv0Gc9GQjYE8EjPBza3RdrSSbyQ==} + '@openclaw/fs-safe@0.3.0': + resolution: {integrity: sha512-uIBE441CIt1kIURoP9qRGKZ8LkGyfD9ZzeESjwAd29ZPWtghws/5GR3Pjb67jKdcJHP1I6roNXcvnhzAU7lHlA==} engines: {node: '>=20.11'} '@openclaw/proxyline@0.3.3': @@ -7933,10 +7929,6 @@ packages: resolution: {integrity: sha512-952rGf7hBRnhUIaeLp6q4MptKW8sPFe5VvkoZ5qIzFAtx6c/QZ/54FS3yootsyUSf9gJX/NBqEBNdNR7jMIlpQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.24.2': - resolution: {integrity: sha512-IKS7qX59fAGCYBmt5JChcDswQDupZqT2Yn2ZBA3UgTlsjRNNkQzZobbn95xoAAdtTyJmBiJB3Y02qR3rgy3Zog==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.24.4': resolution: {integrity: sha512-3UNRKEyQyAgVgM0LGlerCLm+ChZWZ1GPfde+jBEW6bm6bSBGU1p0EbblaUV3unbhwvidjLA5Zs3sOs7mnZwvAw==} engines: {node: '>=18.0.0'} @@ -7973,10 +7965,6 @@ packages: resolution: {integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.4.2': - resolution: {integrity: sha512-3wF40g8OOCA5BnwQUvwtzZqYBbWWftDjpAlWIUo6Yld3ZzJaMAKqg7MWQBPjE8oLaqvZQUE7tVGlZPsae6A4bQ==} - engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.4.4': resolution: {integrity: sha512-qM7AUKI4G6d7lNgaZD3lA1tWSolh5r6gcixfTZAPstVURfjIbvreVTPz+994M0yC3HbX4YYhDRgr31Xy3XwWOQ==} engines: {node: '>=18.0.0'} @@ -8037,8 +8025,8 @@ packages: resolution: {integrity: sha512-ULC8UCS/HivdCB3jhi+kLFYe4B5gxH2gi9vHBfEIiRrT2jfKiZNiETJSlzRtE6B26XbBHjPtc8iZKSNqMol9bw==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.7.2': - resolution: {integrity: sha512-EdksTZ8UXYxGUgQ4mpIKrHoaj9WVGsp66TpZuixLAz1Jex8YDLnS4RH9ktGED5aOpN0OJlEtrsC9IGt76go1eA==} + '@smithy/node-http-handler@4.7.3': + resolution: {integrity: sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==} engines: {node: '>=18.0.0'} '@smithy/node-http-handler@4.7.4': @@ -8085,10 +8073,6 @@ packages: resolution: {integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==} engines: {node: '>=18.0.0'} - '@smithy/types@4.14.1': - resolution: {integrity: sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==} - engines: {node: '>=18.0.0'} - '@smithy/types@4.14.2': resolution: {integrity: sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw==} engines: {node: '>=18.0.0'} @@ -12799,9 +12783,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - koffi@2.16.2: - resolution: {integrity: sha512-owU0MRwv6xkrVqCd+33uw6BaYppkTRXbO/rVdJNI2dvZG0gzyRhYwW25eWtc5pauwK8TGh3AbkFONSezdykfSA==} - kubernetes-types@1.30.0: resolution: {integrity: sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==} @@ -13810,8 +13791,8 @@ packages: zod: optional: true - openai@6.38.0: - resolution: {integrity: sha512-AoMplt2UalrpgUDMh3L09QWjNRlgJPipclQvA6sYAaeF6nHNBMgmikAZGmcYLn8on4d9sQY9Q8bOLfrBS7Lc8g==} + openai@6.39.0: + resolution: {integrity: sha512-O61LIsimY3acVabwvomwFhwrnN36yvHY2quIfy9keEcFytGgWeV35yLHQ6NVMLSBxRpHmcg2yuhCnlu2HT4pLQ==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -13822,8 +13803,8 @@ packages: zod: optional: true - openclaw@2026.5.22: - resolution: {integrity: sha512-m+zgBELGbCHjWB1IWF5WSWNPr480cMKOMff2OF72c8A0AMD4hC/9+qwYtzjYmGkETcffnB711JymlVsQnh2Tow==} + openclaw@2026.5.26: + resolution: {integrity: sha512-ne6ESyXmspmWO7JlSAWFp1ACmk/um2bnEGnEkiHd4BK62XRUt82DBCCpBGcLsMKA+zNG9G938dA+zCNJCKvUFA==} engines: {node: '>=22.19.0'} hasBin: true @@ -14389,6 +14370,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + rastermill@0.3.0: + resolution: {integrity: sha512-4g2i0I7M5sba//lFBh19Wi0hDGw8o+isnt/BtEyqQXIZaYclhcNBwL/Fw/6gDCp7aaLwQHADuUvyHCB0Oat5Vw==} + engines: {node: '>=20'} + raw-body@3.0.2: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} @@ -16391,6 +16376,18 @@ packages: utf-8-validate: optional: true + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xcode@3.0.1: resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==} engines: {node: '>=10.0.0'} @@ -16675,11 +16672,11 @@ snapshots: '@aws-sdk/middleware-eventstream': 3.972.13 '@aws-sdk/middleware-websocket': 3.972.21 '@aws-sdk/token-providers': 3.1048.0 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.2 - '@smithy/fetch-http-handler': 5.4.2 - '@smithy/node-http-handler': 4.7.2 - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/fetch-http-handler': 5.4.4 + '@smithy/node-http-handler': 4.7.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 '@aws-sdk/client-s3@3.1009.0': @@ -17106,7 +17103,7 @@ snapshots: '@smithy/middleware-serde': 4.2.14 '@smithy/middleware-stack': 4.2.12 '@smithy/node-config-provider': 4.3.12 - '@smithy/node-http-handler': 4.4.16 + '@smithy/node-http-handler': 4.7.4 '@smithy/protocol-http': 5.3.12 '@smithy/smithy-client': 4.12.5 '@smithy/types': 4.13.1 @@ -17189,9 +17186,9 @@ snapshots: dependencies: '@aws-sdk/core': 3.974.13 '@aws-sdk/nested-clients': 3.997.11 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.2 - '@smithy/types': 4.14.1 + '@aws-sdk/types': 3.973.9 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 '@aws-sdk/token-providers@3.1052.0': @@ -17208,11 +17205,6 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@aws-sdk/types@3.973.8': - dependencies: - '@smithy/types': 4.14.1 - tslib: 2.8.1 - '@aws-sdk/types@3.973.9': dependencies: '@smithy/types': 4.14.2 @@ -18780,9 +18772,9 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@earendil-works/pi-agent-core@0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3)': + '@earendil-works/pi-agent-core@0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3)': dependencies: - '@earendil-works/pi-ai': 0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + '@earendil-works/pi-ai': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) ignore: 7.0.5 typebox: 1.1.38 yaml: 2.8.4 @@ -18794,15 +18786,16 @@ snapshots: - ws - zod - '@earendil-works/pi-ai@0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3)': + '@earendil-works/pi-ai@0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.91.1(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1048.0 '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@mistralai/mistralai': 2.2.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@smithy/node-http-handler': 4.7.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - openai: 6.26.0(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + openai: 6.26.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) partial-json: 0.1.7 typebox: 1.1.38 transitivePeerDependencies: @@ -18813,11 +18806,11 @@ snapshots: - ws - zod - '@earendil-works/pi-coding-agent@0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3)': + '@earendil-works/pi-coding-agent@0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3)': dependencies: - '@earendil-works/pi-agent-core': 0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) - '@earendil-works/pi-ai': 0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) - '@earendil-works/pi-tui': 0.75.4 + '@earendil-works/pi-agent-core': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + '@earendil-works/pi-ai': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + '@earendil-works/pi-tui': 0.75.5 '@silvia-odwyer/photon-node': 0.3.4 chalk: 5.6.2 cross-spawn: 7.0.6 @@ -18842,12 +18835,10 @@ snapshots: - ws - zod - '@earendil-works/pi-tui@0.75.4': + '@earendil-works/pi-tui@0.75.5': dependencies: get-east-asian-width: 1.6.0 marked: 15.0.12 - optionalDependencies: - koffi: 2.16.2 '@egjs/hammerjs@2.0.17': dependencies: @@ -19392,7 +19383,7 @@ snapshots: - supports-color - utf-8-validate - '@google/genai@2.5.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)': + '@google/genai@2.6.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 @@ -20455,7 +20446,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.18) - ajv: 8.18.0 + ajv: 8.20.0 ajv-formats: 3.0.1 content-type: 1.0.5 cors: 2.8.6 @@ -20757,7 +20748,7 @@ snapshots: '@open-draft/deferred-promise@2.2.0': {} - '@openclaw/fs-safe@0.2.7': + '@openclaw/fs-safe@0.3.0': optionalDependencies: jszip: 3.10.1 tar: 7.5.13 @@ -23213,12 +23204,6 @@ snapshots: '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/core@3.24.2': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - '@smithy/core@3.24.4': dependencies: '@aws-crypto/crc32': 5.2.0 @@ -23235,8 +23220,8 @@ snapshots: '@smithy/credential-provider-imds@4.3.2': dependencies: - '@smithy/core': 3.24.2 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 '@smithy/eventstream-codec@4.2.12': @@ -23277,12 +23262,6 @@ snapshots: '@smithy/util-base64': 4.3.2 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.4.2': - dependencies: - '@smithy/core': 3.24.2 - '@smithy/types': 4.14.1 - tslib: 2.8.1 - '@smithy/fetch-http-handler@5.4.4': dependencies: '@smithy/core': 3.24.4 @@ -23384,10 +23363,10 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 - '@smithy/node-http-handler@4.7.2': + '@smithy/node-http-handler@4.7.3': dependencies: - '@smithy/core': 3.24.2 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 '@smithy/node-http-handler@4.7.4': @@ -23439,8 +23418,8 @@ snapshots: '@smithy/signature-v4@5.4.2': dependencies: - '@smithy/core': 3.24.2 - '@smithy/types': 4.14.1 + '@smithy/core': 3.24.4 + '@smithy/types': 4.14.2 tslib: 2.8.1 '@smithy/smithy-client@4.12.5': @@ -23457,10 +23436,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/types@4.14.1': - dependencies: - tslib: 2.8.1 - '@smithy/types@4.14.2': dependencies: tslib: 2.8.1 @@ -29351,9 +29326,6 @@ snapshots: yaml: 2.8.4 zod: 4.3.6 - koffi@2.16.2: - optional: true - kubernetes-types@1.30.0: {} kysely@0.29.2: {} @@ -30736,40 +30708,39 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@6.26.0(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3): + openai@6.26.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3): optionalDependencies: - ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 4.4.3 - openai@6.29.0(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3): + openai@6.29.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3): optionalDependencies: - ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 4.4.3 - openai@6.38.0(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3): + openai@6.39.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3): optionalDependencies: - ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) zod: 4.4.3 - openclaw@2026.5.22(bufferutil@4.1.0)(utf-8-validate@6.0.6): + openclaw@2026.5.26(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@agentclientprotocol/sdk': 0.22.1(zod@4.4.3) '@clack/core': 1.3.1 '@clack/prompts': 1.4.0 - '@earendil-works/pi-agent-core': 0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) - '@earendil-works/pi-ai': 0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) - '@earendil-works/pi-coding-agent': 0.75.4(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) - '@earendil-works/pi-tui': 0.75.4 - '@google/genai': 2.5.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6) + '@earendil-works/pi-agent-core': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + '@earendil-works/pi-ai': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + '@earendil-works/pi-coding-agent': 0.75.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + '@earendil-works/pi-tui': 0.75.5 + '@google/genai': 2.6.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@grammyjs/runner': 2.0.3(grammy@1.43.0) '@grammyjs/transformer-throttler': 1.2.1(grammy@1.43.0) '@homebridge/ciao': 1.3.8 '@lydell/node-pty': 1.2.0-beta.12 '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) '@mozilla/readability': 0.6.0 - '@openclaw/fs-safe': 0.2.7 + '@openclaw/fs-safe': 0.3.0 '@openclaw/proxyline': 0.3.3(undici@8.3.0) - ajv: 8.20.0 chalk: 5.6.2 chokidar: 5.0.0 commander: 14.0.3 @@ -30786,11 +30757,12 @@ snapshots: linkedom: 0.18.12 markdown-it: 14.1.1 node-edge-tts: 1.2.10(bufferutil@4.1.0)(utf-8-validate@6.0.6) - openai: 6.38.0(ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) + openai: 6.39.0(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))(zod@4.4.3) pdfjs-dist: 5.7.284 playwright-core: 1.60.0 qrcode: 1.5.4 quickjs-wasi: 2.2.0 + rastermill: 0.3.0 tar: 7.5.15 tokenjuice: 0.7.1 tree-sitter-bash: 0.25.1 @@ -30800,11 +30772,10 @@ snapshots: undici: 8.3.0 web-push: 3.6.7 web-tree-sitter: 0.26.9 - ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) yaml: 2.8.4 zod: 4.4.3 optionalDependencies: - sharp: 0.34.5 sqlite-vec: 0.1.9 transitivePeerDependencies: - '@cfworker/json-schema' @@ -31465,6 +31436,10 @@ snapshots: range-parser@1.2.1: {} + rastermill@0.3.0: + dependencies: + '@silvia-odwyer/photon-node': 0.3.4 + raw-body@3.0.2: dependencies: bytes: 3.1.2 @@ -34146,6 +34121,11 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 6.0.6 + ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 6.0.6 + xcode@3.0.1: dependencies: simple-plist: 1.3.1 diff --git a/services/kiloclaw/Dockerfile b/services/kiloclaw/Dockerfile index 3ed66ad10d..a40cf17414 100644 --- a/services/kiloclaw/Dockerfile +++ b/services/kiloclaw/Dockerfile @@ -64,7 +64,7 @@ RUN git config --system url."https://github.com/".insteadOf "ssh://git@github.co # under boot load routinely need 27-35s for the first TLS+fetch to complete. # Match the KiloCode chunk explicitly because OpenClaw also ships other provider # discovery timeout constants. Remove this patch once the timeout is configurable. -RUN npm install -g pnpm openclaw@2026.5.22 clawhub mcporter@0.7.3 @steipete/summarize@0.12.0 @kilocode/cli@7.2.31 \ +RUN npm install -g pnpm openclaw@2026.5.26 clawhub mcporter@0.7.3 @steipete/summarize@0.12.0 @kilocode/cli@7.2.31 \ && OC_DIST=/usr/local/lib/node_modules/openclaw/dist \ && PM_FILES=$(grep -l 'KILOCODE_MODELS_URL' "$OC_DIST"/provider-models-*.js 2>/dev/null || true) \ && PM_FILE_COUNT=$(printf '%s\n' "$PM_FILES" | grep -c .) \ @@ -98,7 +98,7 @@ RUN COMPOSIO_INSTALL_TAG="%40composio%2Fcli%40${COMPOSIO_CLI_VERSION}" \ # Bake bundled plugin runtime deps into OpenClaw's external stage dir so first # boot is pure startup — no npm install from `openclaw doctor` or gateway plugin # load on shared-cpu Fly machines. The stage-root naming mirrors OpenClaw -# 2026.5.22's resolveExternalBundledRuntimeDepsInstallRoot(). +# 2026.5.26's resolveExternalBundledRuntimeDepsInstallRoot(). RUN cd /usr/local/lib/node_modules/openclaw \ && OPENCLAW_PACKAGE_ROOT="$(pwd -P)" \ && OPENCLAW_PACKAGE_VERSION="$(node -p "require('./package.json').version")" \ @@ -257,8 +257,8 @@ RUN mkdir -p /root/.openclaw \ && mkdir -p /root/clawd/skills # Copy helper scripts (used at runtime by the controller/gateway) -# Build cache bust: 2026-05-28-v68-openclaw-2026.5.22 -RUN echo "13" +# Build cache bust: 2026-06-01-v69-openclaw-2026.5.26 +RUN echo "14" COPY openclaw-pairing-list.js /usr/local/bin/openclaw-pairing-list.js COPY openclaw-device-pairing-list.js /usr/local/bin/openclaw-device-pairing-list.js diff --git a/services/kiloclaw/controller/src/proxy.test.ts b/services/kiloclaw/controller/src/proxy.test.ts index 0faecf0982..3567a6018e 100644 --- a/services/kiloclaw/controller/src/proxy.test.ts +++ b/services/kiloclaw/controller/src/proxy.test.ts @@ -289,6 +289,8 @@ describe('WebSocket proxy', () => { forwarded: 'for=1.2.3.4;proto=https', 'x-forwarded-for': '1.2.3.4', 'x-forwarded-proto': 'https', + 'x-forwarded-port': '443', + 'x-forwarded-ssl': 'on', 'x-real-ip': '1.2.3.4', 'x-forwarded-host': 'claw.kilo.ai', }); @@ -344,6 +346,8 @@ describe('WebSocket proxy', () => { expect(forwarded?.['forwarded']).toBeUndefined(); expect(forwarded?.['x-forwarded-for']).toBeUndefined(); expect(forwarded?.['x-forwarded-proto']).toBeUndefined(); + expect(forwarded?.['x-forwarded-port']).toBeUndefined(); + expect(forwarded?.['x-forwarded-ssl']).toBeUndefined(); expect(forwarded?.['x-real-ip']).toBeUndefined(); expect(forwarded?.['x-forwarded-host']).toBeUndefined(); expect((clientSocket as unknown as FakeSocket).pipe).toHaveBeenCalledWith(backendSocket); diff --git a/services/kiloclaw/controller/src/proxy.ts b/services/kiloclaw/controller/src/proxy.ts index 02072d8d00..edb91621f4 100644 --- a/services/kiloclaw/controller/src/proxy.ts +++ b/services/kiloclaw/controller/src/proxy.ts @@ -253,10 +253,12 @@ export function handleWebSocketUpgrade( // isLocalDirectRequest check doesn't conclude the request came from a remote client. forwardedHeaders['host'] = `${backendHost}:${backendPort}`; delete forwardedHeaders['forwarded']; - delete forwardedHeaders['x-forwarded-for']; - delete forwardedHeaders['x-forwarded-proto']; delete forwardedHeaders['x-real-ip']; - delete forwardedHeaders['x-forwarded-host']; + for (const headerName of Object.keys(forwardedHeaders)) { + if (headerName.toLowerCase().startsWith('x-forwarded-')) { + delete forwardedHeaders[headerName]; + } + } const backendReq = http.request({ hostname: backendHost, diff --git a/services/kiloclaw/e2e/docker-image-testing.md b/services/kiloclaw/e2e/docker-image-testing.md index caefa1cc11..f513ea9db0 100644 --- a/services/kiloclaw/e2e/docker-image-testing.md +++ b/services/kiloclaw/e2e/docker-image-testing.md @@ -141,7 +141,7 @@ docker rm kiloclaw-gateway ```bash # Check versions docker run --rm kiloclaw:test node --version # v24.15.0 -docker run --rm kiloclaw:test openclaw --version # 2026.5.22 +docker run --rm kiloclaw:test openclaw --version # 2026.5.26 # Check directories docker run --rm kiloclaw:test ls -la /root/.openclaw diff --git a/services/kiloclaw/plugins/kilo-chat/package.json b/services/kiloclaw/plugins/kilo-chat/package.json index 3e47dc9d99..f24276827c 100644 --- a/services/kiloclaw/plugins/kilo-chat/package.json +++ b/services/kiloclaw/plugins/kilo-chat/package.json @@ -28,11 +28,11 @@ "test": "vitest run" }, "peerDependencies": { - "openclaw": "2026.5.22" + "openclaw": "2026.5.26" }, "devDependencies": { "esbuild": "0.25.12", - "openclaw": "2026.5.22", + "openclaw": "2026.5.26", "vitest": "catalog:" }, "dependencies": { diff --git a/services/kiloclaw/plugins/kiloclaw-morning-briefing/package.json b/services/kiloclaw/plugins/kiloclaw-morning-briefing/package.json index 6a4e27dd2c..de7e05d784 100644 --- a/services/kiloclaw/plugins/kiloclaw-morning-briefing/package.json +++ b/services/kiloclaw/plugins/kiloclaw-morning-briefing/package.json @@ -22,12 +22,12 @@ "typecheck": "tsgo --noEmit" }, "peerDependencies": { - "openclaw": "2026.5.22" + "openclaw": "2026.5.26" }, "devDependencies": { "@sinclair/typebox": "0.34.41", "esbuild": "0.25.12", - "openclaw": "2026.5.22", + "openclaw": "2026.5.26", "vitest": "catalog:" } } From ad8bfc1bd5dae2f6fcef938bbacbcced46455dcc Mon Sep 17 00:00:00 2001 From: syn Date: Mon, 1 Jun 2026 12:19:51 -0500 Subject: [PATCH 2/3] docs(kiloclaw): remove duplicate controller changelog entry --- apps/web/src/app/(app)/claw/components/changelog-data.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/apps/web/src/app/(app)/claw/components/changelog-data.ts b/apps/web/src/app/(app)/claw/components/changelog-data.ts index a7ca17169f..159652084f 100644 --- a/apps/web/src/app/(app)/claw/components/changelog-data.ts +++ b/apps/web/src/app/(app)/claw/components/changelog-data.ts @@ -16,13 +16,6 @@ export const CHANGELOG_ENTRIES: ChangelogEntry[] = [ category: 'feature', deployHint: 'redeploy_suggested', }, - { - date: '2026-06-01', - description: - 'Updated the controller so Control UI no longer requires device pairing on fresh installs.', - category: 'bugfix', - deployHint: 'redeploy_required', - }, { date: '2026-05-28', description: 'Updated OpenClaw to 2026.5.22.', From 723771f0c21a878e33da8328064d0ad900015468 Mon Sep 17 00:00:00 2001 From: syn Date: Mon, 1 Jun 2026 12:30:12 -0500 Subject: [PATCH 3/3] docs(kiloclaw): require upgrade for OpenClaw 5.26 --- apps/web/src/app/(app)/claw/components/changelog-data.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/app/(app)/claw/components/changelog-data.ts b/apps/web/src/app/(app)/claw/components/changelog-data.ts index 159652084f..ca5adee9dd 100644 --- a/apps/web/src/app/(app)/claw/components/changelog-data.ts +++ b/apps/web/src/app/(app)/claw/components/changelog-data.ts @@ -14,7 +14,7 @@ export const CHANGELOG_ENTRIES: ChangelogEntry[] = [ date: '2026-06-01', description: 'Updated OpenClaw to 2026.5.26.', category: 'feature', - deployHint: 'redeploy_suggested', + deployHint: 'upgrade_required', }, { date: '2026-05-28',