Skip to content

Commit 0504fb3

Browse files
authored
Merge branch 'main' into vincentkoc-code/telegram-message-sent-parity
2 parents 817fa54 + d47aa6b commit 0504fb3

File tree

174 files changed

+7158
-983
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

174 files changed

+7158
-983
lines changed

.github/workflows/ci.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,12 @@ jobs:
267267
with:
268268
submodules: false
269269

270+
- name: Ensure secrets base commit
271+
uses: ./.github/actions/ensure-base-commit
272+
with:
273+
base-sha: ${{ github.event_name == 'push' && github.event.before || github.event.pull_request.base.sha }}
274+
fetch-ref: ${{ github.event_name == 'push' && github.ref_name || github.event.pull_request.base.ref }}
275+
270276
- name: Setup Node environment
271277
uses: ./.github/actions/setup-node-env
272278
with:

.pre-commit-config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ repos:
6969
- '"ap[i]Key": "xxxxx"(,)?'
7070
- --exclude-lines
7171
- 'ap[i]Key: "A[I]za\.\.\.",'
72+
- --exclude-lines
73+
- '"ap[i]Key": "(resolved|normalized|legacy)-key"(,)?'
7274
# Shell script linting
7375
- repo: https://github.com/koalaman/shellcheck-precommit
7476
rev: v0.11.0

.secrets.baseline

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@
152152
"grep -q 'N[O]DE_COMPILE_CACHE=/var/tmp/openclaw-compile-cache' ~/.bashrc \\|\\| cat >> ~/.bashrc <<'EOF'",
153153
"env: \\{ MISTRAL_API_K[E]Y: \"sk-\\.\\.\\.\" \\},",
154154
"\"ap[i]Key\": \"xxxxx\"(,)?",
155-
"ap[i]Key: \"A[I]za\\.\\.\\.\","
155+
"ap[i]Key: \"A[I]za\\.\\.\\.\",",
156+
"\"ap[i]Key\": \"(resolved|normalized|legacy)-key\"(,)?"
156157
]
157158
},
158159
{
@@ -251,7 +252,7 @@
251252
"filename": "apps/macos/Tests/OpenClawIPCTests/GatewayEndpointStoreTests.swift",
252253
"hashed_secret": "19dad5cecb110281417d1db56b60e1b006d55bb4",
253254
"is_verified": false,
254-
"line_number": 66
255+
"line_number": 81
255256
}
256257
],
257258
"apps/macos/Tests/OpenClawIPCTests/GatewayLaunchAgentManagerTests.swift": [
@@ -9795,63 +9796,63 @@
97959796
"filename": "docs/gateway/configuration-reference.md",
97969797
"hashed_secret": "1188d5a8ed7edcff5144a9472af960243eacf12e",
97979798
"is_verified": false,
9798-
"line_number": 1612
9799+
"line_number": 1614
97999800
},
98009801
{
98019802
"type": "Secret Keyword",
98029803
"filename": "docs/gateway/configuration-reference.md",
98039804
"hashed_secret": "bde4db9b4c3be4049adc3b9a69851d7c35119770",
98049805
"is_verified": false,
9805-
"line_number": 1628
9806+
"line_number": 1630
98069807
},
98079808
{
98089809
"type": "Secret Keyword",
98099810
"filename": "docs/gateway/configuration-reference.md",
98109811
"hashed_secret": "7f8aaf142ce0552c260f2e546dda43ddd7c9aef3",
98119812
"is_verified": false,
9812-
"line_number": 1815
9813+
"line_number": 1817
98139814
},
98149815
{
98159816
"type": "Secret Keyword",
98169817
"filename": "docs/gateway/configuration-reference.md",
98179818
"hashed_secret": "22af290a1a3d5e941193a41a3d3a9e4ca8da5e27",
98189819
"is_verified": false,
9819-
"line_number": 1988
9820+
"line_number": 1990
98209821
},
98219822
{
98229823
"type": "Secret Keyword",
98239824
"filename": "docs/gateway/configuration-reference.md",
98249825
"hashed_secret": "ec3810e10fb78db55ce38b9c18d1c3eb1db739e0",
98259826
"is_verified": false,
9826-
"line_number": 2044
9827+
"line_number": 2046
98279828
},
98289829
{
98299830
"type": "Secret Keyword",
98309831
"filename": "docs/gateway/configuration-reference.md",
98319832
"hashed_secret": "c1e6ee547fd492df1441ac492e8bb294974712bd",
98329833
"is_verified": false,
9833-
"line_number": 2276
9834+
"line_number": 2278
98349835
},
98359836
{
98369837
"type": "Secret Keyword",
98379838
"filename": "docs/gateway/configuration-reference.md",
98389839
"hashed_secret": "45d676e7c6ab44cf4b8fa366ef2d8fccd3e6d6e6",
98399840
"is_verified": false,
9840-
"line_number": 2404
9841+
"line_number": 2408
98419842
},
98429843
{
98439844
"type": "Secret Keyword",
98449845
"filename": "docs/gateway/configuration-reference.md",
98459846
"hashed_secret": "a219d7693c25cd2d93313512e200ff3eb374d281",
98469847
"is_verified": false,
9847-
"line_number": 2657
9848+
"line_number": 2661
98489849
},
98499850
{
98509851
"type": "Secret Keyword",
98519852
"filename": "docs/gateway/configuration-reference.md",
98529853
"hashed_secret": "b6f56e5e92078ed7c078c46fbfeedcbe5719bc25",
98539854
"is_verified": false,
9854-
"line_number": 2659
9855+
"line_number": 2663
98559856
}
98569857
],
98579858
"docs/gateway/configuration.md": [
@@ -11481,7 +11482,7 @@
1148111482
"filename": "src/agents/models-config.e2e-harness.ts",
1148211483
"hashed_secret": "7cf31e8b6cda49f70c31f1f25af05d46f924142d",
1148311484
"is_verified": false,
11484-
"line_number": 131
11485+
"line_number": 157
1148511486
}
1148611487
],
1148711488
"src/agents/models-config.fills-missing-provider-apikey-from-env-var.e2e.test.ts": [
@@ -11515,14 +11516,14 @@
1151511516
"filename": "src/agents/models-config.providers.nvidia.test.ts",
1151611517
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
1151711518
"is_verified": false,
11518-
"line_number": 13
11519+
"line_number": 14
1151911520
},
1152011521
{
1152111522
"type": "Secret Keyword",
1152211523
"filename": "src/agents/models-config.providers.nvidia.test.ts",
1152311524
"hashed_secret": "be1a7be9d4d5af417882b267f4db6dddc08507bd",
1152411525
"is_verified": false,
11525-
"line_number": 22
11526+
"line_number": 23
1152611527
}
1152711528
],
1152811529
"src/agents/models-config.providers.ollama.e2e.test.ts": [
@@ -11746,7 +11747,7 @@
1174611747
"filename": "src/auto-reply/status.test.ts",
1174711748
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
1174811749
"is_verified": false,
11749-
"line_number": 36
11750+
"line_number": 37
1175011751
}
1175111752
],
1175211753
"src/browser/bridge-server.auth.test.ts": [
@@ -11764,14 +11765,14 @@
1176411765
"filename": "src/browser/browser-utils.test.ts",
1176511766
"hashed_secret": "4e126c049580d66ca1549fa534d95a7263f27f46",
1176611767
"is_verified": false,
11767-
"line_number": 43
11768+
"line_number": 47
1176811769
},
1176911770
{
1177011771
"type": "Basic Auth Credentials",
1177111772
"filename": "src/browser/browser-utils.test.ts",
1177211773
"hashed_secret": "9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684",
1177311774
"is_verified": false,
11774-
"line_number": 164
11775+
"line_number": 171
1177511776
}
1177611777
],
1177711778
"src/browser/cdp.test.ts": [
@@ -11780,7 +11781,7 @@
1178011781
"filename": "src/browser/cdp.test.ts",
1178111782
"hashed_secret": "9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684",
1178211783
"is_verified": false,
11783-
"line_number": 243
11784+
"line_number": 318
1178411785
}
1178511786
],
1178611787
"src/channels/plugins/plugins-channel.test.ts": [
@@ -12100,21 +12101,21 @@
1210012101
"filename": "src/config/config.env-vars.test.ts",
1210112102
"hashed_secret": "a24ef9c1a27cac44823571ceef2e8262718eee36",
1210212103
"is_verified": false,
12103-
"line_number": 13
12104+
"line_number": 17
1210412105
},
1210512106
{
1210612107
"type": "Secret Keyword",
1210712108
"filename": "src/config/config.env-vars.test.ts",
1210812109
"hashed_secret": "29d5f92e9ee44d4854d6dfaeefc3dc27d779fdf3",
1210912110
"is_verified": false,
12110-
"line_number": 19
12111+
"line_number": 23
1211112112
},
1211212113
{
1211312114
"type": "Secret Keyword",
1211412115
"filename": "src/config/config.env-vars.test.ts",
1211512116
"hashed_secret": "1672b6a1e7956c6a70f45d699aa42a351b1f8b80",
1211612117
"is_verified": false,
12117-
"line_number": 27
12118+
"line_number": 31
1211812119
}
1211912120
],
1212012121
"src/config/config.irc.test.ts": [
@@ -12335,14 +12336,14 @@
1233512336
"filename": "src/config/schema.help.ts",
1233612337
"hashed_secret": "9f4cda226d3868676ac7f86f59e4190eb94bd208",
1233712338
"is_verified": false,
12338-
"line_number": 651
12339+
"line_number": 653
1233912340
},
1234012341
{
1234112342
"type": "Secret Keyword",
1234212343
"filename": "src/config/schema.help.ts",
1234312344
"hashed_secret": "01822c8bbf6a8b136944b14182cb885100ec2eae",
1234412345
"is_verified": false,
12345-
"line_number": 684
12346+
"line_number": 686
1234612347
}
1234712348
],
1234812349
"src/config/schema.irc.ts": [
@@ -12381,14 +12382,14 @@
1238112382
"filename": "src/config/schema.labels.ts",
1238212383
"hashed_secret": "e73c9fcad85cd4eecc74181ec4bdb31064d68439",
1238312384
"is_verified": false,
12384-
"line_number": 216
12385+
"line_number": 217
1238512386
},
1238612387
{
1238712388
"type": "Secret Keyword",
1238812389
"filename": "src/config/schema.labels.ts",
1238912390
"hashed_secret": "2eda7cd978f39eebec3bf03e4410a40e14167fff",
1239012391
"is_verified": false,
12391-
"line_number": 325
12392+
"line_number": 326
1239212393
}
1239312394
],
1239412395
"src/config/slack-http-config.test.ts": [
@@ -13034,5 +13035,5 @@
1303413035
}
1303513036
]
1303613037
},
13037-
"generated_at": "2026-03-08T18:30:57Z"
13038+
"generated_at": "2026-03-08T20:41:38Z"
1303813039
}

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,15 @@ Docs: https://docs.openclaw.ai
1111
- Talk mode: add top-level `talk.silenceTimeoutMs` config so Talk waits a configurable amount of silence before auto-sending the current transcript, while keeping each platform's existing default pause window when unset. (#39607) Thanks @danodoesdesign. Fixes #17147.
1212
- CLI/install: include the short git commit hash in `openclaw --version` output when metadata is available, and keep installer version checks compatible with the decorated format. (#39712) thanks @sourman.
1313
- Docs/Web search: restore $5/month free-credit details, replace defunct "Data for Search"/"Data for AI" plan names with current "Search" plan, and note legacy subscription validity in Brave setup docs. Follows up on #26860. (#40111) Thanks @remusao.
14+
- macOS/onboarding: add a remote gateway token field for remote mode, preserve existing non-plaintext `gateway.remote.token` config values until explicitly replaced, and warn when the loaded token shape cannot be used directly from the macOS app. (#40187, supersedes #34614) Thanks @cgdusek.
15+
- CLI/backup: add `openclaw backup create` and `openclaw backup verify` for local state archives, including `--only-config`, `--no-include-workspace`, manifest/payload validation, and backup guidance in destructive flows. (#40163) thanks @shichangs.
16+
- CLI/backup: improve archive naming for date sorting, add config-only backup mode, and harden backup planning, publication, and verification edge cases. (#40163) Thanks @gumadeiras.
17+
18+
### Breaking
1419

1520
### Fixes
1621

22+
- Docker/runtime image: prune dev dependencies, strip build-only dist metadata for smaller Docker images. (#40307) Thanks @vincentkoc.
1723
- Plugins/channel onboarding: prefer bundled channel plugins over duplicate npm-installed copies during onboarding and release-channel sync, preventing bundled plugins from being shadowed by npm installs with the same plugin ID. (#40092)
1824
- macOS app/chat UI: route browser proxy through the local node browser service, preserve plain-text paste semantics, strip completed assistant trace/debug wrapper noise from transcripts, refresh permission state after returning from System Settings, and tolerate malformed cron rows in the macOS tab. (#39516) Thanks @Imhermes1.
1925
- Mattermost replies: keep `root_id` pinned to the existing thread root when an agent replies inside a thread, while still using reply-target threading for top-level posts. (#27744) thanks @hnykda.
@@ -27,9 +33,18 @@ Docs: https://docs.openclaw.ai
2733
- Hooks/session-memory: keep `/new` and `/reset` memory artifacts in the bound agent workspace and align saved reset session keys with that workspace when stale main-agent keys leak into the hook path. (#39875) thanks @rbutera.
2834
- Sessions/model switch: clear stale cached `contextTokens` when a session changes models so status and runtime paths recompute against the active model window. (#38044) thanks @yuweuii.
2935
- ACP/session history: persist transcripts for successful ACP child runs, preserve exact transcript text, record ACP spawned-session lineage, and keep spawn-time transcript-path persistence best-effort so history storage failures do not block execution. (#40137) thanks @mbelinky.
36+
- Agents/openai-codex: normalize `gpt-5.4` fallback transport back to `openai-codex-responses` on `chatgpt.com/backend-api` when config drifts to the generic OpenAI responses endpoint. (#38736) Thanks @0xsline.
3037
- Browser/CDP: normalize loopback direct WebSocket CDP URLs back to HTTP(S) for `/json/*` tab operations so local `ws://` / `wss://` profiles can still list, focus, open, and close tabs after the new direct-WS support lands. (#31085) Thanks @shrey150.
3138
- Browser/CDP: rewrite wildcard `ws://0.0.0.0` and `ws://[::]` debugger URLs from remote `/json/version` responses back to the external CDP host/port, fixing Browserless-style container endpoints. (#17760) Thanks @joeharouni.
39+
- Browser/extension relay: wait briefly for a previously attached Chrome tab to reappear after transient relay drops before failing with `tab not found`, reducing noisy reconnect flakes. (#32461) Thanks @AaronWander.
40+
- Browser/extension relay: add `browser.relayBindHost` so the Chrome relay can bind to an explicit non-loopback address for WSL2 and other cross-namespace setups, while preserving loopback-only defaults. (#39364) Thanks @mvanhorn.
41+
- Docs/browser: add a layered WSL2 + Windows remote Chrome CDP troubleshooting guide, including Control UI origin pitfalls and extension-relay bind-address guidance. (#39407) Thanks @Owlock.
3242
- Context engine registry/bundled builds: share the registry state through a `globalThis` singleton so duplicated bundled module copies can resolve engines registered by each other at runtime, with regression coverage for duplicate-module imports. (#40115) thanks @jalehman.
43+
- macOS/Tailscale gateway discovery: keep Tailscale Serve probing alive when other remote gateways are already discovered, prefer direct transport for resolved `.ts.net` and Tailscale Serve gateways, and set `TERM=dumb` for GUI-launched Tailscale CLI discovery. (#40167) thanks @ngutman.
44+
- Podman/setup: fix `cannot chdir: Permission denied` in `run_as_user` when `setup-podman.sh` is invoked from a directory the target user cannot access, by wrapping user-switch calls in a subshell that cd's to `/tmp` with `/` fallback. (#39435) Thanks @langdon and @jlcbk.
45+
- Podman/SELinux: auto-detect SELinux enforcing/permissive mode and add `:Z` relabel to bind mounts in `run-openclaw-podman.sh` and the Quadlet template, fixing `EACCES` on Fedora/RHEL hosts. Supports `OPENCLAW_BIND_MOUNT_OPTIONS` override. (#39449) Thanks @langdon and @githubbzxs.
46+
- TUI/theme: detect light terminal backgrounds via `COLORFGBG` and pick a WCAG AA-compliant light palette, with `OPENCLAW_THEME=light|dark` override for terminals without auto-detection. (#38636) Thanks @ademczuk and @vincentkoc.
47+
- Agents/context-engine plugins: bootstrap runtime plugins once at embedded-run, compaction, and subagent boundaries so plugin-provided context engines and hooks load from the active workspace before runtime resolution. (#40232)
3348

3449
## 2026.3.7
3550

@@ -115,6 +130,7 @@ Docs: https://docs.openclaw.ai
115130
- Agents/compaction safeguard pre-check: skip embedded compaction before entering the Pi SDK when a session has no real conversation messages, avoiding unnecessary LLM API calls on idle sessions. (#36451) thanks @Sid-Qin.
116131
- Config/schema cache key stability: build merged schema cache keys with incremental hashing to avoid large single-string serialization and prevent `RangeError: Invalid string length` on high-cardinality plugin/channel metadata. (#36603) Thanks @powermaster888.
117132
- iMessage/cron completion announces: strip leaked inline reply tags (for example `[[reply_to:6100]]`) from user-visible completion text so announcement deliveries do not expose threading metadata. (#24600) Thanks @vincentkoc.
133+
- Cron/manual run enqueue flow: queue `cron.run` requests behind the cron execution lane, return immediate `{ ok: true, enqueued: true, runId }` acknowledgements, preserve `{ ok: true, ran: false, reason }` skip responses for already-running and not-due jobs, and document the asynchronous completion flow. (#40204)
118134
- Control UI/iMessage duplicate reply routing: keep internal webchat turns on dispatcher delivery (instead of origin-channel reroute) so Control UI chats do not duplicate replies into iMessage, while preserving webchat-provider relayed routing for external surfaces. Fixes #33483. Thanks @alicexmolt.
119135
- Sessions/daily reset transcript archival: archive prior transcript files during stale-session scheduled/daily resets by capturing the previous session entry before rollover, preventing orphaned transcript files on disk. (#35493) Thanks @byungsker.
120136
- Feishu/group slash command detection: normalize group mention wrappers before command-authorization probing so mention-prefixed commands (for example `@Bot/model` and `@Bot /reset`) are recognized as gateway commands instead of being forwarded to the agent. (#35994) Thanks @liuxiaopai-ai.

0 commit comments

Comments
 (0)