Robin Waslander
dafd61b5c1
fix(gateway): enforce caller-scope subsetting in device.token.rotate
...
device.token.rotate accepted attacker-controlled scopes and forwarded
them to rotateDeviceToken without verifying the caller held those
scopes. A pairing-scoped token could rotate up to operator.admin on
any already-paired device whose approvedScopes included admin.
Add a caller-scope subsetting check before rotateDeviceToken: the
requested scopes must be a subset of client.connect.scopes via the
existing roleScopesAllow helper. Reject with missing scope: <scope>
if not.
Also add server.device-token-rotate-authz.test.ts covering both the
priv-esc path and the admin-to-node-invoke chain.
Fixes GHSA-4jpw-hj22-2xmc
2026-03-11 14:16:59 +01:00
Vincent Koc
04e103d10e
fix(terminal): stabilize skills table width across Terminal.app and iTerm ( #42849 )
...
* Terminal: measure grapheme display width
* Tests: cover grapheme terminal width
* Terminal: wrap table cells by grapheme width
* Tests: cover emoji table alignment
* Terminal: refine table wrapping and width handling
* Terminal: stop shrinking CLI tables by one column
* Skills: use Terminal-safe emoji in list output
* Changelog: note terminal skills table fixes
* Skills: normalize emoji presentation across outputs
* Terminal: consume unsupported escape bytes in tables
2026-03-11 09:13:10 -04:00
Andyliu
10e6e27451
fix(models): guard optional model input capabilities ( #42096 )
...
Merged via squash.
Prepared head SHA: d398fa0222
Co-authored-by: andyliu <2377291+andyliu@users.noreply.github.com >
Co-authored-by: hydro13 <6640526+hydro13@users.noreply.github.com >
Reviewed-by: @hydro13
2026-03-11 13:43:59 +01:00
Nimrod Gutman
144c1b802b
macOS/onboarding: prompt for remote gateway auth tokens ( #43100 )
...
Merged via squash.
Prepared head SHA: 00e2ad847b
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Reviewed-by: @ngutman
2026-03-11 13:53:19 +02:00
Luke
f063e57d4b
fix(macos): use foundationValue when serializing browser proxy POST body ( #43069 )
...
Merged via squash.
Prepared head SHA: 04c33fa061
Co-authored-by: ImLukeF <1272861+Effet@users.noreply.github.com >
Co-authored-by: frankekn <4488090+frankekn@users.noreply.github.com >
Reviewed-by: @frankekn
2026-03-11 19:14:01 +08:00
Nimrod Gutman
2d91284fdb
feat(ios): add local beta release flow ( #42991 )
...
Merged via squash.
Prepared head SHA: 82b38fe93b
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Reviewed-by: @ngutman
2026-03-11 12:32:28 +02:00
Frank Yang
665f677265
docs(changelog): update context pruning PR reference
2026-03-11 18:07:37 +08:00
Frank Yang
d68d4362ee
fix(context-pruning): cover image-only tool-result pruning
2026-03-11 18:07:37 +08:00
ademczuk
dc4441322f
fix(agents): include azure-openai in Responses API store override ( #42934 )
...
Merged via squash.
Prepared head SHA: d3285fef41
Co-authored-by: ademczuk <5212682+ademczuk@users.noreply.github.com >
Co-authored-by: frankekn <4488090+frankekn@users.noreply.github.com >
Reviewed-by: @frankekn
2026-03-11 16:16:10 +08:00
Ayaan Zaidi
a2e30824e6
fix(telegram): fall back on ambiguous first preview sends
2026-03-11 11:23:10 +05:30
Wayne
e37e1ed24e
fix(telegram): prevent duplicate messages with slow LLM providers ( #41932 )
...
Merged via squash.
Prepared head SHA: 2f50c51d5a
Co-authored-by: hougangdev <105773686+hougangdev@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-03-11 11:19:55 +05:30
Luke
7761e7626f
Providers: add Opencode Go support ( #42313 )
...
* feat(providers): add opencode-go provider support and onboarding
* Onboard: unify OpenCode auth handling openclaw#42313 thanks @ImLukeF
* Docs: merge OpenCode Zen and Go docs openclaw#42313 thanks @ImLukeF
* Update CHANGELOG.md
---------
Co-authored-by: Ubuntu <ubuntu@vps-90352893.vps.ovh.ca >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-03-11 01:31:06 -04:00
Luke
061b8258bc
macOS: add chat model selector and persist thinking ( #42314 )
...
* feat(macos): add chat model selector and thinking persistence UX
* Chat UI: carry session model providers
* Docs: add macOS model selector changelog
* macOS: persist extended thinking levels
* Chat UI: keep model picker state in sync
* Chat UI tests: cover model selection races
---------
Co-authored-by: Ubuntu <ubuntu@vps-90352893.vps.ovh.ca >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-03-11 00:43:04 -04:00
Peter Steinberger
c91d1622d5
fix(gateway): split conversation reset from admin reset
2026-03-11 02:50:44 +00:00
Peter Steinberger
0ab8d20917
docs(changelog): note interpreter approval hardening
2026-03-11 02:45:10 +00:00
Josh Avant
0125ce1f44
Gateway: fail closed unresolved local auth SecretRefs ( #42672 )
...
* Gateway: fail closed unresolved local auth SecretRefs
* Docs: align node-host gateway auth precedence
* CI: resolve rebase breakages in checks lanes
* Tests: isolate LOCAL_REMOTE_FALLBACK_TOKEN env state
* Gateway: remove stale remote.enabled auth-surface semantics
* Changelog: note gateway SecretRef fail-closed fix
2026-03-10 21:41:56 -05:00
Peter Steinberger
aad014c7c1
fix: harden subagent control boundaries
2026-03-11 01:44:38 +00:00
Peter Steinberger
7289c19f1a
fix(security): bind system.run approvals to exact argv text
2026-03-11 01:25:31 +00:00
Peter Steinberger
8eac939417
fix(security): enforce target account configWrites
2026-03-11 01:24:36 +00:00
Peter Steinberger
11924a7026
fix(sandbox): pin fs-bridge staged writes
2026-03-11 01:15:47 +00:00
Peter Steinberger
702f6f3305
fix: fail closed for unresolved local gateway auth refs
2026-03-11 01:14:06 +00:00
Peter Steinberger
ecdbd8aa52
fix(security): restrict leaf subagent control scope
2026-03-11 01:12:22 +00:00
Peter Steinberger
f604cbedf3
fix: remove stale allowlist matcher cache
2026-03-11 00:00:04 +00:00
Josh Avant
36d2ae2a22
SecretRef: harden custom/provider secret persistence and reuse ( #42554 )
...
* Models: gate custom provider keys by usable secret semantics
* Config: project runtime writes onto source snapshot
* Models: prevent stale apiKey preservation for marker-managed providers
* Runner: strip SecretRef marker headers from resolved models
* Secrets: scan active agent models.json path in audit
* Config: guard runtime-source projection for unrelated configs
* Extensions: fix onboarding type errors in CI
* Tests: align setup helper account-enabled expectation
* Secrets audit: harden models.json file reads
* fix: harden SecretRef custom/provider secret persistence (#42554 ) (thanks @joshavant)
2026-03-10 23:55:10 +00:00
Peter Steinberger
658cf4bd94
fix: harden archive extraction destinations
2026-03-10 23:49:35 +00:00
Peter Steinberger
201420a7ee
fix: harden secret-file readers
2026-03-10 23:40:10 +00:00
David Guttman
b517dc089a
feat(discord): add autoArchiveDuration config option ( #35065 )
...
* feat(discord): add autoArchiveDuration config option
Add config option to control auto-archive duration for auto-created threads:
- autoArchiveDuration: 60 (default), 1440, 4320, or 10080
- Sets archive duration in minutes (1hr/1day/3days/1week)
- Accepts both string and numeric values
- Discord's default was 60 minutes (hardcoded)
Example config:
```yaml
channels:
discord:
guilds:
GUILD_ID:
channels:
CHANNEL_ID:
autoThread: true
autoArchiveDuration: 10080 # 1 week
```
* feat(discord): add autoArchiveDuration changelog entry (#35065 ) (thanks @davidguttman)
---------
Co-authored-by: Onur <onur@textcortex.com >
2026-03-10 23:13:24 +01:00
Josh Avant
a76e810193
fix(gateway): harden token fallback/reconnect behavior and docs ( #42507 )
...
* fix(gateway): harden token fallback and auth reconnect handling
* docs(gateway): clarify auth retry and token-drift recovery
* fix(gateway): tighten auth reconnect gating across clients
* fix: harden gateway token retry (#42507 ) (thanks @joshavant)
2026-03-10 17:05:57 -05:00
Matt Van Horn
5ed96da990
fix(browser): surface 429 rate limit errors with actionable hints ( #40491 )
...
Merged via squash.
Prepared head SHA: 13839c2dbd
Co-authored-by: mvanhorn <455140+mvanhorn@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-11 00:49:31 +03:00
Pejman Pour-Moezzi
7c76acafd6
fix(acp): scope cancellation and event routing by runId ( #41331 )
2026-03-10 22:37:21 +01:00
PonyX-lab
53374394fb
Fix stale runtime model reuse on session reset ( #41173 )
...
Merged via squash.
Prepared head SHA: d8a04a466a
Co-authored-by: PonyX-lab <266766228+PonyX-lab@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-03-10 14:02:43 -07:00
David Guttman
9f5dee32f6
fix(acp): implicit streamToParent for mode=run without thread ( #42404 )
...
* fix(acp): implicit streamToParent for mode=run without thread
When spawning ACP sessions with mode=run and no thread binding,
automatically route output to parent session instead of Discord.
This enables agent-to-agent supervision patterns where the spawning
agent wants results returned programmatically, not posted as chat.
The change makes sessions_spawn with runtime=acp and thread=false
behave like direct acpx invocation - output goes to the spawning
session, not to Discord.
Fixes the issue where mode=run without thread still posted to Discord
because hasDeliveryTarget was true when called from a Discord context.
* fix: use resolved spawnMode instead of params.mode
Move implicit streamToParent check to after resolveSpawnMode so that
both explicit mode="run" and omitted mode (which defaults to "run"
when thread is false) correctly trigger parent routing.
This fixes the issue where callers that rely on default mode selection
would not get the intended parent streaming behavior.
* fix: tighten implicit ACP parent relay gating (#42404 ) (thanks @davidguttman)
---------
Co-authored-by: Onur Solmaz <2453968+osolmaz@users.noreply.github.com >
2026-03-10 21:42:15 +01:00
Peter Steinberger
6d4241cbd9
fix: wire modelstudio env discovery ( #40634 ) (thanks @pomelo-nwu)
2026-03-10 19:58:43 +00:00
Mariano Belinky
67746a12de
iOS: add welcome home canvas
2026-03-10 21:44:00 +02:00
Altay
0ff184397d
docs(telegram): clarify group and sender allowlists ( #42451 )
...
Merged via squash.
Prepared head SHA: f30cacafb3
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 21:56:30 +03:00
Josh Avant
b205de6154
Docs: add changelog entry for SecretRef traversal ( #42455 )
2026-03-10 13:52:50 -05:00
Josh Avant
0687e04760
fix: thread runtime config through Discord/Telegram sends ( #42352 ) (thanks @joshavant) ( #42352 )
2026-03-10 13:30:57 -05:00
Yufeng He
c2d9386796
fix: log auth profile resolution failures instead of swallowing silently ( #41271 )
...
Merged via squash.
Prepared head SHA: 049d1e119a
Co-authored-by: he-yufeng <40085740+he-yufeng@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 20:38:49 +03:00
JiangNan
e9e8b81939
fix(failover): classify Gemini MALFORMED_RESPONSE as retryable timeout ( #42292 )
...
Merged via squash.
Prepared head SHA: 68f106ff49
Co-authored-by: jnMetaCode <12096460+jnMetaCode@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 20:34:32 +03:00
jiarung
bc9b35d6ce
fix(logging): include model and provider in overload/error log ( #41236 )
...
Merged via squash.
Prepared head SHA: bb16fecbf7
Co-authored-by: jiarung <16461359+jiarung@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 20:32:14 +03:00
Ayaan Zaidi
3b582f1d54
fix(telegram): chunk long html outbound messages ( #42240 )
...
Merged via squash.
Prepared head SHA: 4d79c41ddf
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-03-10 22:53:04 +05:30
CryUshio
8bf64f219a
fix: recognize Poe 402 'used up your points' as billing for fallback ( #42278 )
...
Merged via squash.
Prepared head SHA: f3cdfa76dd
Co-authored-by: CryUshio <30655354+CryUshio@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 20:17:36 +03:00
George Zhang
f50fc2966b
docs: add #42173 to CHANGELOG — strip leaked model control tokens ( #42216 )
...
Thanks @imwyvern.
2026-03-10 07:19:13 -07:00
Vincent Koc
208b636414
Changelog: add unreleased March 9 entries
2026-03-10 08:51:12 -04:00
smysle
d340ea92d1
chore: add .dev-state to .gitignore ( #41848 )
...
Merged via squash.
Prepared head SHA: 85c4eb7d26
Co-authored-by: smysle <207193754+smysle@users.noreply.github.com >
Co-authored-by: hydro13 <6640526+hydro13@users.noreply.github.com >
Reviewed-by: @hydro13
2026-03-10 13:35:04 +01:00
Charles Dusek
048e25c2b2
fix(agents): avoid duplicate same-provider cooldown probes in fallback runs ( #41711 )
...
Merged via squash.
Prepared head SHA: 8be8967bcb
Co-authored-by: cgdusek <38732970+cgdusek@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 15:26:47 +03:00
Echo
bda63c3c7f
fix(mattermost): preserve markdown formatting and native tables ( #18655 )
...
Merged via squash.
Prepared head SHA: d30fff1776
Co-authored-by: echo931 <259437483+echo931@users.noreply.github.com >
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com >
Reviewed-by: @mukhtharcm
2026-03-10 17:40:01 +05:30
Pejman Pour-Moezzi
aca216bfcf
feat(acp): add resumeSessionId to sessions_spawn for ACP session resume ( #41847 )
...
* feat(acp): add resumeSessionId to sessions_spawn for ACP session resume
Thread resumeSessionId through the ACP session spawn pipeline so agents
can resume existing sessions (e.g. a prior Codex conversation) instead
of starting fresh.
Flow: sessions_spawn tool → spawnAcpDirect → initializeSession →
ensureSession → acpx --resume-session flag → agent session/load
- Add resumeSessionId param to sessions-spawn-tool schema with
description so agents can discover and use it
- Thread through SpawnAcpParams → AcpInitializeSessionInput →
AcpRuntimeEnsureInput → acpx extension runtime
- Pass as --resume-session flag to acpx CLI
- Error hard (exit 4) on non-existent session, no silent fallback
- All new fields optional for backward compatibility
Depends on acpx >= 0.1.16 (openclaw/acpx#85, merged, pending release).
Tests: 26/26 pass (runtime + tool schema)
Verified e2e: Discord → sessions_spawn(resumeSessionId) → Codex
resumed session and recalled stored secret.
🤖 AI-assisted
* fix: guard resumeSessionId against non-ACP runtime
Add early-return error when resumeSessionId is passed without
runtime="acp" (mirrors existing streamTo guard). Without this,
the parameter is silently ignored and the agent gets a fresh
session instead of resuming.
Also update schema description to note the runtime=acp requirement.
Addresses Greptile review feedback.
* ACP: add changelog entry for session resume (#41847 ) (thanks @pejmanjohn)
---------
Co-authored-by: Pejman Pour-Moezzi <481729+pejmanjohn@users.noreply.github.com >
Co-authored-by: Onur <onur@textcortex.com >
2026-03-10 10:36:13 +01:00
Bob
c2eb12bbc5
ACPX: bump bundled acpx to 0.1.16 ( #41975 )
...
* ACPX: bump bundled acpx to 0.1.16
* fix: bump acpx pin to 0.1.16 (#41975 ) (thanks @dutifulbob)
---------
Co-authored-by: Onur <2453968+osolmaz@users.noreply.github.com >
2026-03-10 10:18:09 +01:00
Teconomix
6d0547dc2e
mattermost: fix DM media upload for unprefixed user IDs ( #29925 )
...
Merged via squash.
Prepared head SHA: 5cffcb072c
Co-authored-by: teconomix <6959299+teconomix@users.noreply.github.com >
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com >
Reviewed-by: @mukhtharcm
2026-03-10 14:22:24 +05:30