build: bump version to 2026.3.22

This commit is contained in:
Peter Steinberger
2026-03-22 11:57:51 -07:00
parent 4113db7d78
commit 412a3eb1ac
89 changed files with 185 additions and 185 deletions

View File

@@ -15,7 +15,7 @@ on:
workflow_dispatch:
inputs:
tag:
description: Existing release tag to backfill (for example v2026.3.13)
description: Existing release tag to backfill (for example v2026.3.22)
required: true
type: string

View File

@@ -7,7 +7,7 @@ on:
workflow_dispatch:
inputs:
tag:
description: Release tag to publish (for example v2026.3.14, v2026.3.14-beta.1, or fallback v2026.3.14-1)
description: Release tag to publish (for example v2026.3.22, v2026.3.22-beta.1, or fallback v2026.3.22-1)
required: true
type: string

View File

@@ -65,8 +65,8 @@ android {
applicationId = "ai.openclaw.app"
minSdk = 31
targetSdk = 36
versionCode = 2026032000
versionName = "2026.3.20"
versionCode = 2026032200
versionName = "2026.3.22"
ndk {
// Support all major ABIs — native libs are tiny (~47 KB per ABI)
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")

View File

@@ -1,8 +1,8 @@
// Shared iOS version defaults.
// Generated overrides live in build/Version.xcconfig (git-ignored).
OPENCLAW_GATEWAY_VERSION = 2026.3.14
OPENCLAW_MARKETING_VERSION = 2026.3.14
OPENCLAW_BUILD_VERSION = 202603140
OPENCLAW_GATEWAY_VERSION = 2026.3.22
OPENCLAW_MARKETING_VERSION = 2026.3.22
OPENCLAW_BUILD_VERSION = 202603220
#include? "../build/Version.xcconfig"

View File

@@ -65,9 +65,9 @@ Release behavior:
- Beta release also switches the app to `OpenClawPushTransport=relay`, `OpenClawPushDistribution=official`, and `OpenClawPushAPNsEnvironment=production`.
- The beta flow does not modify `apps/ios/.local-signing.xcconfig` or `apps/ios/LocalSigning.xcconfig`.
- Root `package.json.version` is the only version source for iOS.
- A root version like `2026.3.13-beta.1` becomes:
- `CFBundleShortVersionString = 2026.3.13`
- `CFBundleVersion = next TestFlight build number for 2026.3.13`
- A root version like `2026.3.22-beta.1` becomes:
- `CFBundleShortVersionString = 2026.3.22`
- `CFBundleVersion = next TestFlight build number for 2026.3.22`
Required env for beta builds:

View File

@@ -99,7 +99,7 @@ def normalize_release_version(raw_value)
version = raw_value.to_s.strip.sub(/\Av/, "")
UI.user_error!("Missing root package.json version.") unless env_present?(version)
unless version.match?(/\A\d+\.\d+\.\d+(?:[.-]?beta[.-]\d+)?\z/i)
UI.user_error!("Invalid package.json version '#{raw_value}'. Expected 2026.3.13 or 2026.3.13-beta.1.")
UI.user_error!("Invalid package.json version '#{raw_value}'. Expected 2026.3.22 or 2026.3.22-beta.1.")
end
version

View File

@@ -15,9 +15,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>2026.3.14</string>
<string>2026.3.22</string>
<key>CFBundleVersion</key>
<string>202603140</string>
<string>202603220</string>
<key>CFBundleIconFile</key>
<string>OpenClaw</string>
<key>CFBundleURLTypes</key>

View File

@@ -48,7 +48,7 @@ update **without** changing your persisted channel:
```bash
# Install a specific version
openclaw update --tag 2026.3.14
openclaw update --tag 2026.3.22
# Install from the beta dist-tag (one-off, does not persist)
openclaw update --tag beta
@@ -57,7 +57,7 @@ openclaw update --tag beta
openclaw update --tag main
# Install a specific npm package spec
openclaw update --tag openclaw@2026.3.12
openclaw update --tag openclaw@2026.3.22
```
Notes:
@@ -75,7 +75,7 @@ Preview what `openclaw update` would do without making changes:
```bash
openclaw update --dry-run
openclaw update --channel beta --dry-run
openclaw update --tag 2026.3.14 --dry-run
openclaw update --tag 2026.3.22 --dry-run
openclaw update --dry-run --json
```

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/acpx-plugin",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw ACP runtime backend via acpx",
"type": "module",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Amazon Bedrock provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Anthropic provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/bluebubbles",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw BlueBubbles channel plugin",
"type": "module",
"dependencies": {
@@ -10,7 +10,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -43,7 +43,7 @@
"npmSpec": "@openclaw/bluebubbles",
"localPath": "extensions/bluebubbles",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/brave-plugin",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Brave plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/byteplus-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw BytePlus provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/chutes-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Chutes.ai provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/cloudflare-ai-gateway-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Cloudflare AI Gateway provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot-proxy",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Copilot Proxy provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-otel",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw diagnostics OpenTelemetry exporter",
"type": "module",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw diff viewer plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/discord",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Discord channel plugin",
"type": "module",
"dependencies": {
@@ -14,7 +14,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,7 +40,7 @@
"npmSpec": "@openclaw/discord",
"localPath": "extensions/discord",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"bundle": {
"stageRuntimeDependencies": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/elevenlabs-speech",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw ElevenLabs speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/fal-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw fal provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/feishu",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)",
"type": "module",
"dependencies": {
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -42,7 +42,7 @@
"npmSpec": "@openclaw/feishu",
"localPath": "extensions/feishu",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"bundle": {
"stageRuntimeDependencies": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/firecrawl-plugin",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Firecrawl plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/github-copilot-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw GitHub Copilot provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/google-plugin",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Google plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/googlechat",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Google Chat channel plugin",
"type": "module",
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -41,7 +41,7 @@
"npmSpec": "@openclaw/googlechat",
"localPath": "extensions/googlechat",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/huggingface-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Hugging Face provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/imessage",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw iMessage channel plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/irc",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw IRC channel plugin",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"./index.ts"
],
"install": {
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"setupEntry": "./setup-entry.ts",
"channel": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/kilocode-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Kilo Gateway provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/kimi-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Kimi provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/line",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw LINE channel plugin",
"type": "module",
@@ -8,7 +8,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -34,7 +34,7 @@
"npmSpec": "@openclaw/line",
"localPath": "extensions/line",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/llm-task",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw JSON-only LLM task plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/lobster",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
"type": "module",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/matrix",
"version": "2026.3.11",
"version": "2026.3.22",
"description": "OpenClaw Matrix channel plugin",
"type": "module",
"dependencies": {
@@ -15,7 +15,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -41,7 +41,7 @@
"npmSpec": "@openclaw/matrix",
"localPath": "extensions/matrix",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"releaseChecks": {
"rootDependencyMirrorAllowlist": [

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/mattermost",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Mattermost channel plugin",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -36,7 +36,7 @@
"npmSpec": "@openclaw/mattermost",
"localPath": "extensions/mattermost",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
}
}
}

View File

@@ -1,11 +1,11 @@
{
"name": "@openclaw/memory-core",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw core memory search plugin",
"type": "module",
"peerDependencies": {
"openclaw": ">=2026.3.11"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/memory-lancedb",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture",
"type": "module",
"dependencies": {
@@ -16,7 +16,7 @@
"npmSpec": "@openclaw/memory-lancedb",
"localPath": "extensions/memory-lancedb",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/microsoft-speech",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Microsoft speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/minimax-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw MiniMax provider and OAuth plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/mistral-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Mistral provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/modelstudio-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Model Studio provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/moonshot-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Moonshot provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/msteams",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Microsoft Teams channel plugin",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,7 +40,7 @@
"npmSpec": "@openclaw/msteams",
"localPath": "extensions/msteams",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/nextcloud-talk",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Nextcloud Talk channel plugin",
"type": "module",
"dependencies": {
@@ -10,7 +10,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,7 +40,7 @@
"npmSpec": "@openclaw/nextcloud-talk",
"localPath": "extensions/nextcloud-talk",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/nostr",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -37,7 +37,7 @@
"npmSpec": "@openclaw/nostr",
"localPath": "extensions/nostr",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/nvidia-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw NVIDIA provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/ollama-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Ollama provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/open-prose",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenProse VM skill pack plugin (slash command + telemetry).",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/openai-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw OpenAI provider plugins",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/opencode-go-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw OpenCode Go provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/opencode-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw OpenCode Zen provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/openrouter-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw OpenRouter provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/openshell-sandbox",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw OpenShell sandbox backend",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/perplexity-plugin",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Perplexity plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/qianfan-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Qianfan provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/sglang-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw SGLang provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/signal",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Signal channel plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/slack",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Slack channel plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/synology-chat",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "Synology Chat channel plugin for OpenClaw",
"type": "module",
"dependencies": {
@@ -24,7 +24,7 @@
"npmSpec": "@openclaw/synology-chat",
"localPath": "extensions/synology-chat",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/synthetic-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Synthetic provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/tavily-plugin",
"version": "2026.3.17",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Tavily plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/telegram",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Telegram channel plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/tlon",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Tlon/Urbit channel plugin",
"type": "module",
"dependencies": {
@@ -14,7 +14,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,7 +40,7 @@
"npmSpec": "@openclaw/tlon",
"localPath": "extensions/tlon",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/together-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Together provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/twitch",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Twitch channel plugin",
"type": "module",
"dependencies": {
@@ -14,7 +14,7 @@
"./index.ts"
],
"install": {
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"channel": {
"id": "twitch",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/venice-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Venice provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/vercel-ai-gateway-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Vercel AI Gateway provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/vllm-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw vLLM provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/voice-call",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw voice-call plugin",
"type": "module",
"dependencies": {
@@ -13,7 +13,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -25,7 +25,7 @@
"./index.ts"
],
"install": {
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/volcengine-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Volcengine provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/whatsapp",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw WhatsApp channel plugin",
"type": "module",
"dependencies": {
@@ -10,7 +10,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -36,7 +36,7 @@
"npmSpec": "@openclaw/whatsapp",
"localPath": "extensions/whatsapp",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/xai-plugin",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw xAI plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/xiaomi-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Xiaomi provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/zai-provider",
"version": "2026.3.14",
"version": "2026.3.22",
"private": true,
"description": "OpenClaw Z.AI provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalo",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Zalo channel plugin",
"type": "module",
"dependencies": {
@@ -11,7 +11,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -40,7 +40,7 @@
"npmSpec": "@openclaw/zalo",
"localPath": "extensions/zalo",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/zalouser",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "OpenClaw Zalo Personal Account plugin via native zca-js integration",
"type": "module",
"dependencies": {
@@ -12,7 +12,7 @@
"openclaw": "workspace:*"
},
"peerDependencies": {
"openclaw": ">=2026.3.14"
"openclaw": ">=2026.3.22"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -41,7 +41,7 @@
"npmSpec": "@openclaw/zalouser",
"localPath": "extensions/zalouser",
"defaultChoice": "npm",
"minHostVersion": ">=2026.3.14"
"minHostVersion": ">=2026.3.22"
},
"release": {
"publishToNpm": true

View File

@@ -1,6 +1,6 @@
{
"name": "openclaw",
"version": "2026.3.14",
"version": "2026.3.22",
"description": "Multi-channel AI gateway with extensible messaging integrations",
"keywords": [],
"homepage": "https://github.com/openclaw/openclaw#readme",

View File

@@ -31,7 +31,7 @@ describe("extra-params: OpenAI attribution", () => {
});
it("injects originator and release-based user agent for native OpenAI", () => {
process.env.OPENCLAW_VERSION = "2026.3.14";
process.env.OPENCLAW_VERSION = "2026.3.22";
const { headers } = applyAndCapture({
provider: "openai",
@@ -41,12 +41,12 @@ describe("extra-params: OpenAI attribution", () => {
expect(headers).toEqual({
originator: "openclaw",
"User-Agent": "openclaw/2026.3.14",
"User-Agent": "openclaw/2026.3.22",
});
});
it("overrides caller-supplied OpenAI attribution headers", () => {
process.env.OPENCLAW_VERSION = "2026.3.14";
process.env.OPENCLAW_VERSION = "2026.3.22";
const { headers } = applyAndCapture({
provider: "openai",
@@ -61,13 +61,13 @@ describe("extra-params: OpenAI attribution", () => {
expect(headers).toEqual({
originator: "openclaw",
"User-Agent": "openclaw/2026.3.14",
"User-Agent": "openclaw/2026.3.22",
"X-Custom": "1",
});
});
it("does not inject attribution on non-native OpenAI-compatible base URLs", () => {
process.env.OPENCLAW_VERSION = "2026.3.14";
process.env.OPENCLAW_VERSION = "2026.3.22";
const { headers } = applyAndCapture({
provider: "openai",
@@ -79,7 +79,7 @@ describe("extra-params: OpenAI attribution", () => {
});
it("injects attribution for ChatGPT-backed OpenAI Codex traffic", () => {
process.env.OPENCLAW_VERSION = "2026.3.14";
process.env.OPENCLAW_VERSION = "2026.3.22";
const { headers } = applyAndCapture({
provider: "openai-codex",
@@ -89,7 +89,7 @@ describe("extra-params: OpenAI attribution", () => {
expect(headers).toEqual({
originator: "openclaw",
"User-Agent": "openclaw/2026.3.14",
"User-Agent": "openclaw/2026.3.22",
});
});
});

View File

@@ -20,7 +20,7 @@ describe("provider attribution", () => {
it("returns a documented OpenRouter attribution policy", () => {
const policy = resolveProviderAttributionPolicy("openrouter", {
OPENCLAW_VERSION: "2026.3.14",
OPENCLAW_VERSION: "2026.3.22",
});
expect(policy).toEqual({
@@ -31,7 +31,7 @@ describe("provider attribution", () => {
docsUrl: "https://openrouter.ai/docs/app-attribution",
reviewNote: "Documented app attribution headers. Verified in OpenClaw runtime wrapper.",
product: "OpenClaw",
version: "2026.3.14",
version: "2026.3.22",
headers: {
"HTTP-Referer": "https://openclaw.ai",
"X-OpenRouter-Title": "OpenClaw",
@@ -43,7 +43,7 @@ describe("provider attribution", () => {
it("normalizes aliases when resolving provider headers", () => {
expect(
resolveProviderAttributionHeaders("OpenRouter", {
OPENCLAW_VERSION: "2026.3.14",
OPENCLAW_VERSION: "2026.3.22",
}),
).toEqual({
"HTTP-Referer": "https://openclaw.ai",
@@ -53,7 +53,7 @@ describe("provider attribution", () => {
});
it("returns a hidden-spec OpenAI attribution policy", () => {
expect(resolveProviderAttributionPolicy("openai", { OPENCLAW_VERSION: "2026.3.14" })).toEqual({
expect(resolveProviderAttributionPolicy("openai", { OPENCLAW_VERSION: "2026.3.22" })).toEqual({
provider: "openai",
enabledByDefault: true,
verification: "vendor-hidden-api-spec",
@@ -61,21 +61,21 @@ describe("provider attribution", () => {
reviewNote:
"OpenAI native traffic supports hidden originator/User-Agent attribution. Verified against the Codex wire contract.",
product: "OpenClaw",
version: "2026.3.14",
version: "2026.3.22",
headers: {
originator: "openclaw",
"User-Agent": "openclaw/2026.3.14",
"User-Agent": "openclaw/2026.3.22",
},
});
expect(resolveProviderAttributionHeaders("openai", { OPENCLAW_VERSION: "2026.3.14" })).toEqual({
expect(resolveProviderAttributionHeaders("openai", { OPENCLAW_VERSION: "2026.3.22" })).toEqual({
originator: "openclaw",
"User-Agent": "openclaw/2026.3.14",
"User-Agent": "openclaw/2026.3.22",
});
});
it("returns a hidden-spec OpenAI Codex attribution policy", () => {
expect(
resolveProviderAttributionPolicy("openai-codex", { OPENCLAW_VERSION: "2026.3.14" }),
resolveProviderAttributionPolicy("openai-codex", { OPENCLAW_VERSION: "2026.3.22" }),
).toEqual({
provider: "openai-codex",
enabledByDefault: true,
@@ -84,17 +84,17 @@ describe("provider attribution", () => {
reviewNote:
"OpenAI Codex ChatGPT-backed traffic supports the same hidden originator/User-Agent attribution contract.",
product: "OpenClaw",
version: "2026.3.14",
version: "2026.3.22",
headers: {
originator: "openclaw",
"User-Agent": "openclaw/2026.3.14",
"User-Agent": "openclaw/2026.3.22",
},
});
});
it("lists the current attribution support matrix", () => {
expect(
listProviderAttributionPolicies({ OPENCLAW_VERSION: "2026.3.14" }).map((policy) => [
listProviderAttributionPolicies({ OPENCLAW_VERSION: "2026.3.22" }).map((policy) => [
policy.provider,
policy.enabledByDefault,
policy.verification,

View File

@@ -41,7 +41,7 @@ describe("buildNodeInstallPlan", () => {
});
mocks.renderSystemNodeWarning.mockReturnValue(undefined);
mocks.buildNodeServiceEnvironment.mockReturnValue({
OPENCLAW_SERVICE_VERSION: "2026.3.14",
OPENCLAW_SERVICE_VERSION: "2026.3.22",
});
const plan = await buildNodeInstallPlan({
@@ -53,7 +53,7 @@ describe("buildNodeInstallPlan", () => {
});
expect(plan.environment).toEqual({
OPENCLAW_SERVICE_VERSION: "2026.3.14",
OPENCLAW_SERVICE_VERSION: "2026.3.22",
});
expect(mocks.resolvePreferredNodePath).not.toHaveBeenCalled();
expect(mocks.buildNodeServiceEnvironment).toHaveBeenCalledWith({
@@ -74,7 +74,7 @@ describe("buildNodeInstallPlan", () => {
});
mocks.renderSystemNodeWarning.mockReturnValue(undefined);
mocks.buildNodeServiceEnvironment.mockReturnValue({
OPENCLAW_SERVICE_VERSION: "2026.3.14",
OPENCLAW_SERVICE_VERSION: "2026.3.22",
});
await buildNodeInstallPlan({

View File

@@ -59,8 +59,8 @@ describe("clawhub helpers", () => {
});
it("checks min gateway versions with loose host labels", () => {
expect(satisfiesGatewayMinimum("2026.3.14", "2026.3.0")).toBe(true);
expect(satisfiesGatewayMinimum("OpenClaw 2026.3.14", "2026.3.0")).toBe(true);
expect(satisfiesGatewayMinimum("2026.3.22", "2026.3.0")).toBe(true);
expect(satisfiesGatewayMinimum("OpenClaw 2026.3.22", "2026.3.0")).toBe(true);
expect(satisfiesGatewayMinimum("2026.2.9", "2026.3.0")).toBe(false);
expect(satisfiesGatewayMinimum("unknown", "2026.3.0")).toBe(false);
});

View File

@@ -93,7 +93,7 @@ describe("update global helpers", () => {
expect(isExplicitPackageInstallSpec("beta")).toBe(false);
expect(canResolveRegistryVersionForPackageTarget("latest")).toBe(true);
expect(canResolveRegistryVersionForPackageTarget("2026.3.14")).toBe(true);
expect(canResolveRegistryVersionForPackageTarget("2026.3.22")).toBe(true);
expect(canResolveRegistryVersionForPackageTarget("main")).toBe(false);
expect(canResolveRegistryVersionForPackageTarget("github:openclaw/openclaw#main")).toBe(false);
});

View File

@@ -76,7 +76,7 @@ describe("installPluginFromClawHub", () => {
integrity: "sha256-demo",
});
satisfiesPluginApiRangeMock.mockReturnValue(true);
resolveRuntimeServiceVersionMock.mockReturnValue("2026.3.14");
resolveRuntimeServiceVersionMock.mockReturnValue("2026.3.22");
satisfiesGatewayMinimumMock.mockReturnValue(true);
installPluginFromArchiveMock.mockResolvedValue({
ok: true,

View File

@@ -4,7 +4,7 @@ import { describe, expect, it } from "vitest";
import { isAtLeast, parseSemver } from "../infra/runtime-guard.js";
import { parseMinHostVersionRequirement } from "./min-host-version.js";
const MIN_HOST_VERSION_BASELINE = "2026.3.14";
const MIN_HOST_VERSION_BASELINE = "2026.3.22";
const PLUGIN_MANIFEST_PATHS_REQUIRING_MIN_HOST_VERSION = [
"extensions/bluebubbles/package.json",
"extensions/discord/package.json",

View File

@@ -781,7 +781,7 @@ describe("installPluginFromDir", () => {
});
it("rejects plugins whose minHostVersion is newer than the current host", async () => {
vi.stubEnv("OPENCLAW_VERSION", "2026.3.13");
vi.stubEnv("OPENCLAW_VERSION", "2026.3.21");
const { pluginDir, extensionsDir } = setupInstallPluginFromDirFixture();
const packageJsonPath = path.join(pluginDir, "package.json");
const manifest = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")) as {
@@ -791,7 +791,7 @@ describe("installPluginFromDir", () => {
...manifest.openclaw,
install: {
...manifest.openclaw?.install,
minHostVersion: ">=2026.3.14",
minHostVersion: ">=2026.3.22",
},
};
fs.writeFileSync(packageJsonPath, JSON.stringify(manifest), "utf-8");
@@ -806,7 +806,7 @@ describe("installPluginFromDir", () => {
return;
}
expect(result.code).toBe(PLUGIN_INSTALL_ERROR_CODE.INCOMPATIBLE_HOST_VERSION);
expect(result.error).toContain("requires OpenClaw >=2026.3.14, but this host is 2026.3.13");
expect(result.error).toContain("requires OpenClaw >=2026.3.22, but this host is 2026.3.21");
expect(vi.mocked(runCommandWithTimeout)).not.toHaveBeenCalled();
});
@@ -820,7 +820,7 @@ describe("installPluginFromDir", () => {
...manifest.openclaw,
install: {
...manifest.openclaw?.install,
minHostVersion: "2026.3.14",
minHostVersion: "2026.3.22",
},
};
fs.writeFileSync(packageJsonPath, JSON.stringify(manifest), "utf-8");
@@ -850,7 +850,7 @@ describe("installPluginFromDir", () => {
...manifest.openclaw,
install: {
...manifest.openclaw?.install,
minHostVersion: ">=2026.3.14",
minHostVersion: ">=2026.3.22",
},
};
fs.writeFileSync(packageJsonPath, JSON.stringify(manifest), "utf-8");

View File

@@ -250,7 +250,7 @@ describe("loadPluginManifestRegistry", () => {
const registry = loadPluginManifestRegistry({
cache: false,
env: { OPENCLAW_VERSION: "2026.3.13" },
env: { OPENCLAW_VERSION: "2026.3.21" },
candidates: [
createPluginCandidate({
idHint: "synology-chat",
@@ -260,7 +260,7 @@ describe("loadPluginManifestRegistry", () => {
packageManifest: {
install: {
npmSpec: "@openclaw/synology-chat",
minHostVersion: ">=2026.3.14",
minHostVersion: ">=2026.3.22",
},
},
}),
@@ -270,7 +270,7 @@ describe("loadPluginManifestRegistry", () => {
expect(registry.plugins).toEqual([]);
expect(
registry.diagnostics.some((diag) =>
diag.message.includes("plugin requires OpenClaw >=2026.3.14, but this host is 2026.3.13"),
diag.message.includes("plugin requires OpenClaw >=2026.3.22, but this host is 2026.3.21"),
),
).toBe(true);
});
@@ -290,7 +290,7 @@ describe("loadPluginManifestRegistry", () => {
packageManifest: {
install: {
npmSpec: "@openclaw/synology-chat",
minHostVersion: "2026.3.14",
minHostVersion: "2026.3.22",
},
},
}),
@@ -321,7 +321,7 @@ describe("loadPluginManifestRegistry", () => {
packageManifest: {
install: {
npmSpec: "@openclaw/synology-chat",
minHostVersion: ">=2026.3.14",
minHostVersion: ">=2026.3.22",
},
},
}),
@@ -836,7 +836,7 @@ describe("loadPluginManifestRegistry", () => {
packageManifest: {
install: {
npmSpec: "@openclaw/synology-chat",
minHostVersion: ">=2026.3.14",
minHostVersion: ">=2026.3.22",
},
},
}),
@@ -847,7 +847,7 @@ describe("loadPluginManifestRegistry", () => {
candidates,
env: {
...process.env,
OPENCLAW_VERSION: "2026.3.13",
OPENCLAW_VERSION: "2026.3.21",
},
});
const newerHost = loadPluginManifestRegistry({
@@ -855,17 +855,17 @@ describe("loadPluginManifestRegistry", () => {
candidates,
env: {
...process.env,
OPENCLAW_VERSION: "2026.3.14",
OPENCLAW_VERSION: "2026.3.22",
},
});
expect(olderHost.plugins).toEqual([]);
expect(
olderHost.diagnostics.some((diag) => diag.message.includes("this host is 2026.3.13")),
olderHost.diagnostics.some((diag) => diag.message.includes("this host is 2026.3.21")),
).toBe(true);
expect(newerHost.plugins.some((plugin) => plugin.id === "synology-chat")).toBe(true);
expect(
newerHost.diagnostics.some((diag) => diag.message.includes("this host is 2026.3.13")),
newerHost.diagnostics.some((diag) => diag.message.includes("this host is 2026.3.21")),
).toBe(false);
});
});

View File

@@ -10,7 +10,7 @@ describe("min-host-version", () => {
it("accepts empty metadata", () => {
expect(validateMinHostVersion(undefined)).toBeNull();
expect(parseMinHostVersionRequirement(undefined)).toBeNull();
expect(checkMinHostVersion({ currentVersion: "2026.3.14", minHostVersion: undefined })).toEqual(
expect(checkMinHostVersion({ currentVersion: "2026.3.22", minHostVersion: undefined })).toEqual(
{
ok: true,
requirement: null,
@@ -19,18 +19,18 @@ describe("min-host-version", () => {
});
it("parses semver floors", () => {
expect(parseMinHostVersionRequirement(">=2026.3.14")).toEqual({
raw: ">=2026.3.14",
minimumLabel: "2026.3.14",
expect(parseMinHostVersionRequirement(">=2026.3.22")).toEqual({
raw: ">=2026.3.22",
minimumLabel: "2026.3.22",
});
});
it("rejects invalid floor syntax", () => {
expect(validateMinHostVersion("2026.3.14")).toBe(MIN_HOST_VERSION_FORMAT);
expect(validateMinHostVersion("2026.3.22")).toBe(MIN_HOST_VERSION_FORMAT);
expect(validateMinHostVersion(123)).toBe(MIN_HOST_VERSION_FORMAT);
expect(validateMinHostVersion(">=2026.3.14 garbage")).toBe(MIN_HOST_VERSION_FORMAT);
expect(validateMinHostVersion(">=2026.3.22 garbage")).toBe(MIN_HOST_VERSION_FORMAT);
expect(
checkMinHostVersion({ currentVersion: "2026.3.14", minHostVersion: "2026.3.14" }),
checkMinHostVersion({ currentVersion: "2026.3.22", minHostVersion: "2026.3.22" }),
).toEqual({
ok: false,
kind: "invalid",
@@ -39,7 +39,7 @@ describe("min-host-version", () => {
});
it("treats non-string host floor metadata as invalid instead of throwing", () => {
expect(checkMinHostVersion({ currentVersion: "2026.3.14", minHostVersion: 123 })).toEqual({
expect(checkMinHostVersion({ currentVersion: "2026.3.22", minHostVersion: 123 })).toEqual({
ok: false,
kind: "invalid",
error: MIN_HOST_VERSION_FORMAT,
@@ -48,48 +48,48 @@ describe("min-host-version", () => {
it("reports unknown host versions distinctly", () => {
expect(
checkMinHostVersion({ currentVersion: "unknown", minHostVersion: ">=2026.3.14" }),
checkMinHostVersion({ currentVersion: "unknown", minHostVersion: ">=2026.3.22" }),
).toEqual({
ok: false,
kind: "unknown_host_version",
requirement: {
raw: ">=2026.3.14",
minimumLabel: "2026.3.14",
raw: ">=2026.3.22",
minimumLabel: "2026.3.22",
},
});
});
it("reports incompatible hosts", () => {
expect(
checkMinHostVersion({ currentVersion: "2026.3.13", minHostVersion: ">=2026.3.14" }),
checkMinHostVersion({ currentVersion: "2026.3.21", minHostVersion: ">=2026.3.22" }),
).toEqual({
ok: false,
kind: "incompatible",
currentVersion: "2026.3.13",
currentVersion: "2026.3.21",
requirement: {
raw: ">=2026.3.14",
minimumLabel: "2026.3.14",
raw: ">=2026.3.22",
minimumLabel: "2026.3.22",
},
});
});
it("accepts equal or newer hosts", () => {
expect(
checkMinHostVersion({ currentVersion: "2026.3.14", minHostVersion: ">=2026.3.14" }),
checkMinHostVersion({ currentVersion: "2026.3.22", minHostVersion: ">=2026.3.22" }),
).toEqual({
ok: true,
requirement: {
raw: ">=2026.3.14",
minimumLabel: "2026.3.14",
raw: ">=2026.3.22",
minimumLabel: "2026.3.22",
},
});
expect(
checkMinHostVersion({ currentVersion: "2026.4.0", minHostVersion: ">=2026.3.14" }),
checkMinHostVersion({ currentVersion: "2026.4.0", minHostVersion: ">=2026.3.22" }),
).toEqual({
ok: true,
requirement: {
raw: ">=2026.3.14",
minimumLabel: "2026.3.14",
raw: ">=2026.3.22",
minimumLabel: "2026.3.22",
},
});
});