mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-20 05:31:30 +00:00
build: bump version to 2026.3.22
This commit is contained in:
2
.github/workflows/docker-release.yml
vendored
2
.github/workflows/docker-release.yml
vendored
@@ -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
|
||||
|
||||
|
||||
2
.github/workflows/openclaw-npm-release.yml
vendored
2
.github/workflows/openclaw-npm-release.yml
vendored
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/brave-plugin",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Brave plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/diagnostics-otel",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"description": "OpenClaw diagnostics OpenTelemetry exporter",
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/diffs",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw diff viewer plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/firecrawl-plugin",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Firecrawl plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/google-plugin",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Google plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/imessage",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw iMessage channel plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/perplexity-plugin",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Perplexity plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/signal",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Signal channel plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/slack",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Slack channel plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/tavily-plugin",
|
||||
"version": "2026.3.17",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Tavily plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/telegram",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw Telegram channel plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@openclaw/xai-plugin",
|
||||
"version": "2026.3.14",
|
||||
"version": "2026.3.22",
|
||||
"private": true,
|
||||
"description": "OpenClaw xAI plugin",
|
||||
"type": "module",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user