Skip to content

Commit 5b1b48d

Browse files
authored
Merge branch 'main' into policy-gateway-exposure-conformance
2 parents e7af8ff + bb5010b commit 5b1b48d

207 files changed

Lines changed: 2574 additions & 412 deletions

File tree

Some content is hidden

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

.github/workflows/tui-pty.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: TUI PTY
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- "src/tui/**"
7+
- "scripts/dev/tui-pty-test-watch.ts"
8+
- "scripts/test-projects.test-support.mjs"
9+
- "package.json"
10+
- "pnpm-lock.yaml"
11+
- "test/scripts/test-projects.test.ts"
12+
- "test/vitest/vitest.test-shards.mjs"
13+
- "test/vitest/vitest.tui-pty.config.ts"
14+
- ".github/workflows/tui-pty.yml"
15+
workflow_dispatch:
16+
17+
permissions:
18+
contents: read
19+
20+
concurrency:
21+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
22+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
23+
24+
env:
25+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
26+
27+
jobs:
28+
tui-pty:
29+
runs-on: ubuntu-24.04
30+
timeout-minutes: 5
31+
steps:
32+
- name: Checkout
33+
uses: actions/checkout@v6
34+
35+
- name: Setup Node environment
36+
uses: ./.github/actions/setup-node-env
37+
with:
38+
install-bun: "false"
39+
40+
- name: Run TUI PTY tests
41+
run: timeout 120s node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.ts

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
Docs: https://docs.openclaw.ai
44

5-
## 2026.5.21
5+
## 2026.5.22
66

77
### Changes
88

9+
- Docs: clarify IPv4-only Gateway BYOH binding, trusted-proxy scope clearing, Android pairing approval, macOS Accessibility grants, Zalo profile env vars, password-store SecretRef setup, and Chinese memory navigation. Thanks @itskai-dev, @gwh7078, @longstoryscott, @MoeJaberr, and @yuaiccc.
910
- Docs: consolidate GLM under Z.AI, add the Upstash Box install guide and Gateway exposure runbook, clarify MEDIA directives, Copilot and Voyage setup, config path quoting, real behavior proof, and memory-file write guidance. Thanks @BobDu, @alitariksahin, @Jefsky, @musaabhasan, @OmerZeyveli, @leno23, @WuKongAI-CMU, @luoyanglang, and @majin1102.
1011
- Docs: clarify media provider credentials, Codex/OpenClaw code-mode boundaries, Slack and Telegram ack reactions, Feishu dynamic agents, secrets plaintext boundaries, memory guidance, and Chinese glossary terms. Thanks @nielskaspers, @cosmopolitan033, @drclaw-iq, @alexgduarte, @zccyman, @chengoak, and @cassthebandit.
1112
- Packaging: exclude documentation images and assets from the npm tarball, reducing published package size without affecting runtime docs search or CLI behavior. Thanks @SebTardif.
@@ -41,6 +42,7 @@ Docs: https://docs.openclaw.ai
4142
### Fixes
4243

4344
- Gateway/agents: preserve fresh session overrides and metadata when stale cached agent-session entries race with store updates, so subagent model/provider overrides and routing policy survive concurrent writes. (#19328) Thanks @CodeReclaimers.
45+
- Control UI/chat: keep chat session search inline with the session selector so the header no longer shows a duplicate standalone search row.
4446
- Restore Control UI gateway token pairing [AI]. (#85459) Thanks @pgondhi987.
4547
- CLI/update: repair managed npm plugin `openclaw` peer links during post-core convergence and reject stale or wrong-target peer links before restart. (#83794) Thanks @fuller-stack-dev.
4648
- CLI/agents: default new omitted-account bindings to all accounts when the channel has multiple configured accounts, and clarify account-scope docs. (#49769) Thanks @Gcaufy.
@@ -51,6 +53,7 @@ Docs: https://docs.openclaw.ai
5153
- Gateway/agents: return phase-aware `agent.wait` timeout attribution and only cool auth profiles on provider-started timeouts. Refs #65504. Thanks @100yenadmin.
5254
- Gateway: defer provider auth-state prewarm until after startup readiness so early gateway tool/session requests are not blocked by provider auth discovery. (#85272) Thanks @dutifulbob.
5355
- Gateway/models: coalesce provider auth-state rewarms after auth-profile failures and log event-loop delay for warm/rewarm work, so provider auth bursts no longer stack full auth sweeps behind channel replies.
56+
- Gateway/models: stop cancelled provider auth-state prewarms from continuing full provider sweeps, so reload and auth-failure bursts no longer keep startup busy.
5457
- Agents/Codex: show the first plan update as a transient chat status notice without counting it as final assistant content.
5558
- CLI/update: walk the macOS process ancestry and honor the inherited Gateway runtime PID before package updates stop the managed Gateway service, so nested in-band updater children can refuse instead of killing the LaunchAgent-supervised Gateway that owns them. Fixes #85120.
5659
- Gateway/LaunchAgent: wait for launchd reload bootout to finish and fall back to kickstart when bootstrap races, so reload handoff does not leave the service deregistered. Fixes #84630. (#84641) Thanks @NianJiuZst.
@@ -2200,6 +2203,7 @@ Docs: https://docs.openclaw.ai
22002203

22012204
- Browser/chrome-mcp: read Chrome DevTools MCP screenshot output from the extension-suffixed path, fixing ENOENT on screenshot capture. Fixes #77222. (#74685) Thanks @barbarhan.
22022205

2206+
- Agents/OpenAI: honor `compat.supportsTools: false` for OpenAI Completions models so chat-only compatible endpoints do not receive `tools`, `tool_choice`, or tool-history fallback payloads. Fixes #74664. Thanks @yelog.
22032207
- macOS/launchd: set generated Gateway LaunchAgent plists to `ProcessType=Interactive` so the gateway keeps timely execution during idle periods. Fixes #58061; refs #62294 and closed duplicate #66992. (#62308) Thanks @bryanpearson and @zssggle-rgb.
22042208
- Plugins/install: honor the beta update channel for onboarding and doctor-managed plugin installs by requesting floating npm and ClawHub specs with `@beta` while keeping persistent install records on the catalog default. Thanks @vincentkoc.
22052209
- WhatsApp/onboarding: canonicalize setup and pairing allowlist entries to WhatsApp's digit-only phone ids while still accepting E.164, JID, and `whatsapp:` inputs, so personal-phone allowlists match WhatsApp Web sender ids after setup. Thanks @vincentkoc.

apps/android/README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,13 @@ Pre-req checklist:
253253
5) Grant runtime permissions for capabilities you expect to pass (camera/mic/location/notification listener/location, etc.).
254254
6) No interactive system dialogs should be pending before test start.
255255
7) Canvas host is enabled and reachable from the device (do not run gateway with `OPENCLAW_SKIP_CANVAS_HOST=1`; startup logs should include `canvas host mounted at .../__openclaw__/`).
256-
8) Local operator test client pairing is approved. If first run fails with `pairing required`, approve latest pending device pairing request, then rerun:
256+
8) Local operator test client pairing is approved. If first run fails with `pairing required`, preview the latest pending request, approve the printed request ID, then rerun:
257257
9) For A2UI checks, keep the app on **Screen** tab; the node now auto-refreshes canvas capability once on first A2UI reachability failure (TTL-safe retry).
258258

259259
```bash
260260
openclaw devices list
261-
openclaw devices approve --latest
261+
openclaw devices approve --latest # preview only; copy the requestId from output
262+
openclaw devices approve <requestId>
262263
```
263264

264265
Run:
@@ -284,7 +285,7 @@ What it does:
284285
Common failure quick-fixes:
285286

286287
- `pairing required` before tests start:
287-
- approve pending device pairing (`openclaw devices approve --latest`) and rerun.
288+
- list pending requests (`openclaw devices list`), then approve with the exact ID (`openclaw devices approve <requestId>`) and rerun.
288289
- `A2UI host not reachable` / `A2UI_HOST_NOT_CONFIGURED`:
289290
- ensure the Canvas plugin host is running and reachable, keep the app on the **Screen** tab. The app refreshes the Canvas plugin surface URL once before failing; if it still fails, reconnect app and rerun.
290291
- `NODE_BACKGROUND_UNAVAILABLE: canvas unavailable`:

apps/android/app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ android {
6565
applicationId = "ai.openclaw.app"
6666
minSdk = 31
6767
targetSdk = 36
68-
versionCode = 2026052100
69-
versionName = "2026.5.21"
68+
versionCode = 2026052200
69+
versionName = "2026.5.22"
7070
ndk {
7171
// Support all major ABIs — native libs are tiny (~47 KB per ABI)
7272
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")

apps/ios/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# OpenClaw iOS Changelog
22

3+
## 2026.5.22 - 2026-05-22
4+
5+
Maintenance update for the current OpenClaw release.
6+
37
## 2026.5.21 - 2026-05-21
48

59
Maintenance update for the current OpenClaw release.

apps/ios/Config/Version.xcconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// Source of truth: apps/ios/version.json
33
// Generated by scripts/ios-sync-versioning.ts.
44

5-
OPENCLAW_IOS_VERSION = 2026.5.21
6-
OPENCLAW_MARKETING_VERSION = 2026.5.21
5+
OPENCLAW_IOS_VERSION = 2026.5.22
6+
OPENCLAW_MARKETING_VERSION = 2026.5.22
77
OPENCLAW_BUILD_VERSION = 1
88

99
#include? "../build/Version.xcconfig"

apps/ios/version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"version": "2026.5.21"
2+
"version": "2026.5.22"
33
}

apps/macos/Sources/OpenClaw/Resources/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
<key>CFBundlePackageType</key>
1616
<string>APPL</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>2026.5.21</string>
18+
<string>2026.5.22</string>
1919
<key>CFBundleVersion</key>
20-
<string>2026052100</string>
20+
<string>2026052200</string>
2121
<key>CFBundleIconFile</key>
2222
<string>OpenClaw</string>
2323
<key>CFBundleURLTypes</key>

docs/.i18n/zh-Hans-navigation.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,18 @@
137137
"zh-CN/concepts/session",
138138
"zh-CN/concepts/session-pruning",
139139
"zh-CN/concepts/session-tool",
140-
"zh-CN/concepts/memory",
140+
{
141+
"group": "记忆",
142+
"pages": [
143+
"zh-CN/concepts/memory",
144+
"zh-CN/concepts/memory-builtin",
145+
"zh-CN/concepts/memory-qmd",
146+
"zh-CN/concepts/memory-honcho",
147+
"zh-CN/concepts/memory-search",
148+
"zh-CN/concepts/active-memory",
149+
"zh-CN/concepts/dreaming"
150+
]
151+
},
141152
"zh-CN/concepts/compaction"
142153
]
143154
},

docs/channels/zalouser.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,24 @@ Accounts map to `zalouser` profiles in OpenClaw state. Example:
166166
}
167167
```
168168

169+
## Environment variables
170+
171+
The Zalo Personal plugin can also read profile selection from environment variables:
172+
173+
- `ZALOUSER_PROFILE`: profile name to use when no `profile` is set in channel or account config.
174+
- `ZCA_PROFILE`: legacy fallback profile name, used only when `ZALOUSER_PROFILE` is not set.
175+
176+
Profile names select the saved Zalo login credentials in OpenClaw state. Resolution order is:
177+
178+
1. Explicit `profile` in config.
179+
2. `ZALOUSER_PROFILE`.
180+
3. `ZCA_PROFILE`.
181+
4. The account id for non-default accounts, or `default` for the default account.
182+
183+
For multi-account setups, prefer setting `profile` on each account in config so
184+
one environment variable does not make multiple accounts share the same login
185+
session.
186+
169187
## Typing, reactions, and delivery acknowledgements
170188

171189
- OpenClaw sends a typing event before dispatching a reply (best-effort).

0 commit comments

Comments
 (0)