Skip to content

Commit 6b07bd8

Browse files
authored
fix(chat-ui): keep reasoning controls in mobile viewport
1 parent 7224c83 commit 6b07bd8

102 files changed

Lines changed: 5228 additions & 435 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/mantis-slack-desktop-smoke.yml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,6 @@ jobs:
364364
checkpoint_required=false
365365
if [[ "$APPROVAL_CHECKPOINTS" == "true" ]]; then
366366
evidence_summary="Mantis ran Slack native approval QA inside a Crabbox Linux VNC desktop, rendered pending/resolved approval checkpoints from the Slack API messages, and stored Slack QA artifacts."
367-
expected_result="Slack native exec and plugin approval checkpoints pass"
368367
screenshot_required=false
369368
desktop_capture_inline=false
370369
if [[ "$status" == "pass" ]]; then
@@ -373,8 +372,10 @@ jobs:
373372
checkpoint_scenarios=()
374373
if [[ "$scenario_label" == "approval-checkpoints" ]]; then
375374
checkpoint_scenarios=("slack-approval-exec-native" "slack-approval-plugin-native")
375+
expected_result="Slack native exec and plugin approval checkpoints pass"
376376
else
377377
checkpoint_scenarios=("$scenario_label")
378+
expected_result="Slack approval checkpoint passes for $scenario_label"
378379
fi
379380
checkpoint_scenarios_json="$(printf '%s\n' "${checkpoint_scenarios[@]}" | jq -R . | jq -s .)"
380381
checkpoint_artifacts="$(
@@ -383,12 +384,16 @@ jobs:
383384
--argjson scenario_ids "$checkpoint_scenarios_json" \
384385
'
385386
def scenario_kind($id):
386-
if $id == "slack-approval-exec-native" then "exec"
387-
elif $id == "slack-approval-plugin-native" then "plugin"
387+
if ($id | endswith("-exec-native")) then "exec"
388+
elif ($id | endswith("-plugin-native")) then "plugin"
388389
else error("unsupported approval checkpoint scenario: \($id)")
389390
end;
390391
def scenario_title($id):
391-
if scenario_kind($id) == "exec" then "Exec" else "Plugin" end;
392+
if ($id | startswith("slack-codex-")) then
393+
"Codex \(scenario_kind($id))"
394+
elif scenario_kind($id) == "exec" then "Exec"
395+
else "Plugin"
396+
end;
392397
[
393398
$scenario_ids[] as $id
394399
| ["pending", "resolved"][] as $state

.github/workflows/openclaw-release-checks.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ jobs:
538538
with:
539539
node-version: ${{ env.NODE_VERSION }}
540540
install-bun: "true"
541-
install-deps: "false"
541+
install-deps: "true"
542542

543543
- name: Resolve release package artifact
544544
id: package

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,19 @@ Docs: https://docs.openclaw.ai
1515

1616
### Fixes
1717

18+
- **Control UI approval prompts:** keep stale resolve failures and busy-state cleanup from leaking across newer approvals or Gateway reconnects. (#98394) Thanks @haruaiclone-droid.
19+
- **Agent empty replies:** surface a visible failure when a completed interactive turn has no deliverable reply, including queued follow-ups, while preserving explicit silence, pending continuations, and committed side effects. (#100456) Thanks @mushuiyu886.
20+
- **Child process output safety:** prevent stdout/stderr pipe failures from crashing agent exec sessions, local TUI shell commands, and bounded process execution. (#100407, #100406, #100410) Thanks @cxbAsDev.
21+
- **Background refresh isolation:** keep remote skill-bin refreshes running when one node fails, and contain periodic subagent-sweeper failures without hiding errors from direct callers. (#100393, #100390) Thanks @cxbAsDev.
22+
- **Skill scan diagnostics:** report directory enumeration failures through the existing resource diagnostics instead of silently dropping affected skills. (#100380) Thanks @wendy-chsy.
23+
- **Exec output sanitization:** remove complete ANSI sequences and render residual C0/C1 controls as visible escapes instead of silently discarding output bytes. (#100327) Thanks @LavyaTandel.
24+
- **Assistant visible text:** unwrap leaked standalone `<parameter>` tags while preserving their content and literal code/XML examples. (#100302) Thanks @nankingjing.
25+
- **Android microphone capture:** treat negative `AudioRecord.read` results as fatal shared-session errors so both transcription and Talk capture stop cleanly after device loss. (#100028) Thanks @NianJiuZst.
1826
- **iOS QR gateway handoff:** stop VisionKit before delivering scanned setup codes, and keep deferred auth, approval, Watch, and foreground-node work bound to its originating gateway across reconnects. (#99572) Thanks @PollyBot13.
1927
- **Agent terminal failures:** surface a safe interactive reply when an agent run ends without visible output, while preserving completed message-tool delivery and heartbeat-specific guidance. (#99304) Thanks @moeedahmed.
2028
- **MCP loopback tool results:** preserve schema-valid text, image, and embedded-resource content through HTTP tool calls while rendering malformed or protocol-incompatible blocks as safe text. (#100336) Thanks @tzy-17.
2129
- **Control UI tool-result images:** render direct image content blocks from Gateway history and make the delayed-send scroll E2E setup deterministic. (#100295) Thanks @lzyyzznl.
22-
- **Plugin approval diagnostics:** surface Gateway validation rejection reasons while keeping transport and availability failures fail-closed. (#100337) Thanks @tzy-17.
30+
- **Plugin approval diagnostics:** distinguish request validation rejections, expired wait decisions, and unavailable Gateways while keeping approval failures fail-closed. (#100337) Thanks @tzy-17.
2331
- **IRC Unicode messages:** split outbound PRIVMSG payloads on UTF-16 code-point boundaries so emoji cannot be cut into lone surrogates. (#96572) Thanks @llagy009.
2432
- **OpenAI realtime voice greetings:** prevent server VAD from creating a second outbound greeting while an explicit greeting response owns the turn, without disabling caller interruption. (#86285) Thanks @giodl73-repo.
2533
- **iOS Voice Wake cleanup:** avoid initializing the microphone audio pipeline while disabling inactive Voice Wake, preventing simulator launch aborts and unnecessary audio setup.

apps/.i18n/native-source.json

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -187,23 +187,23 @@
187187
},
188188
{
189189
"kind": "conditional-branch",
190-
"line": 2100,
190+
"line": 2102,
191191
"path": "apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt",
192192
"source": "Failed: this host requires wss:// or Tailscale Serve. No TLS endpoint detected.",
193193
"surface": "android",
194194
"id": "native.android.81009c40eed2216d"
195195
},
196196
{
197197
"kind": "conditional-branch",
198-
"line": 2102,
198+
"line": 2104,
199199
"path": "apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt",
200200
"source": "Failed: secure endpoint reached, but TLS fingerprint verification timed out. Check Tailscale Serve or gateway TLS and retry.",
201201
"surface": "android",
202202
"id": "native.android.467899bb510b8e34"
203203
},
204204
{
205205
"kind": "conditional-branch",
206-
"line": 2104,
206+
"line": 2106,
207207
"path": "apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt",
208208
"source": "Failed: couldn't reach the secure gateway endpoint for this host.",
209209
"surface": "android",
@@ -7259,103 +7259,143 @@
72597259
},
72607260
{
72617261
"kind": "ui-localized-call",
7262-
"line": 100,
7262+
"line": 97,
7263+
"path": "apps/ios/Sources/Design/ChatProTab.swift",
7264+
"source": "Unable to Export Transcript",
7265+
"surface": "apple",
7266+
"id": "native.apple.e5524d5756a62744"
7267+
},
7268+
{
7269+
"kind": "ui-call",
7270+
"line": 101,
7271+
"path": "apps/ios/Sources/Design/ChatProTab.swift",
7272+
"source": "OK",
7273+
"surface": "apple",
7274+
"id": "native.apple.942d6a10fd90d6e3"
7275+
},
7276+
{
7277+
"kind": "ui-call",
7278+
"line": 105,
7279+
"path": "apps/ios/Sources/Design/ChatProTab.swift",
7280+
"source": "OpenClaw could not prepare the Markdown file.",
7281+
"surface": "apple",
7282+
"id": "native.apple.3548c8d1ab43e85e"
7283+
},
7284+
{
7285+
"kind": "ui-localized-call",
7286+
"line": 125,
72637287
"path": "apps/ios/Sources/Design/ChatProTab.swift",
72647288
"source": "What would you like to work on?",
72657289
"surface": "apple",
72667290
"id": "native.apple.202b97e93b938049"
72677291
},
72687292
{
72697293
"kind": "ui-call",
7270-
"line": 111,
7294+
"line": 136,
72717295
"path": "apps/ios/Sources/Design/ChatProTab.swift",
72727296
"source": "The session attaches once the gateway is ready.",
72737297
"surface": "apple",
72747298
"id": "native.apple.32179ce0b6d4543f"
72757299
},
72767300
{
72777301
"kind": "ui-modifier",
7278-
"line": 187,
7302+
"line": 212,
72797303
"path": "apps/ios/Sources/Design/ChatProTab.swift",
72807304
"source": "Opens Settings / Gateway",
72817305
"surface": "apple",
72827306
"id": "native.apple.d19c9577e0fdfea7"
72837307
},
72847308
{
7285-
"kind": "conditional-branch",
7309+
"kind": "ui-call",
72867310
"line": 237,
72877311
"path": "apps/ios/Sources/Design/ChatProTab.swift",
7312+
"source": "Export Transcript",
7313+
"surface": "apple",
7314+
"id": "native.apple.ced228bb4d20a726"
7315+
},
7316+
{
7317+
"kind": "ui-modifier",
7318+
"line": 247,
7319+
"path": "apps/ios/Sources/Design/ChatProTab.swift",
7320+
"source": "Chat actions",
7321+
"surface": "apple",
7322+
"id": "native.apple.940e1f943750c94b"
7323+
},
7324+
{
7325+
"kind": "conditional-branch",
7326+
"line": 300,
7327+
"path": "apps/ios/Sources/Design/ChatProTab.swift",
72887328
"source": "Connected",
72897329
"surface": "apple",
72907330
"id": "native.apple.b635acd93246d67b"
72917331
},
72927332
{
72937333
"kind": "conditional-branch",
7294-
"line": 237,
7334+
"line": 300,
72957335
"path": "apps/ios/Sources/Design/ChatProTab.swift",
72967336
"source": "Unavailable",
72977337
"surface": "apple",
72987338
"id": "native.apple.04934af85e3b9d6e"
72997339
},
73007340
{
73017341
"kind": "conditional-branch",
7302-
"line": 248,
7342+
"line": 311,
73037343
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73047344
"source": "Connect to a gateway",
73057345
"surface": "apple",
73067346
"id": "native.apple.889fe76e02b8ad5d"
73077347
},
73087348
{
73097349
"kind": "conditional-branch",
7310-
"line": 248,
7350+
"line": 311,
73117351
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73127352
"source": "Message \\(self.agentDisplayName)...",
73137353
"surface": "apple",
73147354
"id": "native.apple.e8173c7d24457256"
73157355
},
73167356
{
73177357
"kind": "ui-localized-call",
7318-
"line": 298,
7358+
"line": 361,
73197359
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73207360
"source": "Check OpenClaw status",
73217361
"surface": "apple",
73227362
"id": "native.apple.14492e334b87e4f2"
73237363
},
73247364
{
73257365
"kind": "ui-localized-call",
7326-
"line": 299,
7366+
"line": 362,
73277367
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73287368
"source": "Summarize the current OpenClaw status and tell me what needs attention.",
73297369
"surface": "apple",
73307370
"id": "native.apple.bbf7bd23da1e7865"
73317371
},
73327372
{
73337373
"kind": "ui-localized-call",
7334-
"line": 302,
7374+
"line": 365,
73357375
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73367376
"source": "What can I control here?",
73377377
"surface": "apple",
73387378
"id": "native.apple.ea8cbb1b4230c652"
73397379
},
73407380
{
73417381
"kind": "ui-localized-call",
7342-
"line": 303,
7382+
"line": 366,
73437383
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73447384
"source": "Show me which phone controls and device capabilities are available right now.",
73457385
"surface": "apple",
73467386
"id": "native.apple.451d25bdb3130ed0"
73477387
},
73487388
{
73497389
"kind": "ui-localized-call",
7350-
"line": 306,
7390+
"line": 369,
73517391
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73527392
"source": "Help me start voice chat",
73537393
"surface": "apple",
73547394
"id": "native.apple.503ec402d08bd43a"
73557395
},
73567396
{
73577397
"kind": "ui-localized-call",
7358-
"line": 307,
7398+
"line": 370,
73597399
"path": "apps/ios/Sources/Design/ChatProTab.swift",
73607400
"source": "Help me start a realtime voice session from this phone.",
73617401
"surface": "apple",

apps/.i18n/native/ar.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4538,6 +4538,21 @@
45384538
"source": "Ready",
45394539
"translated": "جاهز"
45404540
},
4541+
{
4542+
"id": "native.apple.e5524d5756a62744",
4543+
"source": "Unable to Export Transcript",
4544+
"translated": "تعذّر تصدير النص"
4545+
},
4546+
{
4547+
"id": "native.apple.942d6a10fd90d6e3",
4548+
"source": "OK",
4549+
"translated": "موافق"
4550+
},
4551+
{
4552+
"id": "native.apple.3548c8d1ab43e85e",
4553+
"source": "OpenClaw could not prepare the Markdown file.",
4554+
"translated": "تعذّر على OpenClaw إعداد ملف Markdown."
4555+
},
45414556
{
45424557
"id": "native.apple.202b97e93b938049",
45434558
"source": "What would you like to work on?",
@@ -4553,6 +4568,16 @@
45534568
"source": "Opens Settings / Gateway",
45544569
"translated": "يفتح Settings / Gateway"
45554570
},
4571+
{
4572+
"id": "native.apple.ced228bb4d20a726",
4573+
"source": "Export Transcript",
4574+
"translated": "تصدير النص"
4575+
},
4576+
{
4577+
"id": "native.apple.940e1f943750c94b",
4578+
"source": "Chat actions",
4579+
"translated": "إجراءات المحادثة"
4580+
},
45564581
{
45574582
"id": "native.apple.b635acd93246d67b",
45584583
"source": "Connected",

apps/.i18n/native/de.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4538,6 +4538,21 @@
45384538
"source": "Ready",
45394539
"translated": "Bereit"
45404540
},
4541+
{
4542+
"id": "native.apple.e5524d5756a62744",
4543+
"source": "Unable to Export Transcript",
4544+
"translated": "Transkript kann nicht exportiert werden"
4545+
},
4546+
{
4547+
"id": "native.apple.942d6a10fd90d6e3",
4548+
"source": "OK",
4549+
"translated": "OK"
4550+
},
4551+
{
4552+
"id": "native.apple.3548c8d1ab43e85e",
4553+
"source": "OpenClaw could not prepare the Markdown file.",
4554+
"translated": "OpenClaw konnte die Markdown-Datei nicht vorbereiten."
4555+
},
45414556
{
45424557
"id": "native.apple.202b97e93b938049",
45434558
"source": "What would you like to work on?",
@@ -4553,6 +4568,16 @@
45534568
"source": "Opens Settings / Gateway",
45544569
"translated": "Öffnet Einstellungen / Gateway"
45554570
},
4571+
{
4572+
"id": "native.apple.ced228bb4d20a726",
4573+
"source": "Export Transcript",
4574+
"translated": "Transkript exportieren"
4575+
},
4576+
{
4577+
"id": "native.apple.940e1f943750c94b",
4578+
"source": "Chat actions",
4579+
"translated": "Chat-Aktionen"
4580+
},
45564581
{
45574582
"id": "native.apple.b635acd93246d67b",
45584583
"source": "Connected",

apps/.i18n/native/es.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4538,6 +4538,21 @@
45384538
"source": "Ready",
45394539
"translated": "Listo"
45404540
},
4541+
{
4542+
"id": "native.apple.e5524d5756a62744",
4543+
"source": "Unable to Export Transcript",
4544+
"translated": "No se puede exportar la transcripción"
4545+
},
4546+
{
4547+
"id": "native.apple.942d6a10fd90d6e3",
4548+
"source": "OK",
4549+
"translated": "Aceptar"
4550+
},
4551+
{
4552+
"id": "native.apple.3548c8d1ab43e85e",
4553+
"source": "OpenClaw could not prepare the Markdown file.",
4554+
"translated": "OpenClaw no pudo preparar el archivo Markdown."
4555+
},
45414556
{
45424557
"id": "native.apple.202b97e93b938049",
45434558
"source": "What would you like to work on?",
@@ -4553,6 +4568,16 @@
45534568
"source": "Opens Settings / Gateway",
45544569
"translated": "Abre Configuración / Gateway"
45554570
},
4571+
{
4572+
"id": "native.apple.ced228bb4d20a726",
4573+
"source": "Export Transcript",
4574+
"translated": "Exportar transcripción"
4575+
},
4576+
{
4577+
"id": "native.apple.940e1f943750c94b",
4578+
"source": "Chat actions",
4579+
"translated": "Acciones del chat"
4580+
},
45564581
{
45574582
"id": "native.apple.b635acd93246d67b",
45584583
"source": "Connected",

0 commit comments

Comments
 (0)