From e0fc7b18f504be56a3f27e2ddd9c49774ee6c728 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-sync[bot]" Date: Tue, 14 Apr 2026 16:23:20 +0000 Subject: [PATCH] chore(sync): mirror docs from openclaw/openclaw@450c3a8ed24e54aa0615be84d7bae03bf49e929b --- .openclaw-sync/source.json | 4 ++-- docs/.generated/plugin-sdk-api-baseline.sha256 | 4 ++-- docs/plugins/architecture.md | 9 +++++++++ docs/plugins/sdk-channel-plugins.md | 10 ++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index 1011598ff..cee163e34 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "27b14124d0fb7f5f4ef0bafb0877df07577d9a97", - "syncedAt": "2026-04-14T16:19:39.582Z" + "sha": "450c3a8ed24e54aa0615be84d7bae03bf49e929b", + "syncedAt": "2026-04-14T16:23:19.510Z" } diff --git a/docs/.generated/plugin-sdk-api-baseline.sha256 b/docs/.generated/plugin-sdk-api-baseline.sha256 index 371c47785..113eff3ae 100644 --- a/docs/.generated/plugin-sdk-api-baseline.sha256 +++ b/docs/.generated/plugin-sdk-api-baseline.sha256 @@ -1,2 +1,2 @@ -a1e765cf426077085975f1f00847026b71f301cad35cb9168713e2b6249c4a47 plugin-sdk-api-baseline.json -9f1cdbe8d9bfbd582edb671729c4c09e578fb1940e787cfd6aa82dee0bdf5de7 plugin-sdk-api-baseline.jsonl +cd06d41c9302b068d2d998e478a4cca5e0bdd0b165e381cc68740698a5921d21 plugin-sdk-api-baseline.json +8131372bd1fb433d24de85c94e3fe58368579abed10ec80f39370c6f6fee6373 plugin-sdk-api-baseline.jsonl diff --git a/docs/plugins/architecture.md b/docs/plugins/architecture.md index 88ce9a749..c336f9278 100644 --- a/docs/plugins/architecture.md +++ b/docs/plugins/architecture.md @@ -173,6 +173,15 @@ For channel plugins, the SDK surface is call lets a plugin return its visible actions, capabilities, and schema contributions together so those pieces do not drift apart. +When a channel-specific message-tool param carries a media source such as a +local path or remote media URL, the plugin should also return +`mediaSourceParams` from `describeMessageTool(...)`. Core uses that explicit +list to apply sandbox path normalization and outbound media-access hints +without hardcoding plugin-owned param names. +Prefer action-scoped maps there, not one channel-wide flat list, so a +profile-only media param does not get normalized on unrelated actions like +`send`. + Core passes runtime scope into that discovery step. Important fields include: - `accountId` diff --git a/docs/plugins/sdk-channel-plugins.md b/docs/plugins/sdk-channel-plugins.md index 04042a653..5e51b8b6e 100644 --- a/docs/plugins/sdk-channel-plugins.md +++ b/docs/plugins/sdk-channel-plugins.md @@ -35,6 +35,16 @@ shared `message` tool in core. Your plugin owns: Core owns the shared message tool, prompt wiring, the outer session-key shape, generic `:thread:` bookkeeping, and dispatch. +If your channel adds message-tool params that carry media sources, expose those +param names through `describeMessageTool(...).mediaSourceParams`. Core uses +that explicit list for sandbox path normalization and outbound media-access +policy, so plugins do not need shared-core special cases for provider-specific +avatar, attachment, or cover-image params. +Prefer returning an action-keyed map such as +`{ "set-profile": ["avatarUrl", "avatarPath"] }` so unrelated actions do not +inherit another action's media args. A flat array still works for params that +are intentionally shared across every exposed action. + If your platform stores extra scope inside conversation ids, keep that parsing in the plugin with `messaging.resolveSessionConversation(...)`. That is the canonical hook for mapping `rawId` to the base conversation id, optional thread