diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index d3ee19860..14f17b0fe 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,15 +1,15 @@ { "repository": "openclaw/openclaw", - "sha": "9da2f7cf812cf8ad232fbaedf2edd96994dfa953", + "sha": "ad0abdb3d062bc42e67497bfe1a5645a7fdce942", "sources": { "openclaw": { "repository": "openclaw/openclaw", - "sha": "9da2f7cf812cf8ad232fbaedf2edd96994dfa953" + "sha": "ad0abdb3d062bc42e67497bfe1a5645a7fdce942" }, "clawhub": { "repository": "openclaw/clawhub", - "sha": "38c21345906ab1f107a91b33bb86b63667d96643" + "sha": "5b63d5df6071a91cfd3e5e184bc44e212e977cc9" } }, - "syncedAt": "2026-05-08T14:12:51.021Z" + "syncedAt": "2026-05-08T19:18:09.397Z" } diff --git a/docs/channels/imessage-from-bluebubbles.md b/docs/channels/imessage-from-bluebubbles.md index de5d8005b..c16cb3f42 100644 --- a/docs/channels/imessage-from-bluebubbles.md +++ b/docs/channels/imessage-from-bluebubbles.md @@ -92,7 +92,7 @@ iMessage and BlueBubbles share a lot of channel-level config. The keys that chan | `channels.bluebubbles.groupAllowFrom` | `channels.imessage.groupAllowFrom` | Same. | | `channels.bluebubbles.groups` | `channels.imessage.groups` | **Copy this verbatim, including any `groups: { "*": { ... } }` wildcard entry.** Per-group `requireMention`, `tools`, `toolsBySender` carry over. With `groupPolicy: "allowlist"`, an empty or missing `groups` block silently drops every group message — see "Group registry footgun" below. | | `channels.bluebubbles.sendReadReceipts` | `channels.imessage.sendReadReceipts` | Default `true`. With the bundled plugin this only fires when the private API probe is up. | -| `channels.bluebubbles.includeAttachments` | `channels.imessage.includeAttachments` | Same. | +| `channels.bluebubbles.includeAttachments` | `channels.imessage.includeAttachments` | Same shape, **same off-by-default**. If you had attachments flowing on BlueBubbles you must re-set this explicitly on the iMessage block — it does not carry over implicitly, and inbound photos/media will be silently dropped with no `Inbound message` log line until you do. | | `channels.bluebubbles.attachmentRoots` | `channels.imessage.attachmentRoots` | Local roots; same wildcard rules. | | _(N/A)_ | `channels.imessage.remoteAttachmentRoots` | Only used when `remoteHost` is set for SCP fetches. | | `channels.bluebubbles.mediaMaxMb` | `channels.imessage.mediaMaxMb` | Default 16 MB on iMessage (BlueBubbles default was 8 MB). Set explicitly if you want to keep the lower cap. | diff --git a/docs/channels/imessage.md b/docs/channels/imessage.md index 5071b8132..6a59f0b37 100644 --- a/docs/channels/imessage.md +++ b/docs/channels/imessage.md @@ -403,7 +403,7 @@ See [ACP Agents](/tools/acp-agents) for shared ACP binding behavior. - - inbound attachment ingestion is optional: `channels.imessage.includeAttachments` + - inbound attachment ingestion is **off by default** — set `channels.imessage.includeAttachments: true` to forward photos, voice memos, video, and other attachments to the agent. With it disabled, attachment-only iMessages are dropped before reaching the agent and may produce no `Inbound message` log line at all. - remote attachment paths can be fetched via SCP when `remoteHost` is set - attachment paths must match allowed roots: - `channels.imessage.attachmentRoots` (local) diff --git a/docs/clawhub/cli.md b/docs/clawhub/cli.md index f149f7eed..adbae702e 100644 --- a/docs/clawhub/cli.md +++ b/docs/clawhub/cli.md @@ -154,6 +154,8 @@ Stores your API token + cached registry URL. - Requires semver: `--version 1.2.3`. - `--owner ` publishes under an org/user publisher handle when the actor has publisher access. +- `--migrate-owner` moves an existing skill to `--owner` while publishing a new + version. Requires admin/owner access on both publishers. - Owner and review behavior is explained in `docs/publishing.md`. - Publishing a skill means it is released under `MIT-0` on ClawHub. - Published skills are free to use, modify, and redistribute without attribution. @@ -489,7 +491,7 @@ Notes: #### GitHub Actions ClawHub also ships an official reusable workflow at -[`/.github/workflows/package-publish.yml`](https://github.com/openclaw/clawhub/blob/38c21345906ab1f107a91b33bb86b63667d96643/.github/workflows/package-publish.yml) +[`/.github/workflows/package-publish.yml`](https://github.com/openclaw/clawhub/blob/5b63d5df6071a91cfd3e5e184bc44e212e977cc9/.github/workflows/package-publish.yml) for plugin repos. Typical caller setup: diff --git a/docs/clawhub/http-api.md b/docs/clawhub/http-api.md index 69ba038ae..da7bed4a8 100644 --- a/docs/clawhub/http-api.md +++ b/docs/clawhub/http-api.md @@ -1138,6 +1138,10 @@ Publishes a new version. - JSON body with `files` (storageId-based) is also accepted. - Optional payload field: `ownerHandle`. When present, the API resolves that publisher server-side and requires the actor to have publisher access. +- Optional payload field: `migrateOwner`. When `true` with `ownerHandle`, an + existing skill may move to that owner if the actor is an admin/owner on both + the current and target publishers. Without this opt-in, owner changes are + rejected. ### `POST /api/v1/packages` diff --git a/docs/clawhub/publishing.md b/docs/clawhub/publishing.md index 7c067b2c4..cb848f7c4 100644 --- a/docs/clawhub/publishing.md +++ b/docs/clawhub/publishing.md @@ -37,6 +37,19 @@ The publish request includes the selected owner, slug, version, changelog, and files. The server verifies that the actor can publish as that owner before it creates the release. +To move an existing skill to another owner while publishing a new version, choose +the new owner and explicitly confirm the ownership move. In the CLI/API, pass the +target owner plus the migration opt-in: + +```sh +clawhub skill publish ./review-helper --owner openclaw --migrate-owner --version 1.2.0 +``` + +Skill owner migration requires admin or owner access on both the current owner +and the destination owner. It preserves the skill, version history, stats, +comments, forks, aliases, and audit trail; old owner URLs continue through the +alias/redirect path. + ## Plugins Plugins use npm-style package names. Scoped package names include the owner in