feat(kiloclaw): bump openclaw to version 2026.3.1#728
Open
kilo-code-bot[bot] wants to merge 1 commit intomainfrom
Open
feat(kiloclaw): bump openclaw to version 2026.3.1#728kilo-code-bot[bot] wants to merge 1 commit intomainfrom
kilo-code-bot[bot] wants to merge 1 commit intomainfrom
Conversation
Contributor
Author
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (1 file)
|
b1c5583 to
a480c3d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Bumps openclaw from
2026.2.26to2026.3.1inkiloclaw/Dockerfile.The following changes in this release may require attention for our deployment:
Agents/Thinking defaults — Sets
adaptiveas the default thinking level for Anthropic Claude 4.6 models (including Bedrock Claude 4.6 refs). If we use Claude 4.6 models, this may change agent behavior and potentially increase token costs.OpenAI/Streaming transport — Makes
openaiResponses WebSocket-first by default (transport: "auto"with SSE fallback). If our environment has WebSocket connectivity restrictions or if any tooling relied on SSE being the default, this could cause issues.ACP/ACPX streaming — Pins ACPX plugin support to
0.1.15. If we use ACPX plugins, they may need to be updated to match this pinned version.Docker/Image permissions — Normalizes
/app/extensions,/app/.agent, and/app/.agentsto directory mode755and file mode644during image build. If our deployment relies on specific permissions for plugin discovery in those paths, this could affect behavior.Sandbox/Browser Docker — Passes
OPENCLAW_BROWSER_NO_SANDBOX=1to sandbox browser containers and bumps the sandbox browser security hash epoch. Existing sandbox browser containers will be recreated on upgrade — expect a brief disruption to browser-based tool usage on first deploy.Gateway/WS — Closes repeated post-handshake
unauthorized role:*request floods per connection. If any of our connected clients were previously sending repeated unauthorized requests that were tolerated, they will now be disconnected.Release Notes
openclaw v2026.3.1 full release notes
Changes
adaptiveas the default thinking level for Anthropic Claude 4.6 models (including Bedrock Claude 4.6 refs) while keeping other reasoning-capable models atlowunless explicitly configured./health,/healthz,/ready,/readyz) for Docker/Kubernetes health checks, with fallback routing so existing handlers on those paths are not shadowed. (#31272) Thanks @vincentkoc.camera.list,device.permissions,device.health, andnotifications.actions(open/dismiss/reply) on Android nodes, plus first-class node-tool actions for the new device/notification commands. (#28260) Thanks @obviyus.idleHours, default 24h) plus optional hardmaxAgeHourslifecycle controls, and add/session idle+/session max-agecommands for focused thread-bound sessions. (#27845) Thanks @osolmaz.direct+ topic config (allowlists,dmPolicy,skills,systemPrompt,requireTopic), route DM topics as distinct inbound/outbound sessions, and enforce topic-aware authorization/debounce for messages, callbacks, commands, and reactions. Landed from contributor PR #30579 by @kesor. Thanks @kesor.openaiResponses WebSocket-first by default (transport: "auto"with SSE fallback), add shared OpenAI WS stream/connection runtime wiring with per-session cleanup, and preserve server-side compaction payload mutation (store+context_management) on the WS path.system.notify,photos.latest,contacts.search/contacts.add,calendar.events/calendar.add, andmotion.activity/motion.pedometer, with motion sensor-aware command gating and improved activity sampling reliability. (#29398) Thanks @obviyus.openclaw config fileto print the active config file path resolved fromOPENCLAW_CONFIG_PATHor the default location. (#26256) thanks @cyb1278588254.feishu_docactions for Docx table creation/cell writing (create_table,write_table_cells,create_table_with_values) and image/file uploads (upload_image,upload_file) with stricter create/upload error handling for missingdocument_idand placeholder cleanup failures. (#20304) Thanks @xuhao1.im.message.reaction.created_v1handling, route verified reactions through synthetic inbound turns, and harden verification with timeout + fail-closed filtering so non-bot or unverified reactions are dropped. (#16716) Thanks @schumilin.feishu_chattool actions for chat info and member queries, with configurable enablement underchannels.feishu.tools.chat. (#14674) Thanks @liuweifly.feishu_doccreate and report permission metadata only when the grant call succeeds, with regression coverage for success/failure/omitted-owner paths. (#28295) Thanks @zhoulongchao77.de) locale support and auto-render language options from supported locale constants in Overview settings. (#28495) thanks @dsantoreis.diffsplugin tool for read-only diff rendering from before/after text or unified patches, with gateway viewer URLs for canvas and PNG image output. Thanks @gumadeiras.baseUrland embedding dimensions for LanceDB memory. (#17874) Thanks @rish2jain and @vincentkoc.0.1.15, add configurable ACPX command/version probing, and streamline ACP stream delivery (final_onlydefault + reduced tool-event noise) with matching runtime and test updates. (#30036) Thanks @osolmaz.OPENCLAW_SHELLacross shell-like runtimes (exec,acp,acp-client,tui-local) so shell startup/config rules can target OpenClaw contexts consistently, and document the markers in env/exec/acp/TUI docs. Thanks @vincentkoc.--light-contextfor cron agent turns andagents.*.heartbeat.lightContextfor heartbeat), keeping onlyHEARTBEAT.mdfor heartbeat runs and skipping bootstrap-file injection for cron lightweight runs. (#26064) Thanks @jose-velez.response.createwithgenerate:false), enable it by default foropenai/*, and exposeparams.openaiWsWarmupfor per-model enable/disable control.task_completion) that are rendered consistently across direct and queued announce paths, with gateway/CLI plumbing for structuredinternalEvents.Fixes
facing=bothwhendeviceIdis set to avoid mislabeled duplicate captures, allow notificationopen/replyon non-clearable entries while still gating dismiss, trigger listener rebind before notification actions, and scale invoke-result ack timeout to invoke budget for large clip payloads. (#28260) Thanks @obviyus.spawn EINVALon Windows npm/npx invocations by resolving tonode+ npm CLI scripts instead of spawning.cmddirectly. Landed from contributor PR #31147 by @codertony. Thanks @codertony.audio/mp4(notvideo/mp4) by checking the MPEG-4ftypmajor brand (M4A/M4B), restoring voice transcription for LINE voice messages. Landed from contributor PR #31151 by @scoootscooob. Thanks @scoootscooob.accountIdinstead of defaulting to bot-token context. Landed from contributor PR #31028 by @taw0002. Thanks @taw0002.READ_MEDIA_VISUAL_USER_SELECTED) and align Android permission/settings paths with current minSdk behavior for more reliable permission state handling.delivery.modeis"none"so cron output is not sent to Telegram or other channels. (#21808) Thanks @lailoo.cron listoutput by renamingAgenttoAgent IDand adding aModelcolumn for isolated agent-turn jobs. (#26259) Thanks @openperf.mediaUrl/mediaUrlspayloads as attachments alongside text/streamed replies in the reply dispatcher, including legacy fallback whenmediaUrlsis empty. (#28959) Thanks @icesword0760.SLACK_USER_TOKENenv + config) so monitor reads, Slack actions, directory lookups, onboarding allow-from resolution, and capabilities probing consistently use the effective user token. (#28103) Thanks @Glucksberg.oc_identifiers are always group chats, honor explicitdm:/group:prefixes foroc_chat IDs, and default ambiguous bareoc_targets to direct routing to avoid DM session misclassification. (#10407) Thanks @Bermudarat.group,group_sender,group_topic,group_topic_sender) with legacytopicSessionMode=enabledcompatibility so Feishu group conversations can isolate sessions by sender/topic as configured. (#17798) Thanks @yfge.replyInThreadconfig (disabled|enabled) for group replies, propagatereply_in_threadacross text/card/media/streaming sends, and align topic-scoped session routing so newly created reply threads stay on the same session root. (#27325) Thanks @kcinzgg.probeFeishu()bot-info results for 10 minutes (bounded cache with per-account keying) to reduce repeated status/onboarding probe API calls, while bypassing cache for failures and exceptions. (#28907) Thanks @Glucksberg..opusattachments withmsg_type: "audio"(instead of"media") so Feishu voice messages deliver correctly while.mp4remainsmsg_type: "media"and documents remainmsg_type: "file". (#28269) Thanks @Glucksberg.message_type: "media"as video-equivalent for media key extraction, placeholder inference, and media download resolution so mobile-app video sends ingest correctly. (#25502) Thanks @4ier.sender_id.user_idwhensender_id.open_idis missing on inbound events, and use ID-type-aware sender lookup so mobile-delivered messages keep stable sender identity/routing. (#26703) Thanks @NewdlDewdl.parent_idandroot_idasReplyToId/RootMessageIdin inbound context, and parse interactive-card quote bodies into readable text when fetching replied messages. (#18529) Thanks @qiangu.mediatags from inbound rich-text (post) messages and download embedded video/audio files alongside existing embedded-image handling, with regression coverage. (#21786) Thanks @laopuhuluwa.mediaLocalRootsthrough Feishu outbound media sending intoloadWebMediaso local path attachments work with post-CVE local-root enforcement. (#27884) Thanks @joelnishanth.channels.feishu.groups["*"]when no explicit group match exists so unmatched groups inherit wildcard reply-policy settings instead of falling back to global defaults. (#29456) Thanks @WaynePika.imagestaysimage, non-image maps tofile) to prevent reintroducing unsupported Feishutype=audiofetches. (#16311, #8746) Thanks @Yaxuan42.audioAsVoicerouting for Feishu and WhatsApp (in addition to Telegram) so supported channels receive voice-bubble playback instead of file-style audio attachments. (#27366) Thanks @smthfoxy.system.notifydefault allowlist, emitnotifications.changedevents for posted/removed notifications (excluding OpenClaw app-owned notifications), canonicalize notification session keys before enqueue/wake routing, and skip heartbeat wakes when consecutive notification summaries dedupe. (#29440) Thanks @obviyus.channels.feishu.defaultAccountoutbound routing support with schema validation, keep quoted-message extraction text-first (post/interactive/file placeholders instead of raw JSON), route Feishu video sends asmsg_type: "file", and avoid websocket event blocking by using non-blocking event handling in monitor dispatch. Landed from contributor PRs #29610, #30432, #30331, and #29501. Thanks @hclsys, @bmendonca3, @patrick-yingxi-pan, and @zwffff.share_chatpayload summaries when available and add explicit parsing for rich-textcode/code_block/pretags so forwarded and code-heavy messages keep useful context in agent input. (#28591) Thanks @kevinWangSheng.postpayloads through a shared markdown-aware parser with locale-wrapper support, preserved mention/image metadata extraction, and inline/fenced code fidelity for agent input rendering. (#12755) Thanks @WilsonLiu95./agentstatus(Slack-reserved/status) so manifest slash command registration stays valid while text/statusstill works. Landed from contributor PR #29032 by @maloqab. Thanks @maloqab.camera.clipHTTP-upload fallback to base64 so clip transport is deterministic and fail-loud, and reject non-positivemaxWidthvalues so invalid inputs fall back to the safe resize default. (#28229) Thanks @obviyus.node.canvas.capability.refreshwith objectparams({}) from Android node runtime so gateway object-schema validation accepts refresh retries and A2UI host recovery works after scoped capability expiry. (#28413) Thanks @obviyus.gateway.controlUi.allowedOrigins: ["*"]wildcard entries (including trimmed values) and lock behavior with regression tests. Landed from contributor PR #31058 by @byungsker. Thanks @byungsker.sessions.list.pathvalues and per-agent{agentId}templates when derivingtranscriptPath, so cross-agent session listings resolve to concrete agent session files instead of workspace-relative paths. (#24775) Thanks @martinfrancois.Permission deniedfailures (exit 127) on affected installs. (#17151) Thanks @sskyu and @vincentkoc.npm packoutput is empty by detecting newly created.tgzarchives in the pack directory. (#21039) Thanks @graysurf and @vincentkoc.launchctl kickstart -kduring intentional supervised restarts to bypass LaunchAgentThrottleIntervaldelays, and fall back to in-process restart when kickstart fails. Landed from contributor PR #29078 by @cathrynlavery. Thanks @cathrynlavery.NODE_EXTRA_CA_CERTSto/etc/ssl/cert.pem(while preserving explicit overrides) so HTTPS clients no longer fail with local-issuer errors under launchd. (#27915) Thanks @Lukavyi.channels.feishu.reactionNotifications(off | own | all, defaultown) so operators can disable reaction ingress or allow all verified reaction events (not only bot-authored message reactions). (#28529) Thanks @cowboy129.429,99991400,99991403) and detect SDK non-throwing backoff responses so the typing keepalive circuit breaker can stop retries instead of looping indefinitely. (#28494) Thanks @guoqunabc.console.log/errorusage in Feishu typing-indicator paths and Zalo monitor paths with runtime-gated logger calls so verbosity controls are respected while preserving typing backoff behavior. (#18841) Thanks @Clawborn.channels.feishu.groupSenderAllowFromsender authorization for group chats, with per-groupgroups.<id>.allowFromprecedence and regression coverage for allow/block/precedence behavior. (#29174) Thanks @1MoreBuild.document.converthits content limits, while keeping fenced-code-aware split boundaries whenever possible. (#14402) Thanks @lml2468.typingIndicatorandresolveSenderNamesconfig flags (top-level and per-account) so operators can disable typing reactions and sender-name lookup requests while keeping default behavior unchanged. (#10513) Thanks @BigUncle.System:context. Landed from contributor PR #31209 by @stakeswky. Thanks @stakeswky.lastTo/lastChannelroutes for internal/non-deliverable turns, with added coverage for no-fallback internal routing behavior. Landed from contributor PR #30941 by @graysurf. Thanks @graysurf.NO_REPLYtoken from mixed-content messages instead of leaking raw control text to end users. Landed from contributor PR #31080 by @scoootscooob. Thanks @scoootscooob.--omit=optionalwhen globalnpm updatefails so optional dependency install failures no longer abort update flows. (#24896) Thanks @xinhuagu and @vincentkoc.account_idin trusted inbound metadata so multi-account channel sessions can reliably disambiguate the receiving account in prompt context. Landed from contributor PR #30984 by @Stxle2. Thanks @Stxle2./modelprofile suffixes at the first@after the last slash so email-based auth profile IDs (for example OAuth profile IDs) resolve correctly. Landed from contributor PR #30932 by @haosenwang1018. Thanks @haosenwang1018.delivery: { mode: "none" }from cron editor for both add and update flows so previous announce delivery is actually cleared. Landed from contributor PR #31145 by @byungsker. Thanks @byungsker.think=offto avoid hard failure during model/provider fallback chains. Landed from contributor PR #31002 by @yfge. Thanks @yfge.baseUrlover model defaults for embedded Ollama runs so Docker and remote-host setups avoid localhost fetch failures. (#30964) Thanks @stakeswky.tpmsubstrings by matching TPM as a standalone token/phrase and keeping auth-context errors on the auth path. Landed from contributor PR #31007 by @HOYALIM. Thanks @HOYALIM.unauthorized role:*request floods per connection and sample duplicate rejection logs, preventing a single misbehaving client from degrading gateway responsiveness. (#20168) Thanks @acy103, @vibecodooor, and @vincentkoc.config setfor OllamaapiKeywithout predeclared provider config. (#29299) Thanks @vincentkoc.warntodebugto reduce noisy warnings in normal edge-case discovery flows. (#26379) Thanks @byungsker./app/extensions,/app/.agent, and/app/.agentsto directory mode755and file mode644during image build so plugin discovery does not block inherited world-writable paths. (#30191) Fixes #30139. Thanks @edincampara.baseUrlas non-direct, honorcompat.supportsStore=false, and auto-inject server-side compactioncontext_managementfor compatible direct OpenAI models (with per-model opt-out/threshold overrides). Landed from contributor PRs #16930 (@OiPunk), #22441 (@EdwardWu7), and #25088 (@MoerAI). Thanks @OiPunk, @EdwardWu7, and @MoerAI.OPENCLAW_BROWSER_NO_SANDBOX=1to sandbox browser containers and bump sandbox browser security hash epoch so existing containers are recreated and pick up the env on upgrade. (#29879) Thanks @Lukavyi.prompt_tokensalias inputs) so/usageand TUI usage displays cannot show nonsensical negative counts. Landed from contributor PR #31211 by @scoootscooob. Thanks @scoootscooob.token/keyvalues to canonicaltokenRef/keyRefbefore persistence, and keep explicitkeyRefprecedence when inline refs are also present. Landed from contributor PR #31047 by @minupla. Thanks @minupla.Path escapes workspace rootfailure path instead of surfacing a misleading access/file-not-found error when editing outside workspace roots. Landed from contributor PR #31015 by @haosenwang1018. Thanks @haosenwang1018.urlas an alias parameter foropenandnavigate. (#29260) Thanks @vincentkoc.Weekinstead ofDay. (#26267) Thanks @Sid-Qin.syncMessagepresence (includingnull) as sync envelope traffic so replayed sentTranscript payloads cannot bypass loop guards after daemon restart. Landed from contributor PR #31138 by @Sid-Qin. Thanks @Sid-Qin.EISDIRtext never leaks to messaging surfaces, with regression tests for both root-scoped and direct safe reads. Landed from contributor PR #31205 by @polooooo. Thanks @polooooo.cannot create directoriesfailures in sandbox write mode. (#30610) Thanks @glitch418x.198.18.0.0/15) for trusted web-tool fetch endpoints so proxy fake-IP networking modes do not trigger false SSRF blocks. Landed from contributor PR #31176 by @sunkinux. Thanks @sunkinux.