Skip to content

Commit f6e7c8f

Browse files
chore: update agent version
1 parent 6829e89 commit f6e7c8f

9 files changed

Lines changed: 41 additions & 69 deletions

File tree

‎.github/workflows/deepseek-harness-release.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
inputs:
77
dshVersion:
88
description: "@deepseek-ai/dsh npm version"
9-
default: "0.2.0-rc.2"
9+
default: "0.2.1-rc.2"
1010
required: true
1111
platforms:
1212
description: "Platforms"

‎.github/workflows/hermes-agent-release.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
inputs:
77
hermesAgentTag:
88
description: "Hermes Agent release tag"
9-
default: "0.21.6"
9+
default: "0.22.2"
1010
required: true
1111
platforms:
1212
description: "Platforms"

‎.github/workflows/openclaw-release.yml‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ on:
88
workflow_dispatch:
99
inputs:
1010
openclawTag:
11-
default: "2026.9.9"
12-
description: "OpenClaw release and Docker Hub tag, for example 2026.9.9"
11+
default: "2026.10.5"
12+
description: "OpenClaw release and Docker Hub tag, for example 2026.10.5"
1313
required: true
1414
pushLatest:
1515
description: "Push latest tag"
@@ -94,9 +94,10 @@ jobs:
9494
mkdir -p _src/openclaw
9595
curl -fsSL "https://github.com/openclaw/openclaw/archive/refs/tags/v${{ needs.resolve.outputs.openclaw_tag }}.tar.gz" \
9696
| tar -xz -C _src/openclaw --strip-components=1
97+
test -d _src/openclaw/examples || { echo "::error::OpenClaw source is missing examples/. Check openclawTag matches this Dockerfile."; exit 1; }
9798
test -d _src/openclaw/packages || { echo "::error::OpenClaw source is missing packages/. Check openclawTag matches this Dockerfile."; exit 1; }
9899
test -f _src/openclaw/node-version.mjs || { echo "::error::OpenClaw source is missing node-version.mjs. Check openclawTag matches this Dockerfile."; exit 1; }
99-
for required_file in cli-root-options.mjs gateway-run-argv.mjs gateway-shutdown-budget.mjs node-host-launcher.mjs node-compile-cache.mjs docker-entrypoint.mjs scripts/lib/fs-safe-prebuild.mjs scripts/lib/javascript-statements.mjs; do
100+
for required_file in cli-root-options.mjs gateway-run-argv.mjs gateway-shutdown-budget.mjs node-host-launcher.mjs node-compile-cache.mjs node-runtime-env.mjs docker-entrypoint.mjs scripts/lib/fs-safe-prebuild.mjs scripts/lib/javascript-statements.mjs scripts/docker/copy-bootstrap-scripts.mjs scripts/lib/guard-inventory-utils.mjs; do
100101
test -f "_src/openclaw/$required_file" || { echo "::error::OpenClaw source is missing $required_file. Check openclawTag matches this Dockerfile."; exit 1; }
101102
done
102103
test -f _src/openclaw/scripts/docker/verify-native-addons.sh || { echo "::error::OpenClaw source is missing scripts/docker/verify-native-addons.sh. Check openclawTag matches this Dockerfile."; exit 1; }
@@ -146,9 +147,10 @@ jobs:
146147
mkdir -p _src/openclaw
147148
curl -fsSL "https://github.com/openclaw/openclaw/archive/refs/tags/v${{ needs.resolve.outputs.openclaw_tag }}.tar.gz" \
148149
| tar -xz -C _src/openclaw --strip-components=1
150+
test -d _src/openclaw/examples || { echo "::error::OpenClaw source is missing examples/. Check openclawTag matches this Dockerfile."; exit 1; }
149151
test -d _src/openclaw/packages || { echo "::error::OpenClaw source is missing packages/. Check openclawTag matches this Dockerfile."; exit 1; }
150152
test -f _src/openclaw/node-version.mjs || { echo "::error::OpenClaw source is missing node-version.mjs. Check openclawTag matches this Dockerfile."; exit 1; }
151-
for required_file in cli-root-options.mjs gateway-run-argv.mjs gateway-shutdown-budget.mjs node-host-launcher.mjs node-compile-cache.mjs docker-entrypoint.mjs scripts/lib/fs-safe-prebuild.mjs scripts/lib/javascript-statements.mjs; do
153+
for required_file in cli-root-options.mjs gateway-run-argv.mjs gateway-shutdown-budget.mjs node-host-launcher.mjs node-compile-cache.mjs node-runtime-env.mjs docker-entrypoint.mjs scripts/lib/fs-safe-prebuild.mjs scripts/lib/javascript-statements.mjs scripts/docker/copy-bootstrap-scripts.mjs scripts/lib/guard-inventory-utils.mjs; do
152154
test -f "_src/openclaw/$required_file" || { echo "::error::OpenClaw source is missing $required_file. Check openclawTag matches this Dockerfile."; exit 1; }
153155
done
154156
test -f _src/openclaw/scripts/docker/verify-native-addons.sh || { echo "::error::OpenClaw source is missing scripts/docker/verify-native-addons.sh. Check openclawTag matches this Dockerfile."; exit 1; }

‎deepseek-harness/Caddyfile‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,6 @@ https://{$CADDY_ACCESS_HOST}:8443 {
2222
@unexpected_origin `{http.request.header.Origin} != "" && {http.request.header.Origin} != "https://" + {http.request.hostport}`
2323
@settings_api path /api/settings.describe /api/settings.update /api/settings.replace /api/settings.mutate /api/credentials.describe /api/credentials.set /api/credentials.unset /api/llm.discoverModels
2424

25-
route /dsh-deployment.js {
26-
header {
27-
Content-Type "application/javascript; charset=utf-8"
28-
Cache-Control "no-store"
29-
}
30-
respond "globalThis.__DSH_AUTHENTICATED_SETTINGS__ = true;" 200
31-
}
32-
3325
route @settings_api {
3426
respond @unexpected_origin "Forbidden" 403
3527
reverse_proxy 127.0.0.1:3080 {

‎deepseek-harness/Dockerfile‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ FROM caddy:2.11.4 AS caddy
22

33
FROM node:24-bookworm-slim AS dsh-builder
44

5-
ARG DSH_VERSION=0.2.0-rc.2
5+
ARG DSH_VERSION=0.2.1-rc.2
66

77
RUN apt-get update && \
88
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \

‎deepseek-harness/docker-entrypoint.sh‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ gosu node env \
6767
DSH_TELEMETRY_DISABLED=1 \
6868
ONEPANEL_DSH_AUTH_PROXY=1 \
6969
node --expose-internals /usr/local/lib/node_modules/@deepseek-ai/dsh/lib/bin.js \
70-
web --host 127.0.0.1 --port 3080 \
70+
web --no-open --host 127.0.0.1 --port 3080 \
7171
--trusted-host 127.0.0.1:3080 "$access_host" &
7272
dsh_pid=$!
7373
pids+=("$dsh_pid")

‎deepseek-harness/patch-dsh-authenticated-settings.mjs‎

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { dirname, join, resolve } from 'node:path'
44

55
const dshRoot = resolve(process.argv[2] ?? '/usr/local/lib/node_modules/@deepseek-ai/dsh')
66
const requireFromDsh = createRequire(join(dshRoot, 'package.json'))
7-
const flag = 'globalThis.__DSH_AUTHENTICATED_SETTINGS__ === true'
87
const proxyAuthFlag = 'process.env.ONEPANEL_DSH_AUTH_PROXY === "1"'
98

109
async function packageRoot(name) {
@@ -22,49 +21,21 @@ function replaceOnce(source, original, replacement, label) {
2221
return source.replace(original, replacement)
2322
}
2423

25-
const settingsPath = join(
26-
await packageRoot('@deepseek-ai/dsh-client-ui-settings'),
27-
'lib/client.js',
28-
)
29-
let settings = await readFile(settingsPath, 'utf8')
30-
settings = replaceOnce(
31-
settings,
32-
'const persistence = ctx.remote.$host.isLoopback ? "host" : "memory";',
33-
`const persistence = ctx.remote.$host.isLoopback || ${flag} ? "host" : "memory";`,
34-
'settings persistence',
35-
)
36-
await writeFile(settingsPath, settings, 'utf8')
37-
24+
// DSH 0.2.1 persists settings through remote.settings for authenticated clients.
25+
// Only adapt browser authentication for the loopback backend protected by Caddy.
3826
const connectionPath = join(
3927
await packageRoot('@deepseek-ai/dsh-client-connection'),
4028
'lib/index.js',
4129
)
4230
let connection = await readFile(connectionPath, 'utf8')
4331
connection = replaceOnce(
4432
connection,
45-
'isAuthenticated(request) {\n\t\tconst authority = requestAuthority(request.headers);',
46-
`isAuthenticated(request) {\n\t\tif (${proxyAuthFlag}) return true;\n\t\tconst authority = requestAuthority(request.headers);`,
33+
'isAuthenticated(request, secure = false) {\n\t\treturn this.authenticate(request, secure)?.version === COOKIE_PAYLOAD_VERSION;',
34+
`isAuthenticated(request, secure = false) {\n\t\tif (${proxyAuthFlag}) return true;\n\t\treturn this.authenticate(request, secure)?.version === COOKIE_PAYLOAD_VERSION;`,
4735
'browser proxy authentication',
4836
)
4937
await writeFile(connectionPath, connection, 'utf8')
5038

51-
const frontendPath = join(
52-
await packageRoot('@deepseek-ai/dsh-web-frontend'),
53-
'dist/index.html',
54-
)
55-
let frontend = await readFile(frontendPath, 'utf8')
56-
const bootstrap = '<script src="/dsh-deployment.js"></script>'
57-
const moduleScripts = frontend.match(/ <script type="module"[^>]*><\/script>/gu) ?? []
58-
if (moduleScripts.length !== 1 || frontend.includes(bootstrap)) {
59-
throw new Error(`unexpected frontend source shape: module=${moduleScripts.length}`)
60-
}
61-
frontend = frontend.replace(moduleScripts[0], ` ${bootstrap}\n${moduleScripts[0]}`)
62-
await writeFile(frontendPath, frontend, 'utf8')
63-
64-
if (
65-
(settings.split(flag).length - 1) !== 1 ||
66-
(connection.split(proxyAuthFlag).length - 1) !== 1 ||
67-
!frontend.includes(`${bootstrap}\n${moduleScripts[0]}`)
68-
) {
69-
throw new Error('authenticated settings patch verification failed')
39+
if ((connection.split(proxyAuthFlag).length - 1) !== 1) {
40+
throw new Error('browser proxy authentication patch verification failed')
7041
}

‎hermes-agent/Dockerfile‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# syntax=docker/dockerfile:1.7
22

3-
ARG BASE_IMAGE=nousresearch/hermes-agent:v0.21.6
3+
ARG BASE_IMAGE=nousresearch/hermes-agent:v0.22.2
44
FROM ${BASE_IMAGE}
55

66
LABEL org.opencontainers.image.source="https://github.com/1Panel-dev/runtime" \

‎openclaw/Dockerfile‎

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ ARG OPENCLAW_BUN_IMAGE="docker.io/oven/bun:1.4.2@sha256:9114c058aeae42162ee16dd5
3333
FROM ${OPENCLAW_NODE_BOOKWORM_IMAGE} AS workspace-deps
3434
ARG OPENCLAW_EXTENSIONS
3535
ARG OPENCLAW_BUNDLED_PLUGIN_DIR
36-
# Copy package.json files for workspace packages used by the install layer.
36+
# Frozen installs validate every lockfile importer's manifest, including unselected plugins.
37+
# Stage all workspace manifests, then filter dependency installation separately.
3738
# Manifest-only bundled plugins remain valid selections but need no workspace metadata.
3839
# Use COPY because build-context bind mounts are unreliable across supported
3940
# Podman/Buildah hosts. Full trees stay in this disposable stage; later stages
@@ -42,28 +43,21 @@ COPY scripts/lib/docker-plugin-selection.mjs /tmp/docker-plugin-selection.mjs
4243
COPY scripts/lib/root-package-bundled-plugin-excludes.mjs /tmp/root-package-bundled-plugin-excludes.mjs
4344
COPY package.json /tmp/package.json
4445
COPY packages /tmp/packages
46+
COPY examples /tmp/examples
4547
COPY ${OPENCLAW_BUNDLED_PLUGIN_DIR} /tmp/${OPENCLAW_BUNDLED_PLUGIN_DIR}
46-
RUN mkdir -p /out/packages "/out/${OPENCLAW_BUNDLED_PLUGIN_DIR}" && \
47-
for manifest in /tmp/packages/*/package.json; do \
48+
RUN mkdir -p /out/packages /out/examples "/out/${OPENCLAW_BUNDLED_PLUGIN_DIR}" && \
49+
for manifest in /tmp/packages/*/package.json /tmp/examples/*/package.json "/tmp/${OPENCLAW_BUNDLED_PLUGIN_DIR}"/*/package.json; do \
4850
[ -f "$manifest" ] || continue; \
49-
pkg_dir="${manifest%/package.json}"; \
50-
pkg_name="${pkg_dir##*/}"; \
51-
mkdir -p "/out/packages/$pkg_name" && \
52-
cp "$manifest" "/out/packages/$pkg_name/package.json"; \
51+
manifest_path="${manifest#/tmp/}"; \
52+
mkdir -p "/out/${manifest_path%/package.json}" && \
53+
cp "$manifest" "/out/$manifest_path"; \
5354
done && \
5455
node /tmp/docker-plugin-selection.mjs "/tmp/${OPENCLAW_BUNDLED_PLUGIN_DIR}" "$OPENCLAW_EXTENSIONS" \
5556
> /out/openclaw-selected-plugin-dirs && \
5657
node /tmp/docker-plugin-selection.mjs "/tmp/${OPENCLAW_BUNDLED_PLUGIN_DIR}" "$OPENCLAW_EXTENSIONS" \
5758
--required-platform-packages > /out/openclaw-required-platform-packages && \
5859
node /tmp/docker-plugin-selection.mjs "/tmp/${OPENCLAW_BUNDLED_PLUGIN_DIR}" "$OPENCLAW_EXTENSIONS" \
59-
--required-bundled /tmp/package.json > /tmp/openclaw-workspace-plugin-dirs && \
60-
while IFS= read -r ext; do \
61-
ext_dir="/tmp/${OPENCLAW_BUNDLED_PLUGIN_DIR}/$ext"; \
62-
if [ -f "$ext_dir/package.json" ]; then \
63-
mkdir -p "/out/${OPENCLAW_BUNDLED_PLUGIN_DIR}/$ext" && \
64-
cp "$ext_dir/package.json" "/out/${OPENCLAW_BUNDLED_PLUGIN_DIR}/$ext/package.json"; \
65-
fi; \
66-
done < /tmp/openclaw-workspace-plugin-dirs
60+
--required-bundled /tmp/package.json > /out/openclaw-workspace-plugin-dirs
6761

6862
# Shared manifest-only inputs. Both installs start without node_modules so pnpm
6963
# never has to rename a dependency directory inherited from an OverlayFS layer.
@@ -79,6 +73,7 @@ COPY node-version.mjs ./
7973
COPY node-sqlite.mjs ./
8074
COPY node-runtime-update.mjs ./
8175
COPY node-runtime-recovery.mjs ./
76+
COPY node-runtime-env.mjs ./
8277
COPY cli-root-options.mjs gateway-run-argv.mjs gateway-shutdown-budget.mjs ./
8378
COPY node-host-launcher.mjs ./
8479
COPY node-compile-cache.mjs ./
@@ -95,15 +90,21 @@ COPY scripts/docker/verify-fs-safe-native.mjs ./scripts/docker/verify-fs-safe-na
9590
COPY scripts/docker/verify-native-addons.sh ./scripts/docker/verify-native-addons.sh
9691

9792
COPY --from=workspace-deps /out/packages/ ./packages/
93+
COPY --from=workspace-deps /out/examples/ ./examples/
9894
COPY --from=workspace-deps /out/${OPENCLAW_BUNDLED_PLUGIN_DIR}/ ./${OPENCLAW_BUNDLED_PLUGIN_DIR}/
95+
COPY --from=workspace-deps /out/openclaw-workspace-plugin-dirs /tmp/openclaw-workspace-plugin-dirs
9996
COPY --from=workspace-deps /out/openclaw-selected-plugin-dirs /tmp/openclaw-selected-plugin-dirs
10097
COPY --from=workspace-deps /out/openclaw-required-platform-packages /tmp/openclaw-required-platform-packages
10198

10299
# Production dependencies are installed separately so runtime assets never
103100
# depend on pruning an inherited development node_modules tree.
104101
FROM dependency-inputs AS production-deps
105102
RUN --mount=type=cache,id=openclaw-pnpm-store,target=/root/.local/share/pnpm/store,sharing=locked \
106-
NODE_OPTIONS=--max-old-space-size=2048 pnpm install --frozen-lockfile --prod \
103+
set -eu; set -- --filter . --filter ./ui --filter './packages/*'; \
104+
while IFS= read -r ext; do \
105+
set -- "$@" --filter "./${OPENCLAW_BUNDLED_PLUGIN_DIR}/$ext"; \
106+
done < /tmp/openclaw-workspace-plugin-dirs; \
107+
NODE_OPTIONS=--max-old-space-size=2048 pnpm install --frozen-lockfile --prod "$@" \
107108
--config.supportedArchitectures.os=linux \
108109
--config.supportedArchitectures.cpu="$(node -p 'process.arch')" \
109110
--config.supportedArchitectures.libc=glibc
@@ -121,6 +122,8 @@ COPY --from=bun-binary /usr/local/bin/bun /usr/local/bin/bun
121122

122123
# Reduce OOM risk on low-memory hosts during dependency installation.
123124
# Docker builds on small VMs may otherwise fail with "Killed" (exit 137).
125+
# Source asset preparation builds external plugins before runtime pruning.
126+
# Its build dependencies stay in this disposable stage; production remains filtered.
124127
RUN --mount=type=cache,id=openclaw-pnpm-store,target=/root/.local/share/pnpm/store,sharing=locked \
125128
NODE_OPTIONS=--max-old-space-size=2048 pnpm install --frozen-lockfile \
126129
--config.supportedArchitectures.os=linux \
@@ -226,7 +229,8 @@ RUN node scripts/postinstall-bundled-plugins.mjs && \
226229
-name 'claude-agent-sdk-linux-*' -exec rm -rf {} +; \
227230
fi && \
228231
node --input-type=module -e 'await import("grammy")' && \
229-
node scripts/check-package-dist-imports.mjs /app
232+
node scripts/check-package-dist-imports.mjs /app && \
233+
node scripts/docker/copy-bootstrap-scripts.mjs /app/.runtime-bootstrap
230234

231235
FROM ${OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE} AS base-runtime
232236
ARG OPENCLAW_NODE_BOOKWORM_SLIM_DIGEST
@@ -280,11 +284,14 @@ COPY --from=runtime-assets --chown=node:node /app/node-version.mjs .
280284
COPY --from=runtime-assets --chown=node:node /app/node-sqlite.mjs .
281285
COPY --from=runtime-assets --chown=node:node /app/node-runtime-update.mjs .
282286
COPY --from=runtime-assets --chown=node:node /app/node-runtime-recovery.mjs .
287+
COPY --from=runtime-assets --chown=node:node /app/node-runtime-env.mjs .
283288
COPY --from=runtime-assets --chown=node:node /app/cli-root-options.mjs /app/gateway-run-argv.mjs /app/gateway-shutdown-budget.mjs ./
284289
COPY --from=runtime-assets --chown=node:node /app/node-host-launcher.mjs .
285290
COPY --from=runtime-assets --chown=node:node /app/node-compile-cache.mjs .
286291
COPY --from=runtime-assets --chown=node:node /app/docker-entrypoint.mjs .
287292
COPY --from=runtime-assets --chown=node:node /app/openclaw.mjs .
293+
COPY --from=runtime-assets --chown=node:node /app/.runtime-bootstrap/scripts ./scripts
294+
COPY --from=runtime-assets --chown=node:node /app/scripts/lib/guard-inventory-utils.mjs ./scripts/lib/
288295
COPY --from=runtime-assets --chown=node:node /app/${OPENCLAW_BUNDLED_PLUGIN_DIR} ./${OPENCLAW_BUNDLED_PLUGIN_DIR}
289296
COPY --from=runtime-assets --chown=node:node /app/skills ./skills
290297
COPY --from=runtime-assets --chown=node:node /app/docs ./docs

0 commit comments

Comments
 (0)