Skip to content

Commit 41e2d19

Browse files
authored
fix(media-core): normalize GIF content type detection
1 parent 3524e1d commit 41e2d19

143 files changed

Lines changed: 3680 additions & 612 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/sandbox-common-smoke.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,10 @@ jobs:
5757
BASE_IMAGE="openclaw-sandbox-smoke-base:bookworm-slim" \
5858
TARGET_IMAGE="openclaw-sandbox-common-smoke:bookworm-slim" \
5959
PACKAGES="ca-certificates" \
60-
INSTALL_PNPM=0 \
6160
INSTALL_BUN=0 \
6261
INSTALL_BREW=0 \
6362
FINAL_USER=sandbox \
6463
scripts/sandbox-common-setup.sh
6564
66-
u="$(timeout --kill-after=30s 2m docker run --rm openclaw-sandbox-common-smoke:bookworm-slim sh -lc 'id -un')"
67-
test "$u" = "sandbox"
65+
timeout --kill-after=30s 2m docker run --rm openclaw-sandbox-common-smoke:bookworm-slim sh -lc \
66+
'set -e; test "$(id -un)" = sandbox; node --version; pnpm --version'

apps/ios/APP-REVIEW-NOTES.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,19 @@ Reopen OpenClaw, confirm Talk is still active, then tap `Stop Talk`.
105105
4. Confirm at least one `agent` row is connected.
106106
5. Confirm the iPhone review device appears in the connected instances list.
107107

108+
## Live Activity / Dynamic Island
109+
110+
1. Tap `Settings`.
111+
2. Tap `Reconnect`.
112+
3. Immediately send OpenClaw to the background by returning to the Home Screen
113+
or locking the iPhone.
114+
4. Watch the Lock Screen or Dynamic Island while the Gateway reconnects.
115+
116+
Expected result: while reconnecting, iOS can show an `OpenClaw` Live Activity
117+
with connection status such as `Connecting...` or `Reconnecting...`. On a fast
118+
network this status may be brief because OpenClaw ends the Live Activity after
119+
the Gateway reconnects successfully.
120+
108121
## Push Notification
109122

110123
1. Tap the `Chat` tab.

apps/ios/Sources/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
<key>NSCalendarsWriteOnlyAccessUsageDescription</key>
5858
<string>OpenClaw uses your calendars to add events when you enable calendar access.</string>
5959
<key>NSCameraUsageDescription</key>
60-
<string>OpenClaw can capture photos or short video clips when requested via the gateway.</string>
60+
<string>OpenClaw uses the camera when you scan a Gateway setup QR code or ask your paired Gateway or assistant to capture a photo or short video from this iPhone, for example to connect to your Gateway or show your assistant a document, device screen, or workspace.</string>
6161
<key>NSContactsUsageDescription</key>
6262
<string>OpenClaw uses your contacts so you can search and reference people while using the assistant.</string>
6363
<key>NSLocalNetworkUsageDescription</key>

apps/ios/project.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ targets:
156156
NSAllowsLocalNetworking: true
157157
NSBonjourServices:
158158
- _openclaw-gw._tcp
159-
NSCameraUsageDescription: OpenClaw can capture photos or short video clips when requested via the gateway.
159+
NSCameraUsageDescription: OpenClaw uses the camera when you scan a Gateway setup QR code or ask your paired Gateway or assistant to capture a photo or short video from this iPhone, for example to connect to your Gateway or show your assistant a document, device screen, or workspace.
160160
NSCalendarsUsageDescription: OpenClaw uses your calendars to show events and scheduling context when you enable calendar access.
161161
NSCalendarsFullAccessUsageDescription: OpenClaw uses your calendars to show events and scheduling context when you enable calendar access.
162162
NSCalendarsWriteOnlyAccessUsageDescription: OpenClaw uses your calendars to add events when you enable calendar access.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
9246475f5771612a5fd12de38b153783c4a4cbb8b2682a5c40115916661c90f2 config-baseline.json
2-
6349131baaa1828f2a071f42e4d7b17c8966c59b6588c8a4c1a32ea5ea4dcd5e config-baseline.core.json
1+
f5a5855ddd7aa8c23a732f257eceaa20fd163b1d5f342c909f4aef15aa8643cf config-baseline.json
2+
b8dffdb1a328aaf728a0707ab04d21c65f1a225a2360042e10832aa608699716 config-baseline.core.json
33
671979e86e4c4f59415d0a20879e838f9bbd883b3d29eeb02cb5131db8d187fe config-baseline.channel.json
44
94529978588d6e3776a86780b22cf9ff46a6f9957f2f178d3829403fad451ca7 config-baseline.plugin.json
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
ebb0ae07e4d6f6ea1faccba7604c9da71a5401b3aa2bc3618963e1e44a8dbcce plugin-sdk-api-baseline.json
2-
9b7aee16d91c6a1b042a7d7e6f92a77b3e234337cc5fcf5a797de05fa9e9a02e plugin-sdk-api-baseline.jsonl
1+
8736e8cf5200a1dda3e3257d91de87510097a2b8369ce06c9891dbbf823863c4 plugin-sdk-api-baseline.json
2+
4902be589e5ac9d77014e5b1473e8e4345def7817ae8ea7b205959d4d604c981 plugin-sdk-api-baseline.jsonl

docs/concepts/usage-tracking.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,68 @@ title: "Usage tracking"
3030
- CLI: `openclaw channels list` prints the same usage snapshot alongside provider config (use `--no-usage` to skip).
3131
- macOS menu bar: "Usage" section under Context (only if available).
3232

33+
## Default usage footer mode
34+
35+
`/usage off|tokens|full` sets the footer for a session and is remembered for that
36+
session. `messages.responseUsage` seeds that mode for sessions that have not
37+
chosen one, so the footer can be on by default without typing `/usage` each time.
38+
39+
Set one mode for every channel, or a per-channel map with a `default` fallback:
40+
41+
```jsonc
42+
{
43+
"messages": {
44+
"responseUsage": "tokens",
45+
// or: { "default": "off", "discord": "full" }
46+
},
47+
}
48+
```
49+
50+
### Three distinct session states
51+
52+
A session's `responseUsage` field has three representable states, each with
53+
different semantics:
54+
55+
| State | Stored value | Effective mode |
56+
| ------------------- | ------------------------------- | --------------------------------------------------------------------- |
57+
| **Unset / inherit** | `undefined` (absent) | Falls through to `messages.responseUsage` config default, then `off`. |
58+
| **Explicit off** | `"off"` (stored) | Always off — a non-off config default cannot re-enable the footer. |
59+
| **Explicit on** | `"tokens"` or `"full"` (stored) | That mode, regardless of config default. |
60+
61+
### Precedence
62+
63+
Effective mode = session override → channel config entry → `default``off`.
64+
65+
An explicit `/usage off` is **persisted** as the literal value `"off"` in the
66+
session, not the same as "unset." This means a non-off `messages.responseUsage`
67+
default cannot turn the footer back on once the user has explicitly disabled it.
68+
69+
### Resetting vs. turning off
70+
71+
- `/usage off` — forces the footer off and persists that choice. A configured
72+
non-off default cannot override this.
73+
- `/usage reset` (aliases: `inherit`, `clear`, `default`) — clears the session
74+
override. The session then **inherits** the effective config default
75+
(`messages.responseUsage`). If no default is configured, the footer is off
76+
(unchanged from before). Use this to "go back to default" without explicitly
77+
turning the footer on.
78+
- A full session reset (`/reset` or `/new`) or a session rollover **preserves**
79+
the explicit usage-mode preference so the user's display choice survives
80+
session rollovers. Only `/usage reset` (and its aliases) actually clears the
81+
override.
82+
83+
### Toggle behavior
84+
85+
`/usage` with no arguments cycles: off → tokens → full → off. The starting point
86+
for the cycle is the **effective** current mode (session override falling through
87+
to the config default when unset), so the cycle is always consistent with what
88+
the user sees in the footer.
89+
90+
### Config
91+
92+
With no config the prior behavior holds (footer off until `/usage`). Use
93+
`/usage reset` to clear a session override and re-inherit the configured default.
94+
3395
## Custom `/usage full` footer
3496

3597
`/usage full` shows a built-in compact footer with model, reasoning, fast/slow,

docs/gateway/sandboxing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ If you installed OpenClaw via `npm install -g openclaw`, use the inline `docker
415415

416416
</Step>
417417
<Step title="Optional: build the common image">
418-
For a more functional sandbox image with common tooling (for example `curl`, `jq`, `nodejs`, `python3`, `git`):
418+
For a more functional sandbox image with common tooling (for example `curl`, `jq`, Node 24, pnpm, `python3`, and `git`):
419419

420420
From a source checkout:
421421

docs/reference/token-use.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ Use these in chat:
7676
configured for the active model.
7777
- `/usage off|tokens|full` → appends a **per-response usage footer** to every reply.
7878
- Persists per session (stored as `responseUsage`).
79+
- `/usage reset` (aliases: `inherit`, `clear`, `default`) — clears the session
80+
override so the session re-inherits the configured default.
7981
- `/usage full` shows estimated cost only when OpenClaw has usage metadata and
8082
local pricing for the active model. Otherwise it shows tokens only.
8183
- `/usage cost` → shows a local cost summary from OpenClaw session logs.

docs/tools/slash-commands.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ plugins.
240240
| `/tasks` | List active/recent background tasks for the current session |
241241
| `/context [list\|detail\|map\|json]` | Explain how context is assembled |
242242
| `/whoami` | Show your sender id. Alias: `/id` |
243-
| `/usage off\|tokens\|full\|cost` | Control the per-response usage footer or print a local cost summary |
243+
| `/usage off\|tokens\|full\|reset\|cost` | Control the per-response usage footer (`reset`/`inherit`/`clear`/`default` clears the session override to re-inherit the configured default) or print a local cost summary |
244244
</Accordion>
245245

246246
<Accordion title="Skills, allowlists, approvals">

0 commit comments

Comments
 (0)