From cd91bd9a1eb97fee3485de8572d9c38a43b7ed5c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 15 May 2026 11:28:52 +0100 Subject: [PATCH] docs: document admin HTTP RPC plugin --- CHANGELOG.md | 1 + docs/docs.json | 5 + docs/gateway/configuration-reference.md | 1 + docs/gateway/index.md | 5 +- docs/gateway/security/audit-checks.md | 2 +- docs/gateway/security/index.md | 4 +- docs/plugins/admin-http-rpc.md | 215 +++++++++++++++++++++++ docs/plugins/building-plugins.md | 5 + docs/plugins/manifest.md | 40 +++-- docs/plugins/plugin-inventory.md | 1 + docs/plugins/reference.md | 1 + docs/plugins/reference/admin-http-rpc.md | 23 +++ docs/plugins/sdk-subpaths.md | 1 + docs/web/index.md | 6 + 14 files changed, 290 insertions(+), 20 deletions(-) create mode 100644 docs/plugins/admin-http-rpc.md create mode 100644 docs/plugins/reference/admin-http-rpc.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 58a933675195..2c06953ba3a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ Docs: https://docs.openclaw.ai - Plugins/hooks: expose the resolved effective `contextTokenBudget` plus source/reference metadata on `llm_output` and sanitized `model_call_*` hook events/contexts so plugin cost and context-health alerts can use agent-level context caps. Fixes #64327. Thanks @BunsDev. - Channels/status reactions: wire `StatusReactionController` into WhatsApp message turns (queued → thinking → tool → done/error lifecycle, on par with Telegram and Discord), add `deploy`/`build`/`concierge` emoji categories with tool-token routing, and replace the status reaction defaults with self-explanatory emoji (🧠 thinking, 🛠️ tool, 💻 coding, 🌐 web, ⏳ stallSoft, ⚠️ stallHard, ✅ done, ❌ error, 🗜️ compacting) so stall and lifecycle reactions read as status indicators instead of emotional commentary. Fixes #59077. (#80612) Thanks @gado-ships-it. - Control UI: add a browser-local Text size setting in Appearance and Quick Settings, scaling chat and dense UI text while keeping inputs above the mobile Safari focus-zoom threshold. Fixes #8547. Thanks @BunsDev. +- Gateway/plugins: add a default-off `admin-http-rpc` plugin for selected control-plane methods, with security docs and no core endpoint config. (#81806) Thanks @liorb-mountapps. - Docs: add a dedicated ds4 provider page with local DeepSeek V4 Flash config, on-demand startup, context sizing, and live verification steps. - Release validation: add a package-installed Docker user-journey lane that verifies onboarding, mocked model setup, external plugin install/uninstall, ClickClack outbound/inbound messaging, Gateway restart survival, and doctor. - Release validation: add package-installed Docker lanes for real TTY onboarding, media and memory persistence, published-package upgrade journeys, and local marketplace plugin install/update/uninstall coverage. diff --git a/docs/docs.json b/docs/docs.json index 7d8ab5388f0d..83a97ed9ec75 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -100,6 +100,10 @@ "source": "/plugins/agent-tools", "destination": "/plugins/building-plugins#registering-agent-tools" }, + { + "source": "/gateway/admin-http-rpc", + "destination": "/plugins/admin-http-rpc" + }, { "source": "/cli/capability", "destination": "/cli/infer" @@ -1201,6 +1205,7 @@ "plugins/codex-computer-use", "plugins/google-meet", "plugins/webhooks", + "plugins/admin-http-rpc", "plugins/voice-call", "plugins/memory-wiki", "plugins/memory-lancedb", diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index 180f4af3e20c..ffb593dd4505 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -564,6 +564,7 @@ See [Inferred commitments](/concepts/commitments). ### OpenAI-compatible endpoints +- Admin HTTP RPC: off by default as the `admin-http-rpc` plugin. Enable the plugin to register `POST /api/v1/admin/rpc`. See [Admin HTTP RPC](/plugins/admin-http-rpc). - Chat Completions: disabled by default. Enable with `gateway.http.endpoints.chatCompletions.enabled: true`. - Responses API: `gateway.http.endpoints.responses.enabled`. - Responses URL-input hardening: diff --git a/docs/gateway/index.md b/docs/gateway/index.md index 9894d3b93caf..d84bc1d02312 100644 --- a/docs/gateway/index.md +++ b/docs/gateway/index.md @@ -73,7 +73,8 @@ After the first successful load, the running process serves the active in-memory - One always-on process for routing, control plane, and channel connections. - Single multiplexed port for: - WebSocket control/RPC - - HTTP APIs, OpenAI compatible (`/v1/models`, `/v1/embeddings`, `/v1/chat/completions`, `/v1/responses`, `/tools/invoke`) + - HTTP APIs (`/v1/models`, `/v1/embeddings`, `/v1/chat/completions`, `/v1/responses`, `/tools/invoke`) + - Plugin HTTP routes, such as optional `/api/v1/admin/rpc` - Control UI and hooks - Default bind mode: `loopback`. - Auth is required by default. Shared-secret setups use @@ -105,6 +106,8 @@ Planning note: All of these run on the main Gateway port and use the same trusted operator auth boundary as the rest of the Gateway HTTP API. +Admin HTTP RPC (`POST /api/v1/admin/rpc`) is a separate, default-off plugin route for host tooling that cannot use WebSocket RPC. See [Admin HTTP RPC](/plugins/admin-http-rpc). + ### Port and bind precedence | Setting | Resolution order | diff --git a/docs/gateway/security/audit-checks.md b/docs/gateway/security/audit-checks.md index 89652ea76e3e..682ca37426cb 100644 --- a/docs/gateway/security/audit-checks.md +++ b/docs/gateway/security/audit-checks.md @@ -37,7 +37,7 @@ exhaustive): | `gateway.bind_no_auth` | critical | Remote bind without shared secret | `gateway.bind`, `gateway.auth.*` | no | | `gateway.loopback_no_auth` | critical | Reverse-proxied loopback may become unauthenticated | `gateway.auth.*`, proxy setup | no | | `gateway.trusted_proxies_missing` | warn | Reverse-proxy headers are present but not trusted | `gateway.trustedProxies` | no | -| `gateway.http.no_auth` | warn/critical | Gateway HTTP APIs reachable with `auth.mode="none"` | `gateway.auth.mode`, `gateway.http.endpoints.*` | no | +| `gateway.http.no_auth` | warn/critical | Gateway HTTP APIs reachable with `auth.mode="none"` | `gateway.auth.mode`, `gateway.http.endpoints.*`, `plugins.entries.admin-http-rpc` | no | | `gateway.http.session_key_override_enabled` | info | HTTP API callers can override `sessionKey` | `gateway.http.allowSessionKeyOverride` | no | | `gateway.tools_invoke_http.dangerous_allow` | warn/critical | Re-enables dangerous tools over HTTP API | `gateway.tools.allow` | no | | `gateway.nodes.allow_commands_dangerous` | warn/critical | Enables high-impact node commands (camera/screen/contacts/calendar/SMS) | `gateway.nodes.allowCommands` | no | diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md index 6346b5682bea..68c328e4d96d 100644 --- a/docs/gateway/security/index.md +++ b/docs/gateway/security/index.md @@ -927,9 +927,9 @@ configured HTTP auth mode. Important boundary note: - Gateway HTTP bearer auth is effectively all-or-nothing operator access. -- Treat credentials that can call `/v1/chat/completions`, `/v1/responses`, or `/api/channels/*` as full-access operator secrets for that gateway. +- Treat credentials that can call `/v1/chat/completions`, `/v1/responses`, plugin routes such as `/api/v1/admin/rpc`, or `/api/channels/*` as full-access operator secrets for that gateway. - On the OpenAI-compatible HTTP surface, shared-secret bearer auth restores the full default operator scopes (`operator.admin`, `operator.approvals`, `operator.pairing`, `operator.read`, `operator.talk.secrets`, `operator.write`) and owner semantics for agent turns; narrower `x-openclaw-scopes` values do not reduce that shared-secret path. -- Per-request scope semantics on HTTP only apply when the request comes from an identity-bearing mode such as trusted proxy auth or `gateway.auth.mode="none"` on a private ingress. +- Per-request scope semantics on HTTP only apply when the request comes from an identity-bearing mode such as trusted proxy auth, or from an explicitly no-auth private ingress. - In those identity-bearing modes, omitting `x-openclaw-scopes` falls back to the normal operator default scope set; send the header explicitly when you want a narrower scope set. - `/tools/invoke` follows the same shared-secret rule: token/password bearer auth is treated as full operator access there too, while identity-bearing modes still honor declared scopes. - Do not share these credentials with untrusted callers; prefer separate gateways per trust boundary. diff --git a/docs/plugins/admin-http-rpc.md b/docs/plugins/admin-http-rpc.md new file mode 100644 index 000000000000..d5dd6658cd2d --- /dev/null +++ b/docs/plugins/admin-http-rpc.md @@ -0,0 +1,215 @@ +--- +summary: "Expose selected Gateway control-plane methods through the bundled, opt-in admin-http-rpc plugin" +read_when: + - Building host tooling that cannot use the Gateway WebSocket RPC client + - Exposing Gateway admin automation behind a private trusted ingress + - Auditing the security model for HTTP access to Gateway methods +title: "Admin HTTP RPC plugin" +--- + +The bundled `admin-http-rpc` plugin exposes selected Gateway control-plane methods over HTTP for trusted host automation that cannot use the normal Gateway WebSocket RPC client. + +The plugin is included with OpenClaw, but it is off by default. When disabled, the route is not registered. When enabled, it adds: + +- `POST /api/v1/admin/rpc` +- same listener as the Gateway: `http://:/api/v1/admin/rpc` + +Enable it only for private host tooling, tailnet automation, or a trusted internal ingress. Do not expose this route directly to the public internet. + +## Before you enable it + +Admin HTTP RPC is a full operator control-plane surface. Any caller that passes Gateway HTTP auth can invoke the allowlisted methods on this page. + +Use it when all of these are true: + +- The caller is trusted to operate the Gateway. +- The caller cannot use the WebSocket RPC client. +- The route is reachable only on loopback, a tailnet, or a private authenticated ingress. +- You have reviewed the allowed methods and they match the automation you plan to run. + +Use the WebSocket RPC path for OpenClaw clients and interactive tools that can keep a Gateway WebSocket connection open. + +## Enable + +Enable the bundled plugin: + + + + ```bash + openclaw plugins enable admin-http-rpc + openclaw gateway restart + ``` + + + ```json5 + { + plugins: { + entries: { + "admin-http-rpc": { enabled: true }, + }, + }, + } + ``` + + + +The route is registered during plugin startup. Restart the Gateway after changing plugin config. + +Disable it when you no longer need the HTTP surface: + +```bash +openclaw plugins disable admin-http-rpc +openclaw gateway restart +``` + +## Verify the route + +Use `health` as the smallest safe request: + +```bash +curl -sS http://:/api/v1/admin/rpc \ + -H 'Authorization: Bearer ' \ + -H 'Content-Type: application/json' \ + -d '{"method":"health","params":{}}' +``` + +A successful response has `ok: true`: + +```json +{ + "id": "generated-request-id", + "ok": true, + "payload": { + "status": "ok" + } +} +``` + +When the plugin is disabled, the route returns `404` because it is not registered. + +## Authentication + +The plugin route uses Gateway HTTP auth. + +Common authentication paths: + +- shared-secret auth (`gateway.auth.mode="token"` or `"password"`): `Authorization: Bearer ` +- trusted identity-bearing HTTP auth (`gateway.auth.mode="trusted-proxy"`): route through the configured identity-aware proxy and let it inject the required identity headers +- private-ingress open auth (`gateway.auth.mode="none"`): no auth header required + +## Security model + +Treat this plugin as a full Gateway operator surface. + +- Enabling the plugin intentionally offers access to the allowlisted admin RPC methods at `/api/v1/admin/rpc`. +- The plugin declares the reserved `contracts.gatewayMethodDispatch: ["authenticated-request"]` manifest contract so its Gateway-authenticated HTTP route can dispatch control-plane methods in process. +- Shared-secret bearer auth proves possession of the gateway operator secret. +- For `token` and `password` auth, narrower `x-openclaw-scopes` headers are ignored and the normal full operator defaults are restored. +- Trusted identity-bearing HTTP modes honor `x-openclaw-scopes` when present. +- `gateway.auth.mode="none"` means this route is unauthenticated if the plugin is enabled. Use that only behind a private ingress you fully trust. +- Requests dispatch through the same Gateway method handlers and scope checks as WebSocket RPC after the plugin route auth passes. +- Keep this route on loopback, tailnet, or a private trusted ingress. Do not expose it directly to the public internet. +- Plugin manifest contracts are not a sandbox. They prevent accidental use of reserved SDK helpers; trusted plugins still run in the Gateway process. + +Use separate gateways when callers cross trust boundaries. + +## Request + +```http +POST /api/v1/admin/rpc +Authorization: Bearer +Content-Type: application/json +``` + +```json +{ + "id": "optional-request-id", + "method": "health", + "params": {} +} +``` + +Fields: + +- `id` (string, optional): copied into the response. A UUID is generated when omitted. +- `method` (string, required): allowed Gateway method name. +- `params` (any, optional): method-specific params. + +The default max request body size is 1 MB. + +## Response + +Success responses use the Gateway RPC shape: + +```json +{ + "id": "optional-request-id", + "ok": true, + "payload": {} +} +``` + +Gateway method errors use: + +```json +{ + "id": "optional-request-id", + "ok": false, + "error": { + "code": "INVALID_REQUEST", + "message": "bad params" + } +} +``` + +HTTP status follows the Gateway error when possible. For example, `INVALID_REQUEST` returns `400`, and `UNAVAILABLE` returns `503`. + +## Allowed methods + +- discovery: `commands.list` + Returns the HTTP RPC method names allowed by this plugin. +- gateway: `health`, `status`, `logs.tail`, `usage.status`, `usage.cost`, `gateway.restart.request` +- config: `config.get`, `config.schema`, `config.schema.lookup`, `config.set`, `config.patch`, `config.apply` +- channels: `channels.status`, `channels.start`, `channels.stop`, `channels.logout` +- models: `models.list`, `models.authStatus` +- agents: `agents.list`, `agents.create`, `agents.update`, `agents.delete` +- approvals: `exec.approvals.get`, `exec.approvals.set`, `exec.approvals.node.get`, `exec.approvals.node.set` +- cron: `cron.status`, `cron.list`, `cron.get`, `cron.runs`, `cron.add`, `cron.update`, `cron.remove`, `cron.run` +- devices: `device.pair.list`, `device.pair.approve`, `device.pair.reject`, `device.pair.remove` +- nodes: `node.list`, `node.describe`, `node.pair.list`, `node.pair.approve`, `node.pair.reject`, `node.pair.remove`, `node.rename` +- tasks: `tasks.list`, `tasks.get`, `tasks.cancel` +- diagnostics: `doctor.memory.status`, `update.status` + +Other Gateway methods are blocked until they are intentionally added. + +## WebSocket comparison + +The normal Gateway WebSocket RPC path remains the preferred control-plane API for OpenClaw clients. Use admin HTTP RPC only for host tooling that needs a request/response HTTP surface. + +Shared-token WebSocket clients without a trusted device identity cannot self-declare admin scopes during connect. Admin HTTP RPC deliberately follows the existing trusted HTTP operator model: when the plugin is enabled, shared-secret bearer auth is treated as full operator access for this admin surface. + +## Troubleshooting + +`404 Not Found` + +: The plugin is disabled, the Gateway has not restarted since enabling it, or the request is going to a different Gateway process. + +`401 Unauthorized` + +: The request did not satisfy Gateway HTTP auth. Check the bearer token or the trusted-proxy identity headers. + +`400 INVALID_REQUEST` + +: The request body is not valid JSON, the `method` field is missing, or the method is not in the plugin allowlist. + +`503 UNAVAILABLE` + +: The Gateway method handler is unavailable. Check Gateway logs and retry after the Gateway finishes startup. + +## Related + +- [Operator scopes](/gateway/operator-scopes) +- [Gateway security](/gateway/security) +- [Remote access](/gateway/remote) +- [Plugin manifest](/plugins/manifest#contracts) +- [SDK subpaths](/plugins/sdk-subpaths) diff --git a/docs/plugins/building-plugins.md b/docs/plugins/building-plugins.md index 408b4ec6aec4..7f7b3f19874f 100644 --- a/docs/plugins/building-plugins.md +++ b/docs/plugins/building-plugins.md @@ -196,6 +196,11 @@ plugin-specific prefix. Core admin namespaces (`config.*`, `exec.approvals.*`, `wizard.*`, `update.*`) stay reserved and always resolve to `operator.admin`, even if a plugin asks for a narrower scope. +`openclaw/plugin-sdk/gateway-method-runtime` is a reserved control-plane bridge +for plugin HTTP routes that declare +`contracts.gatewayMethodDispatch: ["authenticated-request"]`. It is an +intentional-use guard for reviewed native plugins, not a sandbox boundary. + Hook guard semantics to keep in mind: - `before_tool_call`: `{ block: true }` is terminal and stops lower-priority handlers. diff --git a/docs/plugins/manifest.md b/docs/plugins/manifest.md index a606fa5ad5b8..9feba6f0ea86 100644 --- a/docs/plugins/manifest.md +++ b/docs/plugins/manifest.md @@ -628,6 +628,7 @@ read without importing the plugin runtime. "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "migrationProviders": ["hermes"], + "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] } } @@ -635,22 +636,23 @@ read without importing the plugin runtime. Each list is optional: -| Field | Type | What it means | -| -------------------------------- | ---------- | --------------------------------------------------------------------- | -| `embeddedExtensionFactories` | `string[]` | Codex app-server extension factory ids, currently `codex-app-server`. | -| `agentToolResultMiddleware` | `string[]` | Runtime ids a bundled plugin may register tool-result middleware for. | -| `externalAuthProviders` | `string[]` | Provider ids whose external auth profile hook this plugin owns. | -| `speechProviders` | `string[]` | Speech provider ids this plugin owns. | -| `realtimeTranscriptionProviders` | `string[]` | Realtime-transcription provider ids this plugin owns. | -| `realtimeVoiceProviders` | `string[]` | Realtime-voice provider ids this plugin owns. | -| `memoryEmbeddingProviders` | `string[]` | Memory embedding provider ids this plugin owns. | -| `mediaUnderstandingProviders` | `string[]` | Media-understanding provider ids this plugin owns. | -| `imageGenerationProviders` | `string[]` | Image-generation provider ids this plugin owns. | -| `videoGenerationProviders` | `string[]` | Video-generation provider ids this plugin owns. | -| `webFetchProviders` | `string[]` | Web-fetch provider ids this plugin owns. | -| `webSearchProviders` | `string[]` | Web-search provider ids this plugin owns. | -| `migrationProviders` | `string[]` | Import provider ids this plugin owns for `openclaw migrate`. | -| `tools` | `string[]` | Agent tool names this plugin owns. | +| Field | Type | What it means | +| -------------------------------- | ---------- | --------------------------------------------------------------------------------------------------- | +| `embeddedExtensionFactories` | `string[]` | Codex app-server extension factory ids, currently `codex-app-server`. | +| `agentToolResultMiddleware` | `string[]` | Runtime ids a bundled plugin may register tool-result middleware for. | +| `externalAuthProviders` | `string[]` | Provider ids whose external auth profile hook this plugin owns. | +| `speechProviders` | `string[]` | Speech provider ids this plugin owns. | +| `realtimeTranscriptionProviders` | `string[]` | Realtime-transcription provider ids this plugin owns. | +| `realtimeVoiceProviders` | `string[]` | Realtime-voice provider ids this plugin owns. | +| `memoryEmbeddingProviders` | `string[]` | Memory embedding provider ids this plugin owns. | +| `mediaUnderstandingProviders` | `string[]` | Media-understanding provider ids this plugin owns. | +| `imageGenerationProviders` | `string[]` | Image-generation provider ids this plugin owns. | +| `videoGenerationProviders` | `string[]` | Video-generation provider ids this plugin owns. | +| `webFetchProviders` | `string[]` | Web-fetch provider ids this plugin owns. | +| `webSearchProviders` | `string[]` | Web-search provider ids this plugin owns. | +| `migrationProviders` | `string[]` | Import provider ids this plugin owns for `openclaw migrate`. | +| `gatewayMethodDispatch` | `string[]` | Reserved entitlement for authenticated plugin HTTP routes that dispatch Gateway methods in-process. | +| `tools` | `string[]` | Agent tool names this plugin owns. | `contracts.embeddedExtensionFactories` is retained for bundled Codex app-server-only extension factories. Bundled tool-result transforms should @@ -674,6 +676,12 @@ built-in adapters such as `local`. Standalone CLI paths use this manifest contract to load only the owning plugin before the full Gateway runtime has registered providers. +`contracts.gatewayMethodDispatch` currently accepts +`"authenticated-request"`. It is an API hygiene gate for native plugin HTTP +routes that intentionally dispatch Gateway control-plane methods in-process, not +a sandbox against malicious native plugins. Use it only for tightly reviewed +bundled/operator surfaces that already require Gateway HTTP auth. + ## mediaUnderstandingProviderMetadata reference Use `mediaUnderstandingProviderMetadata` when a media-understanding provider has diff --git a/docs/plugins/plugin-inventory.md b/docs/plugins/plugin-inventory.md index d60273a14e6f..d6d8c2d7c522 100644 --- a/docs/plugins/plugin-inventory.md +++ b/docs/plugins/plugin-inventory.md @@ -51,6 +51,7 @@ commands. | Plugin | Description | Distribution | Surface | | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [admin-http-rpc](/plugins/reference/admin-http-rpc) | OpenClaw admin HTTP RPC endpoint. | `@openclaw/admin-http-rpc`
included in OpenClaw | contracts: gatewayMethodDispatch | | [alibaba](/plugins/reference/alibaba) | Adds video generation provider support. | `@openclaw/alibaba-provider`
included in OpenClaw | contracts: videoGenerationProviders | | [anthropic](/plugins/reference/anthropic) | Adds Anthropic model provider support to OpenClaw. | `@openclaw/anthropic-provider`
included in OpenClaw | providers: anthropic; contracts: mediaUnderstandingProviders | | [arcee](/plugins/reference/arcee) | Adds Arcee model provider support to OpenClaw. | `@openclaw/arcee-provider`
included in OpenClaw | providers: arcee | diff --git a/docs/plugins/reference.md b/docs/plugins/reference.md index c3022e42a20c..2c1f6fc5343a 100644 --- a/docs/plugins/reference.md +++ b/docs/plugins/reference.md @@ -18,6 +18,7 @@ pnpm plugins:inventory:gen | Plugin | Description | Distribution | Surface | | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [acpx](/plugins/reference/acpx) | Embedded ACP runtime backend with plugin-owned session and transport management. | `@openclaw/acpx`
npm; ClawHub | skills | +| [admin-http-rpc](/plugins/reference/admin-http-rpc) | OpenClaw admin HTTP RPC endpoint. | `@openclaw/admin-http-rpc`
included in OpenClaw | contracts: gatewayMethodDispatch | | [alibaba](/plugins/reference/alibaba) | Adds video generation provider support. | `@openclaw/alibaba-provider`
included in OpenClaw | contracts: videoGenerationProviders | | [amazon-bedrock](/plugins/reference/amazon-bedrock) | Adds Amazon Bedrock model provider support to OpenClaw. | `@openclaw/amazon-bedrock-provider`
npm; ClawHub | providers: amazon-bedrock; contracts: memoryEmbeddingProviders | | [amazon-bedrock-mantle](/plugins/reference/amazon-bedrock-mantle) | Adds Amazon Bedrock Mantle model provider support to OpenClaw. | `@openclaw/amazon-bedrock-mantle-provider`
npm; ClawHub | providers: amazon-bedrock-mantle | diff --git a/docs/plugins/reference/admin-http-rpc.md b/docs/plugins/reference/admin-http-rpc.md new file mode 100644 index 000000000000..3731495dda73 --- /dev/null +++ b/docs/plugins/reference/admin-http-rpc.md @@ -0,0 +1,23 @@ +--- +summary: "OpenClaw admin HTTP RPC endpoint." +read_when: + - You are installing, configuring, or auditing the admin-http-rpc plugin +title: "Admin Http Rpc plugin" +--- + +# Admin Http Rpc plugin + +OpenClaw admin HTTP RPC endpoint. + +## Distribution + +- Package: `@openclaw/admin-http-rpc` +- Install route: included in OpenClaw + +## Surface + +contracts: gatewayMethodDispatch + +## Related docs + +- [admin-http-rpc](/plugins/admin-http-rpc) diff --git a/docs/plugins/sdk-subpaths.md b/docs/plugins/sdk-subpaths.md index cc37350353b7..b27a1e4bd137 100644 --- a/docs/plugins/sdk-subpaths.md +++ b/docs/plugins/sdk-subpaths.md @@ -233,6 +233,7 @@ focused channel/runtime subpaths, `config-contracts`, `string-coerce-runtime`, | `plugin-sdk/lazy-runtime` | Lazy runtime import/binding helpers such as `createLazyRuntimeModule`, `createLazyRuntimeMethod`, and `createLazyRuntimeSurface` | | `plugin-sdk/process-runtime` | Process exec helpers | | `plugin-sdk/cli-runtime` | CLI formatting, wait, version, argument-invocation, and lazy command-group helpers | + | `plugin-sdk/gateway-method-runtime` | Reserved Gateway method dispatch helper for plugin HTTP routes that declare `contracts.gatewayMethodDispatch: ["authenticated-request"]` | | `plugin-sdk/gateway-runtime` | Gateway client, event-loop-ready client start helper, gateway CLI RPC, gateway protocol errors, and channel-status patch helpers | | `plugin-sdk/config-contracts` | Focused type-only config surface for plugin config shapes such as `OpenClawConfig` and channel/provider config types | | `plugin-sdk/plugin-config-runtime` | Runtime plugin-config lookup helpers such as `requireRuntimeConfig`, `resolvePluginConfigObject`, and `resolveLivePluginConfigObject` | diff --git a/docs/web/index.md b/docs/web/index.md index 6c91277b8fbd..0de235d3409f 100644 --- a/docs/web/index.md +++ b/docs/web/index.md @@ -19,6 +19,12 @@ Capabilities live in [Control UI](/web/control-ui). The rest of this page focuse When `hooks.enabled=true`, the Gateway also exposes a small webhook endpoint on the same HTTP server. See [Gateway configuration](/gateway/configuration) → `hooks` for auth + payloads. +## Admin HTTP RPC + +Admin HTTP RPC exposes selected Gateway control-plane methods at `POST /api/v1/admin/rpc`. +It is off by default and is registered only when the `admin-http-rpc` plugin is enabled. +See [Admin HTTP RPC](/plugins/admin-http-rpc) for the auth model, allowed methods, and WebSocket comparison. + ## Config (default-on) The Control UI is **enabled by default** when assets are present (`dist/control-ui`).