Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
738 commits
Select commit Hold shift + click to select a range
0241194
perf(test): consolidate imessage monitor tests
steipete Feb 15, 2026
b373461
refactor(security): share scan path helpers
steipete Feb 15, 2026
17588f5
fix (agents): return timeout reply on empty timed-out runs
vignesh07 Feb 15, 2026
7ed608c
chore (changelog): credit #16659 timeout fix
vignesh07 Feb 15, 2026
ffa27dd
refactor(update): dedupe package manager detection
steipete Feb 15, 2026
511ba93
refactor(heartbeat): share reply payload picker
steipete Feb 15, 2026
8725c2b
style(swift): run swiftformat + swiftlint autocorrect
steipete Feb 15, 2026
31a1615
fix(android): make lint pass
steipete Feb 15, 2026
b5c81f7
refactor(gateway): share bearer auth helper
steipete Feb 15, 2026
ae59924
refactor(cli): dedupe configure section parsing
steipete Feb 15, 2026
7a63b04
refactor(cli): share gateway service subcommands
steipete Feb 15, 2026
fa8aa84
perf(test): streamline imessage monitor tests
steipete Feb 15, 2026
6c38ffc
test(web): cover auto-reply util
steipete Feb 15, 2026
9020277
chore (changelog): note openai responses store hardening
vignesh07 Feb 15, 2026
909b541
fix (agents): force store=true for direct openai responses
vignesh07 Feb 15, 2026
28014de
refactor(browser): share common server middleware
steipete Feb 15, 2026
cc15b8c
refactor(infra): reuse lan ip picker
steipete Feb 15, 2026
3b08f30
perf(test): isolate imessage monitor tests from vmForks
steipete Feb 15, 2026
887ca60
refactor(status): share git install label formatting
steipete Feb 15, 2026
9608504
fix(build): restore daemon-cli legacy shim
steipete Feb 15, 2026
beee14d
test (agents): cover anthropic orphaned toolResult drop on provider s…
vignesh07 Feb 15, 2026
277b2de
fix (cli): harden daemon compat shim for minimal bundle exports
vignesh07 Feb 15, 2026
135899d
chore (changelog): note daemon-cli compat shim hardening
vignesh07 Feb 15, 2026
fa1aca8
fix(build): add daemon-cli bundle for legacy shim
steipete Feb 15, 2026
2facead
test (tui): cover newline preservation in submit and render paths
vignesh07 Feb 15, 2026
d815c7c
fix(build): remove duplicate daemon-cli entry
steipete Feb 15, 2026
cd53387
fix (tui): coalesce rapid git-bash submit bursts into multiline paste
vignesh07 Feb 15, 2026
7d89beb
chore (changelog): note windows git-bash multiline paste fallback
vignesh07 Feb 15, 2026
b289441
refactor(media): share response size limiter
steipete Feb 15, 2026
9f2cb3b
fix (tui): suppress false no-output placeholders for external empty f…
vignesh07 Feb 15, 2026
e96229e
chore (changelog): note tui external empty-final placeholder fix
vignesh07 Feb 15, 2026
21082f7
test(web): cover web reply delivery
steipete Feb 15, 2026
8a50936
refactor(cli): share daemon action reporting
steipete Feb 15, 2026
758fbc2
test(web): consolidate deliver reply retry coverage
steipete Feb 15, 2026
356ce76
fix (agents): suppress NO_REPLY final text when message tool already …
vignesh07 Feb 15, 2026
5c746d7
chore (changelog): credit #7010 NO_REPLY fallback fix
vignesh07 Feb 15, 2026
935ca39
refactor(auto-reply): share directive arg parsing
steipete Feb 15, 2026
3faf5ad
ci(test): raise node heap for CI vitest
steipete Feb 15, 2026
457e530
refactor(cli): share browser resize request
steipete Feb 15, 2026
a2fe3b6
fix (gateway): harden chat.send message input sanitization
vignesh07 Feb 15, 2026
186925f
chore (changelog): credit chat.send input hardening fix
vignesh07 Feb 15, 2026
21dfac9
refactor(agents): share tool call id extraction
steipete Feb 15, 2026
bbe3b2b
refactor(models): share param-B inference
steipete Feb 15, 2026
0dec234
perf(logging): split diagnostic session state module
steipete Feb 15, 2026
fac040c
fix (gateway): redact sensitive status details for non-admin scopes
vignesh07 Feb 15, 2026
0954618
chore (changelog): credit non-admin status redaction hardening
vignesh07 Feb 15, 2026
2b52ded
refactor(commands): share provider config merge helper
steipete Feb 15, 2026
64aff2d
perf(browser): isolate profile hot-reload config refresh
steipete Feb 15, 2026
48fd9d7
refactor(auto-reply): share directive handling params
steipete Feb 15, 2026
164c1a3
test(web): cover heartbeat runner branches
steipete Feb 15, 2026
f41f6d3
refactor(channels): share allowlist user resolve helpers
steipete Feb 15, 2026
c2deba3
test(web): extend crypto error util coverage
steipete Feb 15, 2026
b93aa7f
refactor(plugins): dedupe plugin SDK alias lookup
steipete Feb 15, 2026
47beace
refactor(status): dedupe update status formatting
steipete Feb 15, 2026
1b8dd2e
perf(web): consolidate heartbeat runner tests
steipete Feb 15, 2026
29bec2b
refactor(cli): dedupe plugin install config wiring
steipete Feb 15, 2026
ca97c47
test(web): expand send API coverage
steipete Feb 15, 2026
4295ff7
refactor(web): dedupe heartbeat ok sender
steipete Feb 15, 2026
12c37a9
test(web): cover deliver reply media kinds
steipete Feb 15, 2026
c1ad0e8
refactor(cli): dedupe browser tab listing output
steipete Feb 15, 2026
10e6d92
refactor(web): dedupe group gating history capture
steipete Feb 15, 2026
50b7607
refactor(gateway): dedupe ws log meta formatting
steipete Feb 15, 2026
a14d275
refactor(agents): dedupe exec spawn fallback wiring
steipete Feb 15, 2026
e163883
refactor(signal): share reaction send helper
steipete Feb 15, 2026
21df9eb
refactor(outbound): share deliver payload params
steipete Feb 15, 2026
91c041e
refactor(pairing): share allowFrom normalization
steipete Feb 15, 2026
ef1f98e
refactor(agents): dedupe portal CLI credential parsing
steipete Feb 15, 2026
45f7ef1
refactor(line): dedupe route resolution
steipete Feb 15, 2026
2fe16af
refactor(gateway): dedupe agent file request resolution
steipete Feb 15, 2026
a457782
fix(gateway): avoid unsafe param stringification
steipete Feb 15, 2026
2f4b91d
refactor(agents): dedupe subagent announce cleanup
steipete Feb 15, 2026
485b78b
refactor(web-fetch): dedupe firecrawl payload builder
steipete Feb 15, 2026
806c8b3
refactor(agents): share turn validation skeleton
steipete Feb 15, 2026
628c7b2
refactor(slack): dedupe allowlist match selection
steipete Feb 15, 2026
c46f395
refactor(gateway): dedupe config raw validation
steipete Feb 15, 2026
b8f66c2
Agents: add nested subagent orchestration controls and reduce subagen…
tyler6204 Feb 15, 2026
adee048
refactor(commands): dedupe moonshot api key prompt
steipete Feb 15, 2026
ed03b83
refactor(agents): dedupe model fallback candidate logic
steipete Feb 15, 2026
7793f2e
refactor(pairing): dedupe allow-from store updates
steipete Feb 15, 2026
2c5e24c
refactor(gateway): dedupe session usage file resolution
steipete Feb 15, 2026
bdc3e44
refactor(subagents): share formatting helpers
steipete Feb 15, 2026
26bf041
refactor(agents): dedupe subagent announce flow
steipete Feb 15, 2026
55b7100
refactor(commands): dedupe workspace config prompt
steipete Feb 15, 2026
a4bf619
refactor(agents): share toolResult details stripping
steipete Feb 15, 2026
6491182
refactor(cli): dedupe browser download command
steipete Feb 15, 2026
2bd672f
refactor(discord): dedupe component context + reaction timing
steipete Feb 15, 2026
6217561
refactor(commands): dedupe provider config + default model helpers
steipete Feb 15, 2026
cc2a63c
refactor(config): dedupe exec/fs zod schemas
steipete Feb 15, 2026
4950fcf
refactor(gateway): share IPv4 input validator
steipete Feb 15, 2026
6c7a7d9
refactor(gateway): dedupe probe auth resolution
steipete Feb 15, 2026
99da4c8
refactor(commands): dedupe moonshot non-interactive auth
steipete Feb 15, 2026
ebb54d7
refactor(memory): share batch create retry
steipete Feb 15, 2026
261e2c1
refactor(commands): dedupe model scan sorting
steipete Feb 15, 2026
600260e
refactor(gateway): dedupe web login provider checks
steipete Feb 15, 2026
57d0130
refactor(auto-reply): dedupe session usage patch updates
steipete Feb 15, 2026
a39a5a3
refactor(slack): dedupe outbound hook handling
steipete Feb 15, 2026
ceacc26
refactor(auto-reply): dedupe command arg formatting
steipete Feb 15, 2026
aa2d74a
refactor(commands): dedupe OpenAI default model apply
steipete Feb 15, 2026
eb79785
refactor(line): share channel access token resolver
steipete Feb 15, 2026
2c1a4dd
refactor(auto-reply): dedupe inline action command handling
steipete Feb 15, 2026
6e1b3ac
refactor(config): dedupe WhatsApp group + ack types
steipete Feb 15, 2026
913b137
refactor(discord): dedupe reaction listener params
steipete Feb 15, 2026
cb2f978
refactor(agents): share model alias line builder
steipete Feb 15, 2026
46392e0
refactor(browser): dedupe role snapshot parsing
steipete Feb 15, 2026
dec28e5
refactor(subagents): share token usage formatting
steipete Feb 15, 2026
cbd9395
ci(protocol): regenerate swift protocol models
steipete Feb 15, 2026
d306d59
fix(agents): don't force store=true for codex responses
vignesh07 Feb 15, 2026
229376f
test: stabilize respawn + subagent usage assertions
vignesh07 Feb 15, 2026
b65b3c6
fix(telegram): include voice transcript in body text instead of raw a…
Limitless2023 Feb 15, 2026
2fc479b
fix: apply telegram voice transcript body substitution (#16789) (than…
obviyus Feb 15, 2026
80abb5a
fix(telegram): stop dropping voice messages on getFile network errors…
yinghaosang Feb 15, 2026
216f4d4
refactor(line): dedupe schedule card header + bubble
steipete Feb 15, 2026
108ea43
refactor(daemon): share quoted arg splitter
steipete Feb 15, 2026
fcd2eca
refactor(commands): share provider catalog config helper
steipete Feb 15, 2026
37aaca0
refactor(discord): share component DM auth context
steipete Feb 15, 2026
fa47262
perf(test): use prebuilt hook install fixtures
steipete Feb 15, 2026
5c7869a
refactor(daemon-cli): dedupe not-loaded hints
steipete Feb 15, 2026
b9cbe71
refactor(agents): dedupe gateway config write params
steipete Feb 15, 2026
b838429
refactor(status): share emoji/homepage resolver
steipete Feb 15, 2026
8a4f9f1
refactor(agents): share sandboxed session tool context
steipete Feb 15, 2026
428b6e0
refactor(web): share creds json reader
steipete Feb 15, 2026
d7079b5
refactor(security): share sandbox tool policy picker
steipete Feb 15, 2026
d80ccdb
refactor(plugin-sdk): dedupe file lock release
steipete Feb 15, 2026
2944c7d
refactor(slack): dedupe onboarding config patching
steipete Feb 15, 2026
360b73b
refactor(discord): dedupe onboarding config patching
steipete Feb 15, 2026
26b3859
refactor(infra): dedupe provider api key resolution
steipete Feb 15, 2026
052d988
test(auto-reply): move inbound provider contract test into unit suite
steipete Feb 15, 2026
9e2233d
refactor(gateway): dedupe json endpoint prelude
steipete Feb 15, 2026
ab6f080
refactor(commands): share provider config merge wrapper
steipete Feb 15, 2026
abf36dd
doc: Remove agent submission policy
Takhoffman Feb 15, 2026
9f99786
refactor(gateway): share rpc attachment normalization
steipete Feb 15, 2026
80e5aeb
refactor(tts): dedupe provider error formatting
steipete Feb 15, 2026
18342b0
refactor(node-host): dedupe exec finished event emission
steipete Feb 15, 2026
0d47bea
refactor(memory): dedupe embedding batch runner options
steipete Feb 15, 2026
c1cc28a
refactor(gateway): share broadcast function types
steipete Feb 15, 2026
df7fff8
test: add serial macmini test profile
Takhoffman Feb 15, 2026
9d7113c
refactor(channels): share allowlist config patch helper
steipete Feb 15, 2026
26a831e
refactor(commands): dedupe auth choice agent model notes
steipete Feb 15, 2026
abb4b7c
refactor(line): share messaging client setup
steipete Feb 15, 2026
7d0c0bf
refactor(media): share outbound attachment resolver
steipete Feb 15, 2026
3d0e568
refactor(infra): share jsonl socket requester
steipete Feb 15, 2026
0931a35
fix(sessions): guard withSessionStoreLock against undefined storePath…
lailoo Feb 15, 2026
42b0d6f
refactor(agents): share workspace dir enumeration
steipete Feb 15, 2026
384a886
refactor(cli): share commander reparse helper
steipete Feb 15, 2026
7b39aa3
refactor(auto-reply): reuse inline directive clearer
steipete Feb 15, 2026
ebf44f5
refactor(auto-reply): dedupe on/off/full normalization
steipete Feb 15, 2026
0c29ffa
refactor(agents): dedupe forward-compat template clone
steipete Feb 15, 2026
0f86ee5
refactor(agents): dedupe sentence break scanning
steipete Feb 15, 2026
d458131
refactor(cli): dedupe approvals allowlist actions
steipete Feb 15, 2026
b060afd
refactor(cli): dedupe directory table rendering
steipete Feb 15, 2026
a580883
refactor(config): dedupe irc schema refinements
steipete Feb 15, 2026
1a75813
refactor(cli): share configure section runner
steipete Feb 15, 2026
af34c8f
refactor(onboard): share local workspace+gateway config
steipete Feb 15, 2026
33a3a56
refactor(auto-reply): share agent-runner test harness mocks
steipete Feb 15, 2026
34b6c74
refactor(shared): share requirements eval for remote context
steipete Feb 15, 2026
85b267a
refactor(agents): dedupe exec spawn and process failures
steipete Feb 15, 2026
893d2fb
refactor(test): share audio provider ssrf hooks
steipete Feb 15, 2026
dd11a6b
refactor(test): share sessions_spawn e2e harness
steipete Feb 15, 2026
6ec76af
refactor(test): share slack slash mocks
steipete Feb 15, 2026
e2c68cb
refactor(test): share plugin hook registry helper
steipete Feb 15, 2026
a7b6555
refactor(test): share memory embedding mocks
steipete Feb 15, 2026
9a344da
fix(cron): treat missing enabled as true in update() (openclaw#15477)…
eternauta1337 Feb 15, 2026
723e314
fix(ci): avoid vitest TDZ in shared mocks
steipete Feb 15, 2026
bd9d35c
chore: remove defensive logic
gumadeiras Feb 15, 2026
d3d82a1
refactor(test): share google-shared test helpers
steipete Feb 15, 2026
8b2a567
refactor(test): reuse command test harness
steipete Feb 15, 2026
a69e827
fix(telegram): stream replies in-place without duplicate final sends
obviyus Feb 15, 2026
86df160
fix: telegram stream preview finalizes in place (#17218) (thanks @obv…
obviyus Feb 15, 2026
fe27215
refactor(test): share web broadcast-groups harness
steipete Feb 15, 2026
71c1d09
refactor(test): share memory embedding fixture
steipete Feb 15, 2026
beffb6f
refactor(test): dedupe session-memory hook setup
steipete Feb 15, 2026
3c97ec7
refactor(test): dedupe followup queue test setup
steipete Feb 15, 2026
89dccc7
cron: infer payload kind for model-only update patches (openclaw#1566…
rodrigouroz Feb 15, 2026
e2f7365
refactor(test): share signal receive harness
steipete Feb 15, 2026
3e7800b
refactor(test): dedupe onboarding gateway prompter
steipete Feb 15, 2026
53ffc30
refactor(test): simplify onboarding wizard scaffolding
steipete Feb 15, 2026
4f8a2ed
refactor(test): dedupe telegram dispatch scaffolding
steipete Feb 15, 2026
7ecc105
refactor(test): dedupe monitor inbox quoted reply checks
steipete Feb 15, 2026
831fb0a
refactor(test): dedupe model directive persist setup
steipete Feb 15, 2026
75f3b50
refactor(test): dedupe telegram bot mention scaffolding
steipete Feb 15, 2026
c211fd1
fix(subagents): add model fallback support to sessions_spawn tool (#1…
misterdas Feb 15, 2026
0f4036b
refactor(test): share line auto-reply deps
steipete Feb 15, 2026
88cac59
refactor(test): dedupe update runner stable command mocks
steipete Feb 15, 2026
fa4c282
refactor(test): dedupe models list provider filter cases
steipete Feb 15, 2026
88caa4b
chore(cron): simplify enabled checks for lint
gumadeiras Feb 15, 2026
2e64cbd
chore(memory): tighten embedding harness types
gumadeiras Feb 15, 2026
3d38e56
refactor(test): dedupe hook transform skip assertions
steipete Feb 15, 2026
6565ec2
gateway: return actionable error for send channel webchat (openclaw#1…
rodrigouroz Feb 15, 2026
1911942
fix: make sensitive field whitelist case-insensitive (#16148)
akramcodez Feb 15, 2026
7ea14a1
refactor(test): share status transcript log writer
steipete Feb 15, 2026
ade11ec
fix(announce): use deterministic idempotency keys to prevent duplicat…
widingmarcus-cyber Feb 15, 2026
ee331e8
refactor(test): share heartbeat sandbox
steipete Feb 15, 2026
d979c6c
refactor(test): simplify heartbeat model override tests
steipete Feb 15, 2026
2b143de
refactor(test): dedupe ghost reminder assertions
steipete Feb 15, 2026
e683353
refactor(test): share corrupt session fixture
steipete Feb 15, 2026
e687ad1
refactor(test): share server chat event harness
steipete Feb 15, 2026
75d22b2
refactor(test): dedupe cron legacy job setup
steipete Feb 15, 2026
df95ddc
Fix/agent session key normalization (openclaw#15707) thanks @rodrigouroz
rodrigouroz Feb 15, 2026
c6c6e9f
refactor(test): share sandbox fs bridge builder
steipete Feb 15, 2026
0c57f5e
refactor(test): share google assistant message builders
steipete Feb 15, 2026
e927fd1
fix: allow agent workspace directories in media local roots (#17136)
MisterGuy420 Feb 15, 2026
30eacd3
refactor(test): dedupe slack slash mocks
steipete Feb 15, 2026
afc333c
refactor(slack): dedupe event system-event emit
steipete Feb 15, 2026
cd225c1
refactor(gateway): dedupe wizard status schema
steipete Feb 15, 2026
7323953
refactor(gateway): share device signature reject path
steipete Feb 15, 2026
e7f65b4
refactor(infra): dedupe exec allowlist analysis failure
steipete Feb 15, 2026
47462ee
refactor(infra): share login shell env exec
steipete Feb 15, 2026
41d053a
refactor(discord): dedupe application fetch
steipete Feb 15, 2026
c3340a3
refactor(outbound): dedupe delivery mirror type
steipete Feb 15, 2026
77db65d
refactor(hooks): dedupe gmail option types
steipete Feb 15, 2026
234d69f
refactor(browser): dedupe request record lookup
steipete Feb 15, 2026
933a994
refactor(telegram): dedupe group auth checks
steipete Feb 15, 2026
1843bcf
refactor(gateway): share host header parsing
steipete Feb 15, 2026
cc0bfa0
fix(telegram): restore thread_id=1 handling for DMs (regression from …
garnetlyx Feb 15, 2026
6b65a05
refactor(telegram): dedupe media download
steipete Feb 15, 2026
e89c7b7
refactor(infra): dedupe update checkout step
steipete Feb 15, 2026
95355ba
refactor(agents): dedupe memory tool config
steipete Feb 15, 2026
9203a2f
Discord: CV2! (#16364)
thewilloftheshadow Feb 15, 2026
d4c7b05
refactor(models): dedupe fallback key parsing
steipete Feb 15, 2026
910e1e5
fix(models): type fallback key helper
steipete Feb 15, 2026
c1bf994
refactor(slack): dedupe onboarding token prompts
steipete Feb 15, 2026
ac75cc3
refactor(auto-reply): dedupe session touch
steipete Feb 15, 2026
f4782e1
refactor(agents): dedupe session write lock release
steipete Feb 15, 2026
d238483
refactor(models): dedupe auth order context
steipete Feb 15, 2026
d4476c6
refactor(sandbox): dedupe session resolution
steipete Feb 15, 2026
5457f6e
refactor(sandbox): dedupe prune loops
steipete Feb 15, 2026
afa5444
refactor(sandbox): dedupe sandbox list helpers
steipete Feb 15, 2026
a767777
refactor(skills): dedupe env overrides
steipete Feb 15, 2026
8da9924
refactor(routing): dedupe binding match parsing
steipete Feb 15, 2026
3a3bfa7
refactor(auto-reply): reuse exec directive clearer
steipete Feb 15, 2026
dda3026
refactor(line): dedupe schedule card header
steipete Feb 15, 2026
94eb506
refactor(sessions): reuse session key classifier
steipete Feb 15, 2026
b4f1600
refactor(channels): dedupe discord channel lookup
steipete Feb 15, 2026
9adccca
Outbound: scope core send media roots by agent (#17268)
gumadeiras Feb 15, 2026
3783cd3
refactor(plugins): share empty registry factory
steipete Feb 15, 2026
aa4d212
refactor(auto-reply): share cleared exec fields
steipete Feb 15, 2026
fe303fc
refactor(cli): reuse skill missing summary
steipete Feb 15, 2026
08f16da
refactor(config): dedupe bindings migrations
steipete Feb 15, 2026
bf61d94
refactor(cli): dedupe daemon install finalize
steipete Feb 15, 2026
2da512e
refactor(agent): centralize fallback run helpers
sebslight Feb 15, 2026
10feda1
refactor(reply-tests): share harness mock bundle
sebslight Feb 15, 2026
6277698
test(discord): fix updated test harness mocks
sebslight Feb 15, 2026
b567ba5
fix(sandbox): allow registry entries without agent scope
sebslight Feb 15, 2026
9143f33
refactor(tools): dedupe alsoAllow merge
steipete Feb 15, 2026
6e36d95
refactor(config): share agent model schema
steipete Feb 15, 2026
fabe480
refactor(line): dedupe config schema
steipete Feb 15, 2026
c906121
fix(line): build config schema from common base
steipete Feb 15, 2026
4c9ad4d
Merge origin/main into fix/guardrail-interface-e2e-followups
nwinter Feb 15, 2026
b3c0c91
agents: align process timeout param typing with schema
nwinter Feb 15, 2026
a7a14f6
test(discord): invalidate session store cache to fix flaky test
tediferJones Feb 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
56 changes: 56 additions & 0 deletions .github/workflows/sandbox-common-smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Sandbox Common Smoke

on:
push:
branches: [main]
paths:
- Dockerfile.sandbox
- Dockerfile.sandbox-common
- scripts/sandbox-common-setup.sh
pull_request:
paths:
- Dockerfile.sandbox
- Dockerfile.sandbox-common
- scripts/sandbox-common-setup.sh

concurrency:
group: sandbox-common-smoke-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true

jobs:
sandbox-common-smoke:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: false

- name: Build minimal sandbox base (USER sandbox)
shell: bash
run: |
set -euo pipefail

docker build -t openclaw-sandbox-smoke-base:bookworm-slim - <<'EOF'
FROM debian:bookworm-slim
RUN useradd --create-home --shell /bin/bash sandbox
USER sandbox
WORKDIR /home/sandbox
EOF

- name: Build sandbox-common image (root for installs, sandbox at runtime)
shell: bash
run: |
set -euo pipefail

BASE_IMAGE="openclaw-sandbox-smoke-base:bookworm-slim" \
TARGET_IMAGE="openclaw-sandbox-common-smoke:bookworm-slim" \
PACKAGES="ca-certificates" \
INSTALL_PNPM=0 \
INSTALL_BUN=0 \
INSTALL_BREW=0 \
FINAL_USER=sandbox \
scripts/sandbox-common-setup.sh

u="$(docker run --rm openclaw-sandbox-common-smoke:bookworm-slim sh -lc 'id -un')"
test "$u" = "sandbox"
204 changes: 163 additions & 41 deletions CHANGELOG.md

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions Dockerfile.sandbox-common
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
ARG BASE_IMAGE=openclaw-sandbox:bookworm-slim
FROM ${BASE_IMAGE}

USER root

ENV DEBIAN_FRONTEND=noninteractive

ARG PACKAGES="curl wget jq coreutils grep nodejs npm python3 git ca-certificates golang-go rustc cargo unzip pkg-config libasound2-dev build-essential file"
ARG INSTALL_PNPM=1
ARG INSTALL_BUN=1
ARG BUN_INSTALL_DIR=/opt/bun
ARG INSTALL_BREW=1
ARG BREW_INSTALL_DIR=/home/linuxbrew/.linuxbrew
ARG FINAL_USER=sandbox

ENV BUN_INSTALL=${BUN_INSTALL_DIR}
ENV HOMEBREW_PREFIX=${BREW_INSTALL_DIR}
ENV HOMEBREW_CELLAR=${BREW_INSTALL_DIR}/Cellar
ENV HOMEBREW_REPOSITORY=${BREW_INSTALL_DIR}/Homebrew
ENV PATH=${BUN_INSTALL_DIR}/bin:${BREW_INSTALL_DIR}/bin:${BREW_INSTALL_DIR}/sbin:${PATH}

RUN apt-get update \
&& apt-get install -y --no-install-recommends ${PACKAGES} \
&& rm -rf /var/lib/apt/lists/*

RUN if [ "${INSTALL_PNPM}" = "1" ]; then npm install -g pnpm; fi

RUN if [ "${INSTALL_BUN}" = "1" ]; then \
curl -fsSL https://bun.sh/install | bash; \
ln -sf "${BUN_INSTALL_DIR}/bin/bun" /usr/local/bin/bun; \
fi

RUN if [ "${INSTALL_BREW}" = "1" ]; then \
if ! id -u linuxbrew >/dev/null 2>&1; then useradd -m -s /bin/bash linuxbrew; fi; \
mkdir -p "${BREW_INSTALL_DIR}"; \
chown -R linuxbrew:linuxbrew "$(dirname "${BREW_INSTALL_DIR}")"; \
su - linuxbrew -c "NONINTERACTIVE=1 CI=1 /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)'"; \
if [ ! -e "${BREW_INSTALL_DIR}/Library" ]; then ln -s "${BREW_INSTALL_DIR}/Homebrew/Library" "${BREW_INSTALL_DIR}/Library"; fi; \
if [ ! -x "${BREW_INSTALL_DIR}/bin/brew" ]; then echo \"brew install failed\"; exit 1; fi; \
ln -sf "${BREW_INSTALL_DIR}/bin/brew" /usr/local/bin/brew; \
fi

# Default is sandbox, but allow BASE_IMAGE overrides to select another final user.
USER ${FINAL_USER}

6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,9 @@ Full security guide: [Security](https://docs.openclaw.ai/gateway/security)

Default behavior on Telegram/WhatsApp/Signal/iMessage/Microsoft Teams/Discord/Google Chat/Slack:

- **DM pairing** (`dmPolicy="pairing"` / `channels.discord.dm.policy="pairing"` / `channels.slack.dm.policy="pairing"`): unknown senders receive a short pairing code and the bot does not process their message.
- **DM pairing** (`dmPolicy="pairing"` / `channels.discord.dmPolicy="pairing"` / `channels.slack.dmPolicy="pairing"`; legacy: `channels.discord.dm.policy`, `channels.slack.dm.policy`): unknown senders receive a short pairing code and the bot does not process their message.
- Approve with: `openclaw pairing approve <channel> <code>` (then the sender is added to a local allowlist store).
- Public inbound DMs require an explicit opt-in: set `dmPolicy="open"` and include `"*"` in the channel allowlist (`allowFrom` / `channels.discord.dm.allowFrom` / `channels.slack.dm.allowFrom`).
- Public inbound DMs require an explicit opt-in: set `dmPolicy="open"` and include `"*"` in the channel allowlist (`allowFrom` / `channels.discord.allowFrom` / `channels.slack.allowFrom`; legacy: `channels.discord.dm.allowFrom`, `channels.slack.dm.allowFrom`).

Run `openclaw doctor` to surface risky/misconfigured DM policies.

Expand Down Expand Up @@ -360,7 +360,7 @@ Details: [Security guide](https://docs.openclaw.ai/gateway/security) · [Docker
### [Discord](https://docs.openclaw.ai/channels/discord)

- Set `DISCORD_BOT_TOKEN` or `channels.discord.token` (env wins).
- Optional: set `commands.native`, `commands.text`, or `commands.useAccessGroups`, plus `channels.discord.dm.allowFrom`, `channels.discord.guilds`, or `channels.discord.mediaMaxMb` as needed.
- Optional: set `commands.native`, `commands.text`, or `commands.useAccessGroups`, plus `channels.discord.allowFrom`, `channels.discord.guilds`, or `channels.discord.mediaMaxMb` as needed.

```json5
{
Expand Down
10 changes: 10 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ Reports without reproduction steps, demonstrated impact, and remediation advice
OpenClaw is a labor of love. There is no bug bounty program and no budget for paid reports. Please still disclose responsibly so we can fix issues quickly.
The best way to help the project right now is by sending PRs.

## Maintainers: GHSA Updates via CLI

When patching a GHSA via `gh api`, include `X-GitHub-Api-Version: 2022-11-28` (or newer). Without it, some fields (notably CVSS) may not persist even if the request returns 200.

## Out of Scope

- Public Internet Exposure
Expand All @@ -51,6 +55,12 @@ For threat model + hardening guidance (including `openclaw security audit --deep

- `https://docs.openclaw.ai/gateway/security`

### Tool filesystem hardening

- `tools.exec.applyPatch.workspaceOnly: true` (recommended): keeps `apply_patch` writes/deletes within the configured workspace directory.
- `tools.fs.workspaceOnly: true` (optional): restricts `read`/`write`/`edit`/`apply_patch` paths to the workspace directory.
- Avoid setting `tools.exec.applyPatch.workspaceOnly: false` unless you fully trust who can trigger tool execution.

### Web Interface Safety

OpenClaw's web interface (Gateway Control UI + HTTP endpoints) is intended for **local use only**.
Expand Down
Loading
Loading