feat(plugins): externalize Volcengine provider (#116854)

This commit is contained in:
Vincent Koc
2026-07-31 21:28:01 +08:00
committed by GitHub
parent aaab981ab0
commit b2b62b2e1e
10 changed files with 153 additions and 9 deletions
+4 -4
View File
@@ -51,7 +51,7 @@ Each entry lists the package, distribution route, and description.
## Core npm package
63 plugins
62 plugins
- **[admin-http-rpc](/plugins/reference/admin-http-rpc)** (`@openclaw/admin-http-rpc`) - included in OpenClaw. OpenClaw admin HTTP RPC endpoint.
@@ -167,8 +167,6 @@ Each entry lists the package, distribution route, and description.
- **[vllm](/plugins/reference/vllm)** (`@openclaw/vllm-provider`) - included in OpenClaw. Adds vLLM model provider support to OpenClaw.
- **[volcengine](/plugins/reference/volcengine)** (`@openclaw/volcengine-provider`) - included in OpenClaw. Adds Volcengine, Volcengine Plan model provider support to OpenClaw.
- **[web-readability](/plugins/reference/web-readability)** (`@openclaw/web-readability-plugin`) - included in OpenClaw. Extract readable article content from local HTML web fetch responses.
- **[webhooks](/plugins/reference/webhooks)** (`@openclaw/webhooks`) - included in OpenClaw. Authenticated inbound webhooks that bind external automation to OpenClaw TaskFlows.
@@ -181,7 +179,7 @@ Each entry lists the package, distribution route, and description.
## Official external packages
82 plugins
83 plugins
- **[acpx](/plugins/reference/acpx)** (`@openclaw/acpx`) - npm; ClawHub. OpenClaw ACP runtime backend with plugin-owned session and transport management.
@@ -333,6 +331,8 @@ Each entry lists the package, distribution route, and description.
- **[voice-call](/plugins/reference/voice-call)** (`@openclaw/voice-call`) - npm; ClawHub. OpenClaw voice-call plugin for Twilio, Telnyx, and Plivo phone calls.
- **[volcengine](/plugins/reference/volcengine)** (`@openclaw/volcengine-provider`) - npm; ClawHub: `clawhub:@openclaw/volcengine-provider`. Adds Volcengine, Volcengine Plan model provider support to OpenClaw.
- **[voyage](/plugins/reference/voyage)** (`@openclaw/voyage-provider`) - npm; ClawHub: `clawhub:@openclaw/voyage-provider`. Adds memory embedding provider support.
- **[vydra](/plugins/reference/vydra)** (`@openclaw/vydra-provider`) - npm; ClawHub: `clawhub:@openclaw/vydra-provider`. Adds Vydra model provider support to OpenClaw.
+1 -1
View File
@@ -12,7 +12,7 @@ Adds Volcengine, Volcengine Plan model provider support to OpenClaw.
## Distribution
- Package: `@openclaw/volcengine-provider`
- Install route: included in OpenClaw
- Install route: npm; ClawHub: `clawhub:@openclaw/volcengine-provider`
## Surface
+7 -1
View File
@@ -7,7 +7,7 @@ read_when:
- You want to use Volcengine Speech text-to-speech
---
The Volcengine provider gives access to Doubao models and third-party models hosted on Volcano Engine, with separate endpoints for general and coding workloads. The same bundled plugin also registers Volcengine Speech as a TTS provider.
The Volcengine provider gives access to Doubao models and third-party models hosted on Volcano Engine, with separate endpoints for general and coding workloads. The same official plugin also registers Volcengine Speech as a TTS provider.
| Detail | Value |
| ---------- | ---------------------------------------------------------- |
@@ -19,6 +19,12 @@ The Volcengine provider gives access to Doubao models and third-party models hos
## Getting started
<Steps>
<Step title="Install the plugin">
```bash
openclaw plugins install @openclaw/volcengine-provider
openclaw gateway restart
```
</Step>
<Step title="Set the API key">
Run interactive onboarding:
+13
View File
@@ -0,0 +1,13 @@
# OpenClaw Volcengine Provider
Official OpenClaw provider plugin for Volcengine models, the Volcengine coding
plan, and Volcengine Speech text-to-speech.
Install from OpenClaw:
```bash
openclaw plugins install @openclaw/volcengine-provider
openclaw gateway restart
```
See <https://docs.openclaw.ai/providers/volcengine> for model and speech setup.
+23 -3
View File
@@ -1,8 +1,11 @@
{
"name": "@openclaw/volcengine-provider",
"version": "2026.7.2",
"private": true,
"description": "OpenClaw Volcengine provider plugin",
"description": "OpenClaw Volcengine provider plugin.",
"repository": {
"type": "git",
"url": "https://github.com/openclaw/openclaw"
},
"type": "module",
"devDependencies": {
"@openclaw/plugin-sdk": "workspace:*"
@@ -10,6 +13,23 @@
"openclaw": {
"extensions": [
"./index.ts"
]
],
"install": {
"clawhubSpec": "clawhub:@openclaw/volcengine-provider",
"npmSpec": "@openclaw/volcengine-provider",
"defaultChoice": "npm",
"minHostVersion": ">=2026.7.2"
},
"compat": {
"pluginApi": ">=2026.7.2"
},
"build": {
"openclawVersion": "2026.7.2",
"bundledDist": false
},
"release": {
"publishToClawHub": true,
"publishToNpm": true
}
}
}
+1
View File
@@ -316,6 +316,7 @@
"!dist/extensions/venice/**",
"!dist/extensions/vercel-ai-gateway/**",
"!dist/extensions/voice-call/**",
"!dist/extensions/volcengine/**",
"!dist/extensions/voyage/**",
"!dist/extensions/vydra/**",
"!dist/extensions/whatsapp/**",
@@ -1804,6 +1804,75 @@
}
}
},
{
"name": "@openclaw/volcengine-provider",
"description": "OpenClaw Volcengine provider plugin.",
"source": "official",
"kind": "provider",
"openclaw": {
"plugin": {
"id": "volcengine",
"label": "Volcengine"
},
"providers": [
{
"id": "volcengine",
"aliases": [
"volcengine-plan"
],
"name": "Volcengine",
"docs": "/providers/volcengine",
"categories": [
"cloud",
"llm"
],
"envVars": [
"VOLCANO_ENGINE_API_KEY"
],
"authChoices": [
{
"method": "api-key",
"choiceId": "volcengine-api-key",
"choiceLabel": "Volcano Engine API key",
"groupId": "volcengine",
"groupLabel": "Volcano Engine",
"groupHint": "API key",
"optionKey": "volcengineApiKey",
"cliFlag": "--volcengine-api-key",
"cliOption": "--volcengine-api-key <key>",
"cliDescription": "Volcano Engine API key",
"onboardingScopes": [
"text-inference"
]
}
]
},
{
"id": "volcengine-plan",
"name": "Volcengine Plan",
"docs": "/providers/volcengine",
"categories": [
"cloud",
"llm"
],
"envVars": [
"VOLCANO_ENGINE_API_KEY"
]
}
],
"contracts": {
"speechProviders": [
"volcengine"
]
},
"install": {
"clawhubSpec": "clawhub:@openclaw/volcengine-provider",
"npmSpec": "@openclaw/volcengine-provider",
"defaultChoice": "npm",
"minHostVersion": ">=2026.7.2"
}
}
},
{
"name": "@openclaw/stepfun-provider",
"description": "OpenClaw StepFun provider plugin.",
+1
View File
@@ -168,6 +168,7 @@ describe("listPersistedBundledPluginLocationBridges", () => {
["duckduckgo", "@openclaw/duckduckgo-plugin", false],
["synthetic", "@openclaw/synthetic-provider", true],
["teams-meetings", "@openclaw/teams-meetings", true],
["volcengine", "@openclaw/volcengine-provider", true],
["voyage", "@openclaw/voyage-provider", true],
["vydra", "@openclaw/vydra-provider", true],
["zoom-meetings", "@openclaw/zoom-meetings", true],
@@ -2039,6 +2039,32 @@ describe("official external plugin catalog", () => {
});
});
it("lists Volcengine model and speech providers as one official external plugin", () => {
const entry = expectCatalogEntry("volcengine");
const manifest = getOfficialExternalPluginCatalogManifest(entry);
const volcengine = manifest?.providers?.find((provider) => provider.id === "volcengine");
expect(resolveOfficialExternalPluginId(entry)).toBe("volcengine");
expect(getOfficialExternalPluginCatalogEntry("volcengine-plan")).toBe(entry);
expect(resolveOfficialExternalPluginInstall(entry)).toEqual({
clawhubSpec: "clawhub:@openclaw/volcengine-provider",
npmSpec: "@openclaw/volcengine-provider",
defaultChoice: "npm",
minHostVersion: ">=2026.7.2",
});
expect(volcengine?.aliases).toEqual(["volcengine-plan"]);
expect(volcengine?.authChoices?.[0]).toMatchObject({
choiceId: "volcengine-api-key",
optionKey: "volcengineApiKey",
onboardingScopes: ["text-inference"],
});
expect(manifest?.providers?.map((provider) => provider.id)).toEqual([
"volcengine",
"volcengine-plan",
]);
expect(manifest?.contracts?.speechProviders).toEqual(["volcengine"]);
});
it.each([
["teams-meetings", "@openclaw/teams-meetings", "teams_meetings", "teams"],
["zoom-meetings", "@openclaw/zoom-meetings", "zoom_meetings", "zoom"],
@@ -391,6 +391,14 @@ describe("bundled plugin build entries", () => {
expect(artifacts).not.toContain("dist/extensions/voyage/package.json");
});
it("excludes the externalized Volcengine provider from bundled artifacts", () => {
const artifacts = listBundledPluginPackArtifacts();
expect(artifacts).not.toContain("dist/extensions/volcengine/index.js");
expect(artifacts).not.toContain("dist/extensions/volcengine/openclaw.plugin.json");
expect(artifacts).not.toContain("dist/extensions/volcengine/package.json");
});
it("keeps bundled channel secret contracts on packed top-level sidecars", () => {
const artifacts = listBundledPluginPackArtifacts();
const excludedPackageDirs = collectRootPackageExcludedExtensionDirs();