Xinhua Gu
ee96e96bb9
fix(plugins): strip profileId/preferredProfile from plugin modelAuth wrappers
...
Address Aisle CWE-862: plugins could use profileId to resolve
credentials for arbitrary profiles regardless of provider, enabling
cross-provider credential access.
Now plugins can only specify provider/model — the core auth pipeline
picks the appropriate credential. The TypeScript type is also narrowed
so plugin authors cannot pass profileId at compile time.
2026-03-09 15:59:39 -07:00
Xinhua Gu
8e0fd21e73
fix(plugins): forward preferredProfile in resolveApiKeyForProvider wrapper
...
The wrapper for resolveApiKeyForProvider silently dropped the
preferredProfile parameter, causing plugins to fall back to default
profile ordering when multiple auth profiles exist for the same
provider.
2026-03-09 15:59:39 -07:00
Xinhua Gu
8cc939ae0a
fix(plugins): remove raw model-auth exports from plugin-sdk barrel
...
Address Aisle follow-up: the plugin-sdk barrel re-exported
getApiKeyForModel and resolveApiKeyForProvider directly from
model-auth.ts, allowing plugins to bypass the runtime.modelAuth
wrappers and pass arbitrary agentDir/store overrides for credential
steering.
Remove these raw exports. Plugins must use runtime.modelAuth which
strips unsafe parameters. Keep requireApiKey (sync null-check helper
with no agentDir parameter) and the ResolvedProviderAuth type export.
2026-03-09 15:59:39 -07:00
Josh Lehman
0e20dec0ca
fix: document plugin model auth runtime support
2026-03-09 15:59:39 -07:00
Xinhua Gu
aee585065e
fix(plugins): wrap modelAuth helpers to prevent credential steering
...
Address Aisle security review: wrap getApiKeyForModel and
resolveApiKeyForProvider so plugins cannot pass arbitrary agentDir or
store overrides to steer credential lookups outside their own context.
Only provider, model, cfg, profileId, and preferredProfile are
forwarded to the underlying auth pipeline.
Add test verifying the wrappers are not direct references to the raw
functions.
2026-03-09 15:59:24 -07:00
Xinhua Gu
42cc548431
fix(plugins): expose model auth API to context-engine plugins
...
Context-engine plugins (e.g. lossless-claw) that call LLM APIs via
completeSimple cannot resolve API keys from the main OpenClaw config.
This causes repeated 'No API key for provider' errors and forces
fallback to truncation.
Add runtime.modelAuth to PluginRuntimeCore with getApiKeyForModel and
resolveApiKeyForProvider so plugins can resolve credentials through
the standard auth pipeline (config, env vars, auth profiles).
Also re-export these helpers and the ResolvedProviderAuth type from
the plugin-sdk barrel for direct import by plugin authors.
Fixes #40902
2026-03-09 15:59:24 -07:00
alan blount
c9a6c542ef
Add HTTP 499 to transient error codes for model fallback ( #41468 )
...
Merged via squash.
Prepared head SHA: 0053bae140
Co-authored-by: zeroasterisk <23422+zeroasterisk@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 01:55:10 +03:00
Altay
de4c3db3e3
Logging: harden probe suppression for observations ( #41338 )
...
Merged via squash.
Prepared head SHA: d18356cb80
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 01:40:15 +03:00
Hermione
64746c150c
fix(discord): apply effective maxLinesPerMessage in live replies ( #40133 )
...
Merged via squash.
Prepared head SHA: 031d032534
Co-authored-by: rbutera <6047293+rbutera@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-10 01:30:24 +03:00
Mariano
56f787e3c0
build(protocol): regenerate Swift models after pending node work schemas ( #41477 )
...
Merged via squash.
Prepared head SHA: cae0aaf1c2
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 23:22:09 +01:00
Altay
531e8362b1
Agents: add fallback error observations ( #41337 )
...
Merged via squash.
Prepared head SHA: 852469c82f
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 01:12:10 +03:00
Mariano
3c3474360b
acp: harden follow-up reliability and attachments ( #41464 )
...
Merged via squash.
Prepared head SHA: 7d167dff54
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 23:03:50 +01:00
Altay
0669b0ddc2
fix(agents): probe single-provider billing cooldowns ( #41422 )
...
Merged via squash.
Prepared head SHA: bbc4254b94
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 00:58:51 +03:00
Mariano
0c7f07818f
acp: add regression coverage and smoke-test docs ( #41456 )
...
Merged via squash.
Prepared head SHA: 514d587352
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 22:40:14 +01:00
Mariano
4aebff78bc
acp: forward attachments into ACP runtime sessions ( #41427 )
...
Merged via squash.
Prepared head SHA: f2ac51df2c
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 22:32:32 +01:00
Mariano
8e3f3bc3cf
acp: enrich streaming updates for ide clients ( #41442 )
...
Merged via squash.
Prepared head SHA: 0764368e80
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 22:26:46 +01:00
Altay
30340d6835
Sandbox: import STATE_DIR from paths directly ( #41439 )
2026-03-10 00:18:41 +03:00
Mariano
d346f2d9ce
acp: restore session context and controls ( #41425 )
...
Merged via squash.
Prepared head SHA: fcabdf7c31
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 22:17:19 +01:00
Mariano
e6e4169e82
acp: fail honestly in bridge mode ( #41424 )
...
Merged via squash.
Prepared head SHA: b5e6e13afe
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 22:01:30 +01:00
Mariano
1bc59cc09d
Gateway: tighten node pending drain semantics ( #41429 )
...
Merged via squash.
Prepared head SHA: 361c2eb5c8
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 21:56:00 +01:00
Mariano
ef95975411
Gateway: add pending node work primitives ( #41409 )
...
Merged via squash.
Prepared head SHA: a6d7ca90d7
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 21:42:57 +01:00
zerone0x
5f90883ad3
fix(auth): reset cooldown error counters on expiry to prevent infinite escalation ( #41028 )
...
Merged via squash.
Prepared head SHA: 89bd83f09a
Co-authored-by: zerone0x <39543393+zerone0x@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-09 23:40:11 +03:00
Robin Waslander
2b2e5e2038
fix(cron): do not misclassify empty/NO_REPLY as interim acknowledgement ( #41401 )
...
* fix(cron): do not misclassify empty/NO_REPLY as interim acknowledgement
When a cron task's agent returns NO_REPLY, the payload filter strips the
silent token, leaving an empty text string. isLikelyInterimCronMessage()
previously returned true for empty input, causing the cron runner to
inject a forced rerun prompt ('Your previous response was only an
acknowledgement...').
Change the empty-string branch to return false: empty text after payload
filtering means the agent deliberately chose silent completion, not that
it sent an interim 'on it' message.
Fixes #41246
* fix(cron): do not misclassify empty/NO_REPLY as interim acknowledgement
Fixes #41246 . (#41383 ) thanks @jackal092927.
---------
Co-authored-by: xaeon2026 <xaeon2026@gmail.com >
2026-03-09 21:16:28 +01:00
Mariano
0bcddb3d4f
iOS: reconnect gateway on foreground return ( #41384 )
...
Merged via squash.
Prepared head SHA: 0e2e0dcc36
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 21:12:23 +01:00
Vincent Koc
d86647d7db
Doctor: fix non-interactive cron repair gating ( #41386 )
2026-03-09 12:35:31 -07:00
Altay
87d939be79
Agents: add embedded error observations ( #41336 )
...
Merged via squash.
Prepared head SHA: 4900042298
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-09 22:27:05 +03:00
Mariano
d4e59a3666
Cron: enforce cron-owned delivery contract ( #40998 )
...
Merged via squash.
Prepared head SHA: 5877389e33
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 20:12:37 +01:00
Vincent Koc
7b88249c9e
fix(telegram): bridge direct delivery to internal message:sent hooks ( #40185 )
...
* telegram: bridge direct delivery message hooks
* telegram: align sent hooks with command session
2026-03-09 11:21:19 -07:00
Vincent Koc
12702e11a5
plugins: harden global hook runner state ( #40184 )
2026-03-09 11:20:33 -07:00
Pejman Pour-Moezzi
14bbcad169
fix(acp): propagate setSessionMode gateway errors to client ( #41185 )
...
* fix(acp): propagate setSessionMode gateway errors to client
* fix: add changelog entry for ACP setSessionMode propagation (#41185 ) (thanks @pejmanjohn)
---------
Co-authored-by: Pejman Pour-Moezzi <481729+pejmanjohn@users.noreply.github.com >
Co-authored-by: Onur <onur@textcortex.com >
2026-03-09 17:50:38 +01:00
Pejman Pour-Moezzi
eab39c721b
fix(acp): map error states to end_turn instead of unconditional refusal ( #41187 )
...
* fix(acp): map error states to end_turn instead of unconditional refusal
* fix: map ACP error stop reason to end_turn (#41187 ) (thanks @pejmanjohn)
---------
Co-authored-by: Pejman Pour-Moezzi <481729+pejmanjohn@users.noreply.github.com >
Co-authored-by: Onur <onur@textcortex.com >
2026-03-09 17:37:33 +01:00
Radek Sienkiewicz
4815dc0603
Update CONTRIBUTING.md
2026-03-09 17:27:29 +01:00
Robin Waslander
2cce45962f
Add Robin Waslander to maintainers
2026-03-09 17:23:56 +01:00
Radek Sienkiewicz
258b7902a4
Update CONTRIBUTING.md
2026-03-09 17:13:16 +01:00
xaeon2026
425bd89b48
Allow ACP sessions.patch lineage fields on ACP session keys ( #40995 )
...
Merged via squash.
Prepared head SHA: c1191edc08
Co-authored-by: xaeon2026 <264572156+xaeon2026@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-03-09 17:08:11 +01:00
Charles Dusek
54be30ef89
fix(agents): bound compaction retry wait and drain embedded runs on restart ( #40324 )
...
Merged via squash.
Prepared head SHA: cfd99562d6
Co-authored-by: cgdusek <38732970+cgdusek@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-03-09 08:27:29 -07:00
Daniel Reis
fbf5d56366
test(context-engine): add bundle chunk isolation tests for registry ( #40460 )
...
Merged via squash.
Prepared head SHA: 44622abfbc
Co-authored-by: dsantoreis <220753637+dsantoreis@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-03-09 08:15:35 -07:00
Joshua Lelon Mitchell
98ea71aca5
fix(swiftformat): exclude HostEnvSecurityPolicy.generated.swift from formatters ( #39969 )
2026-03-09 07:30:43 -07:00
opriz
51bae75120
fix(kimi-coding): fix kimi tool format: use native Anthropic tool schema instead of OpenAI … (openclaw#40008)
...
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: opriz <51957849+opriz@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-09 08:28:47 -05:00
Radek Sienkiewicz
f2f561fab1
fix(ui): preserve control-ui auth across refresh ( #40892 )
...
Merged via squash.
Prepared head SHA: f9b2375892
Co-authored-by: velvet-shark <126378+velvet-shark@users.noreply.github.com >
Co-authored-by: velvet-shark <126378+velvet-shark@users.noreply.github.com >
Reviewed-by: @velvet-shark
2026-03-09 12:50:47 +01:00
Peter Steinberger
f6d0712f50
build: sync plugin versions for 2026.3.9
2026-03-09 08:39:52 +00:00
Peter Steinberger
6c579d7842
fix: stabilize launchd paths and appcast secret scan
2026-03-09 08:37:37 +00:00
Peter Steinberger
f9706fde6a
build: bump unreleased version to 2026.3.9
2026-03-09 08:33:58 +00:00
Peter Steinberger
7217b97658
fix(onboard): avoid persisting talk fallback on fresh setup
2026-03-09 08:33:58 +00:00
Peter Steinberger
ce9e91fdfc
fix(launchd): harden macOS launchagent install permissions
2026-03-09 08:14:46 +00:00
Peter Steinberger
3caab9260c
test: narrow gateway loop signal harness
v2026.3.8
2026-03-09 07:42:15 +00:00
Peter Steinberger
d0847ee322
chore: prepare 2026.3.8 npm release
2026-03-09 07:37:50 +00:00
Peter Steinberger
1d3dde8d21
fix(update): re-enable launchd service before updater bootstrap
2026-03-09 07:27:11 +00:00
Peter Steinberger
cc0f30f5fb
test: fix windows runtime and restart loop harnesses
2026-03-09 07:22:23 +00:00
Peter Steinberger
250d3c949e
chore: update appcast for 2026.3.8-beta.1
2026-03-09 07:20:08 +00:00