Commit Graph

31221 Commits

Author SHA1 Message Date
Mason Huang
7eecfa411d fix(browser): unblock loopback CDP readiness under strict SSRF defaults (#66354)
Merged via squash.

Prepared head SHA: d9030ff2f0
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com>
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com>
Reviewed-by: @hxy91819
2026-04-14 16:30:43 +08:00
Vincent Koc
e59f5ecac3 fix(tools): normalize media model lookups (#66422)
* fix(tools): normalize media model lookups

* Update CHANGELOG.md
2026-04-14 09:23:52 +01:00
Ayaan Zaidi
aa0dc118f1 fix: preserve subagent registry runtime import path across source and dist (#66420)
* fix(build): correct subagent registry runtime import path

* fix: correct subagent registry runtime import path (#66420)

* fix: preserve subagent registry runtime import path across source and dist (#66420)
2026-04-14 13:52:24 +05:30
Vincent Koc
38de896419 fix(agents): honor embedded ollama timeouts (#66418) 2026-04-14 09:21:22 +01:00
Vincent Koc
900681751d test(qa-lab): seed broken-turn recovery scenarios (#66416) 2026-04-14 09:03:49 +01:00
Vincent Koc
37f449d7e1 fix(memory): restore ollama embedding adapter (#66269)
* fix(memory): restore ollama embedding adapter

* Update CHANGELOG.md
2026-04-14 09:02:31 +01:00
yongqiang li
6a5ff83b24 fix(build): include subagent-registry.runtime.js in dist output (#66205)
* fix: ensure subagent-registry.runtime.js is included in dist output

* fix(build): ship subagent registry runtime

* Update CHANGELOG.md

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-14 09:00:40 +01:00
VACInc
26e80cc6cc [codex] Telegram: unblock status commands behind busy turns (#66226)
* Telegram: unblock status commands behind busy turns

* fix(telegram): keep export-session on topic lane

* Update CHANGELOG.md

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-14 08:57:07 +01:00
Ayaan Zaidi
213c36cf51 fix(browser): preserve legacy strict SSRF alias 2026-04-14 12:50:02 +05:30
Ayaan Zaidi
024f4614a1 fix: add browser SSRF follow-up changelog entry (#66386) 2026-04-14 12:42:59 +05:30
Ayaan Zaidi
1dabfef28d fix(browser): preserve explicit strict SSRF config 2026-04-14 12:42:59 +05:30
Ayaan Zaidi
1b76966f05 fix(browser): use loopback policy for json-new fallback 2026-04-14 12:42:59 +05:30
Ayaan Zaidi
bf1d49093a fix(browser): relax default hostname SSRF guard 2026-04-14 12:42:59 +05:30
Neerav Makwana
a743b30b8b fix: honor configured store limits (#66240) (thanks @neeravmakwana)
* fix(media): honor configured store limits

* fix(media): report effective source limits

* refactor(media): distill configured limit wiring

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-14 11:53:20 +05:30
Neerav Makwana
0381852c26 fix: harden approvals get timeout handling (#66239) (thanks @neeravmakwana)
* fix(cli): harden approvals get timeout handling

* fix(cli): sanitize approvals timeout notes

* fix(cli): distill approvals timeout note

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-14 11:29:59 +05:30
Luke
0abe64a4ff Agents: clarify local model context preflight (#66236)
Merged via squash.

Prepared head SHA: 11bfaf15f6
Co-authored-by: ImLukeF <92253590+ImLukeF@users.noreply.github.com>
Co-authored-by: ImLukeF <92253590+ImLukeF@users.noreply.github.com>
Reviewed-by: @ImLukeF
2026-04-14 15:38:10 +10:00
拐爷&&老拐瘦
852484965f fix: cache external plugin catalog lookups in auto-enable (#66246) (thanks @yfge)
* fix: cache external plugin catalog lookups in auto-enable

Fixes openclaw/openclaw#66159

* test: restore readFileSync spy in plugin auto-enable test

* refactor: distill plugin auto-enable cache path

* fix: cache external plugin catalog lookups in auto-enable (#66246) (thanks @yfge)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-14 09:41:02 +05:30
Peter Steinberger
55604a9a91 test: keep telegram cache boundary compatible 2026-04-13 20:50:11 -07:00
Peter Steinberger
73d3cf9920 test: bound docker fs bridge probes 2026-04-13 20:49:39 -07:00
Peter Steinberger
3deea5a426 fix: mirror baileys root dependency 2026-04-13 20:49:39 -07:00
Peter Steinberger
df84225504 test: align post-rebase full-suite drift 2026-04-13 20:49:39 -07:00
Peter Steinberger
67ffb6f6c2 fix: keep baileys plugin-local 2026-04-13 20:49:39 -07:00
Peter Steinberger
1277294293 test: drop removed agent scope suppression 2026-04-13 20:49:39 -07:00
Peter Steinberger
296471b692 test: align cron model error expectations 2026-04-13 20:49:39 -07:00
Peter Steinberger
4b127adc9d test: align agent session resolver mocks 2026-04-13 20:49:39 -07:00
Peter Steinberger
0d6643e244 test: align cron runtime seams 2026-04-13 20:49:39 -07:00
Peter Steinberger
311bc842b8 fix: remove agent config lint suppression 2026-04-13 20:49:39 -07:00
Peter Steinberger
d4f556a052 fix: align latest main type drift 2026-04-13 20:49:39 -07:00
Peter Steinberger
5b24009271 test: mock model fallback source check 2026-04-13 20:49:39 -07:00
Peter Steinberger
cf3d27ab94 test: use cron embedded runtime mock 2026-04-13 20:49:39 -07:00
Peter Steinberger
00415e2010 test: refresh cron and mcp typed fixtures 2026-04-13 20:49:39 -07:00
Peter Steinberger
ff8605f3c2 test: update model fallback auth store mock 2026-04-13 20:49:39 -07:00
Peter Steinberger
1e11b36d80 test: align feishu replay helper typing 2026-04-13 20:49:39 -07:00
Peter Steinberger
c09031f15a fix: tighten inbound replay typing 2026-04-13 20:49:39 -07:00
Peter Steinberger
63965dc70b test: stabilize gateway wake gating regression 2026-04-13 20:49:39 -07:00
Peter Steinberger
ca9f969831 test: cover gateway wake startup gating 2026-04-13 20:49:39 -07:00
tmimmanuel
a2ab9e6a8e fix: avoid inline dotenv secrets in systemd unit during service repair (#66249) (thanks @tmimmanuel)
* fix(daemon): avoid inline dotenv secrets in systemd unit during service repair

* fix(daemon): sanitize systemd envfile and dedupe state-dir resolution

* fix(daemon): fail on multiline dotenv values for systemd envfile

* test(daemon): cover systemd envfile staging

* fix: keep systemd envfile overrides intact (#66249) (thanks @tmimmanuel)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-14 09:06:10 +05:30
Ayaan Zaidi
3c501d3554 test: remove timer dependency from telegram topic cache tests 2026-04-14 08:58:07 +05:30
Ayaan Zaidi
556905a3f4 fix: restore pnpm check 2026-04-14 08:48:15 +05:30
Peter Steinberger
0eebb49fef test: enforce npm pack budget in install smoke 2026-04-14 04:05:12 +01:00
Ayaan Zaidi
8a9d5e37be fix: move telegram topic-cache changelog to unreleased (#66107) 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
c91d3d4537 fix(telegram): persist topic cache via default runtime 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
4f92b1fbb0 fix(telegram): allow topic cache without session runtime 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
6eafb5f844 docs(changelog): note telegram topic-name persistence 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
59afcf9922 test(telegram): cover topic-name cache reload 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
ad181b2361 fix(telegram): persist topic-name cache 2026-04-14 08:32:27 +05:30
Agustin Rivera
29f206243b Guard dangerous gateway config mutations (#62006)
* fix(gateway): guard dangerous config alias

* fix(gateway): ignore reordered dangerous flags

* fix(gateway): use id-based mapping identity and honor legacy alias baseline

* fix(gateway): tighten dangerous config matching

* fix(gateway): strip IPv6 brackets in isRemoteGatewayTarget hostname check

* fix(gateway): detect tunneled remote targets

* fix(gateway): match id-less hook mappings by fingerprint, not index

* fix(gateway): detect env-selected remote targets

* fix(gateway): resolve remote-target guard from live config, not captured opts

* fix(gateway): resolve remote-target guard from live config, not captured opts

* fix(gateway): treat loopback OPENCLAW_GATEWAY_URL as local when mode is not remote

* fix(gateway): preserve legacy dangerous hook edits

* fix(gateway): block dangerous plugin reactivation

* fix(gateway): handle dotted plugin IDs in dangerous-flag checks

* fix(gateway): honor plugin policy activation

* fix(gateway): block remote plugin activation changes via allow/deny/enabled

* fix(gateway): broaden loopback url detection

* fix(gateway): resolve plugin IDs by longest-prefix match

* fix(gateway): block remote slot activation

* fix(gateway): preserve legacy mapping identity during id+field transitions

* fix(gateway): block remote load-path and channel activation changes

* test(gateway): fix remote config mock typing

* fix(gateway): guard auto-enabled dangerous plugins

* fix(gateway): address P1 review comments on remote gateway mutation guards

- Treat all OPENCLAW_GATEWAY_URL targets as remote for mutation guards to prevent SSH tunnel bypasses
- Always load config fresh in isRemoteGatewayTargetForAgentTools to detect session changes
- Expand remote activation guard to cover auto-enable paths (auth.profiles, models.providers, agents.defaults, agents.list, tools.web.fetch.provider)
- Respect plugins.deny in manifest-missing fallback to prevent false negatives
- Fix hook mapping identity matching to properly handle id-less mappings by fingerprint
- Update tests to reflect new secure behavior for env-sourced gateway URLs

* fix(gateway): prevent hook mapping swap attacks via fingerprint-only matching

When both current and next tokens have fingerprints, match ONLY by fingerprint.
This prevents replacing one dangerous hook mapping with a different one at the
same array index from being incorrectly treated as 'already present'.

The previous fallback to index-based matching allowed bypasses where an attacker
could swap dangerous mappings at the same index without triggering the guard.

* fix(gateway): honor allowlist in fallback guard

* fix(gateway): treat empty plugin allowlist as unrestricted in manifest-missing fallback

* docs: update USER.md worklog for empty-allowlist fix

* fix(gateway): resolve review comments — type safety, auto-enable resilience, remote hardening edits

* docs: update USER.md worklog for review comment resolution

* fix(gateway): block remaining remote setup auto-enable paths

* fix(gateway): simplify dangerous config mutation guard to set-diff approach

Replace 400+ lines of hook fingerprinting, remote gateway detection,
plugin activation tracking, and auto-enable enumeration with a simple
set-diff against collectEnabledInsecureOrDangerousFlags — the same
enumeration openclaw security audit already uses.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: remove USER.md audit log from PR

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* changelog: note gateway-tool dangerous config mutation guard (#62006)

---------

Co-authored-by: Devin Robison <drobison@nvidia.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:59:39 -06:00
Agustin Rivera
df192c514c fix(media): fail closed on attachment canonicalization (#66022)
* fix(media): fail closed on attachment canonicalization

* fix(media): clarify attachment skip failures

* fix(media): preserve attachment URL fallback

* fix(media): preserve getPath URL fallback on blocked local paths

* changelog: note media attachment canonicalization fail-closed (#66022)

---------

Co-authored-by: Devin Robison <drobison@nvidia.com>
2026-04-13 20:46:20 -06:00
Agustin Rivera
1c35795fce fix(slack): align interaction auth with allowlists (#66028)
* fix(slack): align interaction auth with allowlists

* fix(slack): address review followups

* fix(slack): preserve explicit owners with wildcard

* chore: append Claude comments resolution worklog

* fix(slack): harden interaction auth with default-deny, mandatory actor binding, and channel type validation

- Add interactiveEvent flag to authorizeSlackSystemEventSender for stricter
  interactive control authorization
- Default-deny when no allowFrom or channel users are configured for
  interactive events (block actions, modals)
- Require expectedSenderId for all interactive event types; block actions
  pass Slack-verified userId, modals pass metadata-embedded userId
- Reject ambiguous channel types for interactive events to prevent DM
  authorization bypass via channel-type fallback
- Add comprehensive test coverage for all new behaviors

* fix(slack): scope interactive owner/allowFrom enforcement to interactive paths only

* fix(slack): preserve no-channel interactive default

* Update context-engine-maintenance test

* chore: remove USER.md worklog artifact

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* changelog: note Slack interactive auth allowlist alignment (#66028)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Devin Robison <drobison@nvidia.com>
2026-04-13 20:38:11 -06:00
Eva H
49d99c7500 fix: include apiKey in codex provider catalog to unblock models.json loading (#66180)
Merged via squash.

Prepared head SHA: ce61934ac9
Co-authored-by: hoyyeva <63033505+hoyyeva@users.noreply.github.com>
Co-authored-by: BruceMacD <5853428+BruceMacD@users.noreply.github.com>
Reviewed-by: @BruceMacD
2026-04-13 19:22:09 -07:00